Skip to content

Commit 122eae6

Browse files
Merge pull request #395 from cloudflare/changeset-release/main
Version Packages
2 parents ed1b368 + 896137c commit 122eae6

6 files changed

Lines changed: 164 additions & 149 deletions

File tree

.changeset/bright-doors-march.md

Lines changed: 0 additions & 48 deletions
This file was deleted.

.changeset/wide-knives-strive.md

Lines changed: 0 additions & 45 deletions
This file was deleted.

packages/tanstack-ai/CHANGELOG.md

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
# @cloudflare/tanstack-ai
2+
3+
## 0.1.0
4+
5+
### Minor Changes
6+
7+
- [#389](https://github.com/cloudflare/ai/pull/389) [`a4b756e`](https://github.com/cloudflare/ai/commit/a4b756ebce97c4fa3e376293b0100d7784a15654) Thanks [@vaibhavshn](https://github.com/vaibhavshn)! - Add `@cloudflare/tanstack-ai` — adapters for using TanStack AI with Cloudflare Workers AI and AI Gateway.
8+
9+
### Workers AI adapters
10+
11+
All Workers AI adapters support four configuration modes: plain binding (`env.AI`), plain REST (account ID + API key), AI Gateway binding (`env.AI.gateway(id)`), and AI Gateway REST (account ID + gateway ID).
12+
13+
- **Chat** (`createWorkersAiChat`) — Streaming chat completions via the OpenAI-compatible API. Includes tool calling with full round-trip support, structured output via `json_schema`, and reasoning text streaming (`STEP_STARTED`/`STEP_FINISHED` AG-UI events) for models like QwQ, DeepSeek R1, and Kimi K2.5. A custom fetch shim translates OpenAI SDK calls to `env.AI.run()` for binding mode, with a stream transformer that handles both Workers AI native format and OpenAI-compatible format.
14+
- **Image generation** (`createWorkersAiImage`) — Stable Diffusion and other text-to-image models.
15+
- **Transcription** (`createWorkersAiTranscription`) — Speech-to-text via Whisper and Deepgram Nova-3.
16+
- **Text-to-speech** (`createWorkersAiTts`) — Audio generation via Deepgram Aura-1.
17+
- **Summarization** (`createWorkersAiSummarize`) — Text summarization via BART-large-CNN.
18+
- **Embeddings** (`createWorkersAiEmbedding`) — Text embeddings (implemented but not yet exported, pending TanStack AI's `BaseEmbeddingAdapter`).
19+
20+
### AI Gateway adapters (third-party providers)
21+
22+
Route requests through Cloudflare AI Gateway for caching, rate limiting, and unified billing. Each adapter injects a custom `fetch` (or `httpOptions` for Gemini) that handles both binding and credential-based gateway configurations.
23+
24+
- **OpenAI** — Chat, summarize, image, transcription, TTS, video (`createOpenAi*`)
25+
- **Anthropic** — Chat, summarize (`createAnthropic*`)
26+
- **Gemini** — Chat, summarize, image, TTS (`createGemini*`). Credentials-only (Google GenAI SDK lacks custom fetch support).
27+
- **Grok** — Chat, summarize, image (`createGrok*`)
28+
- **OpenRouter** — Chat, summarize, image (`createOpenRouter*`). Accepts any model string.
29+
30+
### Utilities
31+
32+
- `createGatewayFetch` — Shared fetch factory that routes requests through AI Gateway (binding or REST), with support for cache control headers (`skipCache`, `cacheTtl`, `customCacheKey`, `metadata`).
33+
- `createWorkersAiBindingFetch` — Fetch shim that makes `env.AI` look like an OpenAI endpoint, including stream transformation and tool call ID sanitization for the binding's strict `[a-zA-Z0-9]{9}` validation.
34+
- Config detection helpers (`isDirectBindingConfig`, `isDirectCredentialsConfig`, `isGatewayConfig`) using structural typing to discriminate `env.AI` from `env.AI.gateway(id)`.
35+
- Shared binary utilities for normalizing Workers AI responses (Uint8Array, ArrayBuffer, ReadableStream, JSON wrapper) to base64.
36+
37+
### Robustness
38+
39+
- Premature stream termination detection — if Workers AI truncates a response or the connection drops (no `finish_reason`), the adapter emits proper closing events so consumers don't hang.
40+
- Graceful non-streaming fallback — if a model returns a complete response despite `stream: true`, the binding shim wraps it into a valid response.
41+
- Deepgram Nova-3 transcription uses raw binary audio via REST (not JSON), automatically detected by model name.
42+
43+
### Testing
44+
45+
- Comprehensive unit tests (186 tests) covering all adapters, config modes, stream transformation, message building, tool calling, reasoning events, premature termination, and public API surface.
46+
- E2E integration tests against real Workers AI APIs (both binding and REST paths) across 12 chat models + 4 transcription models + image/TTS/summarize, validating chat, multi-turn, tool calling, tool round-trips, structured output, reasoning, and all non-chat capabilities.
47+
- Tree-shakeable package exports with per-adapter entry points for ESM and CJS.

packages/tanstack-ai/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@cloudflare/tanstack-ai",
3-
"version": "0.0.0",
3+
"version": "0.1.0",
44
"description": "Use TanStack AI with Cloudflare Workers AI and AI Gateway",
55
"keywords": [
66
"ai",

0 commit comments

Comments
 (0)