@workglow/ai-provider 0.0.126 → 0.1.0

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 (172) hide show
  1. package/dist/provider-anthropic/AnthropicProvider.d.ts +1 -1
  2. package/dist/provider-anthropic/AnthropicProvider.d.ts.map +1 -1
  3. package/dist/provider-anthropic/AnthropicQueuedProvider.d.ts +4 -4
  4. package/dist/provider-anthropic/AnthropicQueuedProvider.d.ts.map +1 -1
  5. package/dist/provider-anthropic/common/Anthropic_Client.d.ts.map +1 -1
  6. package/dist/provider-anthropic/common/Anthropic_CountTokens.d.ts.map +1 -1
  7. package/dist/provider-anthropic/common/Anthropic_JobRunFns.d.ts.map +1 -1
  8. package/dist/provider-anthropic/common/Anthropic_TextGeneration.d.ts.map +1 -1
  9. package/dist/provider-anthropic/common/Anthropic_TextRewriter.d.ts.map +1 -1
  10. package/dist/provider-anthropic/common/Anthropic_TextSummary.d.ts.map +1 -1
  11. package/dist/provider-anthropic/index.js +3 -4
  12. package/dist/provider-anthropic/index.js.map +3 -3
  13. package/dist/provider-anthropic/runtime.js +19 -291
  14. package/dist/provider-anthropic/runtime.js.map +11 -12
  15. package/dist/provider-chrome/common/WebBrowser_TextGeneration.d.ts.map +1 -1
  16. package/dist/provider-chrome/common/WebBrowser_TextLanguageDetection.d.ts.map +1 -1
  17. package/dist/provider-chrome/common/WebBrowser_TextRewriter.d.ts.map +1 -1
  18. package/dist/provider-chrome/common/WebBrowser_TextSummary.d.ts.map +1 -1
  19. package/dist/provider-chrome/common/WebBrowser_TextTranslation.d.ts.map +1 -1
  20. package/dist/provider-chrome/runtime.js +3 -97
  21. package/dist/provider-chrome/runtime.js.map +8 -8
  22. package/dist/provider-gemini/GoogleGeminiProvider.d.ts +1 -1
  23. package/dist/provider-gemini/GoogleGeminiProvider.d.ts.map +1 -1
  24. package/dist/provider-gemini/GoogleGeminiQueuedProvider.d.ts +4 -4
  25. package/dist/provider-gemini/GoogleGeminiQueuedProvider.d.ts.map +1 -1
  26. package/dist/provider-gemini/common/Gemini_CountTokens.d.ts.map +1 -1
  27. package/dist/provider-gemini/common/Gemini_JobRunFns.d.ts.map +1 -1
  28. package/dist/provider-gemini/common/Gemini_TextEmbedding.d.ts.map +1 -1
  29. package/dist/provider-gemini/common/Gemini_TextGeneration.d.ts.map +1 -1
  30. package/dist/provider-gemini/common/Gemini_TextRewriter.d.ts.map +1 -1
  31. package/dist/provider-gemini/common/Gemini_TextSummary.d.ts.map +1 -1
  32. package/dist/provider-gemini/index.js +3 -4
  33. package/dist/provider-gemini/index.js.map +3 -3
  34. package/dist/provider-gemini/runtime.js +12 -257
  35. package/dist/provider-gemini/runtime.js.map +11 -12
  36. package/dist/provider-hf-inference/HfInferenceProvider.d.ts +1 -1
  37. package/dist/provider-hf-inference/HfInferenceProvider.d.ts.map +1 -1
  38. package/dist/provider-hf-inference/HfInferenceQueuedProvider.d.ts +4 -4
  39. package/dist/provider-hf-inference/HfInferenceQueuedProvider.d.ts.map +1 -1
  40. package/dist/provider-hf-inference/common/HFI_Client.d.ts.map +1 -1
  41. package/dist/provider-hf-inference/common/HFI_JobRunFns.d.ts.map +1 -1
  42. package/dist/provider-hf-inference/common/HFI_TextEmbedding.d.ts.map +1 -1
  43. package/dist/provider-hf-inference/common/HFI_TextGeneration.d.ts.map +1 -1
  44. package/dist/provider-hf-inference/common/HFI_TextRewriter.d.ts.map +1 -1
  45. package/dist/provider-hf-inference/common/HFI_TextSummary.d.ts.map +1 -1
  46. package/dist/provider-hf-inference/index.js +3 -4
  47. package/dist/provider-hf-inference/index.js.map +3 -3
  48. package/dist/provider-hf-inference/runtime.js +13 -206
  49. package/dist/provider-hf-inference/runtime.js.map +11 -12
  50. package/dist/provider-hf-transformers/HuggingFaceTransformersProvider.d.ts +1 -1
  51. package/dist/provider-hf-transformers/HuggingFaceTransformersProvider.d.ts.map +1 -1
  52. package/dist/provider-hf-transformers/HuggingFaceTransformersQueuedProvider.d.ts +13 -3
  53. package/dist/provider-hf-transformers/HuggingFaceTransformersQueuedProvider.d.ts.map +1 -1
  54. package/dist/provider-hf-transformers/common/HFT_Constants.d.ts +4 -0
  55. package/dist/provider-hf-transformers/common/HFT_Constants.d.ts.map +1 -1
  56. package/dist/provider-hf-transformers/common/HFT_CountTokens.d.ts.map +1 -1
  57. package/dist/provider-hf-transformers/common/HFT_Download.d.ts.map +1 -1
  58. package/dist/provider-hf-transformers/common/HFT_ImageEmbedding.d.ts.map +1 -1
  59. package/dist/provider-hf-transformers/common/HFT_JobRunFns.d.ts +116 -87
  60. package/dist/provider-hf-transformers/common/HFT_JobRunFns.d.ts.map +1 -1
  61. package/dist/provider-hf-transformers/common/HFT_ModelInfo.d.ts.map +1 -1
  62. package/dist/provider-hf-transformers/common/HFT_ModelSchema.d.ts +30 -0
  63. package/dist/provider-hf-transformers/common/HFT_ModelSchema.d.ts.map +1 -1
  64. package/dist/provider-hf-transformers/common/HFT_OnnxDtypes.d.ts.map +1 -1
  65. package/dist/provider-hf-transformers/common/HFT_Pipeline.d.ts +9 -2
  66. package/dist/provider-hf-transformers/common/HFT_Pipeline.d.ts.map +1 -1
  67. package/dist/provider-hf-transformers/common/HFT_Streaming.d.ts +2 -2
  68. package/dist/provider-hf-transformers/common/HFT_Streaming.d.ts.map +1 -1
  69. package/dist/provider-hf-transformers/common/HFT_TextClassification.d.ts.map +1 -1
  70. package/dist/provider-hf-transformers/common/HFT_TextFillMask.d.ts.map +1 -1
  71. package/dist/provider-hf-transformers/common/HFT_TextGeneration.d.ts.map +1 -1
  72. package/dist/provider-hf-transformers/common/HFT_TextLanguageDetection.d.ts.map +1 -1
  73. package/dist/provider-hf-transformers/common/HFT_TextNamedEntityRecognition.d.ts.map +1 -1
  74. package/dist/provider-hf-transformers/common/HFT_TextQuestionAnswer.d.ts.map +1 -1
  75. package/dist/provider-hf-transformers/common/HFT_TextRewriter.d.ts.map +1 -1
  76. package/dist/provider-hf-transformers/common/HFT_TextSummary.d.ts.map +1 -1
  77. package/dist/provider-hf-transformers/common/HFT_TextTranslation.d.ts.map +1 -1
  78. package/dist/provider-hf-transformers/index.d.ts +0 -1
  79. package/dist/provider-hf-transformers/index.d.ts.map +1 -1
  80. package/dist/provider-hf-transformers/index.js +49 -177
  81. package/dist/provider-hf-transformers/index.js.map +8 -9
  82. package/dist/provider-hf-transformers/registerHuggingFaceTransformersWorker.d.ts.map +1 -1
  83. package/dist/provider-hf-transformers/runtime.d.ts +0 -1
  84. package/dist/provider-hf-transformers/runtime.d.ts.map +1 -1
  85. package/dist/provider-hf-transformers/runtime.js +208 -513
  86. package/dist/provider-hf-transformers/runtime.js.map +27 -29
  87. package/dist/provider-llamacpp/LlamaCppProvider.d.ts +1 -1
  88. package/dist/provider-llamacpp/LlamaCppProvider.d.ts.map +1 -1
  89. package/dist/provider-llamacpp/LlamaCppQueuedProvider.d.ts +1 -1
  90. package/dist/provider-llamacpp/LlamaCppQueuedProvider.d.ts.map +1 -1
  91. package/dist/provider-llamacpp/common/LlamaCpp_CountTokens.d.ts.map +1 -1
  92. package/dist/provider-llamacpp/common/LlamaCpp_JobRunFns.d.ts.map +1 -1
  93. package/dist/provider-llamacpp/common/LlamaCpp_ModelSchema.d.ts +15 -0
  94. package/dist/provider-llamacpp/common/LlamaCpp_ModelSchema.d.ts.map +1 -1
  95. package/dist/provider-llamacpp/common/LlamaCpp_Runtime.d.ts +10 -0
  96. package/dist/provider-llamacpp/common/LlamaCpp_Runtime.d.ts.map +1 -1
  97. package/dist/provider-llamacpp/common/LlamaCpp_StructuredGeneration.d.ts.map +1 -1
  98. package/dist/provider-llamacpp/common/LlamaCpp_TextEmbedding.d.ts.map +1 -1
  99. package/dist/provider-llamacpp/common/LlamaCpp_TextGeneration.d.ts.map +1 -1
  100. package/dist/provider-llamacpp/common/LlamaCpp_TextRewriter.d.ts.map +1 -1
  101. package/dist/provider-llamacpp/common/LlamaCpp_TextSummary.d.ts.map +1 -1
  102. package/dist/provider-llamacpp/index.js +6 -2
  103. package/dist/provider-llamacpp/index.js.map +4 -4
  104. package/dist/provider-llamacpp/runtime.js +82 -230
  105. package/dist/provider-llamacpp/runtime.js.map +13 -14
  106. package/dist/provider-ollama/OllamaProvider.d.ts +1 -1
  107. package/dist/provider-ollama/OllamaProvider.d.ts.map +1 -1
  108. package/dist/provider-ollama/OllamaQueuedProvider.d.ts +4 -4
  109. package/dist/provider-ollama/OllamaQueuedProvider.d.ts.map +1 -1
  110. package/dist/provider-ollama/common/Ollama_JobRunFns.browser.d.ts +13 -71
  111. package/dist/provider-ollama/common/Ollama_JobRunFns.browser.d.ts.map +1 -1
  112. package/dist/provider-ollama/common/Ollama_JobRunFns.d.ts +13 -71
  113. package/dist/provider-ollama/common/Ollama_JobRunFns.d.ts.map +1 -1
  114. package/dist/provider-ollama/common/Ollama_TextGeneration.d.ts.map +1 -1
  115. package/dist/provider-ollama/common/Ollama_TextRewriter.d.ts.map +1 -1
  116. package/dist/provider-ollama/common/Ollama_TextSummary.d.ts.map +1 -1
  117. package/dist/provider-ollama/index.browser.js +3 -4
  118. package/dist/provider-ollama/index.browser.js.map +3 -3
  119. package/dist/provider-ollama/index.js +3 -4
  120. package/dist/provider-ollama/index.js.map +3 -3
  121. package/dist/provider-ollama/runtime.browser.js +8 -179
  122. package/dist/provider-ollama/runtime.browser.js.map +9 -10
  123. package/dist/provider-ollama/runtime.js +8 -174
  124. package/dist/provider-ollama/runtime.js.map +9 -10
  125. package/dist/provider-openai/OpenAiProvider.d.ts +1 -1
  126. package/dist/provider-openai/OpenAiProvider.d.ts.map +1 -1
  127. package/dist/provider-openai/OpenAiQueuedProvider.d.ts +4 -4
  128. package/dist/provider-openai/OpenAiQueuedProvider.d.ts.map +1 -1
  129. package/dist/provider-openai/common/OpenAI_Client.d.ts.map +1 -1
  130. package/dist/provider-openai/common/OpenAI_CountTokens.browser.d.ts.map +1 -1
  131. package/dist/provider-openai/common/OpenAI_CountTokens.d.ts.map +1 -1
  132. package/dist/provider-openai/common/OpenAI_JobRunFns.browser.d.ts.map +1 -1
  133. package/dist/provider-openai/common/OpenAI_JobRunFns.d.ts.map +1 -1
  134. package/dist/provider-openai/common/OpenAI_TextEmbedding.d.ts.map +1 -1
  135. package/dist/provider-openai/common/OpenAI_TextGeneration.d.ts.map +1 -1
  136. package/dist/provider-openai/common/OpenAI_TextRewriter.d.ts.map +1 -1
  137. package/dist/provider-openai/common/OpenAI_TextSummary.d.ts.map +1 -1
  138. package/dist/provider-openai/index.browser.js +3 -4
  139. package/dist/provider-openai/index.browser.js.map +3 -3
  140. package/dist/provider-openai/index.js +3 -4
  141. package/dist/provider-openai/index.js.map +3 -3
  142. package/dist/provider-openai/runtime.browser.js +22 -224
  143. package/dist/provider-openai/runtime.browser.js.map +12 -13
  144. package/dist/provider-openai/runtime.js +22 -224
  145. package/dist/provider-openai/runtime.js.map +12 -13
  146. package/dist/provider-tf-mediapipe/TensorFlowMediaPipeQueuedProvider.d.ts +3 -3
  147. package/dist/provider-tf-mediapipe/TensorFlowMediaPipeQueuedProvider.d.ts.map +1 -1
  148. package/dist/provider-tf-mediapipe/common/TFMP_ImageEmbedding.d.ts.map +1 -1
  149. package/dist/provider-tf-mediapipe/common/TFMP_JobRunFns.d.ts +17 -10
  150. package/dist/provider-tf-mediapipe/common/TFMP_JobRunFns.d.ts.map +1 -1
  151. package/dist/provider-tf-mediapipe/common/TFMP_Unload.d.ts.map +1 -1
  152. package/dist/provider-tf-mediapipe/index.js +3 -3
  153. package/dist/provider-tf-mediapipe/index.js.map +3 -3
  154. package/dist/provider-tf-mediapipe/runtime.js +16 -5
  155. package/dist/provider-tf-mediapipe/runtime.js.map +5 -5
  156. package/package.json +15 -15
  157. package/dist/provider-anthropic/common/Anthropic_ToolCalling.d.ts +0 -10
  158. package/dist/provider-anthropic/common/Anthropic_ToolCalling.d.ts.map +0 -1
  159. package/dist/provider-gemini/common/Gemini_ToolCalling.d.ts +0 -10
  160. package/dist/provider-gemini/common/Gemini_ToolCalling.d.ts.map +0 -1
  161. package/dist/provider-hf-inference/common/HFI_ToolCalling.d.ts +0 -10
  162. package/dist/provider-hf-inference/common/HFI_ToolCalling.d.ts.map +0 -1
  163. package/dist/provider-hf-transformers/common/HFT_ToolCalling.d.ts +0 -10
  164. package/dist/provider-hf-transformers/common/HFT_ToolCalling.d.ts.map +0 -1
  165. package/dist/provider-hf-transformers/common/HFT_ToolMarkup.d.ts +0 -40
  166. package/dist/provider-hf-transformers/common/HFT_ToolMarkup.d.ts.map +0 -1
  167. package/dist/provider-llamacpp/common/LlamaCpp_ToolCalling.d.ts +0 -10
  168. package/dist/provider-llamacpp/common/LlamaCpp_ToolCalling.d.ts.map +0 -1
  169. package/dist/provider-ollama/common/Ollama_ToolCalling.d.ts +0 -16
  170. package/dist/provider-ollama/common/Ollama_ToolCalling.d.ts.map +0 -1
  171. package/dist/provider-openai/common/OpenAI_ToolCalling.d.ts +0 -10
  172. package/dist/provider-openai/common/OpenAI_ToolCalling.d.ts.map +0 -1
@@ -26,12 +26,16 @@ async function getClient(model) {
26
26
  if (!apiKey) {
27
27
  throw new Error("Missing OpenAI API key: set provider_config.credential_key or the OPENAI_API_KEY environment variable.");
28
28
  }
29
- return new OpenAI({
30
- apiKey,
31
- baseURL: config?.base_url || undefined,
32
- organization: config?.organization || undefined,
33
- dangerouslyAllowBrowser: true
34
- });
29
+ try {
30
+ return new OpenAI({
31
+ apiKey,
32
+ baseURL: config?.base_url || undefined,
33
+ organization: config?.organization || undefined,
34
+ dangerouslyAllowBrowser: typeof globalThis.document !== "undefined" || "WorkerGlobalScope" in globalThis
35
+ });
36
+ } catch (err) {
37
+ throw new Error(`Failed to create OpenAI client: ${err instanceof Error ? err.message : "unknown error"}`);
38
+ }
35
39
  }
36
40
  function getModelName(model) {
37
41
  const name = model?.provider_config?.model_name;
@@ -117,7 +121,6 @@ var OpenAI_ModelSearch = async (input) => {
117
121
  };
118
122
 
119
123
  // src/provider-openai/common/OpenAI_CountTokens.browser.ts
120
- import { getLogger } from "@workglow/util/worker";
121
124
  var _tiktoken;
122
125
  async function loadTiktoken() {
123
126
  if (!_tiktoken) {
@@ -146,16 +149,6 @@ async function getEncoder(modelName) {
146
149
  return _encoderCache.get(modelName);
147
150
  }
148
151
  var OpenAI_CountTokens = async (input, model) => {
149
- if (Array.isArray(input.text)) {
150
- getLogger().warn("OpenAI_CountTokens: array input received; processing sequentially (no native batch support)");
151
- const texts = input.text;
152
- const counts = [];
153
- for (const item of texts) {
154
- const r = await OpenAI_CountTokens({ ...input, text: item }, model, () => {}, new AbortController().signal);
155
- counts.push(r.count);
156
- }
157
- return { count: counts };
158
- }
159
152
  const enc = await getEncoder(getModelName(model));
160
153
  const tokens = enc.encode(input.text);
161
154
  return { count: tokens.length };
@@ -243,9 +236,9 @@ var OpenAI_StructuredGeneration_Stream = async function* (input, model, signal,
243
236
  };
244
237
 
245
238
  // src/provider-openai/common/OpenAI_TextEmbedding.ts
246
- import { getLogger as getLogger2 } from "@workglow/util/worker";
239
+ import { getLogger } from "@workglow/util/worker";
247
240
  var OpenAI_TextEmbedding = async (input, model, update_progress, signal) => {
248
- const logger = getLogger2();
241
+ const logger = getLogger();
249
242
  const timerLabel = `openai:TextEmbedding:${model?.provider_config?.model_name}`;
250
243
  logger.time(timerLabel, { model: model?.provider_config?.model_name });
251
244
  update_progress(0, "Starting OpenAI text embedding");
@@ -266,19 +259,9 @@ var OpenAI_TextEmbedding = async (input, model, update_progress, signal) => {
266
259
  };
267
260
 
268
261
  // src/provider-openai/common/OpenAI_TextGeneration.ts
269
- import { getLogger as getLogger3 } from "@workglow/util/worker";
262
+ import { getLogger as getLogger2 } from "@workglow/util/worker";
270
263
  var OpenAI_TextGeneration = async (input, model, update_progress, signal) => {
271
- if (Array.isArray(input.prompt)) {
272
- getLogger3().warn("OpenAI_TextGeneration: array input received; processing sequentially (no native batch support)");
273
- const prompts = input.prompt;
274
- const results = [];
275
- for (const item of prompts) {
276
- const r = await OpenAI_TextGeneration({ ...input, prompt: item }, model, update_progress, signal);
277
- results.push(r.text);
278
- }
279
- return { text: results };
280
- }
281
- const logger = getLogger3();
264
+ const logger = getLogger2();
282
265
  const timerLabel = `openai:TextGeneration:${model?.provider_config?.model_name}`;
283
266
  logger.time(timerLabel, { model: model?.provider_config?.model_name });
284
267
  update_progress(0, "Starting OpenAI text generation");
@@ -320,18 +303,7 @@ var OpenAI_TextGeneration_Stream = async function* (input, model, signal) {
320
303
  };
321
304
 
322
305
  // src/provider-openai/common/OpenAI_TextRewriter.ts
323
- import { getLogger as getLogger4 } from "@workglow/util/worker";
324
306
  var OpenAI_TextRewriter = async (input, model, update_progress, signal) => {
325
- if (Array.isArray(input.text)) {
326
- getLogger4().warn("OpenAI_TextRewriter: array input received; processing sequentially (no native batch support)");
327
- const texts = input.text;
328
- const results = [];
329
- for (const item of texts) {
330
- const r = await OpenAI_TextRewriter({ ...input, text: item }, model, update_progress, signal);
331
- results.push(r.text);
332
- }
333
- return { text: results };
334
- }
335
307
  update_progress(0, "Starting OpenAI text rewriting");
336
308
  const client = await getClient(model);
337
309
  const modelName = getModelName(model);
@@ -366,18 +338,7 @@ var OpenAI_TextRewriter_Stream = async function* (input, model, signal) {
366
338
  };
367
339
 
368
340
  // src/provider-openai/common/OpenAI_TextSummary.ts
369
- import { getLogger as getLogger5 } from "@workglow/util/worker";
370
341
  var OpenAI_TextSummary = async (input, model, update_progress, signal) => {
371
- if (Array.isArray(input.text)) {
372
- getLogger5().warn("OpenAI_TextSummary: array input received; processing sequentially (no native batch support)");
373
- const texts = input.text;
374
- const results = [];
375
- for (const item of texts) {
376
- const r = await OpenAI_TextSummary({ ...input, text: item }, model, update_progress, signal);
377
- results.push(r.text);
378
- }
379
- return { text: results };
380
- }
381
342
  update_progress(0, "Starting OpenAI text summarization");
382
343
  const client = await getClient(model);
383
344
  const modelName = getModelName(model);
@@ -411,165 +372,6 @@ var OpenAI_TextSummary_Stream = async function* (input, model, signal) {
411
372
  yield { type: "finish", data: {} };
412
373
  };
413
374
 
414
- // src/provider-openai/common/OpenAI_ToolCalling.ts
415
- import { buildToolDescription, filterValidToolCalls, toOpenAIMessages } from "@workglow/ai/worker";
416
- import { getLogger as getLogger6, parsePartialJson as parsePartialJson2 } from "@workglow/util/worker";
417
- function mapOpenAIToolChoice(toolChoice) {
418
- if (!toolChoice || toolChoice === "auto")
419
- return "auto";
420
- if (toolChoice === "none")
421
- return "none";
422
- if (toolChoice === "required")
423
- return "required";
424
- return { type: "function", function: { name: toolChoice } };
425
- }
426
- var OpenAI_ToolCalling = async (input, model, update_progress, signal) => {
427
- if (Array.isArray(input.prompt)) {
428
- getLogger6().warn("OpenAI_ToolCalling: array input received; processing sequentially (no native batch support)");
429
- const prompts = input.prompt;
430
- const texts = [];
431
- const toolCallsList = [];
432
- for (const item of prompts) {
433
- const r = await OpenAI_ToolCalling({ ...input, prompt: item }, model, update_progress, signal);
434
- texts.push(r.text);
435
- toolCallsList.push(r.toolCalls);
436
- }
437
- return { text: texts, toolCalls: toolCallsList };
438
- }
439
- update_progress(0, "Starting OpenAI tool calling");
440
- const client = await getClient(model);
441
- const modelName = getModelName(model);
442
- const tools = input.tools.map((t) => ({
443
- type: "function",
444
- function: {
445
- name: t.name,
446
- description: buildToolDescription(t),
447
- parameters: t.inputSchema
448
- }
449
- }));
450
- const messages = toOpenAIMessages(input);
451
- const toolChoice = mapOpenAIToolChoice(input.toolChoice);
452
- const params = {
453
- model: modelName,
454
- messages,
455
- max_completion_tokens: input.maxTokens,
456
- temperature: input.temperature
457
- };
458
- if (toolChoice !== undefined) {
459
- params.tools = tools;
460
- params.tool_choice = toolChoice;
461
- }
462
- const response = await client.chat.completions.create(params, { signal });
463
- const text = response.choices[0]?.message?.content ?? "";
464
- const toolCalls = [];
465
- for (const tc of response.choices[0]?.message?.tool_calls ?? []) {
466
- if (!("function" in tc))
467
- continue;
468
- const id = tc.id;
469
- const name = tc.function.name;
470
- let inputArgs = {};
471
- const rawArgs = tc.function.arguments;
472
- if (typeof rawArgs === "string") {
473
- try {
474
- inputArgs = JSON.parse(rawArgs);
475
- } catch {
476
- try {
477
- const partial = parsePartialJson2(rawArgs);
478
- if (partial && typeof partial === "object") {
479
- inputArgs = partial;
480
- }
481
- } catch {
482
- inputArgs = {};
483
- }
484
- }
485
- }
486
- toolCalls.push({ id, name, input: inputArgs });
487
- }
488
- update_progress(100, "Completed OpenAI tool calling");
489
- return { text, toolCalls: filterValidToolCalls(toolCalls, input.tools) };
490
- };
491
- var OpenAI_ToolCalling_Stream = async function* (input, model, signal) {
492
- const client = await getClient(model);
493
- const modelName = getModelName(model);
494
- const tools = input.tools.map((t) => ({
495
- type: "function",
496
- function: {
497
- name: t.name,
498
- description: buildToolDescription(t),
499
- parameters: t.inputSchema
500
- }
501
- }));
502
- const messages = toOpenAIMessages(input);
503
- const toolChoice = mapOpenAIToolChoice(input.toolChoice);
504
- const stream = await client.chat.completions.create({
505
- model: modelName,
506
- messages,
507
- max_completion_tokens: input.maxTokens,
508
- temperature: input.temperature,
509
- stream: true,
510
- ...toolChoice !== undefined ? { tools, tool_choice: toolChoice } : {}
511
- }, { signal });
512
- let accumulatedText = "";
513
- const toolCallAccumulator = new Map;
514
- for await (const chunk of stream) {
515
- const choice = chunk.choices[0];
516
- if (!choice)
517
- continue;
518
- const contentDelta = choice.delta?.content ?? "";
519
- if (contentDelta) {
520
- accumulatedText += contentDelta;
521
- yield { type: "text-delta", port: "text", textDelta: contentDelta };
522
- }
523
- const tcDeltas = choice.delta?.tool_calls;
524
- if (Array.isArray(tcDeltas)) {
525
- for (const tcDelta of tcDeltas) {
526
- const idx = tcDelta.index;
527
- if (!toolCallAccumulator.has(idx)) {
528
- toolCallAccumulator.set(idx, {
529
- id: tcDelta.id ?? "",
530
- name: tcDelta.function?.name ?? "",
531
- arguments: ""
532
- });
533
- }
534
- const acc = toolCallAccumulator.get(idx);
535
- if (tcDelta.id)
536
- acc.id = tcDelta.id;
537
- if (tcDelta.function?.name)
538
- acc.name = tcDelta.function.name;
539
- if (tcDelta.function?.arguments)
540
- acc.arguments += tcDelta.function.arguments;
541
- }
542
- const snapshot = [];
543
- for (const [, tc] of toolCallAccumulator) {
544
- let parsedInput;
545
- try {
546
- parsedInput = JSON.parse(tc.arguments);
547
- } catch {
548
- const partial = parsePartialJson2(tc.arguments);
549
- parsedInput = partial ?? {};
550
- }
551
- snapshot.push({ id: tc.id, name: tc.name, input: parsedInput });
552
- }
553
- yield { type: "object-delta", port: "toolCalls", objectDelta: snapshot };
554
- }
555
- }
556
- const toolCalls = [];
557
- for (const [, tc] of toolCallAccumulator) {
558
- let finalInput;
559
- try {
560
- finalInput = JSON.parse(tc.arguments);
561
- } catch {
562
- finalInput = parsePartialJson2(tc.arguments) ?? {};
563
- }
564
- toolCalls.push({ id: tc.id, name: tc.name, input: finalInput });
565
- }
566
- const validToolCalls = filterValidToolCalls(toolCalls, input.tools);
567
- yield {
568
- type: "finish",
569
- data: { text: accumulatedText, toolCalls: validToolCalls }
570
- };
571
- };
572
-
573
375
  // src/provider-openai/common/OpenAI_JobRunFns.browser.ts
574
376
  var OPENAI_TASKS = {
575
377
  TextGenerationTask: OpenAI_TextGeneration,
@@ -579,15 +381,13 @@ var OPENAI_TASKS = {
579
381
  TextSummaryTask: OpenAI_TextSummary,
580
382
  CountTokensTask: OpenAI_CountTokens,
581
383
  StructuredGenerationTask: OpenAI_StructuredGeneration,
582
- ToolCallingTask: OpenAI_ToolCalling,
583
384
  ModelSearchTask: OpenAI_ModelSearch
584
385
  };
585
386
  var OPENAI_STREAM_TASKS = {
586
387
  TextGenerationTask: OpenAI_TextGeneration_Stream,
587
388
  TextRewriterTask: OpenAI_TextRewriter_Stream,
588
389
  TextSummaryTask: OpenAI_TextSummary_Stream,
589
- StructuredGenerationTask: OpenAI_StructuredGeneration_Stream,
590
- ToolCallingTask: OpenAI_ToolCalling_Stream
390
+ StructuredGenerationTask: OpenAI_StructuredGeneration_Stream
591
391
  };
592
392
  var OPENAI_REACTIVE_TASKS = {
593
393
  CountTokensTask: OpenAI_CountTokens_Reactive
@@ -595,9 +395,9 @@ var OPENAI_REACTIVE_TASKS = {
595
395
 
596
396
  // src/provider-openai/OpenAiQueuedProvider.ts
597
397
  import {
598
- QueuedAiProvider
398
+ AiProvider
599
399
  } from "@workglow/ai";
600
- class OpenAiQueuedProvider extends QueuedAiProvider {
400
+ class OpenAiQueuedProvider extends AiProvider {
601
401
  name = OPENAI;
602
402
  displayName = "OpenAI";
603
403
  isLocal = false;
@@ -610,7 +410,6 @@ class OpenAiQueuedProvider extends QueuedAiProvider {
610
410
  "CountTokensTask",
611
411
  "ModelInfoTask",
612
412
  "StructuredGenerationTask",
613
- "ToolCallingTask",
614
413
  "ModelSearchTask"
615
414
  ];
616
415
  constructor(tasks, streamTasks, reactiveTasks) {
@@ -623,13 +422,13 @@ async function registerOpenAiInline(options) {
623
422
  await new OpenAiQueuedProvider(OPENAI_TASKS, OPENAI_STREAM_TASKS, OPENAI_REACTIVE_TASKS).register(options ?? {});
624
423
  }
625
424
  // src/provider-openai/registerOpenAiWorker.browser.ts
626
- import { getLogger as getLogger7, globalServiceRegistry, WORKER_SERVER } from "@workglow/util/worker";
425
+ import { getLogger as getLogger3, globalServiceRegistry, WORKER_SERVER } from "@workglow/util/worker";
627
426
 
628
427
  // src/provider-openai/OpenAiProvider.ts
629
428
  import {
630
- AiProvider
429
+ AiProvider as AiProvider2
631
430
  } from "@workglow/ai/worker";
632
- class OpenAiProvider extends AiProvider {
431
+ class OpenAiProvider extends AiProvider2 {
633
432
  name = OPENAI;
634
433
  displayName = "OpenAI";
635
434
  isLocal = false;
@@ -642,7 +441,6 @@ class OpenAiProvider extends AiProvider {
642
441
  "CountTokensTask",
643
442
  "ModelInfoTask",
644
443
  "StructuredGenerationTask",
645
- "ToolCallingTask",
646
444
  "ModelSearchTask"
647
445
  ];
648
446
  constructor(tasks, streamTasks, reactiveTasks) {
@@ -655,7 +453,7 @@ async function registerOpenAiWorker() {
655
453
  const workerServer = globalServiceRegistry.get(WORKER_SERVER);
656
454
  new OpenAiProvider(OPENAI_TASKS, OPENAI_STREAM_TASKS, OPENAI_REACTIVE_TASKS).registerOnWorkerServer(workerServer);
657
455
  workerServer.sendReady();
658
- getLogger7().info("OpenAI worker job run functions registered");
456
+ getLogger3().info("OpenAI worker job run functions registered");
659
457
  }
660
458
  export {
661
459
  registerOpenAiWorker,
@@ -665,4 +463,4 @@ export {
665
463
  getClient
666
464
  };
667
465
 
668
- //# debugId=4707B132A6A6502164756E2164756E21
466
+ //# debugId=2A159632B382F9E664756E2164756E21
@@ -1,26 +1,25 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/provider-openai/common/OpenAI_Client.ts", "../src/common/modelSearchQuery.ts", "../src/provider-openai/common/OpenAI_Constants.ts", "../src/provider-openai/common/OpenAI_ModelSearch.ts", "../src/provider-openai/common/OpenAI_CountTokens.browser.ts", "../src/provider-openai/common/OpenAI_ModelInfo.ts", "../src/provider-openai/common/OpenAI_StructuredGeneration.ts", "../src/provider-openai/common/OpenAI_TextEmbedding.ts", "../src/provider-openai/common/OpenAI_TextGeneration.ts", "../src/provider-openai/common/OpenAI_TextRewriter.ts", "../src/provider-openai/common/OpenAI_TextSummary.ts", "../src/provider-openai/common/OpenAI_ToolCalling.ts", "../src/provider-openai/common/OpenAI_JobRunFns.browser.ts", "../src/provider-openai/OpenAiQueuedProvider.ts", "../src/provider-openai/registerOpenAiInline.browser.ts", "../src/provider-openai/registerOpenAiWorker.browser.ts", "../src/provider-openai/OpenAiProvider.ts"],
3
+ "sources": ["../src/provider-openai/common/OpenAI_Client.ts", "../src/common/modelSearchQuery.ts", "../src/provider-openai/common/OpenAI_Constants.ts", "../src/provider-openai/common/OpenAI_ModelSearch.ts", "../src/provider-openai/common/OpenAI_CountTokens.browser.ts", "../src/provider-openai/common/OpenAI_ModelInfo.ts", "../src/provider-openai/common/OpenAI_StructuredGeneration.ts", "../src/provider-openai/common/OpenAI_TextEmbedding.ts", "../src/provider-openai/common/OpenAI_TextGeneration.ts", "../src/provider-openai/common/OpenAI_TextRewriter.ts", "../src/provider-openai/common/OpenAI_TextSummary.ts", "../src/provider-openai/common/OpenAI_JobRunFns.browser.ts", "../src/provider-openai/OpenAiQueuedProvider.ts", "../src/provider-openai/registerOpenAiInline.browser.ts", "../src/provider-openai/registerOpenAiWorker.browser.ts", "../src/provider-openai/OpenAiProvider.ts"],
4
4
  "sourcesContent": [
5
- "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { OpenAiModelConfig } from \"./OpenAI_ModelSchema\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nlet _OpenAIClass: (new (config: any) => any) | undefined;\n\nexport async function loadOpenAISDK() {\n if (!_OpenAIClass) {\n try {\n const sdk = await import(\"openai\");\n _OpenAIClass = sdk.default;\n } catch {\n throw new Error(\"openai is required for OpenAI tasks. Install it with: bun add openai\");\n }\n }\n return _OpenAIClass;\n}\n\ninterface ResolvedProviderConfig {\n readonly credential_key?: string;\n readonly api_key?: string;\n readonly model_name?: string;\n readonly base_url?: string;\n readonly organization?: string;\n}\n\nexport async function getClient(model: OpenAiModelConfig | undefined) {\n const OpenAI = await loadOpenAISDK();\n const config = model?.provider_config as ResolvedProviderConfig | undefined;\n const apiKey =\n config?.credential_key ||\n config?.api_key ||\n (typeof process !== \"undefined\" ? process.env?.OPENAI_API_KEY : undefined);\n if (!apiKey) {\n throw new Error(\n \"Missing OpenAI API key: set provider_config.credential_key or the OPENAI_API_KEY environment variable.\"\n );\n }\n return new OpenAI({\n apiKey,\n baseURL: config?.base_url || undefined,\n organization: config?.organization || undefined,\n dangerouslyAllowBrowser: true,\n });\n}\n\nexport function getModelName(model: OpenAiModelConfig | undefined): string {\n const name = model?.provider_config?.model_name;\n if (!name) {\n throw new Error(\"Missing model name in provider_config.model_name.\");\n }\n return name;\n}\n",
5
+ "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { OpenAiModelConfig } from \"./OpenAI_ModelSchema\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nlet _OpenAIClass: (new (config: any) => any) | undefined;\n\nexport async function loadOpenAISDK() {\n if (!_OpenAIClass) {\n try {\n const sdk = await import(\"openai\");\n _OpenAIClass = sdk.default;\n } catch {\n throw new Error(\"openai is required for OpenAI tasks. Install it with: bun add openai\");\n }\n }\n return _OpenAIClass;\n}\n\ninterface ResolvedProviderConfig {\n readonly credential_key?: string;\n readonly api_key?: string;\n readonly model_name?: string;\n readonly base_url?: string;\n readonly organization?: string;\n}\n\nexport async function getClient(model: OpenAiModelConfig | undefined) {\n const OpenAI = await loadOpenAISDK();\n const config = model?.provider_config as ResolvedProviderConfig | undefined;\n const apiKey =\n config?.credential_key ||\n config?.api_key ||\n (typeof process !== \"undefined\" ? process.env?.OPENAI_API_KEY : undefined);\n if (!apiKey) {\n throw new Error(\n \"Missing OpenAI API key: set provider_config.credential_key or the OPENAI_API_KEY environment variable.\"\n );\n }\n try {\n return new OpenAI({\n apiKey,\n baseURL: config?.base_url || undefined,\n organization: config?.organization || undefined,\n dangerouslyAllowBrowser:\n typeof globalThis.document !== \"undefined\" ||\n \"WorkerGlobalScope\" in globalThis,\n });\n } catch (err) {\n throw new Error(\n `Failed to create OpenAI client: ${err instanceof Error ? err.message : \"unknown error\"}`\n );\n }\n}\n\nexport function getModelName(model: OpenAiModelConfig | undefined): string {\n const name = model?.provider_config?.model_name;\n if (!name) {\n throw new Error(\"Missing model name in provider_config.model_name.\");\n }\n return name;\n}\n",
6
6
  "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { ModelSearchResultItem } from \"@workglow/ai\";\n\n/**\n * Normalized search string for model search, or undefined when absent or whitespace-only.\n */\nexport function normalizedModelSearchQuery(query: string | undefined): string | undefined {\n const t = query?.trim();\n return t ? t.toLowerCase() : undefined;\n}\n\n/**\n * Filter static/SDK model rows by optional query (substring match on label and id).\n */\nexport function filterLabeledModelsByQuery(\n models: ReadonlyArray<{ label: string; value: string }>,\n query: string | undefined\n): Array<{ label: string; value: string }> {\n const q = normalizedModelSearchQuery(query);\n if (!q) return [...models];\n return models.filter(\n (m) => m.value.toLowerCase().includes(q) || m.label.toLowerCase().includes(q)\n );\n}\n\n/**\n * Filter {@link ModelSearchResultItem} rows by optional query.\n */\nexport function filterModelSearchResultsByQuery(\n results: ModelSearchResultItem[],\n query: string | undefined\n): ModelSearchResultItem[] {\n const q = normalizedModelSearchQuery(query);\n if (!q) return results;\n return results.filter(\n (m) =>\n m.id.toLowerCase().includes(q) ||\n m.label.toLowerCase().includes(q) ||\n m.description.toLowerCase().includes(q)\n );\n}\n",
7
7
  "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nexport const OPENAI = \"OPENAI\";\n",
8
8
  "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {\n AiProviderRunFn,\n ModelSearchResultItem,\n ModelSearchTaskInput,\n ModelSearchTaskOutput,\n} from \"@workglow/ai\";\nimport { filterLabeledModelsByQuery } from \"../../common/modelSearchQuery\";\nimport { OPENAI } from \"./OpenAI_Constants\";\nimport { getClient } from \"./OpenAI_Client\";\n\nconst OPENAI_FALLBACK: Array<{ label: string; value: string }> = [\n { label: \"gpt-5.4\", value: \"gpt-5.4\" },\n { label: \"gpt-5\", value: \"gpt-5\" },\n { label: \"gpt-5-mini\", value: \"gpt-5-mini\" },\n { label: \"gpt-4o-mini\", value: \"gpt-4o-mini\" },\n { label: \"gpt-4-turbo\", value: \"gpt-4-turbo\" },\n { label: \"o3\", value: \"o3\" },\n { label: \"o3-mini\", value: \"o3-mini\" },\n { label: \"o1\", value: \"o1\" },\n { label: \"o1-mini\", value: \"o1-mini\" },\n];\n\nasync function listOpenAiModels(): Promise<Array<{ label: string; value: string }>> {\n const client = await getClient(undefined);\n const models: Array<{ label: string; value: string }> = [];\n for await (const m of client.models.list()) {\n models.push({ label: `${m.id} ${m.owned_by}`, value: m.id });\n }\n models.sort((a, b) => {\n const aGpt = a.value.startsWith(\"gpt\") || a.value.startsWith(\"o1\") ? 0 : 1;\n const bGpt = b.value.startsWith(\"gpt\") || b.value.startsWith(\"o1\") ? 0 : 1;\n if (aGpt !== bGpt) return aGpt - bGpt;\n return a.value.localeCompare(b.value);\n });\n return models;\n}\n\nfunction mapModelList(models: Array<{ label: string; value: string }>): ModelSearchResultItem[] {\n return models.map((m) => ({\n id: m.value,\n label: m.label,\n description: \"\",\n record: {\n model_id: m.value,\n provider: OPENAI,\n title: m.value,\n description: \"\",\n tasks: [],\n provider_config: { model_name: m.value },\n metadata: {},\n },\n raw: m,\n }));\n}\n\nexport const OpenAI_ModelSearch: AiProviderRunFn<\n ModelSearchTaskInput,\n ModelSearchTaskOutput\n> = async (input) => {\n let models: Array<{ label: string; value: string }>;\n try {\n models = await listOpenAiModels();\n } catch {\n models = OPENAI_FALLBACK;\n }\n models = filterLabeledModelsByQuery(models, input.query);\n return { results: mapModelList(models) };\n};\n",
9
- "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {\n AiProviderReactiveRunFn,\n AiProviderRunFn,\n CountTokensTaskInput,\n CountTokensTaskOutput,\n} from \"@workglow/ai\";\nimport { getLogger } from \"@workglow/util/worker\";\nimport type { OpenAiModelConfig } from \"./OpenAI_ModelSchema\";\nimport { getModelName } from \"./OpenAI_Client\";\nimport type { Tiktoken, TiktokenModel } from \"js-tiktoken\";\n\nlet _tiktoken: typeof import(\"js-tiktoken\") | undefined;\n\nasync function loadTiktoken() {\n if (!_tiktoken) {\n try {\n _tiktoken = await import(\"js-tiktoken\");\n } catch {\n throw new Error(\n \"js-tiktoken is required for OpenAI token counting in the browser. Install it with: bun add js-tiktoken\"\n );\n }\n }\n return _tiktoken;\n}\n\nconst _encoderCache = new Map<string, Tiktoken>();\n\nasync function getEncoder(modelName: string) {\n const tiktoken = await loadTiktoken();\n if (!_encoderCache.has(modelName)) {\n try {\n _encoderCache.set(modelName, tiktoken.encodingForModel(modelName as TiktokenModel));\n } catch {\n const fallback = \"cl100k_base\";\n if (!_encoderCache.has(fallback)) {\n _encoderCache.set(fallback, tiktoken.getEncoding(fallback));\n }\n _encoderCache.set(modelName, _encoderCache.get(fallback)!);\n }\n }\n return _encoderCache.get(modelName)!;\n}\n\nexport const OpenAI_CountTokens: AiProviderRunFn<\n CountTokensTaskInput,\n CountTokensTaskOutput,\n OpenAiModelConfig\n> = async (input, model) => {\n if (Array.isArray(input.text)) {\n getLogger().warn(\n \"OpenAI_CountTokens: array input received; processing sequentially (no native batch support)\"\n );\n const texts = input.text as string[];\n const counts: number[] = [];\n for (const item of texts) {\n const r = await OpenAI_CountTokens(\n { ...input, text: item },\n model,\n () => {},\n new AbortController().signal\n );\n counts.push(r.count as number);\n }\n return { count: counts };\n }\n\n const enc = await getEncoder(getModelName(model));\n const tokens = enc.encode(input.text as string);\n return { count: tokens.length };\n};\n\nexport const OpenAI_CountTokens_Reactive: AiProviderReactiveRunFn<\n CountTokensTaskInput,\n CountTokensTaskOutput,\n OpenAiModelConfig\n> = async (input, _output, model) => {\n return OpenAI_CountTokens(input, model, () => {}, new AbortController().signal);\n};\n",
9
+ "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {\n AiProviderReactiveRunFn,\n AiProviderRunFn,\n CountTokensTaskInput,\n CountTokensTaskOutput,\n} from \"@workglow/ai\";\nimport type { OpenAiModelConfig } from \"./OpenAI_ModelSchema\";\nimport { getModelName } from \"./OpenAI_Client\";\nimport type { Tiktoken, TiktokenModel } from \"js-tiktoken\";\n\nlet _tiktoken: typeof import(\"js-tiktoken\") | undefined;\n\nasync function loadTiktoken() {\n if (!_tiktoken) {\n try {\n _tiktoken = await import(\"js-tiktoken\");\n } catch {\n throw new Error(\n \"js-tiktoken is required for OpenAI token counting in the browser. Install it with: bun add js-tiktoken\"\n );\n }\n }\n return _tiktoken;\n}\n\nconst _encoderCache = new Map<string, Tiktoken>();\n\nasync function getEncoder(modelName: string) {\n const tiktoken = await loadTiktoken();\n if (!_encoderCache.has(modelName)) {\n try {\n _encoderCache.set(modelName, tiktoken.encodingForModel(modelName as TiktokenModel));\n } catch {\n const fallback = \"cl100k_base\";\n if (!_encoderCache.has(fallback)) {\n _encoderCache.set(fallback, tiktoken.getEncoding(fallback));\n }\n _encoderCache.set(modelName, _encoderCache.get(fallback)!);\n }\n }\n return _encoderCache.get(modelName)!;\n}\n\nexport const OpenAI_CountTokens: AiProviderRunFn<\n CountTokensTaskInput,\n CountTokensTaskOutput,\n OpenAiModelConfig\n> = async (input, model) => {\n const enc = await getEncoder(getModelName(model));\n const tokens = enc.encode(input.text);\n return { count: tokens.length };\n};\n\nexport const OpenAI_CountTokens_Reactive: AiProviderReactiveRunFn<\n CountTokensTaskInput,\n CountTokensTaskOutput,\n OpenAiModelConfig\n> = async (input, _output, model) => {\n return OpenAI_CountTokens(input, model, () => {}, new AbortController().signal);\n};\n",
10
10
  "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { AiProviderRunFn, ModelInfoTaskInput, ModelInfoTaskOutput } from \"@workglow/ai\";\nimport type { OpenAiModelConfig } from \"./OpenAI_ModelSchema\";\n\nexport const OpenAI_ModelInfo: AiProviderRunFn<\n ModelInfoTaskInput,\n ModelInfoTaskOutput,\n OpenAiModelConfig\n> = async (input) => {\n return {\n model: input.model,\n is_local: false,\n is_remote: true,\n supports_browser: true,\n supports_node: true,\n is_cached: false,\n is_loaded: false,\n file_sizes: null,\n };\n};\n",
11
11
  "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {\n AiProviderRunFn,\n AiProviderStreamFn,\n StructuredGenerationTaskInput,\n StructuredGenerationTaskOutput,\n} from \"@workglow/ai\";\nimport type { StreamEvent } from \"@workglow/task-graph\";\nimport { parsePartialJson } from \"@workglow/util/worker\";\nimport type { OpenAiModelConfig } from \"./OpenAI_ModelSchema\";\nimport { getClient, getModelName } from \"./OpenAI_Client\";\n\nexport const OpenAI_StructuredGeneration: AiProviderRunFn<\n StructuredGenerationTaskInput,\n StructuredGenerationTaskOutput,\n OpenAiModelConfig\n> = async (input, model, update_progress, signal, outputSchema) => {\n update_progress(0, \"Starting OpenAI structured generation\");\n const client = await getClient(model);\n const modelName = getModelName(model);\n\n const schema = input.outputSchema ?? outputSchema;\n\n const response = await client.chat.completions.create(\n {\n model: modelName,\n messages: [{ role: \"user\", content: input.prompt }],\n response_format: {\n type: \"json_schema\" as any,\n json_schema: {\n name: \"structured_output\",\n schema: schema,\n strict: true,\n },\n } as any,\n max_completion_tokens: input.maxTokens,\n temperature: input.temperature,\n },\n { signal }\n );\n\n const content = response.choices[0]?.message?.content ?? \"{}\";\n update_progress(100, \"Completed OpenAI structured generation\");\n return { object: JSON.parse(content) };\n};\n\nexport const OpenAI_StructuredGeneration_Stream: AiProviderStreamFn<\n StructuredGenerationTaskInput,\n StructuredGenerationTaskOutput,\n OpenAiModelConfig\n> = async function* (\n input,\n model,\n signal,\n outputSchema\n): AsyncIterable<StreamEvent<StructuredGenerationTaskOutput>> {\n const client = await getClient(model);\n const modelName = getModelName(model);\n\n const schema = input.outputSchema ?? outputSchema;\n\n const stream = await client.chat.completions.create(\n {\n model: modelName,\n messages: [{ role: \"user\", content: input.prompt }],\n response_format: {\n type: \"json_schema\" as any,\n json_schema: {\n name: \"structured_output\",\n schema: schema,\n strict: true,\n },\n } as any,\n max_completion_tokens: input.maxTokens,\n temperature: input.temperature,\n stream: true,\n },\n { signal }\n );\n\n let accumulatedJson = \"\";\n for await (const chunk of stream) {\n const delta = chunk.choices[0]?.delta?.content ?? \"\";\n if (delta) {\n accumulatedJson += delta;\n const partial = parsePartialJson(accumulatedJson);\n if (partial !== undefined) {\n yield { type: \"object-delta\", port: \"object\", objectDelta: partial };\n }\n }\n }\n\n let finalObject: Record<string, unknown>;\n try {\n finalObject = JSON.parse(accumulatedJson);\n } catch {\n finalObject = parsePartialJson(accumulatedJson) ?? {};\n }\n yield { type: \"finish\", data: { object: finalObject } as StructuredGenerationTaskOutput };\n};\n",
12
- "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { AiProviderRunFn, TextEmbeddingTaskInput, TextEmbeddingTaskOutput } from \"@workglow/ai\";\nimport { getLogger } from \"@workglow/util/worker\";\nimport type { OpenAiModelConfig } from \"./OpenAI_ModelSchema\";\nimport { getClient, getModelName } from \"./OpenAI_Client\";\n\nexport const OpenAI_TextEmbedding: AiProviderRunFn<\n TextEmbeddingTaskInput,\n TextEmbeddingTaskOutput,\n OpenAiModelConfig\n> = async (input, model, update_progress, signal) => {\n const logger = getLogger();\n const timerLabel = `openai:TextEmbedding:${model?.provider_config?.model_name}`;\n logger.time(timerLabel, { model: model?.provider_config?.model_name });\n\n update_progress(0, \"Starting OpenAI text embedding\");\n const client = await getClient(model);\n const modelName = getModelName(model);\n\n const response = await client.embeddings.create(\n {\n model: modelName,\n input: input.text,\n },\n { signal }\n );\n\n update_progress(100, \"Completed OpenAI text embedding\");\n logger.timeEnd(timerLabel, { model: model?.provider_config?.model_name });\n\n if (Array.isArray(input.text)) {\n return {\n vector: response.data.map(\n (item: { embedding: number[] }) => new Float32Array(item.embedding)\n ),\n };\n }\n return { vector: new Float32Array(response.data[0].embedding) };\n};\n",
13
- "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { AiProviderRunFn, AiProviderStreamFn, TextGenerationTaskInput, TextGenerationTaskOutput } from \"@workglow/ai\";\nimport type { StreamEvent } from \"@workglow/task-graph\";\nimport { getLogger } from \"@workglow/util/worker\";\nimport type { OpenAiModelConfig } from \"./OpenAI_ModelSchema\";\nimport { getClient, getModelName } from \"./OpenAI_Client\";\n\nexport const OpenAI_TextGeneration: AiProviderRunFn<\n TextGenerationTaskInput,\n TextGenerationTaskOutput,\n OpenAiModelConfig\n> = async (input, model, update_progress, signal) => {\n if (Array.isArray(input.prompt)) {\n getLogger().warn(\n \"OpenAI_TextGeneration: array input received; processing sequentially (no native batch support)\"\n );\n const prompts = input.prompt as string[];\n const results: string[] = [];\n for (const item of prompts) {\n const r = await OpenAI_TextGeneration(\n { ...input, prompt: item },\n model,\n update_progress,\n signal\n );\n results.push(r.text as string);\n }\n return { text: results };\n }\n\n const logger = getLogger();\n const timerLabel = `openai:TextGeneration:${model?.provider_config?.model_name}`;\n logger.time(timerLabel, { model: model?.provider_config?.model_name });\n\n update_progress(0, \"Starting OpenAI text generation\");\n const client = await getClient(model);\n const modelName = getModelName(model);\n\n const response = await client.chat.completions.create(\n {\n model: modelName,\n messages: [{ role: \"user\", content: input.prompt as string }],\n max_completion_tokens: input.maxTokens,\n temperature: input.temperature,\n top_p: input.topP,\n frequency_penalty: input.frequencyPenalty,\n presence_penalty: input.presencePenalty,\n },\n { signal }\n );\n\n update_progress(100, \"Completed OpenAI text generation\");\n logger.timeEnd(timerLabel, { model: model?.provider_config?.model_name });\n return { text: response.choices[0]?.message?.content ?? \"\" };\n};\n\nexport const OpenAI_TextGeneration_Stream: AiProviderStreamFn<\n TextGenerationTaskInput,\n TextGenerationTaskOutput,\n OpenAiModelConfig\n> = async function* (input, model, signal): AsyncIterable<StreamEvent<TextGenerationTaskOutput>> {\n const client = await getClient(model);\n const modelName = getModelName(model);\n\n const stream = await client.chat.completions.create(\n {\n model: modelName,\n messages: [{ role: \"user\", content: input.prompt as string }],\n max_completion_tokens: input.maxTokens,\n temperature: input.temperature,\n top_p: input.topP,\n frequency_penalty: input.frequencyPenalty,\n presence_penalty: input.presencePenalty,\n stream: true,\n },\n { signal }\n );\n\n for await (const chunk of stream) {\n const delta = chunk.choices[0]?.delta?.content ?? \"\";\n if (delta) {\n yield { type: \"text-delta\", port: \"text\", textDelta: delta };\n }\n }\n yield { type: \"finish\", data: {} as TextGenerationTaskOutput };\n};\n",
14
- "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { AiProviderRunFn, AiProviderStreamFn, TextRewriterTaskInput, TextRewriterTaskOutput } from \"@workglow/ai\";\nimport type { StreamEvent } from \"@workglow/task-graph\";\nimport { getLogger } from \"@workglow/util/worker\";\nimport type { OpenAiModelConfig } from \"./OpenAI_ModelSchema\";\nimport { getClient, getModelName } from \"./OpenAI_Client\";\n\nexport const OpenAI_TextRewriter: AiProviderRunFn<\n TextRewriterTaskInput,\n TextRewriterTaskOutput,\n OpenAiModelConfig\n> = async (input, model, update_progress, signal) => {\n if (Array.isArray(input.text)) {\n getLogger().warn(\n \"OpenAI_TextRewriter: array input received; processing sequentially (no native batch support)\"\n );\n const texts = input.text as string[];\n const results: string[] = [];\n for (const item of texts) {\n const r = await OpenAI_TextRewriter({ ...input, text: item }, model, update_progress, signal);\n results.push(r.text as string);\n }\n return { text: results };\n }\n\n update_progress(0, \"Starting OpenAI text rewriting\");\n const client = await getClient(model);\n const modelName = getModelName(model);\n\n const response = await client.chat.completions.create(\n {\n model: modelName,\n messages: [\n { role: \"system\", content: input.prompt as string },\n { role: \"user\", content: input.text as string },\n ],\n },\n { signal }\n );\n\n update_progress(100, \"Completed OpenAI text rewriting\");\n return { text: response.choices[0]?.message?.content ?? \"\" };\n};\n\nexport const OpenAI_TextRewriter_Stream: AiProviderStreamFn<\n TextRewriterTaskInput,\n TextRewriterTaskOutput,\n OpenAiModelConfig\n> = async function* (input, model, signal): AsyncIterable<StreamEvent<TextRewriterTaskOutput>> {\n const client = await getClient(model);\n const modelName = getModelName(model);\n\n const stream = await client.chat.completions.create(\n {\n model: modelName,\n messages: [\n { role: \"system\", content: input.prompt as string },\n { role: \"user\", content: input.text as string },\n ],\n stream: true,\n },\n { signal }\n );\n\n for await (const chunk of stream) {\n const delta = chunk.choices[0]?.delta?.content ?? \"\";\n if (delta) {\n yield { type: \"text-delta\", port: \"text\", textDelta: delta };\n }\n }\n yield { type: \"finish\", data: {} as TextRewriterTaskOutput };\n};\n",
15
- "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { AiProviderRunFn, AiProviderStreamFn, TextSummaryTaskInput, TextSummaryTaskOutput } from \"@workglow/ai\";\nimport type { StreamEvent } from \"@workglow/task-graph\";\nimport { getLogger } from \"@workglow/util/worker\";\nimport type { OpenAiModelConfig } from \"./OpenAI_ModelSchema\";\nimport { getClient, getModelName } from \"./OpenAI_Client\";\n\nexport const OpenAI_TextSummary: AiProviderRunFn<\n TextSummaryTaskInput,\n TextSummaryTaskOutput,\n OpenAiModelConfig\n> = async (input, model, update_progress, signal) => {\n if (Array.isArray(input.text)) {\n getLogger().warn(\n \"OpenAI_TextSummary: array input received; processing sequentially (no native batch support)\"\n );\n const texts = input.text as string[];\n const results: string[] = [];\n for (const item of texts) {\n const r = await OpenAI_TextSummary({ ...input, text: item }, model, update_progress, signal);\n results.push(r.text as string);\n }\n return { text: results };\n }\n\n update_progress(0, \"Starting OpenAI text summarization\");\n const client = await getClient(model);\n const modelName = getModelName(model);\n\n const response = await client.chat.completions.create(\n {\n model: modelName,\n messages: [\n { role: \"system\", content: \"Summarize the following text concisely.\" },\n { role: \"user\", content: input.text as string },\n ],\n },\n { signal }\n );\n\n update_progress(100, \"Completed OpenAI text summarization\");\n return { text: response.choices[0]?.message?.content ?? \"\" };\n};\n\nexport const OpenAI_TextSummary_Stream: AiProviderStreamFn<\n TextSummaryTaskInput,\n TextSummaryTaskOutput,\n OpenAiModelConfig\n> = async function* (input, model, signal): AsyncIterable<StreamEvent<TextSummaryTaskOutput>> {\n const client = await getClient(model);\n const modelName = getModelName(model);\n\n const stream = await client.chat.completions.create(\n {\n model: modelName,\n messages: [\n { role: \"system\", content: \"Summarize the following text concisely.\" },\n { role: \"user\", content: input.text as string },\n ],\n stream: true,\n },\n { signal }\n );\n\n for await (const chunk of stream) {\n const delta = chunk.choices[0]?.delta?.content ?? \"\";\n if (delta) {\n yield { type: \"text-delta\", port: \"text\", textDelta: delta };\n }\n }\n yield { type: \"finish\", data: {} as TextSummaryTaskOutput };\n};\n",
16
- "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { buildToolDescription, filterValidToolCalls, toOpenAIMessages } from \"@workglow/ai/worker\";\nimport type {\n AiProviderRunFn,\n AiProviderStreamFn,\n ToolCallingTaskInput,\n ToolCallingTaskOutput,\n ToolCalls,\n ToolDefinition,\n} from \"@workglow/ai\";\nimport type { StreamEvent } from \"@workglow/task-graph\";\nimport { getLogger, parsePartialJson } from \"@workglow/util/worker\";\nimport type { OpenAiModelConfig } from \"./OpenAI_ModelSchema\";\nimport { getClient, getModelName } from \"./OpenAI_Client\";\n\nfunction mapOpenAIToolChoice(\n toolChoice: string | undefined\n): \"auto\" | \"none\" | \"required\" | { type: \"function\"; function: { name: string } } | undefined {\n if (!toolChoice || toolChoice === \"auto\") return \"auto\";\n if (toolChoice === \"none\") return \"none\";\n if (toolChoice === \"required\") return \"required\";\n return { type: \"function\", function: { name: toolChoice } };\n}\n\nexport const OpenAI_ToolCalling: AiProviderRunFn<\n ToolCallingTaskInput,\n ToolCallingTaskOutput,\n OpenAiModelConfig\n> = async (input, model, update_progress, signal) => {\n if (Array.isArray(input.prompt)) {\n getLogger().warn(\n \"OpenAI_ToolCalling: array input received; processing sequentially (no native batch support)\"\n );\n const prompts = input.prompt as string[];\n const texts: string[] = [];\n const toolCallsList: ToolCalls[] = [];\n for (const item of prompts) {\n const r = await OpenAI_ToolCalling(\n { ...input, prompt: item },\n model,\n update_progress,\n signal\n );\n texts.push(r.text as string);\n toolCallsList.push(r.toolCalls as ToolCalls);\n }\n return { text: texts, toolCalls: toolCallsList } as unknown as ToolCallingTaskOutput;\n }\n\n update_progress(0, \"Starting OpenAI tool calling\");\n const client = await getClient(model);\n const modelName = getModelName(model);\n\n const tools = input.tools.map((t: ToolDefinition) => ({\n type: \"function\" as const,\n function: {\n name: t.name,\n description: buildToolDescription(t),\n parameters: t.inputSchema as any,\n },\n }));\n\n const messages = toOpenAIMessages(input) as any[];\n\n const toolChoice = mapOpenAIToolChoice(input.toolChoice);\n\n const params: any = {\n model: modelName,\n messages,\n max_completion_tokens: input.maxTokens,\n temperature: input.temperature,\n };\n\n if (toolChoice !== undefined) {\n params.tools = tools;\n params.tool_choice = toolChoice;\n }\n\n const response = await client.chat.completions.create(params, { signal });\n\n const text = response.choices[0]?.message?.content ?? \"\";\n const toolCalls: ToolCalls = [];\n for (const tc of response.choices[0]?.message?.tool_calls ?? []) {\n if (!(\"function\" in tc)) continue;\n const id = tc.id as string;\n const name = tc.function.name as string;\n let inputArgs: Record<string, unknown> = {};\n const rawArgs = tc.function.arguments;\n if (typeof rawArgs === \"string\") {\n try {\n inputArgs = JSON.parse(rawArgs) as Record<string, unknown>;\n } catch {\n try {\n const partial = parsePartialJson(rawArgs);\n if (partial && typeof partial === \"object\") {\n inputArgs = partial as Record<string, unknown>;\n }\n } catch {\n inputArgs = {};\n }\n }\n }\n toolCalls.push({ id, name, input: inputArgs });\n }\n\n update_progress(100, \"Completed OpenAI tool calling\");\n return { text, toolCalls: filterValidToolCalls(toolCalls, input.tools) };\n};\n\nexport const OpenAI_ToolCalling_Stream: AiProviderStreamFn<\n ToolCallingTaskInput,\n ToolCallingTaskOutput,\n OpenAiModelConfig\n> = async function* (input, model, signal): AsyncIterable<StreamEvent<ToolCallingTaskOutput>> {\n const client = await getClient(model);\n const modelName = getModelName(model);\n\n const tools = input.tools.map((t: ToolDefinition) => ({\n type: \"function\" as const,\n function: {\n name: t.name,\n description: buildToolDescription(t),\n parameters: t.inputSchema as any,\n },\n }));\n\n const messages = toOpenAIMessages(input) as any[];\n\n const toolChoice = mapOpenAIToolChoice(input.toolChoice);\n\n const stream = await client.chat.completions.create(\n {\n model: modelName,\n messages,\n max_completion_tokens: input.maxTokens,\n temperature: input.temperature,\n stream: true,\n ...(toolChoice !== undefined ? { tools, tool_choice: toolChoice } : {}),\n },\n { signal }\n );\n\n let accumulatedText = \"\";\n const toolCallAccumulator = new Map<number, { id: string; name: string; arguments: string }>();\n\n for await (const chunk of stream) {\n const choice = chunk.choices[0];\n if (!choice) continue;\n\n const contentDelta = choice.delta?.content ?? \"\";\n if (contentDelta) {\n accumulatedText += contentDelta;\n yield { type: \"text-delta\", port: \"text\", textDelta: contentDelta };\n }\n\n const tcDeltas = (choice.delta as any)?.tool_calls;\n if (Array.isArray(tcDeltas)) {\n for (const tcDelta of tcDeltas) {\n const idx = tcDelta.index as number;\n if (!toolCallAccumulator.has(idx)) {\n toolCallAccumulator.set(idx, {\n id: tcDelta.id ?? \"\",\n name: tcDelta.function?.name ?? \"\",\n arguments: \"\",\n });\n }\n const acc = toolCallAccumulator.get(idx)!;\n if (tcDelta.id) acc.id = tcDelta.id;\n if (tcDelta.function?.name) acc.name = tcDelta.function.name;\n if (tcDelta.function?.arguments) acc.arguments += tcDelta.function.arguments;\n }\n\n const snapshot: ToolCalls = [];\n for (const [, tc] of toolCallAccumulator) {\n let parsedInput: Record<string, unknown>;\n try {\n parsedInput = JSON.parse(tc.arguments);\n } catch {\n const partial = parsePartialJson(tc.arguments);\n parsedInput = (partial as Record<string, unknown>) ?? {};\n }\n snapshot.push({ id: tc.id, name: tc.name, input: parsedInput });\n }\n yield { type: \"object-delta\", port: \"toolCalls\", objectDelta: snapshot };\n }\n }\n\n const toolCalls: ToolCalls = [];\n for (const [, tc] of toolCallAccumulator) {\n let finalInput: Record<string, unknown>;\n try {\n finalInput = JSON.parse(tc.arguments);\n } catch {\n finalInput = (parsePartialJson(tc.arguments) as Record<string, unknown>) ?? {};\n }\n toolCalls.push({ id: tc.id, name: tc.name, input: finalInput });\n }\n\n const validToolCalls = filterValidToolCalls(toolCalls, input.tools);\n yield {\n type: \"finish\",\n data: { text: accumulatedText, toolCalls: validToolCalls } as ToolCallingTaskOutput,\n };\n};\n",
17
- "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { AiProviderReactiveRunFn, AiProviderRunFn, AiProviderStreamFn } from \"@workglow/ai\";\nimport type { OpenAiModelConfig } from \"./OpenAI_ModelSchema\";\nimport { OpenAI_ModelSearch } from \"./OpenAI_ModelSearch\";\n\nexport { loadOpenAISDK, getClient, getModelName } from \"./OpenAI_Client\";\n\nimport {\n OpenAI_CountTokens,\n OpenAI_CountTokens_Reactive,\n} from \"./OpenAI_CountTokens.browser\";\nimport { OpenAI_ModelInfo } from \"./OpenAI_ModelInfo\";\nimport {\n OpenAI_StructuredGeneration,\n OpenAI_StructuredGeneration_Stream,\n} from \"./OpenAI_StructuredGeneration\";\nimport { OpenAI_TextEmbedding } from \"./OpenAI_TextEmbedding\";\nimport { OpenAI_TextGeneration, OpenAI_TextGeneration_Stream } from \"./OpenAI_TextGeneration\";\nimport { OpenAI_TextRewriter, OpenAI_TextRewriter_Stream } from \"./OpenAI_TextRewriter\";\nimport { OpenAI_TextSummary, OpenAI_TextSummary_Stream } from \"./OpenAI_TextSummary\";\nimport { OpenAI_ToolCalling, OpenAI_ToolCalling_Stream } from \"./OpenAI_ToolCalling\";\n\nexport const OPENAI_TASKS: Record<string, AiProviderRunFn<any, any, OpenAiModelConfig>> = {\n TextGenerationTask: OpenAI_TextGeneration,\n ModelInfoTask: OpenAI_ModelInfo,\n TextEmbeddingTask: OpenAI_TextEmbedding,\n TextRewriterTask: OpenAI_TextRewriter,\n TextSummaryTask: OpenAI_TextSummary,\n CountTokensTask: OpenAI_CountTokens,\n StructuredGenerationTask: OpenAI_StructuredGeneration,\n ToolCallingTask: OpenAI_ToolCalling,\n ModelSearchTask: OpenAI_ModelSearch,\n};\n\nexport const OPENAI_STREAM_TASKS: Record<\n string,\n AiProviderStreamFn<any, any, OpenAiModelConfig>\n> = {\n TextGenerationTask: OpenAI_TextGeneration_Stream,\n TextRewriterTask: OpenAI_TextRewriter_Stream,\n TextSummaryTask: OpenAI_TextSummary_Stream,\n StructuredGenerationTask: OpenAI_StructuredGeneration_Stream,\n ToolCallingTask: OpenAI_ToolCalling_Stream,\n};\n\nexport const OPENAI_REACTIVE_TASKS: Record<\n string,\n AiProviderReactiveRunFn<any, any, OpenAiModelConfig>\n> = {\n CountTokensTask: OpenAI_CountTokens_Reactive,\n};\n",
18
- "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {\n QueuedAiProvider,\n type AiProviderReactiveRunFn,\n type AiProviderRunFn,\n type AiProviderStreamFn,\n} from \"@workglow/ai\";\nimport { OPENAI } from \"./common/OpenAI_Constants\";\nimport type { OpenAiModelConfig } from \"./common/OpenAI_ModelSchema\";\n\n/** Main-thread registration (inline or worker-backed); creates the default job queue. */\nexport class OpenAiQueuedProvider extends QueuedAiProvider<OpenAiModelConfig> {\n readonly name = OPENAI;\n readonly displayName = \"OpenAI\";\n readonly isLocal = false;\n readonly supportsBrowser = true;\n\n readonly taskTypes = [\n \"TextGenerationTask\",\n \"TextEmbeddingTask\",\n \"TextRewriterTask\",\n \"TextSummaryTask\",\n \"CountTokensTask\",\n \"ModelInfoTask\",\n \"StructuredGenerationTask\",\n \"ToolCallingTask\",\n \"ModelSearchTask\",\n ] as const;\n\n constructor(\n tasks?: Record<string, AiProviderRunFn<any, any, OpenAiModelConfig>>,\n streamTasks?: Record<string, AiProviderStreamFn<any, any, OpenAiModelConfig>>,\n reactiveTasks?: Record<string, AiProviderReactiveRunFn<any, any, OpenAiModelConfig>>\n ) {\n super(tasks, streamTasks, reactiveTasks);\n }\n}\n",
12
+ "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {\n AiProviderRunFn,\n TextEmbeddingTaskInput,\n TextEmbeddingTaskOutput,\n} from \"@workglow/ai\";\nimport { getLogger } from \"@workglow/util/worker\";\nimport type { OpenAiModelConfig } from \"./OpenAI_ModelSchema\";\nimport { getClient, getModelName } from \"./OpenAI_Client\";\n\nexport const OpenAI_TextEmbedding: AiProviderRunFn<\n TextEmbeddingTaskInput,\n TextEmbeddingTaskOutput,\n OpenAiModelConfig\n> = async (input, model, update_progress, signal) => {\n const logger = getLogger();\n const timerLabel = `openai:TextEmbedding:${model?.provider_config?.model_name}`;\n logger.time(timerLabel, { model: model?.provider_config?.model_name });\n\n update_progress(0, \"Starting OpenAI text embedding\");\n const client = await getClient(model);\n const modelName = getModelName(model);\n\n const response = await client.embeddings.create(\n {\n model: modelName,\n input: input.text,\n },\n { signal }\n );\n\n update_progress(100, \"Completed OpenAI text embedding\");\n logger.timeEnd(timerLabel, { model: model?.provider_config?.model_name });\n\n if (Array.isArray(input.text)) {\n return {\n vector: response.data.map(\n (item: { embedding: number[] }) => new Float32Array(item.embedding)\n ),\n };\n }\n return { vector: new Float32Array(response.data[0].embedding) };\n};\n",
13
+ "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {\n AiProviderRunFn,\n AiProviderStreamFn,\n TextGenerationTaskInput,\n TextGenerationTaskOutput,\n} from \"@workglow/ai\";\nimport type { StreamEvent } from \"@workglow/task-graph\";\nimport { getLogger } from \"@workglow/util/worker\";\nimport type { OpenAiModelConfig } from \"./OpenAI_ModelSchema\";\nimport { getClient, getModelName } from \"./OpenAI_Client\";\n\nexport const OpenAI_TextGeneration: AiProviderRunFn<\n TextGenerationTaskInput,\n TextGenerationTaskOutput,\n OpenAiModelConfig\n> = async (input, model, update_progress, signal) => {\n const logger = getLogger();\n const timerLabel = `openai:TextGeneration:${model?.provider_config?.model_name}`;\n logger.time(timerLabel, { model: model?.provider_config?.model_name });\n\n update_progress(0, \"Starting OpenAI text generation\");\n const client = await getClient(model);\n const modelName = getModelName(model);\n\n const response = await client.chat.completions.create(\n {\n model: modelName,\n messages: [{ role: \"user\", content: input.prompt }],\n max_completion_tokens: input.maxTokens,\n temperature: input.temperature,\n top_p: input.topP,\n frequency_penalty: input.frequencyPenalty,\n presence_penalty: input.presencePenalty,\n },\n { signal }\n );\n\n update_progress(100, \"Completed OpenAI text generation\");\n logger.timeEnd(timerLabel, { model: model?.provider_config?.model_name });\n return { text: response.choices[0]?.message?.content ?? \"\" };\n};\n\nexport const OpenAI_TextGeneration_Stream: AiProviderStreamFn<\n TextGenerationTaskInput,\n TextGenerationTaskOutput,\n OpenAiModelConfig\n> = async function* (input, model, signal): AsyncIterable<StreamEvent<TextGenerationTaskOutput>> {\n const client = await getClient(model);\n const modelName = getModelName(model);\n\n const stream = await client.chat.completions.create(\n {\n model: modelName,\n messages: [{ role: \"user\", content: input.prompt }],\n max_completion_tokens: input.maxTokens,\n temperature: input.temperature,\n top_p: input.topP,\n frequency_penalty: input.frequencyPenalty,\n presence_penalty: input.presencePenalty,\n stream: true,\n },\n { signal }\n );\n\n for await (const chunk of stream) {\n const delta = chunk.choices[0]?.delta?.content ?? \"\";\n if (delta) {\n yield { type: \"text-delta\", port: \"text\", textDelta: delta };\n }\n }\n yield { type: \"finish\", data: {} as TextGenerationTaskOutput };\n};\n",
14
+ "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {\n AiProviderRunFn,\n AiProviderStreamFn,\n TextRewriterTaskInput,\n TextRewriterTaskOutput,\n} from \"@workglow/ai\";\nimport type { StreamEvent } from \"@workglow/task-graph\";\nimport type { OpenAiModelConfig } from \"./OpenAI_ModelSchema\";\nimport { getClient, getModelName } from \"./OpenAI_Client\";\n\nexport const OpenAI_TextRewriter: AiProviderRunFn<\n TextRewriterTaskInput,\n TextRewriterTaskOutput,\n OpenAiModelConfig\n> = async (input, model, update_progress, signal) => {\n update_progress(0, \"Starting OpenAI text rewriting\");\n const client = await getClient(model);\n const modelName = getModelName(model);\n\n const response = await client.chat.completions.create(\n {\n model: modelName,\n messages: [\n { role: \"system\", content: input.prompt },\n { role: \"user\", content: input.text },\n ],\n },\n { signal }\n );\n\n update_progress(100, \"Completed OpenAI text rewriting\");\n return { text: response.choices[0]?.message?.content ?? \"\" };\n};\n\nexport const OpenAI_TextRewriter_Stream: AiProviderStreamFn<\n TextRewriterTaskInput,\n TextRewriterTaskOutput,\n OpenAiModelConfig\n> = async function* (input, model, signal): AsyncIterable<StreamEvent<TextRewriterTaskOutput>> {\n const client = await getClient(model);\n const modelName = getModelName(model);\n\n const stream = await client.chat.completions.create(\n {\n model: modelName,\n messages: [\n { role: \"system\", content: input.prompt },\n { role: \"user\", content: input.text },\n ],\n stream: true,\n },\n { signal }\n );\n\n for await (const chunk of stream) {\n const delta = chunk.choices[0]?.delta?.content ?? \"\";\n if (delta) {\n yield { type: \"text-delta\", port: \"text\", textDelta: delta };\n }\n }\n yield { type: \"finish\", data: {} as TextRewriterTaskOutput };\n};\n",
15
+ "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {\n AiProviderRunFn,\n AiProviderStreamFn,\n TextSummaryTaskInput,\n TextSummaryTaskOutput,\n} from \"@workglow/ai\";\nimport type { StreamEvent } from \"@workglow/task-graph\";\nimport type { OpenAiModelConfig } from \"./OpenAI_ModelSchema\";\nimport { getClient, getModelName } from \"./OpenAI_Client\";\n\nexport const OpenAI_TextSummary: AiProviderRunFn<\n TextSummaryTaskInput,\n TextSummaryTaskOutput,\n OpenAiModelConfig\n> = async (input, model, update_progress, signal) => {\n update_progress(0, \"Starting OpenAI text summarization\");\n const client = await getClient(model);\n const modelName = getModelName(model);\n\n const response = await client.chat.completions.create(\n {\n model: modelName,\n messages: [\n { role: \"system\", content: \"Summarize the following text concisely.\" },\n { role: \"user\", content: input.text },\n ],\n },\n { signal }\n );\n\n update_progress(100, \"Completed OpenAI text summarization\");\n return { text: response.choices[0]?.message?.content ?? \"\" };\n};\n\nexport const OpenAI_TextSummary_Stream: AiProviderStreamFn<\n TextSummaryTaskInput,\n TextSummaryTaskOutput,\n OpenAiModelConfig\n> = async function* (input, model, signal): AsyncIterable<StreamEvent<TextSummaryTaskOutput>> {\n const client = await getClient(model);\n const modelName = getModelName(model);\n\n const stream = await client.chat.completions.create(\n {\n model: modelName,\n messages: [\n { role: \"system\", content: \"Summarize the following text concisely.\" },\n { role: \"user\", content: input.text },\n ],\n stream: true,\n },\n { signal }\n );\n\n for await (const chunk of stream) {\n const delta = chunk.choices[0]?.delta?.content ?? \"\";\n if (delta) {\n yield { type: \"text-delta\", port: \"text\", textDelta: delta };\n }\n }\n yield { type: \"finish\", data: {} as TextSummaryTaskOutput };\n};\n",
16
+ "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { AiProviderReactiveRunFn, AiProviderRunFn, AiProviderStreamFn } from \"@workglow/ai\";\nimport type { OpenAiModelConfig } from \"./OpenAI_ModelSchema\";\nimport { OpenAI_ModelSearch } from \"./OpenAI_ModelSearch\";\n\nexport { loadOpenAISDK, getClient, getModelName } from \"./OpenAI_Client\";\n\nimport { OpenAI_CountTokens, OpenAI_CountTokens_Reactive } from \"./OpenAI_CountTokens.browser\";\nimport { OpenAI_ModelInfo } from \"./OpenAI_ModelInfo\";\nimport {\n OpenAI_StructuredGeneration,\n OpenAI_StructuredGeneration_Stream,\n} from \"./OpenAI_StructuredGeneration\";\nimport { OpenAI_TextEmbedding } from \"./OpenAI_TextEmbedding\";\nimport { OpenAI_TextGeneration, OpenAI_TextGeneration_Stream } from \"./OpenAI_TextGeneration\";\nimport { OpenAI_TextRewriter, OpenAI_TextRewriter_Stream } from \"./OpenAI_TextRewriter\";\nimport { OpenAI_TextSummary, OpenAI_TextSummary_Stream } from \"./OpenAI_TextSummary\";\nexport const OPENAI_TASKS: Record<string, AiProviderRunFn<any, any, OpenAiModelConfig>> = {\n TextGenerationTask: OpenAI_TextGeneration,\n ModelInfoTask: OpenAI_ModelInfo,\n TextEmbeddingTask: OpenAI_TextEmbedding,\n TextRewriterTask: OpenAI_TextRewriter,\n TextSummaryTask: OpenAI_TextSummary,\n CountTokensTask: OpenAI_CountTokens,\n StructuredGenerationTask: OpenAI_StructuredGeneration,\n ModelSearchTask: OpenAI_ModelSearch,\n};\n\nexport const OPENAI_STREAM_TASKS: Record<\n string,\n AiProviderStreamFn<any, any, OpenAiModelConfig>\n> = {\n TextGenerationTask: OpenAI_TextGeneration_Stream,\n TextRewriterTask: OpenAI_TextRewriter_Stream,\n TextSummaryTask: OpenAI_TextSummary_Stream,\n StructuredGenerationTask: OpenAI_StructuredGeneration_Stream,\n};\n\nexport const OPENAI_REACTIVE_TASKS: Record<\n string,\n AiProviderReactiveRunFn<any, any, OpenAiModelConfig>\n> = {\n CountTokensTask: OpenAI_CountTokens_Reactive,\n};\n",
17
+ "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {\n AiProvider,\n type AiProviderReactiveRunFn,\n type AiProviderRunFn,\n type AiProviderStreamFn,\n} from \"@workglow/ai\";\nimport { OPENAI } from \"./common/OpenAI_Constants\";\nimport type { OpenAiModelConfig } from \"./common/OpenAI_ModelSchema\";\n\n/** Main-thread registration (inline or worker-backed). No queue uses direct execution. */\nexport class OpenAiQueuedProvider extends AiProvider<OpenAiModelConfig> {\n readonly name = OPENAI;\n readonly displayName = \"OpenAI\";\n readonly isLocal = false;\n readonly supportsBrowser = true;\n\n readonly taskTypes = [\n \"TextGenerationTask\",\n \"TextEmbeddingTask\",\n \"TextRewriterTask\",\n \"TextSummaryTask\",\n \"CountTokensTask\",\n \"ModelInfoTask\",\n \"StructuredGenerationTask\",\n \"ModelSearchTask\",\n ] as const;\n\n constructor(\n tasks?: Record<string, AiProviderRunFn<any, any, OpenAiModelConfig>>,\n streamTasks?: Record<string, AiProviderStreamFn<any, any, OpenAiModelConfig>>,\n reactiveTasks?: Record<string, AiProviderReactiveRunFn<any, any, OpenAiModelConfig>>\n ) {\n super(tasks, streamTasks, reactiveTasks);\n }\n}\n",
19
18
  "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { AiProviderRegisterOptions } from \"@workglow/ai\";\nimport {\n OPENAI_REACTIVE_TASKS,\n OPENAI_STREAM_TASKS,\n OPENAI_TASKS,\n} from \"./common/OpenAI_JobRunFns.browser\";\nimport { OpenAiQueuedProvider } from \"./OpenAiQueuedProvider\";\n\nexport async function registerOpenAiInline(options?: AiProviderRegisterOptions): Promise<void> {\n await new OpenAiQueuedProvider(OPENAI_TASKS, OPENAI_STREAM_TASKS, OPENAI_REACTIVE_TASKS).register(\n options ?? {}\n );\n}\n",
20
19
  "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { getLogger, globalServiceRegistry, WORKER_SERVER } from \"@workglow/util/worker\";\nimport {\n OPENAI_REACTIVE_TASKS,\n OPENAI_STREAM_TASKS,\n OPENAI_TASKS,\n} from \"./common/OpenAI_JobRunFns.browser\";\nimport { OpenAiProvider } from \"./OpenAiProvider\";\n\nexport async function registerOpenAiWorker(): Promise<void> {\n const workerServer = globalServiceRegistry.get(WORKER_SERVER);\n new OpenAiProvider(\n OPENAI_TASKS,\n OPENAI_STREAM_TASKS,\n OPENAI_REACTIVE_TASKS\n ).registerOnWorkerServer(workerServer);\n workerServer.sendReady();\n getLogger().info(\"OpenAI worker job run functions registered\");\n}\n",
21
- "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {\n AiProvider,\n type AiProviderReactiveRunFn,\n type AiProviderRunFn,\n type AiProviderStreamFn,\n} from \"@workglow/ai/worker\";\nimport { OPENAI } from \"./common/OpenAI_Constants\";\nimport type { OpenAiModelConfig } from \"./common/OpenAI_ModelSchema\";\n\n/**\n * AI provider for OpenAI cloud models.\n *\n * Supports text generation, text embedding, text rewriting, and text summarization\n * via the OpenAI API using the `openai` SDK.\n *\n * Task run functions are injected via the constructor so that the `openai` SDK\n * is only imported where actually needed (inline mode, worker server), not on\n * the main thread in worker mode.\n */\nexport class OpenAiProvider extends AiProvider<OpenAiModelConfig> {\n readonly name = OPENAI;\n readonly displayName = \"OpenAI\";\n readonly isLocal = false;\n readonly supportsBrowser = true;\n\n readonly taskTypes = [\n \"TextGenerationTask\",\n \"TextEmbeddingTask\",\n \"TextRewriterTask\",\n \"TextSummaryTask\",\n \"CountTokensTask\",\n \"ModelInfoTask\",\n \"StructuredGenerationTask\",\n \"ToolCallingTask\",\n \"ModelSearchTask\",\n ] as const;\n\n constructor(\n tasks?: Record<string, AiProviderRunFn<any, any, OpenAiModelConfig>>,\n streamTasks?: Record<string, AiProviderStreamFn<any, any, OpenAiModelConfig>>,\n reactiveTasks?: Record<string, AiProviderReactiveRunFn<any, any, OpenAiModelConfig>>\n ) {\n super(tasks, streamTasks, reactiveTasks);\n }\n}\n"
20
+ "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {\n AiProvider,\n type AiProviderReactiveRunFn,\n type AiProviderRunFn,\n type AiProviderStreamFn,\n} from \"@workglow/ai/worker\";\nimport { OPENAI } from \"./common/OpenAI_Constants\";\nimport type { OpenAiModelConfig } from \"./common/OpenAI_ModelSchema\";\n\n/**\n * AI provider for OpenAI cloud models.\n *\n * Supports text generation, text embedding, text rewriting, and text summarization\n * via the OpenAI API using the `openai` SDK.\n *\n * Task run functions are injected via the constructor so that the `openai` SDK\n * is only imported where actually needed (inline mode, worker server), not on\n * the main thread in worker mode.\n */\nexport class OpenAiProvider extends AiProvider<OpenAiModelConfig> {\n readonly name = OPENAI;\n readonly displayName = \"OpenAI\";\n readonly isLocal = false;\n readonly supportsBrowser = true;\n\n readonly taskTypes = [\n \"TextGenerationTask\",\n \"TextEmbeddingTask\",\n \"TextRewriterTask\",\n \"TextSummaryTask\",\n \"CountTokensTask\",\n \"ModelInfoTask\",\n \"StructuredGenerationTask\",\n \"ModelSearchTask\",\n ] as const;\n\n constructor(\n tasks?: Record<string, AiProviderRunFn<any, any, OpenAiModelConfig>>,\n streamTasks?: Record<string, AiProviderStreamFn<any, any, OpenAiModelConfig>>,\n reactiveTasks?: Record<string, AiProviderReactiveRunFn<any, any, OpenAiModelConfig>>\n ) {\n super(tasks, streamTasks, reactiveTasks);\n }\n}\n"
22
21
  ],
23
- "mappings": "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",
24
- "debugId": "4707B132A6A6502164756E2164756E21",
22
+ "mappings": ";;;;;;;;;AASA,IAAI;AAEJ,eAAsB,aAAa,GAAG;AAAA,EACpC,IAAI,CAAC,cAAc;AAAA,IACjB,IAAI;AAAA,MACF,MAAM,MAAM,MAAa;AAAA,MACzB,eAAe,IAAI;AAAA,MACnB,MAAM;AAAA,MACN,MAAM,IAAI,MAAM,sEAAsE;AAAA;AAAA,EAE1F;AAAA,EACA,OAAO;AAAA;AAWT,eAAsB,SAAS,CAAC,OAAsC;AAAA,EACpE,MAAM,SAAS,MAAM,cAAc;AAAA,EACnC,MAAM,SAAS,OAAO;AAAA,EACtB,MAAM,SACJ,QAAQ,kBACR,QAAQ,YACP,OAAO,YAAY,cAAc,QAAQ,KAAK,iBAAiB;AAAA,EAClE,IAAI,CAAC,QAAQ;AAAA,IACX,MAAM,IAAI,MACR,wGACF;AAAA,EACF;AAAA,EACA,IAAI;AAAA,IACF,OAAO,IAAI,OAAO;AAAA,MAChB;AAAA,MACA,SAAS,QAAQ,YAAY;AAAA,MAC7B,cAAc,QAAQ,gBAAgB;AAAA,MACtC,yBACE,OAAO,WAAW,aAAa,eAC/B,uBAAuB;AAAA,IAC3B,CAAC;AAAA,IACD,OAAO,KAAK;AAAA,IACZ,MAAM,IAAI,MACR,mCAAmC,eAAe,QAAQ,IAAI,UAAU,iBAC1E;AAAA;AAAA;AAIG,SAAS,YAAY,CAAC,OAA8C;AAAA,EACzE,MAAM,OAAO,OAAO,iBAAiB;AAAA,EACrC,IAAI,CAAC,MAAM;AAAA,IACT,MAAM,IAAI,MAAM,mDAAmD;AAAA,EACrE;AAAA,EACA,OAAO;AAAA;;ACrDF,SAAS,0BAA0B,CAAC,OAA+C;AAAA,EACxF,MAAM,IAAI,OAAO,KAAK;AAAA,EACtB,OAAO,IAAI,EAAE,YAAY,IAAI;AAAA;AAMxB,SAAS,0BAA0B,CACxC,QACA,OACyC;AAAA,EACzC,MAAM,IAAI,2BAA2B,KAAK;AAAA,EAC1C,IAAI,CAAC;AAAA,IAAG,OAAO,CAAC,GAAG,MAAM;AAAA,EACzB,OAAO,OAAO,OACZ,CAAC,MAAM,EAAE,MAAM,YAAY,EAAE,SAAS,CAAC,KAAK,EAAE,MAAM,YAAY,EAAE,SAAS,CAAC,CAC9E;AAAA;AAMK,SAAS,+BAA+B,CAC7C,SACA,OACyB;AAAA,EACzB,MAAM,IAAI,2BAA2B,KAAK;AAAA,EAC1C,IAAI,CAAC;AAAA,IAAG,OAAO;AAAA,EACf,OAAO,QAAQ,OACb,CAAC,MACC,EAAE,GAAG,YAAY,EAAE,SAAS,CAAC,KAC7B,EAAE,MAAM,YAAY,EAAE,SAAS,CAAC,KAChC,EAAE,YAAY,YAAY,EAAE,SAAS,CAAC,CAC1C;AAAA;;;ACtCK,IAAM,SAAS;;;ACUtB,IAAM,kBAA2D;AAAA,EAC/D,EAAE,OAAO,WAAW,OAAO,UAAU;AAAA,EACrC,EAAE,OAAO,SAAS,OAAO,QAAQ;AAAA,EACjC,EAAE,OAAO,cAAc,OAAO,aAAa;AAAA,EAC3C,EAAE,OAAO,eAAe,OAAO,cAAc;AAAA,EAC7C,EAAE,OAAO,eAAe,OAAO,cAAc;AAAA,EAC7C,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,WAAW,OAAO,UAAU;AAAA,EACrC,EAAE,OAAO,MAAM,OAAO,KAAK;AAAA,EAC3B,EAAE,OAAO,WAAW,OAAO,UAAU;AACvC;AAEA,eAAe,gBAAgB,GAAqD;AAAA,EAClF,MAAM,SAAS,MAAM,UAAU,SAAS;AAAA,EACxC,MAAM,SAAkD,CAAC;AAAA,EACzD,iBAAiB,KAAK,OAAO,OAAO,KAAK,GAAG;AAAA,IAC1C,OAAO,KAAK,EAAE,OAAO,GAAG,EAAE,OAAO,EAAE,YAAY,OAAO,EAAE,GAAG,CAAC;AAAA,EAC9D;AAAA,EACA,OAAO,KAAK,CAAC,GAAG,MAAM;AAAA,IACpB,MAAM,OAAO,EAAE,MAAM,WAAW,KAAK,KAAK,EAAE,MAAM,WAAW,IAAI,IAAI,IAAI;AAAA,IACzE,MAAM,OAAO,EAAE,MAAM,WAAW,KAAK,KAAK,EAAE,MAAM,WAAW,IAAI,IAAI,IAAI;AAAA,IACzE,IAAI,SAAS;AAAA,MAAM,OAAO,OAAO;AAAA,IACjC,OAAO,EAAE,MAAM,cAAc,EAAE,KAAK;AAAA,GACrC;AAAA,EACD,OAAO;AAAA;AAGT,SAAS,YAAY,CAAC,QAA0E;AAAA,EAC9F,OAAO,OAAO,IAAI,CAAC,OAAO;AAAA,IACxB,IAAI,EAAE;AAAA,IACN,OAAO,EAAE;AAAA,IACT,aAAa;AAAA,IACb,QAAQ;AAAA,MACN,UAAU,EAAE;AAAA,MACZ,UAAU;AAAA,MACV,OAAO,EAAE;AAAA,MACT,aAAa;AAAA,MACb,OAAO,CAAC;AAAA,MACR,iBAAiB,EAAE,YAAY,EAAE,MAAM;AAAA,MACvC,UAAU,CAAC;AAAA,IACb;AAAA,IACA,KAAK;AAAA,EACP,EAAE;AAAA;AAGG,IAAM,qBAGT,OAAO,UAAU;AAAA,EACnB,IAAI;AAAA,EACJ,IAAI;AAAA,IACF,SAAS,MAAM,iBAAiB;AAAA,IAChC,MAAM;AAAA,IACN,SAAS;AAAA;AAAA,EAEX,SAAS,2BAA2B,QAAQ,MAAM,KAAK;AAAA,EACvD,OAAO,EAAE,SAAS,aAAa,MAAM,EAAE;AAAA;;;ACxDzC,IAAI;AAEJ,eAAe,YAAY,GAAG;AAAA,EAC5B,IAAI,CAAC,WAAW;AAAA,IACd,IAAI;AAAA,MACF,YAAY,MAAa;AAAA,MACzB,MAAM;AAAA,MACN,MAAM,IAAI,MACR,wGACF;AAAA;AAAA,EAEJ;AAAA,EACA,OAAO;AAAA;AAGT,IAAM,gBAAgB,IAAI;AAE1B,eAAe,UAAU,CAAC,WAAmB;AAAA,EAC3C,MAAM,WAAW,MAAM,aAAa;AAAA,EACpC,IAAI,CAAC,cAAc,IAAI,SAAS,GAAG;AAAA,IACjC,IAAI;AAAA,MACF,cAAc,IAAI,WAAW,SAAS,iBAAiB,SAA0B,CAAC;AAAA,MAClF,MAAM;AAAA,MACN,MAAM,WAAW;AAAA,MACjB,IAAI,CAAC,cAAc,IAAI,QAAQ,GAAG;AAAA,QAChC,cAAc,IAAI,UAAU,SAAS,YAAY,QAAQ,CAAC;AAAA,MAC5D;AAAA,MACA,cAAc,IAAI,WAAW,cAAc,IAAI,QAAQ,CAAE;AAAA;AAAA,EAE7D;AAAA,EACA,OAAO,cAAc,IAAI,SAAS;AAAA;AAG7B,IAAM,qBAIT,OAAO,OAAO,UAAU;AAAA,EAC1B,MAAM,MAAM,MAAM,WAAW,aAAa,KAAK,CAAC;AAAA,EAChD,MAAM,SAAS,IAAI,OAAO,MAAM,IAAI;AAAA,EACpC,OAAO,EAAE,OAAO,OAAO,OAAO;AAAA;AAGzB,IAAM,8BAIT,OAAO,OAAO,SAAS,UAAU;AAAA,EACnC,OAAO,mBAAmB,OAAO,OAAO,MAAM,IAAI,IAAI,gBAAgB,EAAE,MAAM;AAAA;;;ACvDzE,IAAM,mBAIT,OAAO,UAAU;AAAA,EACnB,OAAO;AAAA,IACL,OAAO,MAAM;AAAA,IACb,UAAU;AAAA,IACV,WAAW;AAAA,IACX,kBAAkB;AAAA,IAClB,eAAe;AAAA,IACf,WAAW;AAAA,IACX,WAAW;AAAA,IACX,YAAY;AAAA,EACd;AAAA;;;ACVF;AAIO,IAAM,8BAIT,OAAO,OAAO,OAAO,iBAAiB,QAAQ,iBAAiB;AAAA,EACjE,gBAAgB,GAAG,uCAAuC;AAAA,EAC1D,MAAM,SAAS,MAAM,UAAU,KAAK;AAAA,EACpC,MAAM,YAAY,aAAa,KAAK;AAAA,EAEpC,MAAM,SAAS,MAAM,gBAAgB;AAAA,EAErC,MAAM,WAAW,MAAM,OAAO,KAAK,YAAY,OAC7C;AAAA,IACE,OAAO;AAAA,IACP,UAAU,CAAC,EAAE,MAAM,QAAQ,SAAS,MAAM,OAAO,CAAC;AAAA,IAClD,iBAAiB;AAAA,MACf,MAAM;AAAA,MACN,aAAa;AAAA,QACX,MAAM;AAAA,QACN;AAAA,QACA,QAAQ;AAAA,MACV;AAAA,IACF;AAAA,IACA,uBAAuB,MAAM;AAAA,IAC7B,aAAa,MAAM;AAAA,EACrB,GACA,EAAE,OAAO,CACX;AAAA,EAEA,MAAM,UAAU,SAAS,QAAQ,IAAI,SAAS,WAAW;AAAA,EACzD,gBAAgB,KAAK,wCAAwC;AAAA,EAC7D,OAAO,EAAE,QAAQ,KAAK,MAAM,OAAO,EAAE;AAAA;AAGhC,IAAM,qCAIT,gBAAgB,CAClB,OACA,OACA,QACA,cAC4D;AAAA,EAC5D,MAAM,SAAS,MAAM,UAAU,KAAK;AAAA,EACpC,MAAM,YAAY,aAAa,KAAK;AAAA,EAEpC,MAAM,SAAS,MAAM,gBAAgB;AAAA,EAErC,MAAM,SAAS,MAAM,OAAO,KAAK,YAAY,OAC3C;AAAA,IACE,OAAO;AAAA,IACP,UAAU,CAAC,EAAE,MAAM,QAAQ,SAAS,MAAM,OAAO,CAAC;AAAA,IAClD,iBAAiB;AAAA,MACf,MAAM;AAAA,MACN,aAAa;AAAA,QACX,MAAM;AAAA,QACN;AAAA,QACA,QAAQ;AAAA,MACV;AAAA,IACF;AAAA,IACA,uBAAuB,MAAM;AAAA,IAC7B,aAAa,MAAM;AAAA,IACnB,QAAQ;AAAA,EACV,GACA,EAAE,OAAO,CACX;AAAA,EAEA,IAAI,kBAAkB;AAAA,EACtB,iBAAiB,SAAS,QAAQ;AAAA,IAChC,MAAM,QAAQ,MAAM,QAAQ,IAAI,OAAO,WAAW;AAAA,IAClD,IAAI,OAAO;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM,UAAU,iBAAiB,eAAe;AAAA,MAChD,IAAI,YAAY,WAAW;AAAA,QACzB,MAAM,EAAE,MAAM,gBAAgB,MAAM,UAAU,aAAa,QAAQ;AAAA,MACrE;AAAA,IACF;AAAA,EACF;AAAA,EAEA,IAAI;AAAA,EACJ,IAAI;AAAA,IACF,cAAc,KAAK,MAAM,eAAe;AAAA,IACxC,MAAM;AAAA,IACN,cAAc,iBAAiB,eAAe,KAAK,CAAC;AAAA;AAAA,EAEtD,MAAM,EAAE,MAAM,UAAU,MAAM,EAAE,QAAQ,YAAY,EAAoC;AAAA;;;AC5F1F;AAIO,IAAM,uBAIT,OAAO,OAAO,OAAO,iBAAiB,WAAW;AAAA,EACnD,MAAM,SAAS,UAAU;AAAA,EACzB,MAAM,aAAa,wBAAwB,OAAO,iBAAiB;AAAA,EACnE,OAAO,KAAK,YAAY,EAAE,OAAO,OAAO,iBAAiB,WAAW,CAAC;AAAA,EAErE,gBAAgB,GAAG,gCAAgC;AAAA,EACnD,MAAM,SAAS,MAAM,UAAU,KAAK;AAAA,EACpC,MAAM,YAAY,aAAa,KAAK;AAAA,EAEpC,MAAM,WAAW,MAAM,OAAO,WAAW,OACvC;AAAA,IACE,OAAO;AAAA,IACP,OAAO,MAAM;AAAA,EACf,GACA,EAAE,OAAO,CACX;AAAA,EAEA,gBAAgB,KAAK,iCAAiC;AAAA,EACtD,OAAO,QAAQ,YAAY,EAAE,OAAO,OAAO,iBAAiB,WAAW,CAAC;AAAA,EAExE,IAAI,MAAM,QAAQ,MAAM,IAAI,GAAG;AAAA,IAC7B,OAAO;AAAA,MACL,QAAQ,SAAS,KAAK,IACpB,CAAC,SAAkC,IAAI,aAAa,KAAK,SAAS,CACpE;AAAA,IACF;AAAA,EACF;AAAA,EACA,OAAO,EAAE,QAAQ,IAAI,aAAa,SAAS,KAAK,GAAG,SAAS,EAAE;AAAA;;;ACjChE,sBAAS;AAIF,IAAM,wBAIT,OAAO,OAAO,OAAO,iBAAiB,WAAW;AAAA,EACnD,MAAM,SAAS,WAAU;AAAA,EACzB,MAAM,aAAa,yBAAyB,OAAO,iBAAiB;AAAA,EACpE,OAAO,KAAK,YAAY,EAAE,OAAO,OAAO,iBAAiB,WAAW,CAAC;AAAA,EAErE,gBAAgB,GAAG,iCAAiC;AAAA,EACpD,MAAM,SAAS,MAAM,UAAU,KAAK;AAAA,EACpC,MAAM,YAAY,aAAa,KAAK;AAAA,EAEpC,MAAM,WAAW,MAAM,OAAO,KAAK,YAAY,OAC7C;AAAA,IACE,OAAO;AAAA,IACP,UAAU,CAAC,EAAE,MAAM,QAAQ,SAAS,MAAM,OAAO,CAAC;AAAA,IAClD,uBAAuB,MAAM;AAAA,IAC7B,aAAa,MAAM;AAAA,IACnB,OAAO,MAAM;AAAA,IACb,mBAAmB,MAAM;AAAA,IACzB,kBAAkB,MAAM;AAAA,EAC1B,GACA,EAAE,OAAO,CACX;AAAA,EAEA,gBAAgB,KAAK,kCAAkC;AAAA,EACvD,OAAO,QAAQ,YAAY,EAAE,OAAO,OAAO,iBAAiB,WAAW,CAAC;AAAA,EACxE,OAAO,EAAE,MAAM,SAAS,QAAQ,IAAI,SAAS,WAAW,GAAG;AAAA;AAGtD,IAAM,+BAIT,gBAAgB,CAAC,OAAO,OAAO,QAA8D;AAAA,EAC/F,MAAM,SAAS,MAAM,UAAU,KAAK;AAAA,EACpC,MAAM,YAAY,aAAa,KAAK;AAAA,EAEpC,MAAM,SAAS,MAAM,OAAO,KAAK,YAAY,OAC3C;AAAA,IACE,OAAO;AAAA,IACP,UAAU,CAAC,EAAE,MAAM,QAAQ,SAAS,MAAM,OAAO,CAAC;AAAA,IAClD,uBAAuB,MAAM;AAAA,IAC7B,aAAa,MAAM;AAAA,IACnB,OAAO,MAAM;AAAA,IACb,mBAAmB,MAAM;AAAA,IACzB,kBAAkB,MAAM;AAAA,IACxB,QAAQ;AAAA,EACV,GACA,EAAE,OAAO,CACX;AAAA,EAEA,iBAAiB,SAAS,QAAQ;AAAA,IAChC,MAAM,QAAQ,MAAM,QAAQ,IAAI,OAAO,WAAW;AAAA,IAClD,IAAI,OAAO;AAAA,MACT,MAAM,EAAE,MAAM,cAAc,MAAM,QAAQ,WAAW,MAAM;AAAA,IAC7D;AAAA,EACF;AAAA,EACA,MAAM,EAAE,MAAM,UAAU,MAAM,CAAC,EAA8B;AAAA;;;AC5DxD,IAAM,sBAIT,OAAO,OAAO,OAAO,iBAAiB,WAAW;AAAA,EACnD,gBAAgB,GAAG,gCAAgC;AAAA,EACnD,MAAM,SAAS,MAAM,UAAU,KAAK;AAAA,EACpC,MAAM,YAAY,aAAa,KAAK;AAAA,EAEpC,MAAM,WAAW,MAAM,OAAO,KAAK,YAAY,OAC7C;AAAA,IACE,OAAO;AAAA,IACP,UAAU;AAAA,MACR,EAAE,MAAM,UAAU,SAAS,MAAM,OAAO;AAAA,MACxC,EAAE,MAAM,QAAQ,SAAS,MAAM,KAAK;AAAA,IACtC;AAAA,EACF,GACA,EAAE,OAAO,CACX;AAAA,EAEA,gBAAgB,KAAK,iCAAiC;AAAA,EACtD,OAAO,EAAE,MAAM,SAAS,QAAQ,IAAI,SAAS,WAAW,GAAG;AAAA;AAGtD,IAAM,6BAIT,gBAAgB,CAAC,OAAO,OAAO,QAA4D;AAAA,EAC7F,MAAM,SAAS,MAAM,UAAU,KAAK;AAAA,EACpC,MAAM,YAAY,aAAa,KAAK;AAAA,EAEpC,MAAM,SAAS,MAAM,OAAO,KAAK,YAAY,OAC3C;AAAA,IACE,OAAO;AAAA,IACP,UAAU;AAAA,MACR,EAAE,MAAM,UAAU,SAAS,MAAM,OAAO;AAAA,MACxC,EAAE,MAAM,QAAQ,SAAS,MAAM,KAAK;AAAA,IACtC;AAAA,IACA,QAAQ;AAAA,EACV,GACA,EAAE,OAAO,CACX;AAAA,EAEA,iBAAiB,SAAS,QAAQ;AAAA,IAChC,MAAM,QAAQ,MAAM,QAAQ,IAAI,OAAO,WAAW;AAAA,IAClD,IAAI,OAAO;AAAA,MACT,MAAM,EAAE,MAAM,cAAc,MAAM,QAAQ,WAAW,MAAM;AAAA,IAC7D;AAAA,EACF;AAAA,EACA,MAAM,EAAE,MAAM,UAAU,MAAM,CAAC,EAA4B;AAAA;;;AClDtD,IAAM,qBAIT,OAAO,OAAO,OAAO,iBAAiB,WAAW;AAAA,EACnD,gBAAgB,GAAG,oCAAoC;AAAA,EACvD,MAAM,SAAS,MAAM,UAAU,KAAK;AAAA,EACpC,MAAM,YAAY,aAAa,KAAK;AAAA,EAEpC,MAAM,WAAW,MAAM,OAAO,KAAK,YAAY,OAC7C;AAAA,IACE,OAAO;AAAA,IACP,UAAU;AAAA,MACR,EAAE,MAAM,UAAU,SAAS,0CAA0C;AAAA,MACrE,EAAE,MAAM,QAAQ,SAAS,MAAM,KAAK;AAAA,IACtC;AAAA,EACF,GACA,EAAE,OAAO,CACX;AAAA,EAEA,gBAAgB,KAAK,qCAAqC;AAAA,EAC1D,OAAO,EAAE,MAAM,SAAS,QAAQ,IAAI,SAAS,WAAW,GAAG;AAAA;AAGtD,IAAM,4BAIT,gBAAgB,CAAC,OAAO,OAAO,QAA2D;AAAA,EAC5F,MAAM,SAAS,MAAM,UAAU,KAAK;AAAA,EACpC,MAAM,YAAY,aAAa,KAAK;AAAA,EAEpC,MAAM,SAAS,MAAM,OAAO,KAAK,YAAY,OAC3C;AAAA,IACE,OAAO;AAAA,IACP,UAAU;AAAA,MACR,EAAE,MAAM,UAAU,SAAS,0CAA0C;AAAA,MACrE,EAAE,MAAM,QAAQ,SAAS,MAAM,KAAK;AAAA,IACtC;AAAA,IACA,QAAQ;AAAA,EACV,GACA,EAAE,OAAO,CACX;AAAA,EAEA,iBAAiB,SAAS,QAAQ;AAAA,IAChC,MAAM,QAAQ,MAAM,QAAQ,IAAI,OAAO,WAAW;AAAA,IAClD,IAAI,OAAO;AAAA,MACT,MAAM,EAAE,MAAM,cAAc,MAAM,QAAQ,WAAW,MAAM;AAAA,IAC7D;AAAA,EACF;AAAA,EACA,MAAM,EAAE,MAAM,UAAU,MAAM,CAAC,EAA2B;AAAA;;;AC5CrD,IAAM,eAA6E;AAAA,EACxF,oBAAoB;AAAA,EACpB,eAAe;AAAA,EACf,mBAAmB;AAAA,EACnB,kBAAkB;AAAA,EAClB,iBAAiB;AAAA,EACjB,iBAAiB;AAAA,EACjB,0BAA0B;AAAA,EAC1B,iBAAiB;AACnB;AAEO,IAAM,sBAGT;AAAA,EACF,oBAAoB;AAAA,EACpB,kBAAkB;AAAA,EAClB,iBAAiB;AAAA,EACjB,0BAA0B;AAC5B;AAEO,IAAM,wBAGT;AAAA,EACF,iBAAiB;AACnB;;;AC1CA;AAAA;AAAA;AAUO,MAAM,6BAA6B,WAA8B;AAAA,EAC7D,OAAO;AAAA,EACP,cAAc;AAAA,EACd,UAAU;AAAA,EACV,kBAAkB;AAAA,EAElB,YAAY;AAAA,IACnB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EAEA,WAAW,CACT,OACA,aACA,eACA;AAAA,IACA,MAAM,OAAO,aAAa,aAAa;AAAA;AAE3C;;;AC1BA,eAAsB,oBAAoB,CAAC,SAAoD;AAAA,EAC7F,MAAM,IAAI,qBAAqB,cAAc,qBAAqB,qBAAqB,EAAE,SACvF,WAAW,CAAC,CACd;AAAA;;ACXF,sBAAS;;;ACAT;AAAA,gBACE;AAAA;AAkBK,MAAM,uBAAuB,YAA8B;AAAA,EACvD,OAAO;AAAA,EACP,cAAc;AAAA,EACd,UAAU;AAAA,EACV,kBAAkB;AAAA,EAElB,YAAY;AAAA,IACnB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EAEA,WAAW,CACT,OACA,aACA,eACA;AAAA,IACA,MAAM,OAAO,aAAa,aAAa;AAAA;AAE3C;;;ADnCA,eAAsB,oBAAoB,GAAkB;AAAA,EAC1D,MAAM,eAAe,sBAAsB,IAAI,aAAa;AAAA,EAC5D,IAAI,eACF,cACA,qBACA,qBACF,EAAE,uBAAuB,YAAY;AAAA,EACrC,aAAa,UAAU;AAAA,EACvB,WAAU,EAAE,KAAK,4CAA4C;AAAA;",
23
+ "debugId": "2A159632B382F9E664756E2164756E21",
25
24
  "names": []
26
25
  }