@clinebot/llms 0.0.20 → 0.0.22

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 (319) hide show
  1. package/dist/config-browser.d.ts +1 -0
  2. package/dist/config-browser.d.ts.map +1 -0
  3. package/dist/config.d.ts +1 -0
  4. package/dist/config.d.ts.map +1 -0
  5. package/dist/index.browser.d.ts +1 -0
  6. package/dist/index.browser.d.ts.map +1 -0
  7. package/dist/index.browser.js +5 -5
  8. package/dist/index.d.ts +1 -0
  9. package/dist/index.d.ts.map +1 -0
  10. package/dist/index.js +12 -12
  11. package/dist/models/generated-access.d.ts +1 -0
  12. package/dist/models/generated-access.d.ts.map +1 -0
  13. package/dist/models/generated-provider-loaders.d.ts +1 -0
  14. package/dist/models/generated-provider-loaders.d.ts.map +1 -0
  15. package/dist/models/generated.d.ts +1 -0
  16. package/dist/models/generated.d.ts.map +1 -0
  17. package/dist/models/index.d.ts +1 -0
  18. package/dist/models/index.d.ts.map +1 -0
  19. package/dist/models/models-dev-catalog.d.ts +1 -0
  20. package/dist/models/models-dev-catalog.d.ts.map +1 -0
  21. package/dist/models/providers/aihubmix.d.ts +1 -0
  22. package/dist/models/providers/aihubmix.d.ts.map +1 -0
  23. package/dist/models/providers/anthropic.d.ts +1 -0
  24. package/dist/models/providers/anthropic.d.ts.map +1 -0
  25. package/dist/models/providers/asksage.d.ts +1 -0
  26. package/dist/models/providers/asksage.d.ts.map +1 -0
  27. package/dist/models/providers/baseten.d.ts +1 -0
  28. package/dist/models/providers/baseten.d.ts.map +1 -0
  29. package/dist/models/providers/bedrock.d.ts +1 -0
  30. package/dist/models/providers/bedrock.d.ts.map +1 -0
  31. package/dist/models/providers/cerebras.d.ts +1 -0
  32. package/dist/models/providers/cerebras.d.ts.map +1 -0
  33. package/dist/models/providers/claude-code.d.ts +1 -0
  34. package/dist/models/providers/claude-code.d.ts.map +1 -0
  35. package/dist/models/providers/cline.d.ts +1 -0
  36. package/dist/models/providers/cline.d.ts.map +1 -0
  37. package/dist/models/providers/deepseek.d.ts +1 -0
  38. package/dist/models/providers/deepseek.d.ts.map +1 -0
  39. package/dist/models/providers/dify.d.ts +1 -0
  40. package/dist/models/providers/dify.d.ts.map +1 -0
  41. package/dist/models/providers/doubao.d.ts +1 -0
  42. package/dist/models/providers/doubao.d.ts.map +1 -0
  43. package/dist/models/providers/fireworks.d.ts +1 -0
  44. package/dist/models/providers/fireworks.d.ts.map +1 -0
  45. package/dist/models/providers/gemini.d.ts +1 -0
  46. package/dist/models/providers/gemini.d.ts.map +1 -0
  47. package/dist/models/providers/groq.d.ts +1 -0
  48. package/dist/models/providers/groq.d.ts.map +1 -0
  49. package/dist/models/providers/hicap.d.ts +1 -0
  50. package/dist/models/providers/hicap.d.ts.map +1 -0
  51. package/dist/models/providers/huawei-cloud-maas.d.ts +1 -0
  52. package/dist/models/providers/huawei-cloud-maas.d.ts.map +1 -0
  53. package/dist/models/providers/huggingface.d.ts +1 -0
  54. package/dist/models/providers/huggingface.d.ts.map +1 -0
  55. package/dist/models/providers/index.d.ts +1 -0
  56. package/dist/models/providers/index.d.ts.map +1 -0
  57. package/dist/models/providers/litellm.d.ts +1 -0
  58. package/dist/models/providers/litellm.d.ts.map +1 -0
  59. package/dist/models/providers/lmstudio.d.ts +1 -0
  60. package/dist/models/providers/lmstudio.d.ts.map +1 -0
  61. package/dist/models/providers/minimax.d.ts +1 -0
  62. package/dist/models/providers/minimax.d.ts.map +1 -0
  63. package/dist/models/providers/mistral.d.ts +1 -0
  64. package/dist/models/providers/mistral.d.ts.map +1 -0
  65. package/dist/models/providers/moonshot.d.ts +1 -0
  66. package/dist/models/providers/moonshot.d.ts.map +1 -0
  67. package/dist/models/providers/nebius.d.ts +1 -0
  68. package/dist/models/providers/nebius.d.ts.map +1 -0
  69. package/dist/models/providers/nous-research.d.ts +1 -0
  70. package/dist/models/providers/nous-research.d.ts.map +1 -0
  71. package/dist/models/providers/oca.d.ts +1 -0
  72. package/dist/models/providers/oca.d.ts.map +1 -0
  73. package/dist/models/providers/ollama.d.ts +1 -0
  74. package/dist/models/providers/ollama.d.ts.map +1 -0
  75. package/dist/models/providers/openai-codex.d.ts +1 -0
  76. package/dist/models/providers/openai-codex.d.ts.map +1 -0
  77. package/dist/models/providers/openai.d.ts +1 -0
  78. package/dist/models/providers/openai.d.ts.map +1 -0
  79. package/dist/models/providers/opencode.d.ts +1 -0
  80. package/dist/models/providers/opencode.d.ts.map +1 -0
  81. package/dist/models/providers/openrouter.d.ts +1 -0
  82. package/dist/models/providers/openrouter.d.ts.map +1 -0
  83. package/dist/models/providers/qwen-code.d.ts +1 -0
  84. package/dist/models/providers/qwen-code.d.ts.map +1 -0
  85. package/dist/models/providers/qwen.d.ts +1 -0
  86. package/dist/models/providers/qwen.d.ts.map +1 -0
  87. package/dist/models/providers/requesty.d.ts +1 -0
  88. package/dist/models/providers/requesty.d.ts.map +1 -0
  89. package/dist/models/providers/sambanova.d.ts +1 -0
  90. package/dist/models/providers/sambanova.d.ts.map +1 -0
  91. package/dist/models/providers/sapaicore.d.ts +1 -0
  92. package/dist/models/providers/sapaicore.d.ts.map +1 -0
  93. package/dist/models/providers/together.d.ts +1 -0
  94. package/dist/models/providers/together.d.ts.map +1 -0
  95. package/dist/models/providers/vercel-ai-gateway.d.ts +1 -0
  96. package/dist/models/providers/vercel-ai-gateway.d.ts.map +1 -0
  97. package/dist/models/providers/vertex.d.ts +1 -0
  98. package/dist/models/providers/vertex.d.ts.map +1 -0
  99. package/dist/models/providers/xai.d.ts +1 -0
  100. package/dist/models/providers/xai.d.ts.map +1 -0
  101. package/dist/models/providers/zai.d.ts +1 -0
  102. package/dist/models/providers/zai.d.ts.map +1 -0
  103. package/dist/models/query.d.ts +1 -0
  104. package/dist/models/query.d.ts.map +1 -0
  105. package/dist/models/registry.d.ts +1 -0
  106. package/dist/models/registry.d.ts.map +1 -0
  107. package/dist/models/schemas/index.d.ts +1 -0
  108. package/dist/models/schemas/index.d.ts.map +1 -0
  109. package/dist/models/schemas/model.d.ts +1 -0
  110. package/dist/models/schemas/model.d.ts.map +1 -0
  111. package/dist/models/schemas/query.d.ts +1 -0
  112. package/dist/models/schemas/query.d.ts.map +1 -0
  113. package/dist/providers/handlers/ai-sdk-community.d.ts +1 -0
  114. package/dist/providers/handlers/ai-sdk-community.d.ts.map +1 -0
  115. package/dist/providers/handlers/ai-sdk-provider-base.d.ts +1 -0
  116. package/dist/providers/handlers/ai-sdk-provider-base.d.ts.map +1 -0
  117. package/dist/providers/handlers/anthropic-base.d.ts +1 -0
  118. package/dist/providers/handlers/anthropic-base.d.ts.map +1 -0
  119. package/dist/providers/handlers/asksage.d.ts +1 -0
  120. package/dist/providers/handlers/asksage.d.ts.map +1 -0
  121. package/dist/providers/handlers/auth.d.ts +1 -0
  122. package/dist/providers/handlers/auth.d.ts.map +1 -0
  123. package/dist/providers/handlers/base.d.ts +1 -0
  124. package/dist/providers/handlers/base.d.ts.map +1 -0
  125. package/dist/providers/handlers/bedrock-base.d.ts +1 -0
  126. package/dist/providers/handlers/bedrock-base.d.ts.map +1 -0
  127. package/dist/providers/handlers/bedrock-client.d.ts +1 -0
  128. package/dist/providers/handlers/bedrock-client.d.ts.map +1 -0
  129. package/dist/providers/handlers/community-sdk.d.ts +1 -0
  130. package/dist/providers/handlers/community-sdk.d.ts.map +1 -0
  131. package/dist/providers/handlers/fetch-base.d.ts +1 -0
  132. package/dist/providers/handlers/fetch-base.d.ts.map +1 -0
  133. package/dist/providers/handlers/gemini-base.d.ts +1 -0
  134. package/dist/providers/handlers/gemini-base.d.ts.map +1 -0
  135. package/dist/providers/handlers/index.d.ts +1 -0
  136. package/dist/providers/handlers/index.d.ts.map +1 -0
  137. package/dist/providers/handlers/openai-base.d.ts +1 -0
  138. package/dist/providers/handlers/openai-base.d.ts.map +1 -0
  139. package/dist/providers/handlers/openai-responses.d.ts +1 -0
  140. package/dist/providers/handlers/openai-responses.d.ts.map +1 -0
  141. package/dist/providers/handlers/providers.d.ts +1 -0
  142. package/dist/providers/handlers/providers.d.ts.map +1 -0
  143. package/dist/providers/handlers/r1-base.d.ts +1 -0
  144. package/dist/providers/handlers/r1-base.d.ts.map +1 -0
  145. package/dist/providers/handlers/registry.d.ts +1 -0
  146. package/dist/providers/handlers/registry.d.ts.map +1 -0
  147. package/dist/providers/handlers/vertex.d.ts +1 -0
  148. package/dist/providers/handlers/vertex.d.ts.map +1 -0
  149. package/dist/providers/index.d.ts +1 -0
  150. package/dist/providers/index.d.ts.map +1 -0
  151. package/dist/providers/public.browser.d.ts +1 -0
  152. package/dist/providers/public.browser.d.ts.map +1 -0
  153. package/dist/providers/public.d.ts +1 -0
  154. package/dist/providers/public.d.ts.map +1 -0
  155. package/dist/providers/shared/openai-compatible.d.ts +1 -0
  156. package/dist/providers/shared/openai-compatible.d.ts.map +1 -0
  157. package/dist/providers/transform/ai-sdk-community-format.d.ts +1 -0
  158. package/dist/providers/transform/ai-sdk-community-format.d.ts.map +1 -0
  159. package/dist/providers/transform/anthropic-format.d.ts +1 -0
  160. package/dist/providers/transform/anthropic-format.d.ts.map +1 -0
  161. package/dist/providers/transform/content-format.d.ts +1 -0
  162. package/dist/providers/transform/content-format.d.ts.map +1 -0
  163. package/dist/providers/transform/gemini-format.d.ts +1 -0
  164. package/dist/providers/transform/gemini-format.d.ts.map +1 -0
  165. package/dist/providers/transform/index.d.ts +1 -0
  166. package/dist/providers/transform/index.d.ts.map +1 -0
  167. package/dist/providers/transform/openai-format.d.ts +1 -0
  168. package/dist/providers/transform/openai-format.d.ts.map +1 -0
  169. package/dist/providers/transform/r1-format.d.ts +1 -0
  170. package/dist/providers/transform/r1-format.d.ts.map +1 -0
  171. package/dist/providers/types/config.d.ts +1 -0
  172. package/dist/providers/types/config.d.ts.map +1 -0
  173. package/dist/providers/types/handler.d.ts +1 -0
  174. package/dist/providers/types/handler.d.ts.map +1 -0
  175. package/dist/providers/types/index.d.ts +1 -0
  176. package/dist/providers/types/index.d.ts.map +1 -0
  177. package/dist/providers/types/messages.d.ts +1 -0
  178. package/dist/providers/types/messages.d.ts.map +1 -0
  179. package/dist/providers/types/model-info.d.ts +1 -0
  180. package/dist/providers/types/model-info.d.ts.map +1 -0
  181. package/dist/providers/types/provider-ids.d.ts +1 -1
  182. package/dist/providers/types/provider-ids.d.ts.map +1 -0
  183. package/dist/providers/types/settings.d.ts +1 -0
  184. package/dist/providers/types/settings.d.ts.map +1 -0
  185. package/dist/providers/types/stream.d.ts +1 -0
  186. package/dist/providers/types/stream.d.ts.map +1 -0
  187. package/dist/providers/utils/index.d.ts +1 -0
  188. package/dist/providers/utils/index.d.ts.map +1 -0
  189. package/dist/providers/utils/retry.d.ts +1 -0
  190. package/dist/providers/utils/retry.d.ts.map +1 -0
  191. package/dist/providers/utils/stream-processor.d.ts +1 -0
  192. package/dist/providers/utils/stream-processor.d.ts.map +1 -0
  193. package/dist/providers/utils/tool-processor.d.ts +1 -0
  194. package/dist/providers/utils/tool-processor.d.ts.map +1 -0
  195. package/dist/sdk.d.ts +1 -0
  196. package/dist/sdk.d.ts.map +1 -0
  197. package/dist/types.d.ts +1 -0
  198. package/dist/types.d.ts.map +1 -0
  199. package/package.json +3 -4
  200. package/src/catalog.ts +0 -20
  201. package/src/config-browser.ts +0 -11
  202. package/src/config.ts +0 -49
  203. package/src/index.browser.ts +0 -9
  204. package/src/index.ts +0 -10
  205. package/src/live-providers.test.ts +0 -138
  206. package/src/models/generated-access.ts +0 -41
  207. package/src/models/generated-provider-loaders.ts +0 -166
  208. package/src/models/generated.ts +0 -11785
  209. package/src/models/index.ts +0 -271
  210. package/src/models/models-dev-catalog.test.ts +0 -161
  211. package/src/models/models-dev-catalog.ts +0 -168
  212. package/src/models/providers/aihubmix.ts +0 -19
  213. package/src/models/providers/anthropic.ts +0 -60
  214. package/src/models/providers/asksage.ts +0 -19
  215. package/src/models/providers/baseten.ts +0 -21
  216. package/src/models/providers/bedrock.ts +0 -30
  217. package/src/models/providers/cerebras.ts +0 -24
  218. package/src/models/providers/claude-code.ts +0 -51
  219. package/src/models/providers/cline.ts +0 -25
  220. package/src/models/providers/deepseek.ts +0 -33
  221. package/src/models/providers/dify.ts +0 -17
  222. package/src/models/providers/doubao.ts +0 -33
  223. package/src/models/providers/fireworks.ts +0 -34
  224. package/src/models/providers/gemini.ts +0 -43
  225. package/src/models/providers/groq.ts +0 -33
  226. package/src/models/providers/hicap.ts +0 -18
  227. package/src/models/providers/huawei-cloud-maas.ts +0 -18
  228. package/src/models/providers/huggingface.ts +0 -22
  229. package/src/models/providers/index.ts +0 -162
  230. package/src/models/providers/litellm.ts +0 -19
  231. package/src/models/providers/lmstudio.ts +0 -22
  232. package/src/models/providers/minimax.ts +0 -34
  233. package/src/models/providers/mistral.ts +0 -19
  234. package/src/models/providers/moonshot.ts +0 -34
  235. package/src/models/providers/nebius.ts +0 -24
  236. package/src/models/providers/nous-research.ts +0 -21
  237. package/src/models/providers/oca.ts +0 -30
  238. package/src/models/providers/ollama.ts +0 -18
  239. package/src/models/providers/openai-codex.ts +0 -46
  240. package/src/models/providers/openai.ts +0 -43
  241. package/src/models/providers/opencode.ts +0 -28
  242. package/src/models/providers/openrouter.ts +0 -24
  243. package/src/models/providers/qwen-code.ts +0 -33
  244. package/src/models/providers/qwen.ts +0 -34
  245. package/src/models/providers/requesty.ts +0 -23
  246. package/src/models/providers/sambanova.ts +0 -23
  247. package/src/models/providers/sapaicore.ts +0 -34
  248. package/src/models/providers/together.ts +0 -35
  249. package/src/models/providers/vercel-ai-gateway.ts +0 -23
  250. package/src/models/providers/vertex.ts +0 -36
  251. package/src/models/providers/xai.ts +0 -34
  252. package/src/models/providers/zai.ts +0 -25
  253. package/src/models/query.ts +0 -407
  254. package/src/models/registry.ts +0 -511
  255. package/src/models/schemas/index.ts +0 -62
  256. package/src/models/schemas/model.ts +0 -308
  257. package/src/models/schemas/query.ts +0 -336
  258. package/src/providers/browser.ts +0 -4
  259. package/src/providers/handlers/ai-sdk-community.ts +0 -229
  260. package/src/providers/handlers/ai-sdk-provider-base.ts +0 -203
  261. package/src/providers/handlers/anthropic-base.test.ts +0 -30
  262. package/src/providers/handlers/anthropic-base.ts +0 -387
  263. package/src/providers/handlers/asksage.test.ts +0 -103
  264. package/src/providers/handlers/asksage.ts +0 -138
  265. package/src/providers/handlers/auth.test.ts +0 -19
  266. package/src/providers/handlers/auth.ts +0 -121
  267. package/src/providers/handlers/base.test.ts +0 -230
  268. package/src/providers/handlers/base.ts +0 -310
  269. package/src/providers/handlers/bedrock-base.ts +0 -390
  270. package/src/providers/handlers/bedrock-client.ts +0 -100
  271. package/src/providers/handlers/codex.test.ts +0 -160
  272. package/src/providers/handlers/community-sdk.test.ts +0 -321
  273. package/src/providers/handlers/community-sdk.ts +0 -391
  274. package/src/providers/handlers/fetch-base.ts +0 -68
  275. package/src/providers/handlers/gemini-base.test.ts +0 -261
  276. package/src/providers/handlers/gemini-base.ts +0 -307
  277. package/src/providers/handlers/index.ts +0 -67
  278. package/src/providers/handlers/openai-base.ts +0 -341
  279. package/src/providers/handlers/openai-responses.test.ts +0 -259
  280. package/src/providers/handlers/openai-responses.ts +0 -634
  281. package/src/providers/handlers/providers.test.ts +0 -120
  282. package/src/providers/handlers/providers.ts +0 -563
  283. package/src/providers/handlers/r1-base.ts +0 -283
  284. package/src/providers/handlers/registry.ts +0 -185
  285. package/src/providers/handlers/vertex.test.ts +0 -124
  286. package/src/providers/handlers/vertex.ts +0 -302
  287. package/src/providers/index.ts +0 -534
  288. package/src/providers/public.browser.ts +0 -20
  289. package/src/providers/public.ts +0 -51
  290. package/src/providers/shared/openai-compatible.ts +0 -63
  291. package/src/providers/transform/ai-sdk-community-format.test.ts +0 -73
  292. package/src/providers/transform/ai-sdk-community-format.ts +0 -115
  293. package/src/providers/transform/anthropic-format.ts +0 -230
  294. package/src/providers/transform/content-format.ts +0 -34
  295. package/src/providers/transform/format-conversion.test.ts +0 -413
  296. package/src/providers/transform/gemini-format.ts +0 -262
  297. package/src/providers/transform/index.ts +0 -22
  298. package/src/providers/transform/openai-format.ts +0 -290
  299. package/src/providers/transform/r1-format.ts +0 -287
  300. package/src/providers/types/config.ts +0 -396
  301. package/src/providers/types/handler.ts +0 -92
  302. package/src/providers/types/index.ts +0 -120
  303. package/src/providers/types/messages.ts +0 -162
  304. package/src/providers/types/model-info.test.ts +0 -57
  305. package/src/providers/types/model-info.ts +0 -65
  306. package/src/providers/types/provider-ids.test.ts +0 -12
  307. package/src/providers/types/provider-ids.ts +0 -89
  308. package/src/providers/types/settings.test.ts +0 -49
  309. package/src/providers/types/settings.ts +0 -533
  310. package/src/providers/types/stream.ts +0 -117
  311. package/src/providers/utils/index.ts +0 -27
  312. package/src/providers/utils/retry.test.ts +0 -140
  313. package/src/providers/utils/retry.ts +0 -188
  314. package/src/providers/utils/stream-processor.test.ts +0 -232
  315. package/src/providers/utils/stream-processor.ts +0 -472
  316. package/src/providers/utils/tool-processor.test.ts +0 -235
  317. package/src/providers/utils/tool-processor.ts +0 -146
  318. package/src/sdk.ts +0 -264
  319. package/src/types.ts +0 -79
@@ -1,302 +0,0 @@
1
- /**
2
- * Vertex Handler
3
- *
4
- * Routes Vertex models by family:
5
- * - Gemini models -> Google GenAI Vertex path via GeminiHandler
6
- * - Claude models -> AI SDK Google Vertex Anthropic provider
7
- */
8
-
9
- import { toAiSdkMessages } from "../transform/ai-sdk-community-format";
10
- import {
11
- convertToAnthropicMessages,
12
- convertToolsToAnthropic,
13
- } from "../transform/anthropic-format";
14
- import {
15
- type ApiStream,
16
- type HandlerModelInfo,
17
- hasModelCapability,
18
- type ProviderConfig,
19
- } from "../types";
20
- import type { Message, ToolDefinition } from "../types/messages";
21
- import { retryStream } from "../utils/retry";
22
- import {
23
- emitAiSdkStream,
24
- loadAiSdkModule,
25
- numberOrZero,
26
- } from "./ai-sdk-community";
27
- import { resolveHandlerModel } from "./ai-sdk-provider-base";
28
- import { BaseHandler } from "./base";
29
- import { GeminiHandler } from "./gemini-base";
30
-
31
- const DEFAULT_VERTEX_REGION = "us-central1";
32
-
33
- function isClaudeModel(modelId: string): boolean {
34
- return modelId.toLowerCase().includes("claude");
35
- }
36
-
37
- type VertexAnthropicModule = {
38
- createVertexAnthropic: (options?: {
39
- project?: string;
40
- location?: string;
41
- headers?: Record<string, string | undefined>;
42
- baseURL?: string;
43
- }) => (modelId: string) => unknown;
44
- };
45
-
46
- function toAiSdkTools(
47
- tools: ToolDefinition[] | undefined,
48
- ): Record<string, unknown> | undefined {
49
- if (!tools || tools.length === 0) {
50
- return undefined;
51
- }
52
-
53
- const anthropicTools = convertToolsToAnthropic(tools);
54
- return Object.fromEntries(
55
- anthropicTools.map((tool) => [
56
- tool.name,
57
- {
58
- description: tool.description,
59
- inputSchema: tool.input_schema,
60
- },
61
- ]),
62
- );
63
- }
64
-
65
- function toVertexClaudeMessages(
66
- systemPrompt: string,
67
- messages: Message[],
68
- options?: { promptCacheOn?: boolean },
69
- ) {
70
- const systemContent = options?.promptCacheOn
71
- ? [
72
- {
73
- type: "text",
74
- text: systemPrompt,
75
- providerOptions: {
76
- anthropic: { cacheControl: { type: "ephemeral" } },
77
- },
78
- },
79
- ]
80
- : systemPrompt;
81
- return toAiSdkMessages(systemContent, messages, {
82
- assistantToolCallArgKey: "input",
83
- });
84
- }
85
-
86
- /**
87
- * Handler for Vertex AI that supports both Gemini and Claude models.
88
- */
89
- export class VertexHandler extends BaseHandler {
90
- private geminiHandler: GeminiHandler | undefined;
91
- private vertexAnthropicModelFactory:
92
- | ((modelId: string) => unknown)
93
- | undefined;
94
- private vertexAnthropicModelFactoryPromise:
95
- | Promise<(modelId: string) => unknown>
96
- | undefined;
97
-
98
- private getProjectId(): string {
99
- const projectId = this.config.gcp?.projectId?.trim();
100
- if (!projectId) {
101
- throw new Error(
102
- "Vertex provider requires `gcp.projectId` in provider configuration.",
103
- );
104
- }
105
- return projectId;
106
- }
107
-
108
- private getConfiguredRegion(): string | undefined {
109
- return this.config.gcp?.region?.trim() || this.config.region?.trim();
110
- }
111
-
112
- private getRequiredClaudeRegion(): string {
113
- const region = this.getConfiguredRegion();
114
- if (!region) {
115
- throw new Error(
116
- "Vertex Claude models require `gcp.region` (or `region`) in provider configuration.",
117
- );
118
- }
119
- return region;
120
- }
121
-
122
- private getGeminiRegion(): string {
123
- return this.getConfiguredRegion() ?? DEFAULT_VERTEX_REGION;
124
- }
125
-
126
- private ensureGeminiHandler(): GeminiHandler {
127
- if (!this.geminiHandler) {
128
- const projectId = this.getProjectId();
129
- const region = this.getGeminiRegion();
130
- this.geminiHandler = new GeminiHandler({
131
- ...this.config,
132
- region,
133
- gcp: {
134
- ...this.config.gcp,
135
- projectId,
136
- region,
137
- },
138
- });
139
- }
140
- return this.geminiHandler;
141
- }
142
-
143
- private async ensureVertexAnthropicModelFactory(): Promise<
144
- (modelId: string) => unknown
145
- > {
146
- if (this.vertexAnthropicModelFactory) {
147
- return this.vertexAnthropicModelFactory;
148
- }
149
- if (!this.vertexAnthropicModelFactoryPromise) {
150
- this.vertexAnthropicModelFactoryPromise = import(
151
- "@ai-sdk/google-vertex/anthropic"
152
- ).then((module) => {
153
- const provider = (
154
- module as VertexAnthropicModule
155
- ).createVertexAnthropic({
156
- project: this.getProjectId(),
157
- location: this.getRequiredClaudeRegion(),
158
- headers: this.getRequestHeaders(),
159
- baseURL: this.config.baseUrl,
160
- });
161
- const modelFactory = (modelId: string) => provider(modelId);
162
- this.vertexAnthropicModelFactory = modelFactory;
163
- return modelFactory;
164
- });
165
- }
166
- try {
167
- return await this.vertexAnthropicModelFactoryPromise;
168
- } catch (error) {
169
- this.vertexAnthropicModelFactoryPromise = undefined;
170
- if (
171
- error instanceof Error &&
172
- error.message.includes("@ai-sdk/google-vertex")
173
- ) {
174
- throw new Error(
175
- 'Vertex Claude models require @ai-sdk/google-vertex at runtime. Install workspace dependencies before using provider "vertex".',
176
- { cause: error },
177
- );
178
- }
179
- throw error;
180
- }
181
- }
182
-
183
- getModel(): HandlerModelInfo {
184
- return resolveHandlerModel(this.config);
185
- }
186
-
187
- getMessages(systemPrompt: string, messages: Message[]): unknown {
188
- const model = this.getModel();
189
- if (!isClaudeModel(model.id)) {
190
- return this.ensureGeminiHandler().getMessages(systemPrompt, messages);
191
- }
192
- const supportsPromptCache = this.supportsPromptCache(model.info);
193
- return convertToAnthropicMessages(messages, supportsPromptCache);
194
- }
195
-
196
- async *createMessage(
197
- systemPrompt: string,
198
- messages: Message[],
199
- tools?: ToolDefinition[],
200
- ): ApiStream {
201
- yield* retryStream(() =>
202
- this.createMessageInternal(systemPrompt, messages, tools),
203
- );
204
- }
205
-
206
- private async *createMessageInternal(
207
- systemPrompt: string,
208
- messages: Message[],
209
- tools?: ToolDefinition[],
210
- ): ApiStream {
211
- const model = this.getModel();
212
-
213
- if (!isClaudeModel(model.id)) {
214
- yield* this.ensureGeminiHandler().createMessage(
215
- systemPrompt,
216
- messages,
217
- tools,
218
- );
219
- return;
220
- }
221
-
222
- const ai = await loadAiSdkModule();
223
- const modelFactory = await this.ensureVertexAnthropicModelFactory();
224
- const responseId = this.createResponseId();
225
-
226
- const budgetTokens = this.config.thinkingBudgetTokens ?? 0;
227
- const reasoningOn =
228
- hasModelCapability(model.info, "reasoning") && budgetTokens > 0;
229
- const promptCacheOn = this.supportsPromptCache(model.info);
230
-
231
- const providerOptions: Record<string, unknown> = {};
232
- if (reasoningOn) {
233
- providerOptions.anthropic = {
234
- thinking: { type: "enabled", budgetTokens },
235
- };
236
- }
237
-
238
- const stream = ai.streamText({
239
- model: modelFactory(model.id),
240
- messages: toVertexClaudeMessages(systemPrompt, messages, {
241
- promptCacheOn,
242
- }),
243
- tools: toAiSdkTools(tools),
244
- maxTokens: model.info.maxTokens ?? this.config.maxOutputTokens ?? 128_000,
245
- temperature: reasoningOn ? undefined : 0,
246
- providerOptions:
247
- Object.keys(providerOptions).length > 0 ? providerOptions : undefined,
248
- abortSignal: this.getAbortSignal(),
249
- });
250
-
251
- yield* emitAiSdkStream(stream, {
252
- responseId,
253
- errorMessage: "Vertex Anthropic stream failed",
254
- calculateCost: (
255
- inputTokens,
256
- outputTokens,
257
- cacheReadTokens,
258
- cacheWriteTokens,
259
- ) =>
260
- this.calculateCost(
261
- inputTokens,
262
- outputTokens,
263
- cacheReadTokens,
264
- cacheWriteTokens,
265
- ),
266
- reasoningTypes: ["reasoning-delta"],
267
- enableToolCalls: true,
268
- toolCallArgsOrder: ["input", "args"],
269
- toolCallFunctionIncludeId: true,
270
- resolveUsageMetrics: (usage, part) => {
271
- const providerMetadata = (part?.providerMetadata ?? {}) as Record<
272
- string,
273
- unknown
274
- >;
275
- const anthropicMetadata =
276
- (providerMetadata.anthropic as Record<string, unknown> | undefined) ??
277
- {};
278
-
279
- return {
280
- inputTokens: numberOrZero(usage.inputTokens),
281
- outputTokens: numberOrZero(usage.outputTokens),
282
- thoughtsTokenCount: numberOrZero(
283
- usage.reasoningTokens ?? usage.thoughtsTokenCount,
284
- ),
285
- cacheReadTokens: numberOrZero(
286
- usage.cachedInputTokens ?? anthropicMetadata.cacheReadInputTokens,
287
- ),
288
- cacheWriteTokens: numberOrZero(
289
- anthropicMetadata.cacheCreationInputTokens,
290
- ),
291
- };
292
- },
293
- });
294
- }
295
- }
296
-
297
- /**
298
- * Create a Vertex handler
299
- */
300
- export function createVertexHandler(config: ProviderConfig): VertexHandler {
301
- return new VertexHandler(config);
302
- }