@framers/agentos 0.9.111 → 0.9.113
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/api/generateObject.d.ts.map +1 -1
- package/dist/api/generateObject.js +13 -0
- package/dist/api/generateObject.js.map +1 -1
- package/dist/api/generateText.d.ts +31 -1
- package/dist/api/generateText.d.ts.map +1 -1
- package/dist/api/generateText.js +27 -0
- package/dist/api/generateText.js.map +1 -1
- package/dist/api/runtime/openaiResponseFormat.d.ts +8 -0
- package/dist/api/runtime/openaiResponseFormat.d.ts.map +1 -1
- package/dist/api/runtime/openaiResponseFormat.js +66 -1
- package/dist/api/runtime/openaiResponseFormat.js.map +1 -1
- package/dist/core/llm/providers/IProvider.d.ts +47 -0
- package/dist/core/llm/providers/IProvider.d.ts.map +1 -1
- package/dist/core/llm/providers/implementations/AnthropicProvider.d.ts +87 -8
- package/dist/core/llm/providers/implementations/AnthropicProvider.d.ts.map +1 -1
- package/dist/core/llm/providers/implementations/AnthropicProvider.js +108 -14
- package/dist/core/llm/providers/implementations/AnthropicProvider.js.map +1 -1
- package/dist/core/llm/providers/implementations/OpenRouterProvider.d.ts +43 -0
- package/dist/core/llm/providers/implementations/OpenRouterProvider.d.ts.map +1 -1
- package/dist/core/llm/providers/implementations/OpenRouterProvider.js +201 -41
- package/dist/core/llm/providers/implementations/OpenRouterProvider.js.map +1 -1
- package/dist/core/llm/providers/model-strict-tool-use.d.ts +45 -0
- package/dist/core/llm/providers/model-strict-tool-use.d.ts.map +1 -0
- package/dist/core/llm/providers/model-strict-tool-use.js +47 -0
- package/dist/core/llm/providers/model-strict-tool-use.js.map +1 -0
- package/dist/core/llm/routing/UncensoredModelCatalog.d.ts.map +1 -1
- package/dist/core/llm/routing/UncensoredModelCatalog.js +59 -27
- package/dist/core/llm/routing/UncensoredModelCatalog.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/orchestration/compiler/SchemaLowering.d.ts +2 -1
- package/dist/orchestration/compiler/SchemaLowering.d.ts.map +1 -1
- package/dist/orchestration/compiler/SchemaLowering.js +26 -1
- package/dist/orchestration/compiler/SchemaLowering.js.map +1 -1
- package/dist/orchestration/pipeline/query/types.js +2 -2
- package/dist/orchestration/pipeline/query/types.js.map +1 -1
- package/dist/orchestration/planner/PlanningEngine.d.ts +1 -1
- package/dist/orchestration/planner/PlanningEngine.d.ts.map +1 -1
- package/dist/orchestration/planner/PlanningEngine.js +4 -2
- package/dist/orchestration/planner/PlanningEngine.js.map +1 -1
- package/dist/orchestration/planning/ProviderAssignmentEngine.js +1 -1
- package/dist/orchestration/planning/ProviderAssignmentEngine.js.map +1 -1
- package/dist/safety/evaluation/LLMJudge.d.ts.map +1 -1
- package/dist/safety/evaluation/LLMJudge.js +4 -1
- package/dist/safety/evaluation/LLMJudge.js.map +1 -1
- package/package.json +1 -1
|
@@ -159,6 +159,20 @@ export interface ModelCompletionOptions {
|
|
|
159
159
|
* dropped on unsupported models or invalid values.
|
|
160
160
|
*/
|
|
161
161
|
effort?: string;
|
|
162
|
+
/**
|
|
163
|
+
* Anthropic prompt-cache diagnostics (beta `cache-diagnosis-2026-04-07`).
|
|
164
|
+
* When set, the provider sends `diagnostics: { previous_message_id }` plus
|
|
165
|
+
* the beta header, and the API compares this request against the referenced
|
|
166
|
+
* one to explain any cache miss. Pass `previousMessageId: null` on the first
|
|
167
|
+
* call of a conversation to opt in; thread the previous response's `id`
|
|
168
|
+
* (`msg_...`) on subsequent calls. The verdict comes back on
|
|
169
|
+
* {@link ModelCompletionResponse.cacheDiagnostics}. Anthropic-only —
|
|
170
|
+
* other providers ignore the field. Never affects request processing:
|
|
171
|
+
* diagnostics are best-effort observability.
|
|
172
|
+
*/
|
|
173
|
+
cacheDiagnostics?: {
|
|
174
|
+
previousMessageId: string | null;
|
|
175
|
+
};
|
|
162
176
|
/**
|
|
163
177
|
* Positive values penalize new tokens based on whether they appear in the text so far,
|
|
164
178
|
* increasing the model's likelihood to talk about new topics.
|
|
@@ -220,6 +234,30 @@ export interface ModelCompletionOptions {
|
|
|
220
234
|
};
|
|
221
235
|
} | Record<string, unknown>;
|
|
222
236
|
}
|
|
237
|
+
/**
|
|
238
|
+
* The first point of divergence between this request and the one referenced
|
|
239
|
+
* by `cacheDiagnostics.previousMessageId`, as reported by Anthropic's
|
|
240
|
+
* cache-diagnostics beta. `type` is one of the API's discriminants
|
|
241
|
+
* (`model_changed` | `system_changed` | `tools_changed` | `messages_changed`
|
|
242
|
+
* | `previous_message_not_found` | `unavailable`) — kept as an open string so
|
|
243
|
+
* new discriminants pass through without a library update. The `*_changed`
|
|
244
|
+
* types also carry `cacheMissedInputTokens`, an estimate of how many input
|
|
245
|
+
* tokens fell after the divergence point (magnitude indicator, not a billing
|
|
246
|
+
* number).
|
|
247
|
+
*/
|
|
248
|
+
export interface CacheMissReason {
|
|
249
|
+
type: string;
|
|
250
|
+
cacheMissedInputTokens?: number;
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* Cache-diagnostics verdict for one call. `cacheMissReason: null` means the
|
|
254
|
+
* comparison was still running when the response serialized (inconclusive —
|
|
255
|
+
* check the next turn). A populated reason identifies the earliest divergence;
|
|
256
|
+
* fix it first, later ones may be hidden behind it.
|
|
257
|
+
*/
|
|
258
|
+
export interface CacheDiagnostics {
|
|
259
|
+
cacheMissReason: CacheMissReason | null;
|
|
260
|
+
}
|
|
223
261
|
/**
|
|
224
262
|
* Represents token usage information from a model call, including cost estimation.
|
|
225
263
|
*/
|
|
@@ -267,6 +305,15 @@ export interface ModelCompletionResponse {
|
|
|
267
305
|
choices: ModelCompletionChoice[];
|
|
268
306
|
/** Token usage & optional cost metrics (present on final chunk; may be partial/omitted on deltas). */
|
|
269
307
|
usage?: ModelUsage;
|
|
308
|
+
/**
|
|
309
|
+
* Anthropic cache-diagnostics verdict (beta). Present only when the request
|
|
310
|
+
* opted in via {@link ModelCompletionOptions.cacheDiagnostics} AND the API
|
|
311
|
+
* returned a verdict. `null` = a comparison ran and found no divergence (or
|
|
312
|
+
* this was the opt-in first turn with nothing to compare). An object with
|
|
313
|
+
* `cacheMissReason` identifies the earliest divergence — see
|
|
314
|
+
* {@link CacheDiagnostics}.
|
|
315
|
+
*/
|
|
316
|
+
cacheDiagnostics?: CacheDiagnostics | null;
|
|
270
317
|
/** Unified error envelope; present ONLY if an error occurred for this request/chunk. */
|
|
271
318
|
error?: {
|
|
272
319
|
/** Human readable message suitable for UI display or logging. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IProvider.d.ts","sourceRoot":"","sources":["../../../../src/core/llm/providers/IProvider.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"IProvider.d.ts","sourceRoot":"","sources":["../../../../src/core/llm/providers/IProvider.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
* @module backend/agentos/core/llm/providers/implementations/AnthropicProvider
|
|
17
17
|
* @implements {IProvider}
|
|
18
18
|
*/
|
|
19
|
-
import { IProvider, ChatMessage, ModelCompletionOptions, ModelCompletionResponse, ModelInfo, ProviderEmbeddingOptions, ProviderEmbeddingResponse } from '../IProvider';
|
|
19
|
+
import { IProvider, ChatMessage, ModelCompletionOptions, ModelCompletionResponse, ModelInfo, ProviderEmbeddingOptions, ProviderEmbeddingResponse, CacheDiagnostics } from '../IProvider';
|
|
20
20
|
import { modelSupportsForcedToolChoice } from '../model-forced-tool-choice.js';
|
|
21
21
|
export { modelSupportsForcedToolChoice };
|
|
22
22
|
/**
|
|
@@ -106,6 +106,73 @@ export interface AnthropicProviderConfig {
|
|
|
106
106
|
* model, `true` otherwise.
|
|
107
107
|
*/
|
|
108
108
|
export declare function modelSupportsTemperature(modelId: string): boolean;
|
|
109
|
+
/** A single content block in an Anthropic message (text, tool_use, or tool_result). */
|
|
110
|
+
interface AnthropicContentBlock {
|
|
111
|
+
type: 'text' | 'tool_use' | 'tool_result' | 'image' | 'thinking' | 'redacted_thinking';
|
|
112
|
+
/** Present when type === 'text'. */
|
|
113
|
+
text?: string;
|
|
114
|
+
/** Present when type === 'thinking' — the reasoning text. */
|
|
115
|
+
thinking?: string;
|
|
116
|
+
/** Present when type === 'thinking' — opaque replay signature; preserve verbatim. */
|
|
117
|
+
signature?: string;
|
|
118
|
+
/** Present when type === 'redacted_thinking' — encrypted reasoning blob; preserve verbatim. */
|
|
119
|
+
data?: string;
|
|
120
|
+
/** Present when type === 'tool_use'. */
|
|
121
|
+
id?: string;
|
|
122
|
+
name?: string;
|
|
123
|
+
input?: Record<string, unknown>;
|
|
124
|
+
/** Present when type === 'tool_result'. */
|
|
125
|
+
tool_use_id?: string;
|
|
126
|
+
content?: string | Array<{
|
|
127
|
+
type: string;
|
|
128
|
+
text?: string;
|
|
129
|
+
}>;
|
|
130
|
+
is_error?: boolean;
|
|
131
|
+
/** Present when type === 'image'. */
|
|
132
|
+
source?: {
|
|
133
|
+
type: 'base64';
|
|
134
|
+
media_type: string;
|
|
135
|
+
data: string;
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
/** The Anthropic Messages API response shape. */
|
|
139
|
+
interface AnthropicMessagesResponse {
|
|
140
|
+
id: string;
|
|
141
|
+
type: 'message';
|
|
142
|
+
role: 'assistant';
|
|
143
|
+
content: AnthropicContentBlock[];
|
|
144
|
+
model: string;
|
|
145
|
+
stop_reason: 'end_turn' | 'max_tokens' | 'stop_sequence' | 'tool_use' | null;
|
|
146
|
+
stop_sequence: string | null;
|
|
147
|
+
usage: {
|
|
148
|
+
input_tokens: number;
|
|
149
|
+
output_tokens: number;
|
|
150
|
+
cache_creation_input_tokens?: number;
|
|
151
|
+
cache_read_input_tokens?: number;
|
|
152
|
+
};
|
|
153
|
+
/**
|
|
154
|
+
* Cache-diagnostics verdict (beta `cache-diagnosis-2026-04-07`). Returned
|
|
155
|
+
* only when the request carried a `diagnostics` field. Absent = not
|
|
156
|
+
* requested; `null` = compared with no divergence (or first-turn opt-in);
|
|
157
|
+
* `{ cache_miss_reason: null }` = comparison still running;
|
|
158
|
+
* `{ cache_miss_reason: {...} }` = earliest divergence identified.
|
|
159
|
+
*/
|
|
160
|
+
diagnostics?: {
|
|
161
|
+
cache_miss_reason: {
|
|
162
|
+
type: string;
|
|
163
|
+
cache_missed_input_tokens?: number;
|
|
164
|
+
} | null;
|
|
165
|
+
} | null;
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Normalize the wire-format diagnostics object into the camelCased
|
|
169
|
+
* {@link CacheDiagnostics} surfaced on {@link ModelCompletionResponse}.
|
|
170
|
+
* Preserves the API's three requested-response states losslessly:
|
|
171
|
+
* `null` (compared, no divergence) stays `null`; `cache_miss_reason: null`
|
|
172
|
+
* (comparison pending) becomes `{ cacheMissReason: null }`; a populated
|
|
173
|
+
* reason maps field-for-field. Exported for tests.
|
|
174
|
+
*/
|
|
175
|
+
export declare function normalizeCacheDiagnostics(diagnostics: AnthropicMessagesResponse['diagnostics']): CacheDiagnostics | null;
|
|
109
176
|
/**
|
|
110
177
|
* Clamp a requested `max_tokens` to the target model's real output ceiling from
|
|
111
178
|
* {@link ANTHROPIC_MODELS}. Anthropic returns HTTP 400 when `max_tokens` exceeds
|
|
@@ -480,13 +547,25 @@ export declare class AnthropicProvider implements IProvider {
|
|
|
480
547
|
private nextApiKey;
|
|
481
548
|
private buildHeaders;
|
|
482
549
|
/**
|
|
483
|
-
* The `anthropic-beta` header for
|
|
484
|
-
*
|
|
485
|
-
*
|
|
486
|
-
*
|
|
487
|
-
*
|
|
488
|
-
|
|
489
|
-
|
|
550
|
+
* The `anthropic-beta` header for every beta this request actually uses,
|
|
551
|
+
* comma-joined per the API convention. Currently:
|
|
552
|
+
*
|
|
553
|
+
* - `interleaved-thinking-2025-05-14` — when the request enables extended
|
|
554
|
+
* thinking outbound (`thinking` in the body) or replays captured thinking
|
|
555
|
+
* blocks from a prior assistant turn.
|
|
556
|
+
* - `cache-diagnosis-2026-04-07` — when the body carries a `diagnostics`
|
|
557
|
+
* field (see {@link ModelCompletionOptions.cacheDiagnostics}); the header
|
|
558
|
+
* must ride EVERY diagnosed turn or the next turn's lookup fails with
|
|
559
|
+
* `previous_message_not_found`.
|
|
560
|
+
* - `structured-outputs-2025-11-13` — when any tool definition in the body
|
|
561
|
+
* carries `strict: true` (the forced structured-output tool on
|
|
562
|
+
* strict-capable models; see modelSupportsStrictToolUse).
|
|
563
|
+
*
|
|
564
|
+
* Empty when no beta applies, so plain traffic is byte-for-byte unchanged.
|
|
565
|
+
*/
|
|
566
|
+
private betaHeaders;
|
|
567
|
+
/** True when any tool definition in the request carries `strict: true`. */
|
|
568
|
+
private payloadUsesStrictTools;
|
|
490
569
|
/** True when the request enables extended thinking or replays thinking blocks. */
|
|
491
570
|
private payloadUsesThinking;
|
|
492
571
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AnthropicProvider.d.ts","sourceRoot":"","sources":["../../../../../src/core/llm/providers/implementations/AnthropicProvider.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EACL,SAAS,EACT,WAAW,EAGX,sBAAsB,EACtB,uBAAuB,EAEvB,SAAS,EAET,wBAAwB,EACxB,yBAAyB,
|
|
1
|
+
{"version":3,"file":"AnthropicProvider.d.ts","sourceRoot":"","sources":["../../../../../src/core/llm/providers/implementations/AnthropicProvider.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,7 @@ import { AnthropicProviderError } from '../errors/AnthropicProviderError.js';
|
|
|
3
3
|
import { ApiKeyPool } from '../../../providers/ApiKeyPool.js';
|
|
4
4
|
import { resolveThinkingPayload } from '../model-thinking.js';
|
|
5
5
|
import { modelSupportsForcedToolChoice } from '../model-forced-tool-choice.js';
|
|
6
|
+
import { modelSupportsStrictToolUse } from '../model-strict-tool-use.js';
|
|
6
7
|
import { modelSupportsEffort, isEffortLevel } from '../model-effort.js';
|
|
7
8
|
import { computeRetryBackoffMs } from './retry-backoff.js';
|
|
8
9
|
import { recordCacheUsage } from './cacheLeakDetector.js';
|
|
@@ -43,6 +44,29 @@ export function modelSupportsTemperature(modelId) {
|
|
|
43
44
|
// lockstep with modelSupportsThinking.
|
|
44
45
|
return !/^claude-(opus-4-(7|8)|sonnet-5|fable-5)\b/i.test(modelId);
|
|
45
46
|
}
|
|
47
|
+
/**
|
|
48
|
+
* Normalize the wire-format diagnostics object into the camelCased
|
|
49
|
+
* {@link CacheDiagnostics} surfaced on {@link ModelCompletionResponse}.
|
|
50
|
+
* Preserves the API's three requested-response states losslessly:
|
|
51
|
+
* `null` (compared, no divergence) stays `null`; `cache_miss_reason: null`
|
|
52
|
+
* (comparison pending) becomes `{ cacheMissReason: null }`; a populated
|
|
53
|
+
* reason maps field-for-field. Exported for tests.
|
|
54
|
+
*/
|
|
55
|
+
export function normalizeCacheDiagnostics(diagnostics) {
|
|
56
|
+
if (diagnostics == null)
|
|
57
|
+
return null;
|
|
58
|
+
const reason = diagnostics.cache_miss_reason;
|
|
59
|
+
return {
|
|
60
|
+
cacheMissReason: reason == null
|
|
61
|
+
? null
|
|
62
|
+
: {
|
|
63
|
+
type: reason.type,
|
|
64
|
+
...(reason.cache_missed_input_tokens !== undefined && {
|
|
65
|
+
cacheMissedInputTokens: reason.cache_missed_input_tokens,
|
|
66
|
+
}),
|
|
67
|
+
},
|
|
68
|
+
};
|
|
69
|
+
}
|
|
46
70
|
// ---------------------------------------------------------------------------
|
|
47
71
|
// Known model catalog — used by listAvailableModels / getModelInfo
|
|
48
72
|
// ---------------------------------------------------------------------------
|
|
@@ -382,7 +406,15 @@ export class AnthropicProvider {
|
|
|
382
406
|
if (!this.isRetryableStreamError(lastError) || attempt === attempts - 1) {
|
|
383
407
|
throw lastError;
|
|
384
408
|
}
|
|
385
|
-
|
|
409
|
+
// Honor the server's Retry-After when the failed attempt carried one
|
|
410
|
+
// (429s from makeStreamRequest stash it on error.details) — parity
|
|
411
|
+
// with the non-stream retry path. Fall back to jittered backoff.
|
|
412
|
+
const retryAfterSec = lastError.details
|
|
413
|
+
?.retryAfterSec;
|
|
414
|
+
const sleepMs = typeof retryAfterSec === 'number' && Number.isFinite(retryAfterSec) && retryAfterSec > 0
|
|
415
|
+
? retryAfterSec * 1000
|
|
416
|
+
: computeRetryBackoffMs(attempt);
|
|
417
|
+
await new Promise(resolve => setTimeout(resolve, sleepMs));
|
|
386
418
|
}
|
|
387
419
|
}
|
|
388
420
|
throw lastError;
|
|
@@ -434,6 +466,7 @@ export class AnthropicProvider {
|
|
|
434
466
|
let outputTokens = 0;
|
|
435
467
|
let cacheCreationTokens;
|
|
436
468
|
let cacheReadTokens;
|
|
469
|
+
let diagnostics;
|
|
437
470
|
let sawMessageDelta = false;
|
|
438
471
|
const blocks = new Map();
|
|
439
472
|
for await (const rawEvent of this.parseSseStream(stream)) {
|
|
@@ -452,6 +485,8 @@ export class AnthropicProvider {
|
|
|
452
485
|
inputTokens = event.message.usage?.input_tokens ?? 0;
|
|
453
486
|
cacheCreationTokens = event.message.usage?.cache_creation_input_tokens;
|
|
454
487
|
cacheReadTokens = event.message.usage?.cache_read_input_tokens;
|
|
488
|
+
// Cache diagnostics ride message_start in streaming responses.
|
|
489
|
+
diagnostics = event.message.diagnostics;
|
|
455
490
|
break;
|
|
456
491
|
}
|
|
457
492
|
case 'content_block_start': {
|
|
@@ -550,6 +585,7 @@ export class AnthropicProvider {
|
|
|
550
585
|
...(cacheCreationTokens !== undefined && { cache_creation_input_tokens: cacheCreationTokens }),
|
|
551
586
|
...(cacheReadTokens !== undefined && { cache_read_input_tokens: cacheReadTokens }),
|
|
552
587
|
},
|
|
588
|
+
...(diagnostics !== undefined && { diagnostics }),
|
|
553
589
|
};
|
|
554
590
|
}
|
|
555
591
|
/**
|
|
@@ -1035,6 +1071,18 @@ export class AnthropicProvider {
|
|
|
1035
1071
|
const oc = payload.output_config ?? {};
|
|
1036
1072
|
payload.output_config = { ...oc, effort: options.effort };
|
|
1037
1073
|
}
|
|
1074
|
+
// --- Cache diagnostics (beta cache-diagnosis-2026-04-07) ---
|
|
1075
|
+
// Opt-in observability: the API compares this request against the one
|
|
1076
|
+
// referenced by previous_message_id and reports where the prompt prefix
|
|
1077
|
+
// diverged (cache_miss_reason on the response). `null` opts in on the
|
|
1078
|
+
// first turn with nothing to compare. The matching beta header is added
|
|
1079
|
+
// by betaHeaders() keyed off this payload field. Best-effort by API
|
|
1080
|
+
// contract — diagnostics never block or fail the request.
|
|
1081
|
+
if (options.cacheDiagnostics !== undefined) {
|
|
1082
|
+
payload.diagnostics = {
|
|
1083
|
+
previous_message_id: options.cacheDiagnostics.previousMessageId,
|
|
1084
|
+
};
|
|
1085
|
+
}
|
|
1038
1086
|
// --- Tool definitions ---
|
|
1039
1087
|
const tools = this.convertToolDefs(options.tools);
|
|
1040
1088
|
if (tools.length > 0) {
|
|
@@ -1066,7 +1114,20 @@ export class AnthropicProvider {
|
|
|
1066
1114
|
// against a direct provider.generateCompletion call that
|
|
1067
1115
|
// accidentally passes both responseFormat (structured-output
|
|
1068
1116
|
// marker) and a tools array.
|
|
1069
|
-
|
|
1117
|
+
// Guaranteed schema conformance where the model supports strict tool
|
|
1118
|
+
// use (structured-outputs surface, 4.5+ generations): the API
|
|
1119
|
+
// validates the tool input against input_schema server-side instead
|
|
1120
|
+
// of best-effort adherence, so long/adversarial generations can no
|
|
1121
|
+
// longer drift from the schema and fail the caller's Zod parse.
|
|
1122
|
+
// Older models reject the unknown field ("tools.0.strict: Extra
|
|
1123
|
+
// inputs are not permitted"), hence the capability gate. The
|
|
1124
|
+
// matching `structured-outputs-2025-11-13` beta header is emitted by
|
|
1125
|
+
// betaHeaders() whenever a payload's tools carry the flag.
|
|
1126
|
+
payload.tools = [{
|
|
1127
|
+
name: sf.tool.name,
|
|
1128
|
+
input_schema: sf.tool.input_schema,
|
|
1129
|
+
...(modelSupportsStrictToolUse(modelId) ? { strict: true } : {}),
|
|
1130
|
+
}];
|
|
1070
1131
|
payload.tool_choice = { type: 'tool', name: sf.tool.name };
|
|
1071
1132
|
}
|
|
1072
1133
|
// --- Forced tool_choice reconciliation ---
|
|
@@ -1508,6 +1569,9 @@ export class AnthropicProvider {
|
|
|
1508
1569
|
modelId: apiResponse.model,
|
|
1509
1570
|
choices: [choice],
|
|
1510
1571
|
usage,
|
|
1572
|
+
...(apiResponse.diagnostics !== undefined && {
|
|
1573
|
+
cacheDiagnostics: normalizeCacheDiagnostics(apiResponse.diagnostics),
|
|
1574
|
+
}),
|
|
1511
1575
|
};
|
|
1512
1576
|
}
|
|
1513
1577
|
/**
|
|
@@ -1656,7 +1720,7 @@ export class AnthropicProvider {
|
|
|
1656
1720
|
// race guarantees the await resolves within requestTimeout + 500ms.
|
|
1657
1721
|
const fetchPromise = fetch(url, {
|
|
1658
1722
|
method,
|
|
1659
|
-
headers: { ...headers, ...this.
|
|
1723
|
+
headers: { ...headers, ...this.betaHeaders(body), 'Content-Type': 'application/json', connection: 'close' },
|
|
1660
1724
|
body: JSON.stringify(body),
|
|
1661
1725
|
signal: controller.signal,
|
|
1662
1726
|
});
|
|
@@ -1776,7 +1840,7 @@ export class AnthropicProvider {
|
|
|
1776
1840
|
// guarantees the await ends even when the signal is ignored.
|
|
1777
1841
|
const fetchPromise = fetch(url, {
|
|
1778
1842
|
method: 'POST',
|
|
1779
|
-
headers: { ...headers, ...this.
|
|
1843
|
+
headers: { ...headers, ...this.betaHeaders(body), 'Content-Type': 'application/json' },
|
|
1780
1844
|
body: JSON.stringify(body),
|
|
1781
1845
|
signal: controller.signal,
|
|
1782
1846
|
});
|
|
@@ -1803,7 +1867,16 @@ export class AnthropicProvider {
|
|
|
1803
1867
|
if (response.status === 429) {
|
|
1804
1868
|
this.keyPool?.markExhausted(apiKey);
|
|
1805
1869
|
}
|
|
1806
|
-
|
|
1870
|
+
// Carry the server's Retry-After (seconds) on the error so the
|
|
1871
|
+
// stream retry loop (streamMessagesToResponse) can honor it — the
|
|
1872
|
+
// non-stream path already does; without this the stream path
|
|
1873
|
+
// re-hit a throttled endpoint on computed backoff and burned an
|
|
1874
|
+
// attempt the server told us was doomed.
|
|
1875
|
+
const retryAfterHeader = response.headers.get('retry-after');
|
|
1876
|
+
const retryAfterSec = retryAfterHeader ? parseInt(retryAfterHeader, 10) : NaN;
|
|
1877
|
+
throw new AnthropicProviderError(errorMessage, 'STREAM_CONNECTION_FAILED', response.status, errorData.error?.type, Number.isFinite(retryAfterSec) && retryAfterSec > 0
|
|
1878
|
+
? { ...errorData, retryAfterSec }
|
|
1879
|
+
: errorData);
|
|
1807
1880
|
}
|
|
1808
1881
|
if (!response.body) {
|
|
1809
1882
|
throw new AnthropicProviderError('Expected a stream response but body was null.', 'STREAM_BODY_NULL');
|
|
@@ -1844,16 +1917,37 @@ export class AnthropicProvider {
|
|
|
1844
1917
|
};
|
|
1845
1918
|
}
|
|
1846
1919
|
/**
|
|
1847
|
-
* The `anthropic-beta` header for
|
|
1848
|
-
*
|
|
1849
|
-
*
|
|
1850
|
-
*
|
|
1851
|
-
*
|
|
1920
|
+
* The `anthropic-beta` header for every beta this request actually uses,
|
|
1921
|
+
* comma-joined per the API convention. Currently:
|
|
1922
|
+
*
|
|
1923
|
+
* - `interleaved-thinking-2025-05-14` — when the request enables extended
|
|
1924
|
+
* thinking outbound (`thinking` in the body) or replays captured thinking
|
|
1925
|
+
* blocks from a prior assistant turn.
|
|
1926
|
+
* - `cache-diagnosis-2026-04-07` — when the body carries a `diagnostics`
|
|
1927
|
+
* field (see {@link ModelCompletionOptions.cacheDiagnostics}); the header
|
|
1928
|
+
* must ride EVERY diagnosed turn or the next turn's lookup fails with
|
|
1929
|
+
* `previous_message_not_found`.
|
|
1930
|
+
* - `structured-outputs-2025-11-13` — when any tool definition in the body
|
|
1931
|
+
* carries `strict: true` (the forced structured-output tool on
|
|
1932
|
+
* strict-capable models; see modelSupportsStrictToolUse).
|
|
1933
|
+
*
|
|
1934
|
+
* Empty when no beta applies, so plain traffic is byte-for-byte unchanged.
|
|
1852
1935
|
*/
|
|
1853
|
-
|
|
1854
|
-
|
|
1855
|
-
|
|
1856
|
-
|
|
1936
|
+
betaHeaders(body) {
|
|
1937
|
+
const betas = [];
|
|
1938
|
+
if (this.payloadUsesThinking(body))
|
|
1939
|
+
betas.push('interleaved-thinking-2025-05-14');
|
|
1940
|
+
if (body.diagnostics !== undefined)
|
|
1941
|
+
betas.push('cache-diagnosis-2026-04-07');
|
|
1942
|
+
if (this.payloadUsesStrictTools(body))
|
|
1943
|
+
betas.push('structured-outputs-2025-11-13');
|
|
1944
|
+
return betas.length > 0 ? { 'anthropic-beta': betas.join(',') } : {};
|
|
1945
|
+
}
|
|
1946
|
+
/** True when any tool definition in the request carries `strict: true`. */
|
|
1947
|
+
payloadUsesStrictTools(body) {
|
|
1948
|
+
const tools = body.tools;
|
|
1949
|
+
return (Array.isArray(tools) &&
|
|
1950
|
+
tools.some(t => t != null && typeof t === 'object' && t.strict === true));
|
|
1857
1951
|
}
|
|
1858
1952
|
/** True when the request enables extended thinking or replays thinking blocks. */
|
|
1859
1953
|
payloadUsesThinking(body) {
|