@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,107 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { BaseProvider } from "./base-provider.js";
3
+ export class FakeProvider extends BaseProvider {
4
+ textResponse;
5
+ toolCalls;
6
+ shouldStream;
7
+ chunkSize;
8
+ customResponseFn;
9
+ callCount = 0;
10
+ lastMessages = null;
11
+ lastModel = null;
12
+ lastTools = [];
13
+ constructor(options = {}) {
14
+ super("fake");
15
+ this.textResponse =
16
+ options.textResponse ?? "Hello, this is a fake response!";
17
+ this.toolCalls = options.toolCalls ?? [];
18
+ this.shouldStream = options.shouldStream ?? true;
19
+ this.chunkSize = options.chunkSize ?? 10;
20
+ this.customResponseFn = options.customResponseFn ?? null;
21
+ }
22
+ getResponse(messages, model) {
23
+ if (this.customResponseFn) {
24
+ return this.customResponseFn(messages, model);
25
+ }
26
+ if (this.toolCalls.length > 0) {
27
+ return this.toolCalls;
28
+ }
29
+ return this.textResponse;
30
+ }
31
+ resetCallCount() {
32
+ this.callCount = 0;
33
+ }
34
+ async getAvailableLanguageModels() {
35
+ return [
36
+ { id: "fake-model-v1", name: "Fake Model v1", provider: "fake" },
37
+ { id: "fake-model-v2", name: "Fake Model v2", provider: "fake" },
38
+ { id: "fake-fast-model", name: "Fake Fast Model", provider: "fake" }
39
+ ];
40
+ }
41
+ async generateMessage(args) {
42
+ this.callCount++;
43
+ this.lastMessages = args.messages;
44
+ this.lastModel = args.model;
45
+ this.lastTools = args.tools ?? [];
46
+ const response = this.getResponse(args.messages, args.model);
47
+ if (Array.isArray(response)) {
48
+ return { role: "assistant", content: [], toolCalls: response };
49
+ }
50
+ const content = [{ type: "text", text: response }];
51
+ return { role: "assistant", content };
52
+ }
53
+ async *generateMessages(args) {
54
+ this.callCount++;
55
+ this.lastMessages = args.messages;
56
+ this.lastModel = args.model;
57
+ this.lastTools = args.tools ?? [];
58
+ const response = this.getResponse(args.messages, args.model);
59
+ if (Array.isArray(response)) {
60
+ for (const toolCall of response) {
61
+ yield toolCall;
62
+ }
63
+ return;
64
+ }
65
+ if (this.shouldStream && response.length > this.chunkSize) {
66
+ for (let i = 0; i < response.length; i += this.chunkSize) {
67
+ const chunkText = response.slice(i, i + this.chunkSize);
68
+ const done = i + this.chunkSize >= response.length;
69
+ yield {
70
+ type: "chunk",
71
+ content: chunkText,
72
+ done,
73
+ content_type: "text"
74
+ };
75
+ }
76
+ }
77
+ else {
78
+ yield {
79
+ type: "chunk",
80
+ content: response,
81
+ done: true,
82
+ content_type: "text"
83
+ };
84
+ }
85
+ }
86
+ }
87
+ export function createFakeToolCall(name, args, callId) {
88
+ return {
89
+ id: callId ?? randomUUID(),
90
+ name,
91
+ args: args ?? {}
92
+ };
93
+ }
94
+ export function createSimpleFakeProvider(responseText = "Test response") {
95
+ return new FakeProvider({ textResponse: responseText, shouldStream: false });
96
+ }
97
+ export function createStreamingFakeProvider(responseText = "This is a streaming test response", chunkSize = 5) {
98
+ return new FakeProvider({
99
+ textResponse: responseText,
100
+ shouldStream: true,
101
+ chunkSize
102
+ });
103
+ }
104
+ export function createToolCallingFakeProvider(toolCalls) {
105
+ return new FakeProvider({ toolCalls });
106
+ }
107
+ //# sourceMappingURL=fake-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fake-provider.js","sourceRoot":"","sources":["../../src/providers/fake-provider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * FAL AI Provider — wraps the @fal-ai/client SDK to provide image generation
3
+ * through the standard BaseProvider interface.
4
+ *
5
+ * Supports: textToImage, imageToImage, getAvailableImageModels
6
+ */
7
+ import { BaseProvider } from "./base-provider.js";
8
+ import type { ImageModel, VideoModel, Message, ProviderStreamItem, TextToImageParams, ImageToImageParams, TextToVideoParams, ImageToVideoParams } from "./types.js";
9
+ export declare class FalProvider extends BaseProvider {
10
+ private apiKey;
11
+ private _client;
12
+ static requiredSecrets(): string[];
13
+ constructor(secrets?: Record<string, unknown>);
14
+ /** Build an onQueueUpdate callback that forwards progress via emitMessage. */
15
+ private makeQueueUpdateHandler;
16
+ private getClient;
17
+ getAvailableImageModels(): Promise<ImageModel[]>;
18
+ getAvailableVideoModels(): Promise<VideoModel[]>;
19
+ generateMessage(_args: Parameters<BaseProvider["generateMessage"]>[0]): Promise<Message>;
20
+ generateMessages(_args: Parameters<BaseProvider["generateMessages"]>[0]): AsyncGenerator<ProviderStreamItem>;
21
+ private buildTextToImageArgs;
22
+ private buildImageToImageArgs;
23
+ private buildTextToVideoArgs;
24
+ private buildImageToVideoArgs;
25
+ textToImage(params: TextToImageParams): Promise<Uint8Array>;
26
+ imageToImage(image: Uint8Array, params: ImageToImageParams): Promise<Uint8Array>;
27
+ textToVideo(params: TextToVideoParams): Promise<Uint8Array>;
28
+ imageToImages(image: Uint8Array, params: ImageToImageParams, numImages: number): Promise<Uint8Array[]>;
29
+ textToImages(params: TextToImageParams, numImages: number): Promise<Uint8Array[]>;
30
+ imageToVideo(image: Uint8Array, params: ImageToVideoParams): Promise<Uint8Array>;
31
+ }
32
+ //# sourceMappingURL=fal-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fal-provider.d.ts","sourceRoot":"","sources":["../../src/providers/fal-provider.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,KAAK,EACV,UAAU,EACV,UAAU,EACV,OAAO,EACP,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EACnB,MAAM,YAAY,CAAC;AAsOpB,qBAAa,WAAY,SAAQ,YAAY;IAC3C,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAA0B;WAEzB,eAAe,IAAI,MAAM,EAAE;gBAI/B,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM;IAKjD,8EAA8E;IAC9E,OAAO,CAAC,sBAAsB;YA8BhB,SAAS;IASR,uBAAuB,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;IAIhD,uBAAuB,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;IAIzD,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;IAIrC,OAAO,CAAC,oBAAoB;YAgBd,qBAAqB;IAuBnC,OAAO,CAAC,oBAAoB;YAed,qBAAqB;IAqBpB,WAAW,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAC;IAc3D,YAAY,CACzB,KAAK,EAAE,UAAU,EACjB,MAAM,EAAE,kBAAkB,GACzB,OAAO,CAAC,UAAU,CAAC;IAcP,WAAW,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAC;IAc3D,aAAa,CAC1B,KAAK,EAAE,UAAU,EACjB,MAAM,EAAE,kBAAkB,EAC1B,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,UAAU,EAAE,CAAC;IAqBT,YAAY,CACzB,MAAM,EAAE,iBAAiB,EACzB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,UAAU,EAAE,CAAC;IAqBT,YAAY,CACzB,KAAK,EAAE,UAAU,EACjB,MAAM,EAAE,kBAAkB,GACzB,OAAO,CAAC,UAAU,CAAC;CAavB"}
@@ -0,0 +1,445 @@
1
+ /**
2
+ * FAL AI Provider — wraps the @fal-ai/client SDK to provide image generation
3
+ * through the standard BaseProvider interface.
4
+ *
5
+ * Supports: textToImage, imageToImage, getAvailableImageModels
6
+ */
7
+ import { createRequire } from "node:module";
8
+ import { BaseProvider } from "./base-provider.js";
9
+ import { createLogger } from "@nodetool-ai/config";
10
+ import { loadImageModels, loadVideoModels } from "./manifest-models.js";
11
+ const log = createLogger("nodetool.runtime.providers.fal");
12
+ const FAL_MANIFEST_PKG = "@nodetool-ai/fal-nodes";
13
+ const FAL_MANIFEST_PATH = "fal-manifest.json";
14
+ let _falManifestByEndpoint = null;
15
+ function getFalManifestEntry(modelId) {
16
+ if (!_falManifestByEndpoint) {
17
+ _falManifestByEndpoint = new Map();
18
+ try {
19
+ const req = createRequire(import.meta.url);
20
+ const data = req(`${FAL_MANIFEST_PKG}/${FAL_MANIFEST_PATH}`);
21
+ for (const entry of data) {
22
+ if (entry.endpointId)
23
+ _falManifestByEndpoint.set(entry.endpointId, entry);
24
+ }
25
+ }
26
+ catch (err) {
27
+ log.warn(`Could not load fal manifest for arg shaping: ${err}`);
28
+ }
29
+ }
30
+ return _falManifestByEndpoint.get(modelId);
31
+ }
32
+ /**
33
+ * Helper bound to one endpoint that adds keys only when the manifest declares
34
+ * them, and attaches asset URLs to whatever field name/shape the endpoint
35
+ * actually expects. Falls back to permissive behavior when the endpoint isn't
36
+ * in the manifest, so unknown models keep working as before.
37
+ */
38
+ class FalArgsBuilder {
39
+ args = {};
40
+ fields;
41
+ accepted;
42
+ known;
43
+ constructor(modelId) {
44
+ const entry = getFalManifestEntry(modelId);
45
+ this.known = entry != null;
46
+ this.fields = entry?.inputFields ?? [];
47
+ this.accepted = new Map(this.fields.map((f) => [f.apiParamName ?? f.name, f]));
48
+ }
49
+ /** True when the endpoint declares `apiName` (or always-true for unknown endpoints). */
50
+ has(apiName) {
51
+ return this.known ? this.accepted.has(apiName) : true;
52
+ }
53
+ /** propType for a manifest field by API name, lowercased. */
54
+ propType(apiName) {
55
+ return this.accepted.get(apiName)?.propType.toLowerCase();
56
+ }
57
+ /** Set `apiName` to `value` only if the endpoint accepts it (or unknown). */
58
+ set(apiName, value) {
59
+ if (value == null)
60
+ return this;
61
+ if (typeof value === "string" && value === "")
62
+ return this;
63
+ if (this.has(apiName))
64
+ this.args[apiName] = value;
65
+ return this;
66
+ }
67
+ /** Same as set() but always writes (used for required canonical keys like prompt). */
68
+ force(apiName, value) {
69
+ if (value != null)
70
+ this.args[apiName] = value;
71
+ return this;
72
+ }
73
+ /**
74
+ * Attach an uploaded asset URL to whatever field (image/video/audio) the
75
+ * endpoint declares. Handles list-typed fields (`list[image]` -> array).
76
+ * If the endpoint isn't in the manifest, falls back to `${kind}_url`.
77
+ */
78
+ attachAsset(kind, url, fallbackApiName) {
79
+ const field = this.fields.find((f) => {
80
+ const t = f.propType.toLowerCase();
81
+ return t === kind || t === `list[${kind}]`;
82
+ });
83
+ if (field) {
84
+ const apiName = field.apiParamName ?? field.name;
85
+ this.args[apiName] = field.propType.toLowerCase().startsWith("list[")
86
+ ? [url]
87
+ : url;
88
+ }
89
+ else {
90
+ this.args[fallbackApiName ?? `${kind}_url`] = url;
91
+ }
92
+ return this;
93
+ }
94
+ /**
95
+ * Set `image_size`. fal endpoints typically declare it as an enum string
96
+ * ("square_hd", ...) — passing `{width, height}` to those returns 422. Only
97
+ * write the dict shape when the manifest field exists and isn't enum.
98
+ */
99
+ setImageSize(width, height) {
100
+ if (!width || !height)
101
+ return this;
102
+ const t = this.propType("image_size");
103
+ if (!this.known) {
104
+ this.args.image_size = { width, height };
105
+ }
106
+ else if (t && t !== "enum") {
107
+ this.args.image_size = { width, height };
108
+ }
109
+ return this;
110
+ }
111
+ /**
112
+ * Validate `value` against a manifest field's enum. Returns the value if
113
+ * accepted, otherwise undefined (so we drop it rather than 422 the request).
114
+ * Returns the value as-is when the endpoint isn't in the manifest or the
115
+ * field isn't an enum, so we don't block unknown endpoints.
116
+ */
117
+ acceptedEnumValue(apiName, value) {
118
+ if (!value)
119
+ return undefined;
120
+ if (!this.known)
121
+ return value;
122
+ const field = this.accepted.get(apiName);
123
+ if (!field)
124
+ return undefined;
125
+ if (field.propType.toLowerCase() !== "enum")
126
+ return value;
127
+ const enumValues = field
128
+ .enumValues;
129
+ if (!enumValues || enumValues.length === 0)
130
+ return value;
131
+ return enumValues.includes(value) ? value : undefined;
132
+ }
133
+ /**
134
+ * Route an aspect ratio + resolution pair to whichever of the endpoint's
135
+ * size-shaping enum fields it actually declares: `aspect_ratio`,
136
+ * `resolution`, `video_size`, `image_size`. Values that don't match the
137
+ * field's enum are dropped rather than sent (fal returns 422 for those).
138
+ *
139
+ * aspectRatio: "1:1" | "16:9" | "9:16" | "4:3" | "3:4" | "21:9" | ...
140
+ * resolution: "720p" | "1080p" | "1K" | ...
141
+ */
142
+ setSize(aspectRatio, resolution) {
143
+ const ar = this.acceptedEnumValue("aspect_ratio", aspectRatio);
144
+ if (ar)
145
+ this.args.aspect_ratio = ar;
146
+ const res = this.acceptedEnumValue("resolution", resolution);
147
+ if (res)
148
+ this.args.resolution = res;
149
+ // `video_size` / `image_size` enums share the orientation_NxM vocabulary
150
+ // (square_hd, square, portrait_4_3, portrait_16_9, landscape_4_3, ...).
151
+ // Derive from aspectRatio rather than asking the caller for yet another
152
+ // distinct knob.
153
+ const sized = aspectRatioToSizeEnum(aspectRatio);
154
+ for (const apiName of ["video_size", "image_size"]) {
155
+ // Only set if not already set (e.g. setImageSize() may have written
156
+ // image_size as a dict for endpoints that accept that shape).
157
+ if (apiName in this.args)
158
+ continue;
159
+ const v = this.acceptedEnumValue(apiName, sized);
160
+ if (v)
161
+ this.args[apiName] = v;
162
+ }
163
+ return this;
164
+ }
165
+ }
166
+ /**
167
+ * Map common aspect ratios to fal's image_size / video_size enum vocabulary.
168
+ * Returns undefined for ratios fal doesn't have a native enum for; the caller
169
+ * will then drop the field rather than risk a 422.
170
+ */
171
+ function aspectRatioToSizeEnum(aspectRatio) {
172
+ if (!aspectRatio)
173
+ return undefined;
174
+ switch (aspectRatio) {
175
+ case "1:1":
176
+ return "square_hd";
177
+ case "16:9":
178
+ return "landscape_16_9";
179
+ case "9:16":
180
+ return "portrait_16_9";
181
+ case "4:3":
182
+ return "landscape_4_3";
183
+ case "3:4":
184
+ return "portrait_4_3";
185
+ case "auto":
186
+ return "auto";
187
+ default:
188
+ return undefined;
189
+ }
190
+ }
191
+ export class FalProvider extends BaseProvider {
192
+ apiKey;
193
+ _client = null;
194
+ static requiredSecrets() {
195
+ return ["FAL_API_KEY"];
196
+ }
197
+ constructor(secrets = {}) {
198
+ super("fal_ai");
199
+ this.apiKey = secrets["FAL_API_KEY"] ?? "";
200
+ }
201
+ /** Build an onQueueUpdate callback that forwards progress via emitMessage. */
202
+ makeQueueUpdateHandler() {
203
+ let tick = 0;
204
+ return (update) => {
205
+ if (update.status === "IN_PROGRESS") {
206
+ tick++;
207
+ const logs = update.logs ?? [];
208
+ // Emit one message per log line; if no logs, emit a heartbeat tick
209
+ if (logs.length > 0) {
210
+ for (const entry of logs) {
211
+ this.emitMessage({
212
+ type: "node_progress",
213
+ node_id: "",
214
+ progress: tick,
215
+ total: 0,
216
+ chunk: entry.message
217
+ });
218
+ }
219
+ }
220
+ else {
221
+ this.emitMessage({
222
+ type: "node_progress",
223
+ node_id: "",
224
+ progress: tick,
225
+ total: 0,
226
+ chunk: ""
227
+ });
228
+ }
229
+ }
230
+ };
231
+ }
232
+ async getClient() {
233
+ if (this._client)
234
+ return this._client;
235
+ const { createFalClient } = await import("@fal-ai/client");
236
+ this._client = createFalClient({
237
+ credentials: this.apiKey
238
+ });
239
+ return this._client;
240
+ }
241
+ async getAvailableImageModels() {
242
+ return loadImageModels(FAL_MANIFEST_PKG, FAL_MANIFEST_PATH, "fal_ai");
243
+ }
244
+ async getAvailableVideoModels() {
245
+ return loadVideoModels(FAL_MANIFEST_PKG, FAL_MANIFEST_PATH, "fal_ai");
246
+ }
247
+ async generateMessage(_args) {
248
+ throw new Error("fal_ai does not support chat generation");
249
+ }
250
+ async *generateMessages(_args) {
251
+ throw new Error("fal_ai does not support chat generation");
252
+ }
253
+ buildTextToImageArgs(modelId, params) {
254
+ const b = new FalArgsBuilder(modelId);
255
+ b.force("prompt", params.prompt)
256
+ .set("output_format", "png")
257
+ .set("negative_prompt", params.negativePrompt)
258
+ .set("guidance_scale", params.guidanceScale)
259
+ .set("num_inference_steps", params.numInferenceSteps)
260
+ .setImageSize(params.width, params.height)
261
+ .setSize(params.aspectRatio, params.resolution);
262
+ if (params.seed != null && params.seed !== -1)
263
+ b.set("seed", params.seed);
264
+ return b.args;
265
+ }
266
+ async buildImageToImageArgs(modelId, image, params) {
267
+ const client = await this.getClient();
268
+ const blob = new Blob([image], { type: "image/png" });
269
+ const uploadedUrl = await client.storage.upload(blob);
270
+ const b = new FalArgsBuilder(modelId);
271
+ b.attachAsset("image", uploadedUrl)
272
+ .force("prompt", params.prompt)
273
+ .set("output_format", "png")
274
+ .set("negative_prompt", params.negativePrompt)
275
+ .set("guidance_scale", params.guidanceScale)
276
+ .set("num_inference_steps", params.numInferenceSteps)
277
+ .set("strength", params.strength)
278
+ .setImageSize(params.targetWidth, params.targetHeight)
279
+ .setSize(params.aspectRatio, params.resolution);
280
+ if (params.seed != null && params.seed !== -1)
281
+ b.set("seed", params.seed);
282
+ return b.args;
283
+ }
284
+ buildTextToVideoArgs(modelId, params) {
285
+ const b = new FalArgsBuilder(modelId);
286
+ b.force("prompt", params.prompt)
287
+ .set("negative_prompt", params.negativePrompt)
288
+ .set("num_frames", params.numFrames)
289
+ .set("duration", params.durationSeconds)
290
+ .set("guidance_scale", params.guidanceScale)
291
+ .setSize(params.aspectRatio, params.resolution);
292
+ if (params.seed != null && params.seed !== -1)
293
+ b.set("seed", params.seed);
294
+ return b.args;
295
+ }
296
+ async buildImageToVideoArgs(modelId, image, params) {
297
+ const client = await this.getClient();
298
+ const blob = new Blob([image], { type: "image/png" });
299
+ const uploadedUrl = await client.storage.upload(blob);
300
+ const b = new FalArgsBuilder(modelId);
301
+ b.attachAsset("image", uploadedUrl)
302
+ .set("prompt", params.prompt)
303
+ .set("negative_prompt", params.negativePrompt)
304
+ .set("num_frames", params.numFrames)
305
+ .set("duration", params.durationSeconds)
306
+ .set("guidance_scale", params.guidanceScale)
307
+ .setSize(params.aspectRatio, params.resolution);
308
+ if (params.seed != null && params.seed !== -1)
309
+ b.set("seed", params.seed);
310
+ return b.args;
311
+ }
312
+ async textToImage(params) {
313
+ const client = await this.getClient();
314
+ const modelId = params.model.id;
315
+ const args = this.buildTextToImageArgs(modelId, params);
316
+ log.debug("FAL textToImage", { model: modelId });
317
+ const result = await client.subscribe(modelId, {
318
+ input: args,
319
+ logs: true,
320
+ onQueueUpdate: this.makeQueueUpdateHandler()
321
+ });
322
+ const data = (result.data ?? result);
323
+ return downloadBytes(extractImageUrl(data));
324
+ }
325
+ async imageToImage(image, params) {
326
+ const client = await this.getClient();
327
+ const modelId = params.model.id;
328
+ const args = await this.buildImageToImageArgs(modelId, image, params);
329
+ log.debug("FAL imageToImage", { model: modelId });
330
+ const result = await client.subscribe(modelId, {
331
+ input: args,
332
+ logs: true,
333
+ onQueueUpdate: this.makeQueueUpdateHandler()
334
+ });
335
+ const data = (result.data ?? result);
336
+ return downloadBytes(extractImageUrl(data));
337
+ }
338
+ async textToVideo(params) {
339
+ const client = await this.getClient();
340
+ const modelId = params.model.id;
341
+ const args = this.buildTextToVideoArgs(modelId, params);
342
+ log.debug("FAL textToVideo", { model: modelId });
343
+ const result = await client.subscribe(modelId, {
344
+ input: args,
345
+ logs: true,
346
+ onQueueUpdate: this.makeQueueUpdateHandler()
347
+ });
348
+ const data = (result.data ?? result);
349
+ return downloadBytes(extractVideoUrl(data));
350
+ }
351
+ async imageToImages(image, params, numImages) {
352
+ if (numImages <= 1) {
353
+ return [await this.imageToImage(image, params)];
354
+ }
355
+ const client = await this.getClient();
356
+ const modelId = params.model.id;
357
+ const args = await this.buildImageToImageArgs(modelId, image, params);
358
+ if (new FalArgsBuilder(modelId).has("num_images")) {
359
+ args.num_images = numImages;
360
+ }
361
+ log.debug("FAL imageToImages", { model: modelId, numImages });
362
+ const result = await client.subscribe(modelId, {
363
+ input: args,
364
+ logs: true,
365
+ onQueueUpdate: this.makeQueueUpdateHandler()
366
+ });
367
+ const data = (result.data ?? result);
368
+ const urls = extractImageUrls(data);
369
+ return Promise.all(urls.map(downloadBytes));
370
+ }
371
+ async textToImages(params, numImages) {
372
+ if (numImages <= 1) {
373
+ return [await this.textToImage(params)];
374
+ }
375
+ const client = await this.getClient();
376
+ const modelId = params.model.id;
377
+ const args = this.buildTextToImageArgs(modelId, params);
378
+ if (new FalArgsBuilder(modelId).has("num_images")) {
379
+ args.num_images = numImages;
380
+ }
381
+ log.debug("FAL textToImages", { model: modelId, numImages });
382
+ const result = await client.subscribe(modelId, {
383
+ input: args,
384
+ logs: true,
385
+ onQueueUpdate: this.makeQueueUpdateHandler()
386
+ });
387
+ const data = (result.data ?? result);
388
+ const urls = extractImageUrls(data);
389
+ return Promise.all(urls.map(downloadBytes));
390
+ }
391
+ async imageToVideo(image, params) {
392
+ const client = await this.getClient();
393
+ const modelId = params.model.id;
394
+ const args = await this.buildImageToVideoArgs(modelId, image, params);
395
+ log.debug("FAL imageToVideo", { model: modelId });
396
+ const result = await client.subscribe(modelId, {
397
+ input: args,
398
+ logs: true,
399
+ onQueueUpdate: this.makeQueueUpdateHandler()
400
+ });
401
+ const data = (result.data ?? result);
402
+ return downloadBytes(extractVideoUrl(data));
403
+ }
404
+ }
405
+ function extractImageUrls(result) {
406
+ const images = result.images;
407
+ if (images && images.length > 0) {
408
+ const urls = images.map((img) => img.url).filter(Boolean);
409
+ if (urls.length > 0)
410
+ return urls;
411
+ }
412
+ const image = result.image;
413
+ if (image?.url)
414
+ return [image.url];
415
+ throw new Error(`Unexpected FAL image response: ${JSON.stringify(result)}`);
416
+ }
417
+ function extractImageUrl(result) {
418
+ return extractImageUrls(result)[0];
419
+ }
420
+ function extractVideoUrl(result) {
421
+ // FAL video endpoints return { video: { url } } or { video_url } or { url }
422
+ const video = result.video;
423
+ if (video?.url)
424
+ return video.url;
425
+ if (typeof result.video_url === "string")
426
+ return result.video_url;
427
+ if (typeof result.url === "string")
428
+ return result.url;
429
+ // Some endpoints return an array of videos
430
+ const videos = result.videos;
431
+ if (videos && videos.length > 0) {
432
+ const url = videos[0].url;
433
+ if (url)
434
+ return url;
435
+ }
436
+ throw new Error(`Unexpected FAL video response: ${JSON.stringify(result)}`);
437
+ }
438
+ async function downloadBytes(url) {
439
+ const res = await fetch(url);
440
+ if (!res.ok)
441
+ throw new Error(`Failed to download FAL result: ${res.status}`);
442
+ const buf = await res.arrayBuffer();
443
+ return new Uint8Array(buf);
444
+ }
445
+ //# sourceMappingURL=fal-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fal-provider.js","sourceRoot":"","sources":["../../src/providers/fal-provider.ts"],"names":[],"mappings":"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"}