Skip to content
Merged
Show file tree
Hide file tree
Changes from 14 commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
b6cb4e1
feat: add new tanstack ai adapters package
vaibhavshn Jan 11, 2026
bd2e19b
feat(tanstack-ai): support all APIs for the existing adapters
vaibhavshn Jan 11, 2026
51ed3e9
docs: add readme for tanstack ai adapters package
vaibhavshn Jan 12, 2026
8a5e2cf
feat: support all gemini adapters
vaibhavshn Jan 12, 2026
2dc3583
feat: support aig headers for cache and metadata
vaibhavshn Jan 12, 2026
d3ad81f
fix(tanstack-ai): update package name
vaibhavshn Jan 30, 2026
ae9b936
Merge branch 'main' into vaibhavshn/tanstack-ai-adapters
vaibhavshn Jan 30, 2026
a4b756e
fix: add changeset for new tanstack ai package
vaibhavshn Jan 30, 2026
b7a46bd
fix(demo): remove tanstack-ai dependency from demo until release
vaibhavshn Jan 30, 2026
a001664
fix: temporarily remove build script and other ci fixes
vaibhavshn Jan 30, 2026
47ced84
feat: include workers-ai chat adapter
vaibhavshn Feb 3, 2026
2389a48
fix: update package-lock
vaibhavshn Feb 3, 2026
3ba1d6c
package: @cloudflare/tanstack-ai
threepointone Feb 8, 2026
41026cb
rename the folder
threepointone Feb 8, 2026
8fd1a40
Merge branch 'main' into vaibhavshn/tanstack-ai-adapters
threepointone Feb 8, 2026
a538c63
Add binding/REST, provider keys & model picker
threepointone Feb 10, 2026
2f4fcab
Adapters, security, and test improvements
threepointone Feb 10, 2026
c93b7fa
Remove ChatTab debug logs; tidy tests
threepointone Feb 10, 2026
dafe088
Refactor UI, adapters, fetcher, and tests
threepointone Feb 10, 2026
8308ace
Merge branch 'vaibhavshn/tanstack-ai-adapters' of https://github.com/…
threepointone Feb 10, 2026
c286f2b
Add demo package-lock; update ai fetcher & tests
threepointone Feb 10, 2026
05f80ec
Update pnpm-lock.yaml
threepointone Feb 10, 2026
222e876
Remove build script and update demo hash
threepointone Feb 10, 2026
e6e5c62
Add local @cloudflare/tanstack-ai dependency
threepointone Feb 10, 2026
c0ff12a
Merge branch 'main' into vaibhavshn/tanstack-ai-adapters
threepointone Feb 11, 2026
321e7ad
move the tanstack demo to examples
threepointone Feb 11, 2026
c58d153
Add Cloudflare Workers AI adapters & demo updates
threepointone Feb 11, 2026
0a972e7
fix: workers-ai-tts expects text, not prompt field and parse result c…
vaibhavshn Feb 11, 2026
ddcca83
fix(tests): update prompt field to text in texts
vaibhavshn Feb 11, 2026
22b0772
Handle premature streams; add TTS & transcription
threepointone Feb 11, 2026
8538cd5
Add transcription, TTS, and reranking support
threepointone Feb 11, 2026
6ca4836
Add @cloudflare/tanstack-ai package & examples
threepointone Feb 11, 2026
95f8b48
Update index.ts
threepointone Feb 11, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/wide-knives-strive.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@cloudflare/tanstack-ai": minor
---

Add @cloudflare/tanstack-ai package for using TanStack AI with Cloudflare Workers AI and AI Gateway. Supports chat via Workers AI (binding and REST), plus routing through AI Gateway for OpenAI, Anthropic, Gemini, Grok, and Workers AI.
3 changes: 3 additions & 0 deletions demos.json
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,9 @@
},
"./demos/hello-world": {
"package_json_hash": "cf9bfe348964ef4129e7a8f20f855d256b77df21"
},
"./demos/tanstack-ai-chat-react": {
"package_json_hash": "55730f8f45e3887464d4334edd3947f6e34d9cb0"
}
}
}
3 changes: 3 additions & 0 deletions demos/tanstack-ai-chat-react/.dev.vars.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
CLOUDFLARE_ACCOUNT_ID=
CLOUDFLARE_AI_GATEWAY_ID=
CLOUDFLARE_API_TOKEN=
31 changes: 31 additions & 0 deletions demos/tanstack-ai-chat-react/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*

node_modules
dist
dist-ssr
*.local

# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea
.DS_Store
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?

# wrangler files
.wrangler
.dev.vars*
!.dev.vars.example
.env*
!.env.example
81 changes: 81 additions & 0 deletions demos/tanstack-ai-chat-react/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
# @cloudflare/tanstack-ai demo

Multi-provider AI demo showcasing [`@cloudflare/tanstack-ai`](../../packages/tanstack-ai). Features **Chat**, **Image Generation**, and **Summarization** across Workers AI and third-party providers (OpenAI, Anthropic, Gemini, Grok) through Cloudflare AI Gateway.

## Features

### Chat

| Provider | Model | Config Mode |
| --- | --- | --- |
| **Llama 4 Scout** | `@cf/meta/llama-4-scout-17b-16e-instruct` | Workers AI direct |
| **Qwen3 30B** | `@cf/qwen/qwen3-30b-a3b-fp8` | Workers AI via AI Gateway |
| **GPT-5.2** | `gpt-5.2` | OpenAI via AI Gateway |
| **Claude Sonnet 4.5** | `claude-sonnet-4-5` | Anthropic via AI Gateway |
| **Gemini 2.5 Flash** | `gemini-2.5-flash` | Gemini via AI Gateway |
| **Grok 4** | `grok-4-1-fast-reasoning` | Grok via AI Gateway |

### Image Generation

| Provider | Model |
| --- | --- |
| **OpenAI** | `gpt-image-1` |
| **Gemini** | `imagen-4.0-generate-001` |
| **Grok** | `grok-2-image-1212` |

### Summarization

| Provider | Model |
| --- | --- |
| **OpenAI** | `gpt-5.2` |
| **Anthropic** | `claude-sonnet-4-5` |
| **Gemini** | `gemini-2.0-flash` |

## Setup

### Option 1: Enter credentials in the UI (recommended for trying it out)

1. Install and run:

```bash
pnpm install
pnpm dev
```

2. Click **"Add API keys"** in the top-right corner and enter your Cloudflare Account ID, AI Gateway ID, and API Token. Credentials are stored in your browser's localStorage and sent as request headers -- never persisted on the server.

### Option 2: Use environment variables (recommended for deploying)

1. Copy the environment variables template:

```bash
cp .dev.vars.example .dev.vars
```

2. Fill in your `.dev.vars`:

```
CLOUDFLARE_ACCOUNT_ID=your-cloudflare-account-id
CLOUDFLARE_AI_GATEWAY_ID=your-ai-gateway-id
CLOUDFLARE_API_TOKEN=your-cloudflare-api-token
```

3. Install and run:

```bash
pnpm install
pnpm dev
```

> When both are present, user-provided credentials (from the UI) take precedence over environment variables.

## What It Demonstrates

- **Workers AI direct** -- `createWorkersAiChat(model, { binding: env.AI })` or REST API with `{ accountId, apiKey }`
- **Workers AI through AI Gateway** -- `createWorkersAiChat(model, { binding: env.AI.gateway(id) })` or credentials mode
- **Third-party providers through AI Gateway** -- `createOpenAiChat`, `createAnthropicChat`, `createGeminiChat`, `createGrokChat`
- **Image generation** -- `generateImage()` with `createOpenAiImage`, `createGeminiImage`, `createGrokImage`
- **Summarization** -- `summarize()` with `createOpenAiSummarize`, `createAnthropicSummarize`, `createGeminiSummarize`
- **Streaming** -- chat providers stream responses via TanStack AI's `chat()` + `toHttpResponse()`
- **Tool calling** -- server-side tools (math, time, web scrape) work across all chat providers
- **Dynamic credentials** -- user-provided API keys passed via request headers, with env var fallback
16 changes: 16 additions & 0 deletions demos/tanstack-ai-chat-react/eslint.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import js from "@eslint/js";
import globals from "globals";
import tseslint from "typescript-eslint";
import { globalIgnores } from "eslint/config";

export default tseslint.config([
globalIgnores(["dist", "worker-configuration.d.ts"]),
{
files: ["**/*.{ts,tsx}"],
extends: [js.configs.recommended, tseslint.configs.recommended],
languageOptions: {
ecmaVersion: 2020,
globals: globals.browser,
},
},
]);
13 changes: 13 additions & 0 deletions demos/tanstack-ai-chat-react/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>@cloudflare/tanstack-ai demo</title>
<script src="https://cdn.jsdelivr.net/npm/@tailwindcss/browser@4"></script>
</head>
<body>
<div id="root"></div>
<script type="module" src="/src/main.tsx"></script>
</body>
</html>
32 changes: 32 additions & 0 deletions demos/tanstack-ai-chat-react/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
{
"name": "tanstack-ai-chat",
"private": true,
"version": "0.0.0",
"type": "module",
"scripts": {
"dev": "vite",
"lint": "eslint .",
"preview": "pnpm run build && vite preview",
"deploy": "pnpm run build && wrangler deploy",
"cf-typegen": "wrangler types"
},
"dependencies": {
"@tanstack/ai": "^0.2.2",
"@tanstack/ai-react": "^0.2.2",
"react": "^19.1.1",
"react-dom": "^19.1.1",
"zod": "^4.3.6"
},
"devDependencies": {
"@cloudflare/vite-plugin": "^1.19.0",
"@eslint/js": "^9.39.2",
"@types/react": "^19.1.10",
"@types/react-dom": "^19.1.7",
"@vitejs/plugin-react": "^5.0.0",
"eslint": "^9.39.2",
"typescript": "~5.8.3",
"typescript-eslint": "^8.54.0",
"vite": "^7.1.2",
"wrangler": "^4.58.0"
}
}
Loading
Loading