@nodetool-ai/runtime 0.7.0-rc.11

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 (198) hide show
  1. package/dist/bridge-protocol.d.ts +39 -0
  2. package/dist/bridge-protocol.d.ts.map +1 -0
  3. package/dist/bridge-protocol.js +39 -0
  4. package/dist/bridge-protocol.js.map +1 -0
  5. package/dist/comfy-executor.d.ts +41 -0
  6. package/dist/comfy-executor.d.ts.map +1 -0
  7. package/dist/comfy-executor.js +305 -0
  8. package/dist/comfy-executor.js.map +1 -0
  9. package/dist/context-packer.d.ts +22 -0
  10. package/dist/context-packer.d.ts.map +1 -0
  11. package/dist/context-packer.js +66 -0
  12. package/dist/context-packer.js.map +1 -0
  13. package/dist/context.d.ts +405 -0
  14. package/dist/context.d.ts.map +1 -0
  15. package/dist/context.js +1455 -0
  16. package/dist/context.js.map +1 -0
  17. package/dist/index.d.ts +18 -0
  18. package/dist/index.d.ts.map +1 -0
  19. package/dist/index.js +15 -0
  20. package/dist/index.js.map +1 -0
  21. package/dist/node-executor.d.ts +53 -0
  22. package/dist/node-executor.d.ts.map +1 -0
  23. package/dist/node-executor.js +9 -0
  24. package/dist/node-executor.js.map +1 -0
  25. package/dist/providers/aki-manifest.json +34 -0
  26. package/dist/providers/aki-provider.d.ts +65 -0
  27. package/dist/providers/aki-provider.d.ts.map +1 -0
  28. package/dist/providers/aki-provider.js +517 -0
  29. package/dist/providers/aki-provider.js.map +1 -0
  30. package/dist/providers/anthropic-provider.d.ts +55 -0
  31. package/dist/providers/anthropic-provider.d.ts.map +1 -0
  32. package/dist/providers/anthropic-provider.js +563 -0
  33. package/dist/providers/anthropic-provider.js.map +1 -0
  34. package/dist/providers/base-provider.d.ts +194 -0
  35. package/dist/providers/base-provider.d.ts.map +1 -0
  36. package/dist/providers/base-provider.js +515 -0
  37. package/dist/providers/base-provider.js.map +1 -0
  38. package/dist/providers/cerebras-provider.d.ts +20 -0
  39. package/dist/providers/cerebras-provider.d.ts.map +1 -0
  40. package/dist/providers/cerebras-provider.js +52 -0
  41. package/dist/providers/cerebras-provider.js.map +1 -0
  42. package/dist/providers/claude-agent-provider.d.ts +107 -0
  43. package/dist/providers/claude-agent-provider.d.ts.map +1 -0
  44. package/dist/providers/claude-agent-provider.js +586 -0
  45. package/dist/providers/claude-agent-provider.js.map +1 -0
  46. package/dist/providers/cohere-provider.d.ts +36 -0
  47. package/dist/providers/cohere-provider.d.ts.map +1 -0
  48. package/dist/providers/cohere-provider.js +116 -0
  49. package/dist/providers/cohere-provider.js.map +1 -0
  50. package/dist/providers/cost-calculator.d.ts +109 -0
  51. package/dist/providers/cost-calculator.d.ts.map +1 -0
  52. package/dist/providers/cost-calculator.js +475 -0
  53. package/dist/providers/cost-calculator.js.map +1 -0
  54. package/dist/providers/deepseek-provider.d.ts +25 -0
  55. package/dist/providers/deepseek-provider.d.ts.map +1 -0
  56. package/dist/providers/deepseek-provider.js +58 -0
  57. package/dist/providers/deepseek-provider.js.map +1 -0
  58. package/dist/providers/fake-provider.d.ts +52 -0
  59. package/dist/providers/fake-provider.d.ts.map +1 -0
  60. package/dist/providers/fake-provider.js +107 -0
  61. package/dist/providers/fake-provider.js.map +1 -0
  62. package/dist/providers/fal-provider.d.ts +32 -0
  63. package/dist/providers/fal-provider.d.ts.map +1 -0
  64. package/dist/providers/fal-provider.js +445 -0
  65. package/dist/providers/fal-provider.js.map +1 -0
  66. package/dist/providers/gemini-provider.d.ts +109 -0
  67. package/dist/providers/gemini-provider.d.ts.map +1 -0
  68. package/dist/providers/gemini-provider.js +943 -0
  69. package/dist/providers/gemini-provider.js.map +1 -0
  70. package/dist/providers/groq-provider.d.ts +20 -0
  71. package/dist/providers/groq-provider.d.ts.map +1 -0
  72. package/dist/providers/groq-provider.js +52 -0
  73. package/dist/providers/groq-provider.js.map +1 -0
  74. package/dist/providers/huggingface-provider.d.ts +59 -0
  75. package/dist/providers/huggingface-provider.d.ts.map +1 -0
  76. package/dist/providers/huggingface-provider.js +305 -0
  77. package/dist/providers/huggingface-provider.js.map +1 -0
  78. package/dist/providers/index.d.ts +69 -0
  79. package/dist/providers/index.d.ts.map +1 -0
  80. package/dist/providers/index.js +137 -0
  81. package/dist/providers/index.js.map +1 -0
  82. package/dist/providers/jina-provider.d.ts +37 -0
  83. package/dist/providers/jina-provider.d.ts.map +1 -0
  84. package/dist/providers/jina-provider.js +118 -0
  85. package/dist/providers/jina-provider.js.map +1 -0
  86. package/dist/providers/kie-provider.d.ts +19 -0
  87. package/dist/providers/kie-provider.d.ts.map +1 -0
  88. package/dist/providers/kie-provider.js +118 -0
  89. package/dist/providers/kie-provider.js.map +1 -0
  90. package/dist/providers/llama-provider.d.ts +49 -0
  91. package/dist/providers/llama-provider.d.ts.map +1 -0
  92. package/dist/providers/llama-provider.js +381 -0
  93. package/dist/providers/llama-provider.js.map +1 -0
  94. package/dist/providers/lmstudio-provider.d.ts +22 -0
  95. package/dist/providers/lmstudio-provider.d.ts.map +1 -0
  96. package/dist/providers/lmstudio-provider.js +63 -0
  97. package/dist/providers/lmstudio-provider.js.map +1 -0
  98. package/dist/providers/manifest-models.d.ts +12 -0
  99. package/dist/providers/manifest-models.d.ts.map +1 -0
  100. package/dist/providers/manifest-models.js +96 -0
  101. package/dist/providers/manifest-models.js.map +1 -0
  102. package/dist/providers/meshy-provider.d.ts +53 -0
  103. package/dist/providers/meshy-provider.d.ts.map +1 -0
  104. package/dist/providers/meshy-provider.js +230 -0
  105. package/dist/providers/meshy-provider.js.map +1 -0
  106. package/dist/providers/minimax-provider.d.ts +66 -0
  107. package/dist/providers/minimax-provider.d.ts.map +1 -0
  108. package/dist/providers/minimax-provider.js +531 -0
  109. package/dist/providers/minimax-provider.js.map +1 -0
  110. package/dist/providers/mistral-provider.d.ts +26 -0
  111. package/dist/providers/mistral-provider.d.ts.map +1 -0
  112. package/dist/providers/mistral-provider.js +74 -0
  113. package/dist/providers/mistral-provider.js.map +1 -0
  114. package/dist/providers/moonshot-provider.d.ts +24 -0
  115. package/dist/providers/moonshot-provider.d.ts.map +1 -0
  116. package/dist/providers/moonshot-provider.js +43 -0
  117. package/dist/providers/moonshot-provider.js.map +1 -0
  118. package/dist/providers/ollama-provider.d.ts +71 -0
  119. package/dist/providers/ollama-provider.d.ts.map +1 -0
  120. package/dist/providers/ollama-provider.js +480 -0
  121. package/dist/providers/ollama-provider.js.map +1 -0
  122. package/dist/providers/openai-provider.d.ts +103 -0
  123. package/dist/providers/openai-provider.d.ts.map +1 -0
  124. package/dist/providers/openai-provider.js +917 -0
  125. package/dist/providers/openai-provider.js.map +1 -0
  126. package/dist/providers/openrouter-provider.d.ts +49 -0
  127. package/dist/providers/openrouter-provider.d.ts.map +1 -0
  128. package/dist/providers/openrouter-provider.js +147 -0
  129. package/dist/providers/openrouter-provider.js.map +1 -0
  130. package/dist/providers/provider-registry.d.ts +24 -0
  131. package/dist/providers/provider-registry.d.ts.map +1 -0
  132. package/dist/providers/provider-registry.js +124 -0
  133. package/dist/providers/provider-registry.js.map +1 -0
  134. package/dist/providers/python-provider.d.ts +75 -0
  135. package/dist/providers/python-provider.d.ts.map +1 -0
  136. package/dist/providers/python-provider.js +157 -0
  137. package/dist/providers/python-provider.js.map +1 -0
  138. package/dist/providers/replicate-provider.d.ts +73 -0
  139. package/dist/providers/replicate-provider.d.ts.map +1 -0
  140. package/dist/providers/replicate-provider.js +484 -0
  141. package/dist/providers/replicate-provider.js.map +1 -0
  142. package/dist/providers/rodin-provider.d.ts +41 -0
  143. package/dist/providers/rodin-provider.d.ts.map +1 -0
  144. package/dist/providers/rodin-provider.js +236 -0
  145. package/dist/providers/rodin-provider.js.map +1 -0
  146. package/dist/providers/scripted-provider.d.ts +141 -0
  147. package/dist/providers/scripted-provider.d.ts.map +1 -0
  148. package/dist/providers/scripted-provider.js +246 -0
  149. package/dist/providers/scripted-provider.js.map +1 -0
  150. package/dist/providers/together-provider.d.ts +20 -0
  151. package/dist/providers/together-provider.d.ts.map +1 -0
  152. package/dist/providers/together-provider.js +56 -0
  153. package/dist/providers/together-provider.js.map +1 -0
  154. package/dist/providers/types.d.ts +202 -0
  155. package/dist/providers/types.d.ts.map +1 -0
  156. package/dist/providers/types.js +2 -0
  157. package/dist/providers/types.js.map +1 -0
  158. package/dist/providers/vllm-provider.d.ts +22 -0
  159. package/dist/providers/vllm-provider.d.ts.map +1 -0
  160. package/dist/providers/vllm-provider.js +66 -0
  161. package/dist/providers/vllm-provider.js.map +1 -0
  162. package/dist/providers/voyage-provider.d.ts +37 -0
  163. package/dist/providers/voyage-provider.d.ts.map +1 -0
  164. package/dist/providers/voyage-provider.js +124 -0
  165. package/dist/providers/voyage-provider.js.map +1 -0
  166. package/dist/providers/xai-provider.d.ts +24 -0
  167. package/dist/providers/xai-provider.d.ts.map +1 -0
  168. package/dist/providers/xai-provider.js +57 -0
  169. package/dist/providers/xai-provider.js.map +1 -0
  170. package/dist/python-bridge-types.d.ts +70 -0
  171. package/dist/python-bridge-types.d.ts.map +1 -0
  172. package/dist/python-bridge-types.js +2 -0
  173. package/dist/python-bridge-types.js.map +1 -0
  174. package/dist/python-node-executor.d.ts +20 -0
  175. package/dist/python-node-executor.d.ts.map +1 -0
  176. package/dist/python-node-executor.js +219 -0
  177. package/dist/python-node-executor.js.map +1 -0
  178. package/dist/python-stdio-bridge.d.ts +67 -0
  179. package/dist/python-stdio-bridge.d.ts.map +1 -0
  180. package/dist/python-stdio-bridge.js +704 -0
  181. package/dist/python-stdio-bridge.js.map +1 -0
  182. package/dist/recommended-models.d.ts +17 -0
  183. package/dist/recommended-models.d.ts.map +1 -0
  184. package/dist/recommended-models.js +139 -0
  185. package/dist/recommended-models.js.map +1 -0
  186. package/dist/telemetry.d.ts +61 -0
  187. package/dist/telemetry.d.ts.map +1 -0
  188. package/dist/telemetry.js +128 -0
  189. package/dist/telemetry.js.map +1 -0
  190. package/dist/trace-exporters.d.ts +72 -0
  191. package/dist/trace-exporters.d.ts.map +1 -0
  192. package/dist/trace-exporters.js +216 -0
  193. package/dist/trace-exporters.js.map +1 -0
  194. package/dist/tracing-helpers.d.ts +99 -0
  195. package/dist/tracing-helpers.d.ts.map +1 -0
  196. package/dist/tracing-helpers.js +217 -0
  197. package/dist/tracing-helpers.js.map +1 -0
  198. package/package.json +64 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"together-provider.d.ts","sourceRoot":"","sources":["../../src/providers/together-provider.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,UAAU,uBAAuB;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC;IAC3C,OAAO,CAAC,EAAE,OAAO,KAAK,CAAC;CACxB;AAED,qBAAa,gBAAiB,SAAQ,cAAc;WAClC,eAAe,IAAI,MAAM,EAAE;IAI3C,OAAO,CAAC,cAAc,CAAe;gBAGnC,OAAO,EAAE;QAAE,gBAAgB,CAAC,EAAE,MAAM,CAAA;KAAE,EACtC,OAAO,GAAE,uBAA4B;IA4B9B,eAAe,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAInC,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIhD,0BAA0B,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;CAiCtE"}
@@ -0,0 +1,56 @@
1
+ import OpenAI from "openai";
2
+ import { OpenAIProvider } from "./openai-provider.js";
3
+ export class TogetherProvider extends OpenAIProvider {
4
+ static requiredSecrets() {
5
+ return ["TOGETHER_API_KEY"];
6
+ }
7
+ _togetherFetch;
8
+ constructor(secrets, options = {}) {
9
+ const apiKey = secrets.TOGETHER_API_KEY;
10
+ if (!apiKey) {
11
+ throw new Error("TOGETHER_API_KEY is required");
12
+ }
13
+ const fetchFn = options.fetchFn ?? globalThis.fetch.bind(globalThis);
14
+ super({ OPENAI_API_KEY: apiKey }, {
15
+ client: options.client,
16
+ clientFactory: options.clientFactory ??
17
+ ((key) => new OpenAI({
18
+ apiKey: key,
19
+ baseURL: "https://api.together.xyz/v1"
20
+ })),
21
+ fetchFn
22
+ });
23
+ this.provider = "together";
24
+ this._togetherFetch = fetchFn;
25
+ }
26
+ getContainerEnv() {
27
+ return { TOGETHER_API_KEY: this.apiKey };
28
+ }
29
+ async hasToolSupport(_model) {
30
+ return true;
31
+ }
32
+ async getAvailableLanguageModels() {
33
+ const response = await this._togetherFetch("https://api.together.xyz/v1/models", {
34
+ headers: {
35
+ Authorization: `Bearer ${this.apiKey}`
36
+ }
37
+ });
38
+ if (!response.ok) {
39
+ return [];
40
+ }
41
+ const payload = (await response.json());
42
+ const rows = payload.data ?? [];
43
+ return rows
44
+ .filter((row) => typeof row.id === "string" && row.id.length > 0)
45
+ .filter((row) => {
46
+ const t = row.type ?? "";
47
+ return t === "chat" || t === "language" || t === "";
48
+ })
49
+ .map((row) => ({
50
+ id: row.id,
51
+ name: row.display_name ?? row.id,
52
+ provider: "together"
53
+ }));
54
+ }
55
+ }
56
+ //# sourceMappingURL=together-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"together-provider.js","sourceRoot":"","sources":["../../src/providers/together-provider.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAStD,MAAM,OAAO,gBAAiB,SAAQ,cAAc;IAClD,MAAM,CAAU,eAAe;QAC7B,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC9B,CAAC;IAEO,cAAc,CAAe;IAErC,YACE,OAAsC,EACtC,UAAmC,EAAE;QAErC,MAAM,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;QACxC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAClD,CAAC;QAED,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAErE,KAAK,CACH,EAAE,cAAc,EAAE,MAAM,EAAE,EAC1B;YACE,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,aAAa,EACX,OAAO,CAAC,aAAa;gBACrB,CAAC,CAAC,GAAG,EAAE,EAAE,CACP,IAAI,MAAM,CAAC;oBACT,MAAM,EAAE,GAAG;oBACX,OAAO,EAAE,6BAA6B;iBACvC,CAAC,CAAC;YACP,OAAO;SACR,CACF,CAAC;QAED,IAA6B,CAAC,QAAQ,GAAG,UAAU,CAAC;QACrD,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC;IAChC,CAAC;IAEQ,eAAe;QACtB,OAAO,EAAE,gBAAgB,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;IAC3C,CAAC;IAEQ,KAAK,CAAC,cAAc,CAAC,MAAc;QAC1C,OAAO,IAAI,CAAC;IACd,CAAC;IAEQ,KAAK,CAAC,0BAA0B;QACvC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,cAAc,CACxC,oCAAoC,EACpC;YACE,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,IAAI,CAAC,MAAM,EAAE;aACvC;SACF,CACF,CAAC;QAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,OAAO,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAErC,CAAC;QACF,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC;QAChC,OAAO,IAAI;aACR,MAAM,CACL,CAAC,GAAG,EAA+D,EAAE,CACnE,OAAO,GAAG,CAAC,EAAE,KAAK,QAAQ,IAAI,GAAG,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAClD;aACA,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE;YACd,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;YACzB,OAAO,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,UAAU,IAAI,CAAC,KAAK,EAAE,CAAC;QACtD,CAAC,CAAC;aACD,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YACb,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,IAAI,EAAE,GAAG,CAAC,YAAY,IAAI,GAAG,CAAC,EAAE;YAChC,QAAQ,EAAE,UAAU;SACrB,CAAC,CAAC,CAAC;IACR,CAAC;CACF"}
@@ -0,0 +1,202 @@
1
+ import type { Chunk } from "@nodetool-ai/protocol";
2
+ export type ProviderId = "openai" | "anthropic" | "ollama" | "llama_cpp" | string;
3
+ export interface LanguageModel {
4
+ id: string;
5
+ name: string;
6
+ provider: ProviderId;
7
+ }
8
+ export interface ImageModel {
9
+ id: string;
10
+ name: string;
11
+ provider: ProviderId;
12
+ supportedTasks?: string[];
13
+ }
14
+ export interface VideoModel {
15
+ id: string;
16
+ name: string;
17
+ provider: ProviderId;
18
+ supportedTasks?: string[];
19
+ }
20
+ export interface TTSModel {
21
+ id: string;
22
+ name: string;
23
+ provider: ProviderId;
24
+ voices?: string[];
25
+ }
26
+ export interface ASRModel {
27
+ id: string;
28
+ name: string;
29
+ provider: ProviderId;
30
+ }
31
+ export interface AudioChunk {
32
+ timestamp: [number, number];
33
+ text: string;
34
+ }
35
+ export interface ASRResult {
36
+ text: string;
37
+ chunks?: AudioChunk[];
38
+ }
39
+ export interface EmbeddingModel {
40
+ id: string;
41
+ name: string;
42
+ provider: ProviderId;
43
+ dimensions?: number;
44
+ }
45
+ export interface ToolCall {
46
+ id: string;
47
+ name: string;
48
+ args: Record<string, unknown>;
49
+ thought_signature?: string;
50
+ /** Raw Gemini parts to echo back (preserves thought content). */
51
+ _rawGeminiParts?: unknown[];
52
+ }
53
+ export interface ProviderTool {
54
+ name: string;
55
+ description?: string;
56
+ inputSchema?: Record<string, unknown>;
57
+ type?: "function" | "code_interpreter";
58
+ }
59
+ export interface MessageTextContent {
60
+ type: "text";
61
+ text: string;
62
+ }
63
+ export interface MessageImageContent {
64
+ type: "image_url";
65
+ image: {
66
+ uri?: string;
67
+ data?: Uint8Array | string;
68
+ mimeType?: string;
69
+ };
70
+ }
71
+ export interface MessageAudioContent {
72
+ type: "audio";
73
+ audio: {
74
+ uri?: string;
75
+ data?: Uint8Array | string;
76
+ mimeType?: string;
77
+ };
78
+ }
79
+ export type MessageContent = MessageTextContent | MessageImageContent | MessageAudioContent;
80
+ export interface Message {
81
+ role: "system" | "user" | "assistant" | "tool";
82
+ content?: string | MessageContent[] | null;
83
+ toolCalls?: ToolCall[] | null;
84
+ toolCallId?: string | null;
85
+ threadId?: string | null;
86
+ /** Provider-specific raw parts to echo back (e.g., Gemini thought parts). */
87
+ _rawGeminiParts?: unknown[];
88
+ }
89
+ export interface TextToImageParams {
90
+ model: ImageModel;
91
+ prompt: string;
92
+ negativePrompt?: string | null;
93
+ width?: number;
94
+ height?: number;
95
+ aspectRatio?: string | null;
96
+ resolution?: string | null;
97
+ quality?: string | null;
98
+ guidanceScale?: number | null;
99
+ numInferenceSteps?: number | null;
100
+ seed?: number | null;
101
+ scheduler?: string | null;
102
+ safetyCheck?: boolean | null;
103
+ }
104
+ export interface ImageToImageParams {
105
+ model: ImageModel;
106
+ prompt: string;
107
+ negativePrompt?: string | null;
108
+ targetWidth?: number | null;
109
+ targetHeight?: number | null;
110
+ aspectRatio?: string | null;
111
+ resolution?: string | null;
112
+ quality?: string | null;
113
+ guidanceScale?: number | null;
114
+ numInferenceSteps?: number | null;
115
+ strength?: number | null;
116
+ seed?: number | null;
117
+ scheduler?: string | null;
118
+ }
119
+ export interface TextToVideoParams {
120
+ model: VideoModel;
121
+ prompt: string;
122
+ negativePrompt?: string | null;
123
+ numFrames?: number | null;
124
+ /** Requested duration in seconds (provider decides fps). */
125
+ durationSeconds?: number | null;
126
+ aspectRatio?: string | null;
127
+ resolution?: string | null;
128
+ guidanceScale?: number | null;
129
+ numInferenceSteps?: number | null;
130
+ seed?: number | null;
131
+ }
132
+ export interface ImageToVideoParams {
133
+ model: VideoModel;
134
+ prompt?: string | null;
135
+ negativePrompt?: string | null;
136
+ numFrames?: number | null;
137
+ /** Requested duration in seconds (provider decides fps). */
138
+ durationSeconds?: number | null;
139
+ aspectRatio?: string | null;
140
+ resolution?: string | null;
141
+ guidanceScale?: number | null;
142
+ numInferenceSteps?: number | null;
143
+ seed?: number | null;
144
+ }
145
+ export type ProviderStreamItem = Chunk | ToolCall;
146
+ export interface StreamingAudioChunk {
147
+ samples: Int16Array;
148
+ /** Sample rate in Hz. Defaults to 24000 when omitted. */
149
+ sampleRate?: number;
150
+ }
151
+ /**
152
+ * Returned by providers that produce fully-encoded audio (e.g. FLAC, WAV)
153
+ * rather than raw PCM samples.
154
+ */
155
+ export interface EncodedAudioResult {
156
+ data: Uint8Array;
157
+ mimeType: string;
158
+ }
159
+ /**
160
+ * Describes an AI **generation model** that produces 3D assets (e.g. Meshy's
161
+ * `meshy-4`, Rodin's `rodin-regular`). This is the model **used to generate**
162
+ * a 3D asset, not the asset itself — the asset is represented by `Model3DRef`
163
+ * elsewhere in the codebase.
164
+ *
165
+ * Mirrors the `<MediaType>Model` pattern (`ImageModel`, `VideoModel`,
166
+ * `TTSModel`, `ASRModel`, `EmbeddingModel`).
167
+ */
168
+ export interface Model3D {
169
+ id: string;
170
+ name: string;
171
+ provider: ProviderId;
172
+ /** Capability hints, e.g. `["text_to_3d"]`, `["image_to_3d"]`, or both. */
173
+ supportedTasks?: string[];
174
+ /** File formats the model can emit, e.g. `["glb", "obj", "fbx"]`. */
175
+ outputFormats?: string[];
176
+ }
177
+ export interface TextTo3DParams {
178
+ model: Model3D;
179
+ prompt: string;
180
+ negativePrompt?: string | null;
181
+ artStyle?: string | null;
182
+ outputFormat?: string;
183
+ seed?: number | null;
184
+ /** Per-call timeout. Providers translate this into max polling attempts. */
185
+ timeoutSeconds?: number | null;
186
+ /**
187
+ * When `true`, providers that support a separate texture/refine pass will
188
+ * run it after shape generation, embedding PBR textures into the output GLB.
189
+ * Defaults to `undefined` (= no refine) to preserve backward compatibility.
190
+ * Meshy text-to-3D supports this; Rodin and image-to-3D providers ignore it.
191
+ */
192
+ enableTextures?: boolean;
193
+ }
194
+ export interface ImageTo3DParams {
195
+ model: Model3D;
196
+ prompt?: string | null;
197
+ outputFormat?: string;
198
+ seed?: number | null;
199
+ /** Per-call timeout. Providers translate this into max polling attempts. */
200
+ timeoutSeconds?: number | null;
201
+ }
202
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/providers/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/providers/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,22 @@
1
+ import OpenAI from "openai";
2
+ import { OpenAIProvider } from "./openai-provider.js";
3
+ import type { LanguageModel } from "./types.js";
4
+ interface VLLMProviderOptions {
5
+ client?: OpenAI;
6
+ clientFactory?: (apiKey: string) => OpenAI;
7
+ fetchFn?: typeof fetch;
8
+ baseURL?: string;
9
+ }
10
+ export declare class VLLMProvider extends OpenAIProvider {
11
+ static requiredSecrets(): string[];
12
+ private _vllmFetch;
13
+ private _vllmBaseURL;
14
+ constructor(secrets?: {
15
+ VLLM_API_KEY?: string;
16
+ }, options?: VLLMProviderOptions);
17
+ getContainerEnv(): Record<string, string>;
18
+ hasToolSupport(_model: string): Promise<boolean>;
19
+ getAvailableLanguageModels(): Promise<LanguageModel[]>;
20
+ }
21
+ export {};
22
+ //# sourceMappingURL=vllm-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vllm-provider.d.ts","sourceRoot":"","sources":["../../src/providers/vllm-provider.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,UAAU,mBAAmB;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC;IAC3C,OAAO,CAAC,EAAE,OAAO,KAAK,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,YAAa,SAAQ,cAAc;WAC9B,eAAe,IAAI,MAAM,EAAE;IAI3C,OAAO,CAAC,UAAU,CAAe;IACjC,OAAO,CAAC,YAAY,CAAS;gBAG3B,OAAO,GAAE;QAAE,YAAY,CAAC,EAAE,MAAM,CAAA;KAAO,EACvC,OAAO,GAAE,mBAAwB;IA8B1B,eAAe,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAUnC,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIhD,0BAA0B,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;CA8BtE"}
@@ -0,0 +1,66 @@
1
+ import OpenAI from "openai";
2
+ import { OpenAIProvider } from "./openai-provider.js";
3
+ export class VLLMProvider extends OpenAIProvider {
4
+ static requiredSecrets() {
5
+ return [];
6
+ }
7
+ _vllmFetch;
8
+ _vllmBaseURL;
9
+ constructor(secrets = {}, options = {}) {
10
+ const baseURL = options.baseURL;
11
+ if (!baseURL) {
12
+ throw new Error("VLLM_BASE_URL is required (pass via options.baseURL)");
13
+ }
14
+ const apiKey = secrets.VLLM_API_KEY ?? "sk-no-key-required";
15
+ const fetchFn = options.fetchFn ?? globalThis.fetch.bind(globalThis);
16
+ super({ OPENAI_API_KEY: apiKey }, {
17
+ client: options.client,
18
+ clientFactory: options.clientFactory ??
19
+ ((key) => new OpenAI({
20
+ apiKey: key,
21
+ baseURL: `${baseURL}/v1`
22
+ })),
23
+ fetchFn
24
+ });
25
+ this.provider = "vllm";
26
+ this._vllmFetch = fetchFn;
27
+ this._vllmBaseURL = baseURL;
28
+ }
29
+ getContainerEnv() {
30
+ const env = {
31
+ VLLM_BASE_URL: this._vllmBaseURL
32
+ };
33
+ if (this.apiKey && this.apiKey !== "sk-no-key-required") {
34
+ env.VLLM_API_KEY = this.apiKey;
35
+ }
36
+ return env;
37
+ }
38
+ async hasToolSupport(_model) {
39
+ return true;
40
+ }
41
+ async getAvailableLanguageModels() {
42
+ try {
43
+ const response = await this._vllmFetch(`${this._vllmBaseURL}/v1/models`, {
44
+ headers: {
45
+ Authorization: `Bearer ${this.apiKey}`
46
+ }
47
+ });
48
+ if (!response.ok) {
49
+ return [];
50
+ }
51
+ const payload = (await response.json());
52
+ const rows = payload.data ?? [];
53
+ return rows
54
+ .filter((row) => typeof row.id === "string" && row.id.length > 0)
55
+ .map((row) => ({
56
+ id: row.id,
57
+ name: row.id,
58
+ provider: "vllm"
59
+ }));
60
+ }
61
+ catch {
62
+ return [];
63
+ }
64
+ }
65
+ }
66
+ //# sourceMappingURL=vllm-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vllm-provider.js","sourceRoot":"","sources":["../../src/providers/vllm-provider.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAUtD,MAAM,OAAO,YAAa,SAAQ,cAAc;IAC9C,MAAM,CAAU,eAAe;QAC7B,OAAO,EAAE,CAAC;IACZ,CAAC;IAEO,UAAU,CAAe;IACzB,YAAY,CAAS;IAE7B,YACE,UAAqC,EAAE,EACvC,UAA+B,EAAE;QAEjC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAChC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;QAC1E,CAAC;QAED,MAAM,MAAM,GAAG,OAAO,CAAC,YAAY,IAAI,oBAAoB,CAAC;QAC5D,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAErE,KAAK,CACH,EAAE,cAAc,EAAE,MAAM,EAAE,EAC1B;YACE,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,aAAa,EACX,OAAO,CAAC,aAAa;gBACrB,CAAC,CAAC,GAAG,EAAE,EAAE,CACP,IAAI,MAAM,CAAC;oBACT,MAAM,EAAE,GAAG;oBACX,OAAO,EAAE,GAAG,OAAO,KAAK;iBACzB,CAAC,CAAC;YACP,OAAO;SACR,CACF,CAAC;QAED,IAA6B,CAAC,QAAQ,GAAG,MAAM,CAAC;QACjD,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC;QAC1B,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC;IAC9B,CAAC;IAEQ,eAAe;QACtB,MAAM,GAAG,GAA2B;YAClC,aAAa,EAAE,IAAI,CAAC,YAAY;SACjC,CAAC;QACF,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,KAAK,oBAAoB,EAAE,CAAC;YACxD,GAAG,CAAC,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC;QACjC,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAEQ,KAAK,CAAC,cAAc,CAAC,MAAc;QAC1C,OAAO,IAAI,CAAC;IACd,CAAC;IAEQ,KAAK,CAAC,0BAA0B;QACvC,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,YAAY,YAAY,EAAE;gBACvE,OAAO,EAAE;oBACP,aAAa,EAAE,UAAU,IAAI,CAAC,MAAM,EAAE;iBACvC;aACF,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,OAAO,EAAE,CAAC;YACZ,CAAC;YAED,MAAM,OAAO,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAErC,CAAC;YACF,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC;YAChC,OAAO,IAAI;iBACR,MAAM,CACL,CAAC,GAAG,EAAyB,EAAE,CAC7B,OAAO,GAAG,CAAC,EAAE,KAAK,QAAQ,IAAI,GAAG,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAClD;iBACA,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;gBACb,EAAE,EAAE,GAAG,CAAC,EAAE;gBACV,IAAI,EAAE,GAAG,CAAC,EAAE;gBACZ,QAAQ,EAAE,MAAM;aACjB,CAAC,CAAC,CAAC;QACR,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Voyage AI Provider — exposes Voyage's `/v1/embeddings` API through the
3
+ * standard {@link BaseProvider} interface. The wire format mirrors OpenAI's
4
+ * embedding response shape.
5
+ *
6
+ * API docs: https://docs.voyageai.com/reference/embeddings-api
7
+ */
8
+ import { BaseProvider } from "./base-provider.js";
9
+ import type { EmbeddingModel, Message, ProviderStreamItem } from "./types.js";
10
+ export interface VoyageProviderOptions {
11
+ fetchFn?: typeof fetch;
12
+ /**
13
+ * Voyage `input_type` hint. Use `"document"` when embedding content for a
14
+ * vector store; switch to `"query"` for retrieval queries against an index.
15
+ * Defaults to `"document"`.
16
+ */
17
+ inputType?: "document" | "query" | null;
18
+ }
19
+ export declare class VoyageProvider extends BaseProvider {
20
+ static requiredSecrets(): string[];
21
+ private readonly apiKey;
22
+ private readonly _fetch;
23
+ private readonly inputType;
24
+ constructor(secrets?: {
25
+ VOYAGE_API_KEY?: string;
26
+ }, options?: VoyageProviderOptions);
27
+ getContainerEnv(): Record<string, string>;
28
+ generateMessage(_args: Parameters<BaseProvider["generateMessage"]>[0]): Promise<Message>;
29
+ generateMessages(_args: Parameters<BaseProvider["generateMessages"]>[0]): AsyncGenerator<ProviderStreamItem>;
30
+ getAvailableEmbeddingModels(): Promise<EmbeddingModel[]>;
31
+ generateEmbedding(args: {
32
+ text: string | string[];
33
+ model: string;
34
+ dimensions?: number;
35
+ }): Promise<number[][]>;
36
+ }
37
+ //# sourceMappingURL=voyage-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"voyage-provider.d.ts","sourceRoot":"","sources":["../../src/providers/voyage-provider.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,KAAK,EACV,cAAc,EACd,OAAO,EACP,kBAAkB,EACnB,MAAM,YAAY,CAAC;AAmDpB,MAAM,WAAW,qBAAqB;IACpC,OAAO,CAAC,EAAE,OAAO,KAAK,CAAC;IACvB;;;;OAIG;IACH,SAAS,CAAC,EAAE,UAAU,GAAG,OAAO,GAAG,IAAI,CAAC;CACzC;AAED,qBAAa,cAAe,SAAQ,YAAY;WAC9B,eAAe,IAAI,MAAM,EAAE;IAI3C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAe;IACtC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAgB;gBAGxC,OAAO,GAAE;QAAE,cAAc,CAAC,EAAE,MAAM,CAAA;KAAO,EACzC,OAAO,GAAE,qBAA0B;IAW5B,eAAe,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAI5C,eAAe,CACnB,KAAK,EAAE,UAAU,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,GACpD,OAAO,CAAC,OAAO,CAAC;IAIZ,gBAAgB,CACrB,KAAK,EAAE,UAAU,CAAC,YAAY,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,GACrD,cAAc,CAAC,kBAAkB,CAAC;IAKtB,2BAA2B,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IAIxD,iBAAiB,CAAC,IAAI,EAAE;QACrC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;QACxB,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;CA+CxB"}
@@ -0,0 +1,124 @@
1
+ /**
2
+ * Voyage AI Provider — exposes Voyage's `/v1/embeddings` API through the
3
+ * standard {@link BaseProvider} interface. The wire format mirrors OpenAI's
4
+ * embedding response shape.
5
+ *
6
+ * API docs: https://docs.voyageai.com/reference/embeddings-api
7
+ */
8
+ import { BaseProvider } from "./base-provider.js";
9
+ import { createLogger } from "@nodetool-ai/config";
10
+ const log = createLogger("nodetool.runtime.providers.voyage");
11
+ const VOYAGE_API_BASE_URL = "https://api.voyageai.com/v1";
12
+ const VOYAGE_EMBEDDING_MODELS = [
13
+ {
14
+ id: "voyage-3-large",
15
+ name: "Voyage 3 Large",
16
+ provider: "voyage",
17
+ dimensions: 1024
18
+ },
19
+ {
20
+ id: "voyage-3.5",
21
+ name: "Voyage 3.5",
22
+ provider: "voyage",
23
+ dimensions: 1024
24
+ },
25
+ {
26
+ id: "voyage-3.5-lite",
27
+ name: "Voyage 3.5 Lite",
28
+ provider: "voyage",
29
+ dimensions: 1024
30
+ },
31
+ {
32
+ id: "voyage-code-3",
33
+ name: "Voyage Code 3",
34
+ provider: "voyage",
35
+ dimensions: 1024
36
+ },
37
+ {
38
+ id: "voyage-finance-2",
39
+ name: "Voyage Finance 2",
40
+ provider: "voyage",
41
+ dimensions: 1024
42
+ },
43
+ {
44
+ id: "voyage-law-2",
45
+ name: "Voyage Law 2",
46
+ provider: "voyage",
47
+ dimensions: 1024
48
+ },
49
+ {
50
+ id: "voyage-multilingual-2",
51
+ name: "Voyage Multilingual 2",
52
+ provider: "voyage",
53
+ dimensions: 1024
54
+ }
55
+ ];
56
+ export class VoyageProvider extends BaseProvider {
57
+ static requiredSecrets() {
58
+ return ["VOYAGE_API_KEY"];
59
+ }
60
+ apiKey;
61
+ _fetch;
62
+ inputType;
63
+ constructor(secrets = {}, options = {}) {
64
+ super("voyage");
65
+ this.apiKey = secrets.VOYAGE_API_KEY ?? "";
66
+ this._fetch = options.fetchFn ?? globalThis.fetch.bind(globalThis);
67
+ this.inputType = options.inputType ?? "document";
68
+ if (!this.apiKey) {
69
+ log.warn("Voyage API key not configured");
70
+ }
71
+ }
72
+ getContainerEnv() {
73
+ return { VOYAGE_API_KEY: this.apiKey };
74
+ }
75
+ async generateMessage(_args) {
76
+ throw new Error("voyage provider does not support chat generation");
77
+ }
78
+ async *generateMessages(_args) {
79
+ throw new Error("voyage provider does not support chat generation");
80
+ yield* [];
81
+ }
82
+ async getAvailableEmbeddingModels() {
83
+ return VOYAGE_EMBEDDING_MODELS;
84
+ }
85
+ async generateEmbedding(args) {
86
+ if (!this.apiKey) {
87
+ throw new Error("VOYAGE_API_KEY is not configured");
88
+ }
89
+ const texts = Array.isArray(args.text) ? args.text : [args.text];
90
+ if (texts.length === 0 ||
91
+ texts.some((v) => typeof v !== "string" || v.length === 0)) {
92
+ throw new Error("text must not be empty");
93
+ }
94
+ const body = {
95
+ model: args.model || "voyage-3.5",
96
+ input: texts
97
+ };
98
+ if (this.inputType) {
99
+ body.input_type = this.inputType;
100
+ }
101
+ if (args.dimensions) {
102
+ body.output_dimension = args.dimensions;
103
+ }
104
+ const response = await this._fetch(`${VOYAGE_API_BASE_URL}/embeddings`, {
105
+ method: "POST",
106
+ headers: {
107
+ Authorization: `Bearer ${this.apiKey}`,
108
+ "Content-Type": "application/json"
109
+ },
110
+ body: JSON.stringify(body)
111
+ });
112
+ if (!response.ok) {
113
+ const errText = await response.text().catch(() => "");
114
+ throw new Error(`Voyage embedding error ${response.status}: ${errText}`);
115
+ }
116
+ const data = (await response.json());
117
+ const rows = data.data ?? [];
118
+ return rows
119
+ .slice()
120
+ .sort((a, b) => (a.index ?? 0) - (b.index ?? 0))
121
+ .map((row) => row.embedding);
122
+ }
123
+ }
124
+ //# sourceMappingURL=voyage-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"voyage-provider.js","sourceRoot":"","sources":["../../src/providers/voyage-provider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import OpenAI from "openai";
2
+ import { OpenAIProvider } from "./openai-provider.js";
3
+ import type { LanguageModel } from "./types.js";
4
+ interface XAIProviderOptions {
5
+ client?: OpenAI;
6
+ clientFactory?: (apiKey: string) => OpenAI;
7
+ fetchFn?: typeof fetch;
8
+ }
9
+ /**
10
+ * xAI (Grok) provider. Uses the OpenAI SDK against xAI's
11
+ * OpenAI-compatible endpoint at https://api.x.ai/v1.
12
+ */
13
+ export declare class XAIProvider extends OpenAIProvider {
14
+ static requiredSecrets(): string[];
15
+ private _xaiFetch;
16
+ constructor(secrets: {
17
+ XAI_API_KEY?: string;
18
+ }, options?: XAIProviderOptions);
19
+ getContainerEnv(): Record<string, string>;
20
+ hasToolSupport(_model: string): Promise<boolean>;
21
+ getAvailableLanguageModels(): Promise<LanguageModel[]>;
22
+ }
23
+ export {};
24
+ //# sourceMappingURL=xai-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xai-provider.d.ts","sourceRoot":"","sources":["../../src/providers/xai-provider.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAIhD,UAAU,kBAAkB;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC;IAC3C,OAAO,CAAC,EAAE,OAAO,KAAK,CAAC;CACxB;AAED;;;GAGG;AACH,qBAAa,WAAY,SAAQ,cAAc;WAC7B,eAAe,IAAI,MAAM,EAAE;IAI3C,OAAO,CAAC,SAAS,CAAe;gBAG9B,OAAO,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,EACjC,OAAO,GAAE,kBAAuB;IA4BzB,eAAe,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAInC,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIhD,0BAA0B,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;CA0BtE"}
@@ -0,0 +1,57 @@
1
+ import OpenAI from "openai";
2
+ import { OpenAIProvider } from "./openai-provider.js";
3
+ const XAI_BASE_URL = "https://api.x.ai/v1";
4
+ /**
5
+ * xAI (Grok) provider. Uses the OpenAI SDK against xAI's
6
+ * OpenAI-compatible endpoint at https://api.x.ai/v1.
7
+ */
8
+ export class XAIProvider extends OpenAIProvider {
9
+ static requiredSecrets() {
10
+ return ["XAI_API_KEY"];
11
+ }
12
+ _xaiFetch;
13
+ constructor(secrets, options = {}) {
14
+ const apiKey = secrets.XAI_API_KEY;
15
+ if (!apiKey) {
16
+ throw new Error("XAI_API_KEY is required");
17
+ }
18
+ const fetchFn = options.fetchFn ?? globalThis.fetch.bind(globalThis);
19
+ super({ OPENAI_API_KEY: apiKey }, {
20
+ client: options.client,
21
+ clientFactory: options.clientFactory ??
22
+ ((key) => new OpenAI({
23
+ apiKey: key,
24
+ baseURL: XAI_BASE_URL
25
+ })),
26
+ fetchFn
27
+ });
28
+ this.provider = "xai";
29
+ this._xaiFetch = fetchFn;
30
+ }
31
+ getContainerEnv() {
32
+ return { XAI_API_KEY: this.apiKey };
33
+ }
34
+ async hasToolSupport(_model) {
35
+ return true;
36
+ }
37
+ async getAvailableLanguageModels() {
38
+ const response = await this._xaiFetch(`${XAI_BASE_URL}/models`, {
39
+ headers: {
40
+ Authorization: `Bearer ${this.apiKey}`
41
+ }
42
+ });
43
+ if (!response.ok) {
44
+ return [];
45
+ }
46
+ const payload = (await response.json());
47
+ const rows = payload.data ?? [];
48
+ return rows
49
+ .filter((row) => typeof row.id === "string" && row.id.length > 0)
50
+ .map((row) => ({
51
+ id: row.id,
52
+ name: row.name ?? row.id,
53
+ provider: "xai"
54
+ }));
55
+ }
56
+ }
57
+ //# sourceMappingURL=xai-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xai-provider.js","sourceRoot":"","sources":["../../src/providers/xai-provider.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAGtD,MAAM,YAAY,GAAG,qBAAqB,CAAC;AAQ3C;;;GAGG;AACH,MAAM,OAAO,WAAY,SAAQ,cAAc;IAC7C,MAAM,CAAU,eAAe;QAC7B,OAAO,CAAC,aAAa,CAAC,CAAC;IACzB,CAAC;IAEO,SAAS,CAAe;IAEhC,YACE,OAAiC,EACjC,UAA8B,EAAE;QAEhC,MAAM,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;QACnC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAC7C,CAAC;QAED,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAErE,KAAK,CACH,EAAE,cAAc,EAAE,MAAM,EAAE,EAC1B;YACE,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,aAAa,EACX,OAAO,CAAC,aAAa;gBACrB,CAAC,CAAC,GAAG,EAAE,EAAE,CACP,IAAI,MAAM,CAAC;oBACT,MAAM,EAAE,GAAG;oBACX,OAAO,EAAE,YAAY;iBACtB,CAAC,CAAC;YACP,OAAO;SACR,CACF,CAAC;QAED,IAA6B,CAAC,QAAQ,GAAG,KAAK,CAAC;QAChD,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC;IAC3B,CAAC;IAEQ,eAAe;QACtB,OAAO,EAAE,WAAW,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;IACtC,CAAC;IAEQ,KAAK,CAAC,cAAc,CAAC,MAAc;QAC1C,OAAO,IAAI,CAAC;IACd,CAAC;IAEQ,KAAK,CAAC,0BAA0B;QACvC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,YAAY,SAAS,EAAE;YAC9D,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,IAAI,CAAC,MAAM,EAAE;aACvC;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,OAAO,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAErC,CAAC;QACF,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC;QAChC,OAAO,IAAI;aACR,MAAM,CACL,CAAC,GAAG,EAAwC,EAAE,CAC5C,OAAO,GAAG,CAAC,EAAE,KAAK,QAAQ,IAAI,GAAG,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAClD;aACA,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YACb,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,EAAE;YACxB,QAAQ,EAAE,KAAK;SAChB,CAAC,CAAC,CAAC;IACR,CAAC;CACF"}