@dbx-tools/shared-model-gateway 0.9.36
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 +202 -0
- package/README.md +21 -0
- package/exports.ts +1 -0
- package/index.ts +16 -0
- package/lib/exports.d.ts +1 -0
- package/lib/exports.js +2 -0
- package/lib/index.d.ts +12 -0
- package/lib/index.js +13 -0
- package/lib/src/client.d.ts +31 -0
- package/lib/src/client.js +55 -0
- package/lib/src/contracts.d.ts +267 -0
- package/lib/src/contracts.js +87 -0
- package/lib/src/models.d.ts +311 -0
- package/lib/src/models.js +127 -0
- package/lib/tsconfig.tsbuildinfo +1 -0
- package/package.json +88 -0
- package/src/client.ts +83 -0
- package/src/contracts.ts +111 -0
- package/src/models.ts +172 -0
|
@@ -0,0 +1,311 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Browser-safe HTTP model, embedding, and error payloads.
|
|
3
|
+
*
|
|
4
|
+
* @module
|
|
5
|
+
*/
|
|
6
|
+
import { z } from "zod";
|
|
7
|
+
/** Capabilities published with an OpenAI-compatible model entry. */
|
|
8
|
+
export declare const OpenAIModelCapabilitiesSchema: z.ZodObject<{
|
|
9
|
+
tools: z.ZodBoolean;
|
|
10
|
+
reasoning: z.ZodArray<z.ZodUnion<readonly [z.ZodLiteral<"none">, z.ZodLiteral<"minimal">, z.ZodLiteral<"low">, z.ZodLiteral<"medium">, z.ZodLiteral<"high">, z.ZodLiteral<"xhigh">, z.ZodLiteral<"max">]>>;
|
|
11
|
+
responses: z.ZodBoolean;
|
|
12
|
+
open_responses: z.ZodBoolean;
|
|
13
|
+
anthropic: z.ZodBoolean;
|
|
14
|
+
embeddings: z.ZodBoolean;
|
|
15
|
+
ai_gateway_codex: z.ZodBoolean;
|
|
16
|
+
streaming: z.ZodBoolean;
|
|
17
|
+
}, z.core.$strip>;
|
|
18
|
+
/** Capabilities published with an OpenAI-compatible model entry. */
|
|
19
|
+
export type OpenAIModelCapabilities = z.infer<typeof OpenAIModelCapabilitiesSchema>;
|
|
20
|
+
/** One OpenAI-compatible model-list entry. */
|
|
21
|
+
export declare const OpenAIModelSchema: z.ZodObject<{
|
|
22
|
+
id: z.ZodString;
|
|
23
|
+
object: z.ZodLiteral<"model">;
|
|
24
|
+
created: z.ZodNumber;
|
|
25
|
+
owned_by: z.ZodString;
|
|
26
|
+
name: z.ZodString;
|
|
27
|
+
task: z.ZodOptional<z.ZodString>;
|
|
28
|
+
status: z.ZodObject<{
|
|
29
|
+
deprecated: z.ZodDefault<z.ZodBoolean>;
|
|
30
|
+
}, z.core.$strip>;
|
|
31
|
+
capabilities: z.ZodObject<{
|
|
32
|
+
tools: z.ZodBoolean;
|
|
33
|
+
reasoning: z.ZodArray<z.ZodUnion<readonly [z.ZodLiteral<"none">, z.ZodLiteral<"minimal">, z.ZodLiteral<"low">, z.ZodLiteral<"medium">, z.ZodLiteral<"high">, z.ZodLiteral<"xhigh">, z.ZodLiteral<"max">]>>;
|
|
34
|
+
responses: z.ZodBoolean;
|
|
35
|
+
open_responses: z.ZodBoolean;
|
|
36
|
+
anthropic: z.ZodBoolean;
|
|
37
|
+
embeddings: z.ZodBoolean;
|
|
38
|
+
ai_gateway_codex: z.ZodBoolean;
|
|
39
|
+
streaming: z.ZodBoolean;
|
|
40
|
+
}, z.core.$strip>;
|
|
41
|
+
}, z.core.$strip>;
|
|
42
|
+
/** One OpenAI-compatible model-list entry. */
|
|
43
|
+
export type OpenAIModel = z.infer<typeof OpenAIModelSchema>;
|
|
44
|
+
/** Standard OpenAI model-list response. */
|
|
45
|
+
export declare const OpenAIModelListResponseSchema: z.ZodObject<{
|
|
46
|
+
object: z.ZodLiteral<"list">;
|
|
47
|
+
data: z.ZodArray<z.ZodObject<{
|
|
48
|
+
id: z.ZodString;
|
|
49
|
+
object: z.ZodLiteral<"model">;
|
|
50
|
+
created: z.ZodNumber;
|
|
51
|
+
owned_by: z.ZodString;
|
|
52
|
+
name: z.ZodString;
|
|
53
|
+
task: z.ZodOptional<z.ZodString>;
|
|
54
|
+
status: z.ZodObject<{
|
|
55
|
+
deprecated: z.ZodDefault<z.ZodBoolean>;
|
|
56
|
+
}, z.core.$strip>;
|
|
57
|
+
capabilities: z.ZodObject<{
|
|
58
|
+
tools: z.ZodBoolean;
|
|
59
|
+
reasoning: z.ZodArray<z.ZodUnion<readonly [z.ZodLiteral<"none">, z.ZodLiteral<"minimal">, z.ZodLiteral<"low">, z.ZodLiteral<"medium">, z.ZodLiteral<"high">, z.ZodLiteral<"xhigh">, z.ZodLiteral<"max">]>>;
|
|
60
|
+
responses: z.ZodBoolean;
|
|
61
|
+
open_responses: z.ZodBoolean;
|
|
62
|
+
anthropic: z.ZodBoolean;
|
|
63
|
+
embeddings: z.ZodBoolean;
|
|
64
|
+
ai_gateway_codex: z.ZodBoolean;
|
|
65
|
+
streaming: z.ZodBoolean;
|
|
66
|
+
}, z.core.$strip>;
|
|
67
|
+
}, z.core.$strip>>;
|
|
68
|
+
}, z.core.$strip>;
|
|
69
|
+
/** Standard OpenAI model-list response. */
|
|
70
|
+
export type OpenAIModelListResponse = z.infer<typeof OpenAIModelListResponseSchema>;
|
|
71
|
+
/** Reasoning effort advertised to Codex. */
|
|
72
|
+
export declare const CodexReasoningLevelSchema: z.ZodObject<{
|
|
73
|
+
effort: z.ZodUnion<readonly [z.ZodLiteral<"none">, z.ZodLiteral<"minimal">, z.ZodLiteral<"low">, z.ZodLiteral<"medium">, z.ZodLiteral<"high">, z.ZodLiteral<"xhigh">, z.ZodLiteral<"max">]>;
|
|
74
|
+
description: z.ZodString;
|
|
75
|
+
}, z.core.$strip>;
|
|
76
|
+
/** Reasoning effort advertised to Codex. */
|
|
77
|
+
export type CodexReasoningLevel = z.infer<typeof CodexReasoningLevelSchema>;
|
|
78
|
+
/** Codex client-side transcript truncation policy. */
|
|
79
|
+
export declare const CodexTruncationPolicySchema: z.ZodObject<{
|
|
80
|
+
mode: z.ZodEnum<{
|
|
81
|
+
tokens: "tokens";
|
|
82
|
+
bytes: "bytes";
|
|
83
|
+
}>;
|
|
84
|
+
limit: z.ZodNumber;
|
|
85
|
+
}, z.core.$strip>;
|
|
86
|
+
/** Codex client-side transcript truncation policy. */
|
|
87
|
+
export type CodexTruncationPolicy = z.infer<typeof CodexTruncationPolicySchema>;
|
|
88
|
+
/** One Codex model-catalog entry. */
|
|
89
|
+
export declare const CodexModelSchema: z.ZodObject<{
|
|
90
|
+
slug: z.ZodString;
|
|
91
|
+
display_name: z.ZodString;
|
|
92
|
+
description: z.ZodString;
|
|
93
|
+
base_instructions: z.ZodString;
|
|
94
|
+
status: z.ZodObject<{
|
|
95
|
+
deprecated: z.ZodDefault<z.ZodBoolean>;
|
|
96
|
+
}, z.core.$strip>;
|
|
97
|
+
supported_reasoning_levels: z.ZodArray<z.ZodObject<{
|
|
98
|
+
effort: z.ZodUnion<readonly [z.ZodLiteral<"none">, z.ZodLiteral<"minimal">, z.ZodLiteral<"low">, z.ZodLiteral<"medium">, z.ZodLiteral<"high">, z.ZodLiteral<"xhigh">, z.ZodLiteral<"max">]>;
|
|
99
|
+
description: z.ZodString;
|
|
100
|
+
}, z.core.$strip>>;
|
|
101
|
+
default_reasoning_level: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<"none">, z.ZodLiteral<"minimal">, z.ZodLiteral<"low">, z.ZodLiteral<"medium">, z.ZodLiteral<"high">, z.ZodLiteral<"xhigh">, z.ZodLiteral<"max">]>>;
|
|
102
|
+
shell_type: z.ZodString;
|
|
103
|
+
visibility: z.ZodLiteral<"list">;
|
|
104
|
+
supported_in_api: z.ZodBoolean;
|
|
105
|
+
priority: z.ZodNumber;
|
|
106
|
+
availability_nux: z.ZodNullable<z.ZodUnknown>;
|
|
107
|
+
upgrade: z.ZodNullable<z.ZodUnknown>;
|
|
108
|
+
support_verbosity: z.ZodBoolean;
|
|
109
|
+
default_verbosity: z.ZodNullable<z.ZodString>;
|
|
110
|
+
apply_patch_tool_type: z.ZodNullable<z.ZodString>;
|
|
111
|
+
truncation_policy: z.ZodObject<{
|
|
112
|
+
mode: z.ZodEnum<{
|
|
113
|
+
tokens: "tokens";
|
|
114
|
+
bytes: "bytes";
|
|
115
|
+
}>;
|
|
116
|
+
limit: z.ZodNumber;
|
|
117
|
+
}, z.core.$strip>;
|
|
118
|
+
context_window: z.ZodNullable<z.ZodNumber>;
|
|
119
|
+
experimental_supported_tools: z.ZodArray<z.ZodUnknown>;
|
|
120
|
+
input_modalities: z.ZodArray<z.ZodString>;
|
|
121
|
+
web_search_tool_type: z.ZodString;
|
|
122
|
+
supports_search_tool: z.ZodBoolean;
|
|
123
|
+
supports_image_detail_original: z.ZodBoolean;
|
|
124
|
+
}, z.core.$strip>;
|
|
125
|
+
/** One Codex model-catalog entry. */
|
|
126
|
+
export type CodexModel = z.infer<typeof CodexModelSchema>;
|
|
127
|
+
/** Codex-native model-list response. */
|
|
128
|
+
export declare const CodexModelListResponseSchema: z.ZodObject<{
|
|
129
|
+
models: z.ZodArray<z.ZodObject<{
|
|
130
|
+
slug: z.ZodString;
|
|
131
|
+
display_name: z.ZodString;
|
|
132
|
+
description: z.ZodString;
|
|
133
|
+
base_instructions: z.ZodString;
|
|
134
|
+
status: z.ZodObject<{
|
|
135
|
+
deprecated: z.ZodDefault<z.ZodBoolean>;
|
|
136
|
+
}, z.core.$strip>;
|
|
137
|
+
supported_reasoning_levels: z.ZodArray<z.ZodObject<{
|
|
138
|
+
effort: z.ZodUnion<readonly [z.ZodLiteral<"none">, z.ZodLiteral<"minimal">, z.ZodLiteral<"low">, z.ZodLiteral<"medium">, z.ZodLiteral<"high">, z.ZodLiteral<"xhigh">, z.ZodLiteral<"max">]>;
|
|
139
|
+
description: z.ZodString;
|
|
140
|
+
}, z.core.$strip>>;
|
|
141
|
+
default_reasoning_level: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<"none">, z.ZodLiteral<"minimal">, z.ZodLiteral<"low">, z.ZodLiteral<"medium">, z.ZodLiteral<"high">, z.ZodLiteral<"xhigh">, z.ZodLiteral<"max">]>>;
|
|
142
|
+
shell_type: z.ZodString;
|
|
143
|
+
visibility: z.ZodLiteral<"list">;
|
|
144
|
+
supported_in_api: z.ZodBoolean;
|
|
145
|
+
priority: z.ZodNumber;
|
|
146
|
+
availability_nux: z.ZodNullable<z.ZodUnknown>;
|
|
147
|
+
upgrade: z.ZodNullable<z.ZodUnknown>;
|
|
148
|
+
support_verbosity: z.ZodBoolean;
|
|
149
|
+
default_verbosity: z.ZodNullable<z.ZodString>;
|
|
150
|
+
apply_patch_tool_type: z.ZodNullable<z.ZodString>;
|
|
151
|
+
truncation_policy: z.ZodObject<{
|
|
152
|
+
mode: z.ZodEnum<{
|
|
153
|
+
tokens: "tokens";
|
|
154
|
+
bytes: "bytes";
|
|
155
|
+
}>;
|
|
156
|
+
limit: z.ZodNumber;
|
|
157
|
+
}, z.core.$strip>;
|
|
158
|
+
context_window: z.ZodNullable<z.ZodNumber>;
|
|
159
|
+
experimental_supported_tools: z.ZodArray<z.ZodUnknown>;
|
|
160
|
+
input_modalities: z.ZodArray<z.ZodString>;
|
|
161
|
+
web_search_tool_type: z.ZodString;
|
|
162
|
+
supports_search_tool: z.ZodBoolean;
|
|
163
|
+
supports_image_detail_original: z.ZodBoolean;
|
|
164
|
+
}, z.core.$strip>>;
|
|
165
|
+
}, z.core.$strip>;
|
|
166
|
+
/** Codex-native model-list response. */
|
|
167
|
+
export type CodexModelListResponse = z.infer<typeof CodexModelListResponseSchema>;
|
|
168
|
+
/** Model-list response selected by the caller's Originator header. */
|
|
169
|
+
export declare const ModelListResponseSchema: z.ZodUnion<readonly [z.ZodObject<{
|
|
170
|
+
object: z.ZodLiteral<"list">;
|
|
171
|
+
data: z.ZodArray<z.ZodObject<{
|
|
172
|
+
id: z.ZodString;
|
|
173
|
+
object: z.ZodLiteral<"model">;
|
|
174
|
+
created: z.ZodNumber;
|
|
175
|
+
owned_by: z.ZodString;
|
|
176
|
+
name: z.ZodString;
|
|
177
|
+
task: z.ZodOptional<z.ZodString>;
|
|
178
|
+
status: z.ZodObject<{
|
|
179
|
+
deprecated: z.ZodDefault<z.ZodBoolean>;
|
|
180
|
+
}, z.core.$strip>;
|
|
181
|
+
capabilities: z.ZodObject<{
|
|
182
|
+
tools: z.ZodBoolean;
|
|
183
|
+
reasoning: z.ZodArray<z.ZodUnion<readonly [z.ZodLiteral<"none">, z.ZodLiteral<"minimal">, z.ZodLiteral<"low">, z.ZodLiteral<"medium">, z.ZodLiteral<"high">, z.ZodLiteral<"xhigh">, z.ZodLiteral<"max">]>>;
|
|
184
|
+
responses: z.ZodBoolean;
|
|
185
|
+
open_responses: z.ZodBoolean;
|
|
186
|
+
anthropic: z.ZodBoolean;
|
|
187
|
+
embeddings: z.ZodBoolean;
|
|
188
|
+
ai_gateway_codex: z.ZodBoolean;
|
|
189
|
+
streaming: z.ZodBoolean;
|
|
190
|
+
}, z.core.$strip>;
|
|
191
|
+
}, z.core.$strip>>;
|
|
192
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
193
|
+
models: z.ZodArray<z.ZodObject<{
|
|
194
|
+
slug: z.ZodString;
|
|
195
|
+
display_name: z.ZodString;
|
|
196
|
+
description: z.ZodString;
|
|
197
|
+
base_instructions: z.ZodString;
|
|
198
|
+
status: z.ZodObject<{
|
|
199
|
+
deprecated: z.ZodDefault<z.ZodBoolean>;
|
|
200
|
+
}, z.core.$strip>;
|
|
201
|
+
supported_reasoning_levels: z.ZodArray<z.ZodObject<{
|
|
202
|
+
effort: z.ZodUnion<readonly [z.ZodLiteral<"none">, z.ZodLiteral<"minimal">, z.ZodLiteral<"low">, z.ZodLiteral<"medium">, z.ZodLiteral<"high">, z.ZodLiteral<"xhigh">, z.ZodLiteral<"max">]>;
|
|
203
|
+
description: z.ZodString;
|
|
204
|
+
}, z.core.$strip>>;
|
|
205
|
+
default_reasoning_level: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<"none">, z.ZodLiteral<"minimal">, z.ZodLiteral<"low">, z.ZodLiteral<"medium">, z.ZodLiteral<"high">, z.ZodLiteral<"xhigh">, z.ZodLiteral<"max">]>>;
|
|
206
|
+
shell_type: z.ZodString;
|
|
207
|
+
visibility: z.ZodLiteral<"list">;
|
|
208
|
+
supported_in_api: z.ZodBoolean;
|
|
209
|
+
priority: z.ZodNumber;
|
|
210
|
+
availability_nux: z.ZodNullable<z.ZodUnknown>;
|
|
211
|
+
upgrade: z.ZodNullable<z.ZodUnknown>;
|
|
212
|
+
support_verbosity: z.ZodBoolean;
|
|
213
|
+
default_verbosity: z.ZodNullable<z.ZodString>;
|
|
214
|
+
apply_patch_tool_type: z.ZodNullable<z.ZodString>;
|
|
215
|
+
truncation_policy: z.ZodObject<{
|
|
216
|
+
mode: z.ZodEnum<{
|
|
217
|
+
tokens: "tokens";
|
|
218
|
+
bytes: "bytes";
|
|
219
|
+
}>;
|
|
220
|
+
limit: z.ZodNumber;
|
|
221
|
+
}, z.core.$strip>;
|
|
222
|
+
context_window: z.ZodNullable<z.ZodNumber>;
|
|
223
|
+
experimental_supported_tools: z.ZodArray<z.ZodUnknown>;
|
|
224
|
+
input_modalities: z.ZodArray<z.ZodString>;
|
|
225
|
+
web_search_tool_type: z.ZodString;
|
|
226
|
+
supports_search_tool: z.ZodBoolean;
|
|
227
|
+
supports_image_detail_original: z.ZodBoolean;
|
|
228
|
+
}, z.core.$strip>>;
|
|
229
|
+
}, z.core.$strip>]>;
|
|
230
|
+
/** Model-list response selected by the caller's Originator header. */
|
|
231
|
+
export type ModelListResponse = z.infer<typeof ModelListResponseSchema>;
|
|
232
|
+
/** OpenAI-compatible embeddings request. */
|
|
233
|
+
export declare const EmbeddingRequestSchema: z.ZodObject<{
|
|
234
|
+
model: z.ZodString;
|
|
235
|
+
input: z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>;
|
|
236
|
+
encoding_format: z.ZodOptional<z.ZodEnum<{
|
|
237
|
+
float: "float";
|
|
238
|
+
base64: "base64";
|
|
239
|
+
}>>;
|
|
240
|
+
dimensions: z.ZodOptional<z.ZodNumber>;
|
|
241
|
+
user: z.ZodOptional<z.ZodString>;
|
|
242
|
+
}, z.core.$strip>;
|
|
243
|
+
/** OpenAI-compatible embeddings request. */
|
|
244
|
+
export type EmbeddingRequest = z.infer<typeof EmbeddingRequestSchema>;
|
|
245
|
+
/** One embedding vector in an OpenAI-compatible response. */
|
|
246
|
+
export declare const EmbeddingDataSchema: z.ZodObject<{
|
|
247
|
+
object: z.ZodLiteral<"embedding">;
|
|
248
|
+
embedding: z.ZodUnion<readonly [z.ZodArray<z.ZodNumber>, z.ZodString]>;
|
|
249
|
+
index: z.ZodNumber;
|
|
250
|
+
}, z.core.$strip>;
|
|
251
|
+
/** One embedding vector in an OpenAI-compatible response. */
|
|
252
|
+
export type EmbeddingData = z.infer<typeof EmbeddingDataSchema>;
|
|
253
|
+
/** Token usage for an embeddings request. */
|
|
254
|
+
export declare const EmbeddingUsageSchema: z.ZodObject<{
|
|
255
|
+
prompt_tokens: z.ZodNumber;
|
|
256
|
+
total_tokens: z.ZodNumber;
|
|
257
|
+
}, z.core.$strip>;
|
|
258
|
+
/** Token usage for an embeddings request. */
|
|
259
|
+
export type EmbeddingUsage = z.infer<typeof EmbeddingUsageSchema>;
|
|
260
|
+
/** OpenAI-compatible embeddings response. */
|
|
261
|
+
export declare const EmbeddingResponseSchema: z.ZodObject<{
|
|
262
|
+
object: z.ZodLiteral<"list">;
|
|
263
|
+
data: z.ZodArray<z.ZodObject<{
|
|
264
|
+
object: z.ZodLiteral<"embedding">;
|
|
265
|
+
embedding: z.ZodUnion<readonly [z.ZodArray<z.ZodNumber>, z.ZodString]>;
|
|
266
|
+
index: z.ZodNumber;
|
|
267
|
+
}, z.core.$strip>>;
|
|
268
|
+
model: z.ZodString;
|
|
269
|
+
usage: z.ZodObject<{
|
|
270
|
+
prompt_tokens: z.ZodNumber;
|
|
271
|
+
total_tokens: z.ZodNumber;
|
|
272
|
+
}, z.core.$strip>;
|
|
273
|
+
}, z.core.$strip>;
|
|
274
|
+
/** OpenAI-compatible embeddings response. */
|
|
275
|
+
export type EmbeddingResponse = z.infer<typeof EmbeddingResponseSchema>;
|
|
276
|
+
/** OpenAI-compatible error response. */
|
|
277
|
+
export declare const OpenAIErrorResponseSchema: z.ZodObject<{
|
|
278
|
+
error: z.ZodObject<{
|
|
279
|
+
message: z.ZodString;
|
|
280
|
+
type: z.ZodString;
|
|
281
|
+
code: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodNull]>>;
|
|
282
|
+
}, z.core.$strip>;
|
|
283
|
+
}, z.core.$strip>;
|
|
284
|
+
/** OpenAI-compatible error response. */
|
|
285
|
+
export type OpenAIErrorResponse = z.infer<typeof OpenAIErrorResponseSchema>;
|
|
286
|
+
/** Anthropic-compatible error response. */
|
|
287
|
+
export declare const AnthropicErrorResponseSchema: z.ZodObject<{
|
|
288
|
+
type: z.ZodLiteral<"error">;
|
|
289
|
+
error: z.ZodObject<{
|
|
290
|
+
type: z.ZodString;
|
|
291
|
+
message: z.ZodString;
|
|
292
|
+
}, z.core.$strip>;
|
|
293
|
+
}, z.core.$strip>;
|
|
294
|
+
/** Anthropic-compatible error response. */
|
|
295
|
+
export type AnthropicErrorResponse = z.infer<typeof AnthropicErrorResponseSchema>;
|
|
296
|
+
/** Error response emitted by any gateway compatibility surface. */
|
|
297
|
+
export declare const GatewayErrorResponseSchema: z.ZodUnion<readonly [z.ZodObject<{
|
|
298
|
+
error: z.ZodObject<{
|
|
299
|
+
message: z.ZodString;
|
|
300
|
+
type: z.ZodString;
|
|
301
|
+
code: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodNull]>>;
|
|
302
|
+
}, z.core.$strip>;
|
|
303
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
304
|
+
type: z.ZodLiteral<"error">;
|
|
305
|
+
error: z.ZodObject<{
|
|
306
|
+
type: z.ZodString;
|
|
307
|
+
message: z.ZodString;
|
|
308
|
+
}, z.core.$strip>;
|
|
309
|
+
}, z.core.$strip>]>;
|
|
310
|
+
/** Error response emitted by any gateway compatibility surface. */
|
|
311
|
+
export type GatewayErrorResponse = z.infer<typeof GatewayErrorResponseSchema>;
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Browser-safe HTTP model, embedding, and error payloads.
|
|
3
|
+
*
|
|
4
|
+
* @module
|
|
5
|
+
*/
|
|
6
|
+
import { model } from "@dbx-tools/shared-model";
|
|
7
|
+
import { z } from "zod";
|
|
8
|
+
/** Capabilities published with an OpenAI-compatible model entry. */
|
|
9
|
+
export const OpenAIModelCapabilitiesSchema = z.object({
|
|
10
|
+
tools: z.boolean(),
|
|
11
|
+
reasoning: z.array(model.ReasoningEffortSchema),
|
|
12
|
+
responses: z.boolean(),
|
|
13
|
+
open_responses: z.boolean(),
|
|
14
|
+
anthropic: z.boolean(),
|
|
15
|
+
embeddings: z.boolean(),
|
|
16
|
+
ai_gateway_codex: z.boolean(),
|
|
17
|
+
streaming: z.boolean(),
|
|
18
|
+
});
|
|
19
|
+
/** One OpenAI-compatible model-list entry. */
|
|
20
|
+
export const OpenAIModelSchema = z.object({
|
|
21
|
+
id: z.string().min(1),
|
|
22
|
+
object: z.literal("model"),
|
|
23
|
+
created: z.number().int().nonnegative(),
|
|
24
|
+
owned_by: z.string().min(1),
|
|
25
|
+
name: z.string().min(1),
|
|
26
|
+
task: z.string().optional(),
|
|
27
|
+
status: model.ModelStatusSchema,
|
|
28
|
+
capabilities: OpenAIModelCapabilitiesSchema,
|
|
29
|
+
});
|
|
30
|
+
/** Standard OpenAI model-list response. */
|
|
31
|
+
export const OpenAIModelListResponseSchema = z.object({
|
|
32
|
+
object: z.literal("list"),
|
|
33
|
+
data: z.array(OpenAIModelSchema),
|
|
34
|
+
});
|
|
35
|
+
/** Reasoning effort advertised to Codex. */
|
|
36
|
+
export const CodexReasoningLevelSchema = z.object({
|
|
37
|
+
effort: model.ReasoningEffortSchema,
|
|
38
|
+
description: z.string(),
|
|
39
|
+
});
|
|
40
|
+
/** Codex client-side transcript truncation policy. */
|
|
41
|
+
export const CodexTruncationPolicySchema = z.object({
|
|
42
|
+
mode: z.enum(["tokens", "bytes"]),
|
|
43
|
+
limit: z.number().int().positive(),
|
|
44
|
+
});
|
|
45
|
+
/** One Codex model-catalog entry. */
|
|
46
|
+
export const CodexModelSchema = z.object({
|
|
47
|
+
slug: z.string().min(1),
|
|
48
|
+
display_name: z.string().min(1),
|
|
49
|
+
description: z.string(),
|
|
50
|
+
base_instructions: z.string(),
|
|
51
|
+
status: model.ModelStatusSchema,
|
|
52
|
+
supported_reasoning_levels: z.array(CodexReasoningLevelSchema),
|
|
53
|
+
default_reasoning_level: model.ReasoningEffortSchema.optional(),
|
|
54
|
+
shell_type: z.string().min(1),
|
|
55
|
+
visibility: z.literal("list"),
|
|
56
|
+
supported_in_api: z.boolean(),
|
|
57
|
+
priority: z.number().int().positive(),
|
|
58
|
+
availability_nux: z.unknown().nullable(),
|
|
59
|
+
upgrade: z.unknown().nullable(),
|
|
60
|
+
support_verbosity: z.boolean(),
|
|
61
|
+
default_verbosity: z.string().nullable(),
|
|
62
|
+
apply_patch_tool_type: z.string().nullable(),
|
|
63
|
+
truncation_policy: CodexTruncationPolicySchema,
|
|
64
|
+
context_window: z.number().int().positive().nullable(),
|
|
65
|
+
experimental_supported_tools: z.array(z.unknown()),
|
|
66
|
+
input_modalities: z.array(z.string()),
|
|
67
|
+
web_search_tool_type: z.string(),
|
|
68
|
+
supports_search_tool: z.boolean(),
|
|
69
|
+
supports_image_detail_original: z.boolean(),
|
|
70
|
+
});
|
|
71
|
+
/** Codex-native model-list response. */
|
|
72
|
+
export const CodexModelListResponseSchema = z.object({
|
|
73
|
+
models: z.array(CodexModelSchema),
|
|
74
|
+
});
|
|
75
|
+
/** Model-list response selected by the caller's Originator header. */
|
|
76
|
+
export const ModelListResponseSchema = z.union([
|
|
77
|
+
OpenAIModelListResponseSchema,
|
|
78
|
+
CodexModelListResponseSchema,
|
|
79
|
+
]);
|
|
80
|
+
/** OpenAI-compatible embeddings request. */
|
|
81
|
+
export const EmbeddingRequestSchema = z.object({
|
|
82
|
+
model: z.string().min(1),
|
|
83
|
+
input: z.union([z.string(), z.array(z.string())]),
|
|
84
|
+
encoding_format: z.enum(["float", "base64"]).optional(),
|
|
85
|
+
dimensions: z.number().int().positive().optional(),
|
|
86
|
+
user: z.string().optional(),
|
|
87
|
+
});
|
|
88
|
+
/** One embedding vector in an OpenAI-compatible response. */
|
|
89
|
+
export const EmbeddingDataSchema = z.object({
|
|
90
|
+
object: z.literal("embedding"),
|
|
91
|
+
embedding: z.union([z.array(z.number()), z.string()]),
|
|
92
|
+
index: z.number().int().nonnegative(),
|
|
93
|
+
});
|
|
94
|
+
/** Token usage for an embeddings request. */
|
|
95
|
+
export const EmbeddingUsageSchema = z.object({
|
|
96
|
+
prompt_tokens: z.number().int().nonnegative(),
|
|
97
|
+
total_tokens: z.number().int().nonnegative(),
|
|
98
|
+
});
|
|
99
|
+
/** OpenAI-compatible embeddings response. */
|
|
100
|
+
export const EmbeddingResponseSchema = z.object({
|
|
101
|
+
object: z.literal("list"),
|
|
102
|
+
data: z.array(EmbeddingDataSchema),
|
|
103
|
+
model: z.string(),
|
|
104
|
+
usage: EmbeddingUsageSchema,
|
|
105
|
+
});
|
|
106
|
+
/** OpenAI-compatible error response. */
|
|
107
|
+
export const OpenAIErrorResponseSchema = z.object({
|
|
108
|
+
error: z.object({
|
|
109
|
+
message: z.string(),
|
|
110
|
+
type: z.string(),
|
|
111
|
+
code: z.union([z.string(), z.number(), z.null()]).optional(),
|
|
112
|
+
}),
|
|
113
|
+
});
|
|
114
|
+
/** Anthropic-compatible error response. */
|
|
115
|
+
export const AnthropicErrorResponseSchema = z.object({
|
|
116
|
+
type: z.literal("error"),
|
|
117
|
+
error: z.object({
|
|
118
|
+
type: z.string(),
|
|
119
|
+
message: z.string(),
|
|
120
|
+
}),
|
|
121
|
+
});
|
|
122
|
+
/** Error response emitted by any gateway compatibility surface. */
|
|
123
|
+
export const GatewayErrorResponseSchema = z.union([
|
|
124
|
+
OpenAIErrorResponseSchema,
|
|
125
|
+
AnthropicErrorResponseSchema,
|
|
126
|
+
]);
|
|
127
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21vZGVscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBRUgsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2hELE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxLQUFLLENBQUM7QUFFeEIsb0VBQW9FO0FBQ3BFLE1BQU0sQ0FBQyxNQUFNLDZCQUE2QixHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDcEQsS0FBSyxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUU7SUFDbEIsU0FBUyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLHFCQUFxQixDQUFDO0lBQy9DLFNBQVMsRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFO0lBQ3RCLGNBQWMsRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFO0lBQzNCLFNBQVMsRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFO0lBQ3RCLFVBQVUsRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFO0lBQ3ZCLGdCQUFnQixFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUU7SUFDN0IsU0FBUyxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUU7Q0FDdkIsQ0FBQyxDQUFDO0FBSUgsOENBQThDO0FBQzlDLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDeEMsRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLE1BQU0sRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQztJQUMxQixPQUFPLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLFdBQVcsRUFBRTtJQUN2QyxRQUFRLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0Is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QyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFO0tBQzdELENBQUM7Q0FDSCxDQUFDLENBQUM7QUFJSCwyQ0FBMkM7QUFDM0MsTUFBTSxDQUFDLE1BQU0sNEJBQTRCLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUNuRCxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7SUFDeEIsS0FBSyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDZCxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtRQUNoQixPQUFPLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtLQUNwQixDQUFDO0NBQ0gsQ0FBQyxDQUFDO0FBSUgsbUVBQW1FO0FBQ25FLE1BQU0sQ0FBQyxNQUFNLDBCQUEwQixHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDaEQseUJBQXlCO0lBQ3pCLDRCQUE0QjtDQUM3QixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEJyb3dzZXItc2FmZSBIVFRQIG1vZGVsLCBlbWJlZGRpbmcsIGFuZCBlcnJvciBwYXlsb2Fkcy5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHsgbW9kZWwgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtbW9kZWxcIjtcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5cbi8qKiBDYXBhYmlsaXRpZXMgcHVibGlzaGVkIHdpdGggYW4gT3BlbkFJLWNvbXBhdGlibGUgbW9kZWwgZW50cnkuICovXG5leHBvcnQgY29uc3QgT3BlbkFJTW9kZWxDYXBhYmlsaXRpZXNTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIHRvb2xzOiB6LmJvb2xlYW4oKSxcbiAgcmVhc29uaW5nOiB6LmFycmF5KG1vZGVsLlJlYXNvbmluZ0VmZm9ydFNjaGVtYSksXG4gIHJlc3BvbnNlczogei5ib29sZWFuKCksXG4gIG9wZW5fcmVzcG9uc2VzOiB6LmJvb2xlYW4oKSxcbiAgYW50aHJvcGljOiB6LmJvb2xlYW4oKSxcbiAgZW1iZWRkaW5nczogei5ib29sZWFuKCksXG4gIGFpX2dhdGV3YXlfY29kZXg6IHouYm9vbGVhbigpLFxuICBzdHJlYW1pbmc6IHouYm9vbGVhbigpLFxufSk7XG4vKiogQ2FwYWJpbGl0aWVzIHB1Ymxpc2hlZCB3aXRoIGFuIE9wZW5BSS1jb21wYXRpYmxlIG1vZGVsIGVudHJ5LiAqL1xuZXhwb3J0IHR5cGUgT3BlbkFJTW9kZWxDYXBhYmlsaXRpZXMgPSB6LmluZmVyPHR5cGVvZiBPcGVuQUlNb2RlbENhcGFiaWxpdGllc1NjaGVtYT47XG5cbi8qKiBPbmUgT3BlbkFJLWNvbXBhdGlibGUgbW9kZWwtbGlzdCBlbnRyeS4gKi9cbmV4cG9ydCBjb25zdCBPcGVuQUlNb2RlbFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgaWQ6IHouc3RyaW5nKCkubWluKDEpLFxuICBvYmplY3Q6IHoubGl0ZXJhbChcIm1vZGVsXCIpLFxuICBjcmVhdGVkOiB6Lm51bWJlcigpLmludCgpLm5vbm5lZ2F0aXZlKCksXG4gIG93bmVkX2J5OiB6LnN0cmluZygpLm1pbigxKSxcbiAgbmFtZTogei5zdHJpbmcoKS5taW4oMSksXG4gIHRhc2s6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgc3RhdHVzOiBtb2RlbC5Nb2RlbFN0YXR1c1NjaGVtYSxcbiAgY2FwYWJpbGl0aWVzOiBPcGVuQUlNb2RlbENhcGFiaWxpdGllc1NjaGVtYSxcbn0pO1xuLyoqIE9uZSBPcGVuQUktY29tcGF0aWJsZSBtb2RlbC1saXN0IGVudHJ5LiAqL1xuZXhwb3J0IHR5cGUgT3BlbkFJTW9kZWwgPSB6LmluZmVyPHR5cGVvZiBPcGVuQUlNb2RlbFNjaGVtYT47XG5cbi8qKiBTdGFuZGFyZCBPcGVuQUkgbW9kZWwtbGlzdCByZXNwb25zZS4gKi9cbmV4cG9ydCBjb25zdCBPcGVuQUlNb2RlbExpc3RSZXNwb25zZVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgb2JqZWN0OiB6LmxpdGVyYWwoXCJsaXN0XCIpLFxuICBkYXRhOiB6LmFycmF5KE9wZW5BSU1vZGVsU2NoZW1hKSxcbn0pO1xuLyoqIFN0YW5kYXJkIE9wZW5BSSBtb2RlbC1saXN0IHJlc3BvbnNlLiAqL1xuZXhwb3J0IHR5cGUgT3BlbkFJTW9kZWxMaXN0UmVzcG9uc2UgPSB6LmluZmVyPHR5cGVvZiBPcGVuQUlNb2RlbExpc3RSZXNwb25zZVNjaGVtYT47XG5cbi8qKiBSZWFzb25pbmcgZWZmb3J0IGFkdmVydGlzZWQgdG8gQ29kZXguICovXG5leHBvcnQgY29uc3QgQ29kZXhSZWFzb25pbmdMZXZlbFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgZWZmb3J0OiBtb2RlbC5SZWFzb25pbmdFZmZvcnRTY2hlbWEsXG4gIGRlc2NyaXB0aW9uOiB6LnN0cmluZygpLFxufSk7XG4vKiogUmVhc29uaW5nIGVmZm9ydCBhZHZlcnRpc2VkIHRvIENvZGV4LiAqL1xuZXhwb3J0IHR5cGUgQ29kZXhSZWFzb25pbmdMZXZlbCA9IHouaW5mZXI8dHlwZW9mIENvZGV4UmVhc29uaW5nTGV2ZWxTY2hlbWE+O1xuXG4vKiogQ29kZXggY2xpZW50LXNpZGUgdHJhbnNjcmlwdCB0cnVuY2F0aW9uIHBvbGljeS4gKi9cbmV4cG9ydCBjb25zdCBDb2RleFRydW5jYXRpb25Qb2xpY3lTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIG1vZGU6IHouZW51bShbXCJ0b2tlbnNcIiwgXCJieXRlc1wiXSksXG4gIGxpbWl0OiB6Lm51bWJlcigpLmludCgpLnBvc2l0aXZlKCksXG59KTtcbi8qKiBDb2RleCBjbGllbnQtc2lkZSB0cmFuc2NyaXB0IHRydW5jYXRpb24gcG9saWN5LiAqL1xuZXhwb3J0IHR5cGUgQ29kZXhUcnVuY2F0aW9uUG9saWN5ID0gei5pbmZlcjx0eXBlb2YgQ29kZXhUcnVuY2F0aW9uUG9saWN5U2NoZW1hPjtcblxuLyoqIE9uZSBDb2RleCBtb2RlbC1jYXRhbG9nIGVudHJ5LiAqL1xuZXhwb3J0IGNvbnN0IENvZGV4TW9kZWxTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIHNsdWc6IHouc3RyaW5nKCkubWluKDEpLFxuICBkaXNwbGF5X25hbWU6IHouc3RyaW5nKCkubWluKDEpLFxuICBkZXNjcmlwdGlvbjogei5zdHJpbmcoKSxcbiAgYmFzZV9pbnN0cnVjdGlvbnM6IHouc3RyaW5nKCksXG4gIHN0YXR1czogbW9kZWwuTW9kZWxTdGF0dXNTY2hlbWEsXG4gIHN1cHBvcnRlZF9yZWFzb25pbmdfbGV2ZWxzOiB6LmFycmF5KENvZGV4UmVhc29uaW5nTGV2ZWxTY2hlbWEpLFxuICBkZWZhdWx0X3JlYXNvbmluZ19sZXZlbDogbW9kZWwuUmVhc29uaW5nRWZmb3J0U2NoZW1hLm9wdGlvbmFsKCksXG4gIHNoZWxsX3R5cGU6IHouc3RyaW5nKCkubWluKDEpLFxuICB2aXNpYmlsaXR5OiB6LmxpdGVyYWwoXCJsaXN0XCIpLFxuICBzdXBwb3J0ZWRfaW5fYXBpOiB6LmJvb2xlYW4oKSxcbiAgcHJpb3JpdHk6IHoubnVtYmVyKCkuaW50KCkucG9zaXRpdmUoKSxcbiAgYXZhaWxhYmlsaXR5X251eDogei51bmtub3duKCkubnVsbGFibGUoKSxcbiAgdXBncmFkZTogei51bmtub3duKCkubnVsbGFibGUoKSxcbiAgc3VwcG9ydF92ZXJib3NpdHk6IHouYm9vbGVhbigpLFxuICBkZWZhdWx0X3ZlcmJvc2l0eTogei5zdHJpbmcoKS5udWxsYWJsZSgpLFxuICBhcHBseV9wYXRjaF90b29sX3R5cGU6IHouc3RyaW5nKCkubnVsbGFibGUoKSxcbiAgdHJ1bmNhdGlvbl9wb2xpY3k6IENvZGV4VHJ1bmNhdGlvblBvbGljeVNjaGVtYSxcbiAgY29udGV4dF93aW5kb3c6IHoubnVtYmVyKCkuaW50KCkucG9zaXRpdmUoKS5udWxsYWJsZSgpLFxuICBleHBlcmltZW50YWxfc3VwcG9ydGVkX3Rvb2xzOiB6LmFycmF5KHoudW5rbm93bigpKSxcbiAgaW5wdXRfbW9kYWxpdGllczogei5hcnJheSh6LnN0cmluZygpKSxcbiAgd2ViX3NlYXJjaF90b29sX3R5cGU6IHouc3RyaW5nKCksXG4gIHN1cHBvcnRzX3NlYXJjaF90b29sOiB6LmJvb2xlYW4oKSxcbiAgc3VwcG9ydHNfaW1hZ2VfZGV0YWlsX29yaWdpbmFsOiB6LmJvb2xlYW4oKSxcbn0pO1xuLyoqIE9uZSBDb2RleCBtb2RlbC1jYXRhbG9nIGVudHJ5LiAqL1xuZXhwb3J0IHR5cGUgQ29kZXhNb2RlbCA9IHouaW5mZXI8dHlwZW9mIENvZGV4TW9kZWxTY2hlbWE+O1xuXG4vKiogQ29kZXgtbmF0aXZlIG1vZGVsLWxpc3QgcmVzcG9uc2UuICovXG5leHBvcnQgY29uc3QgQ29kZXhNb2RlbExpc3RSZXNwb25zZVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgbW9kZWxzOiB6LmFycmF5KENvZGV4TW9kZWxTY2hlbWEpLFxufSk7XG4vKiogQ29kZXgtbmF0aXZlIG1vZGVsLWxpc3QgcmVzcG9uc2UuICovXG5leHBvcnQgdHlwZSBDb2RleE1vZGVsTGlzdFJlc3BvbnNlID0gei5pbmZlcjx0eXBlb2YgQ29kZXhNb2RlbExpc3RSZXNwb25zZVNjaGVtYT47XG5cbi8qKiBNb2RlbC1saXN0IHJlc3BvbnNlIHNlbGVjdGVkIGJ5IHRoZSBjYWxsZXIncyBPcmlnaW5hdG9yIGhlYWRlci4gKi9cbmV4cG9ydCBjb25zdCBNb2RlbExpc3RSZXNwb25zZVNjaGVtYSA9IHoudW5pb24oW1xuICBPcGVuQUlNb2RlbExpc3RSZXNwb25zZVNjaGVtYSxcbiAgQ29kZXhNb2RlbExpc3RSZXNwb25zZVNjaGVtYSxcbl0pO1xuLyoqIE1vZGVsLWxpc3QgcmVzcG9uc2Ugc2VsZWN0ZWQgYnkgdGhlIGNhbGxlcidzIE9yaWdpbmF0b3IgaGVhZGVyLiAqL1xuZXhwb3J0IHR5cGUgTW9kZWxMaXN0UmVzcG9uc2UgPSB6LmluZmVyPHR5cGVvZiBNb2RlbExpc3RSZXNwb25zZVNjaGVtYT47XG5cbi8qKiBPcGVuQUktY29tcGF0aWJsZSBlbWJlZGRpbmdzIHJlcXVlc3QuICovXG5leHBvcnQgY29uc3QgRW1iZWRkaW5nUmVxdWVzdFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgbW9kZWw6IHouc3RyaW5nKCkubWluKDEpLFxuICBpbnB1dDogei51bmlvbihbei5zdHJpbmcoKSwgei5hcnJheSh6LnN0cmluZygpKV0pLFxuICBlbmNvZGluZ19mb3JtYXQ6IHouZW51bShbXCJmbG9hdFwiLCBcImJhc2U2NFwiXSkub3B0aW9uYWwoKSxcbiAgZGltZW5zaW9uczogei5udW1iZXIoKS5pbnQoKS5wb3NpdGl2ZSgpLm9wdGlvbmFsKCksXG4gIHVzZXI6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbn0pO1xuLyoqIE9wZW5BSS1jb21wYXRpYmxlIGVtYmVkZGluZ3MgcmVxdWVzdC4gKi9cbmV4cG9ydCB0eXBlIEVtYmVkZGluZ1JlcXVlc3QgPSB6LmluZmVyPHR5cGVvZiBFbWJlZGRpbmdSZXF1ZXN0U2NoZW1hPjtcblxuLyoqIE9uZSBlbWJlZGRpbmcgdmVjdG9yIGluIGFuIE9wZW5BSS1jb21wYXRpYmxlIHJlc3BvbnNlLiAqL1xuZXhwb3J0IGNvbnN0IEVtYmVkZGluZ0RhdGFTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIG9iamVjdDogei5saXRlcmFsKFwiZW1iZWRkaW5nXCIpLFxuICBlbWJlZGRpbmc6IHoudW5pb24oW3ouYXJyYXkoei5udW1iZXIoKSksIHouc3RyaW5nKCldKSxcbiAgaW5kZXg6IHoubnVtYmVyKCkuaW50KCkubm9ubmVnYXRpdmUoKSxcbn0pO1xuLyoqIE9uZSBlbWJlZGRpbmcgdmVjdG9yIGluIGFuIE9wZW5BSS1jb21wYXRpYmxlIHJlc3BvbnNlLiAqL1xuZXhwb3J0IHR5cGUgRW1iZWRkaW5nRGF0YSA9IHouaW5mZXI8dHlwZW9mIEVtYmVkZGluZ0RhdGFTY2hlbWE+O1xuXG4vKiogVG9rZW4gdXNhZ2UgZm9yIGFuIGVtYmVkZGluZ3MgcmVxdWVzdC4gKi9cbmV4cG9ydCBjb25zdCBFbWJlZGRpbmdVc2FnZVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgcHJvbXB0X3Rva2Vuczogei5udW1iZXIoKS5pbnQoKS5ub25uZWdhdGl2ZSgpLFxuICB0b3RhbF90b2tlbnM6IHoubnVtYmVyKCkuaW50KCkubm9ubmVnYXRpdmUoKSxcbn0pO1xuLyoqIFRva2VuIHVzYWdlIGZvciBhbiBlbWJlZGRpbmdzIHJlcXVlc3QuICovXG5leHBvcnQgdHlwZSBFbWJlZGRpbmdVc2FnZSA9IHouaW5mZXI8dHlwZW9mIEVtYmVkZGluZ1VzYWdlU2NoZW1hPjtcblxuLyoqIE9wZW5BSS1jb21wYXRpYmxlIGVtYmVkZGluZ3MgcmVzcG9uc2UuICovXG5leHBvcnQgY29uc3QgRW1iZWRkaW5nUmVzcG9uc2VTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIG9iamVjdDogei5saXRlcmFsKFwibGlzdFwiKSxcbiAgZGF0YTogei5hcnJheShFbWJlZGRpbmdEYXRhU2NoZW1hKSxcbiAgbW9kZWw6IHouc3RyaW5nKCksXG4gIHVzYWdlOiBFbWJlZGRpbmdVc2FnZVNjaGVtYSxcbn0pO1xuLyoqIE9wZW5BSS1jb21wYXRpYmxlIGVtYmVkZGluZ3MgcmVzcG9uc2UuICovXG5leHBvcnQgdHlwZSBFbWJlZGRpbmdSZXNwb25zZSA9IHouaW5mZXI8dHlwZW9mIEVtYmVkZGluZ1Jlc3BvbnNlU2NoZW1hPjtcblxuLyoqIE9wZW5BSS1jb21wYXRpYmxlIGVycm9yIHJlc3BvbnNlLiAqL1xuZXhwb3J0IGNvbnN0IE9wZW5BSUVycm9yUmVzcG9uc2VTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGVycm9yOiB6Lm9iamVjdCh7XG4gICAgbWVzc2FnZTogei5zdHJpbmcoKSxcbiAgICB0eXBlOiB6LnN0cmluZygpLFxuICAgIGNvZGU6IHoudW5pb24oW3ouc3RyaW5nKCksIHoubnVtYmVyKCksIHoubnVsbCgpXSkub3B0aW9uYWwoKSxcbiAgfSksXG59KTtcbi8qKiBPcGVuQUktY29tcGF0aWJsZSBlcnJvciByZXNwb25zZS4gKi9cbmV4cG9ydCB0eXBlIE9wZW5BSUVycm9yUmVzcG9uc2UgPSB6LmluZmVyPHR5cGVvZiBPcGVuQUlFcnJvclJlc3BvbnNlU2NoZW1hPjtcblxuLyoqIEFudGhyb3BpYy1jb21wYXRpYmxlIGVycm9yIHJlc3BvbnNlLiAqL1xuZXhwb3J0IGNvbnN0IEFudGhyb3BpY0Vycm9yUmVzcG9uc2VTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHoubGl0ZXJhbChcImVycm9yXCIpLFxuICBlcnJvcjogei5vYmplY3Qoe1xuICAgIHR5cGU6IHouc3RyaW5nKCksXG4gICAgbWVzc2FnZTogei5zdHJpbmcoKSxcbiAgfSksXG59KTtcbi8qKiBBbnRocm9waWMtY29tcGF0aWJsZSBlcnJvciByZXNwb25zZS4gKi9cbmV4cG9ydCB0eXBlIEFudGhyb3BpY0Vycm9yUmVzcG9uc2UgPSB6LmluZmVyPHR5cGVvZiBBbnRocm9waWNFcnJvclJlc3BvbnNlU2NoZW1hPjtcblxuLyoqIEVycm9yIHJlc3BvbnNlIGVtaXR0ZWQgYnkgYW55IGdhdGV3YXkgY29tcGF0aWJpbGl0eSBzdXJmYWNlLiAqL1xuZXhwb3J0IGNvbnN0IEdhdGV3YXlFcnJvclJlc3BvbnNlU2NoZW1hID0gei51bmlvbihbXG4gIE9wZW5BSUVycm9yUmVzcG9uc2VTY2hlbWEsXG4gIEFudGhyb3BpY0Vycm9yUmVzcG9uc2VTY2hlbWEsXG5dKTtcbi8qKiBFcnJvciByZXNwb25zZSBlbWl0dGVkIGJ5IGFueSBnYXRld2F5IGNvbXBhdGliaWxpdHkgc3VyZmFjZS4gKi9cbmV4cG9ydCB0eXBlIEdhdGV3YXlFcnJvclJlc3BvbnNlID0gei5pbmZlcjx0eXBlb2YgR2F0ZXdheUVycm9yUmVzcG9uc2VTY2hlbWE+O1xuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"root":["../src/client.ts","../src/contracts.ts","../src/models.ts","../index.ts"],"version":"5.9.3"}
|
package/package.json
ADDED
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@dbx-tools/shared-model-gateway",
|
|
3
|
+
"description": "Browser-safe model-gateway schemas and model discovery client",
|
|
4
|
+
"repository": {
|
|
5
|
+
"type": "git",
|
|
6
|
+
"url": "git+https://github.com/reggie-db/dbx-tools.git",
|
|
7
|
+
"directory": "packages/js/shared/model-gateway"
|
|
8
|
+
},
|
|
9
|
+
"scripts": {
|
|
10
|
+
"build": "projen build",
|
|
11
|
+
"compile": "projen compile",
|
|
12
|
+
"default": "projen default",
|
|
13
|
+
"package": "projen package",
|
|
14
|
+
"post-compile": "projen post-compile",
|
|
15
|
+
"pre-compile": "projen pre-compile",
|
|
16
|
+
"prepack": "projen prepack",
|
|
17
|
+
"test": "projen test",
|
|
18
|
+
"watch": "projen watch",
|
|
19
|
+
"projen": "projen"
|
|
20
|
+
},
|
|
21
|
+
"devDependencies": {
|
|
22
|
+
"typescript": "^5.9.3"
|
|
23
|
+
},
|
|
24
|
+
"dependencies": {
|
|
25
|
+
"@dbx-tools/shared-model": "^0.9.36",
|
|
26
|
+
"zod": "4.3.6"
|
|
27
|
+
},
|
|
28
|
+
"main": "./lib/index.js",
|
|
29
|
+
"license": "Apache-2.0",
|
|
30
|
+
"publishConfig": {
|
|
31
|
+
"access": "public",
|
|
32
|
+
"main": "./lib/index.js",
|
|
33
|
+
"types": "./lib/index.d.ts",
|
|
34
|
+
"exports": {
|
|
35
|
+
".": {
|
|
36
|
+
"types": "./lib/index.d.ts",
|
|
37
|
+
"default": "./lib/index.js"
|
|
38
|
+
},
|
|
39
|
+
"./client": {
|
|
40
|
+
"types": "./lib/src/client.d.ts",
|
|
41
|
+
"default": "./lib/src/client.js"
|
|
42
|
+
},
|
|
43
|
+
"./contracts": {
|
|
44
|
+
"types": "./lib/src/contracts.d.ts",
|
|
45
|
+
"default": "./lib/src/contracts.js"
|
|
46
|
+
},
|
|
47
|
+
"./models": {
|
|
48
|
+
"types": "./lib/src/models.d.ts",
|
|
49
|
+
"default": "./lib/src/models.js"
|
|
50
|
+
},
|
|
51
|
+
"./package.json": "./package.json"
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
"version": "0.9.36",
|
|
55
|
+
"types": "./lib/index.d.ts",
|
|
56
|
+
"dbxToolsConfig": {
|
|
57
|
+
"tags": [
|
|
58
|
+
"shared"
|
|
59
|
+
]
|
|
60
|
+
},
|
|
61
|
+
"type": "module",
|
|
62
|
+
"exports": {
|
|
63
|
+
".": {
|
|
64
|
+
"types": "./lib/index.d.ts",
|
|
65
|
+
"default": "./lib/index.js"
|
|
66
|
+
},
|
|
67
|
+
"./client": {
|
|
68
|
+
"types": "./lib/src/client.d.ts",
|
|
69
|
+
"default": "./lib/src/client.js"
|
|
70
|
+
},
|
|
71
|
+
"./contracts": {
|
|
72
|
+
"types": "./lib/src/contracts.d.ts",
|
|
73
|
+
"default": "./lib/src/contracts.js"
|
|
74
|
+
},
|
|
75
|
+
"./models": {
|
|
76
|
+
"types": "./lib/src/models.d.ts",
|
|
77
|
+
"default": "./lib/src/models.js"
|
|
78
|
+
},
|
|
79
|
+
"./package.json": "./package.json"
|
|
80
|
+
},
|
|
81
|
+
"files": [
|
|
82
|
+
"index.ts",
|
|
83
|
+
"src",
|
|
84
|
+
"exports.ts",
|
|
85
|
+
"lib"
|
|
86
|
+
],
|
|
87
|
+
"//": "~~ Generated by projen. To modify, edit .projenrc.js and run \"bunx projen\"."
|
|
88
|
+
}
|
package/src/client.ts
ADDED
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Browser-safe client for model discovery through the gateway.
|
|
3
|
+
*
|
|
4
|
+
* @module
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import {
|
|
8
|
+
GatewayErrorResponseSchema,
|
|
9
|
+
ModelListResponseSchema,
|
|
10
|
+
type GatewayErrorResponse,
|
|
11
|
+
type ModelListResponse,
|
|
12
|
+
} from "./models.ts";
|
|
13
|
+
|
|
14
|
+
/** Construction options for {@link createModelGatewayClient}. */
|
|
15
|
+
export interface ModelGatewayClientOptions {
|
|
16
|
+
/** Gateway base URL. Defaults to the active browser origin. */
|
|
17
|
+
readonly baseUrl?: string | URL;
|
|
18
|
+
/** Injectable fetch implementation for tests or custom browser transports. */
|
|
19
|
+
readonly fetch?: typeof globalThis.fetch;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/** Options for one model-list request. */
|
|
23
|
+
export interface ListModelsOptions {
|
|
24
|
+
readonly search?: string;
|
|
25
|
+
readonly codex?: boolean;
|
|
26
|
+
readonly signal?: AbortSignal;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/** Browser-safe model discovery client. */
|
|
30
|
+
export interface ModelGatewayClient {
|
|
31
|
+
listModels(options?: ListModelsOptions): Promise<ModelListResponse>;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/** HTTP error returned by the model gateway. */
|
|
35
|
+
export class ModelGatewayClientError extends Error {
|
|
36
|
+
constructor(
|
|
37
|
+
readonly status: number,
|
|
38
|
+
readonly response?: GatewayErrorResponse,
|
|
39
|
+
) {
|
|
40
|
+
super(errorMessage(status, response));
|
|
41
|
+
this.name = "ModelGatewayClientError";
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/** Create a browser-safe, schema-validating model-gateway client. */
|
|
46
|
+
export function createModelGatewayClient(
|
|
47
|
+
options: ModelGatewayClientOptions = {},
|
|
48
|
+
): ModelGatewayClient {
|
|
49
|
+
const fetcher = options.fetch ?? globalThis.fetch;
|
|
50
|
+
return {
|
|
51
|
+
async listModels(request: ListModelsOptions = {}) {
|
|
52
|
+
const url = modelsUrl(options.baseUrl);
|
|
53
|
+
if (request.search?.trim()) url.searchParams.set("search", request.search.trim());
|
|
54
|
+
const response = await fetcher(url, {
|
|
55
|
+
headers: request.codex ? { Originator: "codex" } : undefined,
|
|
56
|
+
signal: request.signal,
|
|
57
|
+
});
|
|
58
|
+
const payload: unknown = await response.json();
|
|
59
|
+
if (!response.ok) {
|
|
60
|
+
const error = GatewayErrorResponseSchema.safeParse(payload);
|
|
61
|
+
throw new ModelGatewayClientError(response.status, error.success ? error.data : undefined);
|
|
62
|
+
}
|
|
63
|
+
return ModelListResponseSchema.parse(payload);
|
|
64
|
+
},
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
function modelsUrl(baseUrl: string | URL | undefined): URL {
|
|
69
|
+
if (baseUrl !== undefined) {
|
|
70
|
+
const base = new URL(baseUrl.toString());
|
|
71
|
+
return new URL("v1/models", base.href.endsWith("/") ? base : `${base.href}/`);
|
|
72
|
+
}
|
|
73
|
+
const location = (globalThis as { location?: { href: string } }).location;
|
|
74
|
+
if (!location) {
|
|
75
|
+
throw new Error("Model gateway baseUrl is required outside a browser");
|
|
76
|
+
}
|
|
77
|
+
return new URL("/v1/models", location.href);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
function errorMessage(status: number, response: GatewayErrorResponse | undefined): string {
|
|
81
|
+
if (!response) return `Model gateway returned HTTP ${status}`;
|
|
82
|
+
return "error" in response ? response.error.message : `Model gateway returned HTTP ${status}`;
|
|
83
|
+
}
|