vern-llm 3.0.0 → 3.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adapters/index.cjs +3 -3
- package/dist/adapters/index.cjs.map +1 -1
- package/dist/adapters/index.d.cts +22 -26
- package/dist/adapters/index.d.cts.map +1 -1
- package/dist/adapters/index.d.mts +22 -26
- package/dist/adapters/index.d.mts.map +1 -1
- package/dist/adapters/index.mjs +3 -3
- package/dist/adapters/index.mjs.map +1 -1
- package/dist/{client-HWxkwVvj.d.cts → client-D4eRQMgc.d.cts} +153 -77
- package/dist/client-D4eRQMgc.d.cts.map +1 -0
- package/dist/{client-HWxkwVvj.d.mts → client-D4eRQMgc.d.mts} +153 -77
- package/dist/client-D4eRQMgc.d.mts.map +1 -0
- package/dist/index.cjs +18 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +14 -22
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +14 -22
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +18 -2
- package/dist/index.mjs.map +1 -1
- package/dist/responseBody.utils-DFXqo6oy.mjs +2 -0
- package/dist/responseBody.utils-DFXqo6oy.mjs.map +1 -0
- package/dist/responseBody.utils-DfrljpVb.cjs +2 -0
- package/dist/responseBody.utils-DfrljpVb.cjs.map +1 -0
- package/package.json +16 -13
- package/dist/client-HWxkwVvj.d.cts.map +0 -1
- package/dist/client-HWxkwVvj.d.mts.map +0 -1
- package/dist/responseBody.utils-B2tQiGUi.mjs +0 -2
- package/dist/responseBody.utils-B2tQiGUi.mjs.map +0 -1
- package/dist/responseBody.utils-CknznUJA.cjs +0 -2
- package/dist/responseBody.utils-CknznUJA.cjs.map +0 -1
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
//#region src/adapters/internal/nativeStructuredOutput.d.ts
|
|
1
|
+
import { Et as ProviderRateLimitHint, n as LLMClient, v as WireStreamChunk } from "../client-D4eRQMgc.cjs";
|
|
3
2
|
/**
|
|
4
3
|
* A list of model ids, or a predicate, naming models with a capability.
|
|
5
4
|
* Native structured output has no built in list: which models support it
|
|
@@ -7,8 +6,6 @@ import { bt as ProviderRateLimitHint, n as LLMClient, v as WireStreamChunk } fro
|
|
|
7
6
|
* trade a clear local error for a confusing provider one.
|
|
8
7
|
*/
|
|
9
8
|
type ModelCapabilityOverride = string[] | ((model: string) => boolean);
|
|
10
|
-
//#endregion
|
|
11
|
-
//#region src/adapters/internal/reasoningBudget.utils.d.ts
|
|
12
9
|
/**
|
|
13
10
|
* Converts between `reasoningEffort` tiers and `budgetTokens`, for a
|
|
14
11
|
* provider that only understands the other one. The numbers are a guess,
|
|
@@ -16,16 +13,12 @@ type ModelCapabilityOverride = string[] | ((model: string) => boolean);
|
|
|
16
13
|
* overrides them.
|
|
17
14
|
*/
|
|
18
15
|
type EffortTokenTable = Record<'minimal' | 'low' | 'medium' | 'high', number>;
|
|
19
|
-
//#endregion
|
|
20
|
-
//#region src/adapters/internal/imageFormat.d.ts
|
|
21
16
|
/**
|
|
22
17
|
* `ImageBlock.mimeType` values every adapter accepts: the types all
|
|
23
18
|
* supported providers share, so content valid for one is valid for all.
|
|
24
19
|
*/
|
|
25
|
-
declare const SUPPORTED_IMAGE_MIME_TYPES: readonly [
|
|
20
|
+
declare const SUPPORTED_IMAGE_MIME_TYPES: readonly ['image/png', 'image/jpeg', 'image/gif', 'image/webp'];
|
|
26
21
|
type SupportedImageMimeType = (typeof SUPPORTED_IMAGE_MIME_TYPES)[number];
|
|
27
|
-
//#endregion
|
|
28
|
-
//#region src/adapters/claude/types.d.ts
|
|
29
22
|
/** Anthropic's native per-block content shape for a message. */
|
|
30
23
|
type AnthropicContentBlock = {
|
|
31
24
|
type: 'text';
|
|
@@ -137,8 +130,6 @@ interface AnthropicClient {
|
|
|
137
130
|
}>;
|
|
138
131
|
};
|
|
139
132
|
}
|
|
140
|
-
//#endregion
|
|
141
|
-
//#region src/adapters/claude/anthropic.d.ts
|
|
142
133
|
/** Optional configuration for `fromAnthropic`. */
|
|
143
134
|
interface AnthropicAdapterOptions {
|
|
144
135
|
/**
|
|
@@ -162,6 +153,13 @@ interface AnthropicAdapterOptions {
|
|
|
162
153
|
* native structured output.
|
|
163
154
|
*/
|
|
164
155
|
forcedToolChoiceUnsupportedModels?: ModelCapabilityOverride;
|
|
156
|
+
/**
|
|
157
|
+
* Sends `temperature`. Default `false`: API version `2026-10-21`, which every
|
|
158
|
+
* `@anthropic-ai/sdk` 1.x client sends, rejects it on all models. Set `true`
|
|
159
|
+
* only for a client pinned to an older API version. Claude 4.7 and later still
|
|
160
|
+
* never get it, and neither does a request with thinking on.
|
|
161
|
+
*/
|
|
162
|
+
sendTemperature?: boolean;
|
|
165
163
|
/**
|
|
166
164
|
* Whether `messages.create` supports `.withResponse()`, which AIMD's
|
|
167
165
|
* proactive path needs. Default `false`, since a fake or thin wrapper
|
|
@@ -176,8 +174,6 @@ interface AnthropicAdapterOptions {
|
|
|
176
174
|
* Anthropic can't guarantee it.
|
|
177
175
|
*/
|
|
178
176
|
export declare function fromAnthropic(anthropicClient: AnthropicClient, options?: AnthropicAdapterOptions): LLMClient;
|
|
179
|
-
//#endregion
|
|
180
|
-
//#region src/adapters/gemini/types.d.ts
|
|
181
177
|
/** Gemini's per-part content shape; object-typed args match the real SDK. */
|
|
182
178
|
type GeminiPart = {
|
|
183
179
|
text: string;
|
|
@@ -263,6 +259,9 @@ interface GeminiModels {
|
|
|
263
259
|
};
|
|
264
260
|
finishReason?: string;
|
|
265
261
|
}>;
|
|
262
|
+
promptFeedback?: {
|
|
263
|
+
blockReason?: string;
|
|
264
|
+
};
|
|
266
265
|
usageMetadata?: {
|
|
267
266
|
promptTokenCount?: number;
|
|
268
267
|
candidatesTokenCount?: number;
|
|
@@ -284,7 +283,11 @@ interface GeminiModels {
|
|
|
284
283
|
};
|
|
285
284
|
}>;
|
|
286
285
|
};
|
|
286
|
+
finishReason?: string;
|
|
287
287
|
}>;
|
|
288
|
+
promptFeedback?: {
|
|
289
|
+
blockReason?: string;
|
|
290
|
+
};
|
|
288
291
|
usageMetadata?: {
|
|
289
292
|
promptTokenCount?: number;
|
|
290
293
|
candidatesTokenCount?: number;
|
|
@@ -308,8 +311,6 @@ interface GeminiClient {
|
|
|
308
311
|
/** Set by the SDK; names the provider as Vertex AI or the Gemini API. */
|
|
309
312
|
vertexai?: boolean;
|
|
310
313
|
}
|
|
311
|
-
//#endregion
|
|
312
|
-
//#region src/adapters/gemini/gemini.d.ts
|
|
313
314
|
/** Optional configuration for `fromGemini`. */
|
|
314
315
|
interface GeminiAdapterOptions {
|
|
315
316
|
/** Overrides the token count each `reasoningEffort` tier maps onto. Omitted tiers keep the default. */
|
|
@@ -327,8 +328,6 @@ interface GeminiAdapterOptions {
|
|
|
327
328
|
* natively.
|
|
328
329
|
*/
|
|
329
330
|
export declare function fromGemini(client: GeminiClient, options?: GeminiAdapterOptions): LLMClient;
|
|
330
|
-
//#endregion
|
|
331
|
-
//#region src/adapters/fetch/types.d.ts
|
|
332
331
|
/** The chat-completion-shaped request VernLLM builds internally */
|
|
333
332
|
type ChatRequest = Parameters<LLMClient['chat']['completions']['create']>[0];
|
|
334
333
|
/**
|
|
@@ -385,6 +384,10 @@ interface FetchAdapterConfig {
|
|
|
385
384
|
*/
|
|
386
385
|
mapResponse: (json: unknown) => {
|
|
387
386
|
content?: string;
|
|
387
|
+
/** The provider declined the call. Fails as `model_refused` when there is no content or tool call. */
|
|
388
|
+
refusal?: string;
|
|
389
|
+
/** Why generation stopped. Reported as `CallMeta.finishReason`; unknown values become `'other'`. */
|
|
390
|
+
finishReason?: string;
|
|
388
391
|
usage?: {
|
|
389
392
|
/** Every input token, cache reads and writes included. */
|
|
390
393
|
promptTokens?: number;
|
|
@@ -396,6 +399,8 @@ interface FetchAdapterConfig {
|
|
|
396
399
|
cacheWriteTokens?: number;
|
|
397
400
|
/** `cacheWriteTokens` by TTL label, e.g. `{ '5m': 1200 }`. */
|
|
398
401
|
cacheWriteTokensByTtl?: Record<string, number>;
|
|
402
|
+
/** What the provider billed for the call, in USD, when its response says. */
|
|
403
|
+
costUsd?: number;
|
|
399
404
|
};
|
|
400
405
|
toolCalls?: Array<{
|
|
401
406
|
id: string;
|
|
@@ -424,8 +429,6 @@ interface FetchAdapterConfig {
|
|
|
424
429
|
*/
|
|
425
430
|
parseRateLimitHint?: (headers: ResponseLike['headers']) => ProviderRateLimitHint;
|
|
426
431
|
}
|
|
427
|
-
//#endregion
|
|
428
|
-
//#region src/adapters/fetch/fetch.d.ts
|
|
429
432
|
/**
|
|
430
433
|
* A raw HTTP adapter for providers with no SDK: supply the URL, headers,
|
|
431
434
|
* and the request and response mapping. A non-2xx response throws an error
|
|
@@ -433,8 +436,6 @@ interface FetchAdapterConfig {
|
|
|
433
436
|
* Retry-After all apply.
|
|
434
437
|
*/
|
|
435
438
|
export declare function fromFetch(config: FetchAdapterConfig): LLMClient;
|
|
436
|
-
//#endregion
|
|
437
|
-
//#region src/adapters/internal/sse.d.ts
|
|
438
439
|
/**
|
|
439
440
|
* Parses a Server-Sent-Events stream of bytes or text into each frame's
|
|
440
441
|
* JSON `data:` payload, in order, over any transport. Multi-line data is
|
|
@@ -449,8 +450,6 @@ export declare function parseSseStream(source: AsyncIterable<Uint8Array | string
|
|
|
449
450
|
* can tell "still alive" apart from an empty frame.
|
|
450
451
|
*/
|
|
451
452
|
export declare const SSE_PING: unique symbol;
|
|
452
|
-
//#endregion
|
|
453
|
-
//#region src/adapters/openai/openaiCompatible.d.ts
|
|
454
453
|
/** Optional configuration for `fromOpenAICompatible`. */
|
|
455
454
|
interface OpenAICompatibleAdapterOptions {
|
|
456
455
|
/**
|
|
@@ -490,8 +489,6 @@ interface OpenAICompatibleAdapterOptions {
|
|
|
490
489
|
* types drift from `LLMClient`; the wire format is the contract.
|
|
491
490
|
*/
|
|
492
491
|
export declare function fromOpenAICompatible(client: unknown, options?: OpenAICompatibleAdapterOptions): LLMClient;
|
|
493
|
-
//#endregion
|
|
494
|
-
//#region src/adapters/openai/aliases.d.ts
|
|
495
492
|
/**
|
|
496
493
|
* The OpenAI SDK. Wrap it rather than passing it directly, since newer SDK
|
|
497
494
|
* content-part types no longer typecheck against `LLMClient`.
|
|
@@ -577,6 +574,5 @@ export declare const fromInfermatic: typeof fromOpenAICompatible;
|
|
|
577
574
|
export declare const fromAtlasCloud: typeof fromOpenAICompatible;
|
|
578
575
|
/** 01.AI's (Yi models) API is OpenAI-compatible */
|
|
579
576
|
export declare const from01AI: typeof fromOpenAICompatible;
|
|
580
|
-
//#endregion
|
|
581
577
|
export type { AnthropicAdapterOptions, AnthropicClient, FetchAdapterConfig, GeminiAdapterOptions, GeminiClient, OpenAICompatibleAdapterOptions, RequestLike, ResponseLike, StreamRequestLike };
|
|
582
578
|
//# sourceMappingURL=index.d.cts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.cts","names":[],"sources":["../../src/adapters/internal/nativeStructuredOutput.ts","../../src/adapters/internal/reasoningBudget.utils.ts","../../src/adapters/internal/imageFormat.ts","../../src/adapters/claude/types.ts","../../src/adapters/claude/anthropic.ts","../../src/adapters/gemini/types.ts","../../src/adapters/gemini/gemini.ts","../../src/adapters/fetch/types.ts","../../src/adapters/fetch/fetch.ts","../../src/adapters/internal/sse.ts","../../src/adapters/openai/openaiCompatible.ts","../../src/adapters/openai/aliases.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.cts","names":[],"sources":["../../src/adapters/internal/nativeStructuredOutput.ts","../../src/adapters/internal/reasoningBudget.utils.ts","../../src/adapters/internal/imageFormat.ts","../../src/adapters/claude/types.ts","../../src/adapters/claude/anthropic.ts","../../src/adapters/gemini/types.ts","../../src/adapters/gemini/gemini.ts","../../src/adapters/fetch/types.ts","../../src/adapters/fetch/fetch.ts","../../src/adapters/internal/sse.ts","../../src/adapters/openai/openaiCompatible.ts","../../src/adapters/openai/aliases.ts"],"mappings":"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"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
//#region src/adapters/internal/nativeStructuredOutput.d.ts
|
|
1
|
+
import { Et as ProviderRateLimitHint, n as LLMClient, v as WireStreamChunk } from "../client-D4eRQMgc.mjs";
|
|
3
2
|
/**
|
|
4
3
|
* A list of model ids, or a predicate, naming models with a capability.
|
|
5
4
|
* Native structured output has no built in list: which models support it
|
|
@@ -7,8 +6,6 @@ import { bt as ProviderRateLimitHint, n as LLMClient, v as WireStreamChunk } fro
|
|
|
7
6
|
* trade a clear local error for a confusing provider one.
|
|
8
7
|
*/
|
|
9
8
|
type ModelCapabilityOverride = string[] | ((model: string) => boolean);
|
|
10
|
-
//#endregion
|
|
11
|
-
//#region src/adapters/internal/reasoningBudget.utils.d.ts
|
|
12
9
|
/**
|
|
13
10
|
* Converts between `reasoningEffort` tiers and `budgetTokens`, for a
|
|
14
11
|
* provider that only understands the other one. The numbers are a guess,
|
|
@@ -16,16 +13,12 @@ type ModelCapabilityOverride = string[] | ((model: string) => boolean);
|
|
|
16
13
|
* overrides them.
|
|
17
14
|
*/
|
|
18
15
|
type EffortTokenTable = Record<'minimal' | 'low' | 'medium' | 'high', number>;
|
|
19
|
-
//#endregion
|
|
20
|
-
//#region src/adapters/internal/imageFormat.d.ts
|
|
21
16
|
/**
|
|
22
17
|
* `ImageBlock.mimeType` values every adapter accepts: the types all
|
|
23
18
|
* supported providers share, so content valid for one is valid for all.
|
|
24
19
|
*/
|
|
25
|
-
declare const SUPPORTED_IMAGE_MIME_TYPES: readonly [
|
|
20
|
+
declare const SUPPORTED_IMAGE_MIME_TYPES: readonly ['image/png', 'image/jpeg', 'image/gif', 'image/webp'];
|
|
26
21
|
type SupportedImageMimeType = (typeof SUPPORTED_IMAGE_MIME_TYPES)[number];
|
|
27
|
-
//#endregion
|
|
28
|
-
//#region src/adapters/claude/types.d.ts
|
|
29
22
|
/** Anthropic's native per-block content shape for a message. */
|
|
30
23
|
type AnthropicContentBlock = {
|
|
31
24
|
type: 'text';
|
|
@@ -137,8 +130,6 @@ interface AnthropicClient {
|
|
|
137
130
|
}>;
|
|
138
131
|
};
|
|
139
132
|
}
|
|
140
|
-
//#endregion
|
|
141
|
-
//#region src/adapters/claude/anthropic.d.ts
|
|
142
133
|
/** Optional configuration for `fromAnthropic`. */
|
|
143
134
|
interface AnthropicAdapterOptions {
|
|
144
135
|
/**
|
|
@@ -162,6 +153,13 @@ interface AnthropicAdapterOptions {
|
|
|
162
153
|
* native structured output.
|
|
163
154
|
*/
|
|
164
155
|
forcedToolChoiceUnsupportedModels?: ModelCapabilityOverride;
|
|
156
|
+
/**
|
|
157
|
+
* Sends `temperature`. Default `false`: API version `2026-10-21`, which every
|
|
158
|
+
* `@anthropic-ai/sdk` 1.x client sends, rejects it on all models. Set `true`
|
|
159
|
+
* only for a client pinned to an older API version. Claude 4.7 and later still
|
|
160
|
+
* never get it, and neither does a request with thinking on.
|
|
161
|
+
*/
|
|
162
|
+
sendTemperature?: boolean;
|
|
165
163
|
/**
|
|
166
164
|
* Whether `messages.create` supports `.withResponse()`, which AIMD's
|
|
167
165
|
* proactive path needs. Default `false`, since a fake or thin wrapper
|
|
@@ -176,8 +174,6 @@ interface AnthropicAdapterOptions {
|
|
|
176
174
|
* Anthropic can't guarantee it.
|
|
177
175
|
*/
|
|
178
176
|
export declare function fromAnthropic(anthropicClient: AnthropicClient, options?: AnthropicAdapterOptions): LLMClient;
|
|
179
|
-
//#endregion
|
|
180
|
-
//#region src/adapters/gemini/types.d.ts
|
|
181
177
|
/** Gemini's per-part content shape; object-typed args match the real SDK. */
|
|
182
178
|
type GeminiPart = {
|
|
183
179
|
text: string;
|
|
@@ -263,6 +259,9 @@ interface GeminiModels {
|
|
|
263
259
|
};
|
|
264
260
|
finishReason?: string;
|
|
265
261
|
}>;
|
|
262
|
+
promptFeedback?: {
|
|
263
|
+
blockReason?: string;
|
|
264
|
+
};
|
|
266
265
|
usageMetadata?: {
|
|
267
266
|
promptTokenCount?: number;
|
|
268
267
|
candidatesTokenCount?: number;
|
|
@@ -284,7 +283,11 @@ interface GeminiModels {
|
|
|
284
283
|
};
|
|
285
284
|
}>;
|
|
286
285
|
};
|
|
286
|
+
finishReason?: string;
|
|
287
287
|
}>;
|
|
288
|
+
promptFeedback?: {
|
|
289
|
+
blockReason?: string;
|
|
290
|
+
};
|
|
288
291
|
usageMetadata?: {
|
|
289
292
|
promptTokenCount?: number;
|
|
290
293
|
candidatesTokenCount?: number;
|
|
@@ -308,8 +311,6 @@ interface GeminiClient {
|
|
|
308
311
|
/** Set by the SDK; names the provider as Vertex AI or the Gemini API. */
|
|
309
312
|
vertexai?: boolean;
|
|
310
313
|
}
|
|
311
|
-
//#endregion
|
|
312
|
-
//#region src/adapters/gemini/gemini.d.ts
|
|
313
314
|
/** Optional configuration for `fromGemini`. */
|
|
314
315
|
interface GeminiAdapterOptions {
|
|
315
316
|
/** Overrides the token count each `reasoningEffort` tier maps onto. Omitted tiers keep the default. */
|
|
@@ -327,8 +328,6 @@ interface GeminiAdapterOptions {
|
|
|
327
328
|
* natively.
|
|
328
329
|
*/
|
|
329
330
|
export declare function fromGemini(client: GeminiClient, options?: GeminiAdapterOptions): LLMClient;
|
|
330
|
-
//#endregion
|
|
331
|
-
//#region src/adapters/fetch/types.d.ts
|
|
332
331
|
/** The chat-completion-shaped request VernLLM builds internally */
|
|
333
332
|
type ChatRequest = Parameters<LLMClient['chat']['completions']['create']>[0];
|
|
334
333
|
/**
|
|
@@ -385,6 +384,10 @@ interface FetchAdapterConfig {
|
|
|
385
384
|
*/
|
|
386
385
|
mapResponse: (json: unknown) => {
|
|
387
386
|
content?: string;
|
|
387
|
+
/** The provider declined the call. Fails as `model_refused` when there is no content or tool call. */
|
|
388
|
+
refusal?: string;
|
|
389
|
+
/** Why generation stopped. Reported as `CallMeta.finishReason`; unknown values become `'other'`. */
|
|
390
|
+
finishReason?: string;
|
|
388
391
|
usage?: {
|
|
389
392
|
/** Every input token, cache reads and writes included. */
|
|
390
393
|
promptTokens?: number;
|
|
@@ -396,6 +399,8 @@ interface FetchAdapterConfig {
|
|
|
396
399
|
cacheWriteTokens?: number;
|
|
397
400
|
/** `cacheWriteTokens` by TTL label, e.g. `{ '5m': 1200 }`. */
|
|
398
401
|
cacheWriteTokensByTtl?: Record<string, number>;
|
|
402
|
+
/** What the provider billed for the call, in USD, when its response says. */
|
|
403
|
+
costUsd?: number;
|
|
399
404
|
};
|
|
400
405
|
toolCalls?: Array<{
|
|
401
406
|
id: string;
|
|
@@ -424,8 +429,6 @@ interface FetchAdapterConfig {
|
|
|
424
429
|
*/
|
|
425
430
|
parseRateLimitHint?: (headers: ResponseLike['headers']) => ProviderRateLimitHint;
|
|
426
431
|
}
|
|
427
|
-
//#endregion
|
|
428
|
-
//#region src/adapters/fetch/fetch.d.ts
|
|
429
432
|
/**
|
|
430
433
|
* A raw HTTP adapter for providers with no SDK: supply the URL, headers,
|
|
431
434
|
* and the request and response mapping. A non-2xx response throws an error
|
|
@@ -433,8 +436,6 @@ interface FetchAdapterConfig {
|
|
|
433
436
|
* Retry-After all apply.
|
|
434
437
|
*/
|
|
435
438
|
export declare function fromFetch(config: FetchAdapterConfig): LLMClient;
|
|
436
|
-
//#endregion
|
|
437
|
-
//#region src/adapters/internal/sse.d.ts
|
|
438
439
|
/**
|
|
439
440
|
* Parses a Server-Sent-Events stream of bytes or text into each frame's
|
|
440
441
|
* JSON `data:` payload, in order, over any transport. Multi-line data is
|
|
@@ -449,8 +450,6 @@ export declare function parseSseStream(source: AsyncIterable<Uint8Array | string
|
|
|
449
450
|
* can tell "still alive" apart from an empty frame.
|
|
450
451
|
*/
|
|
451
452
|
export declare const SSE_PING: unique symbol;
|
|
452
|
-
//#endregion
|
|
453
|
-
//#region src/adapters/openai/openaiCompatible.d.ts
|
|
454
453
|
/** Optional configuration for `fromOpenAICompatible`. */
|
|
455
454
|
interface OpenAICompatibleAdapterOptions {
|
|
456
455
|
/**
|
|
@@ -490,8 +489,6 @@ interface OpenAICompatibleAdapterOptions {
|
|
|
490
489
|
* types drift from `LLMClient`; the wire format is the contract.
|
|
491
490
|
*/
|
|
492
491
|
export declare function fromOpenAICompatible(client: unknown, options?: OpenAICompatibleAdapterOptions): LLMClient;
|
|
493
|
-
//#endregion
|
|
494
|
-
//#region src/adapters/openai/aliases.d.ts
|
|
495
492
|
/**
|
|
496
493
|
* The OpenAI SDK. Wrap it rather than passing it directly, since newer SDK
|
|
497
494
|
* content-part types no longer typecheck against `LLMClient`.
|
|
@@ -577,6 +574,5 @@ export declare const fromInfermatic: typeof fromOpenAICompatible;
|
|
|
577
574
|
export declare const fromAtlasCloud: typeof fromOpenAICompatible;
|
|
578
575
|
/** 01.AI's (Yi models) API is OpenAI-compatible */
|
|
579
576
|
export declare const from01AI: typeof fromOpenAICompatible;
|
|
580
|
-
//#endregion
|
|
581
577
|
export type { AnthropicAdapterOptions, AnthropicClient, FetchAdapterConfig, GeminiAdapterOptions, GeminiClient, OpenAICompatibleAdapterOptions, RequestLike, ResponseLike, StreamRequestLike };
|
|
582
578
|
//# sourceMappingURL=index.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../../src/adapters/internal/nativeStructuredOutput.ts","../../src/adapters/internal/reasoningBudget.utils.ts","../../src/adapters/internal/imageFormat.ts","../../src/adapters/claude/types.ts","../../src/adapters/claude/anthropic.ts","../../src/adapters/gemini/types.ts","../../src/adapters/gemini/gemini.ts","../../src/adapters/fetch/types.ts","../../src/adapters/fetch/fetch.ts","../../src/adapters/internal/sse.ts","../../src/adapters/openai/openaiCompatible.ts","../../src/adapters/openai/aliases.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../../src/adapters/internal/nativeStructuredOutput.ts","../../src/adapters/internal/reasoningBudget.utils.ts","../../src/adapters/internal/imageFormat.ts","../../src/adapters/claude/types.ts","../../src/adapters/claude/anthropic.ts","../../src/adapters/gemini/types.ts","../../src/adapters/gemini/gemini.ts","../../src/adapters/fetch/types.ts","../../src/adapters/fetch/fetch.ts","../../src/adapters/internal/sse.ts","../../src/adapters/openai/openaiCompatible.ts","../../src/adapters/openai/aliases.ts"],"mappings":"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"}
|
package/dist/adapters/index.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{a as e,i as t,r as n,s as r,t as i}from"../responseBody.utils-B2tQiGUi.mjs";async function a(e){let{data:t,response:n}=await e.withResponse();return{data:t,headers:n.headers}}function o(e){return e.remainingRequests!==void 0||e.limitRequests!==void 0?{type:`rate_limit_hint`,hint:e}:void 0}async function s(e,t){return t?a(e()):{data:await e()}}const c={minimal:1024,low:4096,medium:16e3,high:32e3};function l(e){if(!e)return c;let t={...c,...e};if(!(t.minimal<t.low&&t.low<t.medium&&t.medium<t.high))throw new r(`reasoningEffortTokens must keep tiers in strictly ascending order (minimal < low < medium < high), got ${JSON.stringify(t)}. An out-of-order override doesn't just misrank tiers, it can make some of them unreachable.`,`invalid_params`);return t}function u(e,t=c){return t[e]}function d(e,t=c){return e<=t.minimal?`minimal`:e<=t.low?`low`:e<=t.medium?`medium`:`high`}function f(e){let t=/opus-(\d+)(?:-(\d+))?/.exec(e);if(!t)return null;let n=t[2],r=n===void 0||n.length>=8?0:Number(n);return[Number(t[1]),r]}function p(e){let t=f(e);if(t){let[e,n]=t;return e>4||e===4&&n>=7}return[`sonnet-5`,`fable-5`,`mythos`].some(t=>e.includes(t))}function m(e,t){return p(e)?!0:t?Array.isArray(t)?t.includes(e):t(e):!1}function h(e,t){return!m(e,t)}function g(e,t){if(e<1024)throw new r(`budgetTokens (${e}) is below Anthropic's minimum of 1024. Raise budgetTokens, or use a reasoningEffort tier of 'low' or above with the default conversion table.`,`invalid_params`);if(e>=t)throw new r(`budgetTokens (${e}) must be less than maxTokens (${t}); the thinking budget and the reply share the same max_tokens ceiling on Anthropic. Raise maxTokens, or lower budgetTokens/reasoningEffort.`,`invalid_params`)}function ee(e){if(e)throw new r(`budgetTokens/reasoningEffort was set alongside ${e}. Anthropic rejects thinking combined with a tool_choice that forces tool use, the model has to be able to reply with plain text for thinking to run. Use toolChoice: 'auto' (or omit toolChoice) for this call, or drop budgetTokens/reasoningEffort for it.`,`invalid_params`)}function te(e){return e===`minimal`?`low`:e}function _(e,t){return y(t,e.toUpperCase())}function v(e){let t=/gemini-\d+\.(\d+)/.exec(e);return t?Number(t[1]):0}function y(e,t){if(!e.includes(`pro`))return t;let n=b(e);return n===null||n<3?t:v(e)===0?t===`HIGH`?`HIGH`:`LOW`:t===`MINIMAL`?`LOW`:t}function b(e){let t=/gemini-(\d+)/.exec(e);return t?Number(t[1]):null}function ne(e){let t=b(e);return t!==null&&t>=3}function re(e,t){return ne(e)?!0:t?Array.isArray(t)?t.includes(e):t(e):!1}const x=new Set;function S(e,t,n){return r=>{if(x.has(e))return;let i=t();i!==void 0&&i>0&&(x.add(e),r.warn(`[VernLLM] ${e}: the SDK client retries up to ${i} times on its own, hidden from VernLLM's retries, circuit breaker, rate limiter, and events. ${n} so VernLLM is the only retry owner.`))}}function C(e){let t=e?.maxRetries;return typeof t==`number`?t:void 0}function w(e,t){return new r(e,`invalid_params`,{code:`unsupported_capability`,issues:{capability:t}})}function T(e,t,n){let r=i(`${e} (${t.status})`,n);return r.status=t.status,r.headers=t.headers,r}function E(e){let t=/claude-([a-z]+)-(\d+)(?:[-.](\d+))?/i.exec(e),n=t??/claude-(\d+)(?:[-.](\d+))?/i.exec(e);if(!n)return null;let[,r,i,a]=t?n:[n[0],void 0,n[1],n[2]],o=a===void 0||a.length>=8?0:Number(a);return{family:r?.toLowerCase(),major:Number(i),minor:o}}function D(e,t,n,r){return e>n||e===n&&t>=r}function ie(e){let t=E(e);if(!t)return!1;let{family:n,major:r,minor:i}=t;return r>=6?!0:n===`fable`?D(r,i,5,1):n===`opus`&&D(r,i,5,5)}function O(e,t){return t?Array.isArray(t)?t.includes(e):t(e):ie(e)}function ae(e,t,n,r){if(n&&n!==`auto`&&n!==`none`&&O(t,r))throw w(`${e} model "${t}" rejects a tool_choice that forces tool use, so ${n===`required`?`toolChoice: 'required'`:`toolChoice: { name: '${n.function.name}' }`} can't be sent. Use toolChoice: 'auto' and ask for the tool in the prompt instead. If this model does accept it, list the models that reject it in forcedToolChoiceUnsupportedModels.`,`forced_tool_choice`)}function oe(e,t){return t?Array.isArray(t)?t.includes(e):t(e):!1}function se(e,t,n,i){let a=t.response_format?.type===`json_schema`?t.response_format.json_schema:void 0,o=a?.name.trim();if(a&&!o)throw new r(`json_schema.name must not be empty.`,`validation`);let s=O(t.model,n.forcedToolChoiceUnsupportedModels);t.tools?.length&&ae(e,t.model,t.tool_choice,n.forcedToolChoiceUnsupportedModels);let c=!!a&&(s||oe(t.model,n.nativeStructuredOutputModels));if(a&&t.tools?.length&&!c)throw w(i.toolsWithJsonSchema(t.model),`tools_with_json_schema`);if(t.response_format?.type===`json_object`)throw new r(i.jsonObject,`validation`);return!a||!o?{mode:`none`}:{mode:c?`native`:`forcedTool`,jsonSchema:a,schemaName:o}}function ce(e,t,n){if(e.budget_tokens!==void 0||e.reasoning_effort!==void 0){if(ee(t),h(e.model,n.adaptiveOnlyModels)){let t=e.budget_tokens??u(e.reasoning_effort,n.effortTokenTable);return g(t,e.max_tokens),{thinking:{type:`enabled`,budget_tokens:t}}}return{thinking:{type:`adaptive`},effort:te(e.reasoning_effort??d(e.budget_tokens,n.effortTokenTable))}}}const k=[`image/png`,`image/jpeg`,`image/gif`,`image/webp`];function A(e){if(k.includes(e))return e;throw new r(`Unsupported image mimeType "${e}": expected one of ${k.join(`, `)}`,`invalid_params`)}function le(e){return e.map(e=>e.type===`image`?{type:`image`,source:{type:`base64`,media_type:A(e.mimeType),data:e.data}}:{type:`text`,text:e.text})}function j(e,t){if(e.type!==`object`)throw new r(`Tool "${t}"'s schema must have "type": "object" (Anthropic requires object-shaped tool parameters).`,`validation`);return e}function ue(e){let t=e||`auto`;switch(t){case`auto`:return{type:`auto`};case`none`:return{type:`none`};case`required`:return{type:`any`};default:return{type:`tool`,name:t.function.name}}}function de(e,t){return{tools:e.map(e=>({name:e.function.name,description:e.function.description,input_schema:j(e.function.parameters,e.function.name)})),toolChoice:ue(t)}}const fe={toolsWithJsonSchema:e=>`Anthropic model "${e}" is not covered by nativeStructuredOutputModels, so \`jsonSchema\` is emulated as a forced single tool call there, which collides with the \`tools\` you also provided. Either drop \`tools\` or \`jsonSchema\` for this call, or pass this model in fromAnthropic's \`nativeStructuredOutputModels\` option once you've confirmed it supports Anthropic's \`output_config.format\`.`,jsonObject:'response_format: "json_object" is not supported on Anthropic. Unlike OpenAI, Anthropic has no API-level field that mechanically guarantees valid JSON output for this mode, so it used to be emulated by injecting a "respond with JSON only" instruction into the system prompt, a guarantee this adapter can no longer make. Use `jsonSchema` instead, which maps to a real API-level constraint (Anthropic\'s native output_config.format on covered models, or a forced single tool call otherwise).'};function pe(e){if(e?.type===`tool`)return`toolChoice forcing the "${e.name}" tool`;if(e?.type===`any`)return`toolChoice: 'required' (Anthropic's "any" tool_choice)`}function M(e,t,n,r,i){let a=e.messages.find(e=>e.role===`system`),o=e.messages.filter(e=>e.role===`user`||e.role===`assistant`||e.role===`tool`),s=se(`Anthropic`,e,{nativeStructuredOutputModels:t,forcedToolChoiceUnsupportedModels:i},fe),c,l,u,d;if(s.mode===`forcedTool`){let{schema:e,description:t,strict:n}=s.jsonSchema;c=s.schemaName,u=[{name:c,description:t,input_schema:j(e,c),strict:n}],d={type:`tool`,name:c}}else s.mode===`native`&&(l={type:`json_schema`,schema:s.jsonSchema.schema}),e.tools?.length&&({tools:u,toolChoice:d}=de(e.tools,e.tool_choice));let f=ce(e,pe(d),{adaptiveOnlyModels:r,effortTokenTable:n}),p=f?.effort,m=a?.content,h=f?void 0:e.temperature;return{body:{model:e.model,max_tokens:e.max_tokens,...h===void 0?{}:{temperature:h},system:m||void 0,messages:N(o.map(e=>P(e))),...u?{tools:u,tool_choice:d}:{},...l||p?{output_config:{...l?{format:l}:{},...p?{effort:p}:{}}}:{},...f?{thinking:f.thinking}:{}},toolName:c}}function N(e){let t=e=>e.role===`user`&&Array.isArray(e.content)&&e.content.length>0&&e.content.every(e=>e.type===`tool_result`),n=[];for(let r of e){let e=n.at(-1);t(r)&&e&&t(e)?e.content.push(...r.content):n.push(r)}return n}function P(e){if(e.role===`tool`)return{role:`user`,content:[{type:`tool_result`,tool_use_id:e.tool_call_id,content:e.content,...e.is_error?{is_error:!0}:{}}]};if(e.role===`assistant`&&(e.tool_calls?.length||e.thinking?.length)){let t=(e.thinking??[]).map(e=>e.type===`thinking`?{type:`thinking`,thinking:e.thinking,signature:e.signature}:{type:`redacted_thinking`,data:e.data});e.content&&t.push({type:`text`,text:e.content});for(let n of e.tool_calls??[]){let e;try{e=n.function.arguments.trim()?JSON.parse(n.function.arguments):{}}catch(e){throw new r(`Assistant tool call "${n.function.name}" (${n.id}) has arguments that are not valid JSON.`,`validation`,{cause:e})}if(e===null||Array.isArray(e)||typeof e!=`object`)throw new r(`Assistant tool call "${n.function.name}" (${n.id}) arguments must be a JSON object.`,`validation`);t.push({type:`tool_use`,id:n.id,name:n.function.name,input:e})}return{role:`assistant`,content:t}}return{role:e.role,content:Array.isArray(e.content)?le(e.content):e.content??``}}function F(e,t){return e===t?{finish_reason:`length`}:{}}function I(e,t){throw new r(`${e} did not return the required structured output tool "${t}".`,`validation`)}function L(e,t,n){if(!n||typeof n!=`object`||Array.isArray(n))throw new r(`${e} returned invalid structured output for tool "${t}". Expected an object.`,`validation`)}const R=e=>typeof e==`number`&&Number.isFinite(e)?e:0;function z(e){let t=[e?.input_tokens,e?.cache_creation_input_tokens,e?.cache_read_input_tokens];if(!t.every(e=>e==null))return t.reduce((e,t)=>e+R(t),0)}function B(e){if(!e)return;let t=e.cache_creation?{"5m":R(e.cache_creation.ephemeral_5m_input_tokens),"1h":R(e.cache_creation.ephemeral_1h_input_tokens)}:void 0;return{cached_tokens:e.cache_read_input_tokens??void 0,cache_write_tokens:e.cache_creation_input_tokens??void 0,...t?{cache_write_tokens_by_ttl:t}:{}}}function me(e){return e.flatMap(e=>e.type===`thinking`?[{type:`thinking`,thinking:e.thinking??``,signature:e.signature??``}]:e.type===`redacted_thinking`?[{type:`redacted_thinking`,data:e.data??``}]:[])}function he(e,t){let n,r,i=me(e.content);if(t){let r=e.content.find(e=>e.type===`tool_use`&&e.name===t);r||I(`Anthropic`,t),L(`Anthropic`,t,r.input),n=JSON.stringify(r.input)}else{n=e.content.filter(e=>e.type===`text`).map(e=>e.text??``).join(``);let t=e.content.filter(e=>e.type===`tool_use`);t.length&&(r=t.map(e=>({id:e.id,type:`function`,function:{name:e.name,arguments:JSON.stringify(e.input??{})}})))}return{choices:[{message:{content:n,...r?{tool_calls:r}:{},...i.length?{thinking:i}:{}},...F(e.stop_reason,`max_tokens`)}],usage:{prompt_tokens:z(e.usage),completion_tokens:e.usage?.output_tokens,total_tokens:(z(e.usage)??0)+(e.usage?.output_tokens??0),prompt_tokens_details:B(e.usage),...e.usage?.output_tokens_details?.thinking_tokens===void 0?{}:{completion_tokens_details:{reasoning_tokens:e.usage.output_tokens_details.thinking_tokens}}}}}function*ge(e,t){let n=t.content_block;switch(n.type){case`tool_use`:{let r=n.name===e.toolName?`json-tool`:`tool_use`;e.blockKinds.set(t.index,r),r===`json-tool`?e.sawJsonTool=!0:e.toolName||(yield{type:`tool_call_delta`,index:t.index,id:n.id,name:n.name});return}case`thinking`:e.thinkingBlocks.set(t.index,{type:`thinking`,thinking:n.thinking??``,signature:n.signature??``});return;case`redacted_thinking`:e.thinkingBlocks.set(t.index,{type:`redacted_thinking`,data:n.data??``});return;default:e.blockKinds.set(t.index,`text`)}}function*_e(e,t){let{delta:n}=t;switch(n.type){case`text_delta`:e.toolName||(yield{type:`text-delta`,delta:n.text});return;case`thinking_delta`:{let r=e.thinkingBlocks.get(t.index);r?.type===`thinking`&&(r.thinking+=n.thinking),yield{type:`ping`};return}case`signature_delta`:{let r=e.thinkingBlocks.get(t.index);r?.type===`thinking`&&(r.signature+=n.signature),yield{type:`ping`};return}case`input_json_delta`:e.blockKinds.get(t.index)===`json-tool`?yield{type:`text-delta`,delta:n.partial_json}:e.toolName||(yield{type:`tool_call_delta`,index:t.index,argumentsDelta:n.partial_json})}}function*ve(e,t){let n=e.thinkingBlocks.get(t.index);n&&(e.thinkingBlocks.delete(t.index),yield{type:`thinking_block`,block:n})}const ye=[`input_tokens`,`cache_creation_input_tokens`,`cache_read_input_tokens`];function be(e,t){let n={...e};for(let e of ye){let r=t?.[e];r!=null&&(n[e]=r)}return n}function xe(e,t){let n=be(e.startUsage,t.usage),r=z(n)??0,i=t.usage?.output_tokens??0,a=t.usage?.output_tokens_details?.thinking_tokens;return{type:`usage`,usage:{prompt_tokens:r,completion_tokens:i,total_tokens:r+i,prompt_tokens_details:B(n),...a===void 0?{}:{completion_tokens_details:{reasoning_tokens:a}}}}}async function*Se(e,t){let n={toolName:t,blockKinds:new Map,thinkingBlocks:new Map,startUsage:void 0,sawJsonTool:!1};for await(let t of e)switch(t.type){case`message_start`:n.startUsage=t.message.usage;break;case`content_block_start`:yield*ge(n,t);break;case`content_block_delta`:yield*_e(n,t);break;case`content_block_stop`:yield*ve(n,t);break;case`message_delta`:yield xe(n,t);break;case`ping`:yield{type:`ping`}}t&&!n.sawJsonTool&&I(`Anthropic`,t)}function Ce(e,r){let i=l(r?.reasoningEffortTokens),a=r?.supportsWithResponse??!1,c=S(`anthropic`,()=>C(e),`Pass maxRetries: 0 to the client`),u=e=>M(e,r?.nativeStructuredOutputModels,i,r?.adaptiveOnlyModels,r?.forcedToolChoiceUnsupportedModels),d=(t,n)=>s(()=>e.messages.create(t,n),a);return{supportsJsonObjectMode:!1,cacheReadsCountTowardRateLimit:!1,adapter:{name:`anthropic`,provider:`anthropic`},setLogger:c,chat:{completions:{async create(e,r){let{body:i,toolName:a}=u(e),{data:o,headers:s}=await d(i,r),c=he(o,a);return s&&n(c,t(s)),c},async*createStream(e,n){let{body:r,toolName:i}=u(e),{data:a,headers:s}=await d({...r,stream:!0},n);if(s){let e=o(t(s));e&&(yield e)}yield*Se(a,i)}}}}}function we(e){return e.map(e=>e.type===`image`?{inlineData:{mimeType:A(e.mimeType),data:e.data}}:{text:e.text})}function Te(e){let t=e||`auto`;switch(t){case`auto`:return{functionCallingConfig:{mode:`AUTO`}};case`none`:return{functionCallingConfig:{mode:`NONE`}};case`required`:return{functionCallingConfig:{mode:`ANY`}};default:return{functionCallingConfig:{mode:`ANY`,allowedFunctionNames:[t.function.name]}}}}function Ee(e){let t=new Map;for(let n of e)if(n.role===`assistant`)for(let e of n.tool_calls??[])t.set(e.id,e.function.name);return t}function De(e,t){if(e.role===`tool`)return{role:`user`,parts:[{functionResponse:{id:e.tool_call_id,name:t.get(e.tool_call_id)??e.tool_call_id,response:ke(e.content)}}]};if(e.role===`assistant`&&e.tool_calls?.length){let t=[];return typeof e.content==`string`&&e.content&&t.push({text:e.content}),t.push(...e.tool_calls.map(e=>({functionCall:{id:e.id,name:e.function.name,args:Oe(e.function.arguments,e.function.name)}}))),{role:`model`,parts:t}}return{role:e.role===`assistant`?`model`:`user`,parts:Array.isArray(e.content)?we(e.content):[{text:e.content??``}]}}function Oe(e,t){let n;try{n=e.trim()?JSON.parse(e):{}}catch(e){throw new r(`Tool call "${t}" arguments are not valid JSON.`,`parse`,{cause:e,code:`tool_arguments_parse_failed`})}if(!n||Array.isArray(n)||typeof n!=`object`)throw new r(`Tool call "${t}" arguments must be a JSON object.`,`validation`);return n}function ke(e){let t;try{t=e.trim()?JSON.parse(e):``}catch{t=e}return t&&!Array.isArray(t)&&typeof t==`object`?t:{output:t}}function Ae(e){let t=e=>e.role===`user`&&e.parts.length>0&&e.parts.every(e=>`functionResponse`in e),n=[];for(let r of e){let e=n.at(-1);t(r)&&e&&t(e)?e.parts.push(...r.parts):n.push(r)}return n}function je(e,t,n){if(re(e.model,n)){let n=e.reasoning_effort??(e.budget_tokens===void 0?void 0:d(e.budget_tokens,t));return n===void 0?void 0:{thinkingLevel:_(n,e.model)}}let r=e.budget_tokens??(e.reasoning_effort?u(e.reasoning_effort,t):void 0);return r===void 0?void 0:{thinkingBudget:r}}function V(e,t,n){let r=e.messages.find(e=>e.role===`system`),i=e.messages.filter(e=>e.role===`user`||e.role===`assistant`||e.role===`tool`),a=!!e.response_format,o={...e.temperature===void 0?{}:{temperature:e.temperature},maxOutputTokens:e.max_tokens,...r?{systemInstruction:{parts:[{text:r.content}]}}:{}};if(a&&(o.responseMimeType=`application/json`),e.response_format?.type===`json_schema`){let{schema:t,description:n}=e.response_format.json_schema;o.responseSchema={...t,...n?{description:n}:{}}}e.tools?.length&&(o.tools=[{functionDeclarations:e.tools.map(e=>({name:e.function.name,description:e.function.description,parameters:e.function.parameters}))}],o.toolConfig=Te(e.tool_choice));let s=je(e,t,n);s&&(o.thinkingConfig=s);let c=Ee(i);return{model:e.model,contents:Ae(i.map(e=>De(e,c))),config:o}}function H(e,t){return`${e}#${t}`}function U(e){return{prompt_tokens:e?.promptTokenCount,completion_tokens:e?.candidatesTokenCount,total_tokens:e?.totalTokenCount,prompt_tokens_details:{cached_tokens:e?.cachedContentTokenCount},...e?.thoughtsTokenCount===void 0?{}:{completion_tokens_details:{reasoning_tokens:e.thoughtsTokenCount}}}}function Me(e){let t=e.candidates?.[0]?.content?.parts??[],n=t.map(e=>e.text??``).join(``),r=t.filter(e=>e.functionCall),i;if(r.length){let e=new Map;i=r.map(t=>{let n=t.functionCall.name,r=t.functionCall.id,i=e.get(n)??0;return e.set(n,i+1),{id:r??H(n,i),type:`function`,function:{name:n,arguments:JSON.stringify(t.functionCall.args??{})}}})}return{choices:[{message:{content:n,...i?{tool_calls:i}:{}},...F(e.candidates?.[0]?.finishReason,`MAX_TOKENS`)}],usage:U(e.usageMetadata)}}async function*Ne(e){let t=0,n=new Map,r;for await(let i of e){let e=i.candidates?.[0]?.content?.parts??[];for(let r of e)if(r.text&&(yield{type:`text-delta`,delta:r.text}),r.functionCall){let e=r.functionCall.name,i=r.functionCall.id,a=e?n.get(e)??0:0;e&&n.set(e,a+1),yield{type:`tool_call_delta`,index:t,id:i??(e?H(e,a):void 0),name:r.functionCall.name,argumentsDelta:JSON.stringify(r.functionCall.args??{}),complete:!0},t++}i.usageMetadata&&(r=i.usageMetadata)}r&&(yield{type:`usage`,usage:U(r)})}function Pe(e){return e.vertexai===!0?{provider:`gcp.vertex_ai`}:e.vertexai===!1?{provider:`gcp.gemini`}:{}}function Fe(e){let t=e.httpOptions?.retryOptions;if(t&&typeof t==`object`)return Math.max(1,Number(t.attempts??5))-1}function Ie(e,t){let n=l(t?.reasoningEffortTokens),r=t?.thinkingLevelModels,i=e.models;if(!i&&typeof e.generateContent==`function`)throw w(`fromGemini takes the top level client: pass ai (new GoogleGenAI(...)), not ai.models.`,`top_level_client`);if(typeof i?.generateContent!=`function`)throw w(`fromGemini requires a client with models.generateContent: pass ai (new GoogleGenAI(...)).`,`generateContent`);let a=S(`gemini`,()=>Fe(e),`Remove httpOptions.retryOptions from the client, or set its attempts to 1,`),o=i.generateContent.bind(i),s=typeof i.generateContentStream==`function`?i.generateContentStream.bind(i):void 0;return{adapter:{name:`gemini`,...Pe(e)},setLogger:a,chat:{completions:{async create(e,t){let i=V(e,n,r);return i.config={...i.config,abortSignal:t.signal},Me(await o(i))},async*createStream(e,t){if(!s)throw w(`stream: true requires a Gemini client with generateContentStream`,`generateContentStream`);let i=V(e,n,r);i.config={...i.config,abortSignal:t.signal},yield*Ne(await s(i))}}}}}async function*W(e){let t=new TextDecoder(`utf-8`,{fatal:!0}),n=Le();for await(let i of e){let e;try{e=typeof i==`string`?i:t.decode(i,{stream:!0})}catch(e){throw new r(`Invalid UTF-8 in SSE stream`,`parse`,{cause:e})}for(let t of n.push(e)){let e=J(t);if(e===G)return;e!==K&&(yield e)}}let i;try{i=t.decode()}catch(e){throw new r(`Invalid UTF-8 in SSE stream`,`parse`,{cause:e})}let{frames:a,trailing:o}=n.end(i);for(let e of a){let t=J(e);if(t===G)return;t!==K&&(yield t)}let s=o.trim();if(s){let e=J(s);e!==G&&e!==K&&(yield e)}}function Le(){let e=[],t=!1,n=!1;function r(r){let i=n?`\r${r}`:r;n=i.endsWith(`\r`),n&&(i=i.slice(0,-1)),i=i.replace(/\r\n?/g,`
|
|
1
|
+
import{a as e,i as t,r as n,s as r,t as i}from"../responseBody.utils-DFXqo6oy.mjs";async function a(e){let{data:t,response:n}=await e.withResponse();return{data:t,headers:n.headers}}function o(e){return e.remainingRequests!==void 0||e.limitRequests!==void 0?{type:`rate_limit_hint`,hint:e}:void 0}async function s(e,t){return t?a(e()):{data:await e()}}const c={minimal:1024,low:4096,medium:16e3,high:32e3};function l(e){if(!e)return c;let t={...c,...e};if(!(t.minimal<t.low&&t.low<t.medium&&t.medium<t.high))throw new r(`reasoningEffortTokens must keep tiers in strictly ascending order (minimal < low < medium < high), got ${JSON.stringify(t)}. An out-of-order override doesn't just misrank tiers, it can make some of them unreachable.`,`invalid_params`);return t}function u(e,t=c){return t[e]}function d(e,t=c){return e<=t.minimal?`minimal`:e<=t.low?`low`:e<=t.medium?`medium`:`high`}function f(e){let t=/opus-(\d+)(?:-(\d+))?/.exec(e);if(!t)return null;let n=t[2],r=n===void 0||n.length>=8?0:Number(n);return[Number(t[1]),r]}function p(e){let t=f(e);if(t){let[e,n]=t;return e>4||e===4&&n>=7}return[`sonnet-5`,`fable-5`,`mythos`].some(t=>e.includes(t))}function m(e,t){return p(e)?!0:t?Array.isArray(t)?t.includes(e):t(e):!1}function h(e,t){return!m(e,t)}function g(e,t){if(e<1024)throw new r(`budgetTokens (${e}) is below Anthropic's minimum of 1024. Raise budgetTokens, or use a reasoningEffort tier of 'low' or above with the default conversion table.`,`invalid_params`);if(e>=t)throw new r(`budgetTokens (${e}) must be less than maxTokens (${t}); the thinking budget and the reply share the same max_tokens ceiling on Anthropic. Raise maxTokens, or lower budgetTokens/reasoningEffort.`,`invalid_params`)}function ee(e){if(e)throw new r(`budgetTokens/reasoningEffort was set alongside ${e}. Anthropic rejects thinking combined with a tool_choice that forces tool use, the model has to be able to reply with plain text for thinking to run. Use toolChoice: 'auto' (or omit toolChoice) for this call, or drop budgetTokens/reasoningEffort for it.`,`invalid_params`)}function te(e){return e===`minimal`?`low`:e}function ne(e,t){return ie(t,e.toUpperCase())}function re(e){let t=/gemini-\d+\.(\d+)/.exec(e);return t?Number(t[1]):0}function ie(e,t){if(!e.includes(`pro`))return t;let n=_(e);return n===null||n<3?t:re(e)===0?t===`HIGH`?`HIGH`:`LOW`:t===`MINIMAL`?`LOW`:t}function _(e){let t=/gemini-(\d+)/.exec(e);return t?Number(t[1]):null}function ae(e){let t=_(e);return t!==null&&t>=3}function oe(e,t){return ae(e)?!0:t?Array.isArray(t)?t.includes(e):t(e):!1}const v=/* @__PURE__ */ new Set;function y(e,t,n){return r=>{if(v.has(e))return;let i=t();i!==void 0&&i>0&&(v.add(e),r.warn(`[VernLLM] ${e}: the SDK client retries up to ${i} times on its own, hidden from VernLLM's retries, circuit breaker, rate limiter, and events. ${n} so VernLLM is the only retry owner.`))}}function b(e){let t=e?.maxRetries;return typeof t==`number`?t:void 0}function x(e,t){return new r(e,`invalid_params`,{code:`unsupported_capability`,issues:{capability:t}})}function S(e,t,n){let r=i(`${e} (${t.status})`,n);return r.status=t.status,r.headers=t.headers,r}function C(e){let t=/claude-([a-z]+)-(\d+)(?:[-.](\d+))?/i.exec(e),n=t??/claude-(\d+)(?:[-.](\d+))?/i.exec(e);if(!n)return null;let[,r,i,a]=t?n:[n[0],void 0,n[1],n[2]],o=a===void 0||a.length>=8?0:Number(a);return{family:r?.toLowerCase(),major:Number(i),minor:o}}function w(e,t,n,r){return e>n||e===n&&t>=r}function se(e){let t=C(e);if(!t)return!1;let{family:n,major:r,minor:i}=t;return r>=6?!0:n===`fable`?w(r,i,5,1):n===`opus`&&w(r,i,5,5)}function T(e,t){return t?Array.isArray(t)?t.includes(e):t(e):se(e)}function ce(e,t,n,r){if(n&&n!==`auto`&&n!==`none`&&T(t,r))throw x(`${e} model "${t}" rejects a tool_choice that forces tool use, so ${n===`required`?`toolChoice: 'required'`:`toolChoice: { name: '${n.function.name}' }`} can't be sent. Use toolChoice: 'auto' and ask for the tool in the prompt instead. If this model does accept it, list the models that reject it in forcedToolChoiceUnsupportedModels.`,`forced_tool_choice`)}function le(e,t){return t?Array.isArray(t)?t.includes(e):t(e):!1}function ue(e,t,n,i){let a=t.response_format?.type===`json_schema`?t.response_format.json_schema:void 0,o=a?.name.trim();if(a&&!o)throw new r(`json_schema.name must not be empty.`,`validation`);let s=T(t.model,n.forcedToolChoiceUnsupportedModels);t.tools?.length&&ce(e,t.model,t.tool_choice,n.forcedToolChoiceUnsupportedModels);let c=!!a&&(s||le(t.model,n.nativeStructuredOutputModels));if(a&&t.tools?.length&&!c)throw x(i.toolsWithJsonSchema(t.model),`tools_with_json_schema`);if(t.response_format?.type===`json_object`)throw new r(i.jsonObject,`validation`);return!a||!o?{mode:`none`}:{mode:c?`native`:`forcedTool`,jsonSchema:a,schemaName:o}}function E(e,t,n){if(e.budget_tokens!==void 0||e.reasoning_effort!==void 0){if(ee(t),h(e.model,n.adaptiveOnlyModels)){let t=e.budget_tokens??u(e.reasoning_effort,n.effortTokenTable);return g(t,e.max_tokens),{thinking:{type:`enabled`,budget_tokens:t}}}return{thinking:{type:`adaptive`},effort:te(e.reasoning_effort??d(e.budget_tokens,n.effortTokenTable))}}}const D=[`image/png`,`image/jpeg`,`image/gif`,`image/webp`];function O(e){if(D.includes(e))return e;throw new r(`Unsupported image mimeType "${e}": expected one of ${D.join(`, `)}`,`invalid_params`)}function de(e){let t=C(e);return t!==null&&w(t.major,t.minor,4,7)}function fe(e){return e.map(e=>e.type===`image`?{type:`image`,source:{type:`base64`,media_type:O(e.mimeType),data:e.data}}:{type:`text`,text:e.text})}function k(e,t){if(e.type!==`object`)throw new r(`Tool "${t}"'s schema must have "type": "object" (Anthropic requires object-shaped tool parameters).`,`validation`);return e}function pe(e){let t=e||`auto`;switch(t){case`auto`:return{type:`auto`};case`none`:return{type:`none`};case`required`:return{type:`any`};default:return{type:`tool`,name:t.function.name}}}function me(e,t){return{tools:e.map(e=>({name:e.function.name,description:e.function.description,input_schema:k(e.function.parameters,e.function.name)})),toolChoice:pe(t)}}const he={toolsWithJsonSchema:e=>`Anthropic model "${e}" is not covered by nativeStructuredOutputModels, so \`jsonSchema\` is emulated as a forced single tool call there, which collides with the \`tools\` you also provided. Either drop \`tools\` or \`jsonSchema\` for this call, or pass this model in fromAnthropic's \`nativeStructuredOutputModels\` option once you've confirmed it supports Anthropic's \`output_config.format\`.`,jsonObject:'response_format: "json_object" is not supported on Anthropic. Unlike OpenAI, Anthropic has no API-level field that mechanically guarantees valid JSON output for this mode, so it used to be emulated by injecting a "respond with JSON only" instruction into the system prompt, a guarantee this adapter can no longer make. Use `jsonSchema` instead, which maps to a real API-level constraint (Anthropic\'s native output_config.format on covered models, or a forced single tool call otherwise).'};function ge(e){if(e?.type===`tool`)return`toolChoice forcing the "${e.name}" tool`;if(e?.type===`any`)return`toolChoice: 'required' (Anthropic's "any" tool_choice)`}function _e(e,t,n,r,i,a=!1){let o=e.messages.find(e=>e.role===`system`),s=e.messages.filter(e=>e.role===`user`||e.role===`assistant`||e.role===`tool`),c=ue(`Anthropic`,e,{nativeStructuredOutputModels:t,forcedToolChoiceUnsupportedModels:i},he),l,u,d,f;if(c.mode===`forcedTool`){let{schema:e,description:t,strict:n}=c.jsonSchema;l=c.schemaName,d=[{name:l,description:t,input_schema:k(e,l),strict:n}],f={type:`tool`,name:l}}else c.mode===`native`&&(u={type:`json_schema`,schema:c.jsonSchema.schema}),e.tools?.length&&({tools:d,toolChoice:f}=me(e.tools,e.tool_choice));let p=E(e,ge(f),{adaptiveOnlyModels:r,effortTokenTable:n}),m=p?.effort,h=o?.content,g=p||!a||de(e.model)?void 0:e.temperature;return{body:{model:e.model,max_tokens:e.max_tokens,...g===void 0?{}:{temperature:g},system:h||void 0,messages:ve(s.map(e=>ye(e))),...d?{tools:d,tool_choice:f}:{},...u||m?{output_config:{...u?{format:u}:{},...m?{effort:m}:{}}}:{},...p?{thinking:p.thinking}:{}},toolName:l}}function ve(e){let t=e=>e.role===`user`&&Array.isArray(e.content)&&e.content.length>0&&e.content.every(e=>e.type===`tool_result`),n=[];for(let r of e){let e=n.at(-1);t(r)&&e&&t(e)?e.content.push(...r.content):n.push(r)}return n}function ye(e){if(e.role===`tool`)return{role:`user`,content:[{type:`tool_result`,tool_use_id:e.tool_call_id,content:e.content,...e.is_error?{is_error:!0}:{}}]};if(e.role===`assistant`&&(e.tool_calls?.length||e.thinking?.length)){let t=(e.thinking??[]).map(e=>e.type===`thinking`?{type:`thinking`,thinking:e.thinking,signature:e.signature}:{type:`redacted_thinking`,data:e.data});e.content&&t.push({type:`text`,text:e.content});for(let n of e.tool_calls??[]){let e;try{e=n.function.arguments.trim()?JSON.parse(n.function.arguments):{}}catch(e){throw new r(`Assistant tool call "${n.function.name}" (${n.id}) has arguments that are not valid JSON.`,`validation`,{cause:e})}if(e===null||Array.isArray(e)||typeof e!=`object`)throw new r(`Assistant tool call "${n.function.name}" (${n.id}) arguments must be a JSON object.`,`validation`);t.push({type:`tool_use`,id:n.id,name:n.function.name,input:e})}return{role:`assistant`,content:t}}return{role:e.role,content:Array.isArray(e.content)?fe(e.content):e.content??``}}function A(e,t){return e?t[e]??`other`:void 0}function j(e,t){let n=A(e,t);return n?{finish_reason:n}:{}}function M(e,t){throw new r(`${e} did not return the required structured output tool "${t}".`,`validation`)}function be(e,t,n){if(!n||typeof n!=`object`||Array.isArray(n))throw new r(`${e} returned invalid structured output for tool "${t}". Expected an object.`,`validation`)}function N(e,t){return e&&t.has(e)?{refusal:e}:{}}const P={end_turn:`stop`,stop_sequence:`stop`,max_tokens:`length`,tool_use:`tool_calls`,refusal:`refusal`},xe=e=>A(e,P),F=/* @__PURE__ */ new Set([`refusal`]),I=e=>typeof e==`number`&&Number.isFinite(e)?e:0;function L(e){let t=[e?.input_tokens,e?.cache_creation_input_tokens,e?.cache_read_input_tokens];if(!t.every(e=>e==null))return t.reduce((e,t)=>e+I(t),0)}function R(e){if(!e)return;let t=e.cache_creation?{"5m":I(e.cache_creation.ephemeral_5m_input_tokens),"1h":I(e.cache_creation.ephemeral_1h_input_tokens)}:void 0;return{cached_tokens:e.cache_read_input_tokens??void 0,cache_write_tokens:e.cache_creation_input_tokens??void 0,...t?{cache_write_tokens_by_ttl:t}:{}}}function Se(e){return e.flatMap(e=>e.type===`thinking`?[{type:`thinking`,thinking:e.thinking??``,signature:e.signature??``}]:e.type===`redacted_thinking`?[{type:`redacted_thinking`,data:e.data??``}]:[])}function Ce(e,t){let n,r,i=Se(e.content),a=N(e.stop_reason,F);if(t){let r=e.content.find(e=>e.type===`tool_use`&&e.name===t);r?(be(`Anthropic`,t,r.input),n=JSON.stringify(r.input)):a.refusal?n=``:M(`Anthropic`,t)}else{n=e.content.filter(e=>e.type===`text`).map(e=>e.text??``).join(``);let t=e.content.filter(e=>e.type===`tool_use`);t.length&&(r=t.map(e=>({id:e.id,type:`function`,function:{name:e.name,arguments:JSON.stringify(e.input??{})}})))}return{choices:[{message:{content:n,...r?{tool_calls:r}:{},...i.length?{thinking:i}:{},...a},...j(e.stop_reason,P)}],usage:{prompt_tokens:L(e.usage),completion_tokens:e.usage?.output_tokens,total_tokens:(L(e.usage)??0)+(e.usage?.output_tokens??0),prompt_tokens_details:R(e.usage),...e.usage?.output_tokens_details?.thinking_tokens===void 0?{}:{completion_tokens_details:{reasoning_tokens:e.usage.output_tokens_details.thinking_tokens}}}}}function*we(e,t){let n=t.content_block;switch(n.type){case`tool_use`:{let r=n.name===e.toolName?`json-tool`:`tool_use`;e.blockKinds.set(t.index,r),r===`json-tool`?e.sawJsonTool=!0:e.toolName||(yield{type:`tool_call_delta`,index:t.index,id:n.id,name:n.name});return}case`thinking`:e.thinkingBlocks.set(t.index,{type:`thinking`,thinking:n.thinking??``,signature:n.signature??``});return;case`redacted_thinking`:e.thinkingBlocks.set(t.index,{type:`redacted_thinking`,data:n.data??``});return;default:e.blockKinds.set(t.index,`text`)}}function*Te(e,t){let{delta:n}=t;switch(n.type){case`text_delta`:e.toolName||(yield{type:`text-delta`,delta:n.text});return;case`thinking_delta`:{let r=e.thinkingBlocks.get(t.index);r?.type===`thinking`&&(r.thinking+=n.thinking),yield{type:`ping`};return}case`signature_delta`:{let r=e.thinkingBlocks.get(t.index);r?.type===`thinking`&&(r.signature+=n.signature),yield{type:`ping`};return}case`input_json_delta`:e.blockKinds.get(t.index)===`json-tool`?yield{type:`text-delta`,delta:n.partial_json}:e.toolName||(yield{type:`tool_call_delta`,index:t.index,argumentsDelta:n.partial_json})}}function*Ee(e,t){let n=e.thinkingBlocks.get(t.index);n&&(e.thinkingBlocks.delete(t.index),yield{type:`thinking_block`,block:n})}const De=[`input_tokens`,`cache_creation_input_tokens`,`cache_read_input_tokens`];function Oe(e,t){let n={...e};for(let e of De){let r=t?.[e];r!=null&&(n[e]=r)}return n}function ke(e,t){let n=Oe(e.startUsage,t.usage),r=L(n)??0,i=t.usage?.output_tokens??0,a=t.usage?.output_tokens_details?.thinking_tokens;return{type:`usage`,usage:{prompt_tokens:r,completion_tokens:i,total_tokens:r+i,prompt_tokens_details:R(n),...a===void 0?{}:{completion_tokens_details:{reasoning_tokens:a}}}}}async function*Ae(e,t){let n={toolName:t,blockKinds:/* @__PURE__ */ new Map,thinkingBlocks:/* @__PURE__ */ new Map,startUsage:void 0,sawJsonTool:!1,refused:!1};for await(let t of e)switch(t.type){case`message_start`:n.startUsage=t.message.usage;break;case`content_block_start`:yield*we(n,t);break;case`content_block_delta`:yield*Te(n,t);break;case`content_block_stop`:yield*Ee(n,t);break;case`message_delta`:t.delta?.stop_reason&&F.has(t.delta.stop_reason)&&(n.refused=!0,yield{type:`refusal`}),t.delta?.stop_reason&&(yield{type:`finish`,reason:xe(t.delta.stop_reason)}),yield ke(n,t);break;case`ping`:yield{type:`ping`}}t&&!n.sawJsonTool&&!n.refused&&M(`Anthropic`,t)}function je(e,r){let i=l(r?.reasoningEffortTokens),a=r?.supportsWithResponse??!1,c=y(`anthropic`,()=>b(e),`Pass maxRetries: 0 to the client`),u=e=>_e(e,r?.nativeStructuredOutputModels,i,r?.adaptiveOnlyModels,r?.forcedToolChoiceUnsupportedModels,r?.sendTemperature),d=(t,n)=>s(()=>e.messages.create(t,n),a);return{supportsJsonObjectMode:!1,cacheReadsCountTowardRateLimit:!1,adapter:{name:`anthropic`,provider:`anthropic`},setLogger:c,chat:{completions:{async create(e,r){let{body:i,toolName:a}=u(e),{data:o,headers:s}=await d(i,r),c=Ce(o,a);return s&&n(c,t(s)),c},async*createStream(e,n){let{body:r,toolName:i}=u(e),{data:a,headers:s}=await d({...r,stream:!0},n);if(s){let e=o(t(s));e&&(yield e)}yield*Ae(a,i)}}}}}function Me(e){return e.map(e=>e.type===`image`?{inlineData:{mimeType:O(e.mimeType),data:e.data}}:{text:e.text})}function Ne(e){let t=e||`auto`;switch(t){case`auto`:return{functionCallingConfig:{mode:`AUTO`}};case`none`:return{functionCallingConfig:{mode:`NONE`}};case`required`:return{functionCallingConfig:{mode:`ANY`}};default:return{functionCallingConfig:{mode:`ANY`,allowedFunctionNames:[t.function.name]}}}}function Pe(e){let t=/* @__PURE__ */ new Map;for(let n of e)if(n.role===`assistant`)for(let e of n.tool_calls??[])t.set(e.id,e.function.name);return t}function Fe(e,t){if(e.role===`tool`)return{role:`user`,parts:[{functionResponse:{id:e.tool_call_id,name:t.get(e.tool_call_id)??e.tool_call_id,response:Le(e.content)}}]};if(e.role===`assistant`&&e.tool_calls?.length){let t=[];return typeof e.content==`string`&&e.content&&t.push({text:e.content}),t.push(...e.tool_calls.map(e=>({functionCall:{id:e.id,name:e.function.name,args:Ie(e.function.arguments,e.function.name)}}))),{role:`model`,parts:t}}return{role:e.role===`assistant`?`model`:`user`,parts:Array.isArray(e.content)?Me(e.content):[{text:e.content??``}]}}function Ie(e,t){let n;try{n=e.trim()?JSON.parse(e):{}}catch(e){throw new r(`Tool call "${t}" arguments are not valid JSON.`,`parse`,{cause:e,code:`tool_arguments_parse_failed`})}if(!n||Array.isArray(n)||typeof n!=`object`)throw new r(`Tool call "${t}" arguments must be a JSON object.`,`validation`);return n}function Le(e){let t;try{t=e.trim()?JSON.parse(e):``}catch{t=e}return t&&!Array.isArray(t)&&typeof t==`object`?t:{output:t}}function Re(e){let t=e=>e.role===`user`&&e.parts.length>0&&e.parts.every(e=>`functionResponse`in e),n=[];for(let r of e){let e=n.at(-1);t(r)&&e&&t(e)?e.parts.push(...r.parts):n.push(r)}return n}function ze(e,t,n){if(oe(e.model,n)){let n=e.reasoning_effort??(e.budget_tokens===void 0?void 0:d(e.budget_tokens,t));return n===void 0?void 0:{thinkingLevel:ne(n,e.model)}}let r=e.budget_tokens??(e.reasoning_effort?u(e.reasoning_effort,t):void 0);return r===void 0?void 0:{thinkingBudget:r}}function z(e,t,n){let r=e.messages.find(e=>e.role===`system`),i=e.messages.filter(e=>e.role===`user`||e.role===`assistant`||e.role===`tool`),a=!!e.response_format,o={...e.temperature===void 0?{}:{temperature:e.temperature},maxOutputTokens:e.max_tokens,...r?{systemInstruction:{parts:[{text:r.content}]}}:{}};if(a&&(o.responseMimeType=`application/json`),e.response_format?.type===`json_schema`){let{schema:t,description:n}=e.response_format.json_schema;o.responseSchema={...t,...n?{description:n}:{}}}e.tools?.length&&(o.tools=[{functionDeclarations:e.tools.map(e=>({name:e.function.name,description:e.function.description,parameters:e.function.parameters}))}],o.toolConfig=Ne(e.tool_choice));let s=ze(e,t,n);s&&(o.thinkingConfig=s);let c=Pe(i);return{model:e.model,contents:Re(i.map(e=>Fe(e,c))),config:o}}function B(e,t){return`${e}#${t}`}function V(e){return{prompt_tokens:e?.promptTokenCount,completion_tokens:e?.candidatesTokenCount,total_tokens:e?.totalTokenCount,prompt_tokens_details:{cached_tokens:e?.cachedContentTokenCount},...e?.thoughtsTokenCount===void 0?{}:{completion_tokens_details:{reasoning_tokens:e.thoughtsTokenCount}}}}const H={STOP:`stop`,MAX_TOKENS:`length`,SAFETY:`content_filter`,BLOCKLIST:`content_filter`,PROHIBITED_CONTENT:`content_filter`,SPII:`content_filter`},Be=e=>A(e,H),Ve=/* @__PURE__ */ new Set([`SAFETY`,`BLOCKLIST`,`PROHIBITED_CONTENT`,`SPII`]);function U(e,t){let n=t?.blockReason;return n&&n!==`BLOCKED_REASON_UNSPECIFIED`?{refusal:n}:N(e?.finishReason,Ve)}function He(e){let t=e.candidates?.[0]?.content?.parts??[],n=t.map(e=>e.text??``).join(``),r=t.filter(e=>e.functionCall),i;if(r.length){let e=/* @__PURE__ */ new Map;i=r.map(t=>{let n=t.functionCall.name,r=t.functionCall.id,i=e.get(n)??0;return e.set(n,i+1),{id:r??B(n,i),type:`function`,function:{name:n,arguments:JSON.stringify(t.functionCall.args??{})}}})}return{choices:[{message:{content:n,...i?{tool_calls:i}:{},...U(e.candidates?.[0],e.promptFeedback)},...j(e.candidates?.[0]?.finishReason,H)}],usage:V(e.usageMetadata)}}async function*Ue(e){let t=0,n=/* @__PURE__ */ new Map,r;for await(let i of e){let e=i.candidates?.[0]?.content?.parts??[];for(let r of e)if(r.text&&(yield{type:`text-delta`,delta:r.text}),r.functionCall){let e=r.functionCall.name,i=r.functionCall.id,a=e?n.get(e)??0:0;e&&n.set(e,a+1),yield{type:`tool_call_delta`,index:t,id:i??(e?B(e,a):void 0),name:r.functionCall.name,argumentsDelta:JSON.stringify(r.functionCall.args??{}),complete:!0},t++}U(i.candidates?.[0],i.promptFeedback).refusal&&(yield{type:`refusal`});let a=Be(i.candidates?.[0]?.finishReason);a&&(yield{type:`finish`,reason:a}),i.usageMetadata&&(r=i.usageMetadata)}r&&(yield{type:`usage`,usage:V(r)})}function We(e){return e.vertexai===!0?{provider:`gcp.vertex_ai`}:e.vertexai===!1?{provider:`gcp.gemini`}:{}}function Ge(e){let t=e.httpOptions?.retryOptions;if(t&&typeof t==`object`)return Math.max(1,Number(t.attempts??5))-1}function Ke(e,t){let n=l(t?.reasoningEffortTokens),r=t?.thinkingLevelModels,i=e.models;if(!i&&typeof e.generateContent==`function`)throw x(`fromGemini takes the top level client: pass ai (new GoogleGenAI(...)), not ai.models.`,`top_level_client`);if(typeof i?.generateContent!=`function`)throw x(`fromGemini requires a client with models.generateContent: pass ai (new GoogleGenAI(...)).`,`generateContent`);let a=y(`gemini`,()=>Ge(e),`Remove httpOptions.retryOptions from the client, or set its attempts to 1,`),o=i.generateContent.bind(i),s=typeof i.generateContentStream==`function`?i.generateContentStream.bind(i):void 0;return{adapter:{name:`gemini`,...We(e)},setLogger:a,chat:{completions:{async create(e,t){let i=z(e,n,r);return i.config={...i.config,abortSignal:t.signal},He(await o(i))},async*createStream(e,t){if(!s)throw x(`stream: true requires a Gemini client with generateContentStream`,`generateContentStream`);let i=z(e,n,r);i.config={...i.config,abortSignal:t.signal},yield*Ue(await s(i))}}}}}async function*W(e){let t=new TextDecoder(`utf-8`,{fatal:!0}),n=qe();for await(let i of e){let e;try{e=typeof i==`string`?i:t.decode(i,{stream:!0})}catch(e){throw new r(`Invalid UTF-8 in SSE stream`,`parse`,{cause:e})}for(let t of n.push(e)){let e=J(t);if(e===G)return;e!==K&&(yield e)}}let i;try{i=t.decode()}catch(e){throw new r(`Invalid UTF-8 in SSE stream`,`parse`,{cause:e})}let{frames:a,trailing:o}=n.end(i);for(let e of a){let t=J(e);if(t===G)return;t!==K&&(yield t)}let s=o.trim();if(s){let e=J(s);e!==G&&e!==K&&(yield e)}}function qe(){let e=[],t=!1,n=!1;function r(r){let i=n?`\r${r}`:r;n=i.endsWith(`\r`),n&&(i=i.slice(0,-1)),i=i.replace(/\r\n?/g,`
|
|
2
2
|
`);let a=[],o=0;t&&i.startsWith(`
|
|
3
3
|
`)&&(a.push(e.join(``).slice(0,-1)),e=[],t=!1,o=1);let s=i.indexOf(`
|
|
4
4
|
|
|
@@ -7,6 +7,6 @@ import{a as e,i as t,r as n,s as r,t as i}from"../responseBody.utils-B2tQiGUi.mj
|
|
|
7
7
|
`,o);let c=i.slice(o);return c?(e.push(c),t=c.endsWith(`
|
|
8
8
|
`)):o>0&&(t=!1),a}return{push:r,end(t){let i=r(t);return n&&(n=!1,i.push(...r(`
|
|
9
9
|
`))),{frames:i,trailing:e.join(``)}}}}const G=Symbol(`sse-stream-done`),K=Symbol(`sse-frame-no-data`),q=Symbol(`sse-frame-ping`);function J(e){let t=[],n=!1;for(let r of e.split(`
|
|
10
|
-
`))
|
|
11
|
-
`);if(i===`[DONE]`)return G;try{return JSON.parse(i)}catch(e){throw new r(`Invalid JSON in SSE frame: ${i.slice(0,200)}`,`parse`,{cause:e,code:`stream_frame_invalid`})}}function
|
|
10
|
+
`))r.startsWith(`:`)?n=!0:r.startsWith(`data:`)&&t.push(r.startsWith(`data: `)?r.slice(6):r.slice(5));if(!t.length)return n?q:K;let i=t.join(`
|
|
11
|
+
`);if(i===`[DONE]`)return G;try{return JSON.parse(i)}catch(e){throw new r(`Invalid JSON in SSE frame: ${i.slice(0,200)}`,`parse`,{cause:e,code:`stream_frame_invalid`})}}function Je(e){return e.cacheReadTokens!==void 0||e.cacheWriteTokens!==void 0||e.cacheWriteTokensByTtl!==void 0}function Ye(e){let{content:t,refusal:n,finishReason:r,usage:i,toolCalls:a}=e,o=a?.length?a.map(e=>({id:e.id,type:`function`,function:{name:e.name,arguments:e.arguments}})):void 0;return{choices:[{message:{content:t,...n?{refusal:n}:{},...o?{tool_calls:o}:{}},...r?{finish_reason:r}:{}}],usage:i?{prompt_tokens:i.promptTokens,completion_tokens:i.completionTokens,total_tokens:i.totalTokens,...i.costUsd===void 0?{}:{cost:i.costUsd},...Je(i)?{prompt_tokens_details:{cached_tokens:i.cacheReadTokens,cache_write_tokens:i.cacheWriteTokens,cache_write_tokens_by_ttl:i.cacheWriteTokensByTtl}}:{}}:void 0}}async function*Xe(e,t){for await(let n of e){if(n===q){yield{type:`ping`};continue}let e=t(n);e&&(Array.isArray(e)?yield*e:yield e)}}async function*Ze(e){let t=e.getReader();try{for(;;){let{done:e,value:n}=await t.read();if(e)return;n&&(yield n)}}finally{try{await t.cancel()}catch{}t.releaseLock()}}async function Qe(e,t){let n=await fetch(e,t);if(!n.ok)throw S(`Fetch adapter stream request failed`,n,await n.text().catch(()=>``));if(!n.body)throw Error(`Fetch adapter stream request received a response with no body.`);return{headers:n.headers,body:Ze(n.body)}}async function Y(e,t,n){let r=typeof e.url==`function`?e.url(t):e.url,i=typeof e.headers==`function`?await e.headers():e.headers,a=e.method??`POST`,o=![`GET`,`HEAD`].includes(a.toUpperCase());return{url:r,method:a,headers:o?{"Content-Type":`application/json`,...i}:{...i},...o?{body:JSON.stringify(n)}:{}}}async function $e(e,t,n){let{url:r,method:i,headers:a,body:o}=await Y(e,t,e.mapRequest(t)),s=await(e.request??fetch)(r,{method:i,headers:a,body:o,signal:n});if(!s.ok)throw S(`Fetch adapter request failed`,s,await s.text().catch(()=>``));return s}async function et(e,t,n){if(e.request&&!e.requestStream)throw x("`stream: true` requires `requestStream` to be configured on fromFetch when a custom `request` transport is set. `requestStream` does not fall back to `request` (it needs an async-iterable byte stream, which `RequestLike`'s buffered `ResponseLike` has no way to provide), without it, `stream: true` would silently use plain native `fetch` instead of your configured transport. Add a `requestStream` that opens the same connection your `request` does, or omit `request` if native `fetch` is fine for both.",`requestStream`);let{url:r,method:i,headers:a,body:o}=await Y(e,t,e.mapRequest(t)),s={method:i,headers:a,body:o,signal:n};return e.requestStream?{body:await e.requestStream(r,s)}:Qe(r,s)}function X(t,n){if(n&&typeof n.get==`function`)return(t.parseRateLimitHint??e)(n)}function tt(e){return{adapter:{name:`fetch`,...typeof e.provider==`string`&&e.provider.trim()!==``?{provider:e.provider}:{}},chat:{completions:{async create(t,r){let i=await $e(e,t,r.signal),a=Ye(e.mapResponse(await i.json()));return n(a,X(e,i.headers)),a},async*createStream(t,n){let{mapStreamEvent:r}=e;if(!r)throw x(`stream: true requires mapStreamEvent to be configured on fromFetch`,`mapStreamEvent`);let i=e.parseStreamFrames??W,a=await et(e,t,n.signal),s=X(e,a.headers),c=s&&o(s);c&&(yield c),yield*Xe(i(a.body),r)}}}}}const nt=[[/^api\.openai\.com$/,`openai`],[/\.openai\.azure\.com$/,`azure.ai.openai`],[/^api\.groq\.com$/,`groq`],[/^api\.mistral\.ai$/,`mistral_ai`],[/^api\.deepseek\.com$/,`deepseek`],[/^api\.x\.ai$/,`x_ai`],[/^api\.perplexity\.ai$/,`perplexity`]];function rt(e,t){if(typeof t==`string`&&t.trim()!==``)return t;let n=e.baseURL;if(typeof n!=`string`)return;let r;try{r=new URL(n).hostname.toLowerCase()}catch{return}return nt.find(([e])=>e.test(r))?.[1]}function it(e){if(/-chat/.test(e))return!1;let t=/^gpt-(\d+)/.exec(e)?.[1];return t!==void 0&&Number(t)>=6}function at(e,t){return t?Array.isArray(t)?t.includes(e):t(e):it(e)}function ot(e,t){if(!e.tools?.length||!at(e.model,t))return!1;if(e.reasoning_effort!==void 0||e.budget_tokens!==void 0)throw x(`OpenAI model "${e.model}" only accepts tools on Chat Completions with reasoning_effort "none", but this call asks for reasoning through reasoningEffort or budgetTokens (an instance default counts). Pass reasoningEffort: null and budgetTokens: null for this call, or use the Responses API for reasoning with tools.`,`tools_with_reasoning`);return!0}function st(e,t,n){return t?(n?.debug(`[VernLLM] ${e.model}: sending reasoning_effort "none", required for tools on Chat Completions`),{...e,reasoning_effort:`none`}):e}function ct(e,t){if(e.budget_tokens===void 0)return e;let{budget_tokens:n,...r}=e;return r.reasoning_effort===void 0?{...r,reasoning_effort:d(n,t)}:r}function lt(e){if(/-chat/.test(e))return!1;if(/^o\d/.test(e))return!0;let t=/^gpt-(\d+)/.exec(e)?.[1];return t!==void 0&&Number(t)>=5}function ut(e){if(!lt(e.model))return e;let{max_tokens:t,temperature:n,...r}=e;return{...r,max_completion_tokens:t}}function dt(e){return e.map(e=>e.type===`image`?{type:`image_url`,image_url:{url:`data:${O(e.mimeType)};base64,${e.data}`}}:{type:`text`,text:e.text})}function ft(e){return e.messages.map(e=>{if(e.role===`user`&&Array.isArray(e.content))return{...e,content:dt(e.content)};if(e.role===`tool`){let{is_error:t,...n}=e;return t?{...n,content:`Error: ${n.content}`}:n}if(e.role===`assistant`&&e.thinking){let{thinking:t,...n}=e;return n}return e})}function pt(e,t){return t?.type===`json_object`?e.some(e=>{let t=e.content;return(Array.isArray(t)?t:[t]).some(e=>{let t=typeof e==`string`?e:e?.text;return typeof t==`string`&&/json/i.test(t)})})?e:[{role:`system`,content:`Respond with a valid JSON object.`},...e]:e}function Z(e){let t=e.prompt_tokens_details?.cached_tokens??e.prompt_cache_hit_tokens;return t===void 0?e:{...e,prompt_tokens_details:{...e.prompt_tokens_details,cached_tokens:t}}}function*mt(e){let t=e.choices?.[0]?.delta;if(t?.content&&(yield{type:`text-delta`,delta:t.content}),t?.refusal&&(yield{type:`refusal`,delta:t.refusal}),t?.tool_calls?.length)for(let e of t.tool_calls)yield{type:`tool_call_delta`,index:e.index,id:e.id,name:e.function?.name,argumentsDelta:e.function?.arguments};let n=e.choices?.[0]?.finish_reason;n&&(yield{type:`finish`,reason:n}),e.usage&&(yield{type:`usage`,usage:Z(e.usage)})}function Q(t,r={}){let i=t,{supportsStreamUsage:a=!0,supportsWithResponse:c=!1}=r,u=l(r.reasoningEffortTokens),d=rt(t,r.provider),f,p=y(`openai-compatible`,()=>b(t),`Pass maxRetries: 0 to the client`),m=(e,t={})=>{let n=ot(e,r.noReasoningToolModels),i=pt(ft(e),e.response_format);return st(ut(ct({...e,messages:i,...t},u)),n,f)},h=(e,t)=>s(()=>i.chat.completions.create(e,t),c);return{adapter:{name:`openai-compatible`,...d?{provider:d}:{}},setLogger(e){f=e,p(e)},chat:{completions:{async create(t,r){let{data:i,headers:a}=await h(m(t),r),o=i?.usage?{...i,usage:Z(i.usage)}:i;return a&&o&&typeof o==`object`&&n(o,e(a)),o},async*createStream(t,n){let r=m(t,{stream:!0,...a?{stream_options:{include_usage:!0}}:{}}),{data:i,headers:s}=await h(r,n);if(s){let t=o(e(s));t&&(yield t)}for await(let e of i)yield*mt(e)}}}}}const ht=Q,gt=Q,_t=Q,vt=Q,yt=Q,bt=Q,xt=Q,St=Q,Ct=Q,wt=Q,Tt=Q,Et=Q,Dt=Q,Ot=Q,kt=Q,At=Q,jt=Q,Mt=Q,Nt=Q,Pt=Q,Ft=Q,It=Q,Lt=Q,Rt=Q,zt=Q,Bt=Q,Vt=Q,Ht=Q,$=Q,Ut=Q,Wt=Q,Gt=Q,Kt=Q,qt=Q,Jt=Q,Yt=Q,Xt=Q,Zt=Q;export{q as SSE_PING,Zt as from01AI,je as fromAnthropic,Kt as fromAnyscale,Xt as fromAtlasCloud,Rt as fromBaseten,yt as fromCerebras,Ft as fromCloudflareWorkersAI,Tt as fromDeepInfra,vt as fromDeepSeek,zt as fromFeatherless,tt as fromFetch,xt as fromFireworks,Bt as fromFriendli,Ke as fromGemini,gt as fromGroq,Dt as fromHyperbolic,Jt as fromInferenceNet,Yt as fromInfermatic,At as fromLMStudio,Wt as fromLambdaLabs,qt as fromLepton,Ut as fromMiniMax,_t as fromMistral,Ot as fromMoonshot,It as fromNebius,Et as fromNovita,Nt as fromNvidiaNIM,St as fromOllama,ht as fromOpenAI,Q as fromOpenAICompatible,Ct as fromOpenRouter,Ht as fromParasail,wt as fromPerplexity,Lt as fromSambaNova,Vt as fromSiliconFlow,Gt as fromSnowflakeCortex,$ as fromStepFun,bt as fromTogether,jt as fromVLLM,Pt as fromVercelAIGateway,Mt as fromXAI,kt as fromZhipu,W as parseSseStream};
|
|
12
12
|
//# sourceMappingURL=index.mjs.map
|