@workglow/openai 0.2.28 → 0.2.30

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.
@@ -2,9 +2,9 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/ai-provider/common/OpenAI_Client.ts", "../src/ai-provider/registerOpenAiInline.browser.ts", "../src/ai-provider/common/OpenAI_ModelSearch.ts", "../src/ai-provider/common/OpenAI_Constants.ts", "../src/ai-provider/common/OpenAI_CountTokens.browser.ts", "../src/ai-provider/common/OpenAI_ModelInfo.ts", "../src/ai-provider/common/OpenAI_StructuredGeneration.ts", "../src/ai-provider/common/OpenAI_TextEmbedding.ts", "../src/ai-provider/common/OpenAI_TextGeneration.ts", "../src/ai-provider/common/OpenAI_TextRewriter.ts", "../src/ai-provider/common/OpenAI_TextSummary.ts", "../src/ai-provider/common/OpenAI_ToolCalling.ts", "../src/ai-provider/common/OpenAI_ImageGenerate.ts", "../src/ai-provider/common/OpenAI_ImageEdit.ts", "../src/ai-provider/common/OpenAI_JobRunFns.browser.ts", "../src/ai-provider/OpenAiQueuedProvider.ts", "../src/ai-provider/registerOpenAiWorker.browser.ts", "../src/ai-provider/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 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\" || \"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",
5
+ "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { isBrowserLike, loadProviderSdk, resolveApiKey } from \"@workglow/ai-provider/common\";\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 // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const sdk = await loadProviderSdk<{ default: new (config: any) => any }>(\"openai\", \"OpenAI\");\n _OpenAIClass = sdk.default;\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 = resolveApiKey({\n config,\n envVar: \"OPENAI_API_KEY\",\n providerLabel: \"OpenAI\",\n });\n try {\n return new OpenAI({\n apiKey,\n baseURL: config?.base_url || undefined,\n organization: config?.organization || undefined,\n dangerouslyAllowBrowser: isBrowserLike(),\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 { AiProviderRegisterOptions } from \"@workglow/ai\";\nimport { registerProviderInline } from \"@workglow/ai-provider/common\";\nimport {\n OPENAI_PREVIEW_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 registerProviderInline(\n new OpenAiQueuedProvider(OPENAI_TASKS, OPENAI_STREAM_TASKS, OPENAI_PREVIEW_TASKS),\n \"OpenAI\",\n options\n );\n}\n",
7
- "/**\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 \"@workglow/ai-provider/common\";\nimport { getClient } from \"./OpenAI_Client\";\nimport { OPENAI } from \"./OpenAI_Constants\";\n\nconst OPENAI_FALLBACK: Array<{ label: string; value: string }> = [\n { label: \"gpt-image-2\", value: \"gpt-image-2\" },\n { label: \"dall-e-3\", value: \"dall-e-3\" },\n { label: \"gpt-5.5\", value: \"gpt-5.5\" },\n { label: \"gpt-5.4-mini\", value: \"gpt-5.4-mini\" },\n { label: \"gpt-5.4-nano\", value: \"gpt-5.4-nano\" },\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\nconst OPENAI_IMAGE_MODELS: Array<{ value: string; tasks: string[] }> = [\n { value: \"gpt-image-2\", tasks: [\"ImageGenerateTask\", \"ImageEditTask\"] },\n { value: \"dall-e-3\", tasks: [\"ImageGenerateTask\"] },\n];\n\nasync function listOpenAiModels(\n credentialKey: string\n): Promise<Array<{ label: string; value: string }>> {\n const client = await getClient({\n provider: OPENAI,\n provider_config: { model_name: \"\", credential_key: credentialKey },\n });\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 const imageEntry = OPENAI_IMAGE_MODELS.find((i) => i.value === m.value);\n return {\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: imageEntry?.tasks ?? [],\n provider_config: { model_name: m.value },\n metadata: {},\n },\n raw: m,\n };\n });\n}\n\nexport const OpenAI_ModelSearch: AiProviderRunFn<\n ModelSearchTaskInput,\n ModelSearchTaskOutput\n> = async (input) => {\n let models: Array<{ label: string; value: string }>;\n if (!input.credential_key) {\n models = OPENAI_FALLBACK;\n } else {\n models = await listOpenAiModels(input.credential_key);\n }\n models = filterLabeledModelsByQuery(models, input.query);\n return { results: mapModelList(models) };\n};\n",
7
+ "/**\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 \"@workglow/ai-provider/common\";\nimport { getClient } from \"./OpenAI_Client\";\nimport { OPENAI } from \"./OpenAI_Constants\";\n\ninterface OpenAiModelListItem {\n readonly label: string;\n readonly value: string;\n readonly description?: string;\n}\n\nconst OPENAI_FALLBACK: Array<{ label: string; value: string }> = [\n { label: \"gpt-image-2\", value: \"gpt-image-2\" },\n { label: \"dall-e-3\", value: \"dall-e-3\" },\n { label: \"gpt-5.5\", value: \"gpt-5.5\" },\n { label: \"gpt-5.4-mini\", value: \"gpt-5.4-mini\" },\n { label: \"gpt-5.4-nano\", value: \"gpt-5.4-nano\" },\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\nconst OPENAI_IMAGE_MODELS: Array<{ value: string; tasks: string[] }> = [\n { value: \"gpt-image-2\", tasks: [\"ImageGenerateTask\", \"ImageEditTask\"] },\n { value: \"dall-e-3\", tasks: [\"ImageGenerateTask\"] },\n];\n\nasync function listOpenAiModels(credentialKey: string): Promise<OpenAiModelListItem[]> {\n const client = await getClient({\n provider: OPENAI,\n provider_config: { model_name: \"\", credential_key: credentialKey },\n });\n const models: OpenAiModelListItem[] = [];\n for await (const m of client.models.list()) {\n models.push({ label: m.id, value: m.id, description: m.owned_by });\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: OpenAiModelListItem[]): ModelSearchResultItem[] {\n return models.map((m) => {\n const imageEntry = OPENAI_IMAGE_MODELS.find((i) => i.value === m.value);\n return {\n id: m.value,\n label: m.label,\n description: m.description ?? \"\",\n record: {\n model_id: m.value,\n provider: OPENAI,\n title: m.value,\n description: \"\",\n tasks: imageEntry?.tasks ?? [],\n provider_config: { model_name: m.value },\n metadata: {},\n },\n raw: m,\n };\n });\n}\n\nexport const OpenAI_ModelSearch: AiProviderRunFn<\n ModelSearchTaskInput,\n ModelSearchTaskOutput\n> = async (input) => {\n let models: OpenAiModelListItem[];\n if (!input.credential_key) {\n models = OPENAI_FALLBACK;\n } else {\n models = await listOpenAiModels(input.credential_key);\n }\n models = filterLabeledModelsByQuery(models, input.query);\n return { results: mapModelList(models) };\n};\n",
8
8
  "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nexport const OPENAI = \"OPENAI\";\n",
9
9
  "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {\n AiProviderPreviewRunFn,\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_Preview: AiProviderPreviewRunFn<\n CountTokensTaskInput,\n CountTokensTaskOutput,\n OpenAiModelConfig\n> = async (input, 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\n/** Known OpenAI embedding model dimensions. */\nconst OPENAI_EMBEDDING_DIMENSIONS: Record<string, { native_dimensions: number; mrl: boolean }> = {\n \"text-embedding-3-small\": { native_dimensions: 1536, mrl: true },\n \"text-embedding-3-large\": { native_dimensions: 3072, mrl: true },\n \"text-embedding-ada-002\": { native_dimensions: 1536, mrl: false },\n};\n\nexport const OpenAI_ModelInfo: AiProviderRunFn<\n ModelInfoTaskInput,\n ModelInfoTaskOutput,\n OpenAiModelConfig\n> = async (input, model) => {\n if (input.detail === \"dimensions\") {\n const pc = model?.provider_config as Record<string, unknown>;\n let native_dimensions =\n typeof pc?.native_dimensions === \"number\" ? pc.native_dimensions : undefined;\n let mrl = typeof pc?.mrl === \"boolean\" ? pc.mrl : undefined;\n\n // Lookup table fallback\n if (native_dimensions === undefined) {\n const modelName = (pc?.model_name as string) ?? \"\";\n const known = OPENAI_EMBEDDING_DIMENSIONS[modelName];\n if (known) {\n native_dimensions = known.native_dimensions;\n mrl = mrl ?? known.mrl;\n }\n }\n\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 ...(native_dimensions !== undefined ? { native_dimensions } : {}),\n ...(mrl !== undefined ? { mrl } : {}),\n };\n }\n\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",
@@ -13,15 +13,15 @@
13
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
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
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 { 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 { 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 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 params.tools = tools;\n params.tool_choice = toolChoice;\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 const toolOptions = toolChoice === undefined ? {} : { tools, tool_choice: 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 ...toolOptions,\n },\n { signal }\n );\n\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 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 let parsedInput: Record<string, unknown>;\n try {\n parsedInput = JSON.parse(acc.arguments);\n } catch {\n const partial = parsePartialJson(acc.arguments);\n parsedInput = (partial as Record<string, unknown>) ?? {};\n }\n yield {\n type: \"object-delta\",\n port: \"toolCalls\",\n objectDelta: [{ id: acc.id, name: acc.name, input: parsedInput }],\n };\n }\n }\n }\n\n yield { type: \"finish\", data: { text: \"\", toolCalls: [] } as ToolCallingTaskOutput };\n};\n",
16
+ "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { filterValidToolCalls, toOpenAIMessages } from \"@workglow/ai/worker\";\nimport type {\n AiProviderRunFn,\n AiProviderStreamFn,\n ToolCallingTaskInput,\n ToolCallingTaskOutput,\n} from \"@workglow/ai\";\nimport type { StreamEvent } from \"@workglow/task-graph\";\nimport {\n accumulateOpenAIStream,\n buildOpenAITools,\n mapOpenAIToolChoice,\n parseOpenAIToolCallMessage,\n} from \"@workglow/ai-provider/common\";\nimport type { OpenAiModelConfig } from \"./OpenAI_ModelSchema\";\nimport { getClient, getModelName } from \"./OpenAI_Client\";\n\nexport const OpenAI_ToolCalling: AiProviderRunFn<\n ToolCallingTaskInput,\n ToolCallingTaskOutput,\n OpenAiModelConfig\n> = async (input, model, update_progress, signal) => {\n update_progress(0, \"Starting OpenAI tool calling\");\n const client = await getClient(model);\n const modelName = getModelName(model);\n\n const tools = buildOpenAITools(input.tools);\n const messages = toOpenAIMessages(input);\n const toolChoice = mapOpenAIToolChoice(input.toolChoice, true);\n\n const response = await client.chat.completions.create(\n {\n model: modelName,\n messages,\n max_completion_tokens: input.maxTokens,\n temperature: input.temperature,\n tools,\n tool_choice: toolChoice,\n },\n { signal }\n );\n\n const text = response.choices[0]?.message?.content ?? \"\";\n const toolCalls = parseOpenAIToolCallMessage(response.choices[0]?.message?.tool_calls);\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 = buildOpenAITools(input.tools);\n const messages = toOpenAIMessages(input);\n const toolChoice = mapOpenAIToolChoice(input.toolChoice, true);\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 tools,\n tool_choice: toolChoice,\n },\n { signal }\n );\n\n yield* accumulateOpenAIStream(stream);\n};\n",
17
17
  "/**\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 ImageGenerateTaskInput,\n ImageGenerateTaskOutput,\n ModelConfig,\n} from \"@workglow/ai\";\nimport { ImageGenerationContentPolicyError, ImageGenerationProviderError } from \"@workglow/ai\";\nimport type { StreamEvent } from \"@workglow/task-graph\";\nimport type { ImageValue } from \"@workglow/util/media\";\nimport { getLogger } from \"@workglow/util/worker\";\n\nimport { dataUriToImageValue } from \"@workglow/ai-provider/common\";\nimport type { OpenAiModelConfig } from \"./OpenAI_ModelSchema\";\nimport { getClient, getModelName } from \"./OpenAI_Client\";\n\n/** Maps the normalized aspect ratio to gpt-image-2 / DALL-E supported sizes. */\nfunction aspectRatioToSize(\n aspectRatio: string | undefined\n): \"1024x1024\" | \"1024x1536\" | \"1536x1024\" {\n switch (aspectRatio) {\n case \"16:9\":\n case \"4:3\":\n return \"1536x1024\";\n case \"9:16\":\n case \"3:4\":\n return \"1024x1536\";\n case \"1:1\":\n default:\n return \"1024x1024\";\n }\n}\n\nasync function decodeB64Png(b64: string): Promise<ImageValue> {\n return dataUriToImageValue(`data:image/png;base64,${b64}`);\n}\n\nfunction modelIdOf(model: ModelConfig | undefined): string {\n return (\n model?.model_id ??\n (model?.provider_config as { model_name?: string } | undefined)?.model_name ??\n \"openai\"\n );\n}\n\n/** Non-streaming path. Used for DALL-E or when streaming is not requested. */\nexport const OpenAI_ImageGenerate: AiProviderRunFn<\n ImageGenerateTaskInput,\n ImageGenerateTaskOutput,\n OpenAiModelConfig\n> = async (input, model, update_progress, signal) => {\n const logger = getLogger();\n const timer = `openai:ImageGenerate:${getModelName(model)}`;\n logger.time(timer);\n update_progress(0, \"Starting OpenAI image generation\");\n\n const client = await getClient(model);\n const modelName = getModelName(model);\n const size = aspectRatioToSize(input.aspectRatio);\n\n try {\n const resp = await client.images.generate(\n {\n model: modelName,\n prompt: input.prompt,\n size,\n quality: input.quality as\n | \"standard\"\n | \"hd\"\n | \"low\"\n | \"medium\"\n | \"high\"\n | \"auto\"\n | undefined,\n n: 1,\n response_format: \"b64_json\",\n ...(input.providerOptions ?? {}),\n } as Parameters<typeof client.images.generate>[0],\n { signal }\n );\n\n const b64 = resp.data?.[0]?.b64_json;\n if (!b64) {\n throw new ImageGenerationProviderError(modelIdOf(model), \"Empty response (no b64_json)\");\n }\n const image = await decodeB64Png(b64);\n update_progress(100, \"Completed OpenAI image generation\");\n logger.timeEnd(timer);\n return { image };\n } catch (err) {\n if (\n err instanceof ImageGenerationProviderError ||\n err instanceof ImageGenerationContentPolicyError\n ) {\n throw err;\n }\n const msg = err instanceof Error ? err.message : \"unknown error\";\n if (/safety|policy|moderation/i.test(msg)) {\n throw new ImageGenerationContentPolicyError(modelIdOf(model), msg);\n }\n throw new ImageGenerationProviderError(modelIdOf(model), msg, { cause: err as Error });\n }\n};\n\n/**\n * Streaming path. Yields snapshot events for each partial + final image, then finish.\n * Uses SDK v6+ streaming support: `stream: true` + `partial_images: 3` on GPT image models.\n * DALL-E 3 does not support streaming (the SDK overload for stream=true is not valid for it),\n * so this function falls back to the non-streaming path for DALL-E models.\n */\nexport const OpenAI_ImageGenerate_Stream: AiProviderStreamFn<\n ImageGenerateTaskInput,\n ImageGenerateTaskOutput,\n OpenAiModelConfig\n> = async function* (input, model, signal): AsyncIterable<StreamEvent<ImageGenerateTaskOutput>> {\n const client = await getClient(model);\n const modelName = getModelName(model);\n const size = aspectRatioToSize(input.aspectRatio);\n\n // DALL-E 2 and DALL-E 3 do not support streaming — fall back to non-streaming.\n if (modelName.startsWith(\"dall-e\")) {\n try {\n const resp = await (client.images.generate as Function)(\n {\n model: modelName,\n prompt: input.prompt,\n size,\n quality: input.quality,\n n: 1,\n response_format: \"b64_json\",\n ...(input.providerOptions ?? {}),\n },\n { signal }\n );\n const b64 = resp.data?.[0]?.b64_json;\n if (!b64) {\n throw new ImageGenerationProviderError(modelIdOf(model), \"Empty response (no b64_json)\");\n }\n const image = await decodeB64Png(b64);\n yield { type: \"snapshot\", data: { image } } as StreamEvent<ImageGenerateTaskOutput>;\n yield { type: \"finish\", data: {} as ImageGenerateTaskOutput };\n return;\n } catch (err) {\n if (\n err instanceof ImageGenerationProviderError ||\n err instanceof ImageGenerationContentPolicyError\n ) {\n throw err;\n }\n const msg = err instanceof Error ? err.message : \"unknown error\";\n if (/safety|policy|moderation/i.test(msg)) {\n throw new ImageGenerationContentPolicyError(modelIdOf(model), msg);\n }\n throw new ImageGenerationProviderError(modelIdOf(model), msg, { cause: err as Error });\n }\n }\n\n // GPT image models support streaming.\n try {\n const stream = await client.images.generate(\n {\n model: modelName,\n prompt: input.prompt,\n size,\n quality: input.quality as \"low\" | \"medium\" | \"high\" | \"auto\" | undefined,\n n: 1,\n stream: true,\n partial_images: 3,\n ...(input.providerOptions ?? {}),\n },\n { signal }\n );\n\n for await (const event of stream) {\n if (signal.aborted) return;\n const b64 = event.b64_json;\n if (!b64) continue;\n const image = await decodeB64Png(b64);\n yield { type: \"snapshot\", data: { image } } as StreamEvent<ImageGenerateTaskOutput>;\n }\n yield { type: \"finish\", data: {} as ImageGenerateTaskOutput };\n } catch (err) {\n if (\n err instanceof ImageGenerationProviderError ||\n err instanceof ImageGenerationContentPolicyError\n ) {\n throw err;\n }\n const msg = err instanceof Error ? err.message : \"unknown error\";\n if (/safety|policy|moderation/i.test(msg)) {\n throw new ImageGenerationContentPolicyError(modelIdOf(model), msg);\n }\n throw new ImageGenerationProviderError(modelIdOf(model), msg, { cause: err as Error });\n }\n};\n",
18
18
  "/**\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 ImageEditTaskInput,\n ImageEditTaskOutput,\n ModelConfig,\n} from \"@workglow/ai\";\nimport { ImageGenerationContentPolicyError, ImageGenerationProviderError } from \"@workglow/ai\";\nimport type { StreamEvent } from \"@workglow/task-graph\";\nimport type { ImageValue } from \"@workglow/util/media\";\nimport { getLogger } from \"@workglow/util/worker\";\n\nimport { dataUriToImageValue, imageValueToPngBytes } from \"@workglow/ai-provider/common\";\nimport { getClient, getModelName } from \"./OpenAI_Client\";\nimport type { OpenAiModelConfig } from \"./OpenAI_ModelSchema\";\n\ntype OpenAiImageInput = ImageValue | string;\n\nfunction aspectRatioToSize(\n aspectRatio: string | undefined\n): \"1024x1024\" | \"1024x1536\" | \"1536x1024\" {\n switch (aspectRatio) {\n case \"16:9\":\n case \"4:3\":\n return \"1536x1024\";\n case \"9:16\":\n case \"3:4\":\n return \"1024x1536\";\n case \"1:1\":\n default:\n return \"1024x1024\";\n }\n}\n\nfunction modelIdOf(model: ModelConfig | undefined): string {\n return (\n model?.model_id ??\n (model?.provider_config as { model_name?: string } | undefined)?.model_name ??\n \"openai\"\n );\n}\n\n/**\n * Encode an inbound `ImageValue` (or a serialized data URI from the worker\n * boundary) to PNG bytes wrapped in a File suitable for the OpenAI multipart\n * upload. Uses `OpenAI.toFile` when available (SDK v4+), otherwise falls\n * back to `new File(...)`.\n */\nasync function gpuImageToOpenAiFile(image: OpenAiImageInput, name: string): Promise<unknown> {\n const bytes = await imageValueToPngBytes(image);\n // Copy to a plain ArrayBuffer to avoid SharedArrayBuffer typing issues with BlobPart.\n const buffer: ArrayBuffer =\n bytes.buffer instanceof ArrayBuffer\n ? bytes.buffer.slice(bytes.byteOffset, bytes.byteOffset + bytes.byteLength)\n : new Uint8Array(bytes).buffer;\n const sdk = (await import(\"openai\")) as unknown as {\n toFile?: (input: unknown, name?: string, options?: { type?: string }) => Promise<unknown>;\n };\n if (typeof sdk.toFile === \"function\") {\n return sdk.toFile(new Blob([buffer], { type: \"image/png\" }), name, { type: \"image/png\" });\n }\n return new File([buffer], name, { type: \"image/png\" });\n}\n\nasync function decodeB64Png(b64: string): Promise<ImageValue> {\n return dataUriToImageValue(`data:image/png;base64,${b64}`);\n}\n\nasync function buildEditPayload(\n input: ImageEditTaskInput,\n model: OpenAiModelConfig | undefined\n): Promise<Record<string, unknown>> {\n const modelName = getModelName(model);\n // image/mask/additionalImages may be data URI strings when the input crossed\n // the worker boundary via AiImageOutputTask.getJobInput materialization.\n const primary = await gpuImageToOpenAiFile(\n input.image as unknown as OpenAiImageInput,\n \"image.png\"\n );\n const additionalFiles =\n input.additionalImages && (input.additionalImages as OpenAiImageInput[]).length > 0\n ? await Promise.all(\n (input.additionalImages as OpenAiImageInput[]).map((g, i) =>\n gpuImageToOpenAiFile(g, `image-${i + 1}.png`)\n )\n )\n : [];\n const imageField = additionalFiles.length === 0 ? primary : [primary, ...additionalFiles];\n\n const payload: Record<string, unknown> = {\n model: modelName,\n prompt: input.prompt,\n image: imageField,\n size: aspectRatioToSize(input.aspectRatio),\n quality: input.quality,\n n: 1,\n ...(input.providerOptions ?? {}),\n };\n if (input.mask) {\n payload.mask = await gpuImageToOpenAiFile(\n input.mask as unknown as OpenAiImageInput,\n \"mask.png\"\n );\n }\n return payload;\n}\n\nexport const OpenAI_ImageEdit: AiProviderRunFn<\n ImageEditTaskInput,\n ImageEditTaskOutput,\n OpenAiModelConfig\n> = async (input, model, update_progress, signal) => {\n const logger = getLogger();\n const timer = `openai:ImageEdit:${getModelName(model)}`;\n logger.time(timer);\n update_progress(0, \"Starting OpenAI image edit\");\n\n const client = await getClient(model);\n\n try {\n const payload = await buildEditPayload(input, model);\n const resp = (await (client.images.edit as Function)(payload, { signal })) as {\n data?: Array<{ b64_json?: string }>;\n };\n const b64 = resp.data?.[0]?.b64_json;\n if (!b64) {\n throw new ImageGenerationProviderError(modelIdOf(model), \"Empty response (no b64_json)\");\n }\n const image = await decodeB64Png(b64);\n update_progress(100, \"Completed OpenAI image edit\");\n logger.timeEnd(timer);\n return { image };\n } catch (err) {\n if (\n err instanceof ImageGenerationProviderError ||\n err instanceof ImageGenerationContentPolicyError\n ) {\n throw err;\n }\n const msg = err instanceof Error ? err.message : \"unknown error\";\n if (/safety|policy|moderation/i.test(msg)) {\n throw new ImageGenerationContentPolicyError(modelIdOf(model), msg);\n }\n throw new ImageGenerationProviderError(modelIdOf(model), msg, { cause: err as Error });\n }\n};\n\n/**\n * Streaming edit path. Yields snapshot events for each partial + final image, then finish.\n * SDK v6.35+ supports `stream: true` on `images.edit` for GPT image models.\n */\nexport const OpenAI_ImageEdit_Stream: AiProviderStreamFn<\n ImageEditTaskInput,\n ImageEditTaskOutput,\n OpenAiModelConfig\n> = async function* (input, model, signal): AsyncIterable<StreamEvent<ImageEditTaskOutput>> {\n const client = await getClient(model);\n\n try {\n const payload = await buildEditPayload(input, model);\n const stream = (await (client.images.edit as Function)(\n { ...payload, stream: true, partial_images: 3 },\n { signal }\n )) as AsyncIterable<{ b64_json?: string }>;\n\n for await (const event of stream) {\n if (signal.aborted) return;\n const b64 = event.b64_json;\n if (!b64) continue;\n const image = await decodeB64Png(b64);\n yield { type: \"snapshot\", data: { image } } as StreamEvent<ImageEditTaskOutput>;\n }\n yield { type: \"finish\", data: {} as ImageEditTaskOutput };\n } catch (err) {\n if (\n err instanceof ImageGenerationProviderError ||\n err instanceof ImageGenerationContentPolicyError\n ) {\n throw err;\n }\n const msg = err instanceof Error ? err.message : \"unknown error\";\n if (/safety|policy|moderation/i.test(msg)) {\n throw new ImageGenerationContentPolicyError(modelIdOf(model), msg);\n }\n throw new ImageGenerationProviderError(modelIdOf(model), msg, { cause: err as Error });\n }\n};\n",
19
19
  "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { AiProviderPreviewRunFn, 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_Preview } 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\";\nimport { OpenAI_ImageGenerate, OpenAI_ImageGenerate_Stream } from \"./OpenAI_ImageGenerate\";\nimport { OpenAI_ImageEdit, OpenAI_ImageEdit_Stream } from \"./OpenAI_ImageEdit\";\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 ImageGenerateTask: OpenAI_ImageGenerate,\n ImageEditTask: OpenAI_ImageEdit,\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 ImageGenerateTask: OpenAI_ImageGenerate_Stream,\n ImageEditTask: OpenAI_ImageEdit_Stream,\n};\n\nexport const OPENAI_PREVIEW_TASKS: Record<\n string,\n AiProviderPreviewRunFn<any, any, OpenAiModelConfig>\n> = {\n CountTokensTask: OpenAI_CountTokens_Preview,\n};\n",
20
- "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { AiProvider } from \"@workglow/ai\";\nimport type { AiProviderPreviewRunFn, AiProviderRunFn, AiProviderStreamFn } 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 \"ToolCallingTask\",\n \"ModelSearchTask\",\n \"ImageGenerateTask\",\n \"ImageEditTask\",\n ] as const;\n\n constructor(\n tasks?: Record<string, AiProviderRunFn<any, any, OpenAiModelConfig>>,\n streamTasks?: Record<string, AiProviderStreamFn<any, any, OpenAiModelConfig>>,\n previewTasks?: Record<string, AiProviderPreviewRunFn<any, any, OpenAiModelConfig>>\n ) {\n super(tasks, streamTasks, previewTasks);\n }\n}\n",
20
+ "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { AiProvider } from \"@workglow/ai\";\nimport { createCloudProviderClass } from \"@workglow/ai-provider/common\";\nimport { OPENAI } from \"./common/OpenAI_Constants\";\nimport type { OpenAiModelConfig } from \"./common/OpenAI_ModelSchema\";\n\nconst OPENAI_QUEUED_TASK_TYPES = [\n \"TextGenerationTask\",\n \"TextEmbeddingTask\",\n \"TextRewriterTask\",\n \"TextSummaryTask\",\n \"CountTokensTask\",\n \"ModelInfoTask\",\n \"StructuredGenerationTask\",\n \"ToolCallingTask\",\n \"ModelSearchTask\",\n \"ImageGenerateTask\",\n \"ImageEditTask\",\n] as const;\n\n/** Main-thread registration (inline or worker-backed). No queue uses direct execution. */\nexport class OpenAiQueuedProvider extends createCloudProviderClass<\n OpenAiModelConfig,\n typeof OPENAI_QUEUED_TASK_TYPES\n>(AiProvider, {\n name: OPENAI,\n displayName: \"OpenAI\",\n taskTypes: OPENAI_QUEUED_TASK_TYPES,\n}) {}\n",
21
21
  "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { registerProviderWorker } from \"@workglow/ai-provider/common\";\nimport {\n OPENAI_PREVIEW_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 await registerProviderWorker(\n (ws) =>\n new OpenAiProvider(\n OPENAI_TASKS,\n OPENAI_STREAM_TASKS,\n OPENAI_PREVIEW_TASKS\n ).registerOnWorkerServer(ws),\n \"OpenAI\"\n );\n}\n",
22
- "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { AiProvider } from \"@workglow/ai/worker\";\nimport type {\n AiProviderPreviewRunFn,\n AiProviderRunFn,\n 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 previewTasks?: Record<string, AiProviderPreviewRunFn<any, any, OpenAiModelConfig>>\n ) {\n super(tasks, streamTasks, previewTasks);\n }\n}\n"
22
+ "/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { AiProvider } from \"@workglow/ai/worker\";\nimport { createCloudProviderClass } from \"@workglow/ai-provider/common\";\nimport { OPENAI } from \"./common/OpenAI_Constants\";\nimport type { OpenAiModelConfig } from \"./common/OpenAI_ModelSchema\";\n\nconst OPENAI_WORKER_TASK_TYPES = [\n \"TextGenerationTask\",\n \"TextEmbeddingTask\",\n \"TextRewriterTask\",\n \"TextSummaryTask\",\n \"CountTokensTask\",\n \"ModelInfoTask\",\n \"StructuredGenerationTask\",\n \"ToolCallingTask\",\n \"ModelSearchTask\",\n] as const;\n\n/**\n * Worker-server registration for OpenAI cloud models. Imports `AiProvider`\n * from `@workglow/ai/worker` so the SDK is only loaded in the worker.\n */\nexport class OpenAiProvider extends createCloudProviderClass<\n OpenAiModelConfig,\n typeof OPENAI_WORKER_TASK_TYPES\n>(AiProvider, {\n name: OPENAI,\n displayName: \"OpenAI\",\n taskTypes: OPENAI_WORKER_TASK_TYPES,\n}) {}\n"
23
23
  ],
24
- "mappings": "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",
25
- "debugId": "745FF611DF3171FC64756E2164756E21",
24
+ "mappings": "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",
25
+ "debugId": "FE9863287875C6B364756E2164756E21",
26
26
  "names": []
27
27
  }
@@ -7,31 +7,29 @@ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require
7
7
  });
8
8
 
9
9
  // src/ai-provider/common/OpenAI_Client.ts
10
+ import { isBrowserLike, loadProviderSdk, resolveApiKey } from "@workglow/ai-provider/common";
10
11
  var _OpenAIClass;
11
12
  async function loadOpenAISDK() {
12
13
  if (!_OpenAIClass) {
13
- try {
14
- const sdk = await import("openai");
15
- _OpenAIClass = sdk.default;
16
- } catch {
17
- throw new Error("openai is required for OpenAI tasks. Install it with: bun add openai");
18
- }
14
+ const sdk = await loadProviderSdk("openai", "OpenAI");
15
+ _OpenAIClass = sdk.default;
19
16
  }
20
17
  return _OpenAIClass;
21
18
  }
22
19
  async function getClient(model) {
23
20
  const OpenAI = await loadOpenAISDK();
24
21
  const config = model?.provider_config;
25
- const apiKey = config?.credential_key || config?.api_key || (typeof process !== "undefined" ? process.env?.OPENAI_API_KEY : undefined);
26
- if (!apiKey) {
27
- throw new Error("Missing OpenAI API key: set provider_config.credential_key or the OPENAI_API_KEY environment variable.");
28
- }
22
+ const apiKey = resolveApiKey({
23
+ config,
24
+ envVar: "OPENAI_API_KEY",
25
+ providerLabel: "OpenAI"
26
+ });
29
27
  try {
30
28
  return new OpenAI({
31
29
  apiKey,
32
30
  baseURL: config?.base_url || undefined,
33
31
  organization: config?.organization || undefined,
34
- dangerouslyAllowBrowser: typeof globalThis.document !== "undefined" || "WorkerGlobalScope" in globalThis
32
+ dangerouslyAllowBrowser: isBrowserLike()
35
33
  });
36
34
  } catch (err) {
37
35
  throw new Error(`Failed to create OpenAI client: ${err instanceof Error ? err.message : "unknown error"}`);
@@ -81,7 +79,7 @@ async function listOpenAiModels(credentialKey) {
81
79
  });
82
80
  const models = [];
83
81
  for await (const m of client.models.list()) {
84
- models.push({ label: `${m.id} ${m.owned_by}`, value: m.id });
82
+ models.push({ label: m.id, value: m.id, description: m.owned_by });
85
83
  }
86
84
  models.sort((a, b) => {
87
85
  const aGpt = a.value.startsWith("gpt") || a.value.startsWith("o1") ? 0 : 1;
@@ -98,7 +96,7 @@ function mapModelList(models) {
98
96
  return {
99
97
  id: m.value,
100
98
  label: m.label,
101
- description: "",
99
+ description: m.description ?? "",
102
100
  record: {
103
101
  model_id: m.value,
104
102
  provider: OPENAI,
@@ -446,133 +444,49 @@ var OpenAI_TextSummary_Stream = async function* (input, model, signal) {
446
444
  };
447
445
 
448
446
  // src/ai-provider/common/OpenAI_ToolCalling.ts
449
- import { buildToolDescription, filterValidToolCalls, toOpenAIMessages as toOpenAIMessages2 } from "@workglow/ai/worker";
450
- import { parsePartialJson as parsePartialJson2 } from "@workglow/util/worker";
451
- function mapOpenAIToolChoice(toolChoice) {
452
- if (!toolChoice || toolChoice === "auto")
453
- return "auto";
454
- if (toolChoice === "none")
455
- return "none";
456
- if (toolChoice === "required")
457
- return "required";
458
- return { type: "function", function: { name: toolChoice } };
459
- }
447
+ import { filterValidToolCalls, toOpenAIMessages as toOpenAIMessages2 } from "@workglow/ai/worker";
448
+ import {
449
+ accumulateOpenAIStream,
450
+ buildOpenAITools,
451
+ mapOpenAIToolChoice,
452
+ parseOpenAIToolCallMessage
453
+ } from "@workglow/ai-provider/common";
460
454
  var OpenAI_ToolCalling = async (input, model, update_progress, signal) => {
461
455
  update_progress(0, "Starting OpenAI tool calling");
462
456
  const client = await getClient(model);
463
457
  const modelName = getModelName(model);
464
- const tools = input.tools.map((t) => ({
465
- type: "function",
466
- function: {
467
- name: t.name,
468
- description: buildToolDescription(t),
469
- parameters: t.inputSchema
470
- }
471
- }));
458
+ const tools = buildOpenAITools(input.tools);
472
459
  const messages = toOpenAIMessages2(input);
473
- const toolChoice = mapOpenAIToolChoice(input.toolChoice);
474
- const params = {
460
+ const toolChoice = mapOpenAIToolChoice(input.toolChoice, true);
461
+ const response = await client.chat.completions.create({
475
462
  model: modelName,
476
463
  messages,
477
464
  max_completion_tokens: input.maxTokens,
478
- temperature: input.temperature
479
- };
480
- params.tools = tools;
481
- params.tool_choice = toolChoice;
482
- const response = await client.chat.completions.create(params, { signal });
465
+ temperature: input.temperature,
466
+ tools,
467
+ tool_choice: toolChoice
468
+ }, { signal });
483
469
  const text = response.choices[0]?.message?.content ?? "";
484
- const toolCalls = [];
485
- for (const tc of response.choices[0]?.message?.tool_calls ?? []) {
486
- if (!("function" in tc))
487
- continue;
488
- const id = tc.id;
489
- const name = tc.function.name;
490
- let inputArgs = {};
491
- const rawArgs = tc.function.arguments;
492
- if (typeof rawArgs === "string") {
493
- try {
494
- inputArgs = JSON.parse(rawArgs);
495
- } catch {
496
- try {
497
- const partial = parsePartialJson2(rawArgs);
498
- if (partial && typeof partial === "object") {
499
- inputArgs = partial;
500
- }
501
- } catch {
502
- inputArgs = {};
503
- }
504
- }
505
- }
506
- toolCalls.push({ id, name, input: inputArgs });
507
- }
470
+ const toolCalls = parseOpenAIToolCallMessage(response.choices[0]?.message?.tool_calls);
508
471
  update_progress(100, "Completed OpenAI tool calling");
509
472
  return { text, toolCalls: filterValidToolCalls(toolCalls, input.tools) };
510
473
  };
511
474
  var OpenAI_ToolCalling_Stream = async function* (input, model, signal) {
512
475
  const client = await getClient(model);
513
476
  const modelName = getModelName(model);
514
- const tools = input.tools.map((t) => ({
515
- type: "function",
516
- function: {
517
- name: t.name,
518
- description: buildToolDescription(t),
519
- parameters: t.inputSchema
520
- }
521
- }));
477
+ const tools = buildOpenAITools(input.tools);
522
478
  const messages = toOpenAIMessages2(input);
523
- const toolChoice = mapOpenAIToolChoice(input.toolChoice);
524
- const toolOptions = toolChoice === undefined ? {} : { tools, tool_choice: toolChoice };
479
+ const toolChoice = mapOpenAIToolChoice(input.toolChoice, true);
525
480
  const stream = await client.chat.completions.create({
526
481
  model: modelName,
527
482
  messages,
528
483
  max_completion_tokens: input.maxTokens,
529
484
  temperature: input.temperature,
530
485
  stream: true,
531
- ...toolOptions
486
+ tools,
487
+ tool_choice: toolChoice
532
488
  }, { signal });
533
- const toolCallAccumulator = new Map;
534
- for await (const chunk of stream) {
535
- const choice = chunk.choices[0];
536
- if (!choice)
537
- continue;
538
- const contentDelta = choice.delta?.content ?? "";
539
- if (contentDelta) {
540
- yield { type: "text-delta", port: "text", textDelta: contentDelta };
541
- }
542
- const tcDeltas = choice.delta?.tool_calls;
543
- if (Array.isArray(tcDeltas)) {
544
- for (const tcDelta of tcDeltas) {
545
- const idx = tcDelta.index;
546
- if (!toolCallAccumulator.has(idx)) {
547
- toolCallAccumulator.set(idx, {
548
- id: tcDelta.id ?? "",
549
- name: tcDelta.function?.name ?? "",
550
- arguments: ""
551
- });
552
- }
553
- const acc = toolCallAccumulator.get(idx);
554
- if (tcDelta.id)
555
- acc.id = tcDelta.id;
556
- if (tcDelta.function?.name)
557
- acc.name = tcDelta.function.name;
558
- if (tcDelta.function?.arguments)
559
- acc.arguments += tcDelta.function.arguments;
560
- let parsedInput;
561
- try {
562
- parsedInput = JSON.parse(acc.arguments);
563
- } catch {
564
- const partial = parsePartialJson2(acc.arguments);
565
- parsedInput = partial ?? {};
566
- }
567
- yield {
568
- type: "object-delta",
569
- port: "toolCalls",
570
- objectDelta: [{ id: acc.id, name: acc.name, input: parsedInput }]
571
- };
572
- }
573
- }
574
- }
575
- yield { type: "finish", data: { text: "", toolCalls: [] } };
489
+ yield* accumulateOpenAIStream(stream);
576
490
  };
577
491
 
578
492
  // src/ai-provider/common/OpenAI_ImageGenerate.ts
@@ -839,27 +753,26 @@ var OPENAI_PREVIEW_TASKS = {
839
753
 
840
754
  // src/ai-provider/OpenAiQueuedProvider.ts
841
755
  import { AiProvider } from "@workglow/ai";
842
- class OpenAiQueuedProvider extends AiProvider {
843
- name = OPENAI;
844
- displayName = "OpenAI";
845
- isLocal = false;
846
- supportsBrowser = true;
847
- taskTypes = [
848
- "TextGenerationTask",
849
- "TextEmbeddingTask",
850
- "TextRewriterTask",
851
- "TextSummaryTask",
852
- "CountTokensTask",
853
- "ModelInfoTask",
854
- "StructuredGenerationTask",
855
- "ToolCallingTask",
856
- "ModelSearchTask",
857
- "ImageGenerateTask",
858
- "ImageEditTask"
859
- ];
860
- constructor(tasks, streamTasks, previewTasks) {
861
- super(tasks, streamTasks, previewTasks);
862
- }
756
+ import { createCloudProviderClass } from "@workglow/ai-provider/common";
757
+ var OPENAI_QUEUED_TASK_TYPES = [
758
+ "TextGenerationTask",
759
+ "TextEmbeddingTask",
760
+ "TextRewriterTask",
761
+ "TextSummaryTask",
762
+ "CountTokensTask",
763
+ "ModelInfoTask",
764
+ "StructuredGenerationTask",
765
+ "ToolCallingTask",
766
+ "ModelSearchTask",
767
+ "ImageGenerateTask",
768
+ "ImageEditTask"
769
+ ];
770
+
771
+ class OpenAiQueuedProvider extends createCloudProviderClass(AiProvider, {
772
+ name: OPENAI,
773
+ displayName: "OpenAI",
774
+ taskTypes: OPENAI_QUEUED_TASK_TYPES
775
+ }) {
863
776
  }
864
777
 
865
778
  // src/ai-provider/common/OpenAI_ImageValidation.ts
@@ -887,25 +800,24 @@ import { registerProviderWorker } from "@workglow/ai-provider/common";
887
800
 
888
801
  // src/ai-provider/OpenAiProvider.ts
889
802
  import { AiProvider as AiProvider2 } from "@workglow/ai/worker";
890
- class OpenAiProvider extends AiProvider2 {
891
- name = OPENAI;
892
- displayName = "OpenAI";
893
- isLocal = false;
894
- supportsBrowser = true;
895
- taskTypes = [
896
- "TextGenerationTask",
897
- "TextEmbeddingTask",
898
- "TextRewriterTask",
899
- "TextSummaryTask",
900
- "CountTokensTask",
901
- "ModelInfoTask",
902
- "StructuredGenerationTask",
903
- "ToolCallingTask",
904
- "ModelSearchTask"
905
- ];
906
- constructor(tasks, streamTasks, previewTasks) {
907
- super(tasks, streamTasks, previewTasks);
908
- }
803
+ import { createCloudProviderClass as createCloudProviderClass2 } from "@workglow/ai-provider/common";
804
+ var OPENAI_WORKER_TASK_TYPES = [
805
+ "TextGenerationTask",
806
+ "TextEmbeddingTask",
807
+ "TextRewriterTask",
808
+ "TextSummaryTask",
809
+ "CountTokensTask",
810
+ "ModelInfoTask",
811
+ "StructuredGenerationTask",
812
+ "ToolCallingTask",
813
+ "ModelSearchTask"
814
+ ];
815
+
816
+ class OpenAiProvider extends createCloudProviderClass2(AiProvider2, {
817
+ name: OPENAI,
818
+ displayName: "OpenAI",
819
+ taskTypes: OPENAI_WORKER_TASK_TYPES
820
+ }) {
909
821
  }
910
822
 
911
823
  // src/ai-provider/registerOpenAiWorker.ts
@@ -920,4 +832,4 @@ export {
920
832
  getClient
921
833
  };
922
834
 
923
- //# debugId=E7DEC54964577E3064756E2164756E21
835
+ //# debugId=B079434176EE4BAB64756E2164756E21