@posthog/agent 1.12.0 → 1.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (224) hide show
  1. package/dist/_virtual/_commonjsHelpers.js +6 -0
  2. package/dist/_virtual/_commonjsHelpers.js.map +1 -0
  3. package/dist/_virtual/index.js +4 -0
  4. package/dist/_virtual/index.js.map +1 -0
  5. package/dist/node_modules/@ai-sdk/anthropic/dist/index.js +1154 -0
  6. package/dist/node_modules/@ai-sdk/anthropic/dist/index.js.map +1 -0
  7. package/dist/node_modules/@ai-sdk/provider/dist/index.js +296 -0
  8. package/dist/node_modules/@ai-sdk/provider/dist/index.js.map +1 -0
  9. package/dist/node_modules/@ai-sdk/provider-utils/dist/index.js +576 -0
  10. package/dist/node_modules/@ai-sdk/provider-utils/dist/index.js.map +1 -0
  11. package/dist/node_modules/@ai-sdk/ui-utils/dist/index.js +741 -0
  12. package/dist/node_modules/@ai-sdk/ui-utils/dist/index.js.map +1 -0
  13. package/dist/node_modules/@opentelemetry/api/build/esm/api/context.js +112 -0
  14. package/dist/node_modules/@opentelemetry/api/build/esm/api/context.js.map +1 -0
  15. package/dist/node_modules/@opentelemetry/api/build/esm/api/diag.js +123 -0
  16. package/dist/node_modules/@opentelemetry/api/build/esm/api/diag.js.map +1 -0
  17. package/dist/node_modules/@opentelemetry/api/build/esm/api/metrics.js +62 -0
  18. package/dist/node_modules/@opentelemetry/api/build/esm/api/metrics.js.map +1 -0
  19. package/dist/node_modules/@opentelemetry/api/build/esm/api/propagation.js +91 -0
  20. package/dist/node_modules/@opentelemetry/api/build/esm/api/propagation.js.map +1 -0
  21. package/dist/node_modules/@opentelemetry/api/build/esm/api/trace.js +79 -0
  22. package/dist/node_modules/@opentelemetry/api/build/esm/api/trace.js.map +1 -0
  23. package/dist/node_modules/@opentelemetry/api/build/esm/baggage/context-helpers.js +59 -0
  24. package/dist/node_modules/@opentelemetry/api/build/esm/baggage/context-helpers.js.map +1 -0
  25. package/dist/node_modules/@opentelemetry/api/build/esm/baggage/internal/baggage-impl.js +99 -0
  26. package/dist/node_modules/@opentelemetry/api/build/esm/baggage/internal/baggage-impl.js.map +1 -0
  27. package/dist/node_modules/@opentelemetry/api/build/esm/baggage/utils.js +31 -0
  28. package/dist/node_modules/@opentelemetry/api/build/esm/baggage/utils.js.map +1 -0
  29. package/dist/node_modules/@opentelemetry/api/build/esm/context/NoopContextManager.js +69 -0
  30. package/dist/node_modules/@opentelemetry/api/build/esm/context/NoopContextManager.js.map +1 -0
  31. package/dist/node_modules/@opentelemetry/api/build/esm/context/context.js +54 -0
  32. package/dist/node_modules/@opentelemetry/api/build/esm/context/context.js.map +1 -0
  33. package/dist/node_modules/@opentelemetry/api/build/esm/context-api.js +22 -0
  34. package/dist/node_modules/@opentelemetry/api/build/esm/context-api.js.map +1 -0
  35. package/dist/node_modules/@opentelemetry/api/build/esm/diag/ComponentLogger.js +104 -0
  36. package/dist/node_modules/@opentelemetry/api/build/esm/diag/ComponentLogger.js.map +1 -0
  37. package/dist/node_modules/@opentelemetry/api/build/esm/diag/internal/logLevelLogger.js +44 -0
  38. package/dist/node_modules/@opentelemetry/api/build/esm/diag/internal/logLevelLogger.js.map +1 -0
  39. package/dist/node_modules/@opentelemetry/api/build/esm/diag/types.js +43 -0
  40. package/dist/node_modules/@opentelemetry/api/build/esm/diag/types.js.map +1 -0
  41. package/dist/node_modules/@opentelemetry/api/build/esm/diag-api.js +27 -0
  42. package/dist/node_modules/@opentelemetry/api/build/esm/diag-api.js.map +1 -0
  43. package/dist/node_modules/@opentelemetry/api/build/esm/internal/global-utils.js +62 -0
  44. package/dist/node_modules/@opentelemetry/api/build/esm/internal/global-utils.js.map +1 -0
  45. package/dist/node_modules/@opentelemetry/api/build/esm/internal/semver.js +121 -0
  46. package/dist/node_modules/@opentelemetry/api/build/esm/internal/semver.js.map +1 -0
  47. package/dist/node_modules/@opentelemetry/api/build/esm/metrics/NoopMeter.js +167 -0
  48. package/dist/node_modules/@opentelemetry/api/build/esm/metrics/NoopMeter.js.map +1 -0
  49. package/dist/node_modules/@opentelemetry/api/build/esm/metrics/NoopMeterProvider.js +33 -0
  50. package/dist/node_modules/@opentelemetry/api/build/esm/metrics/NoopMeterProvider.js.map +1 -0
  51. package/dist/node_modules/@opentelemetry/api/build/esm/metrics-api.js +22 -0
  52. package/dist/node_modules/@opentelemetry/api/build/esm/metrics-api.js.map +1 -0
  53. package/dist/node_modules/@opentelemetry/api/build/esm/platform/node/globalThis.js +21 -0
  54. package/dist/node_modules/@opentelemetry/api/build/esm/platform/node/globalThis.js.map +1 -0
  55. package/dist/node_modules/@opentelemetry/api/build/esm/propagation/NoopTextMapPropagator.js +35 -0
  56. package/dist/node_modules/@opentelemetry/api/build/esm/propagation/NoopTextMapPropagator.js.map +1 -0
  57. package/dist/node_modules/@opentelemetry/api/build/esm/propagation/TextMapPropagator.js +40 -0
  58. package/dist/node_modules/@opentelemetry/api/build/esm/propagation/TextMapPropagator.js.map +1 -0
  59. package/dist/node_modules/@opentelemetry/api/build/esm/propagation-api.js +22 -0
  60. package/dist/node_modules/@opentelemetry/api/build/esm/propagation-api.js.map +1 -0
  61. package/dist/node_modules/@opentelemetry/api/build/esm/trace/NonRecordingSpan.js +70 -0
  62. package/dist/node_modules/@opentelemetry/api/build/esm/trace/NonRecordingSpan.js.map +1 -0
  63. package/dist/node_modules/@opentelemetry/api/build/esm/trace/NoopTracer.js +78 -0
  64. package/dist/node_modules/@opentelemetry/api/build/esm/trace/NoopTracer.js.map +1 -0
  65. package/dist/node_modules/@opentelemetry/api/build/esm/trace/NoopTracerProvider.js +34 -0
  66. package/dist/node_modules/@opentelemetry/api/build/esm/trace/NoopTracerProvider.js.map +1 -0
  67. package/dist/node_modules/@opentelemetry/api/build/esm/trace/ProxyTracer.js +55 -0
  68. package/dist/node_modules/@opentelemetry/api/build/esm/trace/ProxyTracer.js.map +1 -0
  69. package/dist/node_modules/@opentelemetry/api/build/esm/trace/ProxyTracerProvider.js +56 -0
  70. package/dist/node_modules/@opentelemetry/api/build/esm/trace/ProxyTracerProvider.js.map +1 -0
  71. package/dist/node_modules/@opentelemetry/api/build/esm/trace/context-utils.js +76 -0
  72. package/dist/node_modules/@opentelemetry/api/build/esm/trace/context-utils.js.map +1 -0
  73. package/dist/node_modules/@opentelemetry/api/build/esm/trace/invalid-span-constants.js +27 -0
  74. package/dist/node_modules/@opentelemetry/api/build/esm/trace/invalid-span-constants.js.map +1 -0
  75. package/dist/node_modules/@opentelemetry/api/build/esm/trace/spancontext-utils.js +45 -0
  76. package/dist/node_modules/@opentelemetry/api/build/esm/trace/spancontext-utils.js.map +1 -0
  77. package/dist/node_modules/@opentelemetry/api/build/esm/trace/status.js +22 -0
  78. package/dist/node_modules/@opentelemetry/api/build/esm/trace/status.js.map +1 -0
  79. package/dist/node_modules/@opentelemetry/api/build/esm/trace/trace_flags.js +25 -0
  80. package/dist/node_modules/@opentelemetry/api/build/esm/trace/trace_flags.js.map +1 -0
  81. package/dist/node_modules/@opentelemetry/api/build/esm/trace-api.js +24 -0
  82. package/dist/node_modules/@opentelemetry/api/build/esm/trace-api.js.map +1 -0
  83. package/dist/node_modules/@opentelemetry/api/build/esm/version.js +20 -0
  84. package/dist/node_modules/@opentelemetry/api/build/esm/version.js.map +1 -0
  85. package/dist/node_modules/ai/dist/index.js +2870 -0
  86. package/dist/node_modules/ai/dist/index.js.map +1 -0
  87. package/dist/node_modules/nanoid/non-secure/index.js +13 -0
  88. package/dist/node_modules/nanoid/non-secure/index.js.map +1 -0
  89. package/dist/node_modules/secure-json-parse/index.js +133 -0
  90. package/dist/node_modules/secure-json-parse/index.js.map +1 -0
  91. package/dist/node_modules/zod-to-json-schema/dist/esm/Options.js +37 -0
  92. package/dist/node_modules/zod-to-json-schema/dist/esm/Options.js.map +1 -0
  93. package/dist/node_modules/zod-to-json-schema/dist/esm/Refs.js +26 -0
  94. package/dist/node_modules/zod-to-json-schema/dist/esm/Refs.js.map +1 -0
  95. package/dist/node_modules/zod-to-json-schema/dist/esm/errorMessages.js +17 -0
  96. package/dist/node_modules/zod-to-json-schema/dist/esm/errorMessages.js.map +1 -0
  97. package/dist/node_modules/zod-to-json-schema/dist/esm/getRelativePath.js +11 -0
  98. package/dist/node_modules/zod-to-json-schema/dist/esm/getRelativePath.js.map +1 -0
  99. package/dist/node_modules/zod-to-json-schema/dist/esm/index.js +8 -0
  100. package/dist/node_modules/zod-to-json-schema/dist/esm/index.js.map +1 -0
  101. package/dist/node_modules/zod-to-json-schema/dist/esm/parseDef.js +66 -0
  102. package/dist/node_modules/zod-to-json-schema/dist/esm/parseDef.js.map +1 -0
  103. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/any.js +21 -0
  104. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/any.js.map +1 -0
  105. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/array.js +30 -0
  106. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/array.js.map +1 -0
  107. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/bigint.js +53 -0
  108. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/bigint.js.map +1 -0
  109. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/boolean.js +8 -0
  110. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/boolean.js.map +1 -0
  111. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/branded.js +8 -0
  112. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/branded.js.map +1 -0
  113. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/catch.js +8 -0
  114. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/catch.js.map +1 -0
  115. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/date.js +50 -0
  116. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/date.js.map +1 -0
  117. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/default.js +11 -0
  118. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/default.js.map +1 -0
  119. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/effects.js +11 -0
  120. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/effects.js.map +1 -0
  121. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/enum.js +9 -0
  122. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/enum.js.map +1 -0
  123. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/intersection.js +56 -0
  124. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/intersection.js.map +1 -0
  125. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/literal.js +24 -0
  126. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/literal.js.map +1 -0
  127. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/map.js +30 -0
  128. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/map.js.map +1 -0
  129. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/nativeEnum.js +19 -0
  130. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/nativeEnum.js.map +1 -0
  131. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/never.js +15 -0
  132. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/never.js.map +1 -0
  133. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/null.js +13 -0
  134. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/null.js.map +1 -0
  135. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/nullable.js +37 -0
  136. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/nullable.js.map +1 -0
  137. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/number.js +56 -0
  138. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/number.js.map +1 -0
  139. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/object.js +76 -0
  140. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/object.js.map +1 -0
  141. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/optional.js +25 -0
  142. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/optional.js.map +1 -0
  143. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/pipeline.js +24 -0
  144. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/pipeline.js.map +1 -0
  145. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/promise.js +8 -0
  146. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/promise.js.map +1 -0
  147. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/readonly.js +8 -0
  148. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/readonly.js.map +1 -0
  149. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/record.js +65 -0
  150. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/record.js.map +1 -0
  151. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/set.js +24 -0
  152. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/set.js.map +1 -0
  153. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/string.js +350 -0
  154. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/string.js.map +1 -0
  155. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/tuple.js +36 -0
  156. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/tuple.js.map +1 -0
  157. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/undefined.js +10 -0
  158. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/undefined.js.map +1 -0
  159. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/union.js +84 -0
  160. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/union.js.map +1 -0
  161. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/unknown.js +8 -0
  162. package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/unknown.js.map +1 -0
  163. package/dist/node_modules/zod-to-json-schema/dist/esm/selectParser.js +110 -0
  164. package/dist/node_modules/zod-to-json-schema/dist/esm/selectParser.js.map +1 -0
  165. package/dist/node_modules/zod-to-json-schema/dist/esm/zodToJsonSchema.js +90 -0
  166. package/dist/node_modules/zod-to-json-schema/dist/esm/zodToJsonSchema.js.map +1 -0
  167. package/dist/src/agent.d.ts +3 -0
  168. package/dist/src/agent.d.ts.map +1 -1
  169. package/dist/src/agent.js +93 -291
  170. package/dist/src/agent.js.map +1 -1
  171. package/dist/src/agents/execution.d.ts +1 -1
  172. package/dist/src/agents/execution.d.ts.map +1 -1
  173. package/dist/src/agents/execution.js +28 -43
  174. package/dist/src/agents/execution.js.map +1 -1
  175. package/dist/src/agents/planning.d.ts +1 -1
  176. package/dist/src/agents/planning.d.ts.map +1 -1
  177. package/dist/src/agents/planning.js +60 -67
  178. package/dist/src/agents/planning.js.map +1 -1
  179. package/dist/src/agents/research.d.ts +1 -1
  180. package/dist/src/agents/research.d.ts.map +1 -1
  181. package/dist/src/agents/research.js +68 -91
  182. package/dist/src/agents/research.js.map +1 -1
  183. package/dist/src/prompt-builder.d.ts.map +1 -1
  184. package/dist/src/prompt-builder.js +68 -36
  185. package/dist/src/prompt-builder.js.map +1 -1
  186. package/dist/src/structured-extraction.d.ts +2 -2
  187. package/dist/src/structured-extraction.d.ts.map +1 -1
  188. package/dist/src/structured-extraction.js +51 -110
  189. package/dist/src/structured-extraction.js.map +1 -1
  190. package/dist/src/workflow/config.d.ts +3 -0
  191. package/dist/src/workflow/config.d.ts.map +1 -0
  192. package/dist/src/workflow/config.js +43 -0
  193. package/dist/src/workflow/config.js.map +1 -0
  194. package/dist/src/workflow/steps/build.d.ts +3 -0
  195. package/dist/src/workflow/steps/build.d.ts.map +1 -0
  196. package/dist/src/workflow/steps/build.js +64 -0
  197. package/dist/src/workflow/steps/build.js.map +1 -0
  198. package/dist/src/workflow/steps/plan.d.ts +3 -0
  199. package/dist/src/workflow/steps/plan.d.ts.map +1 -0
  200. package/dist/src/workflow/steps/plan.js +86 -0
  201. package/dist/src/workflow/steps/plan.js.map +1 -0
  202. package/dist/src/workflow/steps/research.d.ts +3 -0
  203. package/dist/src/workflow/steps/research.d.ts.map +1 -0
  204. package/dist/src/workflow/steps/research.js +124 -0
  205. package/dist/src/workflow/steps/research.js.map +1 -0
  206. package/dist/src/workflow/types.d.ts +48 -0
  207. package/dist/src/workflow/types.d.ts.map +1 -0
  208. package/dist/src/workflow/utils.d.ts +12 -0
  209. package/dist/src/workflow/utils.d.ts.map +1 -0
  210. package/dist/src/workflow/utils.js +38 -0
  211. package/dist/src/workflow/utils.js.map +1 -0
  212. package/package.json +5 -2
  213. package/src/agent.ts +112 -321
  214. package/src/agents/execution.ts +28 -43
  215. package/src/agents/planning.ts +60 -67
  216. package/src/agents/research.ts +68 -91
  217. package/src/prompt-builder.ts +71 -37
  218. package/src/structured-extraction.ts +58 -115
  219. package/src/workflow/config.ts +42 -0
  220. package/src/workflow/steps/build.ts +87 -0
  221. package/src/workflow/steps/plan.ts +112 -0
  222. package/src/workflow/steps/research.ts +156 -0
  223. package/src/workflow/types.ts +53 -0
  224. package/src/workflow/utils.ts +50 -0
@@ -0,0 +1,1154 @@
1
+ import { UnsupportedFunctionalityError, NoSuchModelError } from '../../provider/dist/index.js';
2
+ import { withoutTrailingSlash, loadApiKey, parseProviderOptions, combineHeaders, resolve, postJsonToApi, convertUint8ArrayToBase64, createJsonResponseHandler, createEventSourceResponseHandler, createJsonErrorResponseHandler } from '../../provider-utils/dist/index.js';
3
+ import { z } from 'zod';
4
+
5
+ // src/anthropic-provider.ts
6
+ var anthropicErrorDataSchema = z.object({
7
+ type: z.literal("error"),
8
+ error: z.object({
9
+ type: z.string(),
10
+ message: z.string()
11
+ })
12
+ });
13
+ var anthropicFailedResponseHandler = createJsonErrorResponseHandler({
14
+ errorSchema: anthropicErrorDataSchema,
15
+ errorToMessage: (data) => data.error.message
16
+ });
17
+ function prepareTools(mode) {
18
+ var _a;
19
+ const tools = ((_a = mode.tools) == null ? void 0 : _a.length) ? mode.tools : void 0;
20
+ const toolWarnings = [];
21
+ const betas = /* @__PURE__ */ new Set();
22
+ if (tools == null) {
23
+ return { tools: void 0, tool_choice: void 0, toolWarnings, betas };
24
+ }
25
+ const anthropicTools2 = [];
26
+ for (const tool of tools) {
27
+ switch (tool.type) {
28
+ case "function":
29
+ anthropicTools2.push({
30
+ name: tool.name,
31
+ description: tool.description,
32
+ input_schema: tool.parameters
33
+ });
34
+ break;
35
+ case "provider-defined":
36
+ switch (tool.id) {
37
+ case "anthropic.computer_20250124":
38
+ betas.add("computer-use-2025-01-24");
39
+ anthropicTools2.push({
40
+ name: tool.name,
41
+ type: "computer_20250124",
42
+ display_width_px: tool.args.displayWidthPx,
43
+ display_height_px: tool.args.displayHeightPx,
44
+ display_number: tool.args.displayNumber
45
+ });
46
+ break;
47
+ case "anthropic.computer_20241022":
48
+ betas.add("computer-use-2024-10-22");
49
+ anthropicTools2.push({
50
+ name: tool.name,
51
+ type: "computer_20241022",
52
+ display_width_px: tool.args.displayWidthPx,
53
+ display_height_px: tool.args.displayHeightPx,
54
+ display_number: tool.args.displayNumber
55
+ });
56
+ break;
57
+ case "anthropic.text_editor_20250124":
58
+ betas.add("computer-use-2025-01-24");
59
+ anthropicTools2.push({
60
+ name: tool.name,
61
+ type: "text_editor_20250124"
62
+ });
63
+ break;
64
+ case "anthropic.text_editor_20241022":
65
+ betas.add("computer-use-2024-10-22");
66
+ anthropicTools2.push({
67
+ name: tool.name,
68
+ type: "text_editor_20241022"
69
+ });
70
+ break;
71
+ case "anthropic.bash_20250124":
72
+ betas.add("computer-use-2025-01-24");
73
+ anthropicTools2.push({
74
+ name: tool.name,
75
+ type: "bash_20250124"
76
+ });
77
+ break;
78
+ case "anthropic.bash_20241022":
79
+ betas.add("computer-use-2024-10-22");
80
+ anthropicTools2.push({
81
+ name: tool.name,
82
+ type: "bash_20241022"
83
+ });
84
+ break;
85
+ default:
86
+ toolWarnings.push({ type: "unsupported-tool", tool });
87
+ break;
88
+ }
89
+ break;
90
+ default:
91
+ toolWarnings.push({ type: "unsupported-tool", tool });
92
+ break;
93
+ }
94
+ }
95
+ const toolChoice = mode.toolChoice;
96
+ if (toolChoice == null) {
97
+ return {
98
+ tools: anthropicTools2,
99
+ tool_choice: void 0,
100
+ toolWarnings,
101
+ betas
102
+ };
103
+ }
104
+ const type = toolChoice.type;
105
+ switch (type) {
106
+ case "auto":
107
+ return {
108
+ tools: anthropicTools2,
109
+ tool_choice: { type: "auto" },
110
+ toolWarnings,
111
+ betas
112
+ };
113
+ case "required":
114
+ return {
115
+ tools: anthropicTools2,
116
+ tool_choice: { type: "any" },
117
+ toolWarnings,
118
+ betas
119
+ };
120
+ case "none":
121
+ return { tools: void 0, tool_choice: void 0, toolWarnings, betas };
122
+ case "tool":
123
+ return {
124
+ tools: anthropicTools2,
125
+ tool_choice: { type: "tool", name: toolChoice.toolName },
126
+ toolWarnings,
127
+ betas
128
+ };
129
+ default: {
130
+ const _exhaustiveCheck = type;
131
+ throw new UnsupportedFunctionalityError({
132
+ functionality: `Unsupported tool choice type: ${_exhaustiveCheck}`
133
+ });
134
+ }
135
+ }
136
+ }
137
+ function convertToAnthropicMessagesPrompt({
138
+ prompt,
139
+ sendReasoning,
140
+ warnings
141
+ }) {
142
+ var _a, _b, _c, _d;
143
+ const betas = /* @__PURE__ */ new Set();
144
+ const blocks = groupIntoBlocks(prompt);
145
+ let system = void 0;
146
+ const messages = [];
147
+ function getCacheControl(providerMetadata) {
148
+ var _a2;
149
+ const anthropic2 = providerMetadata == null ? void 0 : providerMetadata.anthropic;
150
+ const cacheControlValue = (_a2 = anthropic2 == null ? void 0 : anthropic2.cacheControl) != null ? _a2 : anthropic2 == null ? void 0 : anthropic2.cache_control;
151
+ return cacheControlValue;
152
+ }
153
+ for (let i = 0; i < blocks.length; i++) {
154
+ const block = blocks[i];
155
+ const isLastBlock = i === blocks.length - 1;
156
+ const type = block.type;
157
+ switch (type) {
158
+ case "system": {
159
+ if (system != null) {
160
+ throw new UnsupportedFunctionalityError({
161
+ functionality: "Multiple system messages that are separated by user/assistant messages"
162
+ });
163
+ }
164
+ system = block.messages.map(({ content, providerMetadata }) => ({
165
+ type: "text",
166
+ text: content,
167
+ cache_control: getCacheControl(providerMetadata)
168
+ }));
169
+ break;
170
+ }
171
+ case "user": {
172
+ const anthropicContent = [];
173
+ for (const message of block.messages) {
174
+ const { role, content } = message;
175
+ switch (role) {
176
+ case "user": {
177
+ for (let j = 0; j < content.length; j++) {
178
+ const part = content[j];
179
+ const isLastPart = j === content.length - 1;
180
+ const cacheControl = (_a = getCacheControl(part.providerMetadata)) != null ? _a : isLastPart ? getCacheControl(message.providerMetadata) : void 0;
181
+ switch (part.type) {
182
+ case "text": {
183
+ anthropicContent.push({
184
+ type: "text",
185
+ text: part.text,
186
+ cache_control: cacheControl
187
+ });
188
+ break;
189
+ }
190
+ case "image": {
191
+ anthropicContent.push({
192
+ type: "image",
193
+ source: part.image instanceof URL ? {
194
+ type: "url",
195
+ url: part.image.toString()
196
+ } : {
197
+ type: "base64",
198
+ media_type: (_b = part.mimeType) != null ? _b : "image/jpeg",
199
+ data: convertUint8ArrayToBase64(part.image)
200
+ },
201
+ cache_control: cacheControl
202
+ });
203
+ break;
204
+ }
205
+ case "file": {
206
+ if (part.mimeType !== "application/pdf") {
207
+ throw new UnsupportedFunctionalityError({
208
+ functionality: "Non-PDF files in user messages"
209
+ });
210
+ }
211
+ betas.add("pdfs-2024-09-25");
212
+ anthropicContent.push({
213
+ type: "document",
214
+ source: part.data instanceof URL ? {
215
+ type: "url",
216
+ url: part.data.toString()
217
+ } : {
218
+ type: "base64",
219
+ media_type: "application/pdf",
220
+ data: part.data
221
+ },
222
+ cache_control: cacheControl
223
+ });
224
+ break;
225
+ }
226
+ }
227
+ }
228
+ break;
229
+ }
230
+ case "tool": {
231
+ for (let i2 = 0; i2 < content.length; i2++) {
232
+ const part = content[i2];
233
+ const isLastPart = i2 === content.length - 1;
234
+ const cacheControl = (_c = getCacheControl(part.providerMetadata)) != null ? _c : isLastPart ? getCacheControl(message.providerMetadata) : void 0;
235
+ const toolResultContent = part.content != null ? part.content.map((part2) => {
236
+ var _a2;
237
+ switch (part2.type) {
238
+ case "text":
239
+ return {
240
+ type: "text",
241
+ text: part2.text,
242
+ cache_control: void 0
243
+ };
244
+ case "image":
245
+ return {
246
+ type: "image",
247
+ source: {
248
+ type: "base64",
249
+ media_type: (_a2 = part2.mimeType) != null ? _a2 : "image/jpeg",
250
+ data: part2.data
251
+ },
252
+ cache_control: void 0
253
+ };
254
+ }
255
+ }) : JSON.stringify(part.result);
256
+ anthropicContent.push({
257
+ type: "tool_result",
258
+ tool_use_id: part.toolCallId,
259
+ content: toolResultContent,
260
+ is_error: part.isError,
261
+ cache_control: cacheControl
262
+ });
263
+ }
264
+ break;
265
+ }
266
+ default: {
267
+ const _exhaustiveCheck = role;
268
+ throw new Error(`Unsupported role: ${_exhaustiveCheck}`);
269
+ }
270
+ }
271
+ }
272
+ messages.push({ role: "user", content: anthropicContent });
273
+ break;
274
+ }
275
+ case "assistant": {
276
+ const anthropicContent = [];
277
+ for (let j = 0; j < block.messages.length; j++) {
278
+ const message = block.messages[j];
279
+ const isLastMessage = j === block.messages.length - 1;
280
+ const { content } = message;
281
+ for (let k = 0; k < content.length; k++) {
282
+ const part = content[k];
283
+ const isLastContentPart = k === content.length - 1;
284
+ const cacheControl = (_d = getCacheControl(part.providerMetadata)) != null ? _d : isLastContentPart ? getCacheControl(message.providerMetadata) : void 0;
285
+ switch (part.type) {
286
+ case "text": {
287
+ anthropicContent.push({
288
+ type: "text",
289
+ text: (
290
+ // trim the last text part if it's the last message in the block
291
+ // because Anthropic does not allow trailing whitespace
292
+ // in pre-filled assistant responses
293
+ isLastBlock && isLastMessage && isLastContentPart ? part.text.trim() : part.text
294
+ ),
295
+ cache_control: cacheControl
296
+ });
297
+ break;
298
+ }
299
+ case "reasoning": {
300
+ if (sendReasoning) {
301
+ anthropicContent.push({
302
+ type: "thinking",
303
+ thinking: part.text,
304
+ signature: part.signature,
305
+ cache_control: cacheControl
306
+ });
307
+ } else {
308
+ warnings.push({
309
+ type: "other",
310
+ message: "sending reasoning content is disabled for this model"
311
+ });
312
+ }
313
+ break;
314
+ }
315
+ case "redacted-reasoning": {
316
+ anthropicContent.push({
317
+ type: "redacted_thinking",
318
+ data: part.data,
319
+ cache_control: cacheControl
320
+ });
321
+ break;
322
+ }
323
+ case "tool-call": {
324
+ anthropicContent.push({
325
+ type: "tool_use",
326
+ id: part.toolCallId,
327
+ name: part.toolName,
328
+ input: part.args,
329
+ cache_control: cacheControl
330
+ });
331
+ break;
332
+ }
333
+ }
334
+ }
335
+ }
336
+ messages.push({ role: "assistant", content: anthropicContent });
337
+ break;
338
+ }
339
+ default: {
340
+ const _exhaustiveCheck = type;
341
+ throw new Error(`Unsupported type: ${_exhaustiveCheck}`);
342
+ }
343
+ }
344
+ }
345
+ return {
346
+ prompt: { system, messages },
347
+ betas
348
+ };
349
+ }
350
+ function groupIntoBlocks(prompt) {
351
+ const blocks = [];
352
+ let currentBlock = void 0;
353
+ for (const message of prompt) {
354
+ const { role } = message;
355
+ switch (role) {
356
+ case "system": {
357
+ if ((currentBlock == null ? void 0 : currentBlock.type) !== "system") {
358
+ currentBlock = { type: "system", messages: [] };
359
+ blocks.push(currentBlock);
360
+ }
361
+ currentBlock.messages.push(message);
362
+ break;
363
+ }
364
+ case "assistant": {
365
+ if ((currentBlock == null ? void 0 : currentBlock.type) !== "assistant") {
366
+ currentBlock = { type: "assistant", messages: [] };
367
+ blocks.push(currentBlock);
368
+ }
369
+ currentBlock.messages.push(message);
370
+ break;
371
+ }
372
+ case "user": {
373
+ if ((currentBlock == null ? void 0 : currentBlock.type) !== "user") {
374
+ currentBlock = { type: "user", messages: [] };
375
+ blocks.push(currentBlock);
376
+ }
377
+ currentBlock.messages.push(message);
378
+ break;
379
+ }
380
+ case "tool": {
381
+ if ((currentBlock == null ? void 0 : currentBlock.type) !== "user") {
382
+ currentBlock = { type: "user", messages: [] };
383
+ blocks.push(currentBlock);
384
+ }
385
+ currentBlock.messages.push(message);
386
+ break;
387
+ }
388
+ default: {
389
+ const _exhaustiveCheck = role;
390
+ throw new Error(`Unsupported role: ${_exhaustiveCheck}`);
391
+ }
392
+ }
393
+ }
394
+ return blocks;
395
+ }
396
+
397
+ // src/map-anthropic-stop-reason.ts
398
+ function mapAnthropicStopReason(finishReason) {
399
+ switch (finishReason) {
400
+ case "end_turn":
401
+ case "stop_sequence":
402
+ return "stop";
403
+ case "tool_use":
404
+ return "tool-calls";
405
+ case "max_tokens":
406
+ return "length";
407
+ default:
408
+ return "unknown";
409
+ }
410
+ }
411
+
412
+ // src/anthropic-messages-language-model.ts
413
+ var AnthropicMessagesLanguageModel = class {
414
+ constructor(modelId, settings, config) {
415
+ this.specificationVersion = "v1";
416
+ this.defaultObjectGenerationMode = "tool";
417
+ this.modelId = modelId;
418
+ this.settings = settings;
419
+ this.config = config;
420
+ }
421
+ supportsUrl(url) {
422
+ return url.protocol === "https:";
423
+ }
424
+ get provider() {
425
+ return this.config.provider;
426
+ }
427
+ get supportsImageUrls() {
428
+ return this.config.supportsImageUrls;
429
+ }
430
+ async getArgs({
431
+ mode,
432
+ prompt,
433
+ maxTokens = 4096,
434
+ // 4096: max model output tokens TODO update default in v5
435
+ temperature,
436
+ topP,
437
+ topK,
438
+ frequencyPenalty,
439
+ presencePenalty,
440
+ stopSequences,
441
+ responseFormat,
442
+ seed,
443
+ providerMetadata: providerOptions
444
+ }) {
445
+ var _a, _b, _c;
446
+ const type = mode.type;
447
+ const warnings = [];
448
+ if (frequencyPenalty != null) {
449
+ warnings.push({
450
+ type: "unsupported-setting",
451
+ setting: "frequencyPenalty"
452
+ });
453
+ }
454
+ if (presencePenalty != null) {
455
+ warnings.push({
456
+ type: "unsupported-setting",
457
+ setting: "presencePenalty"
458
+ });
459
+ }
460
+ if (seed != null) {
461
+ warnings.push({
462
+ type: "unsupported-setting",
463
+ setting: "seed"
464
+ });
465
+ }
466
+ if (responseFormat != null && responseFormat.type !== "text") {
467
+ warnings.push({
468
+ type: "unsupported-setting",
469
+ setting: "responseFormat",
470
+ details: "JSON response format is not supported."
471
+ });
472
+ }
473
+ const { prompt: messagesPrompt, betas: messagesBetas } = convertToAnthropicMessagesPrompt({
474
+ prompt,
475
+ sendReasoning: (_a = this.settings.sendReasoning) != null ? _a : true,
476
+ warnings
477
+ });
478
+ const anthropicOptions = parseProviderOptions({
479
+ provider: "anthropic",
480
+ providerOptions,
481
+ schema: anthropicProviderOptionsSchema
482
+ });
483
+ const isThinking = ((_b = anthropicOptions == null ? void 0 : anthropicOptions.thinking) == null ? void 0 : _b.type) === "enabled";
484
+ const thinkingBudget = (_c = anthropicOptions == null ? void 0 : anthropicOptions.thinking) == null ? void 0 : _c.budgetTokens;
485
+ const baseArgs = {
486
+ // model id:
487
+ model: this.modelId,
488
+ // standardized settings:
489
+ max_tokens: maxTokens,
490
+ temperature,
491
+ top_k: topK,
492
+ top_p: topP,
493
+ stop_sequences: stopSequences,
494
+ // provider specific settings:
495
+ ...isThinking && {
496
+ thinking: { type: "enabled", budget_tokens: thinkingBudget }
497
+ },
498
+ // prompt:
499
+ system: messagesPrompt.system,
500
+ messages: messagesPrompt.messages
501
+ };
502
+ if (isThinking) {
503
+ if (thinkingBudget == null) {
504
+ throw new UnsupportedFunctionalityError({
505
+ functionality: "thinking requires a budget"
506
+ });
507
+ }
508
+ if (baseArgs.temperature != null) {
509
+ baseArgs.temperature = void 0;
510
+ warnings.push({
511
+ type: "unsupported-setting",
512
+ setting: "temperature",
513
+ details: "temperature is not supported when thinking is enabled"
514
+ });
515
+ }
516
+ if (topK != null) {
517
+ baseArgs.top_k = void 0;
518
+ warnings.push({
519
+ type: "unsupported-setting",
520
+ setting: "topK",
521
+ details: "topK is not supported when thinking is enabled"
522
+ });
523
+ }
524
+ if (topP != null) {
525
+ baseArgs.top_p = void 0;
526
+ warnings.push({
527
+ type: "unsupported-setting",
528
+ setting: "topP",
529
+ details: "topP is not supported when thinking is enabled"
530
+ });
531
+ }
532
+ baseArgs.max_tokens = maxTokens + thinkingBudget;
533
+ }
534
+ switch (type) {
535
+ case "regular": {
536
+ const {
537
+ tools,
538
+ tool_choice,
539
+ toolWarnings,
540
+ betas: toolsBetas
541
+ } = prepareTools(mode);
542
+ return {
543
+ args: { ...baseArgs, tools, tool_choice },
544
+ warnings: [...warnings, ...toolWarnings],
545
+ betas: /* @__PURE__ */ new Set([...messagesBetas, ...toolsBetas])
546
+ };
547
+ }
548
+ case "object-json": {
549
+ throw new UnsupportedFunctionalityError({
550
+ functionality: "json-mode object generation"
551
+ });
552
+ }
553
+ case "object-tool": {
554
+ const { name, description, parameters } = mode.tool;
555
+ return {
556
+ args: {
557
+ ...baseArgs,
558
+ tools: [{ name, description, input_schema: parameters }],
559
+ tool_choice: { type: "tool", name }
560
+ },
561
+ warnings,
562
+ betas: messagesBetas
563
+ };
564
+ }
565
+ default: {
566
+ const _exhaustiveCheck = type;
567
+ throw new Error(`Unsupported type: ${_exhaustiveCheck}`);
568
+ }
569
+ }
570
+ }
571
+ async getHeaders({
572
+ betas,
573
+ headers
574
+ }) {
575
+ return combineHeaders(
576
+ await resolve(this.config.headers),
577
+ betas.size > 0 ? { "anthropic-beta": Array.from(betas).join(",") } : {},
578
+ headers
579
+ );
580
+ }
581
+ buildRequestUrl(isStreaming) {
582
+ var _a, _b, _c;
583
+ return (_c = (_b = (_a = this.config).buildRequestUrl) == null ? void 0 : _b.call(_a, this.config.baseURL, isStreaming)) != null ? _c : `${this.config.baseURL}/messages`;
584
+ }
585
+ transformRequestBody(args) {
586
+ var _a, _b, _c;
587
+ return (_c = (_b = (_a = this.config).transformRequestBody) == null ? void 0 : _b.call(_a, args)) != null ? _c : args;
588
+ }
589
+ async doGenerate(options) {
590
+ var _a, _b, _c, _d;
591
+ const { args, warnings, betas } = await this.getArgs(options);
592
+ const {
593
+ responseHeaders,
594
+ value: response,
595
+ rawValue: rawResponse
596
+ } = await postJsonToApi({
597
+ url: this.buildRequestUrl(false),
598
+ headers: await this.getHeaders({ betas, headers: options.headers }),
599
+ body: this.transformRequestBody(args),
600
+ failedResponseHandler: anthropicFailedResponseHandler,
601
+ successfulResponseHandler: createJsonResponseHandler(
602
+ anthropicMessagesResponseSchema
603
+ ),
604
+ abortSignal: options.abortSignal,
605
+ fetch: this.config.fetch
606
+ });
607
+ const { messages: rawPrompt, ...rawSettings } = args;
608
+ let text = "";
609
+ for (const content of response.content) {
610
+ if (content.type === "text") {
611
+ text += content.text;
612
+ }
613
+ }
614
+ let toolCalls = void 0;
615
+ if (response.content.some((content) => content.type === "tool_use")) {
616
+ toolCalls = [];
617
+ for (const content of response.content) {
618
+ if (content.type === "tool_use") {
619
+ toolCalls.push({
620
+ toolCallType: "function",
621
+ toolCallId: content.id,
622
+ toolName: content.name,
623
+ args: JSON.stringify(content.input)
624
+ });
625
+ }
626
+ }
627
+ }
628
+ const reasoning = response.content.filter(
629
+ (content) => content.type === "redacted_thinking" || content.type === "thinking"
630
+ ).map(
631
+ (content) => content.type === "thinking" ? {
632
+ type: "text",
633
+ text: content.thinking,
634
+ signature: content.signature
635
+ } : {
636
+ type: "redacted",
637
+ data: content.data
638
+ }
639
+ );
640
+ return {
641
+ text,
642
+ reasoning: reasoning.length > 0 ? reasoning : void 0,
643
+ toolCalls,
644
+ finishReason: mapAnthropicStopReason(response.stop_reason),
645
+ usage: {
646
+ promptTokens: response.usage.input_tokens,
647
+ completionTokens: response.usage.output_tokens
648
+ },
649
+ rawCall: { rawPrompt, rawSettings },
650
+ rawResponse: {
651
+ headers: responseHeaders,
652
+ body: rawResponse
653
+ },
654
+ response: {
655
+ id: (_a = response.id) != null ? _a : void 0,
656
+ modelId: (_b = response.model) != null ? _b : void 0
657
+ },
658
+ warnings,
659
+ providerMetadata: {
660
+ anthropic: {
661
+ cacheCreationInputTokens: (_c = response.usage.cache_creation_input_tokens) != null ? _c : null,
662
+ cacheReadInputTokens: (_d = response.usage.cache_read_input_tokens) != null ? _d : null
663
+ }
664
+ },
665
+ request: { body: JSON.stringify(args) }
666
+ };
667
+ }
668
+ async doStream(options) {
669
+ const { args, warnings, betas } = await this.getArgs(options);
670
+ const body = { ...args, stream: true };
671
+ const { responseHeaders, value: response } = await postJsonToApi({
672
+ url: this.buildRequestUrl(true),
673
+ headers: await this.getHeaders({ betas, headers: options.headers }),
674
+ body: this.transformRequestBody(body),
675
+ failedResponseHandler: anthropicFailedResponseHandler,
676
+ successfulResponseHandler: createEventSourceResponseHandler(
677
+ anthropicMessagesChunkSchema
678
+ ),
679
+ abortSignal: options.abortSignal,
680
+ fetch: this.config.fetch
681
+ });
682
+ const { messages: rawPrompt, ...rawSettings } = args;
683
+ let finishReason = "unknown";
684
+ const usage = {
685
+ promptTokens: Number.NaN,
686
+ completionTokens: Number.NaN
687
+ };
688
+ const toolCallContentBlocks = {};
689
+ let providerMetadata = void 0;
690
+ let blockType = void 0;
691
+ return {
692
+ stream: response.pipeThrough(
693
+ new TransformStream({
694
+ transform(chunk, controller) {
695
+ var _a, _b, _c, _d;
696
+ if (!chunk.success) {
697
+ controller.enqueue({ type: "error", error: chunk.error });
698
+ return;
699
+ }
700
+ const value = chunk.value;
701
+ switch (value.type) {
702
+ case "ping": {
703
+ return;
704
+ }
705
+ case "content_block_start": {
706
+ const contentBlockType = value.content_block.type;
707
+ blockType = contentBlockType;
708
+ switch (contentBlockType) {
709
+ case "text":
710
+ case "thinking": {
711
+ return;
712
+ }
713
+ case "redacted_thinking": {
714
+ controller.enqueue({
715
+ type: "redacted-reasoning",
716
+ data: value.content_block.data
717
+ });
718
+ return;
719
+ }
720
+ case "tool_use": {
721
+ toolCallContentBlocks[value.index] = {
722
+ toolCallId: value.content_block.id,
723
+ toolName: value.content_block.name,
724
+ jsonText: ""
725
+ };
726
+ return;
727
+ }
728
+ default: {
729
+ const _exhaustiveCheck = contentBlockType;
730
+ throw new Error(
731
+ `Unsupported content block type: ${_exhaustiveCheck}`
732
+ );
733
+ }
734
+ }
735
+ }
736
+ case "content_block_stop": {
737
+ if (toolCallContentBlocks[value.index] != null) {
738
+ const contentBlock = toolCallContentBlocks[value.index];
739
+ controller.enqueue({
740
+ type: "tool-call",
741
+ toolCallType: "function",
742
+ toolCallId: contentBlock.toolCallId,
743
+ toolName: contentBlock.toolName,
744
+ args: contentBlock.jsonText
745
+ });
746
+ delete toolCallContentBlocks[value.index];
747
+ }
748
+ blockType = void 0;
749
+ return;
750
+ }
751
+ case "content_block_delta": {
752
+ const deltaType = value.delta.type;
753
+ switch (deltaType) {
754
+ case "text_delta": {
755
+ controller.enqueue({
756
+ type: "text-delta",
757
+ textDelta: value.delta.text
758
+ });
759
+ return;
760
+ }
761
+ case "thinking_delta": {
762
+ controller.enqueue({
763
+ type: "reasoning",
764
+ textDelta: value.delta.thinking
765
+ });
766
+ return;
767
+ }
768
+ case "signature_delta": {
769
+ if (blockType === "thinking") {
770
+ controller.enqueue({
771
+ type: "reasoning-signature",
772
+ signature: value.delta.signature
773
+ });
774
+ }
775
+ return;
776
+ }
777
+ case "input_json_delta": {
778
+ const contentBlock = toolCallContentBlocks[value.index];
779
+ controller.enqueue({
780
+ type: "tool-call-delta",
781
+ toolCallType: "function",
782
+ toolCallId: contentBlock.toolCallId,
783
+ toolName: contentBlock.toolName,
784
+ argsTextDelta: value.delta.partial_json
785
+ });
786
+ contentBlock.jsonText += value.delta.partial_json;
787
+ return;
788
+ }
789
+ default: {
790
+ const _exhaustiveCheck = deltaType;
791
+ throw new Error(
792
+ `Unsupported delta type: ${_exhaustiveCheck}`
793
+ );
794
+ }
795
+ }
796
+ }
797
+ case "message_start": {
798
+ usage.promptTokens = value.message.usage.input_tokens;
799
+ usage.completionTokens = value.message.usage.output_tokens;
800
+ providerMetadata = {
801
+ anthropic: {
802
+ cacheCreationInputTokens: (_a = value.message.usage.cache_creation_input_tokens) != null ? _a : null,
803
+ cacheReadInputTokens: (_b = value.message.usage.cache_read_input_tokens) != null ? _b : null
804
+ }
805
+ };
806
+ controller.enqueue({
807
+ type: "response-metadata",
808
+ id: (_c = value.message.id) != null ? _c : void 0,
809
+ modelId: (_d = value.message.model) != null ? _d : void 0
810
+ });
811
+ return;
812
+ }
813
+ case "message_delta": {
814
+ usage.completionTokens = value.usage.output_tokens;
815
+ finishReason = mapAnthropicStopReason(value.delta.stop_reason);
816
+ return;
817
+ }
818
+ case "message_stop": {
819
+ controller.enqueue({
820
+ type: "finish",
821
+ finishReason,
822
+ usage,
823
+ providerMetadata
824
+ });
825
+ return;
826
+ }
827
+ case "error": {
828
+ controller.enqueue({ type: "error", error: value.error });
829
+ return;
830
+ }
831
+ default: {
832
+ const _exhaustiveCheck = value;
833
+ throw new Error(`Unsupported chunk type: ${_exhaustiveCheck}`);
834
+ }
835
+ }
836
+ }
837
+ })
838
+ ),
839
+ rawCall: { rawPrompt, rawSettings },
840
+ rawResponse: { headers: responseHeaders },
841
+ warnings,
842
+ request: { body: JSON.stringify(body) }
843
+ };
844
+ }
845
+ };
846
+ var anthropicMessagesResponseSchema = z.object({
847
+ type: z.literal("message"),
848
+ id: z.string().nullish(),
849
+ model: z.string().nullish(),
850
+ content: z.array(
851
+ z.discriminatedUnion("type", [
852
+ z.object({
853
+ type: z.literal("text"),
854
+ text: z.string()
855
+ }),
856
+ z.object({
857
+ type: z.literal("thinking"),
858
+ thinking: z.string(),
859
+ signature: z.string()
860
+ }),
861
+ z.object({
862
+ type: z.literal("redacted_thinking"),
863
+ data: z.string()
864
+ }),
865
+ z.object({
866
+ type: z.literal("tool_use"),
867
+ id: z.string(),
868
+ name: z.string(),
869
+ input: z.unknown()
870
+ })
871
+ ])
872
+ ),
873
+ stop_reason: z.string().nullish(),
874
+ usage: z.object({
875
+ input_tokens: z.number(),
876
+ output_tokens: z.number(),
877
+ cache_creation_input_tokens: z.number().nullish(),
878
+ cache_read_input_tokens: z.number().nullish()
879
+ })
880
+ });
881
+ var anthropicMessagesChunkSchema = z.discriminatedUnion("type", [
882
+ z.object({
883
+ type: z.literal("message_start"),
884
+ message: z.object({
885
+ id: z.string().nullish(),
886
+ model: z.string().nullish(),
887
+ usage: z.object({
888
+ input_tokens: z.number(),
889
+ output_tokens: z.number(),
890
+ cache_creation_input_tokens: z.number().nullish(),
891
+ cache_read_input_tokens: z.number().nullish()
892
+ })
893
+ })
894
+ }),
895
+ z.object({
896
+ type: z.literal("content_block_start"),
897
+ index: z.number(),
898
+ content_block: z.discriminatedUnion("type", [
899
+ z.object({
900
+ type: z.literal("text"),
901
+ text: z.string()
902
+ }),
903
+ z.object({
904
+ type: z.literal("thinking"),
905
+ thinking: z.string()
906
+ }),
907
+ z.object({
908
+ type: z.literal("tool_use"),
909
+ id: z.string(),
910
+ name: z.string()
911
+ }),
912
+ z.object({
913
+ type: z.literal("redacted_thinking"),
914
+ data: z.string()
915
+ })
916
+ ])
917
+ }),
918
+ z.object({
919
+ type: z.literal("content_block_delta"),
920
+ index: z.number(),
921
+ delta: z.discriminatedUnion("type", [
922
+ z.object({
923
+ type: z.literal("input_json_delta"),
924
+ partial_json: z.string()
925
+ }),
926
+ z.object({
927
+ type: z.literal("text_delta"),
928
+ text: z.string()
929
+ }),
930
+ z.object({
931
+ type: z.literal("thinking_delta"),
932
+ thinking: z.string()
933
+ }),
934
+ z.object({
935
+ type: z.literal("signature_delta"),
936
+ signature: z.string()
937
+ })
938
+ ])
939
+ }),
940
+ z.object({
941
+ type: z.literal("content_block_stop"),
942
+ index: z.number()
943
+ }),
944
+ z.object({
945
+ type: z.literal("error"),
946
+ error: z.object({
947
+ type: z.string(),
948
+ message: z.string()
949
+ })
950
+ }),
951
+ z.object({
952
+ type: z.literal("message_delta"),
953
+ delta: z.object({ stop_reason: z.string().nullish() }),
954
+ usage: z.object({ output_tokens: z.number() })
955
+ }),
956
+ z.object({
957
+ type: z.literal("message_stop")
958
+ }),
959
+ z.object({
960
+ type: z.literal("ping")
961
+ })
962
+ ]);
963
+ var anthropicProviderOptionsSchema = z.object({
964
+ thinking: z.object({
965
+ type: z.union([z.literal("enabled"), z.literal("disabled")]),
966
+ budgetTokens: z.number().optional()
967
+ }).optional()
968
+ });
969
+ var Bash20241022Parameters = z.object({
970
+ command: z.string(),
971
+ restart: z.boolean().optional()
972
+ });
973
+ function bashTool_20241022(options = {}) {
974
+ return {
975
+ type: "provider-defined",
976
+ id: "anthropic.bash_20241022",
977
+ args: {},
978
+ parameters: Bash20241022Parameters,
979
+ execute: options.execute,
980
+ experimental_toToolResultContent: options.experimental_toToolResultContent
981
+ };
982
+ }
983
+ var Bash20250124Parameters = z.object({
984
+ command: z.string(),
985
+ restart: z.boolean().optional()
986
+ });
987
+ function bashTool_20250124(options = {}) {
988
+ return {
989
+ type: "provider-defined",
990
+ id: "anthropic.bash_20250124",
991
+ args: {},
992
+ parameters: Bash20250124Parameters,
993
+ execute: options.execute,
994
+ experimental_toToolResultContent: options.experimental_toToolResultContent
995
+ };
996
+ }
997
+ var TextEditor20241022Parameters = z.object({
998
+ command: z.enum(["view", "create", "str_replace", "insert", "undo_edit"]),
999
+ path: z.string(),
1000
+ file_text: z.string().optional(),
1001
+ insert_line: z.number().int().optional(),
1002
+ new_str: z.string().optional(),
1003
+ old_str: z.string().optional(),
1004
+ view_range: z.array(z.number().int()).optional()
1005
+ });
1006
+ function textEditorTool_20241022(options = {}) {
1007
+ return {
1008
+ type: "provider-defined",
1009
+ id: "anthropic.text_editor_20241022",
1010
+ args: {},
1011
+ parameters: TextEditor20241022Parameters,
1012
+ execute: options.execute,
1013
+ experimental_toToolResultContent: options.experimental_toToolResultContent
1014
+ };
1015
+ }
1016
+ var TextEditor20250124Parameters = z.object({
1017
+ command: z.enum(["view", "create", "str_replace", "insert", "undo_edit"]),
1018
+ path: z.string(),
1019
+ file_text: z.string().optional(),
1020
+ insert_line: z.number().int().optional(),
1021
+ new_str: z.string().optional(),
1022
+ old_str: z.string().optional(),
1023
+ view_range: z.array(z.number().int()).optional()
1024
+ });
1025
+ function textEditorTool_20250124(options = {}) {
1026
+ return {
1027
+ type: "provider-defined",
1028
+ id: "anthropic.text_editor_20250124",
1029
+ args: {},
1030
+ parameters: TextEditor20250124Parameters,
1031
+ execute: options.execute,
1032
+ experimental_toToolResultContent: options.experimental_toToolResultContent
1033
+ };
1034
+ }
1035
+ var Computer20241022Parameters = z.object({
1036
+ action: z.enum([
1037
+ "key",
1038
+ "type",
1039
+ "mouse_move",
1040
+ "left_click",
1041
+ "left_click_drag",
1042
+ "right_click",
1043
+ "middle_click",
1044
+ "double_click",
1045
+ "screenshot",
1046
+ "cursor_position"
1047
+ ]),
1048
+ coordinate: z.array(z.number().int()).optional(),
1049
+ text: z.string().optional()
1050
+ });
1051
+ function computerTool_20241022(options) {
1052
+ return {
1053
+ type: "provider-defined",
1054
+ id: "anthropic.computer_20241022",
1055
+ args: {
1056
+ displayWidthPx: options.displayWidthPx,
1057
+ displayHeightPx: options.displayHeightPx,
1058
+ displayNumber: options.displayNumber
1059
+ },
1060
+ parameters: Computer20241022Parameters,
1061
+ execute: options.execute,
1062
+ experimental_toToolResultContent: options.experimental_toToolResultContent
1063
+ };
1064
+ }
1065
+ var Computer20250124Parameters = z.object({
1066
+ action: z.enum([
1067
+ "key",
1068
+ "hold_key",
1069
+ "type",
1070
+ "cursor_position",
1071
+ "mouse_move",
1072
+ "left_mouse_down",
1073
+ "left_mouse_up",
1074
+ "left_click",
1075
+ "left_click_drag",
1076
+ "right_click",
1077
+ "middle_click",
1078
+ "double_click",
1079
+ "triple_click",
1080
+ "scroll",
1081
+ "wait",
1082
+ "screenshot"
1083
+ ]),
1084
+ coordinate: z.tuple([z.number().int(), z.number().int()]).optional(),
1085
+ duration: z.number().optional(),
1086
+ scroll_amount: z.number().optional(),
1087
+ scroll_direction: z.enum(["up", "down", "left", "right"]).optional(),
1088
+ start_coordinate: z.tuple([z.number().int(), z.number().int()]).optional(),
1089
+ text: z.string().optional()
1090
+ });
1091
+ function computerTool_20250124(options) {
1092
+ return {
1093
+ type: "provider-defined",
1094
+ id: "anthropic.computer_20250124",
1095
+ args: {
1096
+ displayWidthPx: options.displayWidthPx,
1097
+ displayHeightPx: options.displayHeightPx,
1098
+ displayNumber: options.displayNumber
1099
+ },
1100
+ parameters: Computer20250124Parameters,
1101
+ execute: options.execute,
1102
+ experimental_toToolResultContent: options.experimental_toToolResultContent
1103
+ };
1104
+ }
1105
+ var anthropicTools = {
1106
+ bash_20241022: bashTool_20241022,
1107
+ bash_20250124: bashTool_20250124,
1108
+ textEditor_20241022: textEditorTool_20241022,
1109
+ textEditor_20250124: textEditorTool_20250124,
1110
+ computer_20241022: computerTool_20241022,
1111
+ computer_20250124: computerTool_20250124
1112
+ };
1113
+
1114
+ // src/anthropic-provider.ts
1115
+ function createAnthropic(options = {}) {
1116
+ var _a;
1117
+ const baseURL = (_a = withoutTrailingSlash(options.baseURL)) != null ? _a : "https://api.anthropic.com/v1";
1118
+ const getHeaders = () => ({
1119
+ "anthropic-version": "2023-06-01",
1120
+ "x-api-key": loadApiKey({
1121
+ apiKey: options.apiKey,
1122
+ environmentVariableName: "ANTHROPIC_API_KEY",
1123
+ description: "Anthropic"
1124
+ }),
1125
+ ...options.headers
1126
+ });
1127
+ const createChatModel = (modelId, settings = {}) => new AnthropicMessagesLanguageModel(modelId, settings, {
1128
+ provider: "anthropic.messages",
1129
+ baseURL,
1130
+ headers: getHeaders,
1131
+ fetch: options.fetch,
1132
+ supportsImageUrls: true
1133
+ });
1134
+ const provider = function(modelId, settings) {
1135
+ if (new.target) {
1136
+ throw new Error(
1137
+ "The Anthropic model function cannot be called with the new keyword."
1138
+ );
1139
+ }
1140
+ return createChatModel(modelId, settings);
1141
+ };
1142
+ provider.languageModel = createChatModel;
1143
+ provider.chat = createChatModel;
1144
+ provider.messages = createChatModel;
1145
+ provider.textEmbeddingModel = (modelId) => {
1146
+ throw new NoSuchModelError({ modelId, modelType: "textEmbeddingModel" });
1147
+ };
1148
+ provider.tools = anthropicTools;
1149
+ return provider;
1150
+ }
1151
+ var anthropic = createAnthropic();
1152
+
1153
+ export { anthropic, createAnthropic };
1154
+ //# sourceMappingURL=index.js.map