Skip to content

Commit 094d9db

Browse files
committed
Add Unified API, Openrouter providers
1 parent 65ba88f commit 094d9db

7 files changed

Lines changed: 110 additions & 2 deletions

File tree

.changeset/happy-lies-sell.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"ai-gateway-provider": minor
3+
---
4+
5+
Add Unified API, Openrouter providers

packages/ai-gateway-provider/README.md

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,25 @@ const { text } = await generateText({
5959
});
6060
```
6161

62+
### Unified API / Dynamic Routes
63+
64+
```typescript
65+
import { createAiGateway } from 'ai-gateway-provider';
66+
import { unified, createUnified } from 'ai-gateway-provider/providers/unified';
67+
import { generateText } from "ai";
68+
69+
const aigateway = createAiGateway({
70+
accountId: "{{CLOUDFLARE_ACCOUNT_ID}}",
71+
gateway: '{{GATEWAY_NAME}}',
72+
apiKey: '{{CF_AIG_TOKEN}}',
73+
});
74+
75+
const { text } = await generateText({
76+
model: aigateway(unified("dynamic/customer-support")),
77+
prompt: 'Write a vegetarian lasagna recipe for 4 people.',
78+
});
79+
```
80+
6281
## Automatic Fallback Example
6382

6483
```typescript

packages/ai-gateway-provider/package.json

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,16 @@
102102
"types": "./dist/providers/google-vertex.d.ts",
103103
"import": "./dist/providers/google-vertex.mjs",
104104
"require": "./dist/providers/google-vertex.js"
105+
},
106+
"./providers/openrouter": {
107+
"types": "./dist/providers/openrouter.d.ts",
108+
"import": "./dist/providers/openrouter.mjs",
109+
"require": "./dist/providers/openrouter.js"
110+
},
111+
"./providers/unified": {
112+
"types": "./dist/providers/unified.d.ts",
113+
"import": "./dist/providers/unified.mjs",
114+
"require": "./dist/providers/unified.js"
105115
}
106116
},
107117
"publishConfig": {
@@ -130,6 +140,9 @@
130140
"@ai-sdk/provider-utils": "^3.0.18",
131141
"ai": "^5.0.106"
132142
},
143+
"peerDependencies": {
144+
"@ai-sdk/openai-compatible": "^1.0.29"
145+
},
133146
"optionalDependencies": {
134147
"@ai-sdk/amazon-bedrock": "^3.0.67",
135148
"@ai-sdk/anthropic": "^2.0.53",
@@ -146,7 +159,8 @@
146159
"@ai-sdk/openai": "^2.0.77",
147160
"@ai-sdk/perplexity": "^2.0.21",
148161
"@ai-sdk/xai": "^2.0.39",
149-
"@ai-sdk/google-vertex": "3.0.90"
162+
"@ai-sdk/google-vertex": "3.0.90",
163+
"@openrouter/ai-sdk-provider": "^1.5.3"
150164
},
151165
"devDependencies": {
152166
"@biomejs/biome": "^2.3.8",

packages/ai-gateway-provider/src/providers.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,4 +77,14 @@ export const providers = [
7777
},
7878
headerKey: "api-key",
7979
},
80+
{
81+
name: "openrouter",
82+
regex: /^https:\/\/openrouter\.ai\/api\//,
83+
transformEndpoint: (url: string) => url.replace(/^https:\/\/openrouter\.ai\/api\//, ""),
84+
},
85+
{
86+
name: "compat",
87+
regex: /^https:\/\/gateway\.ai\.cloudflare\.com\/v1\/compat\//,
88+
transformEndpoint: (url: string) => url.replace(/^https:\/\/gateway\.ai\.cloudflare\.com\/v1\/compat\//, ""),
89+
}
8090
];
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import { createOpenRouter as createOpenRouterOriginal } from '@openrouter/ai-sdk-provider';
2+
import { authWrapper } from "../auth";
3+
4+
export const createOpenRouter = (...args: Parameters<typeof createOpenRouterOriginal>) =>
5+
authWrapper(createOpenRouterOriginal)(...args);
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import type { OpenAICompatibleProviderSettings } from "@ai-sdk/openai-compatible";
2+
import { createOpenAICompatible } from "@ai-sdk/openai-compatible";
3+
4+
export const createUnified = (arg?: Partial<OpenAICompatibleProviderSettings>) => {
5+
return createOpenAICompatible({
6+
baseURL: "https://gateway.ai.cloudflare.com/v1/compat", // intercepted and replaced with actual base URL later
7+
name: "Unified",
8+
...(arg || {}),
9+
});
10+
}
11+
12+
export const unified = createUnified();

pnpm-lock.yaml

Lines changed: 44 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)