@workglow/openai 0.3.14 → 0.3.16
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.
- package/dist/ai/common/OpenAI_Client.d.ts.map +1 -1
- package/dist/ai/common/OpenAI_ImageEdit.d.ts.map +1 -1
- package/dist/ai/common/OpenAI_ImageGenerate.d.ts.map +1 -1
- package/dist/ai/common/OpenAI_JobRunFns.browser.d.ts.map +1 -1
- package/dist/ai/common/OpenAI_JobRunFns.d.ts.map +1 -1
- package/dist/ai-runtime.browser.js +20 -16
- package/dist/ai-runtime.browser.js.map +6 -6
- package/dist/ai-runtime.js +20 -16
- package/dist/ai-runtime.js.map +6 -6
- package/dist/ai.browser.js.map +2 -2
- package/dist/ai.js +20 -16
- package/dist/ai.js.map +6 -6
- package/package.json +14 -13
package/dist/ai-runtime.js.map
CHANGED
|
@@ -2,14 +2,14 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/ai/common/OpenAI_Client.ts", "../src/ai/registerOpenAiInline.ts", "../src/ai/common/OpenAI_ImageValidation.ts", "../src/ai/common/OpenAI_Constants.ts", "../src/ai/common/OpenAI_CapabilitySets.ts", "../src/ai/common/OpenAI_CountTokens.ts", "../src/ai/common/OpenAI_ImageEdit.ts", "../src/ai/common/OpenAI_ImageGenerate.ts", "../src/ai/common/OpenAI_ModelInfo.ts", "../src/ai/common/OpenAI_ModelSearch.ts", "../src/ai/common/OpenAI_StructuredGeneration.ts", "../src/ai/common/OpenAI_TextEmbedding.ts", "../src/ai/common/OpenAI_TextGeneration.ts", "../src/ai/common/OpenAI_TextRewriter.ts", "../src/ai/common/OpenAI_TextSummary.ts", "../src/ai/common/OpenAI_ToolCalling.ts", "../src/ai/common/OpenAI_JobRunFns.ts", "../src/ai/OpenAiQueuedProvider.ts", "../src/ai/common/OpenAI_Capabilities.ts", "../src/ai/registerOpenAiWorker.ts", "../src/ai/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 { isBrowserLike, resolveApiKey, validateProviderBaseUrl } from \"@workglow/ai/provider-utils\";\nimport type { OpenAiModelConfig } from \"./OpenAI_ModelSchema\";\n\n/**\n * Hostnames (or hostname suffixes) accepted for OpenAI `base_url` without\n * the explicit `trustedBaseUrl` opt-out. Includes Azure OpenAI tenants.\n */\nexport const OPENAI_ALLOWED_HOSTS: readonly string[] = [\"api.openai.com\", \".openai.azure.com\"];\n\
|
|
5
|
+
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { isBrowserLike, resolveApiKey, validateProviderBaseUrl } from \"@workglow/ai/provider-utils\";\nimport type { OpenAiModelConfig } from \"./OpenAI_ModelSchema\";\n\n/**\n * Hostnames (or hostname suffixes) accepted for OpenAI `base_url` without\n * the explicit `trustedBaseUrl` opt-out. Includes Azure OpenAI tenants.\n */\nexport const OPENAI_ALLOWED_HOSTS: readonly string[] = [\"api.openai.com\", \".openai.azure.com\"];\n\ntype OpenAIClientClass = new (config: any) => any;\n\nlet _loadPromise: Promise<OpenAIClientClass> | undefined;\n\n// NOTE: we do not want to de-dup this in the provider-utils, vite wants direct import with string literals.\nexport async function loadOpenAISDK(): Promise<OpenAIClientClass> {\n _loadPromise ??= import(/* @vite-ignore */ \"openai\")\n\n .then((mod) => mod.default as OpenAIClientClass)\n .catch(() => {\n _loadPromise = undefined;\n throw new Error(\"openai is required for OpenAI tasks. Install it with: bun add openai\");\n });\n return _loadPromise;\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 * When `true`, accept the `base_url` even if its hostname is not in\n * {@link OPENAI_ALLOWED_HOSTS}. Use only for known-good custom enterprise\n * gateways. The URL still has to parse and use a safe scheme.\n */\n readonly trustedBaseUrl?: boolean;\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 // Throw before SDK construction on a rejected base_url so the API key is\n // never sent to an unvalidated host.\n const baseURL = validateProviderBaseUrl(config?.base_url, {\n vendor: \"openai\",\n allowHosts: OPENAI_ALLOWED_HOSTS,\n trustedBaseUrl: config?.trustedBaseUrl,\n providerLabel: \"OpenAI\",\n });\n try {\n return new OpenAI({\n apiKey,\n baseURL,\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-utils\";\nimport { registerOpenAiImageValidator } from \"./common/OpenAI_ImageValidation\";\nimport { OPENAI_PREVIEW_TASKS, OPENAI_RUN_FNS } from \"./common/OpenAI_JobRunFns\";\nimport { OpenAiQueuedProvider } from \"./OpenAiQueuedProvider\";\n\nexport async function registerOpenAiInline(options?: AiProviderRegisterOptions): Promise<void> {\n registerOpenAiImageValidator();\n await registerProviderInline(\n new OpenAiQueuedProvider(OPENAI_RUN_FNS, OPENAI_PREVIEW_TASKS),\n \"OpenAI\",\n options\n );\n}\n",
|
|
7
7
|
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { ModelConfig } from \"@workglow/ai\";\nimport { AiImageOutputTask, ProviderUnsupportedFeatureError } from \"@workglow/ai\";\n\nimport { OPENAI } from \"./OpenAI_Constants\";\n\n/**\n * Registers the OpenAI per-provider image validator. Called at provider registration time\n * (both inline and worker-backed paths) so it runs on the main thread before any dispatch.\n *\n * Currently validates:\n * - DALL-E 2 + non-empty `additionalImages` → throws (single-image edit only).\n * DALL-E 3 + ImageEditTask is rejected upstream by the model registry task-array check.\n */\nexport function registerOpenAiImageValidator(): void {\n AiImageOutputTask.registerProviderImageValidator(\n OPENAI,\n (taskType, input, model: ModelConfig) => {\n if (taskType !== \"ImageEditTask\") return;\n const modelName =\n (model.provider_config as { model_name?: string } | undefined)?.model_name ?? \"\";\n const additional = input[\"additionalImages\"] as unknown[] | undefined;\n if (modelName.startsWith(\"dall-e-2\") && Array.isArray(additional) && additional.length > 0) {\n throw new ProviderUnsupportedFeatureError(\n \"additionalImages\",\n model.model_id ?? modelName,\n \"DALL-E 2 only supports single-image edits\"\n );\n }\n }\n );\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 2026 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { Capability } from \"@workglow/ai/worker\";\n\n/**\n * Single source of truth for OpenAI's capability sets.\n *\n * Both `OPENAI_RUN_FNS` (the worker-side registration list) and\n * `workerRunFnSpecs()` (the main-thread proxy declaration) derive their\n * `serves` arrays from these named exports. SDK-free so the main thread\n * can import without paying the OpenAI client cost.\n *\n * To add a new capability set: declare a new `as const` constant here,\n * then reference it from both `OPENAI_RUN_FNS` and `OPENAI_RUN_FN_SPECS`.\n */\nexport const OPENAI_TEXT_GENERATION = [\"text.generation\"] as const satisfies Capability[];\nexport const OPENAI_TOOL_USE = [\"text.generation\", \"tool-use\"] as const satisfies Capability[];\nexport const OPENAI_JSON_MODE = [\"text.generation\", \"json-mode\"] as const satisfies Capability[];\nexport const OPENAI_TEXT_REWRITER = [\"text.rewriter\"] as const satisfies Capability[];\nexport const OPENAI_TEXT_SUMMARY = [\"text.summary\"] as const satisfies Capability[];\nexport const OPENAI_TEXT_EMBEDDING = [\"text.embedding\"] as const satisfies Capability[];\nexport const OPENAI_IMAGE_GENERATION = [\"image.generation\"] as const satisfies Capability[];\nexport const OPENAI_IMAGE_EDITING = [\"image.editing\"] as const satisfies Capability[];\nexport const OPENAI_COUNT_TOKENS = [\"model.count-tokens\"] as const satisfies Capability[];\nexport const OPENAI_MODEL_SEARCH = [\"model.search\"] as const satisfies Capability[];\nexport const OPENAI_MODEL_INFO = [\"model.info\"] as const satisfies Capability[];\n\n/** Aggregated list — for `workerRunFnSpecs()` derivation. Order MUST match `OPENAI_RUN_FNS`. */\nexport const OPENAI_CAPABILITY_SETS = [\n OPENAI_TEXT_GENERATION,\n OPENAI_TOOL_USE,\n OPENAI_JSON_MODE,\n OPENAI_TEXT_REWRITER,\n OPENAI_TEXT_SUMMARY,\n OPENAI_TEXT_EMBEDDING,\n OPENAI_IMAGE_GENERATION,\n OPENAI_IMAGE_EDITING,\n OPENAI_COUNT_TOKENS,\n OPENAI_MODEL_SEARCH,\n OPENAI_MODEL_INFO,\n] as const;\n",
|
|
10
10
|
"/**\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 { Tiktoken, TiktokenModel } from \"tiktoken\";\nimport { getModelName } from \"./OpenAI_Client\";\nimport type { OpenAiModelConfig } from \"./OpenAI_ModelSchema\";\n\nlet _tiktoken: typeof import(\"tiktoken\") | undefined;\n\nasync function loadTiktoken() {\n if (!_tiktoken) {\n try {\n _tiktoken = await import(\"tiktoken\");\n } catch {\n throw new Error(\n \"tiktoken is required for OpenAI token counting. Install it with: bun add 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.encoding_for_model(modelName as TiktokenModel));\n } catch {\n const fallback = \"cl100k_base\";\n if (!_encoderCache.has(fallback)) {\n _encoderCache.set(fallback, tiktoken.get_encoding(fallback));\n }\n _encoderCache.set(modelName, _encoderCache.get(fallback)!);\n }\n }\n return _encoderCache.get(modelName)!;\n}\n\nasync function countTokens(\n input: CountTokensTaskInput,\n model: OpenAiModelConfig | undefined\n): Promise<CountTokensTaskOutput> {\n const enc = await getEncoder(getModelName(model));\n const tokens = enc.encode(input.text);\n return { count: tokens.length };\n}\n\n/**\n * One-shot run-fn for `[\"model.count-tokens\"]`. Emits a single\n * `finish` event carrying the token count.\n */\nexport const OpenAI_CountTokens_Stream: AiProviderRunFn<\n CountTokensTaskInput,\n CountTokensTaskOutput,\n OpenAiModelConfig\n> = async (input, model, _signal, emit) => {\n const result = await countTokens(input, model);\n emit({ type: \"finish\", data: result });\n};\n\n/** Lightweight preview path used by `AiTask.executePreview()`. */\nexport const OpenAI_CountTokens_Preview: AiProviderPreviewRunFn<\n CountTokensTaskInput,\n CountTokensTaskOutput,\n OpenAiModelConfig\n> = async (input, model) => {\n return countTokens(input, model);\n};\n",
|
|
11
|
-
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {
|
|
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 ImageGenerateTaskInput,\n ImageGenerateTaskOutput,\n
|
|
11
|
+
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { AiProviderRunFn, ImageEditTaskInput, ImageEditTaskOutput } from \"@workglow/ai\";\nimport { ImageGenerationContentPolicyError, ImageGenerationProviderError } from \"@workglow/ai\";\nimport type { ImageValue } from \"@workglow/util/media\";\n\nimport {\n dataUriToImageValue,\n imageValueToPngBytes,\n modelIdForError,\n} from \"@workglow/ai/provider-utils\";\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\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\n/**\n * Streaming run-fn for `[\"image.editing\"]`. SDK v6.35+ supports\n * `stream: true` on `images.edit` for GPT image models — emits snapshot\n * events for each partial + final image, then finish.\n */\nexport const OpenAI_ImageEdit_Stream: AiProviderRunFn<\n ImageEditTaskInput,\n ImageEditTaskOutput,\n OpenAiModelConfig\n> = async (input, model, signal, emit) => {\n const client = await getClient(model);\n\n try {\n const payload = await buildEditPayload(input, model);\n const stream = await (\n client.images.edit as unknown as (\n body: Record<string, unknown>,\n options: { signal: AbortSignal }\n ) => Promise<AsyncIterable<{ b64_json?: string }>>\n )({ ...payload, stream: true, partial_images: 3 }, { signal });\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 emit({ type: \"snapshot\", data: { image } } as Parameters<typeof emit>[0]);\n }\n emit({ 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(modelIdForError(model, \"openai\"), msg);\n }\n throw new ImageGenerationProviderError(modelIdForError(model, \"openai\"), msg, {\n cause: err as Error,\n });\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 ImageGenerateTaskInput,\n ImageGenerateTaskOutput,\n} from \"@workglow/ai\";\nimport { ImageGenerationContentPolicyError, ImageGenerationProviderError } from \"@workglow/ai\";\nimport type { ImageValue } from \"@workglow/util/media\";\n\nimport { dataUriToImageValue, modelIdForError } from \"@workglow/ai/provider-utils\";\nimport { getClient, getModelName } from \"./OpenAI_Client\";\nimport type { OpenAiModelConfig } from \"./OpenAI_ModelSchema\";\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\n/**\n * Streaming run-fn for `[\"image.generation\"]`. GPT-image models support\n * native streaming via `stream: true` + `partial_images: 3` and emit a\n * `snapshot` event per partial frame plus a final snapshot. DALL-E models\n * do not support streaming so this falls back to a single non-streaming\n * call and emits one snapshot before finish.\n */\nexport const OpenAI_ImageGenerate_Stream: AiProviderRunFn<\n ImageGenerateTaskInput,\n ImageGenerateTaskOutput,\n OpenAiModelConfig\n> = async (input, model, signal, emit) => {\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 (\n client.images.generate as unknown as (\n body: Record<string, unknown>,\n options: { signal: AbortSignal }\n ) => Promise<{ data?: Array<{ b64_json?: string }> }>\n )(\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(\n modelIdForError(model, \"openai\"),\n \"Empty response (no b64_json)\"\n );\n }\n const image = await decodeB64Png(b64);\n emit({ type: \"snapshot\", data: { image } } as Parameters<typeof emit>[0]);\n emit({ 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(modelIdForError(model, \"openai\"), msg);\n }\n throw new ImageGenerationProviderError(modelIdForError(model, \"openai\"), msg, {\n cause: err as Error,\n });\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 emit({ type: \"snapshot\", data: { image } } as Parameters<typeof emit>[0]);\n }\n emit({ 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(modelIdForError(model, \"openai\"), msg);\n }\n throw new ImageGenerationProviderError(modelIdForError(model, \"openai\"), msg, {\n cause: err as Error,\n });\n }\n};\n",
|
|
13
13
|
"/**\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\n/**\n * One-shot run-fn for `[\"model.info\"]`. Returns a synchronous\n * info record from the in-process embedding-dimensions table; OpenAI does not\n * expose an HTTP endpoint for this metadata. Emits a single `finish` event.\n */\nexport const OpenAI_ModelInfo_Stream: AiProviderRunFn<\n ModelInfoTaskInput,\n ModelInfoTaskOutput,\n OpenAiModelConfig\n> = async (input, model, _signal, emit) => {\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 emit({\n type: \"finish\",\n data: {\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 return;\n }\n\n emit({\n type: \"finish\",\n data: {\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};\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 ModelSearchResultItem,\n ModelSearchTaskInput,\n ModelSearchTaskOutput,\n} from \"@workglow/ai\";\nimport { filterLabeledModelsByQuery } from \"@workglow/ai/provider-utils\";\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; capabilities: string[] }> = [\n { value: \"gpt-image-2\", capabilities: [\"image.generation\", \"image.editing\"] },\n { value: \"dall-e-3\", capabilities: [\"image.generation\"] },\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 capabilities: imageEntry?.capabilities ?? [],\n provider_config: { model_name: m.value },\n metadata: {},\n },\n raw: m,\n };\n });\n}\n\n/**\n * One-shot run-fn for `[\"model.search\"]`. Emits a\n * single `finish` event with the search results. When no credential key is\n * provided, falls back to a curated static list of well-known OpenAI models.\n */\nexport const OpenAI_ModelSearch_Stream: AiProviderRunFn<\n ModelSearchTaskInput,\n ModelSearchTaskOutput\n> = async (input, _model, _signal, emit) => {\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 emit({ type: \"finish\", data: { results: mapModelList(models) } });\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 StructuredGenerationTaskInput,\n StructuredGenerationTaskOutput,\n} from \"@workglow/ai\";\nimport { parsePartialJson } from \"@workglow/util/worker\";\nimport { getClient, getModelName } from \"./OpenAI_Client\";\nimport type { OpenAiModelConfig } from \"./OpenAI_ModelSchema\";\n\n/**\n * Streaming run-fn for `[\"text.generation\", \"json-mode\"]`. Emits\n * `object-delta` events with progressively-completed partial JSON snapshots\n * on the `object` port, ending with a `finish` event carrying the parsed\n * final object.\n */\nexport const OpenAI_StructuredGeneration_Stream: AiProviderRunFn<\n StructuredGenerationTaskInput,\n StructuredGenerationTaskOutput,\n OpenAiModelConfig\n> = async (input, model, signal, emit, outputSchema) => {\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 never,\n json_schema: {\n name: \"structured_output\",\n schema: schema,\n strict: true,\n },\n } as never,\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 emit({ 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 emit({ type: \"finish\", data: { object: finalObject } as StructuredGenerationTaskOutput });\n};\n",
|
|
@@ -18,13 +18,13 @@
|
|
|
18
18
|
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { AiProviderRunFn, TextRewriterTaskInput, TextRewriterTaskOutput } from \"@workglow/ai\";\nimport { getClient, getModelName } from \"./OpenAI_Client\";\nimport type { OpenAiModelConfig } from \"./OpenAI_ModelSchema\";\n\n/**\n * Streaming run-fn for `[\"text.rewriter\"]`. Emits `text-delta` events on\n * the `text` port and a final empty `finish` event.\n */\nexport const OpenAI_TextRewriter_Stream: AiProviderRunFn<\n TextRewriterTaskInput,\n TextRewriterTaskOutput,\n OpenAiModelConfig\n> = async (input, model, signal, emit) => {\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 emit({ type: \"text-delta\", port: \"text\", textDelta: delta });\n }\n }\n emit({ type: \"finish\", data: {} as TextRewriterTaskOutput });\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 { AiProviderRunFn, TextSummaryTaskInput, TextSummaryTaskOutput } from \"@workglow/ai\";\nimport { getClient, getModelName } from \"./OpenAI_Client\";\nimport type { OpenAiModelConfig } from \"./OpenAI_ModelSchema\";\n\n/**\n * Streaming run-fn for `[\"text.summary\"]`. Emits `text-delta` events on\n * the `text` port and a final empty `finish` event.\n */\nexport const OpenAI_TextSummary_Stream: AiProviderRunFn<\n TextSummaryTaskInput,\n TextSummaryTaskOutput,\n OpenAiModelConfig\n> = async (input, model, signal, emit) => {\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 emit({ type: \"text-delta\", port: \"text\", textDelta: delta });\n }\n }\n emit({ type: \"finish\", data: {} as TextSummaryTaskOutput });\n};\n",
|
|
20
20
|
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {\n AiProviderRunFn,\n ToolCallingTaskInput,\n ToolCallingTaskOutput,\n ToolCalls,\n} from \"@workglow/ai\";\nimport {\n accumulateOpenAIStream,\n buildOpenAITools,\n mapOpenAIToolChoice,\n} from \"@workglow/ai/provider-utils\";\nimport { filterValidToolCalls, toOpenAIMessages } from \"@workglow/ai/worker\";\nimport { getClient, getModelName } from \"./OpenAI_Client\";\nimport type { OpenAiModelConfig } from \"./OpenAI_ModelSchema\";\n\n/**\n * Streaming run-fn for `[\"text.generation\", \"tool-use\"]`. Calls the OpenAI\n * chat-completions endpoint with `stream: true` and forwards delta events via\n * {@link accumulateOpenAIStream}, which emits `text-delta` and tool-call\n * `object-delta` events plus a final empty `finish`.\n *\n * Defence-in-depth: each tool-call `object-delta` is filtered against\n * `input.tools` so a hallucinated function name never reaches the consumer.\n */\nexport const OpenAI_ToolCalling_Stream: AiProviderRunFn<\n ToolCallingTaskInput,\n ToolCallingTaskOutput,\n OpenAiModelConfig\n> = async (input, model, signal, emit) => {\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 await accumulateOpenAIStream(stream, (event) => {\n if (event.type === \"object-delta\" && event.port === \"toolCalls\") {\n const validated = filterValidToolCalls(event.objectDelta as ToolCalls, input.tools);\n if (validated.length > 0) {\n emit({ type: \"object-delta\", port: \"toolCalls\", objectDelta: validated });\n }\n return;\n }\n emit(event);\n });\n emit({ type: \"finish\", data: { text: \"\", toolCalls: [] } as ToolCallingTaskOutput });\n};\n",
|
|
21
|
-
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { AiProviderPreviewRunFn, AiProviderRunFnRegistration } from \"@workglow/ai\";\nimport {\n OPENAI_COUNT_TOKENS,\n OPENAI_IMAGE_EDITING,\n OPENAI_IMAGE_GENERATION,\n OPENAI_JSON_MODE,\n OPENAI_MODEL_INFO,\n OPENAI_MODEL_SEARCH,\n OPENAI_TEXT_EMBEDDING,\n OPENAI_TEXT_GENERATION,\n OPENAI_TEXT_REWRITER,\n OPENAI_TEXT_SUMMARY,\n OPENAI_TOOL_USE,\n} from \"./OpenAI_CapabilitySets\";\nimport type { OpenAiModelConfig } from \"./OpenAI_ModelSchema\";\n\nexport { getClient, getModelName, loadOpenAISDK } from \"./OpenAI_Client\";\n\nimport { OpenAI_CountTokens_Preview, OpenAI_CountTokens_Stream } from \"./OpenAI_CountTokens\";\nimport { OpenAI_ImageEdit_Stream } from \"./OpenAI_ImageEdit\";\nimport { OpenAI_ImageGenerate_Stream } from \"./OpenAI_ImageGenerate\";\nimport { OpenAI_ModelInfo_Stream } from \"./OpenAI_ModelInfo\";\nimport { OpenAI_ModelSearch_Stream } from \"./OpenAI_ModelSearch\";\nimport { OpenAI_StructuredGeneration_Stream } from \"./OpenAI_StructuredGeneration\";\nimport { OpenAI_TextEmbedding_Stream } from \"./OpenAI_TextEmbedding\";\nimport { OpenAI_TextGeneration_Stream } from \"./OpenAI_TextGeneration\";\nimport { OpenAI_TextRewriter_Stream } from \"./OpenAI_TextRewriter\";\nimport { OpenAI_TextSummary_Stream } from \"./OpenAI_TextSummary\";\nimport { OpenAI_ToolCalling_Stream } from \"./OpenAI_ToolCalling\";\n\n/**\n * Capability-set run-fn registrations for the OpenAI provider. Order is\n * significant only as a tiebreaker — the dispatcher prefers the smallest\n * `serves` set that is a superset of the task's `requires`, so the bare\n * `[\"text.generation\"]` entry wins for a plain {@link TextGenerationTask} or\n * {@link AiChatTask} while the `[\"text.generation\", \"tool-use\"]` entry wins\n * for {@link ToolCallingTask}.\n */\nexport const OPENAI_RUN_FNS: readonly AiProviderRunFnRegistration
|
|
21
|
+
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { AiProviderPreviewRunFn, AiProviderRunFnRegistration } from \"@workglow/ai\";\nimport {\n OPENAI_COUNT_TOKENS,\n OPENAI_IMAGE_EDITING,\n OPENAI_IMAGE_GENERATION,\n OPENAI_JSON_MODE,\n OPENAI_MODEL_INFO,\n OPENAI_MODEL_SEARCH,\n OPENAI_TEXT_EMBEDDING,\n OPENAI_TEXT_GENERATION,\n OPENAI_TEXT_REWRITER,\n OPENAI_TEXT_SUMMARY,\n OPENAI_TOOL_USE,\n} from \"./OpenAI_CapabilitySets\";\nimport type { OpenAiModelConfig } from \"./OpenAI_ModelSchema\";\n\nexport { getClient, getModelName, loadOpenAISDK } from \"./OpenAI_Client\";\n\nimport { OpenAI_CountTokens_Preview, OpenAI_CountTokens_Stream } from \"./OpenAI_CountTokens\";\nimport { OpenAI_ImageEdit_Stream } from \"./OpenAI_ImageEdit\";\nimport { OpenAI_ImageGenerate_Stream } from \"./OpenAI_ImageGenerate\";\nimport { OpenAI_ModelInfo_Stream } from \"./OpenAI_ModelInfo\";\nimport { OpenAI_ModelSearch_Stream } from \"./OpenAI_ModelSearch\";\nimport { OpenAI_StructuredGeneration_Stream } from \"./OpenAI_StructuredGeneration\";\nimport { OpenAI_TextEmbedding_Stream } from \"./OpenAI_TextEmbedding\";\nimport { OpenAI_TextGeneration_Stream } from \"./OpenAI_TextGeneration\";\nimport { OpenAI_TextRewriter_Stream } from \"./OpenAI_TextRewriter\";\nimport { OpenAI_TextSummary_Stream } from \"./OpenAI_TextSummary\";\nimport { OpenAI_ToolCalling_Stream } from \"./OpenAI_ToolCalling\";\n\n/**\n * Capability-set run-fn registrations for the OpenAI provider. Order is\n * significant only as a tiebreaker — the dispatcher prefers the smallest\n * `serves` set that is a superset of the task's `requires`, so the bare\n * `[\"text.generation\"]` entry wins for a plain {@link TextGenerationTask} or\n * {@link AiChatTask} while the `[\"text.generation\", \"tool-use\"]` entry wins\n * for {@link ToolCallingTask}.\n */\nexport const OPENAI_RUN_FNS: readonly AiProviderRunFnRegistration<any, any, OpenAiModelConfig>[] = [\n { serves: OPENAI_TEXT_GENERATION, runFn: OpenAI_TextGeneration_Stream },\n { serves: OPENAI_TOOL_USE, runFn: OpenAI_ToolCalling_Stream },\n { serves: OPENAI_JSON_MODE, runFn: OpenAI_StructuredGeneration_Stream },\n { serves: OPENAI_TEXT_REWRITER, runFn: OpenAI_TextRewriter_Stream },\n { serves: OPENAI_TEXT_SUMMARY, runFn: OpenAI_TextSummary_Stream },\n { serves: OPENAI_TEXT_EMBEDDING, runFn: OpenAI_TextEmbedding_Stream },\n { serves: OPENAI_IMAGE_GENERATION, runFn: OpenAI_ImageGenerate_Stream },\n { serves: OPENAI_IMAGE_EDITING, runFn: OpenAI_ImageEdit_Stream },\n { serves: OPENAI_COUNT_TOKENS, runFn: OpenAI_CountTokens_Stream },\n { serves: OPENAI_MODEL_SEARCH, runFn: OpenAI_ModelSearch_Stream },\n { serves: OPENAI_MODEL_INFO, runFn: OpenAI_ModelInfo_Stream },\n];\n\nexport const OPENAI_PREVIEW_TASKS: Record<\n string,\n AiProviderPreviewRunFn<any, any, OpenAiModelConfig>\n> = {\n CountTokensTask: OpenAI_CountTokens_Preview,\n};\n",
|
|
22
22
|
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { Capability, ModelRecord } from \"@workglow/ai\";\nimport { AiProvider } from \"@workglow/ai\";\nimport { createCloudProviderClass } from \"@workglow/ai/provider-utils\";\nimport { inferOpenAiCapabilities, openAiWorkerRunFnSpecs } from \"./common/OpenAI_Capabilities\";\nimport { OPENAI } from \"./common/OpenAI_Constants\";\nimport type { OpenAiModelConfig } from \"./common/OpenAI_ModelSchema\";\n\n/**\n * Main-thread registration shell for OpenAI. Used both for inline mode\n * (constructed with the run-fn registrations array) and worker-backed mode\n * (constructed empty so the base class registers worker proxies). No queue\n * is created — OpenAI uses {@link DirectExecutionStrategy}.\n */\nexport class OpenAiQueuedProvider extends createCloudProviderClass<OpenAiModelConfig>(AiProvider, {\n name: OPENAI,\n displayName: \"OpenAI\",\n}) {\n override inferCapabilities(model: ModelRecord): readonly Capability[] {\n return inferOpenAiCapabilities(model);\n }\n\n protected override workerRunFnSpecs(): readonly { serves: readonly Capability[] }[] {\n return openAiWorkerRunFnSpecs();\n }\n}\n",
|
|
23
23
|
"/**\n * @license\n * Copyright 2026 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { Capability, ModelRecord } from \"@workglow/ai/worker\";\nimport { OPENAI_CAPABILITY_SETS } from \"./OpenAI_CapabilitySets\";\n\n/**\n * Closed list of capability-set specs the OpenAI provider serves. Derived\n * from {@link OPENAI_CAPABILITY_SETS}. Used by the main-thread provider\n * shells when registering worker-mode proxies so the dispatcher can route\n * requests to the worker proxy.\n */\nexport const OPENAI_RUN_FN_SPECS = OPENAI_CAPABILITY_SETS.map((serves) => ({ serves }));\n\nexport function openAiWorkerRunFnSpecs(): readonly { readonly serves: readonly Capability[] }[] {\n return OPENAI_RUN_FN_SPECS;\n}\n\n/**\n * Shape used by the model-name regexes — `model_id` is required, the rest\n * is loosely-typed metadata only used to opportunistically widen the\n * inferred capability set.\n */\ntype CapabilityHints = Pick<ModelRecord, \"model_id\" | \"provider_config\" | \"capabilities\">;\n\n/**\n * Heuristic capability inference for an OpenAI {@link ModelRecord}. Pattern-\n * matches the canonical OpenAI model id strings (and the `provider_config.\n * model_name` if present) to a closed set of {@link Capability}s. Falls back\n * to the model's stored `capabilities` array (or a baseline of search +\n * info) when no pattern matches.\n *\n * Main-thread method only — workers do not run capability inference.\n */\nexport function inferOpenAiCapabilities(model: CapabilityHints): readonly Capability[] {\n const id = String(\n model.model_id ??\n (model.provider_config as { model_name?: string } | undefined)?.model_name ??\n \"\"\n );\n\n // Embedding models — text-embedding-3-{small,large}, text-embedding-ada-002.\n if (/^text-embedding/i.test(id)) {\n return [\"text.embedding\", \"model.count-tokens\", \"model.info\", \"model.search\"];\n }\n\n // Image models — DALL-E and gpt-image families.\n if (/^dall-e/i.test(id)) {\n // DALL-E 2/3 do NOT support edit consistently — gpt-image-* does. Cover\n // generation only here; the gpt-image branch below adds editing.\n return [\"image.generation\", \"model.info\", \"model.search\"];\n }\n if (/^gpt-image/i.test(id)) {\n return [\"image.generation\", \"image.editing\", \"model.info\", \"model.search\"];\n }\n\n // Chat / reasoning models — gpt-3.5/4/4o/5/...; o-series reasoning models (o1, o3, o4, future).\n // GPT-4o, gpt-4-vision-*, gpt-4-turbo, and all o-series additionally accept image inputs.\n if (/^gpt-/i.test(id) || /^o\\d/i.test(id)) {\n const caps: Capability[] = [\n \"text.generation\",\n \"text.rewriter\",\n \"text.summary\",\n \"tool-use\",\n \"json-mode\",\n \"model.count-tokens\",\n \"model.info\",\n \"model.search\",\n ];\n const supportsVision =\n /gpt-4o|gpt-4\\.1|gpt-5|gpt-4-vision|gpt-4-turbo/i.test(id) || /^o\\d/i.test(id);\n if (supportsVision) {\n caps.push(\"vision-input\");\n }\n return caps;\n }\n\n // Unknown model — fall back to whatever the record declared, or just\n // expose the meta-ops so the model can still be searched / inspected.\n const declared = (model.capabilities as readonly Capability[] | undefined) ?? [];\n if (declared.length > 0) return declared;\n return [\"model.search\", \"model.info\"];\n}\n",
|
|
24
24
|
"/**\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-utils\";\nimport { OPENAI_PREVIEW_TASKS, OPENAI_RUN_FNS } from \"./common/OpenAI_JobRunFns\";\nimport { OpenAiProvider } from \"./OpenAiProvider\";\n\nexport async function registerOpenAiWorker(): Promise<void> {\n await registerProviderWorker(\n (ws) => new OpenAiProvider(OPENAI_RUN_FNS, OPENAI_PREVIEW_TASKS).registerOnWorkerServer(ws),\n \"OpenAI\"\n );\n}\n",
|
|
25
25
|
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { createCloudProviderClass } from \"@workglow/ai/provider-utils\";\nimport type { Capability, ModelRecord } from \"@workglow/ai/worker\";\nimport { AiProvider } from \"@workglow/ai/worker\";\nimport { inferOpenAiCapabilities, openAiWorkerRunFnSpecs } from \"./common/OpenAI_Capabilities\";\nimport { OPENAI } from \"./common/OpenAI_Constants\";\nimport type { OpenAiModelConfig } from \"./common/OpenAI_ModelSchema\";\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 *\n * The class extends the {@link createCloudProviderClass} mixin (which\n * supplies `name` / `displayName` / `isLocal` / `supportsBrowser`) and adds\n * the OpenAI-specific {@link AiProvider.inferCapabilities} and\n * {@link AiProvider.workerRunFnSpecs} overrides.\n */\nexport class OpenAiProvider extends createCloudProviderClass<OpenAiModelConfig>(AiProvider, {\n name: OPENAI,\n displayName: \"OpenAI\",\n}) {\n override inferCapabilities(model: ModelRecord): readonly Capability[] {\n return inferOpenAiCapabilities(model);\n }\n\n protected override workerRunFnSpecs(): readonly { serves: readonly Capability[] }[] {\n return openAiWorkerRunFnSpecs();\n }\n}\n"
|
|
26
26
|
],
|
|
27
|
-
"mappings": "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",
|
|
28
|
-
"debugId": "
|
|
27
|
+
"mappings": "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",
|
|
28
|
+
"debugId": "E32EEBFF1C46E34664756E2164756E21",
|
|
29
29
|
"names": []
|
|
30
30
|
}
|
package/dist/ai.browser.js.map
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/ai/common/OpenAI_Client.ts", "../src/ai/common/OpenAI_Constants.ts", "../src/ai/common/OpenAI_ModelSchema.ts", "../src/ai/registerOpenAi.ts", "../src/ai/OpenAiQueuedProvider.ts", "../src/ai/common/OpenAI_CapabilitySets.ts", "../src/ai/common/OpenAI_Capabilities.ts", "../src/ai/common/OpenAI_ImageValidation.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 { isBrowserLike, resolveApiKey, validateProviderBaseUrl } from \"@workglow/ai/provider-utils\";\nimport type { OpenAiModelConfig } from \"./OpenAI_ModelSchema\";\n\n/**\n * Hostnames (or hostname suffixes) accepted for OpenAI `base_url` without\n * the explicit `trustedBaseUrl` opt-out. Includes Azure OpenAI tenants.\n */\nexport const OPENAI_ALLOWED_HOSTS: readonly string[] = [\"api.openai.com\", \".openai.azure.com\"];\n\
|
|
5
|
+
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { isBrowserLike, resolveApiKey, validateProviderBaseUrl } from \"@workglow/ai/provider-utils\";\nimport type { OpenAiModelConfig } from \"./OpenAI_ModelSchema\";\n\n/**\n * Hostnames (or hostname suffixes) accepted for OpenAI `base_url` without\n * the explicit `trustedBaseUrl` opt-out. Includes Azure OpenAI tenants.\n */\nexport const OPENAI_ALLOWED_HOSTS: readonly string[] = [\"api.openai.com\", \".openai.azure.com\"];\n\ntype OpenAIClientClass = new (config: any) => any;\n\nlet _loadPromise: Promise<OpenAIClientClass> | undefined;\n\n// NOTE: we do not want to de-dup this in the provider-utils, vite wants direct import with string literals.\nexport async function loadOpenAISDK(): Promise<OpenAIClientClass> {\n _loadPromise ??= import(/* @vite-ignore */ \"openai\")\n\n .then((mod) => mod.default as OpenAIClientClass)\n .catch(() => {\n _loadPromise = undefined;\n throw new Error(\"openai is required for OpenAI tasks. Install it with: bun add openai\");\n });\n return _loadPromise;\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 * When `true`, accept the `base_url` even if its hostname is not in\n * {@link OPENAI_ALLOWED_HOSTS}. Use only for known-good custom enterprise\n * gateways. The URL still has to parse and use a safe scheme.\n */\n readonly trustedBaseUrl?: boolean;\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 // Throw before SDK construction on a rejected base_url so the API key is\n // never sent to an unvalidated host.\n const baseURL = validateProviderBaseUrl(config?.base_url, {\n vendor: \"openai\",\n allowHosts: OPENAI_ALLOWED_HOSTS,\n trustedBaseUrl: config?.trustedBaseUrl,\n providerLabel: \"OpenAI\",\n });\n try {\n return new OpenAI({\n apiKey,\n baseURL,\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\nexport const OPENAI = \"OPENAI\";\n",
|
|
7
7
|
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { ModelConfigSchema, ModelRecordSchema } from \"@workglow/ai/worker\";\nimport { DataPortSchemaObject, FromSchema } from \"@workglow/util/worker\";\nimport { OPENAI } from \"./OpenAI_Constants\";\n\nexport const OpenAiModelSchema = {\n type: \"object\",\n properties: {\n provider: {\n const: OPENAI,\n description: \"Discriminator: OpenAI cloud provider.\",\n },\n provider_config: {\n type: \"object\",\n description: \"OpenAI-specific configuration.\",\n properties: {\n model_name: {\n type: \"string\",\n description: \"The OpenAI model identifier (e.g., 'gpt-4o', 'text-embedding-3-small').\",\n },\n credential_key: {\n type: \"string\",\n format: \"credential\",\n description: \"Key to look up in the credential store for the API key.\",\n \"x-ui-hidden\": true,\n },\n base_url: {\n type: \"string\",\n description: \"Base URL for the OpenAI API. Useful for Azure OpenAI or proxy servers.\",\n default: \"https://api.openai.com/v1\",\n },\n trustedBaseUrl: {\n type: \"boolean\",\n description:\n \"When true, accept a base_url whose hostname is not in the built-in allow-list. Use only for known-good custom enterprise gateways — otherwise an attacker can exfiltrate the API key by pointing base_url at their own server.\",\n default: false,\n \"x-ui-hidden\": true,\n },\n organization: {\n type: \"string\",\n description: \"OpenAI organization ID (optional).\",\n },\n },\n required: [\"model_name\"],\n additionalProperties: false,\n },\n },\n required: [\"provider\", \"provider_config\"],\n additionalProperties: true,\n} as const satisfies DataPortSchemaObject;\n\nexport const OpenAiModelRecordSchema = {\n type: \"object\",\n properties: {\n ...ModelRecordSchema.properties,\n ...OpenAiModelSchema.properties,\n },\n required: [...ModelRecordSchema.required, ...OpenAiModelSchema.required],\n additionalProperties: false,\n} as const satisfies DataPortSchemaObject;\n\nexport type OpenAiModelRecord = FromSchema<typeof OpenAiModelRecordSchema>;\n\nexport const OpenAiModelConfigSchema = {\n type: \"object\",\n properties: {\n ...ModelConfigSchema.properties,\n ...OpenAiModelSchema.properties,\n },\n required: [...ModelConfigSchema.required, ...OpenAiModelSchema.required],\n additionalProperties: false,\n} as const satisfies DataPortSchemaObject;\n\nexport type OpenAiModelConfig = FromSchema<typeof OpenAiModelConfigSchema>;\n",
|
|
8
8
|
"/**\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 { registerProviderWithWorker } from \"@workglow/ai/provider-utils\";\nimport { OpenAiQueuedProvider } from \"./OpenAiQueuedProvider\";\nimport { registerOpenAiImageValidator } from \"./common/OpenAI_ImageValidation\";\n\nexport async function registerOpenAi(\n options: AiProviderRegisterOptions & {\n worker: Worker | (() => Worker);\n }\n): Promise<void> {\n registerOpenAiImageValidator();\n await registerProviderWithWorker(new OpenAiQueuedProvider(), \"OpenAI\", options);\n}\n",
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
"/**\n * @license\n * Copyright 2026 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { Capability, ModelRecord } from \"@workglow/ai/worker\";\nimport { OPENAI_CAPABILITY_SETS } from \"./OpenAI_CapabilitySets\";\n\n/**\n * Closed list of capability-set specs the OpenAI provider serves. Derived\n * from {@link OPENAI_CAPABILITY_SETS}. Used by the main-thread provider\n * shells when registering worker-mode proxies so the dispatcher can route\n * requests to the worker proxy.\n */\nexport const OPENAI_RUN_FN_SPECS = OPENAI_CAPABILITY_SETS.map((serves) => ({ serves }));\n\nexport function openAiWorkerRunFnSpecs(): readonly { readonly serves: readonly Capability[] }[] {\n return OPENAI_RUN_FN_SPECS;\n}\n\n/**\n * Shape used by the model-name regexes — `model_id` is required, the rest\n * is loosely-typed metadata only used to opportunistically widen the\n * inferred capability set.\n */\ntype CapabilityHints = Pick<ModelRecord, \"model_id\" | \"provider_config\" | \"capabilities\">;\n\n/**\n * Heuristic capability inference for an OpenAI {@link ModelRecord}. Pattern-\n * matches the canonical OpenAI model id strings (and the `provider_config.\n * model_name` if present) to a closed set of {@link Capability}s. Falls back\n * to the model's stored `capabilities` array (or a baseline of search +\n * info) when no pattern matches.\n *\n * Main-thread method only — workers do not run capability inference.\n */\nexport function inferOpenAiCapabilities(model: CapabilityHints): readonly Capability[] {\n const id = String(\n model.model_id ??\n (model.provider_config as { model_name?: string } | undefined)?.model_name ??\n \"\"\n );\n\n // Embedding models — text-embedding-3-{small,large}, text-embedding-ada-002.\n if (/^text-embedding/i.test(id)) {\n return [\"text.embedding\", \"model.count-tokens\", \"model.info\", \"model.search\"];\n }\n\n // Image models — DALL-E and gpt-image families.\n if (/^dall-e/i.test(id)) {\n // DALL-E 2/3 do NOT support edit consistently — gpt-image-* does. Cover\n // generation only here; the gpt-image branch below adds editing.\n return [\"image.generation\", \"model.info\", \"model.search\"];\n }\n if (/^gpt-image/i.test(id)) {\n return [\"image.generation\", \"image.editing\", \"model.info\", \"model.search\"];\n }\n\n // Chat / reasoning models — gpt-3.5/4/4o/5/...; o-series reasoning models (o1, o3, o4, future).\n // GPT-4o, gpt-4-vision-*, gpt-4-turbo, and all o-series additionally accept image inputs.\n if (/^gpt-/i.test(id) || /^o\\d/i.test(id)) {\n const caps: Capability[] = [\n \"text.generation\",\n \"text.rewriter\",\n \"text.summary\",\n \"tool-use\",\n \"json-mode\",\n \"model.count-tokens\",\n \"model.info\",\n \"model.search\",\n ];\n const supportsVision =\n /gpt-4o|gpt-4\\.1|gpt-5|gpt-4-vision|gpt-4-turbo/i.test(id) || /^o\\d/i.test(id);\n if (supportsVision) {\n caps.push(\"vision-input\");\n }\n return caps;\n }\n\n // Unknown model — fall back to whatever the record declared, or just\n // expose the meta-ops so the model can still be searched / inspected.\n const declared = (model.capabilities as readonly Capability[] | undefined) ?? [];\n if (declared.length > 0) return declared;\n return [\"model.search\", \"model.info\"];\n}\n",
|
|
12
12
|
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { ModelConfig } from \"@workglow/ai\";\nimport { AiImageOutputTask, ProviderUnsupportedFeatureError } from \"@workglow/ai\";\n\nimport { OPENAI } from \"./OpenAI_Constants\";\n\n/**\n * Registers the OpenAI per-provider image validator. Called at provider registration time\n * (both inline and worker-backed paths) so it runs on the main thread before any dispatch.\n *\n * Currently validates:\n * - DALL-E 2 + non-empty `additionalImages` → throws (single-image edit only).\n * DALL-E 3 + ImageEditTask is rejected upstream by the model registry task-array check.\n */\nexport function registerOpenAiImageValidator(): void {\n AiImageOutputTask.registerProviderImageValidator(\n OPENAI,\n (taskType, input, model: ModelConfig) => {\n if (taskType !== \"ImageEditTask\") return;\n const modelName =\n (model.provider_config as { model_name?: string } | undefined)?.model_name ?? \"\";\n const additional = input[\"additionalImages\"] as unknown[] | undefined;\n if (modelName.startsWith(\"dall-e-2\") && Array.isArray(additional) && additional.length > 0) {\n throw new ProviderUnsupportedFeatureError(\n \"additionalImages\",\n model.model_id ?? modelName,\n \"DALL-E 2 only supports single-image edits\"\n );\n }\n }\n );\n}\n"
|
|
13
13
|
],
|
|
14
|
-
"mappings": ";;;;;;;;;AAMA;AAOO,IAAM,uBAA0C,CAAC,kBAAkB,mBAAmB;
|
|
14
|
+
"mappings": ";;;;;;;;;AAMA;AAOO,IAAM,uBAA0C,CAAC,kBAAkB,mBAAmB;AAI7F,IAAI;AAGJ,eAAsB,aAAa,GAA+B;AAAA,EAChE,iBAA2C,iBAExC,KAAK,CAAC,QAAQ,IAAI,OAA4B,EAC9C,MAAM,MAAM;AAAA,IACX,eAAe;AAAA,IACf,MAAM,IAAI,MAAM,sEAAsE;AAAA,GACvF;AAAA,EACH,OAAO;AAAA;AAiBT,eAAsB,SAAS,CAAC,OAAsC;AAAA,EACpE,MAAM,SAAS,MAAM,cAAc;AAAA,EACnC,MAAM,SAAS,OAAO;AAAA,EACtB,MAAM,SAAS,cAAc;AAAA,IAC3B;AAAA,IACA,QAAQ;AAAA,IACR,eAAe;AAAA,EACjB,CAAC;AAAA,EAGD,MAAM,UAAU,wBAAwB,QAAQ,UAAU;AAAA,IACxD,QAAQ;AAAA,IACR,YAAY;AAAA,IACZ,gBAAgB,QAAQ;AAAA,IACxB,eAAe;AAAA,EACjB,CAAC;AAAA,EACD,IAAI;AAAA,IACF,OAAO,IAAI,OAAO;AAAA,MAChB;AAAA,MACA;AAAA,MACA,cAAc,QAAQ,gBAAgB;AAAA,MACtC,yBAAyB,cAAc;AAAA,IACzC,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;;AC1EF,IAAM,SAAS;;ACAtB;AAIO,IAAM,oBAAoB;AAAA,EAC/B,MAAM;AAAA,EACN,YAAY;AAAA,IACV,UAAU;AAAA,MACR,OAAO;AAAA,MACP,aAAa;AAAA,IACf;AAAA,IACA,iBAAiB;AAAA,MACf,MAAM;AAAA,MACN,aAAa;AAAA,MACb,YAAY;AAAA,QACV,YAAY;AAAA,UACV,MAAM;AAAA,UACN,aAAa;AAAA,QACf;AAAA,QACA,gBAAgB;AAAA,UACd,MAAM;AAAA,UACN,QAAQ;AAAA,UACR,aAAa;AAAA,UACb,eAAe;AAAA,QACjB;AAAA,QACA,UAAU;AAAA,UACR,MAAM;AAAA,UACN,aAAa;AAAA,UACb,SAAS;AAAA,QACX;AAAA,QACA,gBAAgB;AAAA,UACd,MAAM;AAAA,UACN,aACE;AAAA,UACF,SAAS;AAAA,UACT,eAAe;AAAA,QACjB;AAAA,QACA,cAAc;AAAA,UACZ,MAAM;AAAA,UACN,aAAa;AAAA,QACf;AAAA,MACF;AAAA,MACA,UAAU,CAAC,YAAY;AAAA,MACvB,sBAAsB;AAAA,IACxB;AAAA,EACF;AAAA,EACA,UAAU,CAAC,YAAY,iBAAiB;AAAA,EACxC,sBAAsB;AACxB;AAEO,IAAM,0BAA0B;AAAA,EACrC,MAAM;AAAA,EACN,YAAY;AAAA,OACP,kBAAkB;AAAA,OAClB,kBAAkB;AAAA,EACvB;AAAA,EACA,UAAU,CAAC,GAAG,kBAAkB,UAAU,GAAG,kBAAkB,QAAQ;AAAA,EACvE,sBAAsB;AACxB;AAIO,IAAM,0BAA0B;AAAA,EACrC,MAAM;AAAA,EACN,YAAY;AAAA,OACP,kBAAkB;AAAA,OAClB,kBAAkB;AAAA,EACvB;AAAA,EACA,UAAU,CAAC,GAAG,kBAAkB,UAAU,GAAG,kBAAkB,QAAQ;AAAA,EACvE,sBAAsB;AACxB;;ACrEA;;;ACAA;AACA;;;ACWO,IAAM,yBAAyB,CAAC,iBAAiB;AACjD,IAAM,kBAAkB,CAAC,mBAAmB,UAAU;AACtD,IAAM,mBAAmB,CAAC,mBAAmB,WAAW;AACxD,IAAM,uBAAuB,CAAC,eAAe;AAC7C,IAAM,sBAAsB,CAAC,cAAc;AAC3C,IAAM,wBAAwB,CAAC,gBAAgB;AAC/C,IAAM,0BAA0B,CAAC,kBAAkB;AACnD,IAAM,uBAAuB,CAAC,eAAe;AAC7C,IAAM,sBAAsB,CAAC,oBAAoB;AACjD,IAAM,sBAAsB,CAAC,cAAc;AAC3C,IAAM,oBAAoB,CAAC,YAAY;AAGvC,IAAM,yBAAyB;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;;;AC7BO,IAAM,sBAAsB,uBAAuB,IAAI,CAAC,YAAY,EAAE,OAAO,EAAE;AAE/E,SAAS,sBAAsB,GAA0D;AAAA,EAC9F,OAAO;AAAA;AAmBF,SAAS,uBAAuB,CAAC,OAA+C;AAAA,EACrF,MAAM,KAAK,OACT,MAAM,YACH,MAAM,iBAAyD,cAChE,EACJ;AAAA,EAGA,IAAI,mBAAmB,KAAK,EAAE,GAAG;AAAA,IAC/B,OAAO,CAAC,kBAAkB,sBAAsB,cAAc,cAAc;AAAA,EAC9E;AAAA,EAGA,IAAI,WAAW,KAAK,EAAE,GAAG;AAAA,IAGvB,OAAO,CAAC,oBAAoB,cAAc,cAAc;AAAA,EAC1D;AAAA,EACA,IAAI,cAAc,KAAK,EAAE,GAAG;AAAA,IAC1B,OAAO,CAAC,oBAAoB,iBAAiB,cAAc,cAAc;AAAA,EAC3E;AAAA,EAIA,IAAI,SAAS,KAAK,EAAE,KAAK,QAAQ,KAAK,EAAE,GAAG;AAAA,IACzC,MAAM,OAAqB;AAAA,MACzB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,MAAM,iBACJ,kDAAkD,KAAK,EAAE,KAAK,QAAQ,KAAK,EAAE;AAAA,IAC/E,IAAI,gBAAgB;AAAA,MAClB,KAAK,KAAK,cAAc;AAAA,IAC1B;AAAA,IACA,OAAO;AAAA,EACT;AAAA,EAIA,MAAM,WAAY,MAAM,gBAAsD,CAAC;AAAA,EAC/E,IAAI,SAAS,SAAS;AAAA,IAAG,OAAO;AAAA,EAChC,OAAO,CAAC,gBAAgB,YAAY;AAAA;;;AFjE/B,MAAM,6BAA6B,yBAA4C,YAAY;AAAA,EAChG,MAAM;AAAA,EACN,aAAa;AACf,CAAC,EAAE;AAAA,EACQ,iBAAiB,CAAC,OAA2C;AAAA,IACpE,OAAO,wBAAwB,KAAK;AAAA;AAAA,EAGnB,gBAAgB,GAAiD;AAAA,IAClF,OAAO,uBAAuB;AAAA;AAElC;;;AGvBA;AAYO,SAAS,4BAA4B,GAAS;AAAA,EACnD,kBAAkB,+BAChB,QACA,CAAC,UAAU,OAAO,UAAuB;AAAA,IACvC,IAAI,aAAa;AAAA,MAAiB;AAAA,IAClC,MAAM,YACH,MAAM,iBAAyD,cAAc;AAAA,IAChF,MAAM,aAAa,MAAM;AAAA,IACzB,IAAI,UAAU,WAAW,UAAU,KAAK,MAAM,QAAQ,UAAU,KAAK,WAAW,SAAS,GAAG;AAAA,MAC1F,MAAM,IAAI,gCACR,oBACA,MAAM,YAAY,WAClB,2CACF;AAAA,IACF;AAAA,GAEJ;AAAA;;;AJxBF,eAAsB,cAAc,CAClC,SAGe;AAAA,EACf,6BAA6B;AAAA,EAC7B,MAAM,2BAA2B,IAAI,sBAAwB,UAAU,OAAO;AAAA;",
|
|
15
15
|
"debugId": "47200340D10D673B64756E2164756E21",
|
|
16
16
|
"names": []
|
|
17
17
|
}
|
package/dist/ai.js
CHANGED
|
@@ -330,7 +330,11 @@ var OpenAI_CountTokens_Preview = async (input, model) => {
|
|
|
330
330
|
|
|
331
331
|
// src/ai/common/OpenAI_ImageEdit.ts
|
|
332
332
|
import { ImageGenerationContentPolicyError, ImageGenerationProviderError } from "@workglow/ai";
|
|
333
|
-
import {
|
|
333
|
+
import {
|
|
334
|
+
dataUriToImageValue,
|
|
335
|
+
imageValueToPngBytes,
|
|
336
|
+
modelIdForError
|
|
337
|
+
} from "@workglow/ai/provider-utils";
|
|
334
338
|
function aspectRatioToSize(aspectRatio) {
|
|
335
339
|
switch (aspectRatio) {
|
|
336
340
|
case "16:9":
|
|
@@ -344,9 +348,6 @@ function aspectRatioToSize(aspectRatio) {
|
|
|
344
348
|
return "1024x1024";
|
|
345
349
|
}
|
|
346
350
|
}
|
|
347
|
-
function modelIdOf(model) {
|
|
348
|
-
return model?.model_id ?? model?.provider_config?.model_name ?? "openai";
|
|
349
|
-
}
|
|
350
351
|
async function gpuImageToOpenAiFile(image, name) {
|
|
351
352
|
const bytes = await imageValueToPngBytes(image);
|
|
352
353
|
const buffer = bytes.buffer instanceof ArrayBuffer ? bytes.buffer.slice(bytes.byteOffset, bytes.byteOffset + bytes.byteLength) : new Uint8Array(bytes).buffer;
|
|
@@ -399,15 +400,17 @@ var OpenAI_ImageEdit_Stream = async (input, model, signal, emit) => {
|
|
|
399
400
|
}
|
|
400
401
|
const msg = err instanceof Error ? err.message : "unknown error";
|
|
401
402
|
if (/safety|policy|moderation/i.test(msg)) {
|
|
402
|
-
throw new ImageGenerationContentPolicyError(
|
|
403
|
+
throw new ImageGenerationContentPolicyError(modelIdForError(model, "openai"), msg);
|
|
403
404
|
}
|
|
404
|
-
throw new ImageGenerationProviderError(
|
|
405
|
+
throw new ImageGenerationProviderError(modelIdForError(model, "openai"), msg, {
|
|
406
|
+
cause: err
|
|
407
|
+
});
|
|
405
408
|
}
|
|
406
409
|
};
|
|
407
410
|
|
|
408
411
|
// src/ai/common/OpenAI_ImageGenerate.ts
|
|
409
412
|
import { ImageGenerationContentPolicyError as ImageGenerationContentPolicyError2, ImageGenerationProviderError as ImageGenerationProviderError2 } from "@workglow/ai";
|
|
410
|
-
import { dataUriToImageValue as dataUriToImageValue2 } from "@workglow/ai/provider-utils";
|
|
413
|
+
import { dataUriToImageValue as dataUriToImageValue2, modelIdForError as modelIdForError2 } from "@workglow/ai/provider-utils";
|
|
411
414
|
function aspectRatioToSize2(aspectRatio) {
|
|
412
415
|
switch (aspectRatio) {
|
|
413
416
|
case "16:9":
|
|
@@ -424,9 +427,6 @@ function aspectRatioToSize2(aspectRatio) {
|
|
|
424
427
|
async function decodeB64Png2(b64) {
|
|
425
428
|
return dataUriToImageValue2(`data:image/png;base64,${b64}`);
|
|
426
429
|
}
|
|
427
|
-
function modelIdOf2(model) {
|
|
428
|
-
return model?.model_id ?? model?.provider_config?.model_name ?? "openai";
|
|
429
|
-
}
|
|
430
430
|
var OpenAI_ImageGenerate_Stream = async (input, model, signal, emit) => {
|
|
431
431
|
const client = await getClient(model);
|
|
432
432
|
const modelName = getModelName(model);
|
|
@@ -444,7 +444,7 @@ var OpenAI_ImageGenerate_Stream = async (input, model, signal, emit) => {
|
|
|
444
444
|
}, { signal });
|
|
445
445
|
const b64 = resp.data?.[0]?.b64_json;
|
|
446
446
|
if (!b64) {
|
|
447
|
-
throw new ImageGenerationProviderError2(
|
|
447
|
+
throw new ImageGenerationProviderError2(modelIdForError2(model, "openai"), "Empty response (no b64_json)");
|
|
448
448
|
}
|
|
449
449
|
const image = await decodeB64Png2(b64);
|
|
450
450
|
emit({ type: "snapshot", data: { image } });
|
|
@@ -456,9 +456,11 @@ var OpenAI_ImageGenerate_Stream = async (input, model, signal, emit) => {
|
|
|
456
456
|
}
|
|
457
457
|
const msg = err instanceof Error ? err.message : "unknown error";
|
|
458
458
|
if (/safety|policy|moderation/i.test(msg)) {
|
|
459
|
-
throw new ImageGenerationContentPolicyError2(
|
|
459
|
+
throw new ImageGenerationContentPolicyError2(modelIdForError2(model, "openai"), msg);
|
|
460
460
|
}
|
|
461
|
-
throw new ImageGenerationProviderError2(
|
|
461
|
+
throw new ImageGenerationProviderError2(modelIdForError2(model, "openai"), msg, {
|
|
462
|
+
cause: err
|
|
463
|
+
});
|
|
462
464
|
}
|
|
463
465
|
}
|
|
464
466
|
try {
|
|
@@ -488,9 +490,11 @@ var OpenAI_ImageGenerate_Stream = async (input, model, signal, emit) => {
|
|
|
488
490
|
}
|
|
489
491
|
const msg = err instanceof Error ? err.message : "unknown error";
|
|
490
492
|
if (/safety|policy|moderation/i.test(msg)) {
|
|
491
|
-
throw new ImageGenerationContentPolicyError2(
|
|
493
|
+
throw new ImageGenerationContentPolicyError2(modelIdForError2(model, "openai"), msg);
|
|
492
494
|
}
|
|
493
|
-
throw new ImageGenerationProviderError2(
|
|
495
|
+
throw new ImageGenerationProviderError2(modelIdForError2(model, "openai"), msg, {
|
|
496
|
+
cause: err
|
|
497
|
+
});
|
|
494
498
|
}
|
|
495
499
|
};
|
|
496
500
|
|
|
@@ -768,4 +772,4 @@ export {
|
|
|
768
772
|
OPENAI
|
|
769
773
|
};
|
|
770
774
|
|
|
771
|
-
//# debugId=
|
|
775
|
+
//# debugId=989D71135F1A4FF664756E2164756E21
|