{"_id":"@davidbrama/cloudflare-workers-ai-provider","_rev":"3-c03c60bcffc9539c1d4691422417a7b7","name":"@davidbrama/cloudflare-workers-ai-provider","dist-tags":{"latest":"1.0.2"},"versions":{"1.0.0":{"name":"@davidbrama/cloudflare-workers-ai-provider","version":"1.0.0","keywords":["cloudflare","workers","ai","ai-sdk","vercel-ai-sdk","llm","language-model","embeddings","provider","typescript"],"author":"","license":"MIT","_id":"@davidbrama/cloudflare-workers-ai-provider@1.0.0","maintainers":[{"name":"davidbrama","email":"davbrama@gmail.com"}],"dist":{"shasum":"b163ba1363e31af1312c22827c5717712e74d250","tarball":"https://registry.npmjs.org/@davidbrama/cloudflare-workers-ai-provider/-/cloudflare-workers-ai-provider-1.0.0.tgz","fileCount":26,"integrity":"sha512-N1ZgHCTaTTeQXcNslVpc60fX8gHjBnJWNa4Kjof0J0WE9E0TA/k5BnhoX6KBmhrf/okJtQQgTMs19WSSwrypgw==","signatures":[{"sig":"MEQCICZ00wBhr3rPV9BLrv0QjVlA4ev4PvyhTPGKi/XhqEr/AiAlf1o9CmxR81QafVepC/l1ktNfjNcLh2t2aQbGJgyd5g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":92232},"main":"./dist/index.js","type":"module","_from":"file:davidbrama-cloudflare-workers-ai-provider-1.0.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"lint":"eslint .","test":"echo \"Error: no test specified\" && exit 1","build":"tsc"},"_npmUser":{"name":"davidbrama","email":"davbrama@gmail.com"},"_resolved":"/tmp/3229a2324ec433356f15a54b765cc193/davidbrama-cloudflare-workers-ai-provider-1.0.0.tgz","_integrity":"sha512-N1ZgHCTaTTeQXcNslVpc60fX8gHjBnJWNa4Kjof0J0WE9E0TA/k5BnhoX6KBmhrf/okJtQQgTMs19WSSwrypgw==","_npmVersion":"11.5.2","description":"Type-safe ProviderV3 implementation for Cloudflare Workers AI that integrates with the Vercel AI SDK","directories":{},"_nodeVersion":"22.15.0","dependencies":{"@ai-sdk/provider":"3.0.0-beta.16"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.39.1","globals":"^16.5.0","@eslint/js":"^9.39.1","typescript":"^5.9.3","typescript-eslint":"^8.47.0","@cloudflare/workers-types":"^4.20251121.0"},"peerDependencies":{"@ai-sdk/provider":"^3.0.0-beta.16","@cloudflare/workers-types":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/cloudflare-workers-ai-provider_1.0.0_1763716111784_0.15479919700822142","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@davidbrama/cloudflare-workers-ai-provider","version":"1.0.1","keywords":["cloudflare","workers","ai","ai-sdk","vercel-ai-sdk","llm","language-model","embeddings","provider","typescript"],"author":"","license":"MIT","_id":"@davidbrama/cloudflare-workers-ai-provider@1.0.1","maintainers":[{"name":"davidbrama","email":"davbrama@gmail.com"}],"dist":{"shasum":"5a04372b8e8d718b41fe3a16e6535714a69fd489","tarball":"https://registry.npmjs.org/@davidbrama/cloudflare-workers-ai-provider/-/cloudflare-workers-ai-provider-1.0.1.tgz","fileCount":26,"integrity":"sha512-LeZXuKw6dI8mfbkq0njPItYV7CvX9TiJOoyYa8uyO/k42pimCLTP4TrfZoQPM0M8d6CG87pk5CssEpWj5FFKTg==","signatures":[{"sig":"MEUCIFIlnFspiLzmlmWkmy0u/NFjh+li2GYOZ7BB1HT16XoyAiEAkvwJvNrRMuKSwTlAuXvxNqh8kqxljEFh0C4yxF3PRNw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":92440},"main":"./dist/index.js","type":"module","_from":"file:davidbrama-cloudflare-workers-ai-provider-1.0.1.tgz","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"lint":"eslint .","test":"echo \"Error: no test specified\" && exit 1","build":"tsc"},"_npmUser":{"name":"davidbrama","email":"davbrama@gmail.com"},"_resolved":"/tmp/b9f3b0f9823882d9ff789448d6c2000f/davidbrama-cloudflare-workers-ai-provider-1.0.1.tgz","_integrity":"sha512-LeZXuKw6dI8mfbkq0njPItYV7CvX9TiJOoyYa8uyO/k42pimCLTP4TrfZoQPM0M8d6CG87pk5CssEpWj5FFKTg==","_npmVersion":"11.5.2","description":"Type-safe ProviderV3 implementation for Cloudflare Workers AI that integrates with the Vercel AI SDK","directories":{},"_nodeVersion":"22.15.0","dependencies":{"@ai-sdk/provider":"3.0.0-beta.16"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.39.1","globals":"^16.5.0","@eslint/js":"^9.39.1","typescript":"^5.9.3","typescript-eslint":"^8.47.0","@cloudflare/workers-types":"^4.20251121.0"},"peerDependencies":{"@ai-sdk/provider":"^3.0.0-beta.16","@cloudflare/workers-types":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/cloudflare-workers-ai-provider_1.0.1_1763716633568_0.346584010618455","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@davidbrama/cloudflare-workers-ai-provider","type":"module","version":"1.0.2","description":"Type-safe ProviderV3 implementation for Cloudflare Workers AI that integrates with the Vercel AI SDK","main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"keywords":["cloudflare","workers","ai","ai-sdk","vercel-ai-sdk","llm","language-model","embeddings","provider","typescript"],"author":"","license":"MIT","peerDependencies":{"@ai-sdk/provider":"^3.0.0-beta.16"},"dependencies":{"@ai-sdk/provider":"3.0.0-beta.16"},"devDependencies":{"@eslint/js":"^9.39.1","eslint":"^9.39.1","globals":"^16.5.0","typescript":"^5.9.3","typescript-eslint":"^8.47.0","wrangler":"^4.50.0"},"engines":{"node":">=18.0.0"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"tsc","lint":"eslint .","cf-typegen":"wrangler types","dev":"wrangler dev"},"_id":"@davidbrama/cloudflare-workers-ai-provider@1.0.2","_integrity":"sha512-vDw8tqZlAt2zp5oSsGlaf7kSq0PotPOjbKNZ7wXl1EMku/sFnH7msaOSz9Kt1gMaquylEDLAnVESOpZYrZjIRw==","_resolved":"/tmp/247ecbd1bcc0a4ef7f7a4923f2ddb917/davidbrama-cloudflare-workers-ai-provider-1.0.2.tgz","_from":"file:davidbrama-cloudflare-workers-ai-provider-1.0.2.tgz","_nodeVersion":"22.15.0","_npmVersion":"11.5.2","dist":{"integrity":"sha512-vDw8tqZlAt2zp5oSsGlaf7kSq0PotPOjbKNZ7wXl1EMku/sFnH7msaOSz9Kt1gMaquylEDLAnVESOpZYrZjIRw==","shasum":"0738087f51c70a57003f361338bf7d3cd4e4043b","tarball":"https://registry.npmjs.org/@davidbrama/cloudflare-workers-ai-provider/-/cloudflare-workers-ai-provider-1.0.2.tgz","fileCount":30,"unpackedSize":101615,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDTeib8AMDFzqPIKUn0DojVTw+8ygIvQkzqTqo4ZtM/SwIhAI/qfn5cyOAp40x2PEojB7cZv2yEINhfl0Fo8mwM8XAQ"}]},"_npmUser":{"name":"davidbrama","email":"davbrama@gmail.com"},"directories":{},"maintainers":[{"name":"davidbrama","email":"davbrama@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/cloudflare-workers-ai-provider_1.0.2_1764105802806_0.1292967790047277"},"_hasShrinkwrap":false}},"time":{"created":"2025-11-21T09:08:31.709Z","modified":"2025-11-25T21:23:23.155Z","1.0.0":"2025-11-21T09:08:31.955Z","1.0.1":"2025-11-21T09:17:13.765Z","1.0.2":"2025-11-25T21:23:22.974Z"},"license":"MIT","keywords":["cloudflare","workers","ai","ai-sdk","vercel-ai-sdk","llm","language-model","embeddings","provider","typescript"],"description":"Type-safe ProviderV3 implementation for Cloudflare Workers AI that integrates with the Vercel AI SDK","maintainers":[{"name":"davidbrama","email":"davbrama@gmail.com"}],"readme":"# Cloudflare Workers AI Provider for AI SDK\n\nA type-safe ProviderV3 implementation for Cloudflare Workers AI that integrates with the [Vercel AI SDK](https://sdk.vercel.ai). This provider enables you to use Cloudflare Workers AI models directly through the AI SDK's standardized interface.\n\n## Features\n\n- ✅ **Type-safe**: Full TypeScript support with model capability encoding\n- ✅ **V3 Specification**: Implements Language Model Specification V3\n- ✅ **Language Models**: Support for text generation with streaming\n- ✅ **Embedding Models**: Support for text embeddings\n- ✅ **Tool Calling**: Support for function/tool calling on compatible models\n- ✅ **No API Keys Required**: Works directly with Cloudflare Workers AI binding\n- ✅ **Model Registry**: Built-in registry of supported models with capabilities\n\n## Installation\n\n```bash\npnpm add @davidbrama/cloudflare-workers-ai-provider\n# or\nnpm install @davidbrama/cloudflare-workers-ai-provider\n# or\nyarn add @davidbrama/cloudflare-workers-ai-provider\n```\n\n## Prerequisites\n\n- A Cloudflare Workers project with AI binding configured\n- `@cloudflare/workers-types` for TypeScript support\n- AI SDK v6 (beta)\n\n## Setup\n\n### 1. Configure Wrangler\n\nAdd the AI binding to your `wrangler.toml`:\n\n```toml\n[ai]\nbinding = \"AI\"\n```\n\n### 2. Install Dependencies\n\n```bash\npnpm add @ai-sdk/provider ai @davidbrama/cloudflare-workers-ai-provider\npnpm add -D @cloudflare/workers-types\n```\n\n## Usage\n\n### Basic Example\n\n```typescript\nimport { WorkersAiProvider } from \"@davidbrama/cloudflare-workers-ai-provider\";\nimport { generateText } from \"ai\";\n\nexport default {\n  async fetch(request: Request, env: Env) {\n    // Create the provider with the AI binding\n    const provider = new WorkersAiProvider({ ai: env.AI });\n\n    // Use with AI SDK\n    const { text } = await generateText({\n      model: provider.languageModel(\"@cf/meta/llama-3-8b-instruct\"),\n      prompt: \"Explain quantum computing in simple terms\",\n    });\n\n    return new Response(text);\n  },\n};\n```\n\n### Streaming Example\n\n```typescript\nimport { WorkersAiProvider } from \"@davidbrama/cloudflare-workers-ai-provider\";\nimport { streamText } from \"ai\";\n\nexport default {\n  async fetch(request: Request, env: Env) {\n    const provider = new WorkersAiProvider({ ai: env.AI });\n\n    const result = streamText({\n      model: provider.languageModel(\"@cf/meta/llama-3-8b-instruct\"),\n      prompt: \"Write a short story about a robot\",\n    });\n\n    return result.toDataStreamResponse();\n  },\n};\n```\n\n### Embeddings Example\n\n```typescript\nimport { WorkersAiProvider } from \"@davidbrama/cloudflare-workers-ai-provider\";\nimport { embed } from \"ai\";\n\nexport default {\n  async fetch(request: Request, env: Env) {\n    const provider = new WorkersAiProvider({ ai: env.AI });\n\n    const { embeddings } = await embed({\n      model: provider.textEmbeddingModel(\"@cf/baai/bge-base-en-v1.5\"),\n      values: [\"Hello world\", \"AI is amazing\"],\n    });\n\n    return new Response(JSON.stringify(embeddings));\n  },\n};\n```\n\n### Tool Calling Example\n\n```typescript\nimport { WorkersAiProvider } from \"@davidbrama/cloudflare-workers-ai-provider\";\nimport { generateText } from \"ai\";\n\nexport default {\n  async fetch(request: Request, env: Env) {\n    const provider = new WorkersAiProvider({ ai: env.AI });\n\n    const { text, toolCalls } = await generateText({\n      model: provider.languageModel(\"@cf/meta/llama-3-8b-instruct\"),\n      prompt: \"What's the weather in San Francisco?\",\n      tools: {\n        getWeather: {\n          description: \"Get the current weather in a location\",\n          parameters: {\n            type: \"object\",\n            properties: {\n              location: {\n                type: \"string\",\n                description: \"The city and state, e.g. San Francisco, CA\",\n              },\n            },\n            required: [\"location\"],\n          },\n        },\n      },\n    });\n\n    // Handle tool calls...\n    return new Response(text);\n  },\n};\n```\n\n## Supported Models\n\n### Language Models\n\n| Model ID                               | Streaming | Tools | Multimodal |\n| -------------------------------------- | --------- | ----- | ---------- |\n| `@cf/meta/llama-3-8b-instruct`         | ✅        | ✅    | ❌         |\n| `@cf/meta/llama-3-70b-instruct`        | ✅        | ✅    | ❌         |\n| `@cf/meta/llama-3.1-8b-instruct`       | ✅        | ✅    | ❌         |\n| `@cf/meta/llama-3.1-70b-instruct`      | ✅        | ✅    | ❌         |\n| `@cf/mistral/mistral-7b-instruct-v0.2` | ✅        | ❌    | ❌         |\n| `@cf/mistral/mistral-7b-instruct-v0.3` | ✅        | ❌    | ❌         |\n| `@cf/google/gemma-7b-it`               | ✅        | ❌    | ❌         |\n| `@cf/meta/llama-2-7b-chat-fp16`        | ✅        | ❌    | ❌         |\n\n### Embedding Models\n\n| Model ID                               | Description              |\n| -------------------------------------- | ------------------------ |\n| `@cf/baai/bge-base-en-v1.5`            | Base English embeddings  |\n| `@cf/baai/bge-large-en-v1.5`           | Large English embeddings |\n| `@cf/baai/bge-small-en-v1.5`           | Small English embeddings |\n| `@cf/huggingface/multilingual-e5-base` | Multilingual embeddings  |\n| `@cf/google/embeddinggemma-300m`       | Google Gemma embeddings  |\n\nFor the complete list of available models, see the [Cloudflare Workers AI Models documentation](https://developers.cloudflare.com/workers-ai/models/).\n\n## API Reference\n\n### `WorkersAiProvider`\n\nThe main provider class that implements `ProviderV3`.\n\n#### Constructor\n\n```typescript\nnew WorkersAiProvider(settings: WorkersAiProviderSettings)\n```\n\n**Parameters:**\n\n- `settings.ai`: The Cloudflare Workers AI binding (from `env.AI`)\n\n#### Methods\n\n##### `languageModel(modelId: string): WorkersAiLanguageModel`\n\nReturns a language model instance for text generation.\n\n**Parameters:**\n\n- `modelId`: The model ID (e.g., `\"@cf/meta/llama-3-8b-instruct\"`)\n\n**Throws:** `NoSuchModelError` if the model ID is invalid or not a language model\n\n##### `textEmbeddingModel(modelId: string): WorkersAiEmbeddingModel`\n\nReturns an embedding model instance for text embeddings.\n\n**Parameters:**\n\n- `modelId`: The model ID (e.g., `\"@cf/baai/bge-base-en-v1.5\"`)\n\n**Throws:** `NoSuchModelError` if the model ID is invalid or not an embedding model\n\n##### `imageModel(modelId: string): ImageModelV3`\n\nNot supported. Always throws `NoSuchModelError`.\n\n## Type Safety\n\nThe provider includes type-safe model IDs:\n\n```typescript\nimport type {\n  WorkersAiLanguageModelId,\n  WorkersAiEmbeddingModelId,\n} from \"workers_provider\";\n\n// Type-safe model IDs\nconst languageModelId: WorkersAiLanguageModelId =\n  \"@cf/meta/llama-3-8b-instruct\";\nconst embeddingModelId: WorkersAiEmbeddingModelId = \"@cf/baai/bge-base-en-v1.5\";\n```\n\n## Development\n\n### Build\n\n```bash\npnpm build\n```\n\n### Lint\n\n```bash\npnpm lint\n```\n\n### Project Structure\n\n```\n.\n├── index.ts              # Main provider implementation\n├── language-model.ts     # LanguageModelV3 implementation\n├── embedding-model.ts    # EmbeddingModelV3 implementation\n├── conversion.ts         # Format conversion utilities\n├── errors.ts             # Error handling utilities\n└── types.ts              # Type definitions and model registry\n```\n\n## Limitations\n\n- **No Image Models**: Cloudflare Workers AI does not support image generation models\n- **Streaming**: Streaming implementation may need adjustment based on actual Cloudflare Workers AI API behavior\n- **Multimodal**: Limited multimodal support (images in prompts) - depends on model capabilities\n\n## License\n\nISC\n\n## Contributing\n\nContributions are welcome! Please ensure all code passes linting and follows the existing code style.\n\n## Related Links\n\n- [Vercel AI SDK Documentation](https://sdk.vercel.ai)\n- [Cloudflare Workers AI Documentation](https://developers.cloudflare.com/workers-ai/)\n- [AI SDK Provider Specification](https://sdk.vercel.ai/docs/providers/custom-providers)\n","readmeFilename":"README.md"}