@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.
Files changed (134) hide show
  1. package/README.md +3 -3
  2. package/dist/endpoints/chat-completions/converters.js +26 -21
  3. package/dist/endpoints/chat-completions/handler.js +2 -0
  4. package/dist/endpoints/chat-completions/otel.js +1 -1
  5. package/dist/endpoints/chat-completions/schema.d.ts +4 -18
  6. package/dist/endpoints/chat-completions/schema.js +14 -17
  7. package/dist/endpoints/embeddings/handler.js +2 -0
  8. package/dist/endpoints/embeddings/otel.js +5 -0
  9. package/dist/endpoints/embeddings/schema.d.ts +6 -0
  10. package/dist/endpoints/embeddings/schema.js +4 -1
  11. package/dist/endpoints/models/converters.js +3 -3
  12. package/dist/lifecycle.js +2 -2
  13. package/dist/logger/default.js +3 -3
  14. package/dist/logger/index.d.ts +2 -5
  15. package/dist/middleware/common.js +1 -0
  16. package/dist/middleware/utils.js +0 -3
  17. package/dist/models/amazon/middleware.js +8 -5
  18. package/dist/models/anthropic/middleware.js +13 -13
  19. package/dist/models/catalog.js +5 -1
  20. package/dist/models/cohere/middleware.js +7 -5
  21. package/dist/models/google/middleware.d.ts +1 -1
  22. package/dist/models/google/middleware.js +29 -25
  23. package/dist/models/openai/middleware.js +13 -9
  24. package/dist/models/voyage/middleware.js +2 -1
  25. package/dist/providers/bedrock/middleware.js +21 -23
  26. package/dist/providers/registry.js +3 -0
  27. package/dist/telemetry/fetch.js +7 -2
  28. package/dist/telemetry/gen-ai.js +15 -12
  29. package/dist/telemetry/memory.d.ts +1 -1
  30. package/dist/telemetry/memory.js +30 -14
  31. package/dist/telemetry/span.js +1 -1
  32. package/dist/telemetry/stream.js +30 -23
  33. package/dist/utils/env.js +4 -2
  34. package/dist/utils/preset.js +1 -0
  35. package/dist/utils/response.js +3 -1
  36. package/package.json +36 -50
  37. package/src/config.ts +0 -98
  38. package/src/endpoints/chat-completions/converters.test.ts +0 -631
  39. package/src/endpoints/chat-completions/converters.ts +0 -899
  40. package/src/endpoints/chat-completions/handler.test.ts +0 -391
  41. package/src/endpoints/chat-completions/handler.ts +0 -201
  42. package/src/endpoints/chat-completions/index.ts +0 -4
  43. package/src/endpoints/chat-completions/otel.test.ts +0 -315
  44. package/src/endpoints/chat-completions/otel.ts +0 -214
  45. package/src/endpoints/chat-completions/schema.ts +0 -364
  46. package/src/endpoints/embeddings/converters.ts +0 -51
  47. package/src/endpoints/embeddings/handler.test.ts +0 -133
  48. package/src/endpoints/embeddings/handler.ts +0 -137
  49. package/src/endpoints/embeddings/index.ts +0 -4
  50. package/src/endpoints/embeddings/otel.ts +0 -40
  51. package/src/endpoints/embeddings/schema.ts +0 -36
  52. package/src/endpoints/models/converters.ts +0 -56
  53. package/src/endpoints/models/handler.test.ts +0 -122
  54. package/src/endpoints/models/handler.ts +0 -37
  55. package/src/endpoints/models/index.ts +0 -3
  56. package/src/endpoints/models/schema.ts +0 -37
  57. package/src/errors/ai-sdk.ts +0 -99
  58. package/src/errors/gateway.ts +0 -17
  59. package/src/errors/openai.ts +0 -57
  60. package/src/errors/utils.ts +0 -47
  61. package/src/gateway.ts +0 -50
  62. package/src/index.ts +0 -19
  63. package/src/lifecycle.ts +0 -135
  64. package/src/logger/default.ts +0 -105
  65. package/src/logger/index.ts +0 -42
  66. package/src/middleware/common.test.ts +0 -215
  67. package/src/middleware/common.ts +0 -163
  68. package/src/middleware/debug.ts +0 -37
  69. package/src/middleware/matcher.ts +0 -161
  70. package/src/middleware/utils.ts +0 -34
  71. package/src/models/amazon/index.ts +0 -2
  72. package/src/models/amazon/middleware.test.ts +0 -133
  73. package/src/models/amazon/middleware.ts +0 -79
  74. package/src/models/amazon/presets.ts +0 -104
  75. package/src/models/anthropic/index.ts +0 -2
  76. package/src/models/anthropic/middleware.test.ts +0 -643
  77. package/src/models/anthropic/middleware.ts +0 -148
  78. package/src/models/anthropic/presets.ts +0 -191
  79. package/src/models/catalog.ts +0 -13
  80. package/src/models/cohere/index.ts +0 -2
  81. package/src/models/cohere/middleware.test.ts +0 -138
  82. package/src/models/cohere/middleware.ts +0 -76
  83. package/src/models/cohere/presets.ts +0 -186
  84. package/src/models/google/index.ts +0 -2
  85. package/src/models/google/middleware.test.ts +0 -298
  86. package/src/models/google/middleware.ts +0 -137
  87. package/src/models/google/presets.ts +0 -118
  88. package/src/models/meta/index.ts +0 -1
  89. package/src/models/meta/presets.ts +0 -143
  90. package/src/models/openai/index.ts +0 -2
  91. package/src/models/openai/middleware.test.ts +0 -189
  92. package/src/models/openai/middleware.ts +0 -103
  93. package/src/models/openai/presets.ts +0 -280
  94. package/src/models/types.ts +0 -114
  95. package/src/models/voyage/index.ts +0 -2
  96. package/src/models/voyage/middleware.test.ts +0 -28
  97. package/src/models/voyage/middleware.ts +0 -23
  98. package/src/models/voyage/presets.ts +0 -126
  99. package/src/providers/anthropic/canonical.ts +0 -17
  100. package/src/providers/anthropic/index.ts +0 -1
  101. package/src/providers/bedrock/canonical.ts +0 -87
  102. package/src/providers/bedrock/index.ts +0 -2
  103. package/src/providers/bedrock/middleware.test.ts +0 -303
  104. package/src/providers/bedrock/middleware.ts +0 -128
  105. package/src/providers/cohere/canonical.ts +0 -26
  106. package/src/providers/cohere/index.ts +0 -1
  107. package/src/providers/groq/canonical.ts +0 -21
  108. package/src/providers/groq/index.ts +0 -1
  109. package/src/providers/openai/canonical.ts +0 -16
  110. package/src/providers/openai/index.ts +0 -1
  111. package/src/providers/registry.test.ts +0 -44
  112. package/src/providers/registry.ts +0 -165
  113. package/src/providers/types.ts +0 -20
  114. package/src/providers/vertex/canonical.ts +0 -17
  115. package/src/providers/vertex/index.ts +0 -1
  116. package/src/providers/voyage/canonical.ts +0 -16
  117. package/src/providers/voyage/index.ts +0 -1
  118. package/src/telemetry/ai-sdk.ts +0 -46
  119. package/src/telemetry/baggage.ts +0 -27
  120. package/src/telemetry/fetch.ts +0 -62
  121. package/src/telemetry/gen-ai.ts +0 -113
  122. package/src/telemetry/http.ts +0 -62
  123. package/src/telemetry/index.ts +0 -1
  124. package/src/telemetry/memory.ts +0 -36
  125. package/src/telemetry/span.ts +0 -85
  126. package/src/telemetry/stream.ts +0 -64
  127. package/src/types.ts +0 -223
  128. package/src/utils/env.ts +0 -7
  129. package/src/utils/headers.ts +0 -27
  130. package/src/utils/preset.ts +0 -65
  131. package/src/utils/request.test.ts +0 -75
  132. package/src/utils/request.ts +0 -52
  133. package/src/utils/response.ts +0 -84
  134. 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;
@@ -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,2 +0,0 @@
1
- export * from "./middleware";
2
- export * from "./presets";
@@ -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
- });
@@ -1,2 +0,0 @@
1
- export * from "./canonical";
2
- export * from "./middleware";