@marinoscar/platform-api 0.1.0-next.5 → 0.1.0-next.6

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.
Files changed (241) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/ai/core/ai-error.d.ts +15 -158
  3. package/dist/ai/core/ai-error.d.ts.map +1 -1
  4. package/dist/ai/core/ai-error.js +58 -221
  5. package/dist/ai/core/ai-error.js.map +1 -1
  6. package/dist/ai/core/capabilities.d.ts +3 -126
  7. package/dist/ai/core/capabilities.d.ts.map +1 -1
  8. package/dist/ai/core/capabilities.js +13 -109
  9. package/dist/ai/core/capabilities.js.map +1 -1
  10. package/dist/ai/core/conversation.d.ts +2 -15
  11. package/dist/ai/core/conversation.d.ts.map +1 -1
  12. package/dist/ai/core/conversation.js +9 -54
  13. package/dist/ai/core/conversation.js.map +1 -1
  14. package/dist/ai/core/hosted-tools.d.ts +3 -172
  15. package/dist/ai/core/hosted-tools.d.ts.map +1 -1
  16. package/dist/ai/core/hosted-tools.js +20 -286
  17. package/dist/ai/core/hosted-tools.js.map +1 -1
  18. package/dist/ai/core/provider-adapter.interface.d.ts +3 -260
  19. package/dist/ai/core/provider-adapter.interface.d.ts.map +1 -1
  20. package/dist/ai/core/provider-adapter.interface.js +7 -29
  21. package/dist/ai/core/provider-adapter.interface.js.map +1 -1
  22. package/dist/ai/core/structured-output.d.ts +3 -49
  23. package/dist/ai/core/structured-output.d.ts.map +1 -1
  24. package/dist/ai/core/structured-output.js +9 -80
  25. package/dist/ai/core/structured-output.js.map +1 -1
  26. package/dist/ai/core/tools.d.ts +3 -93
  27. package/dist/ai/core/tools.d.ts.map +1 -1
  28. package/dist/ai/core/tools.js +9 -73
  29. package/dist/ai/core/tools.js.map +1 -1
  30. package/dist/ai/core/types/file-inputs.types.d.ts +3 -102
  31. package/dist/ai/core/types/file-inputs.types.d.ts.map +1 -1
  32. package/dist/ai/core/types/file-inputs.types.js +14 -78
  33. package/dist/ai/core/types/file-inputs.types.js.map +1 -1
  34. package/dist/ai/core/types/media.types.d.ts +3 -616
  35. package/dist/ai/core/types/media.types.d.ts.map +1 -1
  36. package/dist/ai/core/types/media.types.js +33 -203
  37. package/dist/ai/core/types/media.types.js.map +1 -1
  38. package/dist/ai/core/types/responses.types.d.ts +3 -619
  39. package/dist/ai/core/types/responses.types.d.ts.map +1 -1
  40. package/dist/ai/core/types/responses.types.js +9 -57
  41. package/dist/ai/core/types/responses.types.js.map +1 -1
  42. package/dist/ai/http/dto/ai-images.dto.d.ts +4 -4
  43. package/dist/ai/index.d.ts +1 -1
  44. package/dist/ai/index.d.ts.map +1 -1
  45. package/dist/ai/index.js +3 -3
  46. package/dist/ai/index.js.map +1 -1
  47. package/dist/ai/providers/anthropic/anthropic-client.factory.d.ts +13 -15
  48. package/dist/ai/providers/anthropic/anthropic-client.factory.d.ts.map +1 -1
  49. package/dist/ai/providers/anthropic/anthropic-client.factory.js +23 -52
  50. package/dist/ai/providers/anthropic/anthropic-client.factory.js.map +1 -1
  51. package/dist/ai/providers/anthropic/anthropic.adapter.d.ts +15 -51
  52. package/dist/ai/providers/anthropic/anthropic.adapter.d.ts.map +1 -1
  53. package/dist/ai/providers/anthropic/anthropic.adapter.js +29 -293
  54. package/dist/ai/providers/anthropic/anthropic.adapter.js.map +1 -1
  55. package/dist/ai/providers/azure-openai/azure-openai-client.factory.d.ts +10 -14
  56. package/dist/ai/providers/azure-openai/azure-openai-client.factory.d.ts.map +1 -1
  57. package/dist/ai/providers/azure-openai/azure-openai-client.factory.js +20 -53
  58. package/dist/ai/providers/azure-openai/azure-openai-client.factory.js.map +1 -1
  59. package/dist/ai/providers/azure-openai/azure-openai.adapter.d.ts +14 -31
  60. package/dist/ai/providers/azure-openai/azure-openai.adapter.d.ts.map +1 -1
  61. package/dist/ai/providers/azure-openai/azure-openai.adapter.js +25 -170
  62. package/dist/ai/providers/azure-openai/azure-openai.adapter.js.map +1 -1
  63. package/dist/ai/providers/gemini/gemini-client.factory.d.ts +13 -18
  64. package/dist/ai/providers/gemini/gemini-client.factory.d.ts.map +1 -1
  65. package/dist/ai/providers/gemini/gemini-client.factory.js +24 -68
  66. package/dist/ai/providers/gemini/gemini-client.factory.js.map +1 -1
  67. package/dist/ai/providers/gemini/gemini.adapter.d.ts +15 -58
  68. package/dist/ai/providers/gemini/gemini.adapter.d.ts.map +1 -1
  69. package/dist/ai/providers/gemini/gemini.adapter.js +29 -348
  70. package/dist/ai/providers/gemini/gemini.adapter.js.map +1 -1
  71. package/dist/ai/providers/openai/openai-client.factory.d.ts +13 -35
  72. package/dist/ai/providers/openai/openai-client.factory.d.ts.map +1 -1
  73. package/dist/ai/providers/openai/openai-client.factory.js +25 -64
  74. package/dist/ai/providers/openai/openai-client.factory.js.map +1 -1
  75. package/dist/ai/providers/openai/openai.adapter.d.ts +15 -48
  76. package/dist/ai/providers/openai/openai.adapter.d.ts.map +1 -1
  77. package/dist/ai/providers/openai/openai.adapter.js +27 -206
  78. package/dist/ai/providers/openai/openai.adapter.js.map +1 -1
  79. package/dist/ai/providers/openai-compatible/openai-compatible-client.factory.d.ts +11 -11
  80. package/dist/ai/providers/openai-compatible/openai-compatible-client.factory.d.ts.map +1 -1
  81. package/dist/ai/providers/openai-compatible/openai-compatible-client.factory.js +18 -41
  82. package/dist/ai/providers/openai-compatible/openai-compatible-client.factory.js.map +1 -1
  83. package/dist/ai/providers/openai-compatible/openai-compatible.adapter.d.ts +14 -32
  84. package/dist/ai/providers/openai-compatible/openai-compatible.adapter.d.ts.map +1 -1
  85. package/dist/ai/providers/openai-compatible/openai-compatible.adapter.js +25 -149
  86. package/dist/ai/providers/openai-compatible/openai-compatible.adapter.js.map +1 -1
  87. package/dist/ai/providers/platform-ai-tracer.d.ts +4 -0
  88. package/dist/ai/providers/platform-ai-tracer.d.ts.map +1 -0
  89. package/dist/ai/providers/platform-ai-tracer.js +20 -0
  90. package/dist/ai/providers/platform-ai-tracer.js.map +1 -0
  91. package/dist/ai/runtime/ai-image-run-request.d.ts +1 -1
  92. package/dist/ai/testing/conformance/ai-no-sdk-leak.suite.d.ts +28 -5
  93. package/dist/ai/testing/conformance/ai-no-sdk-leak.suite.d.ts.map +1 -1
  94. package/dist/ai/testing/conformance/ai-no-sdk-leak.suite.js +54 -9
  95. package/dist/ai/testing/conformance/ai-no-sdk-leak.suite.js.map +1 -1
  96. package/dist/ai/testing/index.d.ts +1 -1
  97. package/dist/ai/testing/index.d.ts.map +1 -1
  98. package/dist/ai/testing/index.js +2 -1
  99. package/dist/ai/testing/index.js.map +1 -1
  100. package/dist/jobs/rate-limit.error.d.ts +2 -26
  101. package/dist/jobs/rate-limit.error.d.ts.map +1 -1
  102. package/dist/jobs/rate-limit.error.js +4 -52
  103. package/dist/jobs/rate-limit.error.js.map +1 -1
  104. package/dist/storage/config/storage-config.controller.d.ts +1 -1
  105. package/package.json +3 -2
  106. package/dist/ai/providers/anthropic/anthropic-errors.d.ts +0 -16
  107. package/dist/ai/providers/anthropic/anthropic-errors.d.ts.map +0 -1
  108. package/dist/ai/providers/anthropic/anthropic-errors.js +0 -156
  109. package/dist/ai/providers/anthropic/anthropic-errors.js.map +0 -1
  110. package/dist/ai/providers/anthropic/anthropic-messages.mapper.d.ts +0 -80
  111. package/dist/ai/providers/anthropic/anthropic-messages.mapper.d.ts.map +0 -1
  112. package/dist/ai/providers/anthropic/anthropic-messages.mapper.js +0 -536
  113. package/dist/ai/providers/anthropic/anthropic-messages.mapper.js.map +0 -1
  114. package/dist/ai/providers/anthropic/anthropic-model-catalog.d.ts +0 -49
  115. package/dist/ai/providers/anthropic/anthropic-model-catalog.d.ts.map +0 -1
  116. package/dist/ai/providers/anthropic/anthropic-model-catalog.js +0 -198
  117. package/dist/ai/providers/anthropic/anthropic-model-catalog.js.map +0 -1
  118. package/dist/ai/providers/anthropic/anthropic-stream.mapper.d.ts +0 -35
  119. package/dist/ai/providers/anthropic/anthropic-stream.mapper.d.ts.map +0 -1
  120. package/dist/ai/providers/anthropic/anthropic-stream.mapper.js +0 -203
  121. package/dist/ai/providers/anthropic/anthropic-stream.mapper.js.map +0 -1
  122. package/dist/ai/providers/anthropic/testing/anthropic-fixtures.d.ts +0 -18
  123. package/dist/ai/providers/anthropic/testing/anthropic-fixtures.d.ts.map +0 -1
  124. package/dist/ai/providers/anthropic/testing/anthropic-fixtures.js +0 -120
  125. package/dist/ai/providers/anthropic/testing/anthropic-fixtures.js.map +0 -1
  126. package/dist/ai/providers/anthropic/testing/anthropic-mock-transport.d.ts +0 -59
  127. package/dist/ai/providers/anthropic/testing/anthropic-mock-transport.d.ts.map +0 -1
  128. package/dist/ai/providers/anthropic/testing/anthropic-mock-transport.js +0 -206
  129. package/dist/ai/providers/anthropic/testing/anthropic-mock-transport.js.map +0 -1
  130. package/dist/ai/providers/azure-openai/azure-openai-settings.d.ts +0 -23
  131. package/dist/ai/providers/azure-openai/azure-openai-settings.d.ts.map +0 -1
  132. package/dist/ai/providers/azure-openai/azure-openai-settings.js +0 -54
  133. package/dist/ai/providers/azure-openai/azure-openai-settings.js.map +0 -1
  134. package/dist/ai/providers/gemini/gemini-content.mapper.d.ts +0 -98
  135. package/dist/ai/providers/gemini/gemini-content.mapper.d.ts.map +0 -1
  136. package/dist/ai/providers/gemini/gemini-content.mapper.js +0 -665
  137. package/dist/ai/providers/gemini/gemini-content.mapper.js.map +0 -1
  138. package/dist/ai/providers/gemini/gemini-embeddings.mapper.d.ts +0 -13
  139. package/dist/ai/providers/gemini/gemini-embeddings.mapper.d.ts.map +0 -1
  140. package/dist/ai/providers/gemini/gemini-embeddings.mapper.js +0 -78
  141. package/dist/ai/providers/gemini/gemini-embeddings.mapper.js.map +0 -1
  142. package/dist/ai/providers/gemini/gemini-errors.d.ts +0 -32
  143. package/dist/ai/providers/gemini/gemini-errors.d.ts.map +0 -1
  144. package/dist/ai/providers/gemini/gemini-errors.js +0 -191
  145. package/dist/ai/providers/gemini/gemini-errors.js.map +0 -1
  146. package/dist/ai/providers/gemini/gemini-model-catalog.d.ts +0 -45
  147. package/dist/ai/providers/gemini/gemini-model-catalog.d.ts.map +0 -1
  148. package/dist/ai/providers/gemini/gemini-model-catalog.js +0 -264
  149. package/dist/ai/providers/gemini/gemini-model-catalog.js.map +0 -1
  150. package/dist/ai/providers/gemini/gemini-stream.mapper.d.ts +0 -31
  151. package/dist/ai/providers/gemini/gemini-stream.mapper.d.ts.map +0 -1
  152. package/dist/ai/providers/gemini/gemini-stream.mapper.js +0 -118
  153. package/dist/ai/providers/gemini/gemini-stream.mapper.js.map +0 -1
  154. package/dist/ai/providers/gemini/testing/gemini-fixtures.d.ts +0 -80
  155. package/dist/ai/providers/gemini/testing/gemini-fixtures.d.ts.map +0 -1
  156. package/dist/ai/providers/gemini/testing/gemini-fixtures.js +0 -118
  157. package/dist/ai/providers/gemini/testing/gemini-fixtures.js.map +0 -1
  158. package/dist/ai/providers/gemini/testing/gemini-mock-transport.d.ts +0 -82
  159. package/dist/ai/providers/gemini/testing/gemini-mock-transport.d.ts.map +0 -1
  160. package/dist/ai/providers/gemini/testing/gemini-mock-transport.js +0 -342
  161. package/dist/ai/providers/gemini/testing/gemini-mock-transport.js.map +0 -1
  162. package/dist/ai/providers/openai/openai-audio.mapper.d.ts +0 -42
  163. package/dist/ai/providers/openai/openai-audio.mapper.d.ts.map +0 -1
  164. package/dist/ai/providers/openai/openai-audio.mapper.js +0 -266
  165. package/dist/ai/providers/openai/openai-audio.mapper.js.map +0 -1
  166. package/dist/ai/providers/openai/openai-call-telemetry.d.ts +0 -25
  167. package/dist/ai/providers/openai/openai-call-telemetry.d.ts.map +0 -1
  168. package/dist/ai/providers/openai/openai-call-telemetry.js +0 -93
  169. package/dist/ai/providers/openai/openai-call-telemetry.js.map +0 -1
  170. package/dist/ai/providers/openai/openai-chat-completions-stream.mapper.d.ts +0 -41
  171. package/dist/ai/providers/openai/openai-chat-completions-stream.mapper.d.ts.map +0 -1
  172. package/dist/ai/providers/openai/openai-chat-completions-stream.mapper.js +0 -173
  173. package/dist/ai/providers/openai/openai-chat-completions-stream.mapper.js.map +0 -1
  174. package/dist/ai/providers/openai/openai-chat-completions.engine.d.ts +0 -33
  175. package/dist/ai/providers/openai/openai-chat-completions.engine.d.ts.map +0 -1
  176. package/dist/ai/providers/openai/openai-chat-completions.engine.js +0 -165
  177. package/dist/ai/providers/openai/openai-chat-completions.engine.js.map +0 -1
  178. package/dist/ai/providers/openai/openai-chat-completions.mapper.d.ts +0 -42
  179. package/dist/ai/providers/openai/openai-chat-completions.mapper.d.ts.map +0 -1
  180. package/dist/ai/providers/openai/openai-chat-completions.mapper.js +0 -304
  181. package/dist/ai/providers/openai/openai-chat-completions.mapper.js.map +0 -1
  182. package/dist/ai/providers/openai/openai-embeddings.mapper.d.ts +0 -25
  183. package/dist/ai/providers/openai/openai-embeddings.mapper.d.ts.map +0 -1
  184. package/dist/ai/providers/openai/openai-embeddings.mapper.js +0 -81
  185. package/dist/ai/providers/openai/openai-embeddings.mapper.js.map +0 -1
  186. package/dist/ai/providers/openai/openai-errors.d.ts +0 -45
  187. package/dist/ai/providers/openai/openai-errors.d.ts.map +0 -1
  188. package/dist/ai/providers/openai/openai-errors.js +0 -247
  189. package/dist/ai/providers/openai/openai-errors.js.map +0 -1
  190. package/dist/ai/providers/openai/openai-family-guards.d.ts +0 -4
  191. package/dist/ai/providers/openai/openai-family-guards.d.ts.map +0 -1
  192. package/dist/ai/providers/openai/openai-family-guards.js +0 -19
  193. package/dist/ai/providers/openai/openai-family-guards.js.map +0 -1
  194. package/dist/ai/providers/openai/openai-images.mapper.d.ts +0 -23
  195. package/dist/ai/providers/openai/openai-images.mapper.d.ts.map +0 -1
  196. package/dist/ai/providers/openai/openai-images.mapper.js +0 -164
  197. package/dist/ai/providers/openai/openai-images.mapper.js.map +0 -1
  198. package/dist/ai/providers/openai/openai-model-catalog.d.ts +0 -36
  199. package/dist/ai/providers/openai/openai-model-catalog.d.ts.map +0 -1
  200. package/dist/ai/providers/openai/openai-model-catalog.js +0 -209
  201. package/dist/ai/providers/openai/openai-model-catalog.js.map +0 -1
  202. package/dist/ai/providers/openai/openai-realtime.mapper.d.ts +0 -18
  203. package/dist/ai/providers/openai/openai-realtime.mapper.d.ts.map +0 -1
  204. package/dist/ai/providers/openai/openai-realtime.mapper.js +0 -159
  205. package/dist/ai/providers/openai/openai-realtime.mapper.js.map +0 -1
  206. package/dist/ai/providers/openai/openai-redirect-guard.d.ts +0 -9
  207. package/dist/ai/providers/openai/openai-redirect-guard.d.ts.map +0 -1
  208. package/dist/ai/providers/openai/openai-redirect-guard.js +0 -61
  209. package/dist/ai/providers/openai/openai-redirect-guard.js.map +0 -1
  210. package/dist/ai/providers/openai/openai-responses.engine.d.ts +0 -50
  211. package/dist/ai/providers/openai/openai-responses.engine.d.ts.map +0 -1
  212. package/dist/ai/providers/openai/openai-responses.engine.js +0 -206
  213. package/dist/ai/providers/openai/openai-responses.engine.js.map +0 -1
  214. package/dist/ai/providers/openai/openai-responses.mapper.d.ts +0 -64
  215. package/dist/ai/providers/openai/openai-responses.mapper.d.ts.map +0 -1
  216. package/dist/ai/providers/openai/openai-responses.mapper.js +0 -580
  217. package/dist/ai/providers/openai/openai-responses.mapper.js.map +0 -1
  218. package/dist/ai/providers/openai/openai-stream.mapper.d.ts +0 -28
  219. package/dist/ai/providers/openai/openai-stream.mapper.d.ts.map +0 -1
  220. package/dist/ai/providers/openai/openai-stream.mapper.js +0 -139
  221. package/dist/ai/providers/openai/openai-stream.mapper.js.map +0 -1
  222. package/dist/ai/providers/openai/testing/chat-completions-fixtures.d.ts +0 -24
  223. package/dist/ai/providers/openai/testing/chat-completions-fixtures.d.ts.map +0 -1
  224. package/dist/ai/providers/openai/testing/chat-completions-fixtures.js +0 -72
  225. package/dist/ai/providers/openai/testing/chat-completions-fixtures.js.map +0 -1
  226. package/dist/ai/providers/openai/testing/conformance-responders.d.ts +0 -7
  227. package/dist/ai/providers/openai/testing/conformance-responders.d.ts.map +0 -1
  228. package/dist/ai/providers/openai/testing/conformance-responders.js +0 -64
  229. package/dist/ai/providers/openai/testing/conformance-responders.js.map +0 -1
  230. package/dist/ai/providers/openai/testing/openai-fixtures.d.ts +0 -52
  231. package/dist/ai/providers/openai/testing/openai-fixtures.d.ts.map +0 -1
  232. package/dist/ai/providers/openai/testing/openai-fixtures.js +0 -208
  233. package/dist/ai/providers/openai/testing/openai-fixtures.js.map +0 -1
  234. package/dist/ai/providers/openai/testing/openai-mock-transport.d.ts +0 -242
  235. package/dist/ai/providers/openai/testing/openai-mock-transport.d.ts.map +0 -1
  236. package/dist/ai/providers/openai/testing/openai-mock-transport.js +0 -523
  237. package/dist/ai/providers/openai/testing/openai-mock-transport.js.map +0 -1
  238. package/dist/ai/providers/openai-compatible/openai-compatible-settings.d.ts +0 -13
  239. package/dist/ai/providers/openai-compatible/openai-compatible-settings.d.ts.map +0 -1
  240. package/dist/ai/providers/openai-compatible/openai-compatible-settings.js +0 -29
  241. 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"}