@anyr/ai-sdk-provider 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +227 -0
- package/dist/index.d.cts +149 -0
- package/dist/index.d.ts +149 -0
- package/dist/index.js +739 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +733 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +77 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Duyet Le
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
# @anyr/ai-sdk-provider
|
|
2
|
+
|
|
3
|
+
The [AnyRouter](https://anyrouter.dev) provider for the [Vercel AI SDK](https://ai-sdk.dev).
|
|
4
|
+
|
|
5
|
+
Call every model on the AnyRouter gateway through the standard AI SDK
|
|
6
|
+
interface — `generateText`, `streamText`, `generateObject`, `embedMany`,
|
|
7
|
+
`generateImage` — with one key and one provider.
|
|
8
|
+
|
|
9
|
+
## Install
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
npm install @anyr/ai-sdk-provider ai zod
|
|
13
|
+
# or
|
|
14
|
+
pnpm add @anyr/ai-sdk-provider ai zod
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Quickstart
|
|
18
|
+
|
|
19
|
+
```ts
|
|
20
|
+
import { createAnyRouter } from "@anyr/ai-sdk-provider"
|
|
21
|
+
import { generateText } from "ai"
|
|
22
|
+
|
|
23
|
+
// Reads ANYROUTER_API_KEY from the environment when omitted.
|
|
24
|
+
const anyrouter = createAnyRouter()
|
|
25
|
+
|
|
26
|
+
const { text } = await generateText({
|
|
27
|
+
model: anyrouter("openai/gpt-4o-mini"),
|
|
28
|
+
prompt: "What is AnyRouter?",
|
|
29
|
+
})
|
|
30
|
+
console.log(text)
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Usage
|
|
34
|
+
|
|
35
|
+
### generateText
|
|
36
|
+
|
|
37
|
+
```ts
|
|
38
|
+
import { createAnyRouter } from "@anyr/ai-sdk-provider"
|
|
39
|
+
import { generateText } from "ai"
|
|
40
|
+
|
|
41
|
+
const anyrouter = createAnyRouter({ apiKey: process.env.ANYROUTER_API_KEY })
|
|
42
|
+
|
|
43
|
+
const { text } = await generateText({
|
|
44
|
+
model: anyrouter("anthropic/claude-opus-4-5"),
|
|
45
|
+
system: "You are a helpful assistant.",
|
|
46
|
+
prompt: "Explain the butterfly effect in one paragraph.",
|
|
47
|
+
})
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### streamText
|
|
51
|
+
|
|
52
|
+
```ts
|
|
53
|
+
import { createAnyRouter } from "@anyr/ai-sdk-provider"
|
|
54
|
+
import { streamText } from "ai"
|
|
55
|
+
|
|
56
|
+
const anyrouter = createAnyRouter()
|
|
57
|
+
|
|
58
|
+
const { textStream } = await streamText({
|
|
59
|
+
model: anyrouter("openai/gpt-4o"),
|
|
60
|
+
prompt: "Write a haiku about the ocean.",
|
|
61
|
+
})
|
|
62
|
+
|
|
63
|
+
for await (const chunk of textStream) {
|
|
64
|
+
process.stdout.write(chunk)
|
|
65
|
+
}
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### generateObject (structured output)
|
|
69
|
+
|
|
70
|
+
```ts
|
|
71
|
+
import { createAnyRouter } from "@anyr/ai-sdk-provider"
|
|
72
|
+
import { generateObject } from "ai"
|
|
73
|
+
import { z } from "zod"
|
|
74
|
+
|
|
75
|
+
const anyrouter = createAnyRouter()
|
|
76
|
+
|
|
77
|
+
const { object } = await generateObject({
|
|
78
|
+
model: anyrouter("openai/gpt-4o-mini"),
|
|
79
|
+
schema: z.object({
|
|
80
|
+
title: z.string(),
|
|
81
|
+
summary: z.string(),
|
|
82
|
+
tags: z.array(z.string()),
|
|
83
|
+
}),
|
|
84
|
+
prompt: "Summarise the latest AI news in a structured format.",
|
|
85
|
+
})
|
|
86
|
+
|
|
87
|
+
console.log(object.title, object.tags)
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
### Tool calling
|
|
91
|
+
|
|
92
|
+
```ts
|
|
93
|
+
import { createAnyRouter } from "@anyr/ai-sdk-provider"
|
|
94
|
+
import { generateText, tool } from "ai"
|
|
95
|
+
import { z } from "zod"
|
|
96
|
+
|
|
97
|
+
const anyrouter = createAnyRouter()
|
|
98
|
+
|
|
99
|
+
const { text, toolCalls } = await generateText({
|
|
100
|
+
model: anyrouter("openai/gpt-4o"),
|
|
101
|
+
tools: {
|
|
102
|
+
get_weather: tool({
|
|
103
|
+
description: "Get the current weather in a city.",
|
|
104
|
+
parameters: z.object({ city: z.string() }),
|
|
105
|
+
execute: async ({ city }) => ({ temperature: 22, unit: "C", city }),
|
|
106
|
+
}),
|
|
107
|
+
},
|
|
108
|
+
prompt: "What is the weather in Tokyo?",
|
|
109
|
+
})
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
### Embeddings
|
|
113
|
+
|
|
114
|
+
```ts
|
|
115
|
+
import { createAnyRouter } from "@anyr/ai-sdk-provider"
|
|
116
|
+
import { embedMany } from "ai"
|
|
117
|
+
|
|
118
|
+
const anyrouter = createAnyRouter()
|
|
119
|
+
|
|
120
|
+
const { embeddings } = await embedMany({
|
|
121
|
+
model: anyrouter.embeddingModel("openai/text-embedding-3-small"),
|
|
122
|
+
values: ["Hello world", "How are you?"],
|
|
123
|
+
})
|
|
124
|
+
|
|
125
|
+
console.log(embeddings[0]) // [0.123, -0.456, ...]
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
### Image generation
|
|
129
|
+
|
|
130
|
+
```ts
|
|
131
|
+
import { createAnyRouter } from "@anyr/ai-sdk-provider"
|
|
132
|
+
import { generateImage } from "ai"
|
|
133
|
+
|
|
134
|
+
const anyrouter = createAnyRouter()
|
|
135
|
+
|
|
136
|
+
const { image } = await generateImage({
|
|
137
|
+
model: anyrouter.imageModel("openai/dall-e-3"),
|
|
138
|
+
prompt: "A serene mountain lake at dawn, oil painting.",
|
|
139
|
+
size: "1024x1024",
|
|
140
|
+
})
|
|
141
|
+
|
|
142
|
+
// image.base64 — base64-encoded PNG or URL depending on the model
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
### Provider options (routing, session, extra body)
|
|
146
|
+
|
|
147
|
+
```ts
|
|
148
|
+
import { createAnyRouter } from "@anyr/ai-sdk-provider"
|
|
149
|
+
import { generateText } from "ai"
|
|
150
|
+
|
|
151
|
+
// Set routing preferences at the provider level
|
|
152
|
+
const anyrouter = createAnyRouter({
|
|
153
|
+
provider: { only: ["openai"], quantizations: ["bf16"] },
|
|
154
|
+
sessionId: "user-session-abc",
|
|
155
|
+
})
|
|
156
|
+
|
|
157
|
+
// Or override them per-call
|
|
158
|
+
const { text } = await generateText({
|
|
159
|
+
model: anyrouter("openai/gpt-4o"),
|
|
160
|
+
prompt: "Hello!",
|
|
161
|
+
experimental_providerMetadata: {
|
|
162
|
+
anyrouter: {
|
|
163
|
+
provider: { order: ["openai", "azure"] },
|
|
164
|
+
sessionId: "per-request-session",
|
|
165
|
+
extraBody: { logprobs: true },
|
|
166
|
+
},
|
|
167
|
+
},
|
|
168
|
+
})
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
## Configuration
|
|
172
|
+
|
|
173
|
+
```ts
|
|
174
|
+
import { createAnyRouter } from "@anyr/ai-sdk-provider"
|
|
175
|
+
|
|
176
|
+
const anyrouter = createAnyRouter({
|
|
177
|
+
// API key — falls back to ANYROUTER_API_KEY env var (resolved lazily at request time)
|
|
178
|
+
apiKey: "<your-anyrouter-key>",
|
|
179
|
+
|
|
180
|
+
// API base URL — defaults to https://anyrouter.dev/api/v1
|
|
181
|
+
baseURL: "https://anyrouter.dev/api/v1",
|
|
182
|
+
|
|
183
|
+
// Extra headers merged into every request
|
|
184
|
+
headers: { "X-Custom-Header": "value" },
|
|
185
|
+
|
|
186
|
+
// Custom fetch implementation (e.g. for logging or proxying)
|
|
187
|
+
fetch: myCustomFetch,
|
|
188
|
+
|
|
189
|
+
// Default routing preference forwarded as `provider` in the request body
|
|
190
|
+
provider: { only: ["openai"] },
|
|
191
|
+
|
|
192
|
+
// Session ID forwarded as `session_id` — useful for grouping in analytics
|
|
193
|
+
sessionId: "my-session",
|
|
194
|
+
|
|
195
|
+
// Extra fields merged into every request body (per-call overrides these)
|
|
196
|
+
extraBody: { safe_mode: true },
|
|
197
|
+
})
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
## Provider methods
|
|
201
|
+
|
|
202
|
+
| Method | Returns | Description |
|
|
203
|
+
|--------|---------|-------------|
|
|
204
|
+
| `anyrouter(modelId)` | `LanguageModelV3` | Shorthand for `anyrouter.chat(modelId)` |
|
|
205
|
+
| `anyrouter.chat(modelId)` | `LanguageModelV3` | Chat / instruction language model |
|
|
206
|
+
| `anyrouter.languageModel(modelId)` | `LanguageModelV3` | Alias for `.chat()` (ProviderV3 interface) |
|
|
207
|
+
| `anyrouter.embeddingModel(modelId)` | `EmbeddingModelV3` | Text embedding model |
|
|
208
|
+
| `anyrouter.imageModel(modelId)` | `ImageModelV3` | Image generation model |
|
|
209
|
+
| `anyrouter.client` | `AnyRouter` | Raw `@anyr/sdk` client (escape hatch) |
|
|
210
|
+
|
|
211
|
+
## Default export
|
|
212
|
+
|
|
213
|
+
```ts
|
|
214
|
+
import { anyrouter } from "@anyr/ai-sdk-provider"
|
|
215
|
+
|
|
216
|
+
// Uses ANYROUTER_API_KEY from the environment
|
|
217
|
+
const { text } = await generateText({
|
|
218
|
+
model: anyrouter("openai/gpt-4o-mini"),
|
|
219
|
+
prompt: "Hello!",
|
|
220
|
+
})
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
Built on [`@anyr/sdk`](https://www.npmjs.com/package/@anyr/sdk).
|
|
224
|
+
|
|
225
|
+
## License
|
|
226
|
+
|
|
227
|
+
MIT © Duyet Le
|
package/dist/index.d.cts
ADDED
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import { LanguageModelV3, LanguageModelV3CallOptions, LanguageModelV3GenerateResult, LanguageModelV3StreamResult, EmbeddingModelV3, EmbeddingModelV3CallOptions, EmbeddingModelV3Result, ImageModelV3, ImageModelV3CallOptions, ProviderV3 } from '@ai-sdk/provider';
|
|
2
|
+
import { AnyRouter } from '@anyr/sdk';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Settings for `createAnyRouter(...)`.
|
|
6
|
+
*/
|
|
7
|
+
interface AnyRouterProviderSettings {
|
|
8
|
+
/**
|
|
9
|
+
* AnyRouter API key (`sk-ar-v1-…`).
|
|
10
|
+
* Falls back to the `ANYROUTER_API_KEY` environment variable when omitted.
|
|
11
|
+
* Resolved lazily at request time.
|
|
12
|
+
*/
|
|
13
|
+
apiKey?: string;
|
|
14
|
+
/**
|
|
15
|
+
* API base URL.
|
|
16
|
+
* Defaults to `https://anyrouter.dev/api/v1`.
|
|
17
|
+
*/
|
|
18
|
+
baseURL?: string;
|
|
19
|
+
/**
|
|
20
|
+
* Extra headers merged into every request.
|
|
21
|
+
*/
|
|
22
|
+
headers?: Record<string, string>;
|
|
23
|
+
/**
|
|
24
|
+
* Custom fetch implementation.
|
|
25
|
+
* Defaults to the global `fetch`.
|
|
26
|
+
*/
|
|
27
|
+
fetch?: typeof globalThis.fetch;
|
|
28
|
+
/**
|
|
29
|
+
* AnyRouter routing preference forwarded as the `provider` field.
|
|
30
|
+
*
|
|
31
|
+
* @example { only: ["openai"], quantizations: ["bf16"] }
|
|
32
|
+
*/
|
|
33
|
+
provider?: Record<string, unknown>;
|
|
34
|
+
/**
|
|
35
|
+
* Session identifier forwarded as `session_id` on every request.
|
|
36
|
+
* Useful for grouping related requests in usage analytics.
|
|
37
|
+
*/
|
|
38
|
+
sessionId?: string;
|
|
39
|
+
/**
|
|
40
|
+
* Extra fields merged into every request body.
|
|
41
|
+
* Per-call `providerOptions.anyrouter.extraBody` takes precedence.
|
|
42
|
+
*/
|
|
43
|
+
extraBody?: Record<string, unknown>;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
interface AnyRouterChatConfig {
|
|
47
|
+
provider: string;
|
|
48
|
+
baseURL: string;
|
|
49
|
+
headers: () => Record<string, string | undefined>;
|
|
50
|
+
fetch?: typeof globalThis.fetch;
|
|
51
|
+
settings: AnyRouterProviderSettings;
|
|
52
|
+
}
|
|
53
|
+
declare class AnyRouterChatLanguageModel implements LanguageModelV3 {
|
|
54
|
+
readonly specificationVersion: "v3";
|
|
55
|
+
readonly provider: string;
|
|
56
|
+
readonly modelId: string;
|
|
57
|
+
readonly supportedUrls: Record<string, RegExp[]>;
|
|
58
|
+
private readonly config;
|
|
59
|
+
constructor(modelId: string, config: AnyRouterChatConfig);
|
|
60
|
+
doGenerate(options: LanguageModelV3CallOptions): Promise<LanguageModelV3GenerateResult>;
|
|
61
|
+
doStream(options: LanguageModelV3CallOptions): Promise<LanguageModelV3StreamResult>;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
interface AnyRouterEmbeddingConfig {
|
|
65
|
+
provider: string;
|
|
66
|
+
baseURL: string;
|
|
67
|
+
headers: () => Record<string, string | undefined>;
|
|
68
|
+
fetch?: typeof globalThis.fetch;
|
|
69
|
+
}
|
|
70
|
+
declare class AnyRouterEmbeddingModel implements EmbeddingModelV3 {
|
|
71
|
+
readonly specificationVersion: "v3";
|
|
72
|
+
readonly provider: string;
|
|
73
|
+
readonly modelId: string;
|
|
74
|
+
/** No hard per-call limit imposed by the provider layer. */
|
|
75
|
+
readonly maxEmbeddingsPerCall: number | undefined;
|
|
76
|
+
readonly supportsParallelCalls = true;
|
|
77
|
+
private readonly config;
|
|
78
|
+
constructor(modelId: string, config: AnyRouterEmbeddingConfig);
|
|
79
|
+
doEmbed(options: EmbeddingModelV3CallOptions): Promise<EmbeddingModelV3Result>;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
interface AnyRouterImageConfig {
|
|
83
|
+
provider: string;
|
|
84
|
+
baseURL: string;
|
|
85
|
+
headers: () => Record<string, string | undefined>;
|
|
86
|
+
fetch?: typeof globalThis.fetch;
|
|
87
|
+
}
|
|
88
|
+
declare class AnyRouterImageModel implements ImageModelV3 {
|
|
89
|
+
readonly specificationVersion: "v3";
|
|
90
|
+
readonly provider: string;
|
|
91
|
+
readonly modelId: string;
|
|
92
|
+
/**
|
|
93
|
+
* Most image generation APIs support only 1 image per call via the
|
|
94
|
+
* standard `/images/generations` endpoint.
|
|
95
|
+
*/
|
|
96
|
+
readonly maxImagesPerCall = 1;
|
|
97
|
+
private readonly config;
|
|
98
|
+
constructor(modelId: string, config: AnyRouterImageConfig);
|
|
99
|
+
doGenerate(options: ImageModelV3CallOptions): Promise<Awaited<ReturnType<ImageModelV3["doGenerate"]>>>;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
interface AnyRouterProvider extends ProviderV3 {
|
|
103
|
+
/** Create a chat language model by calling the provider directly. */
|
|
104
|
+
(modelId: string): LanguageModelV3;
|
|
105
|
+
/** Create a chat language model (explicit method). */
|
|
106
|
+
chat(modelId: string): LanguageModelV3;
|
|
107
|
+
/**
|
|
108
|
+
* Low-level `@anyr/sdk` client instance.
|
|
109
|
+
* Use this as an escape hatch when you need direct API access.
|
|
110
|
+
*/
|
|
111
|
+
readonly client: AnyRouter;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Create an AnyRouter provider for the Vercel AI SDK.
|
|
115
|
+
*
|
|
116
|
+
* ```ts
|
|
117
|
+
* import { createAnyRouter } from "@anyr/ai-sdk-provider"
|
|
118
|
+
* import { generateText } from "ai"
|
|
119
|
+
*
|
|
120
|
+
* const anyrouter = createAnyRouter() // reads ANYROUTER_API_KEY
|
|
121
|
+
* const { text } = await generateText({
|
|
122
|
+
* model: anyrouter("openai/gpt-4o-mini"),
|
|
123
|
+
* prompt: "Hello!",
|
|
124
|
+
* })
|
|
125
|
+
* ```
|
|
126
|
+
*
|
|
127
|
+
* The `apiKey` is resolved **lazily** at request time (not at
|
|
128
|
+
* `createAnyRouter()` call time), so the factory can be constructed
|
|
129
|
+
* before environment variables are populated.
|
|
130
|
+
*/
|
|
131
|
+
declare function createAnyRouter(options?: AnyRouterProviderSettings): AnyRouterProvider;
|
|
132
|
+
/**
|
|
133
|
+
* Default AnyRouter provider instance.
|
|
134
|
+
*
|
|
135
|
+
* Uses `ANYROUTER_API_KEY` from the environment (resolved lazily at request time).
|
|
136
|
+
*
|
|
137
|
+
* ```ts
|
|
138
|
+
* import { anyrouter } from "@anyr/ai-sdk-provider"
|
|
139
|
+
* import { generateText } from "ai"
|
|
140
|
+
*
|
|
141
|
+
* const { text } = await generateText({
|
|
142
|
+
* model: anyrouter("openai/gpt-4o-mini"),
|
|
143
|
+
* prompt: "Hello!",
|
|
144
|
+
* })
|
|
145
|
+
* ```
|
|
146
|
+
*/
|
|
147
|
+
declare const anyrouter: AnyRouterProvider;
|
|
148
|
+
|
|
149
|
+
export { type AnyRouterChatConfig, AnyRouterChatLanguageModel, type AnyRouterEmbeddingConfig, AnyRouterEmbeddingModel, type AnyRouterImageConfig, AnyRouterImageModel, type AnyRouterProvider, type AnyRouterProviderSettings, anyrouter, createAnyRouter };
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import { LanguageModelV3, LanguageModelV3CallOptions, LanguageModelV3GenerateResult, LanguageModelV3StreamResult, EmbeddingModelV3, EmbeddingModelV3CallOptions, EmbeddingModelV3Result, ImageModelV3, ImageModelV3CallOptions, ProviderV3 } from '@ai-sdk/provider';
|
|
2
|
+
import { AnyRouter } from '@anyr/sdk';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Settings for `createAnyRouter(...)`.
|
|
6
|
+
*/
|
|
7
|
+
interface AnyRouterProviderSettings {
|
|
8
|
+
/**
|
|
9
|
+
* AnyRouter API key (`sk-ar-v1-…`).
|
|
10
|
+
* Falls back to the `ANYROUTER_API_KEY` environment variable when omitted.
|
|
11
|
+
* Resolved lazily at request time.
|
|
12
|
+
*/
|
|
13
|
+
apiKey?: string;
|
|
14
|
+
/**
|
|
15
|
+
* API base URL.
|
|
16
|
+
* Defaults to `https://anyrouter.dev/api/v1`.
|
|
17
|
+
*/
|
|
18
|
+
baseURL?: string;
|
|
19
|
+
/**
|
|
20
|
+
* Extra headers merged into every request.
|
|
21
|
+
*/
|
|
22
|
+
headers?: Record<string, string>;
|
|
23
|
+
/**
|
|
24
|
+
* Custom fetch implementation.
|
|
25
|
+
* Defaults to the global `fetch`.
|
|
26
|
+
*/
|
|
27
|
+
fetch?: typeof globalThis.fetch;
|
|
28
|
+
/**
|
|
29
|
+
* AnyRouter routing preference forwarded as the `provider` field.
|
|
30
|
+
*
|
|
31
|
+
* @example { only: ["openai"], quantizations: ["bf16"] }
|
|
32
|
+
*/
|
|
33
|
+
provider?: Record<string, unknown>;
|
|
34
|
+
/**
|
|
35
|
+
* Session identifier forwarded as `session_id` on every request.
|
|
36
|
+
* Useful for grouping related requests in usage analytics.
|
|
37
|
+
*/
|
|
38
|
+
sessionId?: string;
|
|
39
|
+
/**
|
|
40
|
+
* Extra fields merged into every request body.
|
|
41
|
+
* Per-call `providerOptions.anyrouter.extraBody` takes precedence.
|
|
42
|
+
*/
|
|
43
|
+
extraBody?: Record<string, unknown>;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
interface AnyRouterChatConfig {
|
|
47
|
+
provider: string;
|
|
48
|
+
baseURL: string;
|
|
49
|
+
headers: () => Record<string, string | undefined>;
|
|
50
|
+
fetch?: typeof globalThis.fetch;
|
|
51
|
+
settings: AnyRouterProviderSettings;
|
|
52
|
+
}
|
|
53
|
+
declare class AnyRouterChatLanguageModel implements LanguageModelV3 {
|
|
54
|
+
readonly specificationVersion: "v3";
|
|
55
|
+
readonly provider: string;
|
|
56
|
+
readonly modelId: string;
|
|
57
|
+
readonly supportedUrls: Record<string, RegExp[]>;
|
|
58
|
+
private readonly config;
|
|
59
|
+
constructor(modelId: string, config: AnyRouterChatConfig);
|
|
60
|
+
doGenerate(options: LanguageModelV3CallOptions): Promise<LanguageModelV3GenerateResult>;
|
|
61
|
+
doStream(options: LanguageModelV3CallOptions): Promise<LanguageModelV3StreamResult>;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
interface AnyRouterEmbeddingConfig {
|
|
65
|
+
provider: string;
|
|
66
|
+
baseURL: string;
|
|
67
|
+
headers: () => Record<string, string | undefined>;
|
|
68
|
+
fetch?: typeof globalThis.fetch;
|
|
69
|
+
}
|
|
70
|
+
declare class AnyRouterEmbeddingModel implements EmbeddingModelV3 {
|
|
71
|
+
readonly specificationVersion: "v3";
|
|
72
|
+
readonly provider: string;
|
|
73
|
+
readonly modelId: string;
|
|
74
|
+
/** No hard per-call limit imposed by the provider layer. */
|
|
75
|
+
readonly maxEmbeddingsPerCall: number | undefined;
|
|
76
|
+
readonly supportsParallelCalls = true;
|
|
77
|
+
private readonly config;
|
|
78
|
+
constructor(modelId: string, config: AnyRouterEmbeddingConfig);
|
|
79
|
+
doEmbed(options: EmbeddingModelV3CallOptions): Promise<EmbeddingModelV3Result>;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
interface AnyRouterImageConfig {
|
|
83
|
+
provider: string;
|
|
84
|
+
baseURL: string;
|
|
85
|
+
headers: () => Record<string, string | undefined>;
|
|
86
|
+
fetch?: typeof globalThis.fetch;
|
|
87
|
+
}
|
|
88
|
+
declare class AnyRouterImageModel implements ImageModelV3 {
|
|
89
|
+
readonly specificationVersion: "v3";
|
|
90
|
+
readonly provider: string;
|
|
91
|
+
readonly modelId: string;
|
|
92
|
+
/**
|
|
93
|
+
* Most image generation APIs support only 1 image per call via the
|
|
94
|
+
* standard `/images/generations` endpoint.
|
|
95
|
+
*/
|
|
96
|
+
readonly maxImagesPerCall = 1;
|
|
97
|
+
private readonly config;
|
|
98
|
+
constructor(modelId: string, config: AnyRouterImageConfig);
|
|
99
|
+
doGenerate(options: ImageModelV3CallOptions): Promise<Awaited<ReturnType<ImageModelV3["doGenerate"]>>>;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
interface AnyRouterProvider extends ProviderV3 {
|
|
103
|
+
/** Create a chat language model by calling the provider directly. */
|
|
104
|
+
(modelId: string): LanguageModelV3;
|
|
105
|
+
/** Create a chat language model (explicit method). */
|
|
106
|
+
chat(modelId: string): LanguageModelV3;
|
|
107
|
+
/**
|
|
108
|
+
* Low-level `@anyr/sdk` client instance.
|
|
109
|
+
* Use this as an escape hatch when you need direct API access.
|
|
110
|
+
*/
|
|
111
|
+
readonly client: AnyRouter;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Create an AnyRouter provider for the Vercel AI SDK.
|
|
115
|
+
*
|
|
116
|
+
* ```ts
|
|
117
|
+
* import { createAnyRouter } from "@anyr/ai-sdk-provider"
|
|
118
|
+
* import { generateText } from "ai"
|
|
119
|
+
*
|
|
120
|
+
* const anyrouter = createAnyRouter() // reads ANYROUTER_API_KEY
|
|
121
|
+
* const { text } = await generateText({
|
|
122
|
+
* model: anyrouter("openai/gpt-4o-mini"),
|
|
123
|
+
* prompt: "Hello!",
|
|
124
|
+
* })
|
|
125
|
+
* ```
|
|
126
|
+
*
|
|
127
|
+
* The `apiKey` is resolved **lazily** at request time (not at
|
|
128
|
+
* `createAnyRouter()` call time), so the factory can be constructed
|
|
129
|
+
* before environment variables are populated.
|
|
130
|
+
*/
|
|
131
|
+
declare function createAnyRouter(options?: AnyRouterProviderSettings): AnyRouterProvider;
|
|
132
|
+
/**
|
|
133
|
+
* Default AnyRouter provider instance.
|
|
134
|
+
*
|
|
135
|
+
* Uses `ANYROUTER_API_KEY` from the environment (resolved lazily at request time).
|
|
136
|
+
*
|
|
137
|
+
* ```ts
|
|
138
|
+
* import { anyrouter } from "@anyr/ai-sdk-provider"
|
|
139
|
+
* import { generateText } from "ai"
|
|
140
|
+
*
|
|
141
|
+
* const { text } = await generateText({
|
|
142
|
+
* model: anyrouter("openai/gpt-4o-mini"),
|
|
143
|
+
* prompt: "Hello!",
|
|
144
|
+
* })
|
|
145
|
+
* ```
|
|
146
|
+
*/
|
|
147
|
+
declare const anyrouter: AnyRouterProvider;
|
|
148
|
+
|
|
149
|
+
export { type AnyRouterChatConfig, AnyRouterChatLanguageModel, type AnyRouterEmbeddingConfig, AnyRouterEmbeddingModel, type AnyRouterImageConfig, AnyRouterImageModel, type AnyRouterProvider, type AnyRouterProviderSettings, anyrouter, createAnyRouter };
|