@clinebot/llms 0.0.18 → 0.0.21

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,146 +0,0 @@
1
- /**
2
- * Tool Call Processor
3
- *
4
- * Handles incremental assembly of tool calls from streaming responses.
5
- * Tool calls can arrive in chunks that need to be accumulated.
6
- */
7
-
8
- import type {
9
- ApiStreamToolCall,
10
- ApiStreamToolCallsChunk,
11
- } from "../types/stream";
12
-
13
- // Re-export to satisfy linter (type is used in generator return type)
14
- export type { ApiStreamToolCallsChunk };
15
-
16
- interface ToolCallDelta {
17
- index: number;
18
- id?: string;
19
- function?: {
20
- name?: string;
21
- arguments?: unknown;
22
- };
23
- }
24
-
25
- /**
26
- * Processes tool call deltas from streaming API responses
27
- */
28
- export class ToolCallProcessor {
29
- private toolCalls: Map<
30
- number,
31
- {
32
- id: string;
33
- name: string;
34
- arguments: string;
35
- }
36
- > = new Map();
37
-
38
- /**
39
- * Process tool call deltas and yield complete tool calls
40
- */
41
- processToolCallDeltas(
42
- deltas: ToolCallDelta[],
43
- responseId: string,
44
- ): ApiStreamToolCallsChunk[] {
45
- const results: ApiStreamToolCallsChunk[] = [];
46
- for (const delta of deltas) {
47
- const { index, id } = delta;
48
- const fn = delta.function;
49
-
50
- // Get or create tool call state
51
- let toolCall = this.toolCalls.get(index);
52
- if (!toolCall) {
53
- toolCall = { id: "", name: "", arguments: "" };
54
- this.toolCalls.set(index, toolCall);
55
- }
56
-
57
- // Update with delta values
58
- if (id) {
59
- toolCall.id = id;
60
- }
61
- if (fn?.name) {
62
- toolCall.name = fn.name;
63
- }
64
- const rawArguments = fn?.arguments;
65
- const deltaArguments = this.normalizeArgumentsDelta(
66
- toolCall.arguments,
67
- rawArguments,
68
- );
69
- if (deltaArguments) {
70
- toolCall.arguments += deltaArguments;
71
- }
72
-
73
- // Add the current state as a chunk
74
- // This allows streaming of partial tool calls
75
- if (toolCall.id && toolCall.name) {
76
- results.push({
77
- type: "tool_calls",
78
- id: responseId,
79
- tool_call: {
80
- call_id: toolCall.id,
81
- function: {
82
- id: toolCall.id,
83
- name: toolCall.name,
84
- // Emit only the current delta arguments; the agent layer already
85
- // performs accumulation for streaming tool arguments.
86
- arguments: deltaArguments,
87
- },
88
- },
89
- });
90
- }
91
- }
92
- return results;
93
- }
94
-
95
- /**
96
- * Get all accumulated tool calls
97
- */
98
- getToolCalls(): ApiStreamToolCall[] {
99
- return Array.from(this.toolCalls.values()).map((tc) => ({
100
- call_id: tc.id,
101
- function: {
102
- id: tc.id,
103
- name: tc.name,
104
- arguments: tc.arguments,
105
- },
106
- }));
107
- }
108
-
109
- /**
110
- * Reset the processor state
111
- */
112
- reset(): void {
113
- this.toolCalls.clear();
114
- }
115
-
116
- private normalizeArgumentsDelta(
117
- accumulatedArguments: string,
118
- rawArguments: unknown,
119
- ): string {
120
- if (rawArguments == null) {
121
- return "";
122
- }
123
-
124
- const nextArguments =
125
- typeof rawArguments === "string"
126
- ? rawArguments
127
- : JSON.stringify(rawArguments);
128
-
129
- if (!nextArguments) {
130
- return "";
131
- }
132
-
133
- // Some OpenAI-compatible providers emit cumulative argument snapshots
134
- // instead of true deltas. Convert those snapshots back into a suffix so
135
- // downstream accumulation only happens once.
136
- if (
137
- accumulatedArguments &&
138
- nextArguments.length >= accumulatedArguments.length &&
139
- nextArguments.startsWith(accumulatedArguments)
140
- ) {
141
- return nextArguments.slice(accumulatedArguments.length);
142
- }
143
-
144
- return nextArguments;
145
- }
146
- }
package/src/sdk.ts DELETED
@@ -1,264 +0,0 @@
1
- import {
2
- hasProvider,
3
- registerModel as registerModelInCatalog,
4
- registerProvider as registerProviderInCatalog,
5
- } from "./models/index";
6
- import {
7
- type ApiHandler,
8
- createHandler as createProviderHandler,
9
- createHandlerAsync as createProviderHandlerAsync,
10
- registerAsyncHandler,
11
- registerHandler,
12
- } from "./providers/index";
13
- import type {
14
- CreateHandlerInput,
15
- LlmsConfig,
16
- LlmsSdk,
17
- ProviderConfigDefaults,
18
- RegisteredProviderSummary,
19
- RegisterModelInput,
20
- RegisterProviderInput,
21
- } from "./types";
22
-
23
- interface InternalProviderConfig {
24
- id: string;
25
- models: Set<string>;
26
- defaultModel: string;
27
- defaults: ProviderConfigDefaults;
28
- }
29
-
30
- function cloneDefaults(
31
- defaults: ProviderConfigDefaults | undefined,
32
- ): ProviderConfigDefaults {
33
- return defaults ? { ...defaults } : {};
34
- }
35
-
36
- function resolveApiKey(
37
- apiKey?: string,
38
- apiKeyEnv?: string,
39
- ): string | undefined {
40
- if (apiKey) {
41
- return apiKey;
42
- }
43
-
44
- if (!apiKeyEnv) {
45
- return undefined;
46
- }
47
-
48
- const runtimeProcess = globalThis.process;
49
- if (!runtimeProcess?.env) {
50
- return undefined;
51
- }
52
-
53
- return runtimeProcess.env[apiKeyEnv];
54
- }
55
-
56
- function assertNonEmptyModels(providerId: string, models: string[]): void {
57
- if (!models.length) {
58
- throw new Error(
59
- `Provider "${providerId}" must include at least one model.`,
60
- );
61
- }
62
- }
63
-
64
- export class DefaultLlmsSdk implements LlmsSdk {
65
- private readonly providerConfigs = new Map<string, InternalProviderConfig>();
66
-
67
- constructor(config: LlmsConfig) {
68
- this.applyConfig(config);
69
- }
70
-
71
- createHandler(input: CreateHandlerInput): ApiHandler {
72
- return createProviderHandler(this.toProviderHandlerConfig(input));
73
- }
74
-
75
- async createHandlerAsync(input: CreateHandlerInput): Promise<ApiHandler> {
76
- return createProviderHandlerAsync(this.toProviderHandlerConfig(input));
77
- }
78
-
79
- private toProviderHandlerConfig(input: CreateHandlerInput) {
80
- const providerConfig = this.requireConfiguredProvider(input.providerId);
81
- const modelId = input.modelId ?? providerConfig.defaultModel;
82
-
83
- if (!providerConfig.models.has(modelId)) {
84
- throw new Error(
85
- `Model "${modelId}" is not configured for provider "${input.providerId}".`,
86
- );
87
- }
88
-
89
- return {
90
- providerId: input.providerId,
91
- modelId,
92
- ...providerConfig.defaults,
93
- ...input.overrides,
94
- };
95
- }
96
-
97
- registerProvider(input: RegisterProviderInput): void {
98
- registerProviderInCatalog(input.collection);
99
-
100
- if (input.handlerFactory && input.asyncHandlerFactory) {
101
- throw new Error(
102
- `Provider "${input.collection.provider.id}" cannot register both sync and async handlers.`,
103
- );
104
- }
105
-
106
- if (input.handlerFactory) {
107
- registerHandler(input.collection.provider.id, input.handlerFactory);
108
- }
109
-
110
- if (input.asyncHandlerFactory) {
111
- registerAsyncHandler(
112
- input.collection.provider.id,
113
- input.asyncHandlerFactory,
114
- );
115
- }
116
-
117
- const exposedModels =
118
- input.exposeModels ?? Object.keys(input.collection.models);
119
- assertNonEmptyModels(input.collection.provider.id, exposedModels);
120
-
121
- const existing = this.providerConfigs.get(input.collection.provider.id);
122
- const defaultModel =
123
- input.defaultModel ??
124
- input.collection.provider.defaultModelId ??
125
- exposedModels[0];
126
-
127
- if (!defaultModel) {
128
- throw new Error(
129
- `Provider "${input.collection.provider.id}" must define a default model.`,
130
- );
131
- }
132
-
133
- if (!exposedModels.includes(defaultModel)) {
134
- throw new Error(
135
- `Default model "${defaultModel}" is not included in configured models for "${input.collection.provider.id}".`,
136
- );
137
- }
138
-
139
- const mergedModels = new Set<string>([
140
- ...(existing?.models ?? []),
141
- ...exposedModels,
142
- ]);
143
- const mergedDefaults = {
144
- ...(existing?.defaults ?? {}),
145
- ...cloneDefaults(input.defaults),
146
- };
147
-
148
- this.providerConfigs.set(input.collection.provider.id, {
149
- id: input.collection.provider.id,
150
- models: mergedModels,
151
- defaultModel,
152
- defaults: mergedDefaults,
153
- });
154
- }
155
-
156
- registerModel(input: RegisterModelInput): void {
157
- registerModelInCatalog(input.providerId, input.modelId, input.info);
158
-
159
- const existing = this.providerConfigs.get(input.providerId);
160
- if (!existing) {
161
- this.providerConfigs.set(input.providerId, {
162
- id: input.providerId,
163
- models: new Set([input.modelId]),
164
- defaultModel: input.modelId,
165
- defaults: {},
166
- });
167
- return;
168
- }
169
-
170
- existing.models.add(input.modelId);
171
- }
172
-
173
- getProviders(): RegisteredProviderSummary[] {
174
- return Array.from(this.providerConfigs.values()).map((provider) => ({
175
- id: provider.id,
176
- models: Array.from(provider.models),
177
- defaultModel: provider.defaultModel,
178
- }));
179
- }
180
-
181
- getModels(providerId: string): string[] {
182
- return Array.from(this.requireConfiguredProvider(providerId).models);
183
- }
184
-
185
- isProviderConfigured(providerId: string): boolean {
186
- return this.providerConfigs.has(providerId);
187
- }
188
-
189
- isModelConfigured(providerId: string, modelId: string): boolean {
190
- return this.providerConfigs.get(providerId)?.models.has(modelId) ?? false;
191
- }
192
-
193
- private applyConfig(config: LlmsConfig): void {
194
- for (const provider of config.providers) {
195
- assertNonEmptyModels(provider.id, provider.models);
196
-
197
- if (
198
- provider.defaultModel &&
199
- !provider.models.includes(provider.defaultModel)
200
- ) {
201
- throw new Error(
202
- `Default model "${provider.defaultModel}" is not included in configured models for "${provider.id}".`,
203
- );
204
- }
205
-
206
- const defaultModel = provider.defaultModel ?? provider.models[0];
207
- if (!defaultModel) {
208
- throw new Error(
209
- `Provider "${provider.id}" must define a default model.`,
210
- );
211
- }
212
-
213
- const apiKey = resolveApiKey(provider.apiKey, provider.apiKeyEnv);
214
-
215
- this.providerConfigs.set(provider.id, {
216
- id: provider.id,
217
- models: new Set(provider.models),
218
- defaultModel,
219
- defaults: {
220
- apiKey,
221
- baseUrl: provider.baseUrl,
222
- headers: provider.headers,
223
- timeoutMs: provider.timeoutMs,
224
- capabilities: provider.capabilities,
225
- ...cloneDefaults(provider.settings),
226
- },
227
- });
228
- }
229
-
230
- for (const model of config.models ?? []) {
231
- this.registerModel(model);
232
- }
233
-
234
- for (const provider of config.customProviders ?? []) {
235
- this.registerProvider(provider);
236
- }
237
-
238
- for (const providerConfig of this.providerConfigs.values()) {
239
- const providerExists = hasProvider(providerConfig.id);
240
- if (!providerExists) {
241
- throw new Error(
242
- `Provider "${providerConfig.id}" is not known. Register it through customProviders/registerProvider or use a built-in provider ID.`,
243
- );
244
- }
245
- }
246
- }
247
-
248
- private requireConfiguredProvider(
249
- providerId: string,
250
- ): InternalProviderConfig {
251
- const providerConfig = this.providerConfigs.get(providerId);
252
- if (!providerConfig) {
253
- throw new Error(
254
- `Provider "${providerId}" is not configured in this SDK instance.`,
255
- );
256
- }
257
-
258
- return providerConfig;
259
- }
260
- }
261
-
262
- export function createLlmsSdk(config: LlmsConfig): LlmsSdk {
263
- return new DefaultLlmsSdk(config);
264
- }
package/src/types.ts DELETED
@@ -1,79 +0,0 @@
1
- import type { ModelCollection, ModelInfo } from "./models/index";
2
- import type {
3
- ApiHandler,
4
- HandlerFactory,
5
- LazyHandlerFactory,
6
- ProviderCapability,
7
- ProviderConfig,
8
- } from "./providers/index";
9
-
10
- export type ProviderConfigDefaults = Omit<
11
- ProviderConfig,
12
- "providerId" | "modelId"
13
- >;
14
-
15
- export interface ProviderSelectionConfig {
16
- id: string;
17
- models: string[];
18
- defaultModel?: string;
19
- apiKey?: string;
20
- apiKeyEnv?: string;
21
- baseUrl?: string;
22
- headers?: Record<string, string>;
23
- timeoutMs?: number;
24
- capabilities?: ProviderCapability[];
25
- settings?: ProviderConfigDefaults;
26
- }
27
-
28
- export interface AdditionalModelConfig {
29
- providerId: string;
30
- modelId: string;
31
- info: ModelInfo;
32
- }
33
-
34
- export interface CustomProviderConfig {
35
- collection: ModelCollection;
36
- defaults?: ProviderConfigDefaults;
37
- handlerFactory?: HandlerFactory;
38
- asyncHandlerFactory?: LazyHandlerFactory;
39
- }
40
-
41
- export interface LlmsConfig {
42
- providers: ProviderSelectionConfig[];
43
- models?: AdditionalModelConfig[];
44
- customProviders?: CustomProviderConfig[];
45
- }
46
-
47
- export interface CreateHandlerInput {
48
- providerId: string;
49
- modelId?: string;
50
- overrides?: ProviderConfigDefaults;
51
- }
52
-
53
- export interface RegisteredProviderSummary {
54
- id: string;
55
- models: string[];
56
- defaultModel: string;
57
- }
58
-
59
- export interface RegisterProviderInput extends CustomProviderConfig {
60
- exposeModels?: string[];
61
- defaultModel?: string;
62
- }
63
-
64
- export interface RegisterModelInput {
65
- providerId: string;
66
- modelId: string;
67
- info: ModelInfo;
68
- }
69
-
70
- export interface LlmsSdk {
71
- createHandler(input: CreateHandlerInput): ApiHandler;
72
- createHandlerAsync(input: CreateHandlerInput): Promise<ApiHandler>;
73
- registerProvider(input: RegisterProviderInput): void;
74
- registerModel(input: RegisterModelInput): void;
75
- getProviders(): RegisteredProviderSummary[];
76
- getModels(providerId: string): string[];
77
- isProviderConfigured(providerId: string): boolean;
78
- isModelConfigured(providerId: string, modelId: string): boolean;
79
- }