@hebo-ai/gateway 0.6.2-rc0 → 0.6.2
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/README.md +3 -3
- package/dist/endpoints/chat-completions/converters.js +26 -21
- package/dist/endpoints/chat-completions/handler.js +2 -0
- package/dist/endpoints/chat-completions/otel.js +1 -1
- package/dist/endpoints/chat-completions/schema.d.ts +4 -18
- package/dist/endpoints/chat-completions/schema.js +14 -17
- package/dist/endpoints/embeddings/handler.js +2 -0
- package/dist/endpoints/embeddings/otel.js +5 -0
- package/dist/endpoints/embeddings/schema.d.ts +6 -0
- package/dist/endpoints/embeddings/schema.js +4 -1
- package/dist/endpoints/models/converters.js +3 -3
- package/dist/lifecycle.js +2 -2
- package/dist/logger/default.js +3 -3
- package/dist/logger/index.d.ts +2 -5
- package/dist/middleware/common.js +1 -0
- package/dist/middleware/utils.js +0 -3
- package/dist/models/amazon/middleware.js +8 -5
- package/dist/models/anthropic/middleware.js +13 -13
- package/dist/models/catalog.js +5 -1
- package/dist/models/cohere/middleware.js +7 -5
- package/dist/models/google/middleware.d.ts +1 -1
- package/dist/models/google/middleware.js +29 -25
- package/dist/models/openai/middleware.js +13 -9
- package/dist/models/voyage/middleware.js +2 -1
- package/dist/providers/bedrock/middleware.js +21 -23
- package/dist/providers/registry.js +3 -0
- package/dist/telemetry/fetch.js +7 -2
- package/dist/telemetry/gen-ai.js +15 -12
- package/dist/telemetry/memory.d.ts +1 -1
- package/dist/telemetry/memory.js +30 -14
- package/dist/telemetry/span.js +1 -1
- package/dist/telemetry/stream.js +30 -23
- package/dist/utils/env.js +4 -2
- package/dist/utils/preset.js +1 -0
- package/dist/utils/response.js +3 -1
- package/package.json +36 -50
- package/src/config.ts +0 -98
- package/src/endpoints/chat-completions/converters.test.ts +0 -631
- package/src/endpoints/chat-completions/converters.ts +0 -899
- package/src/endpoints/chat-completions/handler.test.ts +0 -391
- package/src/endpoints/chat-completions/handler.ts +0 -201
- package/src/endpoints/chat-completions/index.ts +0 -4
- package/src/endpoints/chat-completions/otel.test.ts +0 -315
- package/src/endpoints/chat-completions/otel.ts +0 -214
- package/src/endpoints/chat-completions/schema.ts +0 -364
- package/src/endpoints/embeddings/converters.ts +0 -51
- package/src/endpoints/embeddings/handler.test.ts +0 -133
- package/src/endpoints/embeddings/handler.ts +0 -137
- package/src/endpoints/embeddings/index.ts +0 -4
- package/src/endpoints/embeddings/otel.ts +0 -40
- package/src/endpoints/embeddings/schema.ts +0 -36
- package/src/endpoints/models/converters.ts +0 -56
- package/src/endpoints/models/handler.test.ts +0 -122
- package/src/endpoints/models/handler.ts +0 -37
- package/src/endpoints/models/index.ts +0 -3
- package/src/endpoints/models/schema.ts +0 -37
- package/src/errors/ai-sdk.ts +0 -99
- package/src/errors/gateway.ts +0 -17
- package/src/errors/openai.ts +0 -57
- package/src/errors/utils.ts +0 -47
- package/src/gateway.ts +0 -50
- package/src/index.ts +0 -19
- package/src/lifecycle.ts +0 -135
- package/src/logger/default.ts +0 -105
- package/src/logger/index.ts +0 -42
- package/src/middleware/common.test.ts +0 -215
- package/src/middleware/common.ts +0 -163
- package/src/middleware/debug.ts +0 -37
- package/src/middleware/matcher.ts +0 -161
- package/src/middleware/utils.ts +0 -34
- package/src/models/amazon/index.ts +0 -2
- package/src/models/amazon/middleware.test.ts +0 -133
- package/src/models/amazon/middleware.ts +0 -79
- package/src/models/amazon/presets.ts +0 -104
- package/src/models/anthropic/index.ts +0 -2
- package/src/models/anthropic/middleware.test.ts +0 -643
- package/src/models/anthropic/middleware.ts +0 -148
- package/src/models/anthropic/presets.ts +0 -191
- package/src/models/catalog.ts +0 -13
- package/src/models/cohere/index.ts +0 -2
- package/src/models/cohere/middleware.test.ts +0 -138
- package/src/models/cohere/middleware.ts +0 -76
- package/src/models/cohere/presets.ts +0 -186
- package/src/models/google/index.ts +0 -2
- package/src/models/google/middleware.test.ts +0 -298
- package/src/models/google/middleware.ts +0 -137
- package/src/models/google/presets.ts +0 -118
- package/src/models/meta/index.ts +0 -1
- package/src/models/meta/presets.ts +0 -143
- package/src/models/openai/index.ts +0 -2
- package/src/models/openai/middleware.test.ts +0 -189
- package/src/models/openai/middleware.ts +0 -103
- package/src/models/openai/presets.ts +0 -280
- package/src/models/types.ts +0 -114
- package/src/models/voyage/index.ts +0 -2
- package/src/models/voyage/middleware.test.ts +0 -28
- package/src/models/voyage/middleware.ts +0 -23
- package/src/models/voyage/presets.ts +0 -126
- package/src/providers/anthropic/canonical.ts +0 -17
- package/src/providers/anthropic/index.ts +0 -1
- package/src/providers/bedrock/canonical.ts +0 -87
- package/src/providers/bedrock/index.ts +0 -2
- package/src/providers/bedrock/middleware.test.ts +0 -303
- package/src/providers/bedrock/middleware.ts +0 -128
- package/src/providers/cohere/canonical.ts +0 -26
- package/src/providers/cohere/index.ts +0 -1
- package/src/providers/groq/canonical.ts +0 -21
- package/src/providers/groq/index.ts +0 -1
- package/src/providers/openai/canonical.ts +0 -16
- package/src/providers/openai/index.ts +0 -1
- package/src/providers/registry.test.ts +0 -44
- package/src/providers/registry.ts +0 -165
- package/src/providers/types.ts +0 -20
- package/src/providers/vertex/canonical.ts +0 -17
- package/src/providers/vertex/index.ts +0 -1
- package/src/providers/voyage/canonical.ts +0 -16
- package/src/providers/voyage/index.ts +0 -1
- package/src/telemetry/ai-sdk.ts +0 -46
- package/src/telemetry/baggage.ts +0 -27
- package/src/telemetry/fetch.ts +0 -62
- package/src/telemetry/gen-ai.ts +0 -113
- package/src/telemetry/http.ts +0 -62
- package/src/telemetry/index.ts +0 -1
- package/src/telemetry/memory.ts +0 -36
- package/src/telemetry/span.ts +0 -85
- package/src/telemetry/stream.ts +0 -64
- package/src/types.ts +0 -223
- package/src/utils/env.ts +0 -7
- package/src/utils/headers.ts +0 -27
- package/src/utils/preset.ts +0 -65
- package/src/utils/request.test.ts +0 -75
- package/src/utils/request.ts +0 -52
- package/src/utils/response.ts +0 -84
- package/src/utils/url.ts +0 -26
|
@@ -1,280 +0,0 @@
|
|
|
1
|
-
import type { CanonicalProviderId } from "../../providers/types";
|
|
2
|
-
import type { CanonicalModelId, CatalogModel } from "../types";
|
|
3
|
-
|
|
4
|
-
import { presetFor, type DeepPartial } from "../../utils/preset";
|
|
5
|
-
|
|
6
|
-
const GPT_OSS_BASE = {
|
|
7
|
-
modalities: {
|
|
8
|
-
input: ["text", "file"] as const,
|
|
9
|
-
output: ["text"] as const,
|
|
10
|
-
},
|
|
11
|
-
capabilities: [
|
|
12
|
-
"attachments",
|
|
13
|
-
"reasoning",
|
|
14
|
-
"tool_call",
|
|
15
|
-
"structured_output",
|
|
16
|
-
"temperature",
|
|
17
|
-
] as const,
|
|
18
|
-
context: 131072,
|
|
19
|
-
providers: ["groq", "bedrock", "vertex"] as const satisfies readonly CanonicalProviderId[],
|
|
20
|
-
} satisfies DeepPartial<CatalogModel>;
|
|
21
|
-
|
|
22
|
-
const GPT_BASE = {
|
|
23
|
-
modalities: {
|
|
24
|
-
input: ["text", "image"] as const,
|
|
25
|
-
output: ["text"] as const,
|
|
26
|
-
},
|
|
27
|
-
capabilities: [
|
|
28
|
-
"attachments",
|
|
29
|
-
"reasoning",
|
|
30
|
-
"tool_call",
|
|
31
|
-
"structured_output",
|
|
32
|
-
"temperature",
|
|
33
|
-
] as const,
|
|
34
|
-
providers: ["openai", "azure"] as const satisfies readonly CanonicalProviderId[],
|
|
35
|
-
} satisfies DeepPartial<CatalogModel>;
|
|
36
|
-
|
|
37
|
-
const GPT_PRO_BASE = {
|
|
38
|
-
modalities: {
|
|
39
|
-
input: ["text", "image"] as const,
|
|
40
|
-
output: ["text"] as const,
|
|
41
|
-
},
|
|
42
|
-
capabilities: [
|
|
43
|
-
"attachments",
|
|
44
|
-
"reasoning",
|
|
45
|
-
"tool_call",
|
|
46
|
-
"structured_output",
|
|
47
|
-
"temperature",
|
|
48
|
-
] as const,
|
|
49
|
-
providers: ["openai", "azure"] as const satisfies readonly CanonicalProviderId[],
|
|
50
|
-
} satisfies DeepPartial<CatalogModel>;
|
|
51
|
-
|
|
52
|
-
const EMBEDDINGS_BASE = {
|
|
53
|
-
modalities: {
|
|
54
|
-
input: ["text"] as const,
|
|
55
|
-
output: ["embedding"] as const,
|
|
56
|
-
},
|
|
57
|
-
providers: ["openai", "azure"] as const satisfies readonly CanonicalProviderId[],
|
|
58
|
-
} satisfies DeepPartial<CatalogModel>;
|
|
59
|
-
|
|
60
|
-
export const gpt5 = presetFor<CanonicalModelId, CatalogModel>()("openai/gpt-5" as const, {
|
|
61
|
-
...GPT_BASE,
|
|
62
|
-
name: "GPT-5",
|
|
63
|
-
created: "2025-08-07",
|
|
64
|
-
knowledge: "2024-09",
|
|
65
|
-
context: 400000,
|
|
66
|
-
} satisfies CatalogModel);
|
|
67
|
-
|
|
68
|
-
export const gpt5Pro = presetFor<CanonicalModelId, CatalogModel>()("openai/gpt-5-pro" as const, {
|
|
69
|
-
...GPT_PRO_BASE,
|
|
70
|
-
name: "GPT-5 Pro",
|
|
71
|
-
created: "2025-10-06",
|
|
72
|
-
knowledge: "2024-09",
|
|
73
|
-
context: 400000,
|
|
74
|
-
} satisfies CatalogModel);
|
|
75
|
-
|
|
76
|
-
export const gpt5Mini = presetFor<CanonicalModelId, CatalogModel>()("openai/gpt-5-mini" as const, {
|
|
77
|
-
...GPT_BASE,
|
|
78
|
-
name: "GPT-5 Mini",
|
|
79
|
-
created: "2025-08-07",
|
|
80
|
-
knowledge: "2024-05",
|
|
81
|
-
context: 400000,
|
|
82
|
-
} satisfies CatalogModel);
|
|
83
|
-
|
|
84
|
-
export const gpt5Nano = presetFor<CanonicalModelId, CatalogModel>()("openai/gpt-5-nano" as const, {
|
|
85
|
-
...GPT_BASE,
|
|
86
|
-
name: "GPT-5 Nano",
|
|
87
|
-
created: "2025-08-07",
|
|
88
|
-
knowledge: "2024-05",
|
|
89
|
-
context: 400000,
|
|
90
|
-
} satisfies CatalogModel);
|
|
91
|
-
|
|
92
|
-
export const gpt51 = presetFor<CanonicalModelId, CatalogModel>()("openai/gpt-5.1" as const, {
|
|
93
|
-
...GPT_BASE,
|
|
94
|
-
name: "GPT-5.1",
|
|
95
|
-
created: "2025-11-13",
|
|
96
|
-
knowledge: "2024-09",
|
|
97
|
-
context: 400000,
|
|
98
|
-
} satisfies CatalogModel);
|
|
99
|
-
|
|
100
|
-
export const gpt51Chat = presetFor<CanonicalModelId, CatalogModel>()(
|
|
101
|
-
"openai/gpt-5.1-chat" as const,
|
|
102
|
-
{
|
|
103
|
-
...GPT_BASE,
|
|
104
|
-
name: "GPT-5.1 Chat",
|
|
105
|
-
created: "2025-11-13",
|
|
106
|
-
knowledge: "2024-09",
|
|
107
|
-
context: 128000,
|
|
108
|
-
} satisfies CatalogModel,
|
|
109
|
-
);
|
|
110
|
-
|
|
111
|
-
export const gpt51Codex = presetFor<CanonicalModelId, CatalogModel>()(
|
|
112
|
-
"openai/gpt-5.1-codex" as const,
|
|
113
|
-
{
|
|
114
|
-
...GPT_BASE,
|
|
115
|
-
name: "GPT-5.1 Codex",
|
|
116
|
-
created: "2025-11-13",
|
|
117
|
-
knowledge: "2024-09",
|
|
118
|
-
context: 400000,
|
|
119
|
-
} satisfies CatalogModel,
|
|
120
|
-
);
|
|
121
|
-
|
|
122
|
-
export const gpt51CodexMax = presetFor<CanonicalModelId, CatalogModel>()(
|
|
123
|
-
"openai/gpt-5.1-codex-max" as const,
|
|
124
|
-
{
|
|
125
|
-
...GPT_BASE,
|
|
126
|
-
name: "GPT-5.1 Codex Max",
|
|
127
|
-
created: "2025-11-19",
|
|
128
|
-
knowledge: "2024-09",
|
|
129
|
-
context: 400000,
|
|
130
|
-
} satisfies CatalogModel,
|
|
131
|
-
);
|
|
132
|
-
|
|
133
|
-
export const gpt5Codex = presetFor<CanonicalModelId, CatalogModel>()(
|
|
134
|
-
"openai/gpt-5-codex" as const,
|
|
135
|
-
{
|
|
136
|
-
...GPT_BASE,
|
|
137
|
-
name: "GPT-5 Codex",
|
|
138
|
-
created: "2025-09-15",
|
|
139
|
-
knowledge: "2024-09",
|
|
140
|
-
context: 400000,
|
|
141
|
-
} satisfies CatalogModel,
|
|
142
|
-
);
|
|
143
|
-
|
|
144
|
-
export const gpt52 = presetFor<CanonicalModelId, CatalogModel>()("openai/gpt-5.2" as const, {
|
|
145
|
-
...GPT_BASE,
|
|
146
|
-
name: "GPT-5.2",
|
|
147
|
-
created: "2025-12-11",
|
|
148
|
-
knowledge: "2025-08",
|
|
149
|
-
context: 400000,
|
|
150
|
-
} satisfies CatalogModel);
|
|
151
|
-
|
|
152
|
-
export const gpt52Chat = presetFor<CanonicalModelId, CatalogModel>()(
|
|
153
|
-
"openai/gpt-5.2-chat" as const,
|
|
154
|
-
{
|
|
155
|
-
...GPT_BASE,
|
|
156
|
-
name: "GPT-5.2 Chat",
|
|
157
|
-
created: "2025-12-11",
|
|
158
|
-
knowledge: "2025-08",
|
|
159
|
-
context: 128000,
|
|
160
|
-
} satisfies CatalogModel,
|
|
161
|
-
);
|
|
162
|
-
|
|
163
|
-
export const gpt52Pro = presetFor<CanonicalModelId, CatalogModel>()("openai/gpt-5.2-pro" as const, {
|
|
164
|
-
...GPT_PRO_BASE,
|
|
165
|
-
name: "GPT-5.2 Pro",
|
|
166
|
-
created: "2025-12-11",
|
|
167
|
-
knowledge: "2025-08",
|
|
168
|
-
context: 400000,
|
|
169
|
-
} satisfies CatalogModel);
|
|
170
|
-
|
|
171
|
-
export const gpt52Codex = presetFor<CanonicalModelId, CatalogModel>()(
|
|
172
|
-
"openai/gpt-5.2-codex" as const,
|
|
173
|
-
{
|
|
174
|
-
...GPT_BASE,
|
|
175
|
-
name: "GPT-5.2 Codex",
|
|
176
|
-
created: "2025-12-18",
|
|
177
|
-
knowledge: "2025-08",
|
|
178
|
-
} satisfies CatalogModel,
|
|
179
|
-
);
|
|
180
|
-
|
|
181
|
-
export const gpt53Codex = presetFor<CanonicalModelId, CatalogModel>()(
|
|
182
|
-
"openai/gpt-5.3-codex" as const,
|
|
183
|
-
{
|
|
184
|
-
...GPT_BASE,
|
|
185
|
-
name: "GPT-5.3 Codex",
|
|
186
|
-
created: "2026-02-05",
|
|
187
|
-
knowledge: "2025-08",
|
|
188
|
-
} satisfies CatalogModel,
|
|
189
|
-
);
|
|
190
|
-
|
|
191
|
-
export const textEmbedding3Small = presetFor<CanonicalModelId, CatalogModel>()(
|
|
192
|
-
"openai/text-embedding-3-small" as const,
|
|
193
|
-
{
|
|
194
|
-
...EMBEDDINGS_BASE,
|
|
195
|
-
name: "Text Embedding 3 Small",
|
|
196
|
-
created: "2024-01-25",
|
|
197
|
-
context: 8192,
|
|
198
|
-
} satisfies CatalogModel,
|
|
199
|
-
);
|
|
200
|
-
|
|
201
|
-
export const textEmbedding3Large = presetFor<CanonicalModelId, CatalogModel>()(
|
|
202
|
-
"openai/text-embedding-3-large" as const,
|
|
203
|
-
{
|
|
204
|
-
...EMBEDDINGS_BASE,
|
|
205
|
-
name: "Text Embedding 3 Large",
|
|
206
|
-
created: "2024-01-25",
|
|
207
|
-
context: 8192,
|
|
208
|
-
} satisfies CatalogModel,
|
|
209
|
-
);
|
|
210
|
-
|
|
211
|
-
export const gptOss20b = presetFor<CanonicalModelId, CatalogModel>()(
|
|
212
|
-
"openai/gpt-oss-20b" as const,
|
|
213
|
-
{
|
|
214
|
-
...GPT_OSS_BASE,
|
|
215
|
-
name: "GPT-OSS 20B",
|
|
216
|
-
created: "2025-08-05",
|
|
217
|
-
knowledge: "2024-06",
|
|
218
|
-
} satisfies CatalogModel,
|
|
219
|
-
);
|
|
220
|
-
|
|
221
|
-
export const gptOss120b = presetFor<CanonicalModelId, CatalogModel>()(
|
|
222
|
-
"openai/gpt-oss-120b" as const,
|
|
223
|
-
{
|
|
224
|
-
...GPT_OSS_BASE,
|
|
225
|
-
name: "GPT-OSS 120B",
|
|
226
|
-
created: "2025-08-05",
|
|
227
|
-
knowledge: "2024-06",
|
|
228
|
-
} satisfies CatalogModel,
|
|
229
|
-
);
|
|
230
|
-
|
|
231
|
-
const gptOssAtomic = {
|
|
232
|
-
v1: [gptOss20b, gptOss120b],
|
|
233
|
-
} as const;
|
|
234
|
-
|
|
235
|
-
const gptOssGroups = {
|
|
236
|
-
"v1.x": [...gptOssAtomic["v1"]],
|
|
237
|
-
} as const;
|
|
238
|
-
|
|
239
|
-
const gptAtomic = {
|
|
240
|
-
v5: [gpt5, gpt5Mini, gpt5Nano, gpt5Pro],
|
|
241
|
-
"v5.1": [gpt51, gpt51Chat, gpt51Codex, gpt51CodexMax],
|
|
242
|
-
"v5.2": [gpt52, gpt52Chat, gpt52Pro, gpt52Codex],
|
|
243
|
-
"v5.3": [gpt53Codex],
|
|
244
|
-
codex: [gpt5Codex, gpt51Codex, gpt51CodexMax, gpt52Codex, gpt53Codex],
|
|
245
|
-
chat: [gpt51Chat, gpt52Chat],
|
|
246
|
-
pro: [gpt5Pro, gpt52Pro],
|
|
247
|
-
} as const;
|
|
248
|
-
|
|
249
|
-
const gptGroups = {
|
|
250
|
-
"v5.x": [...gptAtomic["v5"], ...gptAtomic["v5.1"], ...gptAtomic["v5.2"], ...gptAtomic["v5.3"]],
|
|
251
|
-
} as const;
|
|
252
|
-
|
|
253
|
-
const textEmbeddingsAtomic = {
|
|
254
|
-
v3: [textEmbedding3Small, textEmbedding3Large],
|
|
255
|
-
} as const;
|
|
256
|
-
|
|
257
|
-
const textEmbeddingsGroups = {
|
|
258
|
-
"v3.x": [...textEmbeddingsAtomic["v3"]],
|
|
259
|
-
} as const;
|
|
260
|
-
|
|
261
|
-
export const gptOss = {
|
|
262
|
-
...gptOssAtomic,
|
|
263
|
-
...gptOssGroups,
|
|
264
|
-
latest: [...gptOssAtomic["v1"]],
|
|
265
|
-
all: Object.values(gptOssAtomic).flat(),
|
|
266
|
-
} as const;
|
|
267
|
-
|
|
268
|
-
export const gpt = {
|
|
269
|
-
...gptAtomic,
|
|
270
|
-
...gptGroups,
|
|
271
|
-
latest: [gpt52, gpt5Mini, gpt5Nano],
|
|
272
|
-
all: Object.values(gptAtomic).flat(),
|
|
273
|
-
} as const;
|
|
274
|
-
|
|
275
|
-
export const textEmbeddings = {
|
|
276
|
-
...textEmbeddingsAtomic,
|
|
277
|
-
...textEmbeddingsGroups,
|
|
278
|
-
latest: [...textEmbeddingsAtomic["v3"]],
|
|
279
|
-
all: Object.values(textEmbeddingsAtomic).flat(),
|
|
280
|
-
} as const;
|
package/src/models/types.ts
DELETED
|
@@ -1,114 +0,0 @@
|
|
|
1
|
-
import type { ProviderId } from "../providers/types";
|
|
2
|
-
|
|
3
|
-
export const CANONICAL_MODEL_IDS = [
|
|
4
|
-
// Anthropic
|
|
5
|
-
"anthropic/claude-opus-4.6",
|
|
6
|
-
"anthropic/claude-sonnet-4.6",
|
|
7
|
-
"anthropic/claude-haiku-4.5",
|
|
8
|
-
"anthropic/claude-sonnet-4.5",
|
|
9
|
-
"anthropic/claude-opus-4.5",
|
|
10
|
-
"anthropic/claude-opus-4.1",
|
|
11
|
-
"anthropic/claude-opus-4",
|
|
12
|
-
"anthropic/claude-sonnet-4",
|
|
13
|
-
"anthropic/claude-sonnet-3.7",
|
|
14
|
-
"anthropic/claude-sonnet-3.5",
|
|
15
|
-
"anthropic/claude-haiku-3.5",
|
|
16
|
-
"anthropic/claude-haiku-3",
|
|
17
|
-
// OpenAI
|
|
18
|
-
"openai/gpt-oss-20b",
|
|
19
|
-
"openai/gpt-oss-120b",
|
|
20
|
-
"openai/gpt-5",
|
|
21
|
-
"openai/gpt-5-pro",
|
|
22
|
-
"openai/gpt-5.2",
|
|
23
|
-
"openai/gpt-5.2-chat",
|
|
24
|
-
"openai/gpt-5.2-pro",
|
|
25
|
-
"openai/gpt-5.2-codex",
|
|
26
|
-
"openai/gpt-5.3-codex",
|
|
27
|
-
"openai/gpt-5-mini",
|
|
28
|
-
"openai/gpt-5-nano",
|
|
29
|
-
"openai/gpt-5-codex",
|
|
30
|
-
"openai/gpt-5.1-codex",
|
|
31
|
-
"openai/gpt-5.1-codex-max",
|
|
32
|
-
"openai/gpt-5.1-chat",
|
|
33
|
-
"openai/gpt-5.1",
|
|
34
|
-
"openai/text-embedding-3-small",
|
|
35
|
-
"openai/text-embedding-3-large",
|
|
36
|
-
// Amazon
|
|
37
|
-
"amazon/nova-micro",
|
|
38
|
-
"amazon/nova-lite",
|
|
39
|
-
"amazon/nova-pro",
|
|
40
|
-
"amazon/nova-premier",
|
|
41
|
-
"amazon/nova-2-lite",
|
|
42
|
-
"amazon/nova-2-multimodal-embeddings",
|
|
43
|
-
// Google
|
|
44
|
-
"google/gemini-2.5-flash-lite",
|
|
45
|
-
"google/gemini-2.5-flash",
|
|
46
|
-
"google/gemini-2.5-pro",
|
|
47
|
-
"google/gemini-3-flash-preview",
|
|
48
|
-
"google/gemini-3.1-flash-lite-preview",
|
|
49
|
-
"google/gemini-3.1-pro-preview",
|
|
50
|
-
"google/embedding-001",
|
|
51
|
-
// Meta
|
|
52
|
-
"meta/llama-3.1-8b",
|
|
53
|
-
"meta/llama-3.1-70b",
|
|
54
|
-
"meta/llama-3.1-405b",
|
|
55
|
-
"meta/llama-3.2-1b",
|
|
56
|
-
"meta/llama-3.2-3b",
|
|
57
|
-
"meta/llama-3.2-11b",
|
|
58
|
-
"meta/llama-3.2-90b",
|
|
59
|
-
"meta/llama-3.3-70b",
|
|
60
|
-
"meta/llama-4-scout",
|
|
61
|
-
"meta/llama-4-maverick",
|
|
62
|
-
// Cohere
|
|
63
|
-
"cohere/embed-v4.0",
|
|
64
|
-
"cohere/embed-english-v3.0",
|
|
65
|
-
"cohere/embed-english-light-v3.0",
|
|
66
|
-
"cohere/embed-multilingual-v3.0",
|
|
67
|
-
"cohere/embed-multilingual-light-v3.0",
|
|
68
|
-
"cohere/command-a",
|
|
69
|
-
"cohere/command-r7b",
|
|
70
|
-
"cohere/command-a-translate",
|
|
71
|
-
"cohere/command-a-reasoning",
|
|
72
|
-
"cohere/command-a-vision",
|
|
73
|
-
"cohere/command-r",
|
|
74
|
-
"cohere/command-r-plus",
|
|
75
|
-
// Voyage
|
|
76
|
-
"voyage/voyage-2-code",
|
|
77
|
-
"voyage/voyage-2-law",
|
|
78
|
-
"voyage/voyage-2-finance",
|
|
79
|
-
"voyage/voyage-3-code",
|
|
80
|
-
"voyage/voyage-3-large",
|
|
81
|
-
"voyage/voyage-3.5-lite",
|
|
82
|
-
"voyage/voyage-3.5",
|
|
83
|
-
"voyage/voyage-4-lite",
|
|
84
|
-
"voyage/voyage-4",
|
|
85
|
-
"voyage/voyage-4-large",
|
|
86
|
-
] as const;
|
|
87
|
-
|
|
88
|
-
export type CanonicalModelId = (typeof CANONICAL_MODEL_IDS)[number];
|
|
89
|
-
// oxlint-disable-next-line ban-types
|
|
90
|
-
export type ModelId = CanonicalModelId | (string & {});
|
|
91
|
-
|
|
92
|
-
export type CatalogModel = {
|
|
93
|
-
name?: string;
|
|
94
|
-
created?: string;
|
|
95
|
-
knowledge?: string;
|
|
96
|
-
modalities?: {
|
|
97
|
-
input: readonly ("text" | "image" | "file" | "audio" | "video" | "pdf")[];
|
|
98
|
-
output: readonly ("text" | "image" | "audio" | "video" | "embedding")[];
|
|
99
|
-
};
|
|
100
|
-
context?: number;
|
|
101
|
-
capabilities?: readonly (
|
|
102
|
-
| "attachments"
|
|
103
|
-
| "reasoning"
|
|
104
|
-
| "tool_call"
|
|
105
|
-
| "structured_output"
|
|
106
|
-
| "temperature"
|
|
107
|
-
)[];
|
|
108
|
-
providers: readonly ProviderId[];
|
|
109
|
-
additionalProperties?: Record<string, unknown>;
|
|
110
|
-
};
|
|
111
|
-
|
|
112
|
-
export type ModelCatalog = {
|
|
113
|
-
[K in ModelId]?: CatalogModel;
|
|
114
|
-
};
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import { expect, test } from "bun:test";
|
|
2
|
-
|
|
3
|
-
import { modelMiddlewareMatcher } from "../../middleware/matcher";
|
|
4
|
-
import { CANONICAL_MODEL_IDS } from "../../models/types";
|
|
5
|
-
import { voyageDimensionsMiddleware } from "./middleware";
|
|
6
|
-
|
|
7
|
-
test("voyageDimensionsMiddleware > matching patterns", () => {
|
|
8
|
-
const matching = [
|
|
9
|
-
"voyage/voyage-2-code",
|
|
10
|
-
"voyage/voyage-3.5",
|
|
11
|
-
"voyage/voyage-4",
|
|
12
|
-
] satisfies (typeof CANONICAL_MODEL_IDS)[number][];
|
|
13
|
-
|
|
14
|
-
const nonMatching = [
|
|
15
|
-
"openai/text-embedding-3-small",
|
|
16
|
-
"cohere/embed-v4.0",
|
|
17
|
-
] satisfies (typeof CANONICAL_MODEL_IDS)[number][];
|
|
18
|
-
|
|
19
|
-
for (const id of matching) {
|
|
20
|
-
const middleware = modelMiddlewareMatcher.resolve({ kind: "embedding", modelId: id });
|
|
21
|
-
expect(middleware).toContain(voyageDimensionsMiddleware);
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
for (const id of nonMatching) {
|
|
25
|
-
const middleware = modelMiddlewareMatcher.resolve({ kind: "embedding", modelId: id });
|
|
26
|
-
expect(middleware).not.toContain(voyageDimensionsMiddleware);
|
|
27
|
-
}
|
|
28
|
-
});
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import type { EmbeddingModelMiddleware } from "ai";
|
|
2
|
-
|
|
3
|
-
import { modelMiddlewareMatcher } from "../../middleware/matcher";
|
|
4
|
-
|
|
5
|
-
// Convert `dimensions` (OpenAI) to `outputDimension` (Voyage)
|
|
6
|
-
export const voyageDimensionsMiddleware: EmbeddingModelMiddleware = {
|
|
7
|
-
specificationVersion: "v3",
|
|
8
|
-
// oxlint-disable-next-line require-await
|
|
9
|
-
transformParams: async ({ params }) => {
|
|
10
|
-
const unknown = params.providerOptions?.["unknown"];
|
|
11
|
-
if (!unknown) return params;
|
|
12
|
-
|
|
13
|
-
const dimensions = unknown["dimensions"] as number;
|
|
14
|
-
if (!dimensions) return params;
|
|
15
|
-
|
|
16
|
-
(params.providerOptions!["voyage"] ??= {})["outputDimension"] = dimensions;
|
|
17
|
-
delete unknown["dimensions"];
|
|
18
|
-
|
|
19
|
-
return params;
|
|
20
|
-
},
|
|
21
|
-
};
|
|
22
|
-
|
|
23
|
-
modelMiddlewareMatcher.useForModel("voyage/*", { embedding: [voyageDimensionsMiddleware] });
|
|
@@ -1,126 +0,0 @@
|
|
|
1
|
-
import type { CanonicalProviderId } from "../../providers/types";
|
|
2
|
-
import type { CanonicalModelId, CatalogModel } from "../types";
|
|
3
|
-
|
|
4
|
-
import { presetFor, type DeepPartial } from "../../utils/preset";
|
|
5
|
-
|
|
6
|
-
const VOYAGE_BASE = {
|
|
7
|
-
modalities: {
|
|
8
|
-
input: ["text"] as const,
|
|
9
|
-
output: ["embedding"] as const,
|
|
10
|
-
},
|
|
11
|
-
providers: ["voyage"] as const satisfies readonly CanonicalProviderId[],
|
|
12
|
-
} satisfies DeepPartial<CatalogModel>;
|
|
13
|
-
|
|
14
|
-
export const voyage2Code = presetFor<CanonicalModelId, CatalogModel>()(
|
|
15
|
-
"voyage/voyage-2-code" as const,
|
|
16
|
-
{
|
|
17
|
-
...VOYAGE_BASE,
|
|
18
|
-
name: "Voyage 2 Code",
|
|
19
|
-
created: "2024-01-23",
|
|
20
|
-
context: 16000,
|
|
21
|
-
} satisfies CatalogModel,
|
|
22
|
-
);
|
|
23
|
-
|
|
24
|
-
export const voyage2Finance = presetFor<CanonicalModelId, CatalogModel>()(
|
|
25
|
-
"voyage/voyage-2-finance" as const,
|
|
26
|
-
{
|
|
27
|
-
...VOYAGE_BASE,
|
|
28
|
-
name: "Voyage 2 Finance",
|
|
29
|
-
created: "2024-06-03",
|
|
30
|
-
context: 32000,
|
|
31
|
-
} satisfies CatalogModel,
|
|
32
|
-
);
|
|
33
|
-
|
|
34
|
-
export const voyage2Law = presetFor<CanonicalModelId, CatalogModel>()(
|
|
35
|
-
"voyage/voyage-2-law" as const,
|
|
36
|
-
{
|
|
37
|
-
...VOYAGE_BASE,
|
|
38
|
-
name: "Voyage 2 Law",
|
|
39
|
-
created: "2024-04-15",
|
|
40
|
-
context: 16000,
|
|
41
|
-
} satisfies CatalogModel,
|
|
42
|
-
);
|
|
43
|
-
|
|
44
|
-
export const voyage3Code = presetFor<CanonicalModelId, CatalogModel>()(
|
|
45
|
-
"voyage/voyage-3-code" as const,
|
|
46
|
-
{
|
|
47
|
-
...VOYAGE_BASE,
|
|
48
|
-
name: "Voyage 3 Code",
|
|
49
|
-
created: "2024-12-04",
|
|
50
|
-
context: 32000,
|
|
51
|
-
} satisfies CatalogModel,
|
|
52
|
-
);
|
|
53
|
-
|
|
54
|
-
export const voyage3Large = presetFor<CanonicalModelId, CatalogModel>()(
|
|
55
|
-
"voyage/voyage-3-large" as const,
|
|
56
|
-
{
|
|
57
|
-
...VOYAGE_BASE,
|
|
58
|
-
name: "Voyage 3 Large",
|
|
59
|
-
created: "2025-01-07",
|
|
60
|
-
context: 32000,
|
|
61
|
-
} satisfies CatalogModel,
|
|
62
|
-
);
|
|
63
|
-
|
|
64
|
-
export const voyage35 = presetFor<CanonicalModelId, CatalogModel>()("voyage/voyage-3.5" as const, {
|
|
65
|
-
...VOYAGE_BASE,
|
|
66
|
-
name: "Voyage 3.5",
|
|
67
|
-
created: "2025-05-20",
|
|
68
|
-
context: 32000,
|
|
69
|
-
} satisfies CatalogModel);
|
|
70
|
-
|
|
71
|
-
export const voyage35Lite = presetFor<CanonicalModelId, CatalogModel>()(
|
|
72
|
-
"voyage/voyage-3.5-lite" as const,
|
|
73
|
-
{
|
|
74
|
-
...VOYAGE_BASE,
|
|
75
|
-
name: "Voyage 3.5 Lite",
|
|
76
|
-
created: "2025-05-20",
|
|
77
|
-
context: 32000,
|
|
78
|
-
} satisfies CatalogModel,
|
|
79
|
-
);
|
|
80
|
-
|
|
81
|
-
export const voyage4Lite = presetFor<CanonicalModelId, CatalogModel>()(
|
|
82
|
-
"voyage/voyage-4-lite" as const,
|
|
83
|
-
{
|
|
84
|
-
...VOYAGE_BASE,
|
|
85
|
-
name: "Voyage 4 Lite",
|
|
86
|
-
created: "2026-01-15",
|
|
87
|
-
context: 32000,
|
|
88
|
-
} satisfies CatalogModel,
|
|
89
|
-
);
|
|
90
|
-
|
|
91
|
-
export const voyage4 = presetFor<CanonicalModelId, CatalogModel>()("voyage/voyage-4" as const, {
|
|
92
|
-
...VOYAGE_BASE,
|
|
93
|
-
name: "Voyage 4",
|
|
94
|
-
created: "2026-01-15",
|
|
95
|
-
context: 32000,
|
|
96
|
-
} satisfies CatalogModel);
|
|
97
|
-
|
|
98
|
-
export const voyage4Large = presetFor<CanonicalModelId, CatalogModel>()(
|
|
99
|
-
"voyage/voyage-4-large" as const,
|
|
100
|
-
{
|
|
101
|
-
...VOYAGE_BASE,
|
|
102
|
-
name: "Voyage 4 Large",
|
|
103
|
-
created: "2026-01-15",
|
|
104
|
-
context: 32000,
|
|
105
|
-
} satisfies CatalogModel,
|
|
106
|
-
);
|
|
107
|
-
|
|
108
|
-
const voyageAtomic = {
|
|
109
|
-
v2: [voyage2Code, voyage2Finance, voyage2Law],
|
|
110
|
-
v3: [voyage3Code, voyage3Large],
|
|
111
|
-
"v3.5": [voyage35, voyage35Lite],
|
|
112
|
-
v4: [voyage4Lite, voyage4, voyage4Large],
|
|
113
|
-
} as const;
|
|
114
|
-
|
|
115
|
-
const voyageGroups = {
|
|
116
|
-
"v2.x": [...voyageAtomic["v2"]],
|
|
117
|
-
"v3.x": [...voyageAtomic["v3"], ...voyageAtomic["v3.5"]],
|
|
118
|
-
"v4.x": [...voyageAtomic["v4"]],
|
|
119
|
-
} as const;
|
|
120
|
-
|
|
121
|
-
export const voyage = {
|
|
122
|
-
...voyageAtomic,
|
|
123
|
-
...voyageGroups,
|
|
124
|
-
latest: [voyage2Finance, voyage2Law, voyage3Code, voyage4Lite, voyage4, voyage4Large],
|
|
125
|
-
all: Object.values(voyageAtomic).flat(),
|
|
126
|
-
} as const;
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { type AnthropicProvider } from "@ai-sdk/anthropic";
|
|
2
|
-
|
|
3
|
-
import type { ModelId } from "../../models/types";
|
|
4
|
-
|
|
5
|
-
import { withCanonicalIds } from "../registry";
|
|
6
|
-
|
|
7
|
-
export const withCanonicalIdsForAnthropic = (
|
|
8
|
-
provider: AnthropicProvider,
|
|
9
|
-
extraMapping?: Record<ModelId, string>,
|
|
10
|
-
) =>
|
|
11
|
-
withCanonicalIds(provider, {
|
|
12
|
-
mapping: extraMapping,
|
|
13
|
-
options: {
|
|
14
|
-
stripNamespace: true,
|
|
15
|
-
normalizeDelimiters: true,
|
|
16
|
-
},
|
|
17
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from "./canonical";
|
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
import { type AmazonBedrockProvider } from "@ai-sdk/amazon-bedrock";
|
|
2
|
-
|
|
3
|
-
import type { CanonicalModelId, ModelId } from "../../models/types";
|
|
4
|
-
|
|
5
|
-
import { withCanonicalIds } from "../registry";
|
|
6
|
-
|
|
7
|
-
// For a list of all models with their IDs and InferenceTypes check:
|
|
8
|
-
// https://docs.aws.amazon.com/bedrock/latest/userguide/models-supported.html
|
|
9
|
-
// OR
|
|
10
|
-
// aws bedrock list-foundation-models --region us-east-1 \
|
|
11
|
-
// --query "modelSummaries[].{id:modelId,mode:join(',', inferenceTypesSupported)}" \
|
|
12
|
-
// --output table
|
|
13
|
-
const MAPPING = {
|
|
14
|
-
// Require Inference Profiles and can't be resolved from standard name mapping
|
|
15
|
-
"anthropic/claude-haiku-4.5": "{ip}anthropic.claude-haiku-4-5-20251001-v1:0",
|
|
16
|
-
"anthropic/claude-sonnet-4.6": "{ip}anthropic.claude-sonnet-4-6",
|
|
17
|
-
"anthropic/claude-sonnet-4.5": "{ip}anthropic.claude-sonnet-4-5-20250929-v1:0",
|
|
18
|
-
"anthropic/claude-opus-4.6": "{ip}anthropic.claude-opus-4-6-v1",
|
|
19
|
-
"anthropic/claude-opus-4.5": "{ip}anthropic.claude-opus-4-5-20251101-v1:0",
|
|
20
|
-
"anthropic/claude-opus-4.1": "{ip}anthropic.claude-opus-4-1-20250805-v1:0",
|
|
21
|
-
"anthropic/claude-sonnet-4": "{ip}anthropic.claude-sonnet-4-20250514-v1:0",
|
|
22
|
-
"anthropic/claude-opus-4": "{ip}anthropic.claude-opus-4-20250514-v1:0",
|
|
23
|
-
"anthropic/claude-sonnet-3.7": "{ip}anthropic.claude-3-7-sonnet-20250219-v1:0",
|
|
24
|
-
"anthropic/claude-sonnet-3.5": "{ip}anthropic.claude-3-5-sonnet-20241022-v2:0",
|
|
25
|
-
"anthropic/claude-haiku-3.5": "{ip}anthropic.claude-3-5-haiku-20241022-v1:0",
|
|
26
|
-
"anthropic/claude-haiku-3": "{ip}anthropic.claude-3-haiku-20240307-v1:0",
|
|
27
|
-
"cohere/embed-v4.0": "{ip}cohere.embed-v4:0",
|
|
28
|
-
"meta/llama-3.1-70b": "{ip}meta.llama3-1-70b-instruct-v1:0",
|
|
29
|
-
"meta/llama-3.1-405b": "{ip}meta.llama3-1-405b-instruct-v1:0",
|
|
30
|
-
"meta/llama-3.2-1b": "{ip}meta.llama3-2-1b-instruct-v1:0",
|
|
31
|
-
"meta/llama-3.2-3b": "{ip}meta.llama3-2-3b-instruct-v1:0",
|
|
32
|
-
"meta/llama-3.2-11b": "{ip}meta.llama3-2-11b-instruct-v1:0",
|
|
33
|
-
"meta/llama-3.2-90b": "{ip}meta.llama3-2-90b-instruct-v1:0",
|
|
34
|
-
"meta/llama-4-scout": "{ip}meta.llama4-scout-17b-instruct-v1:0",
|
|
35
|
-
"meta/llama-4-maverick": "{ip}meta.llama4-maverick-17b-instruct-v1:0",
|
|
36
|
-
// On-demand only models, ensure that {ip} is never added
|
|
37
|
-
"amazon/nova-2-multimodal-embeddings": "amazon.nova-2-multimodal-embeddings-v1:0",
|
|
38
|
-
"cohere/embed-english-v3.0": "cohere.embed-english-v3",
|
|
39
|
-
"cohere/embed-multilingual-v3.0": "cohere.embed-multilingual-v3",
|
|
40
|
-
"cohere/command-r": "cohere.command-r-v1:0",
|
|
41
|
-
"cohere/command-r-plus": "cohere.command-r-plus-v1:0",
|
|
42
|
-
"meta/llama-3.3-70b": "meta.llama3-3-70b-instruct-v1:0",
|
|
43
|
-
"meta/llama-3.1-8b": "meta.llama3-1-8b-instruct-v1:0",
|
|
44
|
-
"openai/gpt-oss-20b": "openai.gpt-oss-20b-1:0",
|
|
45
|
-
"openai/gpt-oss-120b": "openai.gpt-oss-120b-1:0",
|
|
46
|
-
} as const satisfies Partial<Record<CanonicalModelId, string>>;
|
|
47
|
-
|
|
48
|
-
export type BedrockInferenceProfileOptions = {
|
|
49
|
-
/** @default "preferred" */
|
|
50
|
-
mode?: "preferred" | "avoid";
|
|
51
|
-
/** @default "us" */
|
|
52
|
-
// oxlint-disable-next-line ban-types
|
|
53
|
-
geo?: "global" | "us" | "eu" | "apac" | "au" | "ca" | "jp" | "us-gov" | (string & {});
|
|
54
|
-
arn?: { region: string; accountId: string };
|
|
55
|
-
};
|
|
56
|
-
|
|
57
|
-
const resolveInferenceProfile = ({ geo = "us", arn }: BedrockInferenceProfileOptions = {}) =>
|
|
58
|
-
`${arn ? `arn:aws:bedrock:${arn.region}:${arn.accountId}:inference-profile/` : ""}${geo}.`;
|
|
59
|
-
|
|
60
|
-
export type BedrockCanonicalConfig = {
|
|
61
|
-
inferenceProfile?: BedrockInferenceProfileOptions;
|
|
62
|
-
extraMapping?: Record<ModelId, string>;
|
|
63
|
-
};
|
|
64
|
-
|
|
65
|
-
export const withCanonicalIdsForBedrock = (
|
|
66
|
-
provider: AmazonBedrockProvider,
|
|
67
|
-
config: BedrockCanonicalConfig = {},
|
|
68
|
-
) =>
|
|
69
|
-
withCanonicalIds(provider, {
|
|
70
|
-
mapping: {
|
|
71
|
-
...MAPPING,
|
|
72
|
-
...config.extraMapping,
|
|
73
|
-
},
|
|
74
|
-
options: {
|
|
75
|
-
stripNamespace: false,
|
|
76
|
-
namespaceSeparator: ".",
|
|
77
|
-
normalizeDelimiters: true,
|
|
78
|
-
prefix:
|
|
79
|
-
config.inferenceProfile?.mode === "avoid"
|
|
80
|
-
? ""
|
|
81
|
-
: resolveInferenceProfile(config.inferenceProfile),
|
|
82
|
-
template: {
|
|
83
|
-
ip: resolveInferenceProfile(config.inferenceProfile),
|
|
84
|
-
},
|
|
85
|
-
postfix: config.inferenceProfile?.mode === "avoid" ? "" : "-v1:0",
|
|
86
|
-
},
|
|
87
|
-
});
|