@clinebot/llms 0.0.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 (219) hide show
  1. package/README.md +198 -0
  2. package/dist/config-browser.d.ts +3 -0
  3. package/dist/config.d.ts +3 -0
  4. package/dist/index.browser.d.ts +4 -0
  5. package/dist/index.browser.js +1 -0
  6. package/dist/index.d.ts +5 -0
  7. package/dist/index.js +7 -0
  8. package/dist/models/generated-access.d.ts +4 -0
  9. package/dist/models/generated-provider-loaders.d.ts +13 -0
  10. package/dist/models/generated.d.ts +14 -0
  11. package/dist/models/index.d.ts +43 -0
  12. package/dist/models/models-dev-catalog.d.ts +32 -0
  13. package/dist/models/providers/aihubmix.d.ts +5 -0
  14. package/dist/models/providers/anthropic.d.ts +53 -0
  15. package/dist/models/providers/asksage.d.ts +5 -0
  16. package/dist/models/providers/baseten.d.ts +5 -0
  17. package/dist/models/providers/bedrock.d.ts +7 -0
  18. package/dist/models/providers/cerebras.d.ts +7 -0
  19. package/dist/models/providers/claude-code.d.ts +4 -0
  20. package/dist/models/providers/cline.d.ts +34 -0
  21. package/dist/models/providers/deepseek.d.ts +8 -0
  22. package/dist/models/providers/dify.d.ts +5 -0
  23. package/dist/models/providers/doubao.d.ts +7 -0
  24. package/dist/models/providers/fireworks.d.ts +8 -0
  25. package/dist/models/providers/gemini.d.ts +9 -0
  26. package/dist/models/providers/groq.d.ts +8 -0
  27. package/dist/models/providers/hicap.d.ts +5 -0
  28. package/dist/models/providers/huawei-cloud-maas.d.ts +5 -0
  29. package/dist/models/providers/huggingface.d.ts +6 -0
  30. package/dist/models/providers/index.d.ts +45 -0
  31. package/dist/models/providers/litellm.d.ts +5 -0
  32. package/dist/models/providers/lmstudio.d.ts +5 -0
  33. package/dist/models/providers/minimax.d.ts +7 -0
  34. package/dist/models/providers/mistral.d.ts +5 -0
  35. package/dist/models/providers/moonshot.d.ts +7 -0
  36. package/dist/models/providers/nebius.d.ts +7 -0
  37. package/dist/models/providers/nous-research.d.ts +7 -0
  38. package/dist/models/providers/oca.d.ts +9 -0
  39. package/dist/models/providers/ollama.d.ts +5 -0
  40. package/dist/models/providers/openai-codex.d.ts +10 -0
  41. package/dist/models/providers/openai.d.ts +9 -0
  42. package/dist/models/providers/opencode.d.ts +10 -0
  43. package/dist/models/providers/openrouter.d.ts +7 -0
  44. package/dist/models/providers/qwen-code.d.ts +7 -0
  45. package/dist/models/providers/qwen.d.ts +7 -0
  46. package/dist/models/providers/requesty.d.ts +6 -0
  47. package/dist/models/providers/sambanova.d.ts +7 -0
  48. package/dist/models/providers/sapaicore.d.ts +7 -0
  49. package/dist/models/providers/together.d.ts +8 -0
  50. package/dist/models/providers/vercel-ai-gateway.d.ts +5 -0
  51. package/dist/models/providers/vertex.d.ts +7 -0
  52. package/dist/models/providers/xai.d.ts +8 -0
  53. package/dist/models/providers/zai.d.ts +7 -0
  54. package/dist/models/query.d.ts +181 -0
  55. package/dist/models/registry.d.ts +123 -0
  56. package/dist/models/schemas/index.d.ts +7 -0
  57. package/dist/models/schemas/model.d.ts +340 -0
  58. package/dist/models/schemas/query.d.ts +191 -0
  59. package/dist/providers/handlers/ai-sdk-community.d.ts +46 -0
  60. package/dist/providers/handlers/ai-sdk-provider-base.d.ts +32 -0
  61. package/dist/providers/handlers/anthropic-base.d.ts +26 -0
  62. package/dist/providers/handlers/asksage.d.ts +12 -0
  63. package/dist/providers/handlers/auth.d.ts +5 -0
  64. package/dist/providers/handlers/base.d.ts +55 -0
  65. package/dist/providers/handlers/bedrock-base.d.ts +23 -0
  66. package/dist/providers/handlers/bedrock-client.d.ts +4 -0
  67. package/dist/providers/handlers/community-sdk.d.ts +97 -0
  68. package/dist/providers/handlers/fetch-base.d.ts +18 -0
  69. package/dist/providers/handlers/gemini-base.d.ts +25 -0
  70. package/dist/providers/handlers/index.d.ts +19 -0
  71. package/dist/providers/handlers/openai-base.d.ts +54 -0
  72. package/dist/providers/handlers/openai-responses.d.ts +64 -0
  73. package/dist/providers/handlers/providers.d.ts +43 -0
  74. package/dist/providers/handlers/r1-base.d.ts +62 -0
  75. package/dist/providers/handlers/registry.d.ts +106 -0
  76. package/dist/providers/handlers/vertex.d.ts +32 -0
  77. package/dist/providers/index.d.ts +100 -0
  78. package/dist/providers/public.browser.d.ts +2 -0
  79. package/dist/providers/public.d.ts +3 -0
  80. package/dist/providers/shared/openai-compatible.d.ts +10 -0
  81. package/dist/providers/transform/ai-sdk-community-format.d.ts +9 -0
  82. package/dist/providers/transform/anthropic-format.d.ts +24 -0
  83. package/dist/providers/transform/content-format.d.ts +3 -0
  84. package/dist/providers/transform/gemini-format.d.ts +19 -0
  85. package/dist/providers/transform/index.d.ts +10 -0
  86. package/dist/providers/transform/openai-format.d.ts +36 -0
  87. package/dist/providers/transform/r1-format.d.ts +26 -0
  88. package/dist/providers/types/config.d.ts +261 -0
  89. package/dist/providers/types/handler.d.ts +71 -0
  90. package/dist/providers/types/index.d.ts +11 -0
  91. package/dist/providers/types/messages.d.ts +139 -0
  92. package/dist/providers/types/model-info.d.ts +32 -0
  93. package/dist/providers/types/provider-ids.d.ts +63 -0
  94. package/dist/providers/types/settings.d.ts +308 -0
  95. package/dist/providers/types/stream.d.ts +106 -0
  96. package/dist/providers/utils/index.d.ts +7 -0
  97. package/dist/providers/utils/retry.d.ts +38 -0
  98. package/dist/providers/utils/stream-processor.d.ts +110 -0
  99. package/dist/providers/utils/tool-processor.d.ts +34 -0
  100. package/dist/sdk.d.ts +18 -0
  101. package/dist/types.d.ts +60 -0
  102. package/package.json +66 -0
  103. package/src/catalog.ts +20 -0
  104. package/src/config-browser.ts +11 -0
  105. package/src/config.ts +49 -0
  106. package/src/index.browser.ts +9 -0
  107. package/src/index.ts +10 -0
  108. package/src/live-providers.test.ts +137 -0
  109. package/src/models/generated-access.ts +41 -0
  110. package/src/models/generated-provider-loaders.ts +166 -0
  111. package/src/models/generated.ts +11997 -0
  112. package/src/models/index.ts +271 -0
  113. package/src/models/models-dev-catalog.test.ts +161 -0
  114. package/src/models/models-dev-catalog.ts +161 -0
  115. package/src/models/providers/aihubmix.ts +19 -0
  116. package/src/models/providers/anthropic.ts +60 -0
  117. package/src/models/providers/asksage.ts +19 -0
  118. package/src/models/providers/baseten.ts +21 -0
  119. package/src/models/providers/bedrock.ts +30 -0
  120. package/src/models/providers/cerebras.ts +24 -0
  121. package/src/models/providers/claude-code.ts +51 -0
  122. package/src/models/providers/cline.ts +25 -0
  123. package/src/models/providers/deepseek.ts +33 -0
  124. package/src/models/providers/dify.ts +17 -0
  125. package/src/models/providers/doubao.ts +33 -0
  126. package/src/models/providers/fireworks.ts +34 -0
  127. package/src/models/providers/gemini.ts +43 -0
  128. package/src/models/providers/groq.ts +33 -0
  129. package/src/models/providers/hicap.ts +18 -0
  130. package/src/models/providers/huawei-cloud-maas.ts +18 -0
  131. package/src/models/providers/huggingface.ts +22 -0
  132. package/src/models/providers/index.ts +162 -0
  133. package/src/models/providers/litellm.ts +19 -0
  134. package/src/models/providers/lmstudio.ts +22 -0
  135. package/src/models/providers/minimax.ts +34 -0
  136. package/src/models/providers/mistral.ts +19 -0
  137. package/src/models/providers/moonshot.ts +34 -0
  138. package/src/models/providers/nebius.ts +24 -0
  139. package/src/models/providers/nous-research.ts +21 -0
  140. package/src/models/providers/oca.ts +30 -0
  141. package/src/models/providers/ollama.ts +18 -0
  142. package/src/models/providers/openai-codex.ts +30 -0
  143. package/src/models/providers/openai.ts +43 -0
  144. package/src/models/providers/opencode.ts +28 -0
  145. package/src/models/providers/openrouter.ts +24 -0
  146. package/src/models/providers/qwen-code.ts +33 -0
  147. package/src/models/providers/qwen.ts +34 -0
  148. package/src/models/providers/requesty.ts +23 -0
  149. package/src/models/providers/sambanova.ts +23 -0
  150. package/src/models/providers/sapaicore.ts +34 -0
  151. package/src/models/providers/together.ts +35 -0
  152. package/src/models/providers/vercel-ai-gateway.ts +23 -0
  153. package/src/models/providers/vertex.ts +36 -0
  154. package/src/models/providers/xai.ts +34 -0
  155. package/src/models/providers/zai.ts +25 -0
  156. package/src/models/query.ts +407 -0
  157. package/src/models/registry.ts +511 -0
  158. package/src/models/schemas/index.ts +62 -0
  159. package/src/models/schemas/model.ts +308 -0
  160. package/src/models/schemas/query.ts +336 -0
  161. package/src/providers/browser.ts +4 -0
  162. package/src/providers/handlers/ai-sdk-community.ts +226 -0
  163. package/src/providers/handlers/ai-sdk-provider-base.ts +193 -0
  164. package/src/providers/handlers/anthropic-base.ts +372 -0
  165. package/src/providers/handlers/asksage.test.ts +103 -0
  166. package/src/providers/handlers/asksage.ts +138 -0
  167. package/src/providers/handlers/auth.test.ts +19 -0
  168. package/src/providers/handlers/auth.ts +121 -0
  169. package/src/providers/handlers/base.test.ts +46 -0
  170. package/src/providers/handlers/base.ts +160 -0
  171. package/src/providers/handlers/bedrock-base.ts +390 -0
  172. package/src/providers/handlers/bedrock-client.ts +100 -0
  173. package/src/providers/handlers/codex.test.ts +123 -0
  174. package/src/providers/handlers/community-sdk.test.ts +288 -0
  175. package/src/providers/handlers/community-sdk.ts +392 -0
  176. package/src/providers/handlers/fetch-base.ts +68 -0
  177. package/src/providers/handlers/gemini-base.ts +302 -0
  178. package/src/providers/handlers/index.ts +67 -0
  179. package/src/providers/handlers/openai-base.ts +277 -0
  180. package/src/providers/handlers/openai-responses.ts +598 -0
  181. package/src/providers/handlers/providers.test.ts +120 -0
  182. package/src/providers/handlers/providers.ts +563 -0
  183. package/src/providers/handlers/r1-base.ts +280 -0
  184. package/src/providers/handlers/registry.ts +185 -0
  185. package/src/providers/handlers/vertex.test.ts +124 -0
  186. package/src/providers/handlers/vertex.ts +292 -0
  187. package/src/providers/index.ts +534 -0
  188. package/src/providers/public.browser.ts +20 -0
  189. package/src/providers/public.ts +51 -0
  190. package/src/providers/shared/openai-compatible.ts +63 -0
  191. package/src/providers/transform/ai-sdk-community-format.test.ts +73 -0
  192. package/src/providers/transform/ai-sdk-community-format.ts +115 -0
  193. package/src/providers/transform/anthropic-format.ts +218 -0
  194. package/src/providers/transform/content-format.ts +34 -0
  195. package/src/providers/transform/format-conversion.test.ts +310 -0
  196. package/src/providers/transform/gemini-format.ts +167 -0
  197. package/src/providers/transform/index.ts +22 -0
  198. package/src/providers/transform/openai-format.ts +247 -0
  199. package/src/providers/transform/r1-format.ts +287 -0
  200. package/src/providers/types/config.ts +388 -0
  201. package/src/providers/types/handler.ts +87 -0
  202. package/src/providers/types/index.ts +120 -0
  203. package/src/providers/types/messages.ts +158 -0
  204. package/src/providers/types/model-info.test.ts +57 -0
  205. package/src/providers/types/model-info.ts +65 -0
  206. package/src/providers/types/provider-ids.test.ts +12 -0
  207. package/src/providers/types/provider-ids.ts +89 -0
  208. package/src/providers/types/settings.test.ts +49 -0
  209. package/src/providers/types/settings.ts +533 -0
  210. package/src/providers/types/stream.ts +117 -0
  211. package/src/providers/utils/index.ts +27 -0
  212. package/src/providers/utils/retry.test.ts +140 -0
  213. package/src/providers/utils/retry.ts +188 -0
  214. package/src/providers/utils/stream-processor.test.ts +232 -0
  215. package/src/providers/utils/stream-processor.ts +472 -0
  216. package/src/providers/utils/tool-processor.test.ts +34 -0
  217. package/src/providers/utils/tool-processor.ts +111 -0
  218. package/src/sdk.ts +264 -0
  219. package/src/types.ts +79 -0
@@ -0,0 +1,292 @@
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 = hasModelCapability(model.info, "prompt-cache");
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 = hasModelCapability(model.info, "prompt-cache");
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 ?? 8192,
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: (inputTokens, outputTokens, cacheReadTokens) =>
255
+ this.calculateCost(inputTokens, outputTokens, cacheReadTokens),
256
+ reasoningTypes: ["reasoning-delta"],
257
+ enableToolCalls: true,
258
+ toolCallArgsOrder: ["input", "args"],
259
+ toolCallFunctionIncludeId: true,
260
+ resolveUsageMetrics: (usage, part) => {
261
+ const providerMetadata = (part?.providerMetadata ?? {}) as Record<
262
+ string,
263
+ unknown
264
+ >;
265
+ const anthropicMetadata =
266
+ (providerMetadata.anthropic as Record<string, unknown> | undefined) ??
267
+ {};
268
+
269
+ return {
270
+ inputTokens: numberOrZero(usage.inputTokens),
271
+ outputTokens: numberOrZero(usage.outputTokens),
272
+ thoughtsTokenCount: numberOrZero(
273
+ usage.reasoningTokens ?? usage.thoughtsTokenCount,
274
+ ),
275
+ cacheReadTokens: numberOrZero(
276
+ usage.cachedInputTokens ?? anthropicMetadata.cacheReadInputTokens,
277
+ ),
278
+ cacheWriteTokens: numberOrZero(
279
+ anthropicMetadata.cacheCreationInputTokens,
280
+ ),
281
+ };
282
+ },
283
+ });
284
+ }
285
+ }
286
+
287
+ /**
288
+ * Create a Vertex handler
289
+ */
290
+ export function createVertexHandler(config: ProviderConfig): VertexHandler {
291
+ return new VertexHandler(config);
292
+ }