@absolutejs/ai 0.3.4 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/changelog.json +24 -0
- package/dist/ai/index.js +89 -7
- package/dist/ai/index.js.map +4 -4
- package/dist/ai/providers/anthropic.js +71 -3
- package/dist/ai/providers/anthropic.js.map +3 -3
- package/dist/ai/providers/openrouter.js +71 -3
- package/dist/ai/providers/openrouter.js.map +3 -3
- package/dist/types/ai.d.ts +15 -1
- package/dist/types/anthropic.d.ts +2 -0
- package/package.json +1 -1
|
@@ -876,14 +876,79 @@ var getNumber = (obj, key) => {
|
|
|
876
876
|
}
|
|
877
877
|
return 0;
|
|
878
878
|
};
|
|
879
|
+
var TOOL_INPUT_PROGRESS_CHARS = 2048;
|
|
880
|
+
var TOOL_INPUT_FIELD_MAX_CHARS = 200;
|
|
881
|
+
var readJsonString = (json, start) => {
|
|
882
|
+
for (let index = start + 1;index < json.length; index += 1) {
|
|
883
|
+
if (json[index] === "\\")
|
|
884
|
+
index += 1;
|
|
885
|
+
else if (json[index] === '"')
|
|
886
|
+
return { end: index + 1, raw: json.slice(start + 1, index) };
|
|
887
|
+
}
|
|
888
|
+
return;
|
|
889
|
+
};
|
|
890
|
+
var decodeJsonString = (raw) => {
|
|
891
|
+
try {
|
|
892
|
+
const value = JSON.parse(`"${raw}"`);
|
|
893
|
+
return typeof value === "string" ? value : undefined;
|
|
894
|
+
} catch {
|
|
895
|
+
return;
|
|
896
|
+
}
|
|
897
|
+
};
|
|
898
|
+
var completeStringFields = (partialJson) => {
|
|
899
|
+
const fields = {};
|
|
900
|
+
let depth = 0;
|
|
901
|
+
let key;
|
|
902
|
+
let index = 0;
|
|
903
|
+
while (index < partialJson.length) {
|
|
904
|
+
const character = partialJson[index];
|
|
905
|
+
if (character === '"') {
|
|
906
|
+
const text = readJsonString(partialJson, index);
|
|
907
|
+
if (!text)
|
|
908
|
+
break;
|
|
909
|
+
if (depth === 1 && key === undefined) {
|
|
910
|
+
const after = partialJson.slice(text.end).trimStart();
|
|
911
|
+
if (after.startsWith(":"))
|
|
912
|
+
key = text.raw;
|
|
913
|
+
} else if (depth === 1 && key !== undefined) {
|
|
914
|
+
const value = decodeJsonString(text.raw);
|
|
915
|
+
if (value !== undefined && value.length <= TOOL_INPUT_FIELD_MAX_CHARS)
|
|
916
|
+
fields[key] = value;
|
|
917
|
+
key = undefined;
|
|
918
|
+
}
|
|
919
|
+
index = text.end;
|
|
920
|
+
continue;
|
|
921
|
+
}
|
|
922
|
+
if (character === "{" || character === "[")
|
|
923
|
+
depth += 1;
|
|
924
|
+
else if (character === "}" || character === "]")
|
|
925
|
+
depth -= 1;
|
|
926
|
+
else if (character === "," && depth === 1)
|
|
927
|
+
key = undefined;
|
|
928
|
+
index += 1;
|
|
929
|
+
}
|
|
930
|
+
return fields;
|
|
931
|
+
};
|
|
932
|
+
var toolInputProgress = (state) => {
|
|
933
|
+
state.toolInputReported = state.toolInputJson.length;
|
|
934
|
+
return {
|
|
935
|
+
fields: completeStringFields(state.toolInputJson),
|
|
936
|
+
id: state.currentToolId,
|
|
937
|
+
name: state.currentToolName,
|
|
938
|
+
receivedChars: state.toolInputJson.length,
|
|
939
|
+
type: "tool_input"
|
|
940
|
+
};
|
|
941
|
+
};
|
|
879
942
|
var handleContentBlockStart = (parsed, state) => {
|
|
880
943
|
const block = getRecord(parsed, "content_block");
|
|
881
944
|
if (block && block.type === "tool_use") {
|
|
882
945
|
state.currentToolId = getString(block, "id");
|
|
883
946
|
state.currentToolName = getString(block, "name");
|
|
884
947
|
state.toolInputJson = "";
|
|
948
|
+
state.toolInputReported = 0;
|
|
885
949
|
state.isThinkingBlock = false;
|
|
886
950
|
state.currentProviderBlock = undefined;
|
|
951
|
+
return toolInputProgress(state);
|
|
887
952
|
} else if (block && block.type === "thinking") {
|
|
888
953
|
state.isThinkingBlock = true;
|
|
889
954
|
state.thinkingSignature = "";
|
|
@@ -893,6 +958,7 @@ var handleContentBlockStart = (parsed, state) => {
|
|
|
893
958
|
state.currentProviderBlock = block && block.type !== "text" ? { ...block } : undefined;
|
|
894
959
|
state.providerBlockInputJson = "";
|
|
895
960
|
}
|
|
961
|
+
return;
|
|
896
962
|
};
|
|
897
963
|
var handleContentBlockDelta = (parsed, state) => {
|
|
898
964
|
const delta = getRecord(parsed, "delta");
|
|
@@ -927,6 +993,8 @@ var handleContentBlockDelta = (parsed, state) => {
|
|
|
927
993
|
state.providerBlockInputJson += getString(delta, "partial_json");
|
|
928
994
|
} else {
|
|
929
995
|
state.toolInputJson += getString(delta, "partial_json");
|
|
996
|
+
if (state.toolInputJson.length - state.toolInputReported >= TOOL_INPUT_PROGRESS_CHARS)
|
|
997
|
+
return toolInputProgress(state);
|
|
930
998
|
}
|
|
931
999
|
}
|
|
932
1000
|
if (delta.type === "signature_delta") {
|
|
@@ -1046,8 +1114,7 @@ var handleError = (parsed, state) => {
|
|
|
1046
1114
|
var processEvent = (eventType, parsed, state) => {
|
|
1047
1115
|
switch (eventType) {
|
|
1048
1116
|
case "content_block_start": {
|
|
1049
|
-
handleContentBlockStart(parsed, state);
|
|
1050
|
-
return;
|
|
1117
|
+
return handleContentBlockStart(parsed, state);
|
|
1051
1118
|
}
|
|
1052
1119
|
case "content_block_delta": {
|
|
1053
1120
|
return handleContentBlockDelta(parsed, state);
|
|
@@ -1150,6 +1217,7 @@ async function* parseSSEStream(body, providerName, signal) {
|
|
|
1150
1217
|
stopReason: "",
|
|
1151
1218
|
thinkingSignature: "",
|
|
1152
1219
|
toolInputJson: "",
|
|
1220
|
+
toolInputReported: 0,
|
|
1153
1221
|
usage: undefined,
|
|
1154
1222
|
providerName,
|
|
1155
1223
|
providerBlockInputJson: ""
|
|
@@ -1278,5 +1346,5 @@ export {
|
|
|
1278
1346
|
anthropic
|
|
1279
1347
|
};
|
|
1280
1348
|
|
|
1281
|
-
//# debugId=
|
|
1349
|
+
//# debugId=5326E290D6DB9BD864756E2164756E21
|
|
1282
1350
|
//# sourceMappingURL=anthropic.js.map
|
|
@@ -8,9 +8,9 @@
|
|
|
8
8
|
"import type {\n AIChunk,\n AIProviderConfig,\n AIProviderStreamParams,\n AIUsage,\n} from \"../../../types/ai\";\nimport { withResilience } from \"../resilience\";\n\n// Every provider factory routes through here, so this is also where the\n// automatic retry + circuit-breaker layer is applied — wrapping the raw provider\n// BENEATH the usage/span tap so onUsage/onSpan fire once, for the attempt that\n// actually streamed.\nexport const instrumentAIProvider = (\n provider: AIProviderConfig,\n providerName?: string,\n): AIProviderConfig => {\n const resilient = withResilience(provider, providerName);\n\n return {\n ...provider,\n stream: (params: AIProviderStreamParams) => {\n if (!params.onUsage && !params.onSpan) {\n return resilient.stream(params);\n }\n return tapStream(resilient.stream(params), params, providerName);\n },\n };\n};\n\nasync function* tapStream(\n source: AsyncIterable<AIChunk>,\n params: AIProviderStreamParams,\n providerName?: string,\n): AsyncIterable<AIChunk> {\n const startedAt = Date.now();\n let lastUsage: AIUsage | undefined;\n try {\n for await (const chunk of source) {\n if (chunk.type === \"done\" && chunk.usage) {\n lastUsage = chunk.usage;\n }\n yield chunk;\n }\n } finally {\n if (lastUsage && params.onUsage) {\n try {\n params.onUsage({\n ...lastUsage,\n model: params.model,\n provider: providerName,\n });\n } catch {\n // operator-supplied callback errors must not affect stream consumers\n }\n }\n if (params.onSpan) {\n try {\n params.onSpan({\n durationMs: Date.now() - startedAt,\n model: params.model,\n provider: providerName,\n usage: lastUsage,\n });\n } catch {\n // same\n }\n }\n }\n}\n",
|
|
9
9
|
"import type { ReasoningEffort } from \"../../../types/ai\";\n\nexport const REASONING_EFFORTS = [\n \"none\",\n \"minimal\",\n \"low\",\n \"medium\",\n \"high\",\n \"xhigh\",\n \"max\",\n] as const;\nexport type ReasoningSelection = \"auto\" | ReasoningEffort;\nexport type ModelReasoning = {\n kind: \"effort\" | \"budget\" | \"fixed\";\n efforts: readonly ReasoningEffort[];\n description: string;\n source: string;\n};\nexport const isReasoningSelection = (\n value: unknown,\n): value is ReasoningSelection =>\n value === \"auto\" || REASONING_EFFORTS.some((effort) => effort === value);\nconst profile = (\n kind: ModelReasoning[\"kind\"],\n efforts: readonly ReasoningEffort[],\n description: string,\n source: string,\n): ModelReasoning => ({ kind, efforts, description, source });\nconst claude = profile(\n \"effort\",\n [\"low\", \"medium\", \"high\", \"xhigh\", \"max\"],\n \"More thinking for harder problems; higher settings can take longer and use more credits.\",\n \"https://platform.claude.com/docs/en/build-with-claude/effort\",\n);\nconst claude46 = {\n ...claude,\n efforts: [\"low\", \"medium\", \"high\", \"max\"] as const,\n};\nconst opus45 = { ...claude, efforts: [\"low\", \"medium\", \"high\"] as const };\nconst haiku = profile(\n \"budget\",\n [\"none\", \"low\", \"medium\", \"high\"],\n \"Thinking-token budget: Low 2,048; Medium 8,192; High 16,384. Actual usage can be lower.\",\n \"https://platform.claude.com/docs/en/build-with-claude/extended-thinking\",\n);\nconst gpt = profile(\n \"effort\",\n [\"none\", \"low\", \"medium\", \"high\", \"xhigh\", \"max\"],\n claude.description,\n \"https://developers.openai.com/api/docs/models/gpt-5.6-sol\",\n);\nconst gemini = profile(\n \"effort\",\n [\"low\", \"medium\", \"high\"],\n claude.description,\n \"https://ai.google.dev/gemini-api/docs/openai\",\n);\nconst deepseek = profile(\n \"effort\",\n [\"none\", \"low\", \"high\", \"max\"],\n claude.description,\n \"https://api-docs.deepseek.com/guides/thinking_mode/\",\n);\nconst mistral = profile(\n \"effort\",\n [\"none\", \"high\"],\n \"Minimal thinking or full reasoning. This model does not offer intermediate effort levels.\",\n \"https://docs.mistral.ai/studio/conversations/reasoning\",\n);\nconst qwen = profile(\n \"budget\",\n [\"none\", \"low\", \"medium\", \"high\"],\n haiku.description,\n \"https://help.aliyun.com/en/model-studio/deep-thinking\",\n);\n/** Exact reviewed IDs; unknown models expose only the provider default. Reviewed 2026-09-20;\n * Anthropic effort levels re-checked against the Models API 2026-09-25. */\nexport const MODEL_REASONING: Readonly<Record<string, ModelReasoning>> = {\n \"anthropic:claude-opus-5-5\": claude,\n \"anthropic:claude-fable-5-1\": claude,\n \"anthropic:claude-opus-5\": claude,\n \"anthropic:claude-sonnet-5\": claude,\n \"anthropic:claude-fable-5\": claude,\n \"anthropic:claude-opus-4-8\": claude,\n \"anthropic:claude-opus-4-7\": claude,\n \"anthropic:claude-sonnet-4-6\": claude46,\n \"anthropic:claude-opus-4-6\": claude46,\n \"anthropic:claude-opus-4-5\": opus45,\n \"anthropic:claude-haiku-4-5\": haiku,\n \"anthropic:claude-sonnet-4-5\": haiku,\n \"openai:gpt-6-astra\": {\n ...gpt,\n efforts: [\"low\", \"medium\", \"high\", \"xhigh\", \"max\"],\n source: \"https://developers.openai.com/api/docs/models/gpt-6-astra\",\n },\n \"openai:gpt-5.6-sol\": gpt,\n \"openai:gpt-5.6-terra\": gpt,\n \"openai:gpt-5.6-luna\": gpt,\n \"google:gemini-3.8-flash\": gemini,\n \"google:gemini-3.1-pro-preview\": gemini,\n \"google:gemini-2.5-flash\": profile(\n \"budget\",\n [\"none\", \"low\", \"medium\", \"high\"],\n \"Thinking-token budget: Low 1,024; Medium 8,192; High 24,576.\",\n gemini.source,\n ),\n \"xai:grok-4.6\": profile(\n \"effort\",\n [\"low\", \"medium\", \"high\", \"xhigh\"],\n \"Always reasons. Choose how much thinking it should do.\",\n \"https://docs.x.ai/developers/model-capabilities/text/reasoning\",\n ),\n \"deepseek:deepseek-flash\": deepseek,\n \"deepseek:deepseek-v4-pro\": deepseek,\n \"mistral:mistral-medium-3-5\": mistral,\n \"mistral:mistral-small-latest\": mistral,\n \"alibaba:qwen3.8-max\": qwen,\n \"alibaba:qwen3.7-plus\": qwen,\n \"moonshot:kimi-k3\": profile(\n \"effort\",\n [\"low\", \"high\", \"max\"],\n \"Always reasons. Choose how much thinking it should do.\",\n \"https://platform.kimi.ai/docs/guide/kimi-k3-quickstart\",\n ),\n \"moonshot:kimi-k2.7-code\": profile(\n \"fixed\",\n [],\n \"Thinking is always enabled; this model has no documented adjustable effort control.\",\n \"https://www.kimi.ai/resources/kimi-k2-7-code\",\n ),\n};\nexport const getModelReasoning = (\n provider: string,\n model: string,\n): ModelReasoning | undefined => MODEL_REASONING[`${provider}:${model}`];\nexport const supportsReasoningSelection = (\n provider: string,\n model: string,\n selection: ReasoningSelection,\n): boolean =>\n selection === \"auto\" ||\n Boolean(getModelReasoning(provider, model)?.efforts.includes(selection));\nexport const reasoningSelectionLabel = (\n selection: ReasoningSelection,\n provider?: string,\n): string => {\n if (selection === \"auto\") return \"Auto\";\n if (selection === \"none\") return provider === \"mistral\" ? \"Minimal\" : \"Off\";\n if (selection === \"xhigh\") return \"Extra high\";\n return selection.charAt(0).toUpperCase() + selection.slice(1);\n};\n",
|
|
10
10
|
"import type { ReasoningConfig, ReasoningEffort } from \"../../../types/ai\";\n\nimport { getModelReasoning } from \"../models/reasoning\";\n\nconst EFFORT_ORDER: ReasoningEffort[] = [\n \"none\",\n \"minimal\",\n \"low\",\n \"medium\",\n \"high\",\n \"xhigh\",\n \"max\",\n];\n\n// Anthropic models that take adaptive thinking + output_config.effort.\nconst ANTHROPIC_EFFORT = [\n /opus-4-[5-8]/,\n /sonnet-4-6/,\n /fable-5/,\n /mythos-5/,\n /opus-5/,\n /sonnet-5/,\n];\n// Anthropic models with adaptive thinking but NO effort parameter. Reserved:\n// only add a model here once it's CONFIRMED to accept adaptive thinking without\n// `output_config.effort`. Unconfirmed models fall through to \"none\" (no-op) so\n// we never risk a 400 — Haiku 4.5, for instance, rejects `effort` and is not\n// confirmed for adaptive, so it stays out.\nconst ANTHROPIC_ADAPTIVE_ONLY: RegExp[] = [];\n// Anthropic models that use legacy extended thinking (budget_tokens).\nconst ANTHROPIC_LEGACY_THINKING = [\n /haiku-4-5/,\n /sonnet-4-5/,\n /sonnet-4-0/,\n /sonnet-4-2025/,\n /opus-4-0/,\n /opus-4-1/,\n /opus-4-2025/,\n /3-7-sonnet/,\n];\n// Anthropic models that REMOVED temperature/top_p/top_k (sending them 400s).\nconst ANTHROPIC_NO_SAMPLING = [\n /opus-4-[78]/,\n /fable-5/,\n /mythos-5/,\n /opus-5/,\n /sonnet-5/,\n];\n// Anthropic models that support the `max` effort tier (others clamp max→high).\nconst ANTHROPIC_MAX_EFFORT = [\n /opus-4-[678]/,\n /sonnet-4-6/,\n /fable-5/,\n /mythos-5/,\n];\n// OpenAI reasoning models (effort-capable); everything else ignores effort.\nconst OPENAI_REASONING = [/(^|[^a-z])o[1345](-|$)/, /gpt-[56]/];\n// OpenAI reasoning models that support the `minimal` tier (others clamp →low).\nconst OPENAI_MINIMAL_EFFORT = [/gpt-5/];\n\nconst matches = (model: string, patterns: RegExp[]) =>\n patterns.some((pattern) => pattern.test(model));\n\nexport type AnthropicReasoningMode = \"effort\" | \"adaptive\" | \"legacy\" | \"none\";\n\nexport const anthropicReasoningMode = (\n model: string,\n): AnthropicReasoningMode => {\n if (matches(model, ANTHROPIC_EFFORT)) return \"effort\";\n if (matches(model, ANTHROPIC_ADAPTIVE_ONLY)) return \"adaptive\";\n if (matches(model, ANTHROPIC_LEGACY_THINKING)) return \"legacy\";\n\n return \"none\";\n};\n\n/** Modern Anthropic + Fable/Mythos reject temperature/top_p/top_k entirely. */\nexport const anthropicSupportsSampling = (model: string) =>\n !matches(model, ANTHROPIC_NO_SAMPLING);\n\nexport const isOpenAIReasoningModel = (model: string) =>\n matches(model, OPENAI_REASONING);\n\n// effort → legacy thinking budget (tokens). Kept under typical max_tokens; the\n// Anthropic provider raises max_tokens to fit when thinking is enabled.\nconst EFFORT_BUDGET: Record<ReasoningEffort, number> = {\n none: 0,\n xhigh: 24576,\n high: 16384,\n low: 2048,\n max: 32768,\n medium: 8192,\n minimal: 1024,\n};\n\n// budget tokens → nearest effort (when a caller gave only budgetTokens but the\n// target model is effort-based).\nconst budgetToEffort = (budget: number): ReasoningEffort => {\n if (budget <= 2048) return \"low\";\n if (budget <= 8192) return \"medium\";\n if (budget <= 16384) return \"high\";\n\n return \"max\";\n};\n\n/** The portable effort a config asks for, deriving from budgetTokens if needed. */\nexport const resolveEffort = (\n reasoning: ReasoningConfig,\n): ReasoningEffort | null => {\n if (reasoning.effort) return reasoning.effort;\n if (typeof reasoning.budgetTokens === \"number\") {\n return budgetToEffort(reasoning.budgetTokens);\n }\n\n return null;\n};\n\n/** The budget a config asks for, deriving from effort if needed. */\nexport const resolveBudgetTokens = (\n reasoning: ReasoningConfig,\n): number | null => {\n if (typeof reasoning.budgetTokens === \"number\") return reasoning.budgetTokens;\n if (reasoning.effort) return EFFORT_BUDGET[reasoning.effort];\n\n return null;\n};\n\nconst clampEffort = (\n effort: ReasoningEffort,\n allowed: ReasoningEffort[],\n): ReasoningEffort => {\n if (allowed.includes(effort)) return effort;\n // Walk DOWN the order to the nearest allowed tier (never silently escalate).\n const idx = EFFORT_ORDER.indexOf(effort);\n for (let lower = idx - 1; lower >= 0; lower -= 1) {\n const candidate = EFFORT_ORDER[lower];\n if (candidate && allowed.includes(candidate)) return candidate;\n }\n\n return allowed[0] ?? effort;\n};\n\n/** Anthropic `output_config.effort` value for an effort-capable model, or null. */\nexport const anthropicEffortValue = (\n model: string,\n reasoning: ReasoningConfig,\n) => {\n const effort = resolveEffort(reasoning);\n if (!effort) return null;\n const known = getModelReasoning(\"anthropic\", model);\n if (known?.kind === \"effort\") return clampEffort(effort, [...known.efforts]);\n const allowed: ReasoningEffort[] = matches(model, ANTHROPIC_MAX_EFFORT)\n ? [\"low\", \"medium\", \"high\", \"max\"]\n : [\"low\", \"medium\", \"high\"];\n\n return clampEffort(effort, allowed);\n};\n\n/** OpenAI `reasoning.effort` value for a reasoning model, or null. */\nexport const openaiEffortValue = (\n model: string,\n reasoning: ReasoningConfig,\n) => {\n if (!isOpenAIReasoningModel(model)) return null;\n const effort = resolveEffort(reasoning);\n if (!effort) return null;\n const known = getModelReasoning(\"openai\", model);\n if (known) return clampEffort(effort, [...known.efforts]);\n const allowed: ReasoningEffort[] = matches(model, OPENAI_MINIMAL_EFFORT)\n ? [\"minimal\", \"low\", \"medium\", \"high\"]\n : [\"low\", \"medium\", \"high\"];\n // OpenAI has no `max`; clamp it to `high`.\n const requested = effort === \"max\" ? \"high\" : effort;\n\n return clampEffort(requested, allowed);\n};\n\n/** Provider-specific Chat Completions controls. Never send a guessed parameter. */\nexport const compatibleReasoningBody = (\n provider: string,\n model: string,\n reasoning?: ReasoningConfig,\n): Record<string, unknown> => {\n if (!reasoning) return {};\n const known = getModelReasoning(provider, model);\n const effort = resolveEffort(reasoning);\n if (!known || !effort) return {};\n if (!known.efforts.includes(effort))\n throw new Error(\n `Unsupported reasoning effort ${effort} for ${provider}:${model}`,\n );\n if (provider === \"alibaba\")\n return effort === \"none\"\n ? { enable_thinking: false }\n : {\n enable_thinking: true,\n thinking_budget: resolveBudgetTokens(reasoning),\n };\n if (provider === \"deepseek\")\n return effort === \"none\"\n ? { thinking: { type: \"disabled\" } }\n : { thinking: { type: \"enabled\" }, reasoning_effort: effort };\n return { reasoning_effort: effort };\n};\nexport const geminiThinkingConfig = (\n model: string,\n reasoning?: ReasoningConfig,\n): Record<string, unknown> | undefined => {\n if (!reasoning) return undefined;\n const profile = getModelReasoning(\"google\", model);\n const effort = resolveEffort(reasoning);\n if (!profile || !effort) return undefined;\n if (!profile.efforts.includes(effort))\n throw new Error(`Unsupported reasoning effort ${effort} for ${model}`);\n if (profile.kind === \"effort\") return { thinkingLevel: effort };\n const budgets: Partial<Record<ReasoningEffort, number>> = {\n none: 0,\n low: 1024,\n medium: 8192,\n high: 24576,\n };\n return { thinkingBudget: reasoning.budgetTokens ?? budgets[effort] };\n};\n",
|
|
11
|
-
"import type {\n AIChunk,\n AIProviderConfig,\n AIProviderContentBlock,\n AIProviderMessage,\n AIProviderStreamParams,\n AIProviderToolDefinition,\n AIUsage,\n} from \"../../../types/ai\";\nimport type {\n AnthropicConfig,\n AnthropicMessage,\n AnthropicRequestOptions,\n AnthropicSSEState,\n AnthropicServerTool,\n} from \"../../../types/anthropic\";\n\n// Opportunistic HTTP/2 multiplexing for outbound HTTPS (Bun 1.3.14+).\n// The `protocol` option lands in @types/bun 1.3.14; widen locally for now.\n// Hard-skip on non-HTTPS — Bun's h2 client throws HTTP2Unsupported on h2c.\ntype H2Init = RequestInit & { protocol?: \"http2\" };\nconst h2IfHttps = (url: string): H2Init =>\n url.startsWith(\"https://\") ? { protocol: \"http2\" } : {};\n\nimport {\n cacheModelLimits,\n capacityJson,\n positiveTokenLimit,\n inputTokenCount,\n} from \"../inputCapacity\";\nimport { instrumentAIProvider } from \"./instrumentation\";\nimport { ProviderError } from \"../errors/providerError\";\nimport {\n anthropicEffortValue,\n anthropicReasoningMode,\n anthropicSupportsSampling,\n resolveBudgetTokens,\n} from \"./reasoning\";\n\nconst DEFAULT_BASE_URL = \"https://api.anthropic.com\";\nconst API_VERSION = \"2023-06-01\";\nconst DEFAULT_MAX_TOKENS = 32000;\nconst EVENT_PREFIX_LENGTH = 7;\nconst DATA_PREFIX_LENGTH = 6;\n\nconst EMPTY_CHUNKS: AIChunk[] = [];\n\nconst isRecord = (val: unknown): val is Record<string, unknown> =>\n typeof val === \"object\" && val !== null;\n\nconst mapContentBlock = (block: AIProviderContentBlock) => {\n if (block.type === \"thinking\") {\n return {\n signature: block.signature,\n thinking: block.thinking,\n type: \"thinking\",\n };\n }\n\n if (block.type === \"image\") {\n return {\n source: block.source,\n type: \"image\",\n };\n }\n\n if (block.type === \"document\") {\n return {\n source: block.source,\n type: \"document\",\n };\n }\n\n if (block.type === \"tool_result\") {\n return {\n content: block.content,\n tool_use_id: block.tool_use_id,\n type: \"tool_result\",\n };\n }\n\n if (block.type === \"tool_use\") {\n if (block.providerData) return { ...block.providerData };\n return {\n id: block.id,\n input: block.input,\n name: block.name,\n type: \"tool_use\",\n };\n }\n\n if (block.type === \"audio\" || block.type === \"video\") {\n throw new Error(`Anthropic does not support ${block.type} content blocks`);\n }\n\n if (block.type === \"provider_data\") {\n return { ...block.data };\n }\n\n return { text: block.content, type: \"text\" };\n};\n\nconst mapMessage = (msg: AIProviderMessage): AnthropicMessage => ({\n content:\n typeof msg.content === \"string\"\n ? msg.content\n : msg.content.map(mapContentBlock),\n role: msg.role === \"system\" ? \"user\" : msg.role,\n});\n\nconst mapToolDefinition = (tool: AIProviderToolDefinition) => ({\n description: tool.description,\n input_schema: tool.input_schema,\n name: tool.name,\n});\n\nconst requestOptionsFor = (\n params: AIProviderStreamParams,\n): AnthropicRequestOptions => {\n const raw = params.providerOptions?.anthropic;\n if (raw === undefined) return {};\n if (!isRecord(raw)) {\n throw new Error(\"providerOptions.anthropic must be an object\");\n }\n if (raw.serverTools !== undefined && !Array.isArray(raw.serverTools)) {\n throw new Error(\"Anthropic serverTools must be an array\");\n }\n\n return raw as AnthropicRequestOptions;\n};\n\nconst assertDomains = (domains: readonly string[] | undefined) => {\n for (const domain of domains ?? []) {\n if (!domain || domain.includes(\"://\")) {\n throw new Error(\n \"Anthropic web-search domains must be non-empty bare domains without a scheme\",\n );\n }\n }\n};\n\nconst mapServerTool = (tool: AnthropicServerTool) => {\n const parameters = tool.parameters ?? {};\n if (parameters.allowedDomains && parameters.blockedDomains) {\n throw new Error(\n \"Anthropic web search accepts allowedDomains or blockedDomains, not both\",\n );\n }\n assertDomains(parameters.allowedDomains);\n assertDomains(parameters.blockedDomains);\n if (\n parameters.maxUses !== undefined &&\n (!Number.isInteger(parameters.maxUses) || parameters.maxUses < 1)\n ) {\n throw new Error(\"Anthropic web-search maxUses must be a positive integer\");\n }\n if (\n parameters.responseInclusion !== undefined &&\n parameters.version !== \"web_search_20260318\"\n ) {\n throw new Error(\n \"Anthropic web-search responseInclusion requires web_search_20260318\",\n );\n }\n const location = parameters.userLocation;\n if (\n location &&\n !location.city &&\n !location.country &&\n !location.region &&\n !location.timezone\n ) {\n throw new Error(\n \"Anthropic web-search userLocation requires a city, region, country, or timezone\",\n );\n }\n\n return {\n ...(parameters.allowedCallers\n ? { allowed_callers: [...parameters.allowedCallers] }\n : {}),\n ...(parameters.allowedDomains\n ? { allowed_domains: [...parameters.allowedDomains] }\n : {}),\n ...(parameters.blockedDomains\n ? { blocked_domains: [...parameters.blockedDomains] }\n : {}),\n ...(parameters.maxUses === undefined\n ? {}\n : { max_uses: parameters.maxUses }),\n name: \"web_search\",\n ...(parameters.responseInclusion\n ? { response_inclusion: parameters.responseInclusion }\n : {}),\n type: parameters.version ?? \"web_search_20250305\",\n ...(location\n ? {\n user_location: {\n ...(location.city ? { city: location.city } : {}),\n ...(location.country ? { country: location.country } : {}),\n ...(location.region ? { region: location.region } : {}),\n ...(location.timezone ? { timezone: location.timezone } : {}),\n type: \"approximate\",\n },\n }\n : {}),\n };\n};\n\n// Attach an ephemeral cache breakpoint to the final content block of a message.\n// `content` may be a bare string (collapse to a single cached text block) or an\n// array of blocks (clone the last block and tag it). Returns a new message; the\n// input is left untouched.\nconst cacheLastContentBlock = (msg: AnthropicMessage): AnthropicMessage => {\n const cacheControl = { type: \"ephemeral\" };\n\n if (typeof msg.content === \"string\") {\n return {\n content: [\n { cache_control: cacheControl, text: msg.content, type: \"text\" },\n ],\n role: msg.role,\n };\n }\n\n if (msg.content.length === 0) return msg;\n\n const blocks = [...msg.content];\n blocks[blocks.length - 1] = {\n ...blocks[blocks.length - 1],\n cache_control: cacheControl,\n };\n\n return { content: blocks, role: msg.role };\n};\n\nconst buildRequestBody = (\n params: AIProviderStreamParams,\n configuredMax: number,\n configCaching: boolean,\n) => {\n // Per-call override wins over the provider default, so a caller can opt a\n // known one-shot out of the 1.25x cache-write (or force caching on).\n const caching = params.promptCaching ?? configCaching;\n // The system block specifically can be overridden by the legacy\n // `cacheSystemPrompt` (tri-state: true/false force it; undefined follows the\n // effective `caching`).\n const cacheSystem = params.cacheSystemPrompt ?? caching;\n const options = requestOptionsFor(params);\n\n const messages: AnthropicMessage[] = params.messages\n .filter((msg) => msg.role !== \"system\")\n .map(mapMessage);\n\n // Rolling prefix breakpoints: when there is prior history, mark the final\n // content block of the last message so the next turn reads this turn's\n // prefix from cache. Skipped on the first turn (nothing to reuse yet).\n //\n // Also mark the latest earlier user message: in an agent loop that is where\n // the previous request's breakpoint sat, so this request finds that entry\n // by exact position. Relying on the API's automatic lookback alone missed\n // it intermittently: a production Studio build re-wrote its whole history\n // (40-53k tokens) on 7 of 48 requests while the identical prefix was\n // cached, and those writes were half the build's cost. Tools, system and\n // these two keep within Anthropic's limit of four breakpoints.\n if (caching && messages.length > 1) {\n const lastIndex = messages.length - 1;\n const last = messages[lastIndex];\n if (last) {\n messages[lastIndex] = cacheLastContentBlock(last);\n }\n const previousUserIndex = messages.findLastIndex(\n (message, index) => index < lastIndex - 1 && message.role === \"user\",\n );\n const previous = messages[previousUserIndex];\n if (previous) {\n messages[previousUserIndex] = cacheLastContentBlock(previous);\n }\n }\n\n // Per-call `params.maxTokens` wins over the per-provider configured default.\n const max =\n typeof params.maxTokens === \"number\" ? params.maxTokens : configuredMax;\n\n const body: Record<string, unknown> = {\n max_tokens: max,\n messages,\n model: params.model,\n stream: true,\n };\n\n if (params.systemPrompt) {\n body.system = cacheSystem\n ? [\n {\n cache_control: { type: \"ephemeral\" },\n text: params.systemPrompt,\n type: \"text\",\n },\n ]\n : params.systemPrompt;\n }\n\n const clientTools: Array<Record<string, unknown>> =\n params.tools?.map(mapToolDefinition) ?? [];\n if (clientTools.length > 0) {\n // Tool schemas are the most stable prefix — cache them whenever enabled.\n if (caching) {\n clientTools[clientTools.length - 1] = {\n ...clientTools[clientTools.length - 1],\n cache_control: { type: \"ephemeral\" },\n };\n }\n }\n const serverTools = (options.serverTools ?? []).map(mapServerTool);\n const tools = [...clientTools, ...serverTools];\n if (tools.length > 0) {\n body.tools = tools;\n if (params.toolChoice === \"auto\" || params.toolChoice === \"none\") {\n body.tool_choice = { type: params.toolChoice };\n } else if (params.toolChoice === \"required\") {\n body.tool_choice = { type: \"any\" };\n } else if (params.toolChoice && typeof params.toolChoice === \"object\") {\n body.tool_choice = { name: params.toolChoice.name, type: \"tool\" };\n }\n }\n\n if (params.stopSequences && params.stopSequences.length > 0) {\n body.stop_sequences = params.stopSequences;\n }\n\n const mode =\n params.reasoning && params.reasoning.effort !== \"none\"\n ? anthropicReasoningMode(params.model)\n : \"none\";\n if (params.reasoning?.effort === \"none\") body.thinking = { type: \"disabled\" };\n const thinkingActive = mode !== \"none\";\n\n // Sampling params (temperature/top_p) are rejected outright by Opus 4.7/4.8 and\n // Fable/Mythos, and conflict with thinking on the models that do accept them —\n // so only send them when the model allows sampling AND thinking is off.\n if (!thinkingActive && anthropicSupportsSampling(params.model)) {\n if (typeof params.temperature === \"number\") {\n body.temperature = params.temperature;\n }\n if (typeof params.topP === \"number\") body.top_p = params.topP;\n }\n\n if (mode === \"effort\" || mode === \"adaptive\") {\n body.thinking = { type: \"adaptive\" };\n if (mode === \"effort\" && params.reasoning) {\n const effort = anthropicEffortValue(params.model, params.reasoning);\n if (effort) body.output_config = { effort };\n }\n } else if (mode === \"legacy\" && params.reasoning) {\n const budget = resolveBudgetTokens(params.reasoning);\n if (budget) {\n body.thinking = { budget_tokens: budget, type: \"enabled\" };\n // Extended thinking requires headroom: budget tokens + room to answer.\n body.max_tokens = Math.max(max, budget + max);\n }\n }\n\n return body;\n};\n\nconst classifyLine = (line: string) => {\n if (line.startsWith(\"event: \")) {\n return {\n field: \"event\" as const,\n value: line.slice(EVENT_PREFIX_LENGTH),\n };\n }\n\n if (line.startsWith(\"data: \")) {\n return {\n field: \"data\" as const,\n value: line.slice(DATA_PREFIX_LENGTH),\n };\n }\n\n return undefined;\n};\n\nconst applyClassified = (\n acc: { eventData: string; eventType: string },\n classified: { field: \"event\" | \"data\"; value: string } | undefined,\n) => {\n if (!classified) {\n return acc;\n }\n\n if (classified.field === \"event\") {\n return { eventData: acc.eventData, eventType: classified.value };\n }\n\n return { eventData: classified.value, eventType: acc.eventType };\n};\n\nconst parseEventLines = (event: string) =>\n event\n .split(\"\\n\")\n .reduce((acc, line) => applyClassified(acc, classifyLine(line)), {\n eventData: \"\",\n eventType: \"\",\n });\n\nconst safeParse = (text: string) => {\n try {\n const result: unknown = JSON.parse(text);\n\n return result;\n } catch {\n return undefined;\n }\n};\n\nconst tryParseJson = (text: string) => {\n const result = safeParse(text);\n\n if (isRecord(result)) {\n return result;\n }\n\n return undefined;\n};\n\nconst getRecord = (obj: Record<string, unknown>, key: string) => {\n const val = obj[key];\n\n if (isRecord(val)) {\n return val;\n }\n\n return undefined;\n};\n\nconst getString = (obj: Record<string, unknown>, key: string) => {\n const val = obj[key];\n\n if (typeof val === \"string\") {\n return val;\n }\n\n return \"\";\n};\n\nconst getNumber = (obj: Record<string, unknown>, key: string) => {\n const val = obj[key];\n\n if (typeof val === \"number\") {\n return val;\n }\n\n return 0;\n};\n\nconst handleContentBlockStart = (\n parsed: Record<string, unknown>,\n state: AnthropicSSEState,\n) => {\n const block = getRecord(parsed, \"content_block\");\n\n if (block && block.type === \"tool_use\") {\n state.currentToolId = getString(block, \"id\");\n state.currentToolName = getString(block, \"name\");\n state.toolInputJson = \"\";\n state.isThinkingBlock = false;\n state.currentProviderBlock = undefined;\n } else if (block && block.type === \"thinking\") {\n state.isThinkingBlock = true;\n state.thinkingSignature = \"\";\n state.currentProviderBlock = undefined;\n } else {\n state.isThinkingBlock = false;\n state.currentProviderBlock =\n block && block.type !== \"text\" ? { ...block } : undefined;\n state.providerBlockInputJson = \"\";\n }\n};\n\nconst handleContentBlockDelta = (\n parsed: Record<string, unknown>,\n state: AnthropicSSEState,\n) => {\n const delta = getRecord(parsed, \"delta\");\n\n if (!delta) {\n return undefined;\n }\n\n if (delta.type === \"thinking_delta\") {\n return {\n content: getString(delta, \"thinking\"),\n type: \"thinking\",\n } satisfies AIChunk;\n }\n\n if (delta.type === \"text_delta\") {\n return {\n content: getString(delta, \"text\"),\n type: \"text\",\n } satisfies AIChunk;\n }\n\n if (delta.type === \"citations_delta\") {\n const citation = getRecord(delta, \"citation\");\n if (\n citation?.type === \"web_search_result_location\" &&\n getString(citation, \"url\")\n ) {\n return {\n content: getString(citation, \"cited_text\") || undefined,\n title: getString(citation, \"title\") || undefined,\n type: \"citation\",\n url: getString(citation, \"url\"),\n } satisfies AIChunk;\n }\n }\n\n if (delta.type === \"input_json_delta\") {\n if (state.currentProviderBlock) {\n state.providerBlockInputJson += getString(delta, \"partial_json\");\n } else {\n state.toolInputJson += getString(delta, \"partial_json\");\n }\n }\n\n if (delta.type === \"signature_delta\") {\n state.thinkingSignature += getString(delta, \"signature\");\n }\n\n return undefined;\n};\n\nconst handleContentBlockStop = (state: AnthropicSSEState) => {\n // Emit thinking signature when thinking block completes\n if (state.isThinkingBlock && state.thinkingSignature) {\n state.isThinkingBlock = false;\n const signature = state.thinkingSignature;\n state.thinkingSignature = \"\";\n\n return {\n content: \"\",\n signature,\n type: \"thinking\",\n } satisfies AIChunk;\n }\n\n if (state.currentProviderBlock) {\n const data = { ...state.currentProviderBlock };\n if (state.providerBlockInputJson) {\n data.input =\n tryParseJson(state.providerBlockInputJson) ??\n state.providerBlockInputJson;\n }\n state.currentProviderBlock = undefined;\n state.providerBlockInputJson = \"\";\n return {\n data,\n provider: state.providerName,\n type: \"provider_event\",\n } satisfies AIChunk;\n }\n\n if (!state.currentToolId) {\n return undefined;\n }\n\n const input = tryParseJson(state.toolInputJson) ?? state.toolInputJson;\n\n const chunk: AIChunk = {\n id: state.currentToolId,\n input,\n name: state.currentToolName,\n type: \"tool_use\",\n };\n\n state.currentToolId = \"\";\n state.currentToolName = \"\";\n state.toolInputJson = \"\";\n\n return chunk;\n};\n\nconst extractUsage = (\n usageRecord: Record<string, unknown> | undefined,\n existingUsage: AIUsage | undefined,\n) => {\n if (!usageRecord) {\n return existingUsage;\n }\n\n const normalized: AIUsage = {\n cacheReadInputTokens:\n getNumber(usageRecord, \"cache_read_input_tokens\") ||\n existingUsage?.cacheReadInputTokens ||\n 0,\n cacheWriteInputTokens:\n getNumber(usageRecord, \"cache_creation_input_tokens\") ||\n existingUsage?.cacheWriteInputTokens ||\n 0,\n inputTokens:\n getNumber(usageRecord, \"input_tokens\") || existingUsage?.inputTokens || 0,\n outputTokens:\n getNumber(usageRecord, \"output_tokens\") ||\n existingUsage?.outputTokens ||\n 0,\n costCredits: getNumber(usageRecord, \"cost\") || existingUsage?.costCredits,\n reasoningTokens:\n getNumber(usageRecord, \"reasoning_tokens\") ||\n existingUsage?.reasoningTokens,\n upstreamInferenceCostCredits:\n getNumber(\n getRecord(usageRecord, \"cost_details\") ?? {},\n \"upstream_inference_cost\",\n ) || existingUsage?.upstreamInferenceCostCredits,\n };\n const serverToolUse = getRecord(usageRecord, \"server_tool_use\");\n if (serverToolUse) {\n normalized.serverToolUse = Object.fromEntries(\n Object.entries(serverToolUse).filter(\n (entry): entry is [string, number] => typeof entry[1] === \"number\",\n ),\n );\n }\n\n return normalized;\n};\n\nconst mergeMetadata = (\n source: Record<string, unknown>,\n state: AnthropicSSEState,\n) => {\n const providerMetadata = getRecord(source, \"openrouter_metadata\");\n const generationId = getString(source, \"id\") || undefined;\n const model = getString(source, \"model\") || undefined;\n const provider = getString(source, \"provider\") || undefined;\n const serviceTier = getString(source, \"service_tier\") || undefined;\n if (!providerMetadata && !generationId && !model && !provider && !serviceTier)\n return;\n state.metadata = {\n ...state.metadata,\n generationId: generationId ?? state.metadata?.generationId,\n model: model ?? state.metadata?.model,\n provider: provider ?? state.metadata?.provider,\n providerMetadata: {\n ...state.metadata?.providerMetadata,\n ...providerMetadata,\n },\n serviceTier: serviceTier ?? state.metadata?.serviceTier,\n };\n};\n\nconst handleMessageDelta = (\n parsed: Record<string, unknown>,\n state: AnthropicSSEState,\n) => {\n const deltaUsage = getRecord(parsed, \"usage\");\n state.usage = extractUsage(deltaUsage, state.usage);\n\n const delta = getRecord(parsed, \"delta\");\n const stopReason = delta ? getString(delta, \"stop_reason\") : \"\";\n if (stopReason) state.stopReason = stopReason;\n};\n\nconst handleMessageStart = (\n parsed: Record<string, unknown>,\n state: AnthropicSSEState,\n) => {\n const message = getRecord(parsed, \"message\");\n\n if (!message) {\n return;\n }\n\n const startUsage = getRecord(message, \"usage\");\n state.usage = extractUsage(startUsage, state.usage);\n mergeMetadata(message, state);\n};\n\nconst handleError = (\n parsed: Record<string, unknown>,\n state: AnthropicSSEState,\n) => {\n const error = getRecord(parsed, \"error\");\n const errorMessage = error ? getString(error, \"message\") : \"\";\n const nativeErrorType = error ? getString(error, \"type\") : \"\";\n const errorType = error\n ? getString(error, \"error_type\") || nativeErrorType\n : \"\";\n\n // Mid-stream error events (e.g. \"overloaded_error\") — overloaded/rate-limit\n // types are retryable; everything else is treated as a hard failure.\n const retryable =\n errorType === \"provider_overloaded\" ||\n errorType === \"rate_limit_exceeded\" ||\n errorType === \"provider_unavailable\" ||\n errorType === \"server\" ||\n nativeErrorType === \"overloaded_error\" ||\n nativeErrorType === \"rate_limit_error\" ||\n nativeErrorType === \"api_error\";\n\n throw new ProviderError({\n message: errorMessage || \"Anthropic API error\",\n metadata: error,\n provider: state.providerName,\n retryable,\n type: errorType || null,\n });\n};\n\nconst processEvent = (\n eventType: string,\n parsed: Record<string, unknown>,\n state: AnthropicSSEState,\n) => {\n switch (eventType) {\n case \"content_block_start\": {\n handleContentBlockStart(parsed, state);\n\n return undefined;\n }\n\n case \"content_block_delta\": {\n return handleContentBlockDelta(parsed, state);\n }\n\n case \"content_block_stop\": {\n return handleContentBlockStop(state);\n }\n\n case \"message_delta\": {\n handleMessageDelta(parsed, state);\n mergeMetadata(parsed, state);\n\n return undefined;\n }\n\n case \"message_start\": {\n handleMessageStart(parsed, state);\n\n return undefined;\n }\n\n case \"message_stop\": {\n mergeMetadata(parsed, state);\n return {\n stopReason: state.stopReason,\n metadata: state.metadata,\n type: \"done\" as const,\n usage: state.usage,\n };\n }\n\n case \"error\": {\n handleError(parsed, state);\n\n return undefined;\n }\n\n default: {\n return undefined;\n }\n }\n};\n\nconst processSingleEvent = (event: string, state: AnthropicSSEState) => {\n if (!event.trim()) {\n return undefined;\n }\n\n const { eventData, eventType } = parseEventLines(event);\n\n if (!eventData) {\n return undefined;\n }\n\n const parsed = tryParseJson(eventData);\n\n if (!parsed) {\n return undefined;\n }\n\n return processEvent(eventType, parsed, state);\n};\n\nconst collectChunk = (event: string, state: AnthropicSSEState) => {\n const chunk = processSingleEvent(event, state);\n\n return chunk ? [chunk] : [];\n};\n\nconst processBufferedEvents = (\n eventsText: string,\n state: AnthropicSSEState,\n) => {\n const events = eventsText.split(\"\\n\\n\");\n state.buffer = events.pop() ?? \"\";\n\n return events.flatMap((event) => collectChunk(event, state));\n};\n\nconst readNextChunks = async (\n reader: ReadableStreamDefaultReader<Uint8Array>,\n decoder: TextDecoder,\n state: AnthropicSSEState,\n signal?: AbortSignal,\n) => {\n if (signal?.aborted) {\n return { chunks: EMPTY_CHUNKS, done: true };\n }\n\n const { done, value } = await reader.read();\n\n if (done) {\n return { chunks: EMPTY_CHUNKS, done: true };\n }\n\n const rawText = state.buffer + decoder.decode(value, { stream: true });\n const chunks = processBufferedEvents(rawText, state);\n\n return { chunks, done: false };\n};\n\nconst findDoneChunk = (chunks: AIChunk[]) =>\n chunks.findIndex((c) => c.type === \"done\");\n\nconst sseStreamLoop = async (\n reader: ReadableStreamDefaultReader<Uint8Array>,\n decoder: TextDecoder,\n state: AnthropicSSEState,\n signal?: AbortSignal,\n) => {\n const result = await readNextChunks(reader, decoder, state, signal);\n\n if (result.done) {\n return { chunks: result.chunks, finished: true };\n }\n\n const doneIdx = findDoneChunk(result.chunks);\n\n if (doneIdx >= 0) {\n return { chunks: result.chunks.slice(0, doneIdx + 1), finished: true };\n }\n\n return { chunks: result.chunks, finished: false };\n};\n\n// eslint-disable-next-line func-style\nasync function* streamChunks(\n reader: ReadableStreamDefaultReader<Uint8Array>,\n decoder: TextDecoder,\n state: AnthropicSSEState,\n signal?: AbortSignal,\n) {\n let finished = false;\n\n while (!finished) {\n // eslint-disable-next-line no-await-in-loop\n const result = await sseStreamLoop(reader, decoder, state, signal);\n ({ finished } = result);\n yield* result.chunks;\n }\n}\n\n// eslint-disable-next-line func-style\nasync function* parseSSEStream(\n body: ReadableStream<Uint8Array>,\n providerName: string,\n signal?: AbortSignal,\n) {\n const reader = body.getReader();\n const decoder = new TextDecoder();\n\n const state: AnthropicSSEState = {\n buffer: \"\",\n currentToolId: \"\",\n currentToolName: \"\",\n isThinkingBlock: false,\n stopReason: \"\",\n thinkingSignature: \"\",\n toolInputJson: \"\",\n usage: undefined,\n providerName,\n providerBlockInputJson: \"\",\n };\n\n try {\n yield* streamChunks(reader, decoder, state, signal);\n } finally {\n reader.releaseLock();\n }\n}\n\nconst fetchAndStream = async function* (\n baseUrl: string,\n config: AnthropicConfig,\n params: AIProviderStreamParams,\n configuredMax: number,\n promptCaching: boolean,\n providerName: string,\n) {\n const builtBody = buildRequestBody(params, configuredMax, promptCaching);\n const body = config.transformRequestBody\n ? config.transformRequestBody(builtBody, params)\n : builtBody;\n\n const target = `${baseUrl}/v1/messages`;\n const fetchImpl = config.fetch ?? fetch;\n const token = config.tokenSource\n ? await Promise.resolve(config.tokenSource())\n : config.apiKey!;\n const suppliedHeaders =\n typeof config.headers === \"function\"\n ? await config.headers(params)\n : (config.headers ?? {});\n const requestHeaders = new Headers(suppliedHeaders);\n requestHeaders.set(\"Content-Type\", \"application/json\");\n if (config.authStyle === \"bearer\") {\n requestHeaders.set(\"Authorization\", `Bearer ${token}`);\n } else {\n requestHeaders.set(\"anthropic-version\", API_VERSION);\n requestHeaders.set(\"x-api-key\", token);\n }\n const response = await fetchImpl(target, {\n ...h2IfHttps(target),\n body: JSON.stringify(body),\n headers: requestHeaders,\n method: \"POST\",\n signal: params.signal,\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n\n throw ProviderError.fromResponse(providerName, response.status, errorText);\n }\n\n if (!response.body) {\n throw new ProviderError({\n message: `${providerName} Messages API returned no response body`,\n provider: providerName,\n retryable: true,\n });\n }\n\n yield* parseSSEStream(response.body, providerName, params.signal);\n};\n\nexport const anthropic = (config: AnthropicConfig): AIProviderConfig => {\n if (!config.apiKey && !config.tokenSource)\n throw new Error(\"anthropic() requires either apiKey or tokenSource\");\n const baseUrl = config.baseUrl ?? DEFAULT_BASE_URL;\n const configuredMax = config.maxTokens ?? DEFAULT_MAX_TOKENS;\n const promptCaching = config.promptCaching ?? true;\n const providerName = config.providerName ?? \"anthropic\";\n\n const capacityRequest = async (\n params: AIProviderStreamParams,\n path: string,\n body?: Record<string, unknown>,\n ) => {\n const token = config.tokenSource\n ? await config.tokenSource()\n : config.apiKey!;\n const headers = new Headers(\n typeof config.headers === \"function\"\n ? await config.headers(params)\n : config.headers,\n );\n headers.set(\"Content-Type\", \"application/json\");\n if (config.authStyle === \"bearer\")\n headers.set(\"Authorization\", `Bearer ${token}`);\n else {\n headers.set(\"anthropic-version\", API_VERSION);\n headers.set(\"x-api-key\", token);\n }\n return capacityJson(\n await (config.fetch ?? fetch)(`${baseUrl}${path}`, {\n method: body ? \"POST\" : \"GET\",\n headers,\n body: body ? JSON.stringify(body) : undefined,\n signal: params.signal\n ? AbortSignal.any([params.signal, AbortSignal.timeout(15_000)])\n : AbortSignal.timeout(15_000),\n }),\n );\n };\n // Anthropic's token-counting guide excludes hosted search/fetch/code/tool-search,\n // even though the generated API schema lists them. Count the supported caller\n // payload only; generation retains the full body and validates hosted context.\n const countingRequest = (params: AIProviderStreamParams) => {\n const built = buildRequestBody(params, configuredMax, promptCaching);\n const body = config.transformRequestBody\n ? config.transformRequestBody(built, params)\n : built;\n const counted: Record<string, unknown> = {};\n for (const key of [\n \"model\",\n \"messages\",\n \"system\",\n \"tools\",\n \"tool_choice\",\n \"thinking\",\n ])\n if (body[key] !== undefined) counted[key] = body[key];\n const tools = Array.isArray(body.tools) ? body.tools : [];\n const hosted = tools.filter(\n (tool) =>\n isRecord(tool) &&\n typeof tool.type === \"string\" &&\n /^(web_search_|web_fetch_|code_execution_|bash_code_execution_|text_editor_code_execution_|tool_search_tool_)/u.test(\n tool.type,\n ),\n );\n const scope =\n hosted.length > 0 || body.mcp_servers !== undefined\n ? (\"caller-input\" as const)\n : (\"request\" as const);\n if (hosted.length > 0) {\n const clientTools = tools.filter((tool) => !hosted.includes(tool));\n if (clientTools.length) counted.tools = clientTools;\n else delete counted.tools;\n const choice = counted.tool_choice;\n if (\n !clientTools.length ||\n (isRecord(choice) &&\n choice.type === \"tool\" &&\n hosted.some((tool) => isRecord(tool) && tool.name === choice.name))\n )\n delete counted.tool_choice;\n }\n return { counted, scope };\n };\n const inputCapacity = {\n outputTokens: (params: AIProviderStreamParams) => {\n const built = buildRequestBody(params, configuredMax, promptCaching);\n const body = config.transformRequestBody\n ? config.transformRequestBody(built, params)\n : built;\n return positiveTokenLimit(body.max_tokens);\n },\n getLimits: cacheModelLimits(\n async (params) => {\n const data = await capacityRequest(\n params,\n `/v1/models/${encodeURIComponent(params.model)}`,\n );\n const context = positiveTokenLimit(data.max_input_tokens);\n return {\n maxInputTokens: context,\n contextWindowTokens: context,\n maxOutputTokens: positiveTokenLimit(data.max_tokens),\n };\n },\n config.tokenSource || typeof config.headers === \"function\" ? 0 : 300_000,\n ),\n countScope: (params: AIProviderStreamParams) =>\n countingRequest(params).scope,\n countTokens: async (params: AIProviderStreamParams) => {\n const { counted } = countingRequest(params);\n return inputTokenCount(\n (await capacityRequest(params, \"/v1/messages/count_tokens\", counted))\n .input_tokens,\n );\n },\n };\n return instrumentAIProvider(\n {\n inputCapacity,\n stream: (params: AIProviderStreamParams) =>\n fetchAndStream(\n baseUrl,\n config,\n params,\n configuredMax,\n promptCaching,\n providerName,\n ),\n },\n providerName,\n );\n};\n"
|
|
11
|
+
"import type {\n AIChunk,\n AIProviderConfig,\n AIProviderContentBlock,\n AIProviderMessage,\n AIProviderStreamParams,\n AIProviderToolDefinition,\n AIUsage,\n} from \"../../../types/ai\";\nimport type {\n AnthropicConfig,\n AnthropicMessage,\n AnthropicRequestOptions,\n AnthropicSSEState,\n AnthropicServerTool,\n} from \"../../../types/anthropic\";\n\n// Opportunistic HTTP/2 multiplexing for outbound HTTPS (Bun 1.3.14+).\n// The `protocol` option lands in @types/bun 1.3.14; widen locally for now.\n// Hard-skip on non-HTTPS — Bun's h2 client throws HTTP2Unsupported on h2c.\ntype H2Init = RequestInit & { protocol?: \"http2\" };\nconst h2IfHttps = (url: string): H2Init =>\n url.startsWith(\"https://\") ? { protocol: \"http2\" } : {};\n\nimport {\n cacheModelLimits,\n capacityJson,\n positiveTokenLimit,\n inputTokenCount,\n} from \"../inputCapacity\";\nimport { instrumentAIProvider } from \"./instrumentation\";\nimport { ProviderError } from \"../errors/providerError\";\nimport {\n anthropicEffortValue,\n anthropicReasoningMode,\n anthropicSupportsSampling,\n resolveBudgetTokens,\n} from \"./reasoning\";\n\nconst DEFAULT_BASE_URL = \"https://api.anthropic.com\";\nconst API_VERSION = \"2023-06-01\";\nconst DEFAULT_MAX_TOKENS = 32000;\nconst EVENT_PREFIX_LENGTH = 7;\nconst DATA_PREFIX_LENGTH = 6;\n\nconst EMPTY_CHUNKS: AIChunk[] = [];\n\nconst isRecord = (val: unknown): val is Record<string, unknown> =>\n typeof val === \"object\" && val !== null;\n\nconst mapContentBlock = (block: AIProviderContentBlock) => {\n if (block.type === \"thinking\") {\n return {\n signature: block.signature,\n thinking: block.thinking,\n type: \"thinking\",\n };\n }\n\n if (block.type === \"image\") {\n return {\n source: block.source,\n type: \"image\",\n };\n }\n\n if (block.type === \"document\") {\n return {\n source: block.source,\n type: \"document\",\n };\n }\n\n if (block.type === \"tool_result\") {\n return {\n content: block.content,\n tool_use_id: block.tool_use_id,\n type: \"tool_result\",\n };\n }\n\n if (block.type === \"tool_use\") {\n if (block.providerData) return { ...block.providerData };\n return {\n id: block.id,\n input: block.input,\n name: block.name,\n type: \"tool_use\",\n };\n }\n\n if (block.type === \"audio\" || block.type === \"video\") {\n throw new Error(`Anthropic does not support ${block.type} content blocks`);\n }\n\n if (block.type === \"provider_data\") {\n return { ...block.data };\n }\n\n return { text: block.content, type: \"text\" };\n};\n\nconst mapMessage = (msg: AIProviderMessage): AnthropicMessage => ({\n content:\n typeof msg.content === \"string\"\n ? msg.content\n : msg.content.map(mapContentBlock),\n role: msg.role === \"system\" ? \"user\" : msg.role,\n});\n\nconst mapToolDefinition = (tool: AIProviderToolDefinition) => ({\n description: tool.description,\n input_schema: tool.input_schema,\n name: tool.name,\n});\n\nconst requestOptionsFor = (\n params: AIProviderStreamParams,\n): AnthropicRequestOptions => {\n const raw = params.providerOptions?.anthropic;\n if (raw === undefined) return {};\n if (!isRecord(raw)) {\n throw new Error(\"providerOptions.anthropic must be an object\");\n }\n if (raw.serverTools !== undefined && !Array.isArray(raw.serverTools)) {\n throw new Error(\"Anthropic serverTools must be an array\");\n }\n\n return raw as AnthropicRequestOptions;\n};\n\nconst assertDomains = (domains: readonly string[] | undefined) => {\n for (const domain of domains ?? []) {\n if (!domain || domain.includes(\"://\")) {\n throw new Error(\n \"Anthropic web-search domains must be non-empty bare domains without a scheme\",\n );\n }\n }\n};\n\nconst mapServerTool = (tool: AnthropicServerTool) => {\n const parameters = tool.parameters ?? {};\n if (parameters.allowedDomains && parameters.blockedDomains) {\n throw new Error(\n \"Anthropic web search accepts allowedDomains or blockedDomains, not both\",\n );\n }\n assertDomains(parameters.allowedDomains);\n assertDomains(parameters.blockedDomains);\n if (\n parameters.maxUses !== undefined &&\n (!Number.isInteger(parameters.maxUses) || parameters.maxUses < 1)\n ) {\n throw new Error(\"Anthropic web-search maxUses must be a positive integer\");\n }\n if (\n parameters.responseInclusion !== undefined &&\n parameters.version !== \"web_search_20260318\"\n ) {\n throw new Error(\n \"Anthropic web-search responseInclusion requires web_search_20260318\",\n );\n }\n const location = parameters.userLocation;\n if (\n location &&\n !location.city &&\n !location.country &&\n !location.region &&\n !location.timezone\n ) {\n throw new Error(\n \"Anthropic web-search userLocation requires a city, region, country, or timezone\",\n );\n }\n\n return {\n ...(parameters.allowedCallers\n ? { allowed_callers: [...parameters.allowedCallers] }\n : {}),\n ...(parameters.allowedDomains\n ? { allowed_domains: [...parameters.allowedDomains] }\n : {}),\n ...(parameters.blockedDomains\n ? { blocked_domains: [...parameters.blockedDomains] }\n : {}),\n ...(parameters.maxUses === undefined\n ? {}\n : { max_uses: parameters.maxUses }),\n name: \"web_search\",\n ...(parameters.responseInclusion\n ? { response_inclusion: parameters.responseInclusion }\n : {}),\n type: parameters.version ?? \"web_search_20250305\",\n ...(location\n ? {\n user_location: {\n ...(location.city ? { city: location.city } : {}),\n ...(location.country ? { country: location.country } : {}),\n ...(location.region ? { region: location.region } : {}),\n ...(location.timezone ? { timezone: location.timezone } : {}),\n type: \"approximate\",\n },\n }\n : {}),\n };\n};\n\n// Attach an ephemeral cache breakpoint to the final content block of a message.\n// `content` may be a bare string (collapse to a single cached text block) or an\n// array of blocks (clone the last block and tag it). Returns a new message; the\n// input is left untouched.\nconst cacheLastContentBlock = (msg: AnthropicMessage): AnthropicMessage => {\n const cacheControl = { type: \"ephemeral\" };\n\n if (typeof msg.content === \"string\") {\n return {\n content: [\n { cache_control: cacheControl, text: msg.content, type: \"text\" },\n ],\n role: msg.role,\n };\n }\n\n if (msg.content.length === 0) return msg;\n\n const blocks = [...msg.content];\n blocks[blocks.length - 1] = {\n ...blocks[blocks.length - 1],\n cache_control: cacheControl,\n };\n\n return { content: blocks, role: msg.role };\n};\n\nconst buildRequestBody = (\n params: AIProviderStreamParams,\n configuredMax: number,\n configCaching: boolean,\n) => {\n // Per-call override wins over the provider default, so a caller can opt a\n // known one-shot out of the 1.25x cache-write (or force caching on).\n const caching = params.promptCaching ?? configCaching;\n // The system block specifically can be overridden by the legacy\n // `cacheSystemPrompt` (tri-state: true/false force it; undefined follows the\n // effective `caching`).\n const cacheSystem = params.cacheSystemPrompt ?? caching;\n const options = requestOptionsFor(params);\n\n const messages: AnthropicMessage[] = params.messages\n .filter((msg) => msg.role !== \"system\")\n .map(mapMessage);\n\n // Rolling prefix breakpoints: when there is prior history, mark the final\n // content block of the last message so the next turn reads this turn's\n // prefix from cache. Skipped on the first turn (nothing to reuse yet).\n //\n // Also mark the latest earlier user message: in an agent loop that is where\n // the previous request's breakpoint sat, so this request finds that entry\n // by exact position. Relying on the API's automatic lookback alone missed\n // it intermittently: a production Studio build re-wrote its whole history\n // (40-53k tokens) on 7 of 48 requests while the identical prefix was\n // cached, and those writes were half the build's cost. Tools, system and\n // these two keep within Anthropic's limit of four breakpoints.\n if (caching && messages.length > 1) {\n const lastIndex = messages.length - 1;\n const last = messages[lastIndex];\n if (last) {\n messages[lastIndex] = cacheLastContentBlock(last);\n }\n const previousUserIndex = messages.findLastIndex(\n (message, index) => index < lastIndex - 1 && message.role === \"user\",\n );\n const previous = messages[previousUserIndex];\n if (previous) {\n messages[previousUserIndex] = cacheLastContentBlock(previous);\n }\n }\n\n // Per-call `params.maxTokens` wins over the per-provider configured default.\n const max =\n typeof params.maxTokens === \"number\" ? params.maxTokens : configuredMax;\n\n const body: Record<string, unknown> = {\n max_tokens: max,\n messages,\n model: params.model,\n stream: true,\n };\n\n if (params.systemPrompt) {\n body.system = cacheSystem\n ? [\n {\n cache_control: { type: \"ephemeral\" },\n text: params.systemPrompt,\n type: \"text\",\n },\n ]\n : params.systemPrompt;\n }\n\n const clientTools: Array<Record<string, unknown>> =\n params.tools?.map(mapToolDefinition) ?? [];\n if (clientTools.length > 0) {\n // Tool schemas are the most stable prefix — cache them whenever enabled.\n if (caching) {\n clientTools[clientTools.length - 1] = {\n ...clientTools[clientTools.length - 1],\n cache_control: { type: \"ephemeral\" },\n };\n }\n }\n const serverTools = (options.serverTools ?? []).map(mapServerTool);\n const tools = [...clientTools, ...serverTools];\n if (tools.length > 0) {\n body.tools = tools;\n if (params.toolChoice === \"auto\" || params.toolChoice === \"none\") {\n body.tool_choice = { type: params.toolChoice };\n } else if (params.toolChoice === \"required\") {\n body.tool_choice = { type: \"any\" };\n } else if (params.toolChoice && typeof params.toolChoice === \"object\") {\n body.tool_choice = { name: params.toolChoice.name, type: \"tool\" };\n }\n }\n\n if (params.stopSequences && params.stopSequences.length > 0) {\n body.stop_sequences = params.stopSequences;\n }\n\n const mode =\n params.reasoning && params.reasoning.effort !== \"none\"\n ? anthropicReasoningMode(params.model)\n : \"none\";\n if (params.reasoning?.effort === \"none\") body.thinking = { type: \"disabled\" };\n const thinkingActive = mode !== \"none\";\n\n // Sampling params (temperature/top_p) are rejected outright by Opus 4.7/4.8 and\n // Fable/Mythos, and conflict with thinking on the models that do accept them —\n // so only send them when the model allows sampling AND thinking is off.\n if (!thinkingActive && anthropicSupportsSampling(params.model)) {\n if (typeof params.temperature === \"number\") {\n body.temperature = params.temperature;\n }\n if (typeof params.topP === \"number\") body.top_p = params.topP;\n }\n\n if (mode === \"effort\" || mode === \"adaptive\") {\n body.thinking = { type: \"adaptive\" };\n if (mode === \"effort\" && params.reasoning) {\n const effort = anthropicEffortValue(params.model, params.reasoning);\n if (effort) body.output_config = { effort };\n }\n } else if (mode === \"legacy\" && params.reasoning) {\n const budget = resolveBudgetTokens(params.reasoning);\n if (budget) {\n body.thinking = { budget_tokens: budget, type: \"enabled\" };\n // Extended thinking requires headroom: budget tokens + room to answer.\n body.max_tokens = Math.max(max, budget + max);\n }\n }\n\n return body;\n};\n\nconst classifyLine = (line: string) => {\n if (line.startsWith(\"event: \")) {\n return {\n field: \"event\" as const,\n value: line.slice(EVENT_PREFIX_LENGTH),\n };\n }\n\n if (line.startsWith(\"data: \")) {\n return {\n field: \"data\" as const,\n value: line.slice(DATA_PREFIX_LENGTH),\n };\n }\n\n return undefined;\n};\n\nconst applyClassified = (\n acc: { eventData: string; eventType: string },\n classified: { field: \"event\" | \"data\"; value: string } | undefined,\n) => {\n if (!classified) {\n return acc;\n }\n\n if (classified.field === \"event\") {\n return { eventData: acc.eventData, eventType: classified.value };\n }\n\n return { eventData: classified.value, eventType: acc.eventType };\n};\n\nconst parseEventLines = (event: string) =>\n event\n .split(\"\\n\")\n .reduce((acc, line) => applyClassified(acc, classifyLine(line)), {\n eventData: \"\",\n eventType: \"\",\n });\n\nconst safeParse = (text: string) => {\n try {\n const result: unknown = JSON.parse(text);\n\n return result;\n } catch {\n return undefined;\n }\n};\n\nconst tryParseJson = (text: string) => {\n const result = safeParse(text);\n\n if (isRecord(result)) {\n return result;\n }\n\n return undefined;\n};\n\nconst getRecord = (obj: Record<string, unknown>, key: string) => {\n const val = obj[key];\n\n if (isRecord(val)) {\n return val;\n }\n\n return undefined;\n};\n\nconst getString = (obj: Record<string, unknown>, key: string) => {\n const val = obj[key];\n\n if (typeof val === \"string\") {\n return val;\n }\n\n return \"\";\n};\n\nconst getNumber = (obj: Record<string, unknown>, key: string) => {\n const val = obj[key];\n\n if (typeof val === \"number\") {\n return val;\n }\n\n return 0;\n};\n\n// Report a streaming tool input every 2 KB: often enough to look alive,\n// rarely enough that a large file adds a few dozen small events.\nconst TOOL_INPUT_PROGRESS_CHARS = 2048;\nconst TOOL_INPUT_FIELD_MAX_CHARS = 200;\n// Reads a JSON string starting at `start` (its opening quote); returns the\n// raw text between the quotes and the index after the closing one, or\n// undefined while the string is still arriving.\nconst readJsonString = (json: string, start: number) => {\n for (let index = start + 1; index < json.length; index += 1) {\n if (json[index] === \"\\\\\") index += 1;\n else if (json[index] === '\"')\n return { end: index + 1, raw: json.slice(start + 1, index) };\n }\n\n return undefined;\n};\n\nconst decodeJsonString = (raw: string) => {\n try {\n const value: unknown = JSON.parse(`\"${raw}\"`);\n\n return typeof value === \"string\" ? value : undefined;\n } catch {\n return undefined;\n }\n};\n\n// Top-level string fields already complete in a partial JSON object, such as\n// a tool's path or name. Nested values and string contents are skipped, so a\n// file whose text contains \"path\": \"x\" reports nothing from it.\nconst completeStringFields = (partialJson: string) => {\n const fields: Record<string, string> = {};\n let depth = 0;\n let key: string | undefined;\n let index = 0;\n while (index < partialJson.length) {\n const character = partialJson[index];\n if (character === '\"') {\n const text = readJsonString(partialJson, index);\n if (!text) break;\n if (depth === 1 && key === undefined) {\n const after = partialJson.slice(text.end).trimStart();\n if (after.startsWith(\":\")) key = text.raw;\n } else if (depth === 1 && key !== undefined) {\n const value = decodeJsonString(text.raw);\n if (value !== undefined && value.length <= TOOL_INPUT_FIELD_MAX_CHARS)\n fields[key] = value;\n key = undefined;\n }\n index = text.end;\n continue;\n }\n if (character === \"{\" || character === \"[\") depth += 1;\n else if (character === \"}\" || character === \"]\") depth -= 1;\n else if (character === \",\" && depth === 1) key = undefined;\n index += 1;\n }\n\n return fields;\n};\n\nconst toolInputProgress = (state: AnthropicSSEState): AIChunk => {\n state.toolInputReported = state.toolInputJson.length;\n\n return {\n fields: completeStringFields(state.toolInputJson),\n id: state.currentToolId,\n name: state.currentToolName,\n receivedChars: state.toolInputJson.length,\n type: \"tool_input\",\n };\n};\n\nconst handleContentBlockStart = (\n parsed: Record<string, unknown>,\n state: AnthropicSSEState,\n) => {\n const block = getRecord(parsed, \"content_block\");\n\n if (block && block.type === \"tool_use\") {\n state.currentToolId = getString(block, \"id\");\n state.currentToolName = getString(block, \"name\");\n state.toolInputJson = \"\";\n state.toolInputReported = 0;\n state.isThinkingBlock = false;\n state.currentProviderBlock = undefined;\n\n return toolInputProgress(state);\n } else if (block && block.type === \"thinking\") {\n state.isThinkingBlock = true;\n state.thinkingSignature = \"\";\n state.currentProviderBlock = undefined;\n } else {\n state.isThinkingBlock = false;\n state.currentProviderBlock =\n block && block.type !== \"text\" ? { ...block } : undefined;\n state.providerBlockInputJson = \"\";\n }\n\n return undefined;\n};\n\nconst handleContentBlockDelta = (\n parsed: Record<string, unknown>,\n state: AnthropicSSEState,\n) => {\n const delta = getRecord(parsed, \"delta\");\n\n if (!delta) {\n return undefined;\n }\n\n if (delta.type === \"thinking_delta\") {\n return {\n content: getString(delta, \"thinking\"),\n type: \"thinking\",\n } satisfies AIChunk;\n }\n\n if (delta.type === \"text_delta\") {\n return {\n content: getString(delta, \"text\"),\n type: \"text\",\n } satisfies AIChunk;\n }\n\n if (delta.type === \"citations_delta\") {\n const citation = getRecord(delta, \"citation\");\n if (\n citation?.type === \"web_search_result_location\" &&\n getString(citation, \"url\")\n ) {\n return {\n content: getString(citation, \"cited_text\") || undefined,\n title: getString(citation, \"title\") || undefined,\n type: \"citation\",\n url: getString(citation, \"url\"),\n } satisfies AIChunk;\n }\n }\n\n if (delta.type === \"input_json_delta\") {\n if (state.currentProviderBlock) {\n state.providerBlockInputJson += getString(delta, \"partial_json\");\n } else {\n state.toolInputJson += getString(delta, \"partial_json\");\n if (\n state.toolInputJson.length - state.toolInputReported >=\n TOOL_INPUT_PROGRESS_CHARS\n )\n return toolInputProgress(state);\n }\n }\n\n if (delta.type === \"signature_delta\") {\n state.thinkingSignature += getString(delta, \"signature\");\n }\n\n return undefined;\n};\n\nconst handleContentBlockStop = (state: AnthropicSSEState) => {\n // Emit thinking signature when thinking block completes\n if (state.isThinkingBlock && state.thinkingSignature) {\n state.isThinkingBlock = false;\n const signature = state.thinkingSignature;\n state.thinkingSignature = \"\";\n\n return {\n content: \"\",\n signature,\n type: \"thinking\",\n } satisfies AIChunk;\n }\n\n if (state.currentProviderBlock) {\n const data = { ...state.currentProviderBlock };\n if (state.providerBlockInputJson) {\n data.input =\n tryParseJson(state.providerBlockInputJson) ??\n state.providerBlockInputJson;\n }\n state.currentProviderBlock = undefined;\n state.providerBlockInputJson = \"\";\n return {\n data,\n provider: state.providerName,\n type: \"provider_event\",\n } satisfies AIChunk;\n }\n\n if (!state.currentToolId) {\n return undefined;\n }\n\n const input = tryParseJson(state.toolInputJson) ?? state.toolInputJson;\n\n const chunk: AIChunk = {\n id: state.currentToolId,\n input,\n name: state.currentToolName,\n type: \"tool_use\",\n };\n\n state.currentToolId = \"\";\n state.currentToolName = \"\";\n state.toolInputJson = \"\";\n\n return chunk;\n};\n\nconst extractUsage = (\n usageRecord: Record<string, unknown> | undefined,\n existingUsage: AIUsage | undefined,\n) => {\n if (!usageRecord) {\n return existingUsage;\n }\n\n const normalized: AIUsage = {\n cacheReadInputTokens:\n getNumber(usageRecord, \"cache_read_input_tokens\") ||\n existingUsage?.cacheReadInputTokens ||\n 0,\n cacheWriteInputTokens:\n getNumber(usageRecord, \"cache_creation_input_tokens\") ||\n existingUsage?.cacheWriteInputTokens ||\n 0,\n inputTokens:\n getNumber(usageRecord, \"input_tokens\") || existingUsage?.inputTokens || 0,\n outputTokens:\n getNumber(usageRecord, \"output_tokens\") ||\n existingUsage?.outputTokens ||\n 0,\n costCredits: getNumber(usageRecord, \"cost\") || existingUsage?.costCredits,\n reasoningTokens:\n getNumber(usageRecord, \"reasoning_tokens\") ||\n existingUsage?.reasoningTokens,\n upstreamInferenceCostCredits:\n getNumber(\n getRecord(usageRecord, \"cost_details\") ?? {},\n \"upstream_inference_cost\",\n ) || existingUsage?.upstreamInferenceCostCredits,\n };\n const serverToolUse = getRecord(usageRecord, \"server_tool_use\");\n if (serverToolUse) {\n normalized.serverToolUse = Object.fromEntries(\n Object.entries(serverToolUse).filter(\n (entry): entry is [string, number] => typeof entry[1] === \"number\",\n ),\n );\n }\n\n return normalized;\n};\n\nconst mergeMetadata = (\n source: Record<string, unknown>,\n state: AnthropicSSEState,\n) => {\n const providerMetadata = getRecord(source, \"openrouter_metadata\");\n const generationId = getString(source, \"id\") || undefined;\n const model = getString(source, \"model\") || undefined;\n const provider = getString(source, \"provider\") || undefined;\n const serviceTier = getString(source, \"service_tier\") || undefined;\n if (!providerMetadata && !generationId && !model && !provider && !serviceTier)\n return;\n state.metadata = {\n ...state.metadata,\n generationId: generationId ?? state.metadata?.generationId,\n model: model ?? state.metadata?.model,\n provider: provider ?? state.metadata?.provider,\n providerMetadata: {\n ...state.metadata?.providerMetadata,\n ...providerMetadata,\n },\n serviceTier: serviceTier ?? state.metadata?.serviceTier,\n };\n};\n\nconst handleMessageDelta = (\n parsed: Record<string, unknown>,\n state: AnthropicSSEState,\n) => {\n const deltaUsage = getRecord(parsed, \"usage\");\n state.usage = extractUsage(deltaUsage, state.usage);\n\n const delta = getRecord(parsed, \"delta\");\n const stopReason = delta ? getString(delta, \"stop_reason\") : \"\";\n if (stopReason) state.stopReason = stopReason;\n};\n\nconst handleMessageStart = (\n parsed: Record<string, unknown>,\n state: AnthropicSSEState,\n) => {\n const message = getRecord(parsed, \"message\");\n\n if (!message) {\n return;\n }\n\n const startUsage = getRecord(message, \"usage\");\n state.usage = extractUsage(startUsage, state.usage);\n mergeMetadata(message, state);\n};\n\nconst handleError = (\n parsed: Record<string, unknown>,\n state: AnthropicSSEState,\n) => {\n const error = getRecord(parsed, \"error\");\n const errorMessage = error ? getString(error, \"message\") : \"\";\n const nativeErrorType = error ? getString(error, \"type\") : \"\";\n const errorType = error\n ? getString(error, \"error_type\") || nativeErrorType\n : \"\";\n\n // Mid-stream error events (e.g. \"overloaded_error\") — overloaded/rate-limit\n // types are retryable; everything else is treated as a hard failure.\n const retryable =\n errorType === \"provider_overloaded\" ||\n errorType === \"rate_limit_exceeded\" ||\n errorType === \"provider_unavailable\" ||\n errorType === \"server\" ||\n nativeErrorType === \"overloaded_error\" ||\n nativeErrorType === \"rate_limit_error\" ||\n nativeErrorType === \"api_error\";\n\n throw new ProviderError({\n message: errorMessage || \"Anthropic API error\",\n metadata: error,\n provider: state.providerName,\n retryable,\n type: errorType || null,\n });\n};\n\nconst processEvent = (\n eventType: string,\n parsed: Record<string, unknown>,\n state: AnthropicSSEState,\n) => {\n switch (eventType) {\n case \"content_block_start\": {\n return handleContentBlockStart(parsed, state);\n }\n\n case \"content_block_delta\": {\n return handleContentBlockDelta(parsed, state);\n }\n\n case \"content_block_stop\": {\n return handleContentBlockStop(state);\n }\n\n case \"message_delta\": {\n handleMessageDelta(parsed, state);\n mergeMetadata(parsed, state);\n\n return undefined;\n }\n\n case \"message_start\": {\n handleMessageStart(parsed, state);\n\n return undefined;\n }\n\n case \"message_stop\": {\n mergeMetadata(parsed, state);\n return {\n stopReason: state.stopReason,\n metadata: state.metadata,\n type: \"done\" as const,\n usage: state.usage,\n };\n }\n\n case \"error\": {\n handleError(parsed, state);\n\n return undefined;\n }\n\n default: {\n return undefined;\n }\n }\n};\n\nconst processSingleEvent = (event: string, state: AnthropicSSEState) => {\n if (!event.trim()) {\n return undefined;\n }\n\n const { eventData, eventType } = parseEventLines(event);\n\n if (!eventData) {\n return undefined;\n }\n\n const parsed = tryParseJson(eventData);\n\n if (!parsed) {\n return undefined;\n }\n\n return processEvent(eventType, parsed, state);\n};\n\nconst collectChunk = (event: string, state: AnthropicSSEState) => {\n const chunk = processSingleEvent(event, state);\n\n return chunk ? [chunk] : [];\n};\n\nconst processBufferedEvents = (\n eventsText: string,\n state: AnthropicSSEState,\n) => {\n const events = eventsText.split(\"\\n\\n\");\n state.buffer = events.pop() ?? \"\";\n\n return events.flatMap((event) => collectChunk(event, state));\n};\n\nconst readNextChunks = async (\n reader: ReadableStreamDefaultReader<Uint8Array>,\n decoder: TextDecoder,\n state: AnthropicSSEState,\n signal?: AbortSignal,\n) => {\n if (signal?.aborted) {\n return { chunks: EMPTY_CHUNKS, done: true };\n }\n\n const { done, value } = await reader.read();\n\n if (done) {\n return { chunks: EMPTY_CHUNKS, done: true };\n }\n\n const rawText = state.buffer + decoder.decode(value, { stream: true });\n const chunks = processBufferedEvents(rawText, state);\n\n return { chunks, done: false };\n};\n\nconst findDoneChunk = (chunks: AIChunk[]) =>\n chunks.findIndex((c) => c.type === \"done\");\n\nconst sseStreamLoop = async (\n reader: ReadableStreamDefaultReader<Uint8Array>,\n decoder: TextDecoder,\n state: AnthropicSSEState,\n signal?: AbortSignal,\n) => {\n const result = await readNextChunks(reader, decoder, state, signal);\n\n if (result.done) {\n return { chunks: result.chunks, finished: true };\n }\n\n const doneIdx = findDoneChunk(result.chunks);\n\n if (doneIdx >= 0) {\n return { chunks: result.chunks.slice(0, doneIdx + 1), finished: true };\n }\n\n return { chunks: result.chunks, finished: false };\n};\n\n// eslint-disable-next-line func-style\nasync function* streamChunks(\n reader: ReadableStreamDefaultReader<Uint8Array>,\n decoder: TextDecoder,\n state: AnthropicSSEState,\n signal?: AbortSignal,\n) {\n let finished = false;\n\n while (!finished) {\n // eslint-disable-next-line no-await-in-loop\n const result = await sseStreamLoop(reader, decoder, state, signal);\n ({ finished } = result);\n yield* result.chunks;\n }\n}\n\n// eslint-disable-next-line func-style\nasync function* parseSSEStream(\n body: ReadableStream<Uint8Array>,\n providerName: string,\n signal?: AbortSignal,\n) {\n const reader = body.getReader();\n const decoder = new TextDecoder();\n\n const state: AnthropicSSEState = {\n buffer: \"\",\n currentToolId: \"\",\n currentToolName: \"\",\n isThinkingBlock: false,\n stopReason: \"\",\n thinkingSignature: \"\",\n toolInputJson: \"\",\n toolInputReported: 0,\n usage: undefined,\n providerName,\n providerBlockInputJson: \"\",\n };\n\n try {\n yield* streamChunks(reader, decoder, state, signal);\n } finally {\n reader.releaseLock();\n }\n}\n\nconst fetchAndStream = async function* (\n baseUrl: string,\n config: AnthropicConfig,\n params: AIProviderStreamParams,\n configuredMax: number,\n promptCaching: boolean,\n providerName: string,\n) {\n const builtBody = buildRequestBody(params, configuredMax, promptCaching);\n const body = config.transformRequestBody\n ? config.transformRequestBody(builtBody, params)\n : builtBody;\n\n const target = `${baseUrl}/v1/messages`;\n const fetchImpl = config.fetch ?? fetch;\n const token = config.tokenSource\n ? await Promise.resolve(config.tokenSource())\n : config.apiKey!;\n const suppliedHeaders =\n typeof config.headers === \"function\"\n ? await config.headers(params)\n : (config.headers ?? {});\n const requestHeaders = new Headers(suppliedHeaders);\n requestHeaders.set(\"Content-Type\", \"application/json\");\n if (config.authStyle === \"bearer\") {\n requestHeaders.set(\"Authorization\", `Bearer ${token}`);\n } else {\n requestHeaders.set(\"anthropic-version\", API_VERSION);\n requestHeaders.set(\"x-api-key\", token);\n }\n const response = await fetchImpl(target, {\n ...h2IfHttps(target),\n body: JSON.stringify(body),\n headers: requestHeaders,\n method: \"POST\",\n signal: params.signal,\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n\n throw ProviderError.fromResponse(providerName, response.status, errorText);\n }\n\n if (!response.body) {\n throw new ProviderError({\n message: `${providerName} Messages API returned no response body`,\n provider: providerName,\n retryable: true,\n });\n }\n\n yield* parseSSEStream(response.body, providerName, params.signal);\n};\n\nexport const anthropic = (config: AnthropicConfig): AIProviderConfig => {\n if (!config.apiKey && !config.tokenSource)\n throw new Error(\"anthropic() requires either apiKey or tokenSource\");\n const baseUrl = config.baseUrl ?? DEFAULT_BASE_URL;\n const configuredMax = config.maxTokens ?? DEFAULT_MAX_TOKENS;\n const promptCaching = config.promptCaching ?? true;\n const providerName = config.providerName ?? \"anthropic\";\n\n const capacityRequest = async (\n params: AIProviderStreamParams,\n path: string,\n body?: Record<string, unknown>,\n ) => {\n const token = config.tokenSource\n ? await config.tokenSource()\n : config.apiKey!;\n const headers = new Headers(\n typeof config.headers === \"function\"\n ? await config.headers(params)\n : config.headers,\n );\n headers.set(\"Content-Type\", \"application/json\");\n if (config.authStyle === \"bearer\")\n headers.set(\"Authorization\", `Bearer ${token}`);\n else {\n headers.set(\"anthropic-version\", API_VERSION);\n headers.set(\"x-api-key\", token);\n }\n return capacityJson(\n await (config.fetch ?? fetch)(`${baseUrl}${path}`, {\n method: body ? \"POST\" : \"GET\",\n headers,\n body: body ? JSON.stringify(body) : undefined,\n signal: params.signal\n ? AbortSignal.any([params.signal, AbortSignal.timeout(15_000)])\n : AbortSignal.timeout(15_000),\n }),\n );\n };\n // Anthropic's token-counting guide excludes hosted search/fetch/code/tool-search,\n // even though the generated API schema lists them. Count the supported caller\n // payload only; generation retains the full body and validates hosted context.\n const countingRequest = (params: AIProviderStreamParams) => {\n const built = buildRequestBody(params, configuredMax, promptCaching);\n const body = config.transformRequestBody\n ? config.transformRequestBody(built, params)\n : built;\n const counted: Record<string, unknown> = {};\n for (const key of [\n \"model\",\n \"messages\",\n \"system\",\n \"tools\",\n \"tool_choice\",\n \"thinking\",\n ])\n if (body[key] !== undefined) counted[key] = body[key];\n const tools = Array.isArray(body.tools) ? body.tools : [];\n const hosted = tools.filter(\n (tool) =>\n isRecord(tool) &&\n typeof tool.type === \"string\" &&\n /^(web_search_|web_fetch_|code_execution_|bash_code_execution_|text_editor_code_execution_|tool_search_tool_)/u.test(\n tool.type,\n ),\n );\n const scope =\n hosted.length > 0 || body.mcp_servers !== undefined\n ? (\"caller-input\" as const)\n : (\"request\" as const);\n if (hosted.length > 0) {\n const clientTools = tools.filter((tool) => !hosted.includes(tool));\n if (clientTools.length) counted.tools = clientTools;\n else delete counted.tools;\n const choice = counted.tool_choice;\n if (\n !clientTools.length ||\n (isRecord(choice) &&\n choice.type === \"tool\" &&\n hosted.some((tool) => isRecord(tool) && tool.name === choice.name))\n )\n delete counted.tool_choice;\n }\n return { counted, scope };\n };\n const inputCapacity = {\n outputTokens: (params: AIProviderStreamParams) => {\n const built = buildRequestBody(params, configuredMax, promptCaching);\n const body = config.transformRequestBody\n ? config.transformRequestBody(built, params)\n : built;\n return positiveTokenLimit(body.max_tokens);\n },\n getLimits: cacheModelLimits(\n async (params) => {\n const data = await capacityRequest(\n params,\n `/v1/models/${encodeURIComponent(params.model)}`,\n );\n const context = positiveTokenLimit(data.max_input_tokens);\n return {\n maxInputTokens: context,\n contextWindowTokens: context,\n maxOutputTokens: positiveTokenLimit(data.max_tokens),\n };\n },\n config.tokenSource || typeof config.headers === \"function\" ? 0 : 300_000,\n ),\n countScope: (params: AIProviderStreamParams) =>\n countingRequest(params).scope,\n countTokens: async (params: AIProviderStreamParams) => {\n const { counted } = countingRequest(params);\n return inputTokenCount(\n (await capacityRequest(params, \"/v1/messages/count_tokens\", counted))\n .input_tokens,\n );\n },\n };\n return instrumentAIProvider(\n {\n inputCapacity,\n stream: (params: AIProviderStreamParams) =>\n fetchAndStream(\n baseUrl,\n config,\n params,\n configuredMax,\n promptCaching,\n providerName,\n ),\n },\n providerName,\n );\n};\n"
|
|
12
12
|
],
|
|
13
|
-
"mappings": "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",
|
|
14
|
-
"debugId": "
|
|
13
|
+
"mappings": "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",
|
|
14
|
+
"debugId": "5326E290D6DB9BD864756E2164756E21",
|
|
15
15
|
"names": []
|
|
16
16
|
}
|
|
@@ -2201,14 +2201,79 @@ var getNumber = (obj, key) => {
|
|
|
2201
2201
|
}
|
|
2202
2202
|
return 0;
|
|
2203
2203
|
};
|
|
2204
|
+
var TOOL_INPUT_PROGRESS_CHARS = 2048;
|
|
2205
|
+
var TOOL_INPUT_FIELD_MAX_CHARS = 200;
|
|
2206
|
+
var readJsonString = (json, start) => {
|
|
2207
|
+
for (let index = start + 1;index < json.length; index += 1) {
|
|
2208
|
+
if (json[index] === "\\")
|
|
2209
|
+
index += 1;
|
|
2210
|
+
else if (json[index] === '"')
|
|
2211
|
+
return { end: index + 1, raw: json.slice(start + 1, index) };
|
|
2212
|
+
}
|
|
2213
|
+
return;
|
|
2214
|
+
};
|
|
2215
|
+
var decodeJsonString = (raw) => {
|
|
2216
|
+
try {
|
|
2217
|
+
const value = JSON.parse(`"${raw}"`);
|
|
2218
|
+
return typeof value === "string" ? value : undefined;
|
|
2219
|
+
} catch {
|
|
2220
|
+
return;
|
|
2221
|
+
}
|
|
2222
|
+
};
|
|
2223
|
+
var completeStringFields = (partialJson) => {
|
|
2224
|
+
const fields = {};
|
|
2225
|
+
let depth = 0;
|
|
2226
|
+
let key;
|
|
2227
|
+
let index = 0;
|
|
2228
|
+
while (index < partialJson.length) {
|
|
2229
|
+
const character = partialJson[index];
|
|
2230
|
+
if (character === '"') {
|
|
2231
|
+
const text = readJsonString(partialJson, index);
|
|
2232
|
+
if (!text)
|
|
2233
|
+
break;
|
|
2234
|
+
if (depth === 1 && key === undefined) {
|
|
2235
|
+
const after = partialJson.slice(text.end).trimStart();
|
|
2236
|
+
if (after.startsWith(":"))
|
|
2237
|
+
key = text.raw;
|
|
2238
|
+
} else if (depth === 1 && key !== undefined) {
|
|
2239
|
+
const value = decodeJsonString(text.raw);
|
|
2240
|
+
if (value !== undefined && value.length <= TOOL_INPUT_FIELD_MAX_CHARS)
|
|
2241
|
+
fields[key] = value;
|
|
2242
|
+
key = undefined;
|
|
2243
|
+
}
|
|
2244
|
+
index = text.end;
|
|
2245
|
+
continue;
|
|
2246
|
+
}
|
|
2247
|
+
if (character === "{" || character === "[")
|
|
2248
|
+
depth += 1;
|
|
2249
|
+
else if (character === "}" || character === "]")
|
|
2250
|
+
depth -= 1;
|
|
2251
|
+
else if (character === "," && depth === 1)
|
|
2252
|
+
key = undefined;
|
|
2253
|
+
index += 1;
|
|
2254
|
+
}
|
|
2255
|
+
return fields;
|
|
2256
|
+
};
|
|
2257
|
+
var toolInputProgress = (state) => {
|
|
2258
|
+
state.toolInputReported = state.toolInputJson.length;
|
|
2259
|
+
return {
|
|
2260
|
+
fields: completeStringFields(state.toolInputJson),
|
|
2261
|
+
id: state.currentToolId,
|
|
2262
|
+
name: state.currentToolName,
|
|
2263
|
+
receivedChars: state.toolInputJson.length,
|
|
2264
|
+
type: "tool_input"
|
|
2265
|
+
};
|
|
2266
|
+
};
|
|
2204
2267
|
var handleContentBlockStart = (parsed, state) => {
|
|
2205
2268
|
const block = getRecord(parsed, "content_block");
|
|
2206
2269
|
if (block && block.type === "tool_use") {
|
|
2207
2270
|
state.currentToolId = getString(block, "id");
|
|
2208
2271
|
state.currentToolName = getString(block, "name");
|
|
2209
2272
|
state.toolInputJson = "";
|
|
2273
|
+
state.toolInputReported = 0;
|
|
2210
2274
|
state.isThinkingBlock = false;
|
|
2211
2275
|
state.currentProviderBlock = undefined;
|
|
2276
|
+
return toolInputProgress(state);
|
|
2212
2277
|
} else if (block && block.type === "thinking") {
|
|
2213
2278
|
state.isThinkingBlock = true;
|
|
2214
2279
|
state.thinkingSignature = "";
|
|
@@ -2218,6 +2283,7 @@ var handleContentBlockStart = (parsed, state) => {
|
|
|
2218
2283
|
state.currentProviderBlock = block && block.type !== "text" ? { ...block } : undefined;
|
|
2219
2284
|
state.providerBlockInputJson = "";
|
|
2220
2285
|
}
|
|
2286
|
+
return;
|
|
2221
2287
|
};
|
|
2222
2288
|
var handleContentBlockDelta = (parsed, state) => {
|
|
2223
2289
|
const delta = getRecord(parsed, "delta");
|
|
@@ -2252,6 +2318,8 @@ var handleContentBlockDelta = (parsed, state) => {
|
|
|
2252
2318
|
state.providerBlockInputJson += getString(delta, "partial_json");
|
|
2253
2319
|
} else {
|
|
2254
2320
|
state.toolInputJson += getString(delta, "partial_json");
|
|
2321
|
+
if (state.toolInputJson.length - state.toolInputReported >= TOOL_INPUT_PROGRESS_CHARS)
|
|
2322
|
+
return toolInputProgress(state);
|
|
2255
2323
|
}
|
|
2256
2324
|
}
|
|
2257
2325
|
if (delta.type === "signature_delta") {
|
|
@@ -2371,8 +2439,7 @@ var handleError = (parsed, state) => {
|
|
|
2371
2439
|
var processEvent = (eventType, parsed, state) => {
|
|
2372
2440
|
switch (eventType) {
|
|
2373
2441
|
case "content_block_start": {
|
|
2374
|
-
handleContentBlockStart(parsed, state);
|
|
2375
|
-
return;
|
|
2442
|
+
return handleContentBlockStart(parsed, state);
|
|
2376
2443
|
}
|
|
2377
2444
|
case "content_block_delta": {
|
|
2378
2445
|
return handleContentBlockDelta(parsed, state);
|
|
@@ -2475,6 +2542,7 @@ async function* parseSSEStream3(body, providerName, signal) {
|
|
|
2475
2542
|
stopReason: "",
|
|
2476
2543
|
thinkingSignature: "",
|
|
2477
2544
|
toolInputJson: "",
|
|
2545
|
+
toolInputReported: 0,
|
|
2478
2546
|
usage: undefined,
|
|
2479
2547
|
providerName,
|
|
2480
2548
|
providerBlockInputJson: ""
|
|
@@ -3518,5 +3586,5 @@ export {
|
|
|
3518
3586
|
verifyOpenRouterWebhookSignature
|
|
3519
3587
|
};
|
|
3520
3588
|
|
|
3521
|
-
//# debugId=
|
|
3589
|
+
//# debugId=28EECE403772185564756E2164756E21
|
|
3522
3590
|
//# sourceMappingURL=openrouter.js.map
|