Skip to content

feat(ai, openai-base): add wrapFetch to chat(), onConfig, and the text adapters - #1680

Merged
AlemTuzlak merged 4 commits into
mainfrom
feat/wrap-fetch
Oct 9, 2026
Merged

AlemTuzlak merged 4 commits into
mainfrom
feat/wrap-fetch

Conversation

@AlemTuzlak

@AlemTuzlak AlemTuzlak commented Oct 9, 2026 •

Copy link
Copy Markdown
Contributor

You can now change the HTTP requests of a model call without building your own client. wrapFetch takes the next fetch and returns a new one, so it can add headers, change the URL, log, or read the response. Set it on chat(), or return it from a middleware onConfig for one call. Wrappers chain.

This PR is split out of #1555.

🎯 Changes

  • @tanstack/ai:
    • New wrapFetch on chat(), on ChatMiddlewareConfig, and on TextOptions, typed by the new FetchWrapper type.
    • A new mergeConfig step in the middleware runner chains a middleware wrapper inside the earlier ones, so it does not replace them.
    • A middleware wrapper lasts one model call.
  • openai-base: both base adapters wrap the fetch that the adapter gave its client. They do not read a private SDK field. This covers OpenAI, the OpenAI-compatible adapters, Grok, Groq, BytePlus, LLM Gateway, Lovable, Vercel AI Gateway, Cloudflare REST, and the Bedrock Chat Completions and Responses APIs.
  • Anthropic, Mistral, Ollama, and OpenRouter send their requests through it too.
  • Ignored:
    • Gemini, Vertex, Bedrock Converse, and the CLI-style adapters.
    • Anthropic and Ollama, when you inject your own client.
    • Each adapter page says which case applies.
  • Azure (feat(ai-openai): add the azureOpenaiText Responses adapter #1681, now on main) works through the openai-base path. The SDK's withOptions copy keeps apiVersion, so Azure needs no override. Two Azure cases in tests/wrap-fetch-wire.test.ts guard this.
  • Not in this PR: native compact(), and the Copilot and Codex recipes.
  • This branch merges main at 39e23c0b. The merge fixes a conflict in the Anthropic constructor with feat(ai-anthropic): choose the credential kind with auth, and read the environment only in anthropicText #1688. The adapter keeps the auth setup from feat(ai-anthropic): choose the credential kind with auth, and read the environment only in anthropicText #1688 and stores the SDK client for wrapFetch. A new test checks that auth: 'bearer' stays on the per-call client: Authorization: Bearer, and no x-api-key.
  • Docs:
    • A wrapFetch row and a new "Change the HTTP requests of a call" section in advanced/middleware.md.
    • One line on 22 adapter pages: supported, partial, or ignored.
  • Changeset: minor for @tanstack/ai and openai-base, patch for 8 adapter packages.

✅ Checklist

  • I have followed the steps in the Contributing guide.
  • I have tested code changes locally with pnpm run test:pr, or these tests do not apply to this pull request.
  • I fully understand the code in this pull request, including any code generated with AI assistance.
  • Docs: I updated docs/ for this change, or this change is not user-facing.
  • Changeset: I added a changeset (pnpm changeset), or this PR does not change a published package.

🚀 Release Impact

  • This change affects published code, and I have generated a changeset.
  • This change is docs/CI/dev-only (no release).

Testing

Commands run

  • vitest run after the merge with main (39e23c0b): ai 2102, openai-base 284, ai-openai 359, ai-anthropic 224, ai-mistral 72, ai-ollama 61, ai-openrouter 266, ai-bedrock 124, ai-cloudflare 27, ai-grok 158, ai-groq 41, ai-byteplus 299, ai-llmgateway 16, ai-lovable 52, ai-vercel-gateway 39. All pass, and tsc is clean in each of these packages.
  • A wrapFetch wire test passes in all 14 packages that send requests through it.
  • test:types and test:oxlint in all 15 changed packages: both pass.
  • pnpm test:docs: no broken links.
  • Not run locally: pnpm test:pr and the E2E suite. CI runs them.

Manual test

  1. Run pnpm --dir packages/ai exec vitest run tests/wrap-fetch.test.ts.
  2. Check the cases:
    • The chat() wrapper sees each call.
    • A middleware wrapper runs inside it for one call only.
    • The same function is not wrapped two times.
  3. Pick one adapter and run its wire test, for example pnpm --dir packages/ai-mistral exec vitest run tests/wrap-fetch-wire.test.ts.

How this PR makes testing easy

  • A core unit test plus one wire test per adapter package.
  • New E2E spec wrap-fetch-wire.spec.ts, with route api.wrap-fetch-wire.ts. It checks that the request to aimock carries the x-wrap-fetch header that the wrapper added.

Risk / rollback

  • Low when wrapFetch is not set. The requests do not change.
  • The openai-base constructors now pass options.fetch along. A third-party subclass that does not pass its own fetch gets the global fetch wrapped.
  • In Cloudflare binding mode, the wrapper runs, but the binding does not send the changed URL or headers.

To undo, revert this PR.

Public API change

Before

// build your own client with a custom fetch, per adapter

After

chat({
  adapter,
  messages,
  wrapFetch: (next) => (input, init) => {
    const headers = new Headers(init?.headers)
    headers.set('x-trace-id', traceId)
    return next(input, { ...init, headers })
  },
})

Summary by CodeRabbit

  • New Features
    • Added wrapFetch support for adding request headers, logging, and modifying HTTP requests for supported model adapters.
    • Configure wrappers for all calls or apply them through middleware to a single model call. Wrappers chain in order and also apply to structured-output requests.
  • Documentation
    • Added guidance on adapter support and limitations. Some adapters or custom-client configurations do not use wrapFetch; behavior varies by provider.

…t adapters

A wrapper gets the next fetch and gives back a new one, so a caller can change the URL, headers, request, or response of each model call. The middleware wrapper chains inside the chat() wrapper and lasts for one call. The openai-base adapters wrap the fetch that the adapter gave its client. Anthropic, Mistral, Ollama, and OpenRouter build a per-call client with the wrapped fetch.
@changeset-bot

changeset-bot Bot commented Oct 9, 2026 •

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 40d06a0

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 51 packages
Name Type
@tanstack/ai Minor
@tanstack/openai-base Minor
@tanstack/ai-openai Patch
@tanstack/ai-anthropic Patch
@tanstack/ai-bedrock Patch
@tanstack/ai-cloudflare Patch
@tanstack/ai-grok Patch
@tanstack/ai-mistral Patch
@tanstack/ai-ollama Patch
@tanstack/ai-openrouter Patch
@tanstack/ai-acp Patch
@tanstack/ai-angular Patch
@tanstack/ai-byteplus Patch
@tanstack/ai-claude-code Patch
@tanstack/ai-client Patch
@tanstack/ai-code-mode-snippets Patch
@tanstack/ai-code-mode Patch
@tanstack/ai-codex Patch
@tanstack/ai-cohere Patch
@tanstack/ai-compaction Patch
@tanstack/ai-devtools-core Patch
@tanstack/ai-durable-stream Patch
@tanstack/ai-elevenlabs Patch
@tanstack/ai-fal Patch
@tanstack/ai-gemini Patch
@tanstack/ai-grok-build Patch
@tanstack/ai-groq Patch
@tanstack/ai-llmgateway Patch
@tanstack/ai-lovable Patch
@tanstack/ai-mcp Patch
@tanstack/ai-memory Patch
@tanstack/ai-octane Patch
@tanstack/ai-ollaya Patch
@tanstack/ai-opencode Patch
@tanstack/ai-perplexity Patch
@tanstack/ai-persistence Patch
@tanstack/ai-preact Patch
@tanstack/ai-react Patch
@tanstack/ai-reactor Patch
@tanstack/ai-remix Patch
@tanstack/ai-sandbox-cloudflare Patch
@tanstack/ai-sandbox Patch
@tanstack/ai-skills Patch
@tanstack/ai-solid Patch
@tanstack/ai-svelte Patch
@tanstack/ai-typesafe Patch
@tanstack/ai-vercel-gateway Patch
@tanstack/ai-vertex Patch
@tanstack/ai-vue Patch
@tanstack/ai-worldlabs Patch
ag-ui Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@coderabbitai

coderabbitai Bot commented Oct 9, 2026 •

Copy link
Copy Markdown
Contributor

Review in Change Stack →

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration
  • Configuration used: Repository: TanStack/ai/.coderabbit.yaml
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 39696f90-965d-442b-b436-cae47a5636a7

📥 Commits

Reviewing files that changed from the base of the PR and between c6b9b85 and 40d06a0.


📒 Files selected for processing (16)
  • docs/adapters/anthropic.md
  • docs/adapters/claude-code.md
  • docs/adapters/openai.md
  • docs/config.json
  • packages/ai-anthropic/src/adapters/text.ts
  • packages/ai-anthropic/tests/wrap-fetch-wire.test.ts
  • packages/ai-grok/src/adapters/text.ts
  • packages/ai-mistral/src/adapters/text.ts
  • packages/ai-openai/tests/wrap-fetch-wire.test.ts
  • packages/ai-openrouter/src/adapters/responses-text.ts
  • packages/ai-openrouter/src/adapters/text.ts
  • packages/ai/src/activities/chat/middleware/compose.ts
  • packages/ai/src/types.ts
  • packages/openai-base/src/adapters/chat-completions-text.ts
  • packages/openai-base/src/adapters/responses-text.ts
  • testing/e2e/src/routeTree.gen.ts

🚧 Files skipped from review as they are similar to previous changes (4)
  • docs/adapters/anthropic.md
  • docs/adapters/claude-code.md
  • docs/adapters/openai.md
  • docs/config.json

Included review availability: This review used your included allowance. Your plan provides up to 8 included reviews per hour; 3 remain after this review.



📝 Walkthrough

Walkthrough

The pull request adds wrapFetch to chat options and middleware, composes wrappers for model calls, and wires them into supported adapters. It adds adapter-level and end-to-end tests, plus documentation of adapter support and limitations.

Changes

Per-call fetch wrapping

Layer / File(s) Summary
Wrapper API and middleware composition
packages/ai/src/types.ts, packages/ai/src/activities/chat/*, packages/ai/tests/wrap-fetch.test.ts, docs/advanced/middleware.md, .changeset/wrap-fetch.md
Adds the FetchWrapper type and wrapFetch options for chat and middleware. The engine passes composed wrappers to model calls. Middleware wrappers apply to the next call and chain inside the chat-level wrapper.
SDK-backed adapter wiring
packages/openai-base/*, packages/ai-openai/src/compatible/*, packages/ai-bedrock/*, packages/ai-cloudflare/*, packages/ai-grok/*, packages/ai-byteplus/tests/*, packages/ai-groq/tests/*, packages/ai-llmgateway/tests/*, packages/ai-lovable/tests/*, packages/ai-vercel-gateway/tests/*, docs/adapters/*, docs/config.json
Passes the configured fetch to per-call OpenAI SDK clients in the relevant adapters. Tests check wrapper-added headers and unwrapped requests. Adapter documentation describes support and exceptions; documentation update dates also change.
Custom clients and end-to-end coverage
packages/ai-anthropic/*, packages/ai-mistral/*, packages/ai-ollama/*, packages/ai-openrouter/*, testing/e2e/src/routes/api.wrap-fetch-wire.ts, testing/e2e/src/routeTree.gen.ts, testing/e2e/tests/wrap-fetch-wire.spec.ts
Adds per-call wrapper handling to Anthropic, Mistral, Ollama, and OpenRouter integrations. Adds an end-to-end route and test that check the wrapper header in the provider journal.

Priority: ➖ Normal

Estimated code review effort: 4 (Complex) | ~60 minutes

Change: Feature

Sequence Diagram(s)

sequenceDiagram
  participant TextEngine
  participant ChatMiddleware
  participant TextAdapter
  participant ConfiguredFetch
  TextEngine->>ChatMiddleware: Apply onConfig wrapper
  ChatMiddleware->>TextEngine: Return composed config
  TextEngine->>TextAdapter: Pass wrapper to model call
  TextAdapter->>ConfiguredFetch: Send request through wrapped fetch
Loading

Merge Risk: ⚪ Minimal · up to 40d06

No concrete merge-blocking regression is established. The change is ready to merge after normal checks.

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Docstring Coverage Passed Docstring coverage is 85.19% which is sufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 27 functions across 39 files. (4 skipped: 4…
Linked Issues check Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check Passed Check skipped because no linked issues were found for this pull request.
Title check Passed The title clearly and concisely describes the main change: adding wrapFetch support to chat(), onConfig, and text adapters.
Description check Passed The description follows the required template, explains the implementation and scope, documents supported and ignored adapters, includes testing and risk details, and provides a changeset and release-…


✨ Finishing Touches
📝 Generate docstrings
  • Commit to this branch
  • Create a new PR

🧪 Generate unit tests (beta)
  • Commit to this branch
  • Create a new PR


  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@nx-cloud

nx-cloud Bot commented Oct 9, 2026 •

Copy link
Copy Markdown

View your CI Pipeline Execution ↗ for commit 40d06a0

Command Status Duration Result
nx affected --targets=test:sherif,test:knip,tes... ✅ Succeeded 8m 35s View ↗
nx run-many --targets=test:coverage --projects=... ✅ Succeeded 2s View ↗
nx run-many --targets=build --exclude=examples/... ✅ Succeeded 2m 19s View ↗

☁️ Nx Cloud last updated this comment at 2026-10-09 11:27:26 UTC

@pkg-pr-new

pkg-pr-new Bot commented Oct 9, 2026 •

Copy link
Copy Markdown

Open in StackBlitz

@tanstack/ai

npm i https://pkg.pr.new/@tanstack/ai@1680

@tanstack/ai-acp

npm i https://pkg.pr.new/@tanstack/ai-acp@1680

@tanstack/ai-angular

npm i https://pkg.pr.new/@tanstack/ai-angular@1680

@tanstack/ai-anthropic

npm i https://pkg.pr.new/@tanstack/ai-anthropic@1680

@tanstack/ai-bedrock

npm i https://pkg.pr.new/@tanstack/ai-bedrock@1680

@tanstack/ai-byteplus

npm i https://pkg.pr.new/@tanstack/ai-byteplus@1680

@tanstack/ai-claude-code

npm i https://pkg.pr.new/@tanstack/ai-claude-code@1680

@tanstack/ai-client

npm i https://pkg.pr.new/@tanstack/ai-client@1680

@tanstack/ai-cloudflare

npm i https://pkg.pr.new/@tanstack/ai-cloudflare@1680

@tanstack/ai-code-mode

npm i https://pkg.pr.new/@tanstack/ai-code-mode@1680

@tanstack/ai-code-mode-snippets

npm i https://pkg.pr.new/@tanstack/ai-code-mode-snippets@1680

@tanstack/ai-codex

npm i https://pkg.pr.new/@tanstack/ai-codex@1680

@tanstack/ai-cohere

npm i https://pkg.pr.new/@tanstack/ai-cohere@1680

@tanstack/ai-compaction

npm i https://pkg.pr.new/@tanstack/ai-compaction@1680

@tanstack/ai-devtools-core

npm i https://pkg.pr.new/@tanstack/ai-devtools-core@1680

@tanstack/ai-durable-stream

npm i https://pkg.pr.new/@tanstack/ai-durable-stream@1680

@tanstack/ai-elevenlabs

npm i https://pkg.pr.new/@tanstack/ai-elevenlabs@1680

@tanstack/ai-event-client

npm i https://pkg.pr.new/@tanstack/ai-event-client@1680

@tanstack/ai-fal

npm i https://pkg.pr.new/@tanstack/ai-fal@1680

@tanstack/ai-gemini

npm i https://pkg.pr.new/@tanstack/ai-gemini@1680

@tanstack/ai-grok

npm i https://pkg.pr.new/@tanstack/ai-grok@1680

@tanstack/ai-grok-build

npm i https://pkg.pr.new/@tanstack/ai-grok-build@1680

@tanstack/ai-groq

npm i https://pkg.pr.new/@tanstack/ai-groq@1680

@tanstack/ai-isolate-cloudflare

npm i https://pkg.pr.new/@tanstack/ai-isolate-cloudflare@1680

@tanstack/ai-isolate-daytona

npm i https://pkg.pr.new/@tanstack/ai-isolate-daytona@1680

@tanstack/ai-isolate-e2b

npm i https://pkg.pr.new/@tanstack/ai-isolate-e2b@1680

@tanstack/ai-isolate-node

npm i https://pkg.pr.new/@tanstack/ai-isolate-node@1680

@tanstack/ai-isolate-quickjs

npm i https://pkg.pr.new/@tanstack/ai-isolate-quickjs@1680

@tanstack/ai-isolate-quickjs-bun

npm i https://pkg.pr.new/@tanstack/ai-isolate-quickjs-bun@1680

@tanstack/ai-llmgateway

npm i https://pkg.pr.new/@tanstack/ai-llmgateway@1680

@tanstack/ai-lovable

npm i https://pkg.pr.new/@tanstack/ai-lovable@1680

@tanstack/ai-mcp

npm i https://pkg.pr.new/@tanstack/ai-mcp@1680

@tanstack/ai-memory

npm i https://pkg.pr.new/@tanstack/ai-memory@1680

@tanstack/ai-mistral

npm i https://pkg.pr.new/@tanstack/ai-mistral@1680

@tanstack/ai-octane

npm i https://pkg.pr.new/@tanstack/ai-octane@1680

@tanstack/ai-ollama

npm i https://pkg.pr.new/@tanstack/ai-ollama@1680

@tanstack/ai-ollaya

npm i https://pkg.pr.new/@tanstack/ai-ollaya@1680

@tanstack/ai-openai

npm i https://pkg.pr.new/@tanstack/ai-openai@1680

@tanstack/ai-opencode

npm i https://pkg.pr.new/@tanstack/ai-opencode@1680

@tanstack/ai-openrouter

npm i https://pkg.pr.new/@tanstack/ai-openrouter@1680

@tanstack/ai-perplexity

npm i https://pkg.pr.new/@tanstack/ai-perplexity@1680

@tanstack/ai-persistence

npm i https://pkg.pr.new/@tanstack/ai-persistence@1680

@tanstack/ai-preact

npm i https://pkg.pr.new/@tanstack/ai-preact@1680

@tanstack/ai-react

npm i https://pkg.pr.new/@tanstack/ai-react@1680

@tanstack/ai-react-ui

npm i https://pkg.pr.new/@tanstack/ai-react-ui@1680

@tanstack/ai-reactor

npm i https://pkg.pr.new/@tanstack/ai-reactor@1680

@tanstack/ai-remix

npm i https://pkg.pr.new/@tanstack/ai-remix@1680

@tanstack/ai-sandbox

npm i https://pkg.pr.new/@tanstack/ai-sandbox@1680

@tanstack/ai-sandbox-blaxel

npm i https://pkg.pr.new/@tanstack/ai-sandbox-blaxel@1680

@tanstack/ai-sandbox-boxd

npm i https://pkg.pr.new/@tanstack/ai-sandbox-boxd@1680

@tanstack/ai-sandbox-cloudflare

npm i https://pkg.pr.new/@tanstack/ai-sandbox-cloudflare@1680

@tanstack/ai-sandbox-daytona

npm i https://pkg.pr.new/@tanstack/ai-sandbox-daytona@1680

@tanstack/ai-sandbox-docker

npm i https://pkg.pr.new/@tanstack/ai-sandbox-docker@1680

@tanstack/ai-sandbox-e2b

npm i https://pkg.pr.new/@tanstack/ai-sandbox-e2b@1680

@tanstack/ai-sandbox-local-process

npm i https://pkg.pr.new/@tanstack/ai-sandbox-local-process@1680

@tanstack/ai-sandbox-railway

npm i https://pkg.pr.new/@tanstack/ai-sandbox-railway@1680

@tanstack/ai-sandbox-sprites

npm i https://pkg.pr.new/@tanstack/ai-sandbox-sprites@1680

@tanstack/ai-sandbox-upstash-box

npm i https://pkg.pr.new/@tanstack/ai-sandbox-upstash-box@1680

@tanstack/ai-sandbox-vercel

npm i https://pkg.pr.new/@tanstack/ai-sandbox-vercel@1680

@tanstack/ai-skills

npm i https://pkg.pr.new/@tanstack/ai-skills@1680

@tanstack/ai-solid

npm i https://pkg.pr.new/@tanstack/ai-solid@1680

@tanstack/ai-solid-ui

npm i https://pkg.pr.new/@tanstack/ai-solid-ui@1680

@tanstack/ai-svelte

npm i https://pkg.pr.new/@tanstack/ai-svelte@1680

@tanstack/ai-typesafe

npm i https://pkg.pr.new/@tanstack/ai-typesafe@1680

@tanstack/ai-utils

npm i https://pkg.pr.new/@tanstack/ai-utils@1680

@tanstack/ai-vercel-gateway

npm i https://pkg.pr.new/@tanstack/ai-vercel-gateway@1680

@tanstack/ai-vertex

npm i https://pkg.pr.new/@tanstack/ai-vertex@1680

@tanstack/ai-vue

npm i https://pkg.pr.new/@tanstack/ai-vue@1680

@tanstack/ai-vue-ui

npm i https://pkg.pr.new/@tanstack/ai-vue-ui@1680

@tanstack/ai-worldlabs

npm i https://pkg.pr.new/@tanstack/ai-worldlabs@1680

@tanstack/openai-base

npm i https://pkg.pr.new/@tanstack/openai-base@1680

@tanstack/preact-ai-devtools

npm i https://pkg.pr.new/@tanstack/preact-ai-devtools@1680

@tanstack/react-ai-devtools

npm i https://pkg.pr.new/@tanstack/react-ai-devtools@1680

@tanstack/solid-ai-devtools

npm i https://pkg.pr.new/@tanstack/solid-ai-devtools@1680

@tanstack/svelte-ai-devtools

npm i https://pkg.pr.new/@tanstack/svelte-ai-devtools@1680

commit: 40d06a0

@github-actions

github-actions Bot commented Oct 9, 2026 •

Copy link
Copy Markdown
Contributor

Coverage

✅ Coverage held across 66 compared package(s).

Each package is measured twice in this job — on this PR and on its merge-base with main — and compared. A metric fails only when it is at or above 60% on the merge-base and under 60% on this PR. Other drops are listed but do not fail. Packages your PR doesn't affect are not measured and not listed.

package statements branches functions lines
ai 90.74% (0.00) 83.38% (+0.01) 91.48% (+0.01) 92.43% (+0.01) ok
ai-acp 77.30% (0.00) 64.77% (0.00) 69.17% (0.00) 79.12% (0.00) ok
ai-angular 73.37% (0.00) 60.66% (0.00) 62.14% (0.00) 75.13% (0.00) ok
ai-anthropic 90.32% (+0.08) 82.55% (0.00) 94.38% (+0.07) 90.61% (+0.06) ok
ai-bedrock 86.10% (+0.05) 77.93% (+0.20) 86.40% (0.00) 86.90% (+0.04) ok
ai-byteplus 96.99% (0.00) 91.40% (0.00) 98.23% (0.00) 98.45% (0.00) ok
ai-claude-code 88.31% (0.00) 76.00% (0.00) 86.20% (0.00) 89.89% (0.00) ok
ai-client 86.46% (0.00) 79.22% (0.00) 84.61% (0.00) 88.40% (0.00) ok
ai-cloudflare 83.68% (+0.07) 73.91% (0.00) 83.63% (0.00) 85.08% (+0.06) ok
ai-code-mode 91.71% (0.00) 83.12% (0.00) 86.27% (0.00) 92.63% (0.00) ok
ai-code-mode-snippets 87.13% (0.00) 75.67% (0.00) 91.11% (0.00) 88.39% (0.00) ok
ai-codex 94.20% (0.00) 84.50% (0.00) 88.67% (0.00) 95.31% (0.00) ok
ai-cohere 88.97% (0.00) 88.37% (0.00) 85.71% (0.00) 91.80% (0.00) ok
ai-compaction 95.70% (0.00) 82.35% (0.00) 100.00% (0.00) 97.88% (0.00) ok
ai-devtools 83.13% (0.00) 72.77% (0.00) 87.07% (0.00) 85.22% (0.00) ok
ai-durable-stream 86.70% (0.00) 82.25% (0.00) 92.30% (0.00) 88.72% (0.00) ok
ai-elevenlabs 74.68% (0.00) 69.59% (0.00) 59.13% (0.00) 75.46% (0.00) ok
ai-fal 91.10% (0.00) 82.63% (0.00) 92.40% (0.00) 91.60% (0.00) ok
ai-gemini 65.55% (0.00) 64.41% (0.00) 60.95% (0.00) 66.34% (0.00) ok
ai-grok 48.31% (+0.05) 52.65% (0.00) 55.86% (0.00) 49.12% (+0.05) ok
ai-grok-build 77.70% (0.00) 61.78% (0.00) 76.10% (0.00) 79.42% (0.00) ok
ai-groq 50.22% (0.00) 47.17% (0.00) 64.28% (0.00) 52.33% (0.00) ok
ai-isolate-cloudflare 94.11% (0.00) 70.66% (0.00) 100.00% (0.00) 93.96% (0.00) ok
ai-isolate-daytona 90.25% (0.00) 80.59% (0.00) 100.00% (0.00) 90.15% (0.00) ok
ai-isolate-e2b 92.11% (0.00) 81.48% (-0.74) 97.36% (0.00) 95.05% (0.00) ok
ai-isolate-node 84.00% (0.00) 43.39% (0.00) 100.00% (0.00) 83.78% (0.00) ok
ai-isolate-quickjs 89.07% (0.00) 76.41% (0.00) 90.90% (0.00) 90.30% (0.00) ok
ai-isolate-quickjs-bun 7.76% (0.00) 8.08% (0.00) 5.00% (0.00) 8.33% (0.00) ok
ai-llmgateway 97.05% (0.00) 100.00% (0.00) 87.50% (0.00) 97.05% (0.00) ok
ai-lovable 72.35% (0.00) 55.63% (0.00) 84.61% (0.00) 73.08% (0.00) ok
ai-mcp 96.52% (0.00) 91.68% (0.00) 96.88% (0.00) 98.48% (0.00) ok
ai-memory 73.87% (0.00) 52.70% (0.00) 79.74% (0.00) 76.04% (0.00) ok
ai-mistral 83.81% (+0.33) 75.20% (+1.45) 92.95% (+0.10) 84.29% (+0.35) ok
ai-octane 90.56% (0.00) 71.48% (0.00) 86.60% (0.00) 90.75% (0.00) ok
ai-ollama 32.91% (+0.41) 72.48% (+0.90) 90.00% (+0.35) 32.78% (+0.43) ok
ai-ollaya 86.84% (0.00) 89.28% (0.00) 85.71% (0.00) 91.66% (0.00) ok
ai-openai 63.37% (0.00) 62.91% (+0.13) 64.43% (0.00) 63.89% (0.00) ok
ai-opencode 66.33% (0.00) 56.77% (0.00) 61.62% (0.00) 68.68% (0.00) ok
ai-openrouter 85.12% (+0.08) 67.97% (+0.18) 89.24% (+0.21) 86.97% (+0.07) ok
ai-perplexity 91.34% (0.00) 90.43% (0.00) 100.00% (0.00) 93.87% (0.00) ok
ai-persistence 90.76% (0.00) 79.80% (0.00) 97.32% (0.00) 94.33% (0.00) ok
ai-preact 87.80% (0.00) 75.87% (0.00) 88.73% (0.00) 89.66% (0.00) ok
ai-react 73.13% (0.00) 52.16% (0.00) 75.54% (0.00) 73.08% (0.00) ok
ai-reactor 94.91% (0.00) 83.33% (0.00) 93.33% (0.00) 96.55% (0.00) ok
ai-remix 39.39% (0.00) 23.35% (0.00) 35.51% (0.00) 41.58% (0.00) ok
ai-sandbox 77.45% (0.00) 82.80% (0.00) 74.47% (0.00) 77.97% (0.00) ok
ai-sandbox-blaxel 87.64% (0.00) 77.18% (0.00) 82.26% (0.00) 89.71% (0.00) ok
ai-sandbox-boxd 95.86% (0.00) 87.12% (0.00) 95.31% (0.00) 98.17% (0.00) ok
ai-sandbox-cloudflare 67.91% (0.00) 57.47% (0.00) 71.79% (0.00) 69.62% (0.00) ok
ai-sandbox-daytona 82.70% (0.00) 81.89% (0.00) 67.14% (0.00) 85.18% (0.00) ok
ai-sandbox-docker 80.15% (0.00) 71.49% (0.00) 77.38% (0.00) 82.13% (0.00) ok
ai-sandbox-e2b 94.42% (0.00) 88.97% (0.00) 93.24% (0.00) 98.63% (0.00) ok
ai-sandbox-local-process 68.00% (0.00) 53.59% (0.00) 75.86% (0.00) 68.88% (0.00) ok
ai-sandbox-railway 94.75% (0.00) 92.68% (0.00) 90.90% (0.00) 97.59% (0.00) ok
ai-sandbox-sprites 73.23% (0.00) 59.70% (0.00) 73.83% (0.00) 76.17% (0.00) ok
ai-sandbox-upstash-box 94.82% (0.00) 91.52% (0.00) 91.04% (0.00) 97.76% (0.00) ok
ai-sandbox-vercel 44.67% (0.00) 38.18% (0.00) 35.18% (0.00) 45.76% (0.00) ok
ai-skills 80.38% (0.00) 64.05% (0.00) 84.86% (0.00) 82.44% (0.00) ok
ai-solid 53.73% (0.00) 40.45% (0.00) 51.94% (0.00) 57.78% (0.00) ok
ai-svelte 70.44% (0.00) 54.50% (0.00) 69.86% (0.00) 75.99% (0.00) ok
ai-typesafe 78.04% (0.00) 84.61% (0.00) 66.66% (0.00) 82.05% (0.00) ok
ai-vercel-gateway 69.45% (0.00) 52.98% (0.00) 84.78% (0.00) 73.18% (0.00) ok
ai-vertex 96.77% (0.00) 97.22% (0.00) 100.00% (0.00) 96.77% (0.00) ok
ai-vue 60.70% (0.00) 36.17% (0.00) 62.00% (0.00) 62.95% (0.00) ok
ai-worldlabs 79.62% (0.00) 71.50% (0.00) 91.42% (0.00) 82.66% (0.00) ok
openai-base 85.65% (-0.03) 71.33% (+0.02) 92.07% (-0.96) 87.91% (-0.05) ok

# Conflicts:
#	packages/ai-anthropic/src/adapters/text.ts
# Conflicts:
#	packages/ai-anthropic/src/adapters/text.ts
@AlemTuzlak
AlemTuzlak enabled auto-merge (squash) October 9, 2026 11:19
@AlemTuzlak
AlemTuzlak merged commit 377262c into main Oct 9, 2026
15 checks passed
@AlemTuzlak
AlemTuzlak deleted the feat/wrap-fetch branch October 9, 2026 11:27
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

waiting-on: maintainer The ball is in the maintainers’ court

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants