@nodetool-ai/llm-nodes 0.8.1

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 (71) hide show
  1. package/README.md +52 -0
  2. package/dist/.nodetool-build-stamp +1 -0
  3. package/dist/index.d.ts +18 -0
  4. package/dist/index.d.ts.map +1 -0
  5. package/dist/index.js +22 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/nodes/agent-control-tools.d.ts +22 -0
  8. package/dist/nodes/agent-control-tools.d.ts.map +1 -0
  9. package/dist/nodes/agent-control-tools.js +123 -0
  10. package/dist/nodes/agent-control-tools.js.map +1 -0
  11. package/dist/nodes/agent-loop.d.ts +73 -0
  12. package/dist/nodes/agent-loop.d.ts.map +1 -0
  13. package/dist/nodes/agent-loop.js +168 -0
  14. package/dist/nodes/agent-loop.js.map +1 -0
  15. package/dist/nodes/agent-recommended-models.d.ts +152 -0
  16. package/dist/nodes/agent-recommended-models.d.ts.map +1 -0
  17. package/dist/nodes/agent-recommended-models.js +656 -0
  18. package/dist/nodes/agent-recommended-models.js.map +1 -0
  19. package/dist/nodes/agent-thinking.d.ts +29 -0
  20. package/dist/nodes/agent-thinking.d.ts.map +1 -0
  21. package/dist/nodes/agent-thinking.js +139 -0
  22. package/dist/nodes/agent-thinking.js.map +1 -0
  23. package/dist/nodes/agent-threads.d.ts +17 -0
  24. package/dist/nodes/agent-threads.d.ts.map +1 -0
  25. package/dist/nodes/agent-threads.js +93 -0
  26. package/dist/nodes/agent-threads.js.map +1 -0
  27. package/dist/nodes/agent-tool-hydration.d.ts +50 -0
  28. package/dist/nodes/agent-tool-hydration.d.ts.map +1 -0
  29. package/dist/nodes/agent-tool-hydration.js +106 -0
  30. package/dist/nodes/agent-tool-hydration.js.map +1 -0
  31. package/dist/nodes/agent-utils.d.ts +174 -0
  32. package/dist/nodes/agent-utils.d.ts.map +1 -0
  33. package/dist/nodes/agent-utils.js +553 -0
  34. package/dist/nodes/agent-utils.js.map +1 -0
  35. package/dist/nodes/agents.d.ts +402 -0
  36. package/dist/nodes/agents.d.ts.map +1 -0
  37. package/dist/nodes/agents.js +1491 -0
  38. package/dist/nodes/agents.js.map +1 -0
  39. package/dist/nodes/director.d.ts +126 -0
  40. package/dist/nodes/director.d.ts.map +1 -0
  41. package/dist/nodes/director.js +337 -0
  42. package/dist/nodes/director.js.map +1 -0
  43. package/dist/nodes/gemini.d.ts +171 -0
  44. package/dist/nodes/gemini.d.ts.map +1 -0
  45. package/dist/nodes/gemini.js +985 -0
  46. package/dist/nodes/gemini.js.map +1 -0
  47. package/dist/nodes/generators.d.ts +162 -0
  48. package/dist/nodes/generators.d.ts.map +1 -0
  49. package/dist/nodes/generators.js +966 -0
  50. package/dist/nodes/generators.js.map +1 -0
  51. package/dist/nodes/mistral.d.ts +109 -0
  52. package/dist/nodes/mistral.d.ts.map +1 -0
  53. package/dist/nodes/mistral.js +447 -0
  54. package/dist/nodes/mistral.js.map +1 -0
  55. package/dist/nodes/openai.d.ts +292 -0
  56. package/dist/nodes/openai.d.ts.map +1 -0
  57. package/dist/nodes/openai.js +1806 -0
  58. package/dist/nodes/openai.js.map +1 -0
  59. package/dist/nodes/provider-spend.d.ts +45 -0
  60. package/dist/nodes/provider-spend.d.ts.map +1 -0
  61. package/dist/nodes/provider-spend.js +69 -0
  62. package/dist/nodes/provider-spend.js.map +1 -0
  63. package/dist/nodes/shots.d.ts +108 -0
  64. package/dist/nodes/shots.d.ts.map +1 -0
  65. package/dist/nodes/shots.js +378 -0
  66. package/dist/nodes/shots.js.map +1 -0
  67. package/dist/nodes/xai.d.ts +99 -0
  68. package/dist/nodes/xai.d.ts.map +1 -0
  69. package/dist/nodes/xai.js +360 -0
  70. package/dist/nodes/xai.js.map +1 -0
  71. package/package.json +111 -0
@@ -0,0 +1,360 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { BaseNode, prop } from "@nodetool-ai/node-sdk";
8
+ import { tagAsServer } from "@nodetool-ai/nodes-utils";
9
+ import { isString } from "@nodetool-ai/node-sdk";
10
+ const XAI_API_BASE = "https://api.x.ai/v1";
11
+ function getApiKey(secrets) {
12
+ const key = secrets.XAI_API_KEY || process.env.XAI_API_KEY || "";
13
+ if (!key)
14
+ throw new Error("XAI_API_KEY is not configured");
15
+ return key;
16
+ }
17
+ function imageToDataUri(image) {
18
+ if (isString(image.data)) {
19
+ if (image.data.startsWith("data:"))
20
+ return image.data;
21
+ return `data:image/png;base64,${image.data}`;
22
+ }
23
+ if (image.data instanceof Uint8Array) {
24
+ return `data:image/png;base64,${Buffer.from(image.data).toString("base64")}`;
25
+ }
26
+ if (image.uri)
27
+ return image.uri;
28
+ throw new Error("Image must include data or uri");
29
+ }
30
+ async function xaiPost(apiKey, endpoint, body) {
31
+ const res = await fetch(`${XAI_API_BASE}/${endpoint}`, {
32
+ method: "POST",
33
+ headers: {
34
+ Authorization: `Bearer ${apiKey}`,
35
+ "Content-Type": "application/json"
36
+ },
37
+ body: JSON.stringify(body)
38
+ });
39
+ if (!res.ok) {
40
+ const text = await res.text().catch(() => "");
41
+ throw new Error(`xAI API error ${res.status}: ${text}`);
42
+ }
43
+ return (await res.json());
44
+ }
45
+ function firstMessageContent(data) {
46
+ const choices = data.choices;
47
+ if (!choices || choices.length === 0) {
48
+ throw new Error("No response from xAI API");
49
+ }
50
+ return choices[0].message?.content ?? "";
51
+ }
52
+ export class ChatComplete extends BaseNode {
53
+ static nodeType = "xai.text.ChatComplete";
54
+ static body = "content_card";
55
+ static title = "Chat Complete";
56
+ static description = "Generate text using xAI's Grok chat completion models.\n xai, grok, chat, ai, text generation, llm, completion\n\n Uses xAI's Grok models to generate responses from prompts via the\n OpenAI-compatible chat completions endpoint. Requires an xAI API key.\n\n Use cases:\n - Generate text responses to prompts\n - Build conversational AI applications\n - Summarize, rewrite, and classify text\n - Reasoning tasks with Grok models";
57
+ static metadataOutputTypes = {
58
+ output: "str"
59
+ };
60
+ static inlineFields = [];
61
+ static inputFields = ["prompt", "system_prompt"];
62
+ static requiredSettings = ["XAI_API_KEY"];
63
+ async process() {
64
+ const apiKey = getApiKey(this._secrets);
65
+ const prompt = this.prompt;
66
+ if (!prompt)
67
+ throw new Error("Prompt cannot be empty");
68
+ const model = this.model;
69
+ const systemPrompt = this.system_prompt;
70
+ const temperature = this.temperature;
71
+ const maxTokens = this.max_tokens;
72
+ const messages = [];
73
+ if (systemPrompt)
74
+ messages.push({ role: "system", content: systemPrompt });
75
+ messages.push({ role: "user", content: prompt });
76
+ const data = await xaiPost(apiKey, "chat/completions", {
77
+ model,
78
+ messages,
79
+ temperature,
80
+ max_tokens: maxTokens
81
+ });
82
+ return { output: firstMessageContent(data) };
83
+ }
84
+ }
85
+ __decorate([
86
+ prop({
87
+ type: "str",
88
+ default: "grok-4",
89
+ title: "Model",
90
+ description: "The Grok model to use (e.g. grok-4, grok-4.3, grok-3, grok-3-mini)."
91
+ })
92
+ ], ChatComplete.prototype, "model", void 0);
93
+ __decorate([
94
+ prop({
95
+ type: "str",
96
+ default: "",
97
+ title: "Prompt",
98
+ description: "The prompt for text generation"
99
+ })
100
+ ], ChatComplete.prototype, "prompt", void 0);
101
+ __decorate([
102
+ prop({
103
+ type: "str",
104
+ default: "",
105
+ title: "System Prompt",
106
+ description: "Optional system prompt to guide the model's behavior"
107
+ })
108
+ ], ChatComplete.prototype, "system_prompt", void 0);
109
+ __decorate([
110
+ prop({
111
+ type: "float",
112
+ default: 0.7,
113
+ title: "Temperature",
114
+ description: "Sampling temperature. Higher values make output more random.",
115
+ min: 0,
116
+ max: 2
117
+ })
118
+ ], ChatComplete.prototype, "temperature", void 0);
119
+ __decorate([
120
+ prop({
121
+ type: "int",
122
+ default: 1024,
123
+ title: "Max Tokens",
124
+ description: "Maximum number of tokens to generate",
125
+ min: 1,
126
+ max: 131072
127
+ })
128
+ ], ChatComplete.prototype, "max_tokens", void 0);
129
+ export class WebSearch extends BaseNode {
130
+ static nodeType = "xai.text.WebSearch";
131
+ static body = "content_card";
132
+ static title = "Web Search";
133
+ static description = "Answer questions using Grok with xAI Live Search over the web and X.\n xai, grok, search, web, live, realtime, citations\n\n Uses xAI's Live Search (search_parameters) so Grok can pull in\n real-time information from the web and X to answer the query.\n Requires an xAI API key.\n\n Use cases:\n - Answer questions about current events\n - Research with up-to-date sources\n - Summarize recent news";
134
+ static metadataOutputTypes = {
135
+ output: "str",
136
+ citations: "list[str]"
137
+ };
138
+ static inlineFields = ["query"];
139
+ static inputFields = [];
140
+ static requiredSettings = ["XAI_API_KEY"];
141
+ async process() {
142
+ const apiKey = getApiKey(this._secrets);
143
+ const query = this.query;
144
+ if (!query)
145
+ throw new Error("Search query cannot be empty");
146
+ const model = this.model;
147
+ const mode = this.search_mode;
148
+ const maxResults = this.max_results;
149
+ const data = await xaiPost(apiKey, "chat/completions", {
150
+ model,
151
+ messages: [{ role: "user", content: query }],
152
+ search_parameters: {
153
+ mode,
154
+ return_citations: true,
155
+ max_search_results: maxResults
156
+ }
157
+ });
158
+ // Live Search returns the source URLs as a top-level `citations` array.
159
+ const citations = Array.isArray(data.citations)
160
+ ? data.citations.map((c) => String(c))
161
+ : [];
162
+ return { output: firstMessageContent(data), citations };
163
+ }
164
+ }
165
+ __decorate([
166
+ prop({
167
+ type: "str",
168
+ default: "grok-4",
169
+ title: "Model",
170
+ description: "The Grok model to use for the search query."
171
+ })
172
+ ], WebSearch.prototype, "model", void 0);
173
+ __decorate([
174
+ prop({
175
+ type: "str",
176
+ default: "",
177
+ title: "Query",
178
+ description: "The question to research using live web/X search."
179
+ })
180
+ ], WebSearch.prototype, "query", void 0);
181
+ __decorate([
182
+ prop({
183
+ type: "enum",
184
+ default: "auto",
185
+ title: "Search Mode",
186
+ description: "auto lets Grok decide when to search, on forces search, off disables it.",
187
+ values: ["auto", "on", "off"]
188
+ })
189
+ ], WebSearch.prototype, "search_mode", void 0);
190
+ __decorate([
191
+ prop({
192
+ type: "int",
193
+ default: 10,
194
+ title: "Max Results",
195
+ description: "Maximum number of search results to consider.",
196
+ min: 1,
197
+ max: 30
198
+ })
199
+ ], WebSearch.prototype, "max_results", void 0);
200
+ export class ImageToText extends BaseNode {
201
+ static nodeType = "xai.vision.ImageToText";
202
+ static title = "Image To Text";
203
+ static description = "Analyze images and generate text using xAI's Grok vision models.\n xai, grok, vision, image, ocr, analysis, multimodal\n\n Uses Grok's multimodal models to understand and describe images via the\n OpenAI-compatible chat completions endpoint. Can perform OCR, image\n analysis, and answer questions about images. Requires an xAI API key.\n\n Use cases:\n - Describe image contents\n - Answer questions about images\n - Extract text from images (OCR)\n - Analyze charts and diagrams";
204
+ static metadataOutputTypes = {
205
+ output: "str"
206
+ };
207
+ static inlineFields = [];
208
+ static inputFields = ["prompt", "image"];
209
+ static requiredSettings = ["XAI_API_KEY"];
210
+ async process() {
211
+ const apiKey = getApiKey(this._secrets);
212
+ const image = this.image;
213
+ if (!image.data && !image.uri)
214
+ throw new Error("Image is required");
215
+ const prompt = this.prompt;
216
+ if (!prompt)
217
+ throw new Error("Prompt cannot be empty");
218
+ const model = this.model;
219
+ const temperature = this.temperature;
220
+ const maxTokens = this.max_tokens;
221
+ const dataUri = imageToDataUri(image);
222
+ const data = await xaiPost(apiKey, "chat/completions", {
223
+ model,
224
+ messages: [
225
+ {
226
+ role: "user",
227
+ content: [
228
+ { type: "image_url", image_url: { url: dataUri } },
229
+ { type: "text", text: prompt }
230
+ ]
231
+ }
232
+ ],
233
+ temperature,
234
+ max_tokens: maxTokens
235
+ });
236
+ return { output: firstMessageContent(data) };
237
+ }
238
+ }
239
+ __decorate([
240
+ prop({
241
+ type: "image",
242
+ default: {
243
+ type: "image",
244
+ uri: "",
245
+ asset_id: null,
246
+ data: null,
247
+ metadata: null
248
+ },
249
+ title: "Image",
250
+ description: "The image to analyze"
251
+ })
252
+ ], ImageToText.prototype, "image", void 0);
253
+ __decorate([
254
+ prop({
255
+ type: "str",
256
+ default: "Describe this image in detail.",
257
+ title: "Prompt",
258
+ description: "The prompt/question about the image"
259
+ })
260
+ ], ImageToText.prototype, "prompt", void 0);
261
+ __decorate([
262
+ prop({
263
+ type: "str",
264
+ default: "grok-2-vision-1212",
265
+ title: "Model",
266
+ description: "The Grok vision model to use (e.g. grok-2-vision-1212, grok-4)."
267
+ })
268
+ ], ImageToText.prototype, "model", void 0);
269
+ __decorate([
270
+ prop({
271
+ type: "float",
272
+ default: 0.3,
273
+ title: "Temperature",
274
+ description: "Sampling temperature for response generation",
275
+ min: 0,
276
+ max: 2
277
+ })
278
+ ], ImageToText.prototype, "temperature", void 0);
279
+ __decorate([
280
+ prop({
281
+ type: "int",
282
+ default: 1024,
283
+ title: "Max Tokens",
284
+ description: "Maximum number of tokens to generate",
285
+ min: 1,
286
+ max: 131072
287
+ })
288
+ ], ImageToText.prototype, "max_tokens", void 0);
289
+ export class GenerateImage extends BaseNode {
290
+ static nodeType = "xai.image.GenerateImage";
291
+ static body = "content_card";
292
+ static title = "Generate Image";
293
+ static description = "Generate images from text using xAI's Grok image models.\n xai, grok, image, t2i, text-to-image, create, generate, picture, art\n\n Uses xAI's OpenAI-compatible image generations endpoint. The model\n automatically revises the prompt; the revised prompt is returned as a\n second output. Requires an xAI API key.";
294
+ static metadataOutputTypes = {
295
+ output: "image",
296
+ revised_prompt: "str"
297
+ };
298
+ static inlineFields = [];
299
+ static inputFields = ["prompt"];
300
+ static requiredSettings = ["XAI_API_KEY"];
301
+ static autoSaveAsset = true;
302
+ async process() {
303
+ const apiKey = getApiKey(this._secrets);
304
+ const prompt = this.prompt;
305
+ if (!prompt)
306
+ throw new Error("Prompt cannot be empty");
307
+ const model = this.model;
308
+ // xAI's image endpoint mirrors OpenAI but rejects size/quality/style
309
+ // params — only model, prompt, n and response_format are accepted.
310
+ const data = await xaiPost(apiKey, "images/generations", {
311
+ model,
312
+ prompt,
313
+ n: 1,
314
+ response_format: "b64_json"
315
+ });
316
+ const items = data.data;
317
+ if (!items || items.length === 0) {
318
+ throw new Error("No image data in xAI response");
319
+ }
320
+ const item = items[0];
321
+ const revisedPrompt = item.revised_prompt ?? "";
322
+ if (item.b64_json) {
323
+ return {
324
+ output: { type: "image", data: `data:image/png;base64,${item.b64_json}` },
325
+ revised_prompt: revisedPrompt
326
+ };
327
+ }
328
+ if (item.url) {
329
+ return {
330
+ output: { type: "image", uri: item.url },
331
+ revised_prompt: revisedPrompt
332
+ };
333
+ }
334
+ throw new Error("No image data in xAI response");
335
+ }
336
+ }
337
+ __decorate([
338
+ prop({
339
+ type: "str",
340
+ default: "",
341
+ title: "Prompt",
342
+ description: "The prompt describing the image to generate."
343
+ })
344
+ ], GenerateImage.prototype, "prompt", void 0);
345
+ __decorate([
346
+ prop({
347
+ type: "str",
348
+ default: "grok-2-image",
349
+ title: "Model",
350
+ description: "The Grok image model to use (e.g. grok-2-image, grok-imagine-image)."
351
+ })
352
+ ], GenerateImage.prototype, "model", void 0);
353
+ // ── Export ───────────────────────────────────────────────────────────────────
354
+ export const XAI_NODES = tagAsServer([
355
+ ChatComplete,
356
+ WebSearch,
357
+ ImageToText,
358
+ GenerateImage
359
+ ]);
360
+ //# sourceMappingURL=xai.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xai.js","sourceRoot":"","sources":["../../src/nodes/xai.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,111 @@
1
+ {
2
+ "name": "@nodetool-ai/llm-nodes",
3
+ "version": "0.8.1",
4
+ "description": "NodeTool LLM provider + agent nodes (OpenAI, Anthropic via agents SDK, Gemini, Mistral)",
5
+ "type": "module",
6
+ "engines": {
7
+ "node": ">=22.0.0"
8
+ },
9
+ "main": "dist/index.js",
10
+ "types": "dist/index.d.ts",
11
+ "scripts": {
12
+ "build": "node ../../scripts/build-typescript-workspace.mjs",
13
+ "test": "node ../../scripts/run-vitest.mjs run",
14
+ "test:watch": "node ../../scripts/run-vitest.mjs",
15
+ "lint": "node ../../scripts/run-tsc.mjs --noEmit"
16
+ },
17
+ "dependencies": {
18
+ "@nodetool-ai/agents": "^0.8.1",
19
+ "@nodetool-ai/config": "^0.8.1",
20
+ "@nodetool-ai/node-sdk": "^0.8.1",
21
+ "@nodetool-ai/nodes-utils": "^0.8.1",
22
+ "@nodetool-ai/protocol": "^0.8.1",
23
+ "@nodetool-ai/runtime": "^0.8.1"
24
+ },
25
+ "devDependencies": {
26
+ "@types/node": "^22.0.0",
27
+ "typescript": "npm:@typescript/typescript6@6.0.2",
28
+ "vitest": "^5.0.1"
29
+ },
30
+ "exports": {
31
+ ".": {
32
+ "types": "./dist/index.d.ts",
33
+ "import": "./dist/index.js",
34
+ "default": "./dist/index.js"
35
+ },
36
+ "./openai": {
37
+ "nodetool-dev": "./src/nodes/openai.ts",
38
+ "types": "./dist/nodes/openai.d.ts",
39
+ "import": "./dist/nodes/openai.js",
40
+ "default": "./dist/nodes/openai.js"
41
+ },
42
+ "./gemini": {
43
+ "nodetool-dev": "./src/nodes/gemini.ts",
44
+ "types": "./dist/nodes/gemini.d.ts",
45
+ "import": "./dist/nodes/gemini.js",
46
+ "default": "./dist/nodes/gemini.js"
47
+ },
48
+ "./mistral": {
49
+ "nodetool-dev": "./src/nodes/mistral.ts",
50
+ "types": "./dist/nodes/mistral.d.ts",
51
+ "import": "./dist/nodes/mistral.js",
52
+ "default": "./dist/nodes/mistral.js"
53
+ },
54
+ "./xai": {
55
+ "nodetool-dev": "./src/nodes/xai.ts",
56
+ "types": "./dist/nodes/xai.d.ts",
57
+ "import": "./dist/nodes/xai.js",
58
+ "default": "./dist/nodes/xai.js"
59
+ },
60
+ "./agents": {
61
+ "nodetool-dev": "./src/nodes/agents.ts",
62
+ "types": "./dist/nodes/agents.d.ts",
63
+ "import": "./dist/nodes/agents.js",
64
+ "default": "./dist/nodes/agents.js"
65
+ },
66
+ "./nodes/*": {
67
+ "types": "./dist/nodes/*.d.ts",
68
+ "import": "./dist/nodes/*.js",
69
+ "default": "./dist/nodes/*.js"
70
+ },
71
+ "./lib/*": {
72
+ "types": "./dist/lib/*.d.ts",
73
+ "import": "./dist/lib/*.js",
74
+ "default": "./dist/lib/*.js"
75
+ }
76
+ },
77
+ "license": "MIT",
78
+ "files": [
79
+ "dist",
80
+ "README.md"
81
+ ],
82
+ "repository": {
83
+ "type": "git",
84
+ "url": "https://github.com/nodetool-ai/nodetool.git",
85
+ "directory": "packages/llm-nodes"
86
+ },
87
+ "homepage": "https://nodetool.ai",
88
+ "bugs": {
89
+ "url": "https://github.com/nodetool-ai/nodetool/issues"
90
+ },
91
+ "publishConfig": {
92
+ "access": "public"
93
+ },
94
+ "keywords": [
95
+ "nodetool",
96
+ "ai",
97
+ "workflow",
98
+ "workflow-automation",
99
+ "typescript",
100
+ "ai-nodes",
101
+ "no-code",
102
+ "visual-programming",
103
+ "workflow-nodes",
104
+ "llm",
105
+ "openai",
106
+ "anthropic",
107
+ "gemini",
108
+ "mistral",
109
+ "agents"
110
+ ]
111
+ }