@marinoscar/platform-api 0.1.0-next.5 → 0.1.0-next.7
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 +19 -0
- package/dist/ai/core/ai-error.d.ts +15 -158
- package/dist/ai/core/ai-error.d.ts.map +1 -1
- package/dist/ai/core/ai-error.js +58 -221
- package/dist/ai/core/ai-error.js.map +1 -1
- package/dist/ai/core/capabilities.d.ts +3 -126
- package/dist/ai/core/capabilities.d.ts.map +1 -1
- package/dist/ai/core/capabilities.js +13 -109
- package/dist/ai/core/capabilities.js.map +1 -1
- package/dist/ai/core/conversation.d.ts +2 -15
- package/dist/ai/core/conversation.d.ts.map +1 -1
- package/dist/ai/core/conversation.js +9 -54
- package/dist/ai/core/conversation.js.map +1 -1
- package/dist/ai/core/hosted-tools.d.ts +3 -172
- package/dist/ai/core/hosted-tools.d.ts.map +1 -1
- package/dist/ai/core/hosted-tools.js +20 -286
- package/dist/ai/core/hosted-tools.js.map +1 -1
- package/dist/ai/core/provider-adapter.interface.d.ts +3 -260
- package/dist/ai/core/provider-adapter.interface.d.ts.map +1 -1
- package/dist/ai/core/provider-adapter.interface.js +7 -29
- package/dist/ai/core/provider-adapter.interface.js.map +1 -1
- package/dist/ai/core/structured-output.d.ts +3 -49
- package/dist/ai/core/structured-output.d.ts.map +1 -1
- package/dist/ai/core/structured-output.js +9 -80
- package/dist/ai/core/structured-output.js.map +1 -1
- package/dist/ai/core/tools.d.ts +3 -93
- package/dist/ai/core/tools.d.ts.map +1 -1
- package/dist/ai/core/tools.js +9 -73
- package/dist/ai/core/tools.js.map +1 -1
- package/dist/ai/core/types/file-inputs.types.d.ts +3 -102
- package/dist/ai/core/types/file-inputs.types.d.ts.map +1 -1
- package/dist/ai/core/types/file-inputs.types.js +14 -78
- package/dist/ai/core/types/file-inputs.types.js.map +1 -1
- package/dist/ai/core/types/media.types.d.ts +3 -616
- package/dist/ai/core/types/media.types.d.ts.map +1 -1
- package/dist/ai/core/types/media.types.js +33 -203
- package/dist/ai/core/types/media.types.js.map +1 -1
- package/dist/ai/core/types/responses.types.d.ts +3 -619
- package/dist/ai/core/types/responses.types.d.ts.map +1 -1
- package/dist/ai/core/types/responses.types.js +9 -57
- package/dist/ai/core/types/responses.types.js.map +1 -1
- package/dist/ai/http/dto/ai-images.dto.d.ts +4 -4
- package/dist/ai/index.d.ts +1 -1
- package/dist/ai/index.d.ts.map +1 -1
- package/dist/ai/index.js +3 -3
- package/dist/ai/index.js.map +1 -1
- package/dist/ai/providers/anthropic/anthropic-client.factory.d.ts +13 -15
- package/dist/ai/providers/anthropic/anthropic-client.factory.d.ts.map +1 -1
- package/dist/ai/providers/anthropic/anthropic-client.factory.js +23 -52
- package/dist/ai/providers/anthropic/anthropic-client.factory.js.map +1 -1
- package/dist/ai/providers/anthropic/anthropic.adapter.d.ts +15 -51
- package/dist/ai/providers/anthropic/anthropic.adapter.d.ts.map +1 -1
- package/dist/ai/providers/anthropic/anthropic.adapter.js +29 -293
- package/dist/ai/providers/anthropic/anthropic.adapter.js.map +1 -1
- package/dist/ai/providers/azure-openai/azure-openai-client.factory.d.ts +10 -14
- package/dist/ai/providers/azure-openai/azure-openai-client.factory.d.ts.map +1 -1
- package/dist/ai/providers/azure-openai/azure-openai-client.factory.js +20 -53
- package/dist/ai/providers/azure-openai/azure-openai-client.factory.js.map +1 -1
- package/dist/ai/providers/azure-openai/azure-openai.adapter.d.ts +14 -31
- package/dist/ai/providers/azure-openai/azure-openai.adapter.d.ts.map +1 -1
- package/dist/ai/providers/azure-openai/azure-openai.adapter.js +25 -170
- package/dist/ai/providers/azure-openai/azure-openai.adapter.js.map +1 -1
- package/dist/ai/providers/gemini/gemini-client.factory.d.ts +13 -18
- package/dist/ai/providers/gemini/gemini-client.factory.d.ts.map +1 -1
- package/dist/ai/providers/gemini/gemini-client.factory.js +24 -68
- package/dist/ai/providers/gemini/gemini-client.factory.js.map +1 -1
- package/dist/ai/providers/gemini/gemini.adapter.d.ts +15 -58
- package/dist/ai/providers/gemini/gemini.adapter.d.ts.map +1 -1
- package/dist/ai/providers/gemini/gemini.adapter.js +29 -348
- package/dist/ai/providers/gemini/gemini.adapter.js.map +1 -1
- package/dist/ai/providers/openai/openai-client.factory.d.ts +13 -35
- package/dist/ai/providers/openai/openai-client.factory.d.ts.map +1 -1
- package/dist/ai/providers/openai/openai-client.factory.js +25 -64
- package/dist/ai/providers/openai/openai-client.factory.js.map +1 -1
- package/dist/ai/providers/openai/openai.adapter.d.ts +15 -48
- package/dist/ai/providers/openai/openai.adapter.d.ts.map +1 -1
- package/dist/ai/providers/openai/openai.adapter.js +27 -206
- package/dist/ai/providers/openai/openai.adapter.js.map +1 -1
- package/dist/ai/providers/openai-compatible/openai-compatible-client.factory.d.ts +11 -11
- package/dist/ai/providers/openai-compatible/openai-compatible-client.factory.d.ts.map +1 -1
- package/dist/ai/providers/openai-compatible/openai-compatible-client.factory.js +18 -41
- package/dist/ai/providers/openai-compatible/openai-compatible-client.factory.js.map +1 -1
- package/dist/ai/providers/openai-compatible/openai-compatible.adapter.d.ts +14 -32
- package/dist/ai/providers/openai-compatible/openai-compatible.adapter.d.ts.map +1 -1
- package/dist/ai/providers/openai-compatible/openai-compatible.adapter.js +25 -149
- package/dist/ai/providers/openai-compatible/openai-compatible.adapter.js.map +1 -1
- package/dist/ai/providers/platform-ai-tracer.d.ts +4 -0
- package/dist/ai/providers/platform-ai-tracer.d.ts.map +1 -0
- package/dist/ai/providers/platform-ai-tracer.js +20 -0
- package/dist/ai/providers/platform-ai-tracer.js.map +1 -0
- package/dist/ai/runtime/ai-image-run-request.d.ts +1 -1
- package/dist/ai/testing/conformance/ai-no-sdk-leak.suite.d.ts +28 -5
- package/dist/ai/testing/conformance/ai-no-sdk-leak.suite.d.ts.map +1 -1
- package/dist/ai/testing/conformance/ai-no-sdk-leak.suite.js +54 -9
- package/dist/ai/testing/conformance/ai-no-sdk-leak.suite.js.map +1 -1
- package/dist/ai/testing/index.d.ts +1 -1
- package/dist/ai/testing/index.d.ts.map +1 -1
- package/dist/ai/testing/index.js +2 -1
- package/dist/ai/testing/index.js.map +1 -1
- package/dist/jobs/rate-limit.error.d.ts +2 -26
- package/dist/jobs/rate-limit.error.d.ts.map +1 -1
- package/dist/jobs/rate-limit.error.js +4 -52
- package/dist/jobs/rate-limit.error.js.map +1 -1
- package/dist/storage/config/storage-config.controller.d.ts +1 -1
- package/package.json +3 -2
- package/dist/ai/providers/anthropic/anthropic-errors.d.ts +0 -16
- package/dist/ai/providers/anthropic/anthropic-errors.d.ts.map +0 -1
- package/dist/ai/providers/anthropic/anthropic-errors.js +0 -156
- package/dist/ai/providers/anthropic/anthropic-errors.js.map +0 -1
- package/dist/ai/providers/anthropic/anthropic-messages.mapper.d.ts +0 -80
- package/dist/ai/providers/anthropic/anthropic-messages.mapper.d.ts.map +0 -1
- package/dist/ai/providers/anthropic/anthropic-messages.mapper.js +0 -536
- package/dist/ai/providers/anthropic/anthropic-messages.mapper.js.map +0 -1
- package/dist/ai/providers/anthropic/anthropic-model-catalog.d.ts +0 -49
- package/dist/ai/providers/anthropic/anthropic-model-catalog.d.ts.map +0 -1
- package/dist/ai/providers/anthropic/anthropic-model-catalog.js +0 -198
- package/dist/ai/providers/anthropic/anthropic-model-catalog.js.map +0 -1
- package/dist/ai/providers/anthropic/anthropic-stream.mapper.d.ts +0 -35
- package/dist/ai/providers/anthropic/anthropic-stream.mapper.d.ts.map +0 -1
- package/dist/ai/providers/anthropic/anthropic-stream.mapper.js +0 -203
- package/dist/ai/providers/anthropic/anthropic-stream.mapper.js.map +0 -1
- package/dist/ai/providers/anthropic/testing/anthropic-fixtures.d.ts +0 -18
- package/dist/ai/providers/anthropic/testing/anthropic-fixtures.d.ts.map +0 -1
- package/dist/ai/providers/anthropic/testing/anthropic-fixtures.js +0 -120
- package/dist/ai/providers/anthropic/testing/anthropic-fixtures.js.map +0 -1
- package/dist/ai/providers/anthropic/testing/anthropic-mock-transport.d.ts +0 -59
- package/dist/ai/providers/anthropic/testing/anthropic-mock-transport.d.ts.map +0 -1
- package/dist/ai/providers/anthropic/testing/anthropic-mock-transport.js +0 -206
- package/dist/ai/providers/anthropic/testing/anthropic-mock-transport.js.map +0 -1
- package/dist/ai/providers/azure-openai/azure-openai-settings.d.ts +0 -23
- package/dist/ai/providers/azure-openai/azure-openai-settings.d.ts.map +0 -1
- package/dist/ai/providers/azure-openai/azure-openai-settings.js +0 -54
- package/dist/ai/providers/azure-openai/azure-openai-settings.js.map +0 -1
- package/dist/ai/providers/gemini/gemini-content.mapper.d.ts +0 -98
- package/dist/ai/providers/gemini/gemini-content.mapper.d.ts.map +0 -1
- package/dist/ai/providers/gemini/gemini-content.mapper.js +0 -665
- package/dist/ai/providers/gemini/gemini-content.mapper.js.map +0 -1
- package/dist/ai/providers/gemini/gemini-embeddings.mapper.d.ts +0 -13
- package/dist/ai/providers/gemini/gemini-embeddings.mapper.d.ts.map +0 -1
- package/dist/ai/providers/gemini/gemini-embeddings.mapper.js +0 -78
- package/dist/ai/providers/gemini/gemini-embeddings.mapper.js.map +0 -1
- package/dist/ai/providers/gemini/gemini-errors.d.ts +0 -32
- package/dist/ai/providers/gemini/gemini-errors.d.ts.map +0 -1
- package/dist/ai/providers/gemini/gemini-errors.js +0 -191
- package/dist/ai/providers/gemini/gemini-errors.js.map +0 -1
- package/dist/ai/providers/gemini/gemini-model-catalog.d.ts +0 -45
- package/dist/ai/providers/gemini/gemini-model-catalog.d.ts.map +0 -1
- package/dist/ai/providers/gemini/gemini-model-catalog.js +0 -264
- package/dist/ai/providers/gemini/gemini-model-catalog.js.map +0 -1
- package/dist/ai/providers/gemini/gemini-stream.mapper.d.ts +0 -31
- package/dist/ai/providers/gemini/gemini-stream.mapper.d.ts.map +0 -1
- package/dist/ai/providers/gemini/gemini-stream.mapper.js +0 -118
- package/dist/ai/providers/gemini/gemini-stream.mapper.js.map +0 -1
- package/dist/ai/providers/gemini/testing/gemini-fixtures.d.ts +0 -80
- package/dist/ai/providers/gemini/testing/gemini-fixtures.d.ts.map +0 -1
- package/dist/ai/providers/gemini/testing/gemini-fixtures.js +0 -118
- package/dist/ai/providers/gemini/testing/gemini-fixtures.js.map +0 -1
- package/dist/ai/providers/gemini/testing/gemini-mock-transport.d.ts +0 -82
- package/dist/ai/providers/gemini/testing/gemini-mock-transport.d.ts.map +0 -1
- package/dist/ai/providers/gemini/testing/gemini-mock-transport.js +0 -342
- package/dist/ai/providers/gemini/testing/gemini-mock-transport.js.map +0 -1
- package/dist/ai/providers/openai/openai-audio.mapper.d.ts +0 -42
- package/dist/ai/providers/openai/openai-audio.mapper.d.ts.map +0 -1
- package/dist/ai/providers/openai/openai-audio.mapper.js +0 -266
- package/dist/ai/providers/openai/openai-audio.mapper.js.map +0 -1
- package/dist/ai/providers/openai/openai-call-telemetry.d.ts +0 -25
- package/dist/ai/providers/openai/openai-call-telemetry.d.ts.map +0 -1
- package/dist/ai/providers/openai/openai-call-telemetry.js +0 -93
- package/dist/ai/providers/openai/openai-call-telemetry.js.map +0 -1
- package/dist/ai/providers/openai/openai-chat-completions-stream.mapper.d.ts +0 -41
- package/dist/ai/providers/openai/openai-chat-completions-stream.mapper.d.ts.map +0 -1
- package/dist/ai/providers/openai/openai-chat-completions-stream.mapper.js +0 -173
- package/dist/ai/providers/openai/openai-chat-completions-stream.mapper.js.map +0 -1
- package/dist/ai/providers/openai/openai-chat-completions.engine.d.ts +0 -33
- package/dist/ai/providers/openai/openai-chat-completions.engine.d.ts.map +0 -1
- package/dist/ai/providers/openai/openai-chat-completions.engine.js +0 -165
- package/dist/ai/providers/openai/openai-chat-completions.engine.js.map +0 -1
- package/dist/ai/providers/openai/openai-chat-completions.mapper.d.ts +0 -42
- package/dist/ai/providers/openai/openai-chat-completions.mapper.d.ts.map +0 -1
- package/dist/ai/providers/openai/openai-chat-completions.mapper.js +0 -304
- package/dist/ai/providers/openai/openai-chat-completions.mapper.js.map +0 -1
- package/dist/ai/providers/openai/openai-embeddings.mapper.d.ts +0 -25
- package/dist/ai/providers/openai/openai-embeddings.mapper.d.ts.map +0 -1
- package/dist/ai/providers/openai/openai-embeddings.mapper.js +0 -81
- package/dist/ai/providers/openai/openai-embeddings.mapper.js.map +0 -1
- package/dist/ai/providers/openai/openai-errors.d.ts +0 -45
- package/dist/ai/providers/openai/openai-errors.d.ts.map +0 -1
- package/dist/ai/providers/openai/openai-errors.js +0 -247
- package/dist/ai/providers/openai/openai-errors.js.map +0 -1
- package/dist/ai/providers/openai/openai-family-guards.d.ts +0 -4
- package/dist/ai/providers/openai/openai-family-guards.d.ts.map +0 -1
- package/dist/ai/providers/openai/openai-family-guards.js +0 -19
- package/dist/ai/providers/openai/openai-family-guards.js.map +0 -1
- package/dist/ai/providers/openai/openai-images.mapper.d.ts +0 -23
- package/dist/ai/providers/openai/openai-images.mapper.d.ts.map +0 -1
- package/dist/ai/providers/openai/openai-images.mapper.js +0 -164
- package/dist/ai/providers/openai/openai-images.mapper.js.map +0 -1
- package/dist/ai/providers/openai/openai-model-catalog.d.ts +0 -36
- package/dist/ai/providers/openai/openai-model-catalog.d.ts.map +0 -1
- package/dist/ai/providers/openai/openai-model-catalog.js +0 -209
- package/dist/ai/providers/openai/openai-model-catalog.js.map +0 -1
- package/dist/ai/providers/openai/openai-realtime.mapper.d.ts +0 -18
- package/dist/ai/providers/openai/openai-realtime.mapper.d.ts.map +0 -1
- package/dist/ai/providers/openai/openai-realtime.mapper.js +0 -159
- package/dist/ai/providers/openai/openai-realtime.mapper.js.map +0 -1
- package/dist/ai/providers/openai/openai-redirect-guard.d.ts +0 -9
- package/dist/ai/providers/openai/openai-redirect-guard.d.ts.map +0 -1
- package/dist/ai/providers/openai/openai-redirect-guard.js +0 -61
- package/dist/ai/providers/openai/openai-redirect-guard.js.map +0 -1
- package/dist/ai/providers/openai/openai-responses.engine.d.ts +0 -50
- package/dist/ai/providers/openai/openai-responses.engine.d.ts.map +0 -1
- package/dist/ai/providers/openai/openai-responses.engine.js +0 -206
- package/dist/ai/providers/openai/openai-responses.engine.js.map +0 -1
- package/dist/ai/providers/openai/openai-responses.mapper.d.ts +0 -64
- package/dist/ai/providers/openai/openai-responses.mapper.d.ts.map +0 -1
- package/dist/ai/providers/openai/openai-responses.mapper.js +0 -580
- package/dist/ai/providers/openai/openai-responses.mapper.js.map +0 -1
- package/dist/ai/providers/openai/openai-stream.mapper.d.ts +0 -28
- package/dist/ai/providers/openai/openai-stream.mapper.d.ts.map +0 -1
- package/dist/ai/providers/openai/openai-stream.mapper.js +0 -139
- package/dist/ai/providers/openai/openai-stream.mapper.js.map +0 -1
- package/dist/ai/providers/openai/testing/chat-completions-fixtures.d.ts +0 -24
- package/dist/ai/providers/openai/testing/chat-completions-fixtures.d.ts.map +0 -1
- package/dist/ai/providers/openai/testing/chat-completions-fixtures.js +0 -72
- package/dist/ai/providers/openai/testing/chat-completions-fixtures.js.map +0 -1
- package/dist/ai/providers/openai/testing/conformance-responders.d.ts +0 -7
- package/dist/ai/providers/openai/testing/conformance-responders.d.ts.map +0 -1
- package/dist/ai/providers/openai/testing/conformance-responders.js +0 -64
- package/dist/ai/providers/openai/testing/conformance-responders.js.map +0 -1
- package/dist/ai/providers/openai/testing/openai-fixtures.d.ts +0 -52
- package/dist/ai/providers/openai/testing/openai-fixtures.d.ts.map +0 -1
- package/dist/ai/providers/openai/testing/openai-fixtures.js +0 -208
- package/dist/ai/providers/openai/testing/openai-fixtures.js.map +0 -1
- package/dist/ai/providers/openai/testing/openai-mock-transport.d.ts +0 -242
- package/dist/ai/providers/openai/testing/openai-mock-transport.d.ts.map +0 -1
- package/dist/ai/providers/openai/testing/openai-mock-transport.js +0 -523
- package/dist/ai/providers/openai/testing/openai-mock-transport.js.map +0 -1
- package/dist/ai/providers/openai-compatible/openai-compatible-settings.d.ts +0 -13
- package/dist/ai/providers/openai-compatible/openai-compatible-settings.d.ts.map +0 -1
- package/dist/ai/providers/openai-compatible/openai-compatible-settings.js +0 -29
- package/dist/ai/providers/openai-compatible/openai-compatible-settings.js.map +0 -1
|
@@ -1,536 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
// =============================================================================
|
|
3
|
-
// Our Responses types <-> Anthropic Messages API (issue #446, epic #421)
|
|
4
|
-
// =============================================================================
|
|
5
|
-
//
|
|
6
|
-
// Pure functions, no I/O: `toAnthropicRequest` builds the SDK request body
|
|
7
|
-
// from an `AiResponseRequest`, `fromAnthropicMessage` turns a `Message` back
|
|
8
|
-
// into an `AiResponse`. The stream mapper shares `finishAnthropicResponse`,
|
|
9
|
-
// so a streamed and a non-streamed call cannot disagree about what a
|
|
10
|
-
// response means. This is the file that proves the neutral contract fits a
|
|
11
|
-
// second, differently shaped API unchanged.
|
|
12
|
-
//
|
|
13
|
-
// REQUEST MAPPING
|
|
14
|
-
//
|
|
15
|
-
// instructions (+ system/developer messages) -> `system`
|
|
16
|
-
// message (user) -> user turn: `text`, `image` (URL, or base64 from
|
|
17
|
-
// a `data:` URL), `document` (PDF by URL or
|
|
18
|
-
// base64; plain text inline)
|
|
19
|
-
// message (assistant) -> assistant turn, text only
|
|
20
|
-
// function_call -> assistant `tool_use` (the arguments parsed)
|
|
21
|
-
// function_call_output -> user `tool_result`
|
|
22
|
-
// reasoning -> the signed `thinking` / `redacted_thinking`
|
|
23
|
-
// blocks it carries as provider state
|
|
24
|
-
// (`AI_PROVIDER_STATE`), replayed verbatim; a
|
|
25
|
-
// reasoning item without Anthropic state is
|
|
26
|
-
// dropped (it has nothing Anthropic could verify)
|
|
27
|
-
// function tools -> `tools` with `input_schema`
|
|
28
|
-
// toolChoice -> auto | none | any ('required') | tool (named)
|
|
29
|
-
// reasoning.effort -> 'adaptive' families: `thinking: adaptive` +
|
|
30
|
-
// `output_config.effort`; 'budget' families:
|
|
31
|
-
// `thinking: enabled` + `budget_tokens`
|
|
32
|
-
// (`ANTHROPIC_THINKING_BUDGETS`)
|
|
33
|
-
// structuredOutput -> `output_config.format` (native), or a forced
|
|
34
|
-
// single tool whose `input_schema` is the schema
|
|
35
|
-
// ('tool' families); either way validated with
|
|
36
|
-
// `parseStructured`
|
|
37
|
-
// maxOutputTokens -> `max_tokens` (REQUIRED by the API — defaulted,
|
|
38
|
-
// see `resolveMaxTokens`)
|
|
39
|
-
//
|
|
40
|
-
// Consecutive items of the same role merge into one turn, so a replayed
|
|
41
|
-
// round (thinking, text, tool_use) is ONE assistant message and its tool
|
|
42
|
-
// outputs ONE user message — the shape Anthropic requires.
|
|
43
|
-
//
|
|
44
|
-
// THINKING IS NEVER EXPOSED RAW. A `thinking` block's text becomes the
|
|
45
|
-
// reasoning item's `summary` (Claude 4+ returns a summary there, never the
|
|
46
|
-
// raw chain of thought; `display: 'summarized'` is requested whenever the
|
|
47
|
-
// caller asks for reasoning on an adaptive model). Its `signature`, and every
|
|
48
|
-
// `redacted_thinking` block's encrypted `data`, travel only as symbol-keyed
|
|
49
|
-
// provider state — needed to replay a tool-use turn, invisible to JSON.
|
|
50
|
-
//
|
|
51
|
-
// REFUSED (AI_CAPABILITY_UNSUPPORTED): `previousResponseId` (Anthropic stores
|
|
52
|
-
// nothing — the facade refuses it first; this is defence in depth), hosted
|
|
53
|
-
// tools, a reasoning effort on a family without extended thinking,
|
|
54
|
-
// `temperature` on a family that rejects sampling parameters or together with
|
|
55
|
-
// extended thinking, and — on the forced-tool structured-output path only —
|
|
56
|
-
// extended thinking or other tools alongside a schema.
|
|
57
|
-
//
|
|
58
|
-
// NOT MAPPED: `metadata` (Anthropic's only metadata field is an end-user id,
|
|
59
|
-
// which is not what this contract's free-form map means) — dropped.
|
|
60
|
-
// `providerOptions.anthropic` is shallow-merged LAST as the escape hatch,
|
|
61
|
-
// except `stream`, which belongs to the port.
|
|
62
|
-
// =============================================================================
|
|
63
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
64
|
-
exports.anthropicStorageObjectIds = anthropicStorageObjectIds;
|
|
65
|
-
exports.anthropicReasoningBlocks = anthropicReasoningBlocks;
|
|
66
|
-
exports.toAnthropicRequest = toAnthropicRequest;
|
|
67
|
-
exports.anthropicReasoningItem = anthropicReasoningItem;
|
|
68
|
-
exports.fromAnthropicContentBlock = fromAnthropicContentBlock;
|
|
69
|
-
exports.anthropicUsage = anthropicUsage;
|
|
70
|
-
exports.finishAnthropicResponse = finishAnthropicResponse;
|
|
71
|
-
exports.fromAnthropicMessage = fromAnthropicMessage;
|
|
72
|
-
const ai_error_1 = require("../../core/ai-error");
|
|
73
|
-
const structured_output_1 = require("../../core/structured-output");
|
|
74
|
-
const responses_types_1 = require("../../core/types/responses.types");
|
|
75
|
-
const anthropic_errors_1 = require("./anthropic-errors");
|
|
76
|
-
const anthropic_model_catalog_1 = require("./anthropic-model-catalog");
|
|
77
|
-
/** Image types the Messages API accepts inline. */
|
|
78
|
-
const IMAGE_MEDIA_TYPES = ['image/jpeg', 'image/png', 'image/gif', 'image/webp'];
|
|
79
|
-
function unsupported(message, details = {}) {
|
|
80
|
-
return new ai_error_1.AiError('AI_CAPABILITY_UNSUPPORTED', message, {
|
|
81
|
-
details: { provider: anthropic_errors_1.ANTHROPIC_PROVIDER_ID, ...details },
|
|
82
|
-
});
|
|
83
|
-
}
|
|
84
|
-
function invalid(message, details = {}) {
|
|
85
|
-
return new ai_error_1.AiError('AI_INVALID_REQUEST', message, {
|
|
86
|
-
details: { provider: anthropic_errors_1.ANTHROPIC_PROVIDER_ID, ...details },
|
|
87
|
-
});
|
|
88
|
-
}
|
|
89
|
-
/** `data:<type>;base64,<payload>` → its parts, or `null` for anything else. */
|
|
90
|
-
function parseDataUrl(url) {
|
|
91
|
-
const match = /^data:([^;,]+)(?:;[^,]*)?;base64,(.*)$/s.exec(url);
|
|
92
|
-
return match ? { mediaType: match[1].trim().toLowerCase(), base64: match[2] } : null;
|
|
93
|
-
}
|
|
94
|
-
function isImageMediaType(value) {
|
|
95
|
-
return IMAGE_MEDIA_TYPES.includes(value);
|
|
96
|
-
}
|
|
97
|
-
function imageFromUrl(url) {
|
|
98
|
-
const data = parseDataUrl(url);
|
|
99
|
-
if (!data)
|
|
100
|
-
return { type: 'image', source: { type: 'url', url } };
|
|
101
|
-
if (!isImageMediaType(data.mediaType)) {
|
|
102
|
-
throw unsupported(`Anthropic does not accept "${data.mediaType}" images.`, { mediaType: data.mediaType });
|
|
103
|
-
}
|
|
104
|
-
return { type: 'image', source: { type: 'base64', media_type: data.mediaType, data: data.base64 } };
|
|
105
|
-
}
|
|
106
|
-
/** A document block from bytes: a PDF as base64, plain text inline. */
|
|
107
|
-
function documentFromBytes(mediaType, base64, title) {
|
|
108
|
-
const withTitle = title ? { title } : {};
|
|
109
|
-
if (mediaType === 'application/pdf') {
|
|
110
|
-
return { type: 'document', source: { type: 'base64', media_type: 'application/pdf', data: base64 }, ...withTitle };
|
|
111
|
-
}
|
|
112
|
-
if (mediaType === 'text/plain') {
|
|
113
|
-
return {
|
|
114
|
-
type: 'document',
|
|
115
|
-
source: { type: 'text', media_type: 'text/plain', data: Buffer.from(base64, 'base64').toString('utf8') },
|
|
116
|
-
...withTitle,
|
|
117
|
-
};
|
|
118
|
-
}
|
|
119
|
-
throw unsupported(`Anthropic accepts PDF and plain-text documents, not "${mediaType}".`, { mediaType });
|
|
120
|
-
}
|
|
121
|
-
function documentFromUrl(url, filename) {
|
|
122
|
-
const data = parseDataUrl(url);
|
|
123
|
-
// A remote document by URL: Anthropic fetches PDFs only.
|
|
124
|
-
return data
|
|
125
|
-
? documentFromBytes(data.mediaType, data.base64, filename)
|
|
126
|
-
: { type: 'document', source: { type: 'url', url }, ...(filename ? { title: filename } : {}) };
|
|
127
|
-
}
|
|
128
|
-
/** A storage-object part, from what the adapter delivered for it — by the object's MODALITY. */
|
|
129
|
-
function storagePart(part, storage) {
|
|
130
|
-
const delivered = storage?.get(part.storageObjectId);
|
|
131
|
-
if (!delivered || (!delivered.url && !delivered.data)) {
|
|
132
|
-
throw invalid('A storage-object input was not resolved by the runtime.', { part: part.type });
|
|
133
|
-
}
|
|
134
|
-
const filename = (part.type === 'file' ? part.filename : undefined) ?? delivered.filename;
|
|
135
|
-
if (delivered.modality === 'image') {
|
|
136
|
-
if (delivered.url)
|
|
137
|
-
return imageFromUrl(delivered.url);
|
|
138
|
-
if (!isImageMediaType(delivered.mimeType)) {
|
|
139
|
-
throw unsupported(`Anthropic does not accept "${delivered.mimeType}" images.`, { mediaType: delivered.mimeType });
|
|
140
|
-
}
|
|
141
|
-
return {
|
|
142
|
-
type: 'image',
|
|
143
|
-
source: { type: 'base64', media_type: delivered.mimeType, data: Buffer.from(delivered.data).toString('base64') },
|
|
144
|
-
};
|
|
145
|
-
}
|
|
146
|
-
return delivered.data
|
|
147
|
-
? documentFromBytes(delivered.mimeType, Buffer.from(delivered.data).toString('base64'), filename)
|
|
148
|
-
: documentFromUrl(delivered.url, filename);
|
|
149
|
-
}
|
|
150
|
-
function toUserBlock(part, storage) {
|
|
151
|
-
switch (part.type) {
|
|
152
|
-
case 'text':
|
|
153
|
-
return { type: 'text', text: part.text };
|
|
154
|
-
case 'image':
|
|
155
|
-
if (part.url)
|
|
156
|
-
return imageFromUrl(part.url);
|
|
157
|
-
if (part.storageObjectId)
|
|
158
|
-
return storagePart({ ...part, storageObjectId: part.storageObjectId }, storage);
|
|
159
|
-
throw invalid('An image part needs a url or a storageObjectId.', { part: 'image' });
|
|
160
|
-
case 'file':
|
|
161
|
-
if (part.url)
|
|
162
|
-
return documentFromUrl(part.url, part.filename);
|
|
163
|
-
if (part.storageObjectId)
|
|
164
|
-
return storagePart({ ...part, storageObjectId: part.storageObjectId }, storage);
|
|
165
|
-
throw invalid('A file part needs a url or a storageObjectId.', { part: 'file' });
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
/** Every storage object id `req` names, in order, each once. */
|
|
169
|
-
function anthropicStorageObjectIds(req) {
|
|
170
|
-
if (!Array.isArray(req.input))
|
|
171
|
-
return [];
|
|
172
|
-
const ids = new Set();
|
|
173
|
-
for (const item of req.input) {
|
|
174
|
-
if (item.type !== 'message')
|
|
175
|
-
continue;
|
|
176
|
-
for (const part of item.content) {
|
|
177
|
-
if (part.type !== 'text' && !part.url && part.storageObjectId)
|
|
178
|
-
ids.add(part.storageObjectId);
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
return [...ids];
|
|
182
|
-
}
|
|
183
|
-
/** The thinking blocks an Anthropic reasoning item carries, or `[]`. */
|
|
184
|
-
function anthropicReasoningBlocks(item) {
|
|
185
|
-
const state = item[responses_types_1.AI_PROVIDER_STATE];
|
|
186
|
-
if (!state || state.provider !== anthropic_errors_1.ANTHROPIC_PROVIDER_ID)
|
|
187
|
-
return [];
|
|
188
|
-
const blocks = state.data?.blocks;
|
|
189
|
-
return Array.isArray(blocks) ? blocks.map((block) => ({ ...block })) : [];
|
|
190
|
-
}
|
|
191
|
-
function parseArguments(item) {
|
|
192
|
-
try {
|
|
193
|
-
return JSON.parse(item.arguments || '{}');
|
|
194
|
-
}
|
|
195
|
-
catch {
|
|
196
|
-
throw invalid('A replayed function call carries arguments that are not JSON.', { callId: item.callId });
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
/** Appends blocks to the conversation, merging into the previous turn when the role matches. */
|
|
200
|
-
function push(conv, role, blocks) {
|
|
201
|
-
if (blocks.length === 0)
|
|
202
|
-
return;
|
|
203
|
-
const last = conv.messages[conv.messages.length - 1];
|
|
204
|
-
if (last && last.role === role && Array.isArray(last.content)) {
|
|
205
|
-
last.content.push(...blocks);
|
|
206
|
-
}
|
|
207
|
-
else {
|
|
208
|
-
conv.messages.push({ role, content: [...blocks] });
|
|
209
|
-
}
|
|
210
|
-
}
|
|
211
|
-
function toConversation(req, storage) {
|
|
212
|
-
const conv = { system: req.instructions ? [req.instructions] : [], messages: [] };
|
|
213
|
-
if (typeof req.input === 'string') {
|
|
214
|
-
push(conv, 'user', [{ type: 'text', text: req.input }]);
|
|
215
|
-
return conv;
|
|
216
|
-
}
|
|
217
|
-
for (const item of req.input) {
|
|
218
|
-
switch (item.type) {
|
|
219
|
-
case 'message':
|
|
220
|
-
if (item.role === 'system' || item.role === 'developer') {
|
|
221
|
-
if (item.content.some((part) => part.type !== 'text')) {
|
|
222
|
-
throw invalid('A system message may contain only text parts.', { role: item.role });
|
|
223
|
-
}
|
|
224
|
-
conv.system.push(item.content.map((part) => (part.type === 'text' ? part.text : '')).join(''));
|
|
225
|
-
}
|
|
226
|
-
else if (item.role === 'assistant') {
|
|
227
|
-
if (item.content.some((part) => part.type !== 'text')) {
|
|
228
|
-
throw invalid('An assistant message may contain only text parts.', { role: 'assistant' });
|
|
229
|
-
}
|
|
230
|
-
push(conv, 'assistant', item.content
|
|
231
|
-
.map((part) => (part.type === 'text' ? part.text : ''))
|
|
232
|
-
.filter((text) => text.length > 0)
|
|
233
|
-
.map((text) => ({ type: 'text', text })));
|
|
234
|
-
}
|
|
235
|
-
else {
|
|
236
|
-
push(conv, 'user', item.content.map((part) => toUserBlock(part, storage)));
|
|
237
|
-
}
|
|
238
|
-
break;
|
|
239
|
-
case 'function_call':
|
|
240
|
-
push(conv, 'assistant', [{ type: 'tool_use', id: item.callId, name: item.name, input: parseArguments(item) }]);
|
|
241
|
-
break;
|
|
242
|
-
case 'function_call_output':
|
|
243
|
-
push(conv, 'user', [{ type: 'tool_result', tool_use_id: item.callId, content: item.output }]);
|
|
244
|
-
break;
|
|
245
|
-
case 'reasoning':
|
|
246
|
-
push(conv, 'assistant', anthropicReasoningBlocks(item));
|
|
247
|
-
break;
|
|
248
|
-
}
|
|
249
|
-
}
|
|
250
|
-
return conv;
|
|
251
|
-
}
|
|
252
|
-
// ---- request: tools, schema, thinking -------------------------------------------
|
|
253
|
-
function toTool(tool, strict) {
|
|
254
|
-
if (tool.type !== 'function') {
|
|
255
|
-
throw unsupported(`Hosted tool "${tool.type}" is not supported by Anthropic.`, { tool: tool.type });
|
|
256
|
-
}
|
|
257
|
-
const schema = (0, structured_output_1.toJsonSchema)(tool.parameters);
|
|
258
|
-
if (schema.type !== 'object') {
|
|
259
|
-
throw invalid(`Tool "${tool.name}" parameters must be an object schema.`, { tool: tool.name });
|
|
260
|
-
}
|
|
261
|
-
return {
|
|
262
|
-
name: tool.name,
|
|
263
|
-
description: tool.description,
|
|
264
|
-
input_schema: schema,
|
|
265
|
-
// Strict tool use is part of Anthropic's structured-outputs feature, so
|
|
266
|
-
// it is only asked for where the family supports it natively.
|
|
267
|
-
...(strict && tool.strict === true ? { strict: true } : {}),
|
|
268
|
-
};
|
|
269
|
-
}
|
|
270
|
-
function toToolChoice(choice) {
|
|
271
|
-
if (choice === 'auto')
|
|
272
|
-
return { type: 'auto' };
|
|
273
|
-
if (choice === 'none')
|
|
274
|
-
return { type: 'none' };
|
|
275
|
-
if (choice === 'required')
|
|
276
|
-
return { type: 'any' };
|
|
277
|
-
return { type: 'tool', name: choice.name };
|
|
278
|
-
}
|
|
279
|
-
/** A tool name Anthropic accepts (`^[a-zA-Z0-9_-]{1,64}$`), from a schema name. */
|
|
280
|
-
function structuredToolName(name) {
|
|
281
|
-
const safe = name.replace(/[^a-zA-Z0-9_-]/g, '_').slice(0, 64);
|
|
282
|
-
return safe.length > 0 ? safe : 'structured_output';
|
|
283
|
-
}
|
|
284
|
-
/** How `req.reasoning` is expressed for this family — or refused. */
|
|
285
|
-
function toThinking(req, profile) {
|
|
286
|
-
const effort = req.reasoning?.effort;
|
|
287
|
-
const wantsSummary = req.reasoning?.summary !== undefined;
|
|
288
|
-
if (effort === undefined && !wantsSummary)
|
|
289
|
-
return { thinking: {} };
|
|
290
|
-
// An unclassified model is assumed current (adaptive): an administrator
|
|
291
|
-
// enabled it knowing more than this table, and Anthropic's own 400 is then
|
|
292
|
-
// the answer — the same pass-through posture the OpenAI mapper takes.
|
|
293
|
-
const style = profile?.thinking ?? 'adaptive';
|
|
294
|
-
if (style === 'none') {
|
|
295
|
-
if (effort !== undefined) {
|
|
296
|
-
throw unsupported(`Model "${req.model}" does not support reasoning effort.`, {
|
|
297
|
-
model: req.model,
|
|
298
|
-
capability: 'reasoning',
|
|
299
|
-
});
|
|
300
|
-
}
|
|
301
|
-
return { thinking: {} };
|
|
302
|
-
}
|
|
303
|
-
if (style === 'adaptive') {
|
|
304
|
-
return {
|
|
305
|
-
thinking: {
|
|
306
|
-
thinking: { type: 'adaptive', display: 'summarized' },
|
|
307
|
-
...(effort !== undefined ? { output_config: { effort: anthropic_model_catalog_1.ANTHROPIC_ADAPTIVE_EFFORTS[effort] } } : {}),
|
|
308
|
-
},
|
|
309
|
-
};
|
|
310
|
-
}
|
|
311
|
-
// 'budget': thinking is off unless an effort is named; a summary request
|
|
312
|
-
// alone asks for summaries of thinking that is not happening — a no-op.
|
|
313
|
-
if (effort === undefined)
|
|
314
|
-
return { thinking: {} };
|
|
315
|
-
const budget = anthropic_model_catalog_1.ANTHROPIC_THINKING_BUDGETS[effort];
|
|
316
|
-
return { thinking: { thinking: { type: 'enabled', budget_tokens: budget } }, budget };
|
|
317
|
-
}
|
|
318
|
-
/**
|
|
319
|
-
* `max_tokens`, which the Messages API requires: the caller's
|
|
320
|
-
* `maxOutputTokens` (already clamped by the facade), else
|
|
321
|
-
* `ANTHROPIC_DEFAULT_MAX_TOKENS` capped at the model's own limit. A
|
|
322
|
-
* thinking budget must fit inside it with room for an answer: by default the
|
|
323
|
-
* budget is added on top; with an explicit cap, the budget shrinks to fit,
|
|
324
|
-
* and a cap too small for the minimum budget is refused.
|
|
325
|
-
*/
|
|
326
|
-
function resolveMaxTokens(req, profile, budget) {
|
|
327
|
-
const modelMax = profile?.capabilities.maxOutputTokens ?? anthropic_model_catalog_1.ANTHROPIC_UNCLASSIFIED_MAX_OUTPUT_TOKENS;
|
|
328
|
-
if (req.maxOutputTokens !== undefined) {
|
|
329
|
-
if (budget === undefined)
|
|
330
|
-
return { maxTokens: req.maxOutputTokens };
|
|
331
|
-
const fitted = Math.min(budget, req.maxOutputTokens - 1024);
|
|
332
|
-
if (fitted < anthropic_model_catalog_1.ANTHROPIC_THINKING_BUDGETS.minimal) {
|
|
333
|
-
throw invalid('maxOutputTokens is too small for extended thinking on this model.', {
|
|
334
|
-
model: req.model,
|
|
335
|
-
maxOutputTokens: req.maxOutputTokens,
|
|
336
|
-
});
|
|
337
|
-
}
|
|
338
|
-
return { maxTokens: req.maxOutputTokens, budget: fitted };
|
|
339
|
-
}
|
|
340
|
-
const answer = Math.min(anthropic_model_catalog_1.ANTHROPIC_DEFAULT_MAX_TOKENS, modelMax);
|
|
341
|
-
return budget === undefined
|
|
342
|
-
? { maxTokens: answer }
|
|
343
|
-
: { maxTokens: Math.min(answer + budget, modelMax), budget: Math.min(budget, Math.min(answer + budget, modelMax) - 1024) };
|
|
344
|
-
}
|
|
345
|
-
/**
|
|
346
|
-
* Builds the Anthropic request body for `req`.
|
|
347
|
-
*
|
|
348
|
-
* `profile` is the model's classifier profile (or `null` when unclassified);
|
|
349
|
-
* `storage` is what the adapter delivered for each storage-object part.
|
|
350
|
-
* Throws `AiError` (never an SDK error): see the file header.
|
|
351
|
-
*/
|
|
352
|
-
function toAnthropicRequest(req, profile, storage) {
|
|
353
|
-
if (req.previousResponseId !== undefined) {
|
|
354
|
-
throw unsupported('Anthropic does not store responses; send the conversation history as input instead.', {
|
|
355
|
-
capability: 'previous_response_id',
|
|
356
|
-
});
|
|
357
|
-
}
|
|
358
|
-
const conv = toConversation(req, storage);
|
|
359
|
-
if (conv.messages.length === 0) {
|
|
360
|
-
throw invalid('The request has no user or assistant content.');
|
|
361
|
-
}
|
|
362
|
-
const nativeSchemas = (profile?.structuredOutput ?? 'native') === 'native';
|
|
363
|
-
const { thinking, budget: requestedBudget } = toThinking(req, profile);
|
|
364
|
-
const thinkingOn = thinking.thinking !== undefined;
|
|
365
|
-
if (req.temperature !== undefined) {
|
|
366
|
-
if (profile && !profile.sampling) {
|
|
367
|
-
throw unsupported(`Model "${req.model}" does not accept a temperature.`, { model: req.model, parameter: 'temperature' });
|
|
368
|
-
}
|
|
369
|
-
if (thinkingOn) {
|
|
370
|
-
throw unsupported('A temperature cannot be combined with extended thinking.', { model: req.model, parameter: 'temperature' });
|
|
371
|
-
}
|
|
372
|
-
}
|
|
373
|
-
const { maxTokens, budget } = resolveMaxTokens(req, profile, requestedBudget);
|
|
374
|
-
const body = {
|
|
375
|
-
model: req.model,
|
|
376
|
-
max_tokens: maxTokens,
|
|
377
|
-
messages: conv.messages,
|
|
378
|
-
};
|
|
379
|
-
if (conv.system.length > 0)
|
|
380
|
-
body.system = conv.system.join('\n\n');
|
|
381
|
-
const tools = (req.tools ?? []).map((tool) => toTool(tool, nativeSchemas));
|
|
382
|
-
if (tools.length > 0)
|
|
383
|
-
body.tools = tools;
|
|
384
|
-
if (req.toolChoice !== undefined)
|
|
385
|
-
body.tool_choice = toToolChoice(req.toolChoice);
|
|
386
|
-
if (thinking.thinking) {
|
|
387
|
-
body.thinking =
|
|
388
|
-
thinking.thinking.type === 'enabled' && budget !== undefined
|
|
389
|
-
? { type: 'enabled', budget_tokens: budget }
|
|
390
|
-
: thinking.thinking;
|
|
391
|
-
}
|
|
392
|
-
if (thinking.output_config)
|
|
393
|
-
body.output_config = { ...thinking.output_config };
|
|
394
|
-
let structuredTool;
|
|
395
|
-
if (req.structuredOutput) {
|
|
396
|
-
const schema = (0, structured_output_1.toJsonSchema)(req.structuredOutput.schema);
|
|
397
|
-
if (nativeSchemas) {
|
|
398
|
-
body.output_config = { ...(body.output_config ?? {}), format: { type: 'json_schema', schema } };
|
|
399
|
-
}
|
|
400
|
-
else {
|
|
401
|
-
// The forced single tool. Anthropic forbids a forced `tool_choice`
|
|
402
|
-
// with extended thinking, and forcing it would make every other tool
|
|
403
|
-
// (and any caller toolChoice) unreachable — so those combinations are
|
|
404
|
-
// refused rather than quietly changed.
|
|
405
|
-
if (thinkingOn) {
|
|
406
|
-
throw unsupported(`Model "${req.model}" cannot combine structured output with extended thinking.`, {
|
|
407
|
-
model: req.model,
|
|
408
|
-
capability: 'structured_output',
|
|
409
|
-
});
|
|
410
|
-
}
|
|
411
|
-
if (tools.length > 0 || req.toolChoice !== undefined) {
|
|
412
|
-
throw unsupported(`Model "${req.model}" cannot combine structured output with other tools.`, {
|
|
413
|
-
model: req.model,
|
|
414
|
-
capability: 'structured_output',
|
|
415
|
-
});
|
|
416
|
-
}
|
|
417
|
-
if (schema.type !== 'object') {
|
|
418
|
-
throw unsupported(`Model "${req.model}" needs an object schema for structured output.`, {
|
|
419
|
-
model: req.model,
|
|
420
|
-
capability: 'structured_output',
|
|
421
|
-
});
|
|
422
|
-
}
|
|
423
|
-
structuredTool = structuredToolName(req.structuredOutput.name);
|
|
424
|
-
body.tools = [
|
|
425
|
-
{
|
|
426
|
-
name: structuredTool,
|
|
427
|
-
description: 'Respond by calling this tool with the complete answer as its input.',
|
|
428
|
-
input_schema: schema,
|
|
429
|
-
},
|
|
430
|
-
];
|
|
431
|
-
body.tool_choice = { type: 'tool', name: structuredTool };
|
|
432
|
-
}
|
|
433
|
-
}
|
|
434
|
-
if (req.temperature !== undefined)
|
|
435
|
-
body.temperature = req.temperature;
|
|
436
|
-
const { stream: _stream, ...escapeHatch } = req.providerOptions?.[anthropic_errors_1.ANTHROPIC_PROVIDER_ID] ?? {};
|
|
437
|
-
return {
|
|
438
|
-
body: { ...body, ...escapeHatch },
|
|
439
|
-
...(structuredTool ? { structuredToolName: structuredTool } : {}),
|
|
440
|
-
};
|
|
441
|
-
}
|
|
442
|
-
// ---- response -----------------------------------------------------------------
|
|
443
|
-
/** A reasoning item for replayable thinking blocks: summary text out, signature in the symbol state. */
|
|
444
|
-
function anthropicReasoningItem(block) {
|
|
445
|
-
const state = {
|
|
446
|
-
provider: anthropic_errors_1.ANTHROPIC_PROVIDER_ID,
|
|
447
|
-
data: { blocks: [{ ...block }] },
|
|
448
|
-
};
|
|
449
|
-
const summary = block.type === 'thinking' && block.thinking.length > 0 ? [block.thinking] : [];
|
|
450
|
-
return { type: 'reasoning', summary, [responses_types_1.AI_PROVIDER_STATE]: state };
|
|
451
|
-
}
|
|
452
|
-
/**
|
|
453
|
-
* Maps one content block. `null` for a block type this contract does not
|
|
454
|
-
* model (server-tool blocks, which this adapter never requests).
|
|
455
|
-
*/
|
|
456
|
-
function fromAnthropicContentBlock(block, structuredTool) {
|
|
457
|
-
switch (block.type) {
|
|
458
|
-
case 'text':
|
|
459
|
-
return { type: 'message', text: block.text };
|
|
460
|
-
case 'thinking':
|
|
461
|
-
return anthropicReasoningItem({ type: 'thinking', thinking: block.thinking, signature: block.signature });
|
|
462
|
-
case 'redacted_thinking':
|
|
463
|
-
return anthropicReasoningItem({ type: 'redacted_thinking', data: block.data });
|
|
464
|
-
case 'tool_use':
|
|
465
|
-
return block.name === structuredTool
|
|
466
|
-
? { type: 'message', text: JSON.stringify(block.input ?? {}) }
|
|
467
|
-
: { type: 'function_call', callId: block.id, name: block.name, arguments: JSON.stringify(block.input ?? {}) };
|
|
468
|
-
default:
|
|
469
|
-
return null;
|
|
470
|
-
}
|
|
471
|
-
}
|
|
472
|
-
/** Usage, normalised: `inputTokens` includes cached tokens, as OpenAI's does. */
|
|
473
|
-
function anthropicUsage(usage) {
|
|
474
|
-
if (!usage)
|
|
475
|
-
return {};
|
|
476
|
-
const out = {};
|
|
477
|
-
const cacheRead = usage.cache_read_input_tokens ?? 0;
|
|
478
|
-
const cacheWrite = usage.cache_creation_input_tokens ?? 0;
|
|
479
|
-
if (typeof usage.input_tokens === 'number')
|
|
480
|
-
out.inputTokens = usage.input_tokens + cacheRead + cacheWrite;
|
|
481
|
-
if (typeof usage.output_tokens === 'number')
|
|
482
|
-
out.outputTokens = usage.output_tokens;
|
|
483
|
-
if (usage.cache_read_input_tokens != null)
|
|
484
|
-
out.cachedInputTokens = usage.cache_read_input_tokens;
|
|
485
|
-
const thinking = usage.output_tokens_details?.thinking_tokens;
|
|
486
|
-
if (typeof thinking === 'number')
|
|
487
|
-
out.reasoningTokens = thinking;
|
|
488
|
-
return out;
|
|
489
|
-
}
|
|
490
|
-
function finishReasonOf(stopReason, output) {
|
|
491
|
-
switch (stopReason) {
|
|
492
|
-
case 'max_tokens':
|
|
493
|
-
case 'model_context_window_exceeded':
|
|
494
|
-
return 'length';
|
|
495
|
-
case 'refusal':
|
|
496
|
-
return 'content_filter';
|
|
497
|
-
case 'tool_use':
|
|
498
|
-
return output.some((item) => item.type === 'function_call') ? 'tool_calls' : 'stop';
|
|
499
|
-
default:
|
|
500
|
-
// end_turn, stop_sequence, pause_turn (server tools only), or none.
|
|
501
|
-
return output.some((item) => item.type === 'function_call') ? 'tool_calls' : 'stop';
|
|
502
|
-
}
|
|
503
|
-
}
|
|
504
|
-
/**
|
|
505
|
-
* The `AiResponse` for mapped parts — shared by `create` and the stream. When
|
|
506
|
-
* the request asked for structured output and the model finished its turn,
|
|
507
|
-
* the text is validated with `parseStructured` (a mismatch throws
|
|
508
|
-
* `AI_STRUCTURED_OUTPUT_INVALID`).
|
|
509
|
-
*/
|
|
510
|
-
function finishAnthropicResponse(parts, opts) {
|
|
511
|
-
const outputText = parts.output.map((item) => (item.type === 'message' ? item.text : '')).join('');
|
|
512
|
-
const finishReason = finishReasonOf(parts.stopReason, parts.output);
|
|
513
|
-
const result = {
|
|
514
|
-
id: parts.id,
|
|
515
|
-
provider: anthropic_errors_1.ANTHROPIC_PROVIDER_ID,
|
|
516
|
-
model: parts.model,
|
|
517
|
-
output: parts.output,
|
|
518
|
-
outputText,
|
|
519
|
-
usage: parts.usage,
|
|
520
|
-
finishReason,
|
|
521
|
-
};
|
|
522
|
-
if (opts.providerRequestId)
|
|
523
|
-
result.providerRequestId = opts.providerRequestId;
|
|
524
|
-
if (opts.request.structuredOutput && finishReason !== 'tool_calls') {
|
|
525
|
-
result.parsed = (0, structured_output_1.parseStructured)(opts.request.structuredOutput.schema, outputText);
|
|
526
|
-
}
|
|
527
|
-
return result;
|
|
528
|
-
}
|
|
529
|
-
/** Maps a finished SDK `Message` to an `AiResponse`. */
|
|
530
|
-
function fromAnthropicMessage(message, opts) {
|
|
531
|
-
const output = message.content
|
|
532
|
-
.map((block) => fromAnthropicContentBlock(block, opts.structuredToolName))
|
|
533
|
-
.filter((item) => item !== null);
|
|
534
|
-
return finishAnthropicResponse({ id: message.id, model: message.model, output, stopReason: message.stop_reason, usage: anthropicUsage(message.usage) }, opts);
|
|
535
|
-
}
|
|
536
|
-
//# sourceMappingURL=anthropic-messages.mapper.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"anthropic-messages.mapper.js","sourceRoot":"","sources":["../../../../src/ai/providers/anthropic/anthropic-messages.mapper.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
import type { AiModelCapabilities, AiReasoningEffort } from '../../core/capabilities';
|
|
2
|
-
export type AnthropicThinkingStyle = 'adaptive' | 'budget' | 'none';
|
|
3
|
-
export type AnthropicStructuredOutputStyle = 'native' | 'tool';
|
|
4
|
-
export interface AnthropicModelProfile {
|
|
5
|
-
capabilities: AiModelCapabilities;
|
|
6
|
-
thinking: AnthropicThinkingStyle;
|
|
7
|
-
structuredOutput: AnthropicStructuredOutputStyle;
|
|
8
|
-
sampling: boolean;
|
|
9
|
-
}
|
|
10
|
-
export interface AnthropicClassifierRule {
|
|
11
|
-
/** Tested against the full, lower-cased model id. */
|
|
12
|
-
match: RegExp;
|
|
13
|
-
/** `null` claims the id as deliberately unclassified. */
|
|
14
|
-
profile: AnthropicModelProfile | null;
|
|
15
|
-
}
|
|
16
|
-
/**
|
|
17
|
-
* `reasoning.effort` → `thinking.budget_tokens`, for the 'budget' families.
|
|
18
|
-
*
|
|
19
|
-
* Anthropic's minimum budget is 1024 tokens. The ladder doubles-to-triples
|
|
20
|
-
* per step so the four efforts are genuinely different amounts of thinking,
|
|
21
|
-
* and tops out at 16k so `high` fits inside the default answer allowance
|
|
22
|
-
* (`ANTHROPIC_DEFAULT_MAX_TOKENS`) plus headroom on every budget-style model.
|
|
23
|
-
* `max_tokens` must exceed the budget: see `resolveMaxTokens` in the mapper.
|
|
24
|
-
*/
|
|
25
|
-
export declare const ANTHROPIC_THINKING_BUDGETS: Readonly<Record<AiReasoningEffort, number>>;
|
|
26
|
-
/**
|
|
27
|
-
* `reasoning.effort` → `output_config.effort`, for the 'adaptive' families.
|
|
28
|
-
* Anthropic's ladder is `low | medium | high | xhigh | max`; ours has no
|
|
29
|
-
* `xhigh`/`max` and adds `minimal`, which maps to Anthropic's lowest, `low`.
|
|
30
|
-
*/
|
|
31
|
-
export declare const ANTHROPIC_ADAPTIVE_EFFORTS: Readonly<Record<AiReasoningEffort, 'low' | 'medium' | 'high'>>;
|
|
32
|
-
/**
|
|
33
|
-
* `max_tokens` when the caller sets no `maxOutputTokens` (the Messages API
|
|
34
|
-
* REQUIRES one). 16k keeps a non-streaming answer well inside the client's
|
|
35
|
-
* ten-minute timeout, and is capped at the model's own output limit.
|
|
36
|
-
*/
|
|
37
|
-
export declare const ANTHROPIC_DEFAULT_MAX_TOKENS = 16000;
|
|
38
|
-
/** The output cap assumed for an unclassified model — the smallest any Claude 3+ model has. */
|
|
39
|
-
export declare const ANTHROPIC_UNCLASSIFIED_MAX_OUTPUT_TOKENS = 4096;
|
|
40
|
-
/** Ordered; first match wins. See the file header before reordering. */
|
|
41
|
-
export declare const ANTHROPIC_CLASSIFIER_RULES: readonly AnthropicClassifierRule[];
|
|
42
|
-
/**
|
|
43
|
-
* The full profile for `modelId`, or `null` when this table does not
|
|
44
|
-
* recognise it. A fresh copy each call, so a caller cannot corrupt the table.
|
|
45
|
-
*/
|
|
46
|
-
export declare function anthropicModelProfile(modelId: string, rules?: readonly AnthropicClassifierRule[]): AnthropicModelProfile | null;
|
|
47
|
-
/** `classifyModel()`: the neutral capabilities only. */
|
|
48
|
-
export declare function classifyAnthropicModel(modelId: string): AiModelCapabilities | null;
|
|
49
|
-
//# sourceMappingURL=anthropic-model-catalog.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"anthropic-model-catalog.d.ts","sourceRoot":"","sources":["../../../../src/ai/providers/anthropic/anthropic-model-catalog.ts"],"names":[],"mappings":"AAwCA,OAAO,KAAK,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAEtF,MAAM,MAAM,sBAAsB,GAAG,UAAU,GAAG,QAAQ,GAAG,MAAM,CAAC;AACpE,MAAM,MAAM,8BAA8B,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE/D,MAAM,WAAW,qBAAqB;IACpC,YAAY,EAAE,mBAAmB,CAAC;IAClC,QAAQ,EAAE,sBAAsB,CAAC;IACjC,gBAAgB,EAAE,8BAA8B,CAAC;IACjD,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,uBAAuB;IACtC,qDAAqD;IACrD,KAAK,EAAE,MAAM,CAAC;IACd,yDAAyD;IACzD,OAAO,EAAE,qBAAqB,GAAG,IAAI,CAAC;CACvC;AAKD;;;;;;;;GAQG;AACH,eAAO,MAAM,0BAA0B,EAAE,QAAQ,CAAC,MAAM,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAKlF,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,0BAA0B,EAAE,QAAQ,CAAC,MAAM,CAAC,iBAAiB,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC,CAKrG,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,4BAA4B,QAAS,CAAC;AAEnD,+FAA+F;AAC/F,eAAO,MAAM,wCAAwC,OAAO,CAAC;AAiF7D,wEAAwE;AACxE,eAAO,MAAM,0BAA0B,EAAE,SAAS,uBAAuB,EAwCxE,CAAC;AAEF;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,MAAM,EACf,KAAK,GAAE,SAAS,uBAAuB,EAA+B,GACrE,qBAAqB,GAAG,IAAI,CAU9B;AAED,wDAAwD;AACxD,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,mBAAmB,GAAG,IAAI,CAElF"}
|