@namzu/zen 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +61 -0
- package/LICENSE.md +110 -0
- package/README.md +142 -0
- package/dist/client.d.ts +30 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +517 -0
- package/dist/client.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +11 -0
- package/dist/index.js.map +1 -0
- package/dist/models.d.ts +29 -0
- package/dist/models.d.ts.map +1 -0
- package/dist/models.js +1170 -0
- package/dist/models.js.map +1 -0
- package/dist/options.d.ts +5 -0
- package/dist/options.d.ts.map +1 -0
- package/dist/options.js +221 -0
- package/dist/options.js.map +1 -0
- package/dist/prompt.d.ts +9 -0
- package/dist/prompt.d.ts.map +1 -0
- package/dist/prompt.js +376 -0
- package/dist/prompt.js.map +1 -0
- package/dist/types.d.ts +26 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +80 -0
- package/src/client.ts +585 -0
- package/src/index.ts +36 -0
- package/src/models.ts +1199 -0
- package/src/options.ts +259 -0
- package/src/prompt.ts +456 -0
- package/src/types.ts +29 -0
package/dist/client.js
ADDED
|
@@ -0,0 +1,517 @@
|
|
|
1
|
+
import { randomUUID } from 'node:crypto';
|
|
2
|
+
import { createAnthropic } from '@ai-sdk/anthropic';
|
|
3
|
+
import { createGoogleGenerativeAI } from '@ai-sdk/google';
|
|
4
|
+
import { createOpenAI } from '@ai-sdk/openai';
|
|
5
|
+
import { createOpenAICompatible } from '@ai-sdk/openai-compatible';
|
|
6
|
+
import { APICallError, } from '@ai-sdk/provider';
|
|
7
|
+
import { ProviderRequestError, attributionHeaders, isProviderRequestError, providerHttpError, providerVendorError, } from '@namzu/sdk';
|
|
8
|
+
import { findZenModel } from './models.js';
|
|
9
|
+
import { createCallOptions } from './options.js';
|
|
10
|
+
import { createReplayState, toReasoningBlocks } from './prompt.js';
|
|
11
|
+
export const ZEN_CAPABILITIES = {
|
|
12
|
+
supportsTools: true,
|
|
13
|
+
supportsStreaming: true,
|
|
14
|
+
supportsFunctionCalling: true,
|
|
15
|
+
supportsNativeStructuredOutput: true,
|
|
16
|
+
supportsVision: true,
|
|
17
|
+
supportsDocuments: true,
|
|
18
|
+
supportsToolResultImages: true,
|
|
19
|
+
supportsToolResultDocuments: true,
|
|
20
|
+
};
|
|
21
|
+
export const ZEN_BASE_URL = 'https://opencode.ai/zen/v1';
|
|
22
|
+
export const ZEN_GO_BASE_URL = 'https://opencode.ai/zen/go/v1';
|
|
23
|
+
/** A provider instance belongs to one conversation; it never owns an agent loop. */
|
|
24
|
+
export class ZenProvider {
|
|
25
|
+
config;
|
|
26
|
+
service;
|
|
27
|
+
id;
|
|
28
|
+
name;
|
|
29
|
+
capabilities = ZEN_CAPABILITIES;
|
|
30
|
+
sessionId;
|
|
31
|
+
baseURL;
|
|
32
|
+
timeout;
|
|
33
|
+
requestFetch;
|
|
34
|
+
apiKey;
|
|
35
|
+
anonymous;
|
|
36
|
+
constructor(config = {}, service = 'zen') {
|
|
37
|
+
this.config = config;
|
|
38
|
+
this.service = service;
|
|
39
|
+
if (service !== 'zen' && service !== 'go')
|
|
40
|
+
throw new Error('Unknown service.');
|
|
41
|
+
if (config.protocol && !['chat', 'responses', 'messages', 'google'].includes(config.protocol))
|
|
42
|
+
throw new Error('Unknown model protocol.');
|
|
43
|
+
this.id = service === 'go' ? 'zen-go' : 'zen';
|
|
44
|
+
this.name = service === 'go' ? 'Zen Go' : 'Zen';
|
|
45
|
+
if (config.apiKey !== undefined && typeof config.apiKey !== 'string')
|
|
46
|
+
throw new Error('apiKey must be a string.');
|
|
47
|
+
const apiKey = config.apiKey?.trim();
|
|
48
|
+
this.anonymous = !apiKey || apiKey === 'public';
|
|
49
|
+
if (service === 'go' && this.anonymous)
|
|
50
|
+
throw new Error('Zen Go requires an API key.');
|
|
51
|
+
// OpenCode uses this non-secret sentinel for its documented anonymous models.
|
|
52
|
+
this.apiKey = apiKey || 'public';
|
|
53
|
+
this.sessionId = config.sessionId ?? randomUUID();
|
|
54
|
+
if (!this.sessionId.trim() ||
|
|
55
|
+
/[\r\n]/.test(this.sessionId) ||
|
|
56
|
+
Buffer.byteLength(this.sessionId) > 512)
|
|
57
|
+
throw new Error('A nonempty, single-line conversation sessionId is required.');
|
|
58
|
+
this.baseURL = (config.baseURL ?? (service === 'go' ? ZEN_GO_BASE_URL : ZEN_BASE_URL)).replace(/\/+$/, '');
|
|
59
|
+
const url = new URL(this.baseURL);
|
|
60
|
+
if (!['http:', 'https:'].includes(url.protocol) ||
|
|
61
|
+
url.username ||
|
|
62
|
+
url.password ||
|
|
63
|
+
url.search ||
|
|
64
|
+
url.hash)
|
|
65
|
+
throw new Error('baseURL must be an HTTP(S) service URL without credentials, query or fragment.');
|
|
66
|
+
this.timeout = config.timeout ?? 120_000;
|
|
67
|
+
if (!Number.isSafeInteger(this.timeout) || this.timeout <= 0)
|
|
68
|
+
throw new Error('timeout must be a positive integer in milliseconds.');
|
|
69
|
+
this.requestFetch = (input, init) => {
|
|
70
|
+
const headers = new Headers(init?.headers);
|
|
71
|
+
for (const [key, value] of Object.entries(attributionHeaders()))
|
|
72
|
+
headers.set(key, value);
|
|
73
|
+
headers.set('x-opencode-session', this.sessionId);
|
|
74
|
+
return fetch(input, { ...init, headers, redirect: 'error' });
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
async *chatStream(params) {
|
|
78
|
+
const model = params.model ||
|
|
79
|
+
this.config.model ||
|
|
80
|
+
(this.anonymous ? 'muse-spark-1.3-contributor-free' : 'glm-5.3-flash');
|
|
81
|
+
const info = findZenModel(this.service, model);
|
|
82
|
+
if (this.anonymous && info?.supportsAnonymousAccess !== true)
|
|
83
|
+
throw new ProviderRequestError({
|
|
84
|
+
providerId: this.id,
|
|
85
|
+
kind: 'auth',
|
|
86
|
+
detail: 'Anonymous Zen access requires a supported free model. Configure an API key for other models.',
|
|
87
|
+
});
|
|
88
|
+
const protocol = this.config.protocol ?? info?.protocol;
|
|
89
|
+
if (!protocol)
|
|
90
|
+
throw new ProviderRequestError({
|
|
91
|
+
providerId: this.id,
|
|
92
|
+
kind: 'bad_request',
|
|
93
|
+
detail: 'This model has no known wire format. Update the provider or configure protocol explicitly.',
|
|
94
|
+
});
|
|
95
|
+
const route = params.providerRoute ?? { providerId: this.id, model, chainIndex: 0 };
|
|
96
|
+
const controller = new AbortController();
|
|
97
|
+
const signal = AbortSignal.any([
|
|
98
|
+
controller.signal,
|
|
99
|
+
AbortSignal.timeout(this.timeout),
|
|
100
|
+
...(params.signal ? [params.signal] : []),
|
|
101
|
+
]);
|
|
102
|
+
let reader;
|
|
103
|
+
try {
|
|
104
|
+
signal.throwIfAborted();
|
|
105
|
+
let options;
|
|
106
|
+
try {
|
|
107
|
+
options = createCallOptions({ ...params, model }, route, this.service, protocol);
|
|
108
|
+
}
|
|
109
|
+
catch (error) {
|
|
110
|
+
if (isProviderRequestError(error))
|
|
111
|
+
throw error;
|
|
112
|
+
throw new ProviderRequestError({
|
|
113
|
+
providerId: this.id,
|
|
114
|
+
kind: 'bad_request',
|
|
115
|
+
detail: 'The message history contains content this model protocol cannot encode.',
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
options.abortSignal = signal;
|
|
119
|
+
const settings = {
|
|
120
|
+
apiKey: this.apiKey,
|
|
121
|
+
baseURL: this.baseURL,
|
|
122
|
+
fetch: ((input, init) => {
|
|
123
|
+
// The pinned Google adapter converts JSON Schema into an OpenAPI subset,
|
|
124
|
+
// dropping constraints. Use the endpoint's JSON Schema field instead.
|
|
125
|
+
if (protocol === 'google' &&
|
|
126
|
+
params.responseFormat?.type === 'json_schema' &&
|
|
127
|
+
typeof init?.body === 'string') {
|
|
128
|
+
const body = JSON.parse(init.body);
|
|
129
|
+
body.generationConfig ??= {};
|
|
130
|
+
delete body.generationConfig.responseSchema;
|
|
131
|
+
body.generationConfig.responseJsonSchema = params.responseFormat.json_schema.schema;
|
|
132
|
+
return this.requestFetch(input, { ...init, body: JSON.stringify(body) });
|
|
133
|
+
}
|
|
134
|
+
return this.requestFetch(input, init);
|
|
135
|
+
}),
|
|
136
|
+
};
|
|
137
|
+
let native;
|
|
138
|
+
switch (protocol) {
|
|
139
|
+
case 'chat':
|
|
140
|
+
native = createOpenAICompatible({
|
|
141
|
+
...settings,
|
|
142
|
+
name: 'opencode',
|
|
143
|
+
includeUsage: true,
|
|
144
|
+
supportsStructuredOutputs: true,
|
|
145
|
+
})(model);
|
|
146
|
+
break;
|
|
147
|
+
case 'responses':
|
|
148
|
+
native = createOpenAI(settings).responses(model);
|
|
149
|
+
break;
|
|
150
|
+
case 'messages':
|
|
151
|
+
native = createAnthropic(settings)(model);
|
|
152
|
+
break;
|
|
153
|
+
case 'google':
|
|
154
|
+
native = createGoogleGenerativeAI(settings)(model);
|
|
155
|
+
break;
|
|
156
|
+
}
|
|
157
|
+
const result = await native.doStream(options);
|
|
158
|
+
reader = result.stream.getReader();
|
|
159
|
+
let id = randomUUID();
|
|
160
|
+
const content = [];
|
|
161
|
+
const texts = new Map();
|
|
162
|
+
const thoughts = new Map();
|
|
163
|
+
const tools = new Map();
|
|
164
|
+
let finish;
|
|
165
|
+
while (true) {
|
|
166
|
+
const next = await reader.read();
|
|
167
|
+
if (next.done)
|
|
168
|
+
break;
|
|
169
|
+
const part = next.value;
|
|
170
|
+
signal.throwIfAborted();
|
|
171
|
+
switch (part.type) {
|
|
172
|
+
case 'stream-start': {
|
|
173
|
+
const unsupported = part.warnings.filter((warning) => warning.type === 'unsupported');
|
|
174
|
+
if (unsupported.length)
|
|
175
|
+
throw new ProviderRequestError({
|
|
176
|
+
providerId: this.id,
|
|
177
|
+
kind: 'bad_request',
|
|
178
|
+
detail: 'The selected model protocol cannot honor one or more requested settings or content parts.',
|
|
179
|
+
});
|
|
180
|
+
break;
|
|
181
|
+
}
|
|
182
|
+
case 'response-metadata':
|
|
183
|
+
if (part.id)
|
|
184
|
+
id = part.id;
|
|
185
|
+
break;
|
|
186
|
+
case 'text-start': {
|
|
187
|
+
const value = {
|
|
188
|
+
type: 'text',
|
|
189
|
+
text: '',
|
|
190
|
+
providerMetadata: part.providerMetadata,
|
|
191
|
+
};
|
|
192
|
+
texts.set(part.id, value);
|
|
193
|
+
content.push(value);
|
|
194
|
+
break;
|
|
195
|
+
}
|
|
196
|
+
case 'text-delta': {
|
|
197
|
+
const value = texts.get(part.id);
|
|
198
|
+
if (!value)
|
|
199
|
+
throw new Error('Text delta has no open block.');
|
|
200
|
+
value.text += part.delta;
|
|
201
|
+
value.providerMetadata = mergeMetadata(value.providerMetadata, part.providerMetadata);
|
|
202
|
+
yield { id, delta: { content: part.delta } };
|
|
203
|
+
break;
|
|
204
|
+
}
|
|
205
|
+
case 'text-end': {
|
|
206
|
+
const value = texts.get(part.id);
|
|
207
|
+
if (value)
|
|
208
|
+
value.providerMetadata = mergeMetadata(value.providerMetadata, part.providerMetadata);
|
|
209
|
+
break;
|
|
210
|
+
}
|
|
211
|
+
case 'reasoning-start': {
|
|
212
|
+
const value = {
|
|
213
|
+
type: 'reasoning',
|
|
214
|
+
text: '',
|
|
215
|
+
providerMetadata: part.providerMetadata,
|
|
216
|
+
};
|
|
217
|
+
const index = thoughts.size;
|
|
218
|
+
thoughts.set(part.id, { index, value });
|
|
219
|
+
content.push(value);
|
|
220
|
+
yield { id, delta: { reasoning: { index, type: 'thinking', text: '' } } };
|
|
221
|
+
break;
|
|
222
|
+
}
|
|
223
|
+
case 'reasoning-delta':
|
|
224
|
+
case 'reasoning-end': {
|
|
225
|
+
const thought = thoughts.get(part.id);
|
|
226
|
+
if (!thought)
|
|
227
|
+
throw new Error('Reasoning delta has no open block.');
|
|
228
|
+
thought.value.providerMetadata = mergeMetadata(thought.value.providerMetadata, part.providerMetadata);
|
|
229
|
+
if (part.type === 'reasoning-delta')
|
|
230
|
+
thought.value.text += part.delta;
|
|
231
|
+
yield {
|
|
232
|
+
id,
|
|
233
|
+
delta: {
|
|
234
|
+
reasoning: {
|
|
235
|
+
index: thought.index,
|
|
236
|
+
...(part.type === 'reasoning-delta'
|
|
237
|
+
? { text: part.delta }
|
|
238
|
+
: {
|
|
239
|
+
...toReasoningBlocks([thought.value])[0],
|
|
240
|
+
text: undefined,
|
|
241
|
+
done: true,
|
|
242
|
+
}),
|
|
243
|
+
},
|
|
244
|
+
},
|
|
245
|
+
};
|
|
246
|
+
break;
|
|
247
|
+
}
|
|
248
|
+
case 'tool-input-start': {
|
|
249
|
+
if (part.providerExecuted)
|
|
250
|
+
throw new Error('Provider-executed tools are not configured.');
|
|
251
|
+
const index = tools.size;
|
|
252
|
+
const value = {
|
|
253
|
+
type: 'tool-call',
|
|
254
|
+
toolCallId: part.id,
|
|
255
|
+
toolName: part.toolName,
|
|
256
|
+
input: '',
|
|
257
|
+
providerMetadata: part.providerMetadata,
|
|
258
|
+
};
|
|
259
|
+
tools.set(part.id, { index, input: '', ended: false, value });
|
|
260
|
+
content.push(value);
|
|
261
|
+
yield {
|
|
262
|
+
id,
|
|
263
|
+
delta: {
|
|
264
|
+
toolCalls: [
|
|
265
|
+
{
|
|
266
|
+
index,
|
|
267
|
+
id: part.id,
|
|
268
|
+
type: 'function',
|
|
269
|
+
function: { name: part.toolName, arguments: '' },
|
|
270
|
+
},
|
|
271
|
+
],
|
|
272
|
+
},
|
|
273
|
+
};
|
|
274
|
+
break;
|
|
275
|
+
}
|
|
276
|
+
case 'tool-input-delta': {
|
|
277
|
+
const tool = tools.get(part.id);
|
|
278
|
+
if (!tool)
|
|
279
|
+
throw new Error('Tool delta has no open call.');
|
|
280
|
+
tool.input += part.delta;
|
|
281
|
+
tool.value.input = tool.input;
|
|
282
|
+
tool.value.providerMetadata = mergeMetadata(tool.value.providerMetadata, part.providerMetadata);
|
|
283
|
+
yield {
|
|
284
|
+
id,
|
|
285
|
+
delta: { toolCalls: [{ index: tool.index, function: { arguments: part.delta } }] },
|
|
286
|
+
};
|
|
287
|
+
break;
|
|
288
|
+
}
|
|
289
|
+
case 'tool-input-end': {
|
|
290
|
+
const tool = tools.get(part.id);
|
|
291
|
+
if (tool)
|
|
292
|
+
tool.value.providerMetadata = mergeMetadata(tool.value.providerMetadata, part.providerMetadata);
|
|
293
|
+
// The final tool-call includes signatures and the authoritative arguments.
|
|
294
|
+
break;
|
|
295
|
+
}
|
|
296
|
+
case 'tool-call': {
|
|
297
|
+
if (part.providerExecuted)
|
|
298
|
+
throw new Error('Provider-executed tools are not configured.');
|
|
299
|
+
let tool = tools.get(part.toolCallId);
|
|
300
|
+
if (!tool) {
|
|
301
|
+
tool = { index: tools.size, input: '', ended: false, value: { ...part } };
|
|
302
|
+
tools.set(part.toolCallId, tool);
|
|
303
|
+
content.push(tool.value);
|
|
304
|
+
yield {
|
|
305
|
+
id,
|
|
306
|
+
delta: {
|
|
307
|
+
toolCalls: [
|
|
308
|
+
{
|
|
309
|
+
index: tool.index,
|
|
310
|
+
id: part.toolCallId,
|
|
311
|
+
type: 'function',
|
|
312
|
+
function: { name: part.toolName, arguments: '' },
|
|
313
|
+
},
|
|
314
|
+
],
|
|
315
|
+
},
|
|
316
|
+
};
|
|
317
|
+
}
|
|
318
|
+
if (tool.ended)
|
|
319
|
+
throw new Error('Duplicate completed tool call.');
|
|
320
|
+
if (!part.input.startsWith(tool.input))
|
|
321
|
+
throw new Error('Final tool arguments do not match the stream.');
|
|
322
|
+
const suffix = part.input.slice(tool.input.length);
|
|
323
|
+
if (suffix)
|
|
324
|
+
yield {
|
|
325
|
+
id,
|
|
326
|
+
delta: { toolCalls: [{ index: tool.index, function: { arguments: suffix } }] },
|
|
327
|
+
};
|
|
328
|
+
tool.value.input = part.input;
|
|
329
|
+
tool.value.providerMetadata = mergeMetadata(tool.value.providerMetadata, part.providerMetadata);
|
|
330
|
+
tool.ended = true;
|
|
331
|
+
yield { id, delta: { toolCallEnd: { index: tool.index, id: part.toolCallId } } };
|
|
332
|
+
break;
|
|
333
|
+
}
|
|
334
|
+
case 'finish':
|
|
335
|
+
finish = part;
|
|
336
|
+
break;
|
|
337
|
+
case 'error':
|
|
338
|
+
throw part.error;
|
|
339
|
+
case 'raw':
|
|
340
|
+
case 'source':
|
|
341
|
+
break;
|
|
342
|
+
default:
|
|
343
|
+
throw new Error('Unsupported model output part.');
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
if (!finish)
|
|
347
|
+
throw new Error('The model stream ended before its final outcome.');
|
|
348
|
+
if (finish.finishReason.unified === 'error' || finish.finishReason.unified === 'other')
|
|
349
|
+
throw new Error('The model did not report a successful finish reason.');
|
|
350
|
+
const finishReason = finish.finishReason.unified === 'length'
|
|
351
|
+
? 'length'
|
|
352
|
+
: finish.finishReason.unified === 'content-filter'
|
|
353
|
+
? 'content_filter'
|
|
354
|
+
: tools.size > 0
|
|
355
|
+
? 'tool_calls'
|
|
356
|
+
: 'stop';
|
|
357
|
+
yield {
|
|
358
|
+
id,
|
|
359
|
+
delta: {},
|
|
360
|
+
finishReason,
|
|
361
|
+
usage: mapUsage(finish.usage),
|
|
362
|
+
replayState: createReplayState({ ...params, model }, route, this.service, protocol, content),
|
|
363
|
+
};
|
|
364
|
+
}
|
|
365
|
+
catch (error) {
|
|
366
|
+
if (params.signal?.aborted)
|
|
367
|
+
throw params.signal.reason;
|
|
368
|
+
if (isProviderRequestError(error))
|
|
369
|
+
throw error;
|
|
370
|
+
throw this.failure(error);
|
|
371
|
+
}
|
|
372
|
+
finally {
|
|
373
|
+
controller.abort();
|
|
374
|
+
if (reader) {
|
|
375
|
+
await reader.cancel().catch(() => { });
|
|
376
|
+
reader.releaseLock();
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
async listModels(signal) {
|
|
381
|
+
try {
|
|
382
|
+
const response = await this.requestFetch(`${this.baseURL}/models`, {
|
|
383
|
+
headers: { Authorization: `Bearer ${this.apiKey}` },
|
|
384
|
+
signal: AbortSignal.any([AbortSignal.timeout(this.timeout), ...(signal ? [signal] : [])]),
|
|
385
|
+
});
|
|
386
|
+
if (!response.ok) {
|
|
387
|
+
await response.body?.cancel();
|
|
388
|
+
throw providerHttpError({
|
|
389
|
+
providerId: this.id,
|
|
390
|
+
status: response.status,
|
|
391
|
+
body: undefined,
|
|
392
|
+
retryAfter: response.headers.get('retry-after'),
|
|
393
|
+
});
|
|
394
|
+
}
|
|
395
|
+
const body = await readCatalogue(response);
|
|
396
|
+
if (!body || typeof body !== 'object' || !('data' in body) || !Array.isArray(body.data))
|
|
397
|
+
throw new Error('The model catalogue returned an invalid response.');
|
|
398
|
+
const result = [];
|
|
399
|
+
const seen = new Set();
|
|
400
|
+
for (const item of body.data) {
|
|
401
|
+
if (!item || typeof item !== 'object' || typeof item.id !== 'string' || seen.has(item.id))
|
|
402
|
+
continue;
|
|
403
|
+
seen.add(item.id);
|
|
404
|
+
const model = findZenModel(this.service, item.id);
|
|
405
|
+
if (model && (!this.anonymous || model.supportsAnonymousAccess === true))
|
|
406
|
+
result.push({ ...model });
|
|
407
|
+
}
|
|
408
|
+
return result;
|
|
409
|
+
}
|
|
410
|
+
catch (error) {
|
|
411
|
+
if (signal?.aborted)
|
|
412
|
+
throw signal.reason;
|
|
413
|
+
if (isProviderRequestError(error))
|
|
414
|
+
throw error;
|
|
415
|
+
throw this.failure(error);
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
reasoningEffortLevelsFor(model, _thinking) {
|
|
419
|
+
return findZenModel(this.service, model)?.effortLevels;
|
|
420
|
+
}
|
|
421
|
+
async resolveContextWindow(model, signal) {
|
|
422
|
+
signal?.throwIfAborted();
|
|
423
|
+
return findZenModel(this.service, model)?.contextWindow;
|
|
424
|
+
}
|
|
425
|
+
failure(error) {
|
|
426
|
+
const scrub = (text) => this.anonymous ? text : text.split(this.apiKey).join('[REDACTED:api-key]');
|
|
427
|
+
if (APICallError.isInstance(error))
|
|
428
|
+
return providerHttpError({
|
|
429
|
+
providerId: this.id,
|
|
430
|
+
status: error.statusCode ?? 502,
|
|
431
|
+
body: scrub(error.responseBody ?? error.message),
|
|
432
|
+
retryAfter: error.responseHeaders?.['retry-after'],
|
|
433
|
+
});
|
|
434
|
+
// Native streaming adapters can emit plain error envelopes after HTTP 200.
|
|
435
|
+
// Keep only classification fields; never attach the original error/cause.
|
|
436
|
+
const envelope = safeErrorEnvelope(error);
|
|
437
|
+
const body = scrub(JSON.stringify(envelope));
|
|
438
|
+
if (envelope.status !== undefined)
|
|
439
|
+
return providerHttpError({ providerId: this.id, status: envelope.status, body });
|
|
440
|
+
return providerVendorError({
|
|
441
|
+
providerId: this.id,
|
|
442
|
+
error: Object.assign(new Error(body), {
|
|
443
|
+
...(envelope.code !== undefined ? { code: scrub(envelope.code) } : {}),
|
|
444
|
+
}),
|
|
445
|
+
});
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
export class ZenGoProvider extends ZenProvider {
|
|
449
|
+
constructor(config) {
|
|
450
|
+
super(config, 'go');
|
|
451
|
+
}
|
|
452
|
+
}
|
|
453
|
+
function safeErrorEnvelope(error) {
|
|
454
|
+
const own = (value, key) => typeof value === 'object' && value !== null
|
|
455
|
+
? Object.getOwnPropertyDescriptor(value, key)?.value
|
|
456
|
+
: undefined;
|
|
457
|
+
const nested = own(error, 'error');
|
|
458
|
+
const source = typeof nested === 'object' && nested !== null ? nested : error;
|
|
459
|
+
const type = own(source, 'type');
|
|
460
|
+
const code = own(source, 'code');
|
|
461
|
+
const message = typeof source === 'string' ? source : own(source, 'message');
|
|
462
|
+
const status = own(source, 'status') ?? own(source, 'statusCode') ?? own(error, 'status');
|
|
463
|
+
return {
|
|
464
|
+
...(typeof type === 'string' && type.length <= 80 ? { type } : {}),
|
|
465
|
+
...(typeof code === 'string' && code.length <= 80 ? { code } : {}),
|
|
466
|
+
message: typeof message === 'string' ? message.slice(0, 8192) : 'The model stream failed.',
|
|
467
|
+
...(typeof status === 'number' && Number.isInteger(status) && status >= 400 && status <= 599
|
|
468
|
+
? { status }
|
|
469
|
+
: {}),
|
|
470
|
+
};
|
|
471
|
+
}
|
|
472
|
+
function mergeMetadata(left, right) {
|
|
473
|
+
if (!right)
|
|
474
|
+
return left;
|
|
475
|
+
const result = { ...left };
|
|
476
|
+
for (const [key, value] of Object.entries(right))
|
|
477
|
+
result[key] = { ...result[key], ...value };
|
|
478
|
+
return result;
|
|
479
|
+
}
|
|
480
|
+
function mapUsage(usage) {
|
|
481
|
+
const promptTokens = usage.inputTokens.total ?? 0;
|
|
482
|
+
const completionTokens = usage.outputTokens.total ?? 0;
|
|
483
|
+
return {
|
|
484
|
+
promptTokens,
|
|
485
|
+
completionTokens,
|
|
486
|
+
totalTokens: promptTokens + completionTokens,
|
|
487
|
+
cachedTokens: usage.inputTokens.cacheRead ?? 0,
|
|
488
|
+
cacheWriteTokens: usage.inputTokens.cacheWrite ?? 0,
|
|
489
|
+
...(usage.outputTokens.reasoning !== undefined
|
|
490
|
+
? { reasoningTokens: usage.outputTokens.reasoning }
|
|
491
|
+
: {}),
|
|
492
|
+
};
|
|
493
|
+
}
|
|
494
|
+
async function readCatalogue(response) {
|
|
495
|
+
const reader = response.body?.getReader();
|
|
496
|
+
if (!reader)
|
|
497
|
+
throw new Error('Empty model catalogue.');
|
|
498
|
+
const chunks = [];
|
|
499
|
+
let bytes = 0;
|
|
500
|
+
try {
|
|
501
|
+
while (true) {
|
|
502
|
+
const next = await reader.read();
|
|
503
|
+
if (next.done)
|
|
504
|
+
break;
|
|
505
|
+
bytes += next.value.byteLength;
|
|
506
|
+
if (bytes > 1_048_576)
|
|
507
|
+
throw new Error('The model catalogue exceeds 1 MiB.');
|
|
508
|
+
chunks.push(next.value);
|
|
509
|
+
}
|
|
510
|
+
return JSON.parse(new TextDecoder('utf-8', { fatal: true }).decode(Buffer.concat(chunks, bytes)));
|
|
511
|
+
}
|
|
512
|
+
finally {
|
|
513
|
+
await reader.cancel().catch(() => { });
|
|
514
|
+
reader.releaseLock();
|
|
515
|
+
}
|
|
516
|
+
}
|
|
517
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { type RegisterOptions } from '@namzu/sdk';
|
|
2
|
+
import type { ZenGoProviderConfig, ZenProviderConfig } from './types.js';
|
|
3
|
+
declare module '@namzu/sdk' {
|
|
4
|
+
interface ProviderConfigRegistry {
|
|
5
|
+
zen: ZenProviderConfig;
|
|
6
|
+
'zen-go': ZenGoProviderConfig;
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
export declare function registerZen(options?: RegisterOptions): void;
|
|
10
|
+
export declare function registerZenGo(options?: RegisterOptions): void;
|
|
11
|
+
export { ZEN_BASE_URL, ZEN_GO_BASE_URL, ZEN_CAPABILITIES, ZenProvider, ZenGoProvider, } from './client.js';
|
|
12
|
+
export type { ZenConfig, ZenGoConfig, ZenProviderConfig, ZenGoProviderConfig } from './types.js';
|
|
13
|
+
export { getZenModels, findZenModel } from './models.js';
|
|
14
|
+
export type { ZenModel, ZenProtocol, ZenService } from './models.js';
|
|
15
|
+
export type { ChatCompletionParams, ModelInfo, ReasoningEffort, StreamChunk, ThinkingConfig, } from '@namzu/sdk';
|
|
16
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,KAAK,eAAe,EAAE,MAAM,YAAY,CAAA;AAEnE,OAAO,KAAK,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAExE,OAAO,QAAQ,YAAY,CAAC;IAC3B,UAAU,sBAAsB;QAC/B,GAAG,EAAE,iBAAiB,CAAA;QACtB,QAAQ,EAAE,mBAAmB,CAAA;KAC7B;CACD;AAED,wBAAgB,WAAW,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,IAAI,CAE3D;AAED,wBAAgB,aAAa,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,IAAI,CAE7D;AAED,OAAO,EACN,YAAY,EACZ,eAAe,EACf,gBAAgB,EAChB,WAAW,EACX,aAAa,GACb,MAAM,aAAa,CAAA;AACpB,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAChG,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AACxD,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACpE,YAAY,EACX,oBAAoB,EACpB,SAAS,EACT,eAAe,EACf,WAAW,EACX,cAAc,GACd,MAAM,YAAY,CAAA"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { ProviderRegistry } from '@namzu/sdk';
|
|
2
|
+
import { ZEN_CAPABILITIES, ZenGoProvider, ZenProvider } from './client.js';
|
|
3
|
+
export function registerZen(options) {
|
|
4
|
+
ProviderRegistry.register('zen', ZenProvider, ZEN_CAPABILITIES, options);
|
|
5
|
+
}
|
|
6
|
+
export function registerZenGo(options) {
|
|
7
|
+
ProviderRegistry.register('zen-go', ZenGoProvider, ZEN_CAPABILITIES, options);
|
|
8
|
+
}
|
|
9
|
+
export { ZEN_BASE_URL, ZEN_GO_BASE_URL, ZEN_CAPABILITIES, ZenProvider, ZenGoProvider, } from './client.js';
|
|
10
|
+
export { getZenModels, findZenModel } from './models.js';
|
|
11
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAwB,MAAM,YAAY,CAAA;AACnE,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAU1E,MAAM,UAAU,WAAW,CAAC,OAAyB;IACpD,gBAAgB,CAAC,QAAQ,CAAC,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,OAAO,CAAC,CAAA;AACzE,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,OAAyB;IACtD,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,EAAE,aAAa,EAAE,gBAAgB,EAAE,OAAO,CAAC,CAAA;AAC9E,CAAC;AAED,OAAO,EACN,YAAY,EACZ,eAAe,EACf,gBAAgB,EAChB,WAAW,EACX,aAAa,GACb,MAAM,aAAa,CAAA;AAEpB,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA"}
|
package/dist/models.d.ts
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { ModelInputModality, ReasoningEffort } from '@namzu/sdk';
|
|
2
|
+
/** Zen's independently routed, billed services. */
|
|
3
|
+
export type ZenService = 'zen' | 'go';
|
|
4
|
+
/** Native wire format documented for this exact model and service. */
|
|
5
|
+
export type ZenProtocol = 'chat' | 'responses' | 'messages' | 'google';
|
|
6
|
+
/** A supported model in the pinned Zen catalogue. */
|
|
7
|
+
export interface ZenModel {
|
|
8
|
+
readonly id: string;
|
|
9
|
+
readonly name: string;
|
|
10
|
+
readonly protocol: ZenProtocol;
|
|
11
|
+
readonly contextWindow?: number;
|
|
12
|
+
readonly maxOutputTokens?: number;
|
|
13
|
+
readonly inputModalities?: readonly ModelInputModality[];
|
|
14
|
+
/** USD per million uncached input tokens at the documented base tier. */
|
|
15
|
+
readonly inputPrice: number;
|
|
16
|
+
/** USD per million output tokens at the documented base tier. */
|
|
17
|
+
readonly outputPrice: number;
|
|
18
|
+
readonly supportsToolUse: boolean;
|
|
19
|
+
readonly supportsStreaming: boolean;
|
|
20
|
+
/** True only for documented anonymous Zen models; omission grants no anonymous access. */
|
|
21
|
+
readonly supportsAnonymousAccess?: boolean;
|
|
22
|
+
/** Exact advertised selectable effort levels; empty means no effort selector. */
|
|
23
|
+
readonly effortLevels?: readonly ReasoningEffort[];
|
|
24
|
+
}
|
|
25
|
+
/** Supported metadata; actual account availability is established by live discovery. */
|
|
26
|
+
export declare function getZenModels(service: ZenService): readonly ZenModel[];
|
|
27
|
+
/** Exact wire ID lookup. Zen CLI prefixes and unknown IDs are not guessed. */
|
|
28
|
+
export declare function findZenModel(service: ZenService, id: string): ZenModel | undefined;
|
|
29
|
+
//# sourceMappingURL=models.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../src/models.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAErE,mDAAmD;AACnD,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,IAAI,CAAA;AAErC,sEAAsE;AACtE,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,WAAW,GAAG,UAAU,GAAG,QAAQ,CAAA;AAEtE,qDAAqD;AACrD,MAAM,WAAW,QAAQ;IACxB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAA;IAC9B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAA;IAC/B,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAA;IACjC,QAAQ,CAAC,eAAe,CAAC,EAAE,SAAS,kBAAkB,EAAE,CAAA;IACxD,yEAAyE;IACzE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,iEAAiE;IACjE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAA;IACjC,QAAQ,CAAC,iBAAiB,EAAE,OAAO,CAAA;IACnC,0FAA0F;IAC1F,QAAQ,CAAC,uBAAuB,CAAC,EAAE,OAAO,CAAA;IAC1C,iFAAiF;IACjF,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,eAAe,EAAE,CAAA;CAClD;AA4oCD,wFAAwF;AACxF,wBAAgB,YAAY,CAAC,OAAO,EAAE,UAAU,GAAG,SAAS,QAAQ,EAAE,CAErE;AAED,8EAA8E;AAC9E,wBAAgB,YAAY,CAAC,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAElF"}
|