@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,11 +0,0 @@
1
- import type { LlmsConfig } from "./types";
2
-
3
- export function defineLlmsConfig(config: LlmsConfig): LlmsConfig {
4
- return config;
5
- }
6
-
7
- export async function loadLlmsConfigFromFile(): Promise<LlmsConfig> {
8
- throw new Error(
9
- "loadLlmsConfigFromFile is Node-only. Use @clinebot/llms in a Node runtime or pass a config object directly in browser runtimes.",
10
- );
11
- }
package/src/config.ts DELETED
@@ -1,49 +0,0 @@
1
- import { readFile } from "node:fs/promises";
2
- import path from "node:path";
3
- import type { LlmsConfig } from "./types";
4
-
5
- export function defineLlmsConfig(config: LlmsConfig): LlmsConfig {
6
- return config;
7
- }
8
-
9
- export async function loadLlmsConfigFromFile(
10
- configPath: string,
11
- ): Promise<LlmsConfig> {
12
- const resolvedPath = path.resolve(configPath);
13
- const raw = await readFile(resolvedPath, "utf8");
14
-
15
- let parsed: unknown;
16
- try {
17
- parsed = JSON.parse(raw);
18
- } catch (error) {
19
- const details = error instanceof Error ? error.message : String(error);
20
- throw new Error(
21
- `Failed to parse JSON config at "${resolvedPath}": ${details}`,
22
- );
23
- }
24
-
25
- return assertLlmsConfig(parsed, resolvedPath);
26
- }
27
-
28
- function assertLlmsConfig(value: unknown, source: string): LlmsConfig {
29
- if (!value || typeof value !== "object") {
30
- throw new Error(`Invalid llms config in "${source}": expected an object.`);
31
- }
32
-
33
- const config = value as Record<string, unknown>;
34
- const providers = config.providers;
35
-
36
- if (!Array.isArray(providers)) {
37
- throw new Error(
38
- `Invalid llms config in "${source}": "providers" must be an array.`,
39
- );
40
- }
41
-
42
- if (!providers.length) {
43
- throw new Error(
44
- `Invalid llms config in "${source}": "providers" cannot be empty.`,
45
- );
46
- }
47
-
48
- return value as LlmsConfig;
49
- }
@@ -1,9 +0,0 @@
1
- export { defineLlmsConfig, loadLlmsConfigFromFile } from "./config-browser";
2
- export * as LlmsModels from "./models/index";
3
- export * as LlmsProviders from "./providers/public.browser";
4
- export type {
5
- CustomProviderConfig,
6
- LlmsConfig,
7
- LlmsSdk,
8
- ProviderSelectionConfig,
9
- } from "./types";
package/src/index.ts DELETED
@@ -1,10 +0,0 @@
1
- export { defineLlmsConfig } from "./config";
2
- export * as LlmsModels from "./models/index";
3
- export * as LlmsProviders from "./providers/public";
4
- export { createLlmsSdk } from "./sdk";
5
- export type {
6
- CustomProviderConfig,
7
- LlmsConfig,
8
- LlmsSdk,
9
- ProviderSelectionConfig,
10
- } from "./types";
@@ -1,138 +0,0 @@
1
- import { readFileSync } from "node:fs";
2
- import path from "node:path";
3
- import { describe, it } from "vitest";
4
- import { LlmsProviders } from "./index";
5
-
6
- type ProviderConfig = LlmsProviders.ProviderConfig;
7
- type ProviderSettings = LlmsProviders.ProviderSettings;
8
-
9
- interface StoredProviderSettingsEntryLike {
10
- settings?: unknown;
11
- }
12
-
13
- interface StoredProviderSettingsLike {
14
- providers?: Record<string, unknown>;
15
- }
16
-
17
- interface ProviderTarget {
18
- label: string;
19
- config: ProviderConfig;
20
- }
21
-
22
- const LIVE_TEST_ENABLED = process.env.LLMS_LIVE_TESTS === "1";
23
- const PROVIDERS_FILE_ENV = "LLMS_LIVE_PROVIDERS_PATH";
24
- const PROVIDER_TIMEOUT_MS = Number(
25
- process.env.LLMS_LIVE_PROVIDER_TIMEOUT_MS ?? "90000",
26
- );
27
-
28
- function requireProvidersFilePath(): string {
29
- const filePath = process.env[PROVIDERS_FILE_ENV];
30
- if (!filePath) {
31
- throw new Error(
32
- `Set ${PROVIDERS_FILE_ENV} to a LlmsProviders.json file path before running live provider tests.`,
33
- );
34
- }
35
- return path.resolve(filePath);
36
- }
37
-
38
- function toTargetsFromStoredFormat(
39
- json: StoredProviderSettingsLike,
40
- ): ProviderTarget[] {
41
- const entries = Object.entries(json.providers ?? {});
42
- return entries.map(([entryKey, entryValue]) => {
43
- const maybeEntry = entryValue as StoredProviderSettingsEntryLike;
44
- const rawSettings = maybeEntry.settings ?? entryValue;
45
- const parsed = LlmsProviders.ProviderSettingsSchema.parse(
46
- rawSettings,
47
- ) as ProviderSettings;
48
- return {
49
- label: `${entryKey} (${parsed.provider})`,
50
- config: LlmsProviders.toProviderConfig(parsed),
51
- };
52
- });
53
- }
54
-
55
- function loadProviderTargets(filePath: string): ProviderTarget[] {
56
- const raw = readFileSync(filePath, "utf8");
57
- const parsed = JSON.parse(raw) as unknown;
58
-
59
- if (Array.isArray(parsed)) {
60
- return parsed.map((entry, index) => {
61
- const settings = LlmsProviders.ProviderSettingsSchema.parse(
62
- entry,
63
- ) as ProviderSettings;
64
- return {
65
- label: `index:${index} (${settings.provider})`,
66
- config: LlmsProviders.toProviderConfig(settings),
67
- };
68
- });
69
- }
70
-
71
- const maybeStored = parsed as StoredProviderSettingsLike;
72
- return toTargetsFromStoredFormat(maybeStored);
73
- }
74
-
75
- async function withTimeout<T>(
76
- promise: Promise<T>,
77
- timeoutMs: number,
78
- label: string,
79
- ): Promise<T> {
80
- let timeout: NodeJS.Timeout | undefined;
81
- const timeoutPromise = new Promise<T>((_, reject) => {
82
- timeout = setTimeout(() => {
83
- reject(new Error(`Timed out after ${timeoutMs}ms: ${label}`));
84
- }, timeoutMs);
85
- });
86
-
87
- try {
88
- return await Promise.race([promise, timeoutPromise]);
89
- } finally {
90
- if (timeout) {
91
- clearTimeout(timeout);
92
- }
93
- }
94
- }
95
-
96
- async function runPrompt(target: ProviderTarget): Promise<void> {
97
- const handler = await LlmsProviders.createHandlerAsync(target.config);
98
- const stream = handler.createMessage("You are a concise assistant.", [
99
- { role: "user", content: "Reply with the single word OK." },
100
- ]);
101
-
102
- for await (const chunk of stream) {
103
- if (chunk.type === "done" && !chunk.success) {
104
- throw new Error(chunk.error ?? "done chunk reported success=false");
105
- }
106
- }
107
- }
108
-
109
- describe("live provider smoke test", () => {
110
- it("reads configured providers from json and reports providers with failed responses", async () => {
111
- if (!LIVE_TEST_ENABLED) {
112
- return null;
113
- }
114
- const filePath = requireProvidersFilePath();
115
- const targets = loadProviderTargets(filePath);
116
-
117
- if (!targets.length) {
118
- throw new Error(`No providers found in ${filePath}.`);
119
- }
120
-
121
- const failures: string[] = [];
122
-
123
- for (const target of targets) {
124
- try {
125
- await withTimeout(runPrompt(target), PROVIDER_TIMEOUT_MS, target.label);
126
- } catch (error) {
127
- const message = error instanceof Error ? error.message : String(error);
128
- failures.push(`${target.label}: ${message}`);
129
- }
130
- }
131
-
132
- if (failures.length > 0) {
133
- throw new Error(
134
- `Providers with error responses (${failures.length}):\n${failures.join("\n")}`,
135
- );
136
- }
137
- }, 300_000);
138
- });
@@ -1,41 +0,0 @@
1
- import { GENERATED_PROVIDER_MODELS } from "./generated";
2
- import { sortModelsByReleaseDate } from "./models-dev-catalog";
3
- import type { ModelInfo } from "./schemas/index";
4
-
5
- let sortedGeneratedProviderModelsCache:
6
- | Record<string, Record<string, ModelInfo>>
7
- | undefined;
8
- const sortedGeneratedModelsByProviderCache = new Map<
9
- string,
10
- Record<string, ModelInfo>
11
- >();
12
-
13
- export function getGeneratedProviderModels(): Record<
14
- string,
15
- Record<string, ModelInfo>
16
- > {
17
- sortedGeneratedProviderModelsCache ??= Object.fromEntries(
18
- Object.entries(GENERATED_PROVIDER_MODELS.providers).map(
19
- ([providerId, models]) => [providerId, sortModelsByReleaseDate(models)],
20
- ),
21
- );
22
- return sortedGeneratedProviderModelsCache;
23
- }
24
-
25
- export function getGeneratedModelsVersion(): number {
26
- return GENERATED_PROVIDER_MODELS.version;
27
- }
28
-
29
- export function getGeneratedModelsForProvider(
30
- providerId: string,
31
- ): Record<string, ModelInfo> {
32
- const cached = sortedGeneratedModelsByProviderCache.get(providerId);
33
- if (cached) {
34
- return cached;
35
- }
36
- const sorted = sortModelsByReleaseDate(
37
- GENERATED_PROVIDER_MODELS.providers[providerId] ?? {},
38
- );
39
- sortedGeneratedModelsByProviderCache.set(providerId, sorted);
40
- return sorted;
41
- }
@@ -1,166 +0,0 @@
1
- /**
2
- * Auto-generated provider loader registry.
3
- *
4
- * WARNING: DO NOT EDIT THIS FILE MANUALLY.
5
- *
6
- * Generated by: @clinebot/llms/scripts/generate-provider-loaders.ts
7
- */
8
-
9
- import type { ModelCollection } from "./schemas/index";
10
-
11
- export type GeneratedProviderLoaderEntry = readonly [
12
- providerId: string,
13
- load: () => Promise<ModelCollection>,
14
- ];
15
-
16
- export const GENERATED_PROVIDER_LOADER_ENTRIES: GeneratedProviderLoaderEntry[] =
17
- [
18
- [
19
- "aihubmix",
20
- async () => (await import("./providers/aihubmix")).AIHUBMIX_PROVIDER,
21
- ],
22
- [
23
- "anthropic",
24
- async () => (await import("./providers/anthropic")).ANTHROPIC_PROVIDER,
25
- ],
26
- [
27
- "asksage",
28
- async () => (await import("./providers/asksage")).ASKSAGE_PROVIDER,
29
- ],
30
- [
31
- "baseten",
32
- async () => (await import("./providers/baseten")).BASETEN_PROVIDER,
33
- ],
34
- [
35
- "bedrock",
36
- async () => (await import("./providers/bedrock")).BEDROCK_PROVIDER,
37
- ],
38
- [
39
- "cerebras",
40
- async () => (await import("./providers/cerebras")).CEREBRAS_PROVIDER,
41
- ],
42
- [
43
- "claude-code",
44
- async () =>
45
- (await import("./providers/claude-code")).CLAUDE_CODE_PROVIDER,
46
- ],
47
- ["cline", async () => (await import("./providers/cline")).CLINE_PROVIDER],
48
- [
49
- "deepseek",
50
- async () => (await import("./providers/deepseek")).DEEPSEEK_PROVIDER,
51
- ],
52
- ["dify", async () => (await import("./providers/dify")).DIFY_PROVIDER],
53
- [
54
- "doubao",
55
- async () => (await import("./providers/doubao")).DOUBAO_PROVIDER,
56
- ],
57
- [
58
- "fireworks",
59
- async () => (await import("./providers/fireworks")).FIREWORKS_PROVIDER,
60
- ],
61
- [
62
- "gemini",
63
- async () => (await import("./providers/gemini")).GEMINI_PROVIDER,
64
- ],
65
- ["groq", async () => (await import("./providers/groq")).GROQ_PROVIDER],
66
- ["hicap", async () => (await import("./providers/hicap")).HICAP_PROVIDER],
67
- [
68
- "huawei-cloud-maas",
69
- async () =>
70
- (await import("./providers/huawei-cloud-maas"))
71
- .HUAWEI_CLOUD_MAAS_PROVIDER,
72
- ],
73
- [
74
- "huggingface",
75
- async () =>
76
- (await import("./providers/huggingface")).HUGGINGFACE_PROVIDER,
77
- ],
78
- [
79
- "litellm",
80
- async () => (await import("./providers/litellm")).LITELLM_PROVIDER,
81
- ],
82
- [
83
- "lmstudio",
84
- async () => (await import("./providers/lmstudio")).LMSTUDIO_PROVIDER,
85
- ],
86
- [
87
- "minimax",
88
- async () => (await import("./providers/minimax")).MINIMAX_PROVIDER,
89
- ],
90
- [
91
- "mistral",
92
- async () => (await import("./providers/mistral")).MISTRAL_PROVIDER,
93
- ],
94
- [
95
- "moonshot",
96
- async () => (await import("./providers/moonshot")).MOONSHOT_PROVIDER,
97
- ],
98
- [
99
- "nebius",
100
- async () => (await import("./providers/nebius")).NEBIUS_PROVIDER,
101
- ],
102
- [
103
- "nousResearch",
104
- async () =>
105
- (await import("./providers/nous-research")).NOUS_RESEARCH_PROVIDER,
106
- ],
107
- ["oca", async () => (await import("./providers/oca")).OCA_PROVIDER],
108
- [
109
- "ollama",
110
- async () => (await import("./providers/ollama")).OLLAMA_PROVIDER,
111
- ],
112
- [
113
- "openai",
114
- async () => (await import("./providers/openai")).OPENAI_PROVIDER,
115
- ],
116
- [
117
- "openai-codex",
118
- async () =>
119
- (await import("./providers/openai-codex")).OPENAI_CODEX_PROVIDER,
120
- ],
121
- [
122
- "openai-native",
123
- async () => (await import("./providers/openai")).OPENAI_PROVIDER,
124
- ],
125
- [
126
- "opencode",
127
- async () => (await import("./providers/opencode")).OPENCODE_PROVIDER,
128
- ],
129
- [
130
- "openrouter",
131
- async () => (await import("./providers/openrouter")).OPENROUTER_PROVIDER,
132
- ],
133
- ["qwen", async () => (await import("./providers/qwen")).QWEN_PROVIDER],
134
- [
135
- "qwen-code",
136
- async () => (await import("./providers/qwen-code")).QWEN_CODE_PROVIDER,
137
- ],
138
- [
139
- "requesty",
140
- async () => (await import("./providers/requesty")).REQUESTY_PROVIDER,
141
- ],
142
- [
143
- "sambanova",
144
- async () => (await import("./providers/sambanova")).SAMBANOVA_PROVIDER,
145
- ],
146
- [
147
- "sapaicore",
148
- async () => (await import("./providers/sapaicore")).SAP_AI_CORE_PROVIDER,
149
- ],
150
- [
151
- "together",
152
- async () => (await import("./providers/together")).TOGETHER_PROVIDER,
153
- ],
154
- [
155
- "vercel-ai-gateway",
156
- async () =>
157
- (await import("./providers/vercel-ai-gateway"))
158
- .VERCEL_AI_GATEWAY_PROVIDER,
159
- ],
160
- [
161
- "vertex",
162
- async () => (await import("./providers/vertex")).VERTEX_PROVIDER,
163
- ],
164
- ["xai", async () => (await import("./providers/xai")).XAI_PROVIDER],
165
- ["zai", async () => (await import("./providers/zai")).ZAI_PROVIDER],
166
- ];