@workglow/google-gemini 0.2.31 → 0.2.33
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/README.md +44 -0
- package/dist/ai/GoogleGeminiProvider.d.ts.map +1 -0
- package/dist/ai/GoogleGeminiQueuedProvider.d.ts.map +1 -0
- package/dist/ai/common/Gemini_Chat.d.ts.map +1 -0
- package/dist/{ai-provider → ai}/common/Gemini_Client.d.ts +4 -1
- package/dist/ai/common/Gemini_Client.d.ts.map +1 -0
- package/dist/ai/common/Gemini_Constants.d.ts.map +1 -0
- package/dist/ai/common/Gemini_CountTokens.d.ts.map +1 -0
- package/dist/ai/common/Gemini_ImageEdit.d.ts.map +1 -0
- package/dist/ai/common/Gemini_ImageGenerate.d.ts.map +1 -0
- package/dist/ai/common/Gemini_ImageValidation.d.ts.map +1 -0
- package/dist/ai/common/Gemini_JobRunFns.d.ts.map +1 -0
- package/dist/ai/common/Gemini_ModelInfo.d.ts.map +1 -0
- package/dist/ai/common/Gemini_ModelSchema.d.ts.map +1 -0
- package/dist/ai/common/Gemini_ModelSearch.d.ts.map +1 -0
- package/dist/ai/common/Gemini_Schema.d.ts.map +1 -0
- package/dist/ai/common/Gemini_StructuredGeneration.d.ts.map +1 -0
- package/dist/ai/common/Gemini_TextEmbedding.d.ts.map +1 -0
- package/dist/ai/common/Gemini_TextGeneration.d.ts.map +1 -0
- package/dist/ai/common/Gemini_TextRewriter.d.ts.map +1 -0
- package/dist/ai/common/Gemini_TextSummary.d.ts.map +1 -0
- package/dist/ai/common/Gemini_ToolCalling.d.ts.map +1 -0
- package/dist/ai/index.d.ts.map +1 -0
- package/dist/ai/registerGemini.d.ts.map +1 -0
- package/dist/ai/registerGeminiInline.d.ts.map +1 -0
- package/dist/ai/registerGeminiWorker.d.ts.map +1 -0
- package/dist/{ai-provider → ai}/runtime.d.ts +1 -1
- package/dist/ai/runtime.d.ts.map +1 -0
- package/dist/{ai-provider.d.ts → ai-runtime.d.ts} +2 -2
- package/dist/ai-runtime.d.ts.map +1 -0
- package/dist/{ai-provider-runtime.js → ai-runtime.js} +50 -39
- package/dist/ai-runtime.js.map +30 -0
- package/dist/{ai-provider-runtime.d.ts → ai.d.ts} +2 -2
- package/dist/ai.d.ts.map +1 -0
- package/dist/{ai-provider.js → ai.js} +19 -11
- package/dist/ai.js.map +15 -0
- package/package.json +21 -26
- package/dist/ai-provider/GoogleGeminiProvider.d.ts.map +0 -1
- package/dist/ai-provider/GoogleGeminiQueuedProvider.d.ts.map +0 -1
- package/dist/ai-provider/common/Gemini_Chat.d.ts.map +0 -1
- package/dist/ai-provider/common/Gemini_Client.d.ts.map +0 -1
- package/dist/ai-provider/common/Gemini_Constants.d.ts.map +0 -1
- package/dist/ai-provider/common/Gemini_CountTokens.d.ts.map +0 -1
- package/dist/ai-provider/common/Gemini_ImageEdit.d.ts.map +0 -1
- package/dist/ai-provider/common/Gemini_ImageGenerate.d.ts.map +0 -1
- package/dist/ai-provider/common/Gemini_ImageValidation.d.ts.map +0 -1
- package/dist/ai-provider/common/Gemini_JobRunFns.d.ts.map +0 -1
- package/dist/ai-provider/common/Gemini_ModelInfo.d.ts.map +0 -1
- package/dist/ai-provider/common/Gemini_ModelSchema.d.ts.map +0 -1
- package/dist/ai-provider/common/Gemini_ModelSearch.d.ts.map +0 -1
- package/dist/ai-provider/common/Gemini_Schema.d.ts.map +0 -1
- package/dist/ai-provider/common/Gemini_StructuredGeneration.d.ts.map +0 -1
- package/dist/ai-provider/common/Gemini_TextEmbedding.d.ts.map +0 -1
- package/dist/ai-provider/common/Gemini_TextGeneration.d.ts.map +0 -1
- package/dist/ai-provider/common/Gemini_TextRewriter.d.ts.map +0 -1
- package/dist/ai-provider/common/Gemini_TextSummary.d.ts.map +0 -1
- package/dist/ai-provider/common/Gemini_ToolCalling.d.ts.map +0 -1
- package/dist/ai-provider/index.d.ts.map +0 -1
- package/dist/ai-provider/registerGemini.d.ts.map +0 -1
- package/dist/ai-provider/registerGeminiInline.d.ts.map +0 -1
- package/dist/ai-provider/registerGeminiWorker.d.ts.map +0 -1
- package/dist/ai-provider/runtime.d.ts.map +0 -1
- package/dist/ai-provider-runtime.d.ts.map +0 -1
- package/dist/ai-provider-runtime.js.map +0 -30
- package/dist/ai-provider.d.ts.map +0 -1
- package/dist/ai-provider.js.map +0 -15
- /package/dist/{ai-provider → ai}/GoogleGeminiProvider.d.ts +0 -0
- /package/dist/{ai-provider → ai}/GoogleGeminiQueuedProvider.d.ts +0 -0
- /package/dist/{ai-provider → ai}/common/Gemini_Chat.d.ts +0 -0
- /package/dist/{ai-provider → ai}/common/Gemini_Constants.d.ts +0 -0
- /package/dist/{ai-provider → ai}/common/Gemini_CountTokens.d.ts +0 -0
- /package/dist/{ai-provider → ai}/common/Gemini_ImageEdit.d.ts +0 -0
- /package/dist/{ai-provider → ai}/common/Gemini_ImageGenerate.d.ts +0 -0
- /package/dist/{ai-provider → ai}/common/Gemini_ImageValidation.d.ts +0 -0
- /package/dist/{ai-provider → ai}/common/Gemini_JobRunFns.d.ts +0 -0
- /package/dist/{ai-provider → ai}/common/Gemini_ModelInfo.d.ts +0 -0
- /package/dist/{ai-provider → ai}/common/Gemini_ModelSchema.d.ts +0 -0
- /package/dist/{ai-provider → ai}/common/Gemini_ModelSearch.d.ts +0 -0
- /package/dist/{ai-provider → ai}/common/Gemini_Schema.d.ts +0 -0
- /package/dist/{ai-provider → ai}/common/Gemini_StructuredGeneration.d.ts +0 -0
- /package/dist/{ai-provider → ai}/common/Gemini_TextEmbedding.d.ts +0 -0
- /package/dist/{ai-provider → ai}/common/Gemini_TextGeneration.d.ts +0 -0
- /package/dist/{ai-provider → ai}/common/Gemini_TextRewriter.d.ts +0 -0
- /package/dist/{ai-provider → ai}/common/Gemini_TextSummary.d.ts +0 -0
- /package/dist/{ai-provider → ai}/common/Gemini_ToolCalling.d.ts +0 -0
- /package/dist/{ai-provider → ai}/index.d.ts +0 -0
- /package/dist/{ai-provider → ai}/registerGemini.d.ts +0 -0
- /package/dist/{ai-provider → ai}/registerGeminiInline.d.ts +0 -0
- /package/dist/{ai-provider → ai}/registerGeminiWorker.d.ts +0 -0
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/ai/common/Gemini_Client.ts", "../src/ai/registerGeminiInline.ts", "../src/ai/common/Gemini_ModelSearch.ts", "../src/ai/common/Gemini_Constants.ts", "../src/ai/common/Gemini_Schema.ts", "../src/ai/common/Gemini_ToolCalling.ts", "../src/ai/common/Gemini_Chat.ts", "../src/ai/common/Gemini_CountTokens.ts", "../src/ai/common/Gemini_ImageEdit.ts", "../src/ai/common/Gemini_ImageGenerate.ts", "../src/ai/common/Gemini_ModelInfo.ts", "../src/ai/common/Gemini_StructuredGeneration.ts", "../src/ai/common/Gemini_TextEmbedding.ts", "../src/ai/common/Gemini_TextGeneration.ts", "../src/ai/common/Gemini_TextRewriter.ts", "../src/ai/common/Gemini_TextSummary.ts", "../src/ai/common/Gemini_JobRunFns.ts", "../src/ai/GoogleGeminiQueuedProvider.ts", "../src/ai/common/Gemini_ImageValidation.ts", "../src/ai/registerGeminiWorker.ts", "../src/ai/GoogleGeminiProvider.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { resolveApiKey } from \"@workglow/ai/provider-utils\";\nimport type { GeminiModelConfig } from \"./Gemini_ModelSchema\";\n\ntype GeminiSDKModule = typeof import(\"@google/generative-ai\");\ntype GoogleGenerativeAIConstructor = GeminiSDKModule[\"GoogleGenerativeAI\"];\n\nlet _loadPromise: Promise<GoogleGenerativeAIConstructor> | 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 loadGeminiSDK(): Promise<GoogleGenerativeAIConstructor> {\n _loadPromise ??= import(\"@google/generative-ai\")\n .then((mod) => mod.GoogleGenerativeAI)\n .catch(() => {\n _loadPromise = undefined;\n throw new Error(\n \"@google/generative-ai is required for Gemini tasks. Install it with: bun add @google/generative-ai\"\n );\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 embedding_task_type?: string | null;\n}\n\nexport function getApiKey(model: GeminiModelConfig | undefined): string {\n const config = model?.provider_config as ResolvedProviderConfig | undefined;\n return resolveApiKey({\n config,\n envVar: [\"GOOGLE_API_KEY\", \"GEMINI_API_KEY\"],\n providerLabel: \"Google\",\n });\n}\n\nexport function getModelName(model: GeminiModelConfig | 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
|
+
"/**\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 { GEMINI_PREVIEW_TASKS, GEMINI_STREAM_TASKS, GEMINI_TASKS } from \"./common/Gemini_JobRunFns\";\nimport { GoogleGeminiQueuedProvider } from \"./GoogleGeminiQueuedProvider\";\nimport { registerGeminiImageValidator } from \"./common/Gemini_ImageValidation\";\n\nexport async function registerGeminiInline(options?: AiProviderRegisterOptions): Promise<void> {\n registerGeminiImageValidator();\n await registerProviderInline(\n new GoogleGeminiQueuedProvider(GEMINI_TASKS, GEMINI_STREAM_TASKS, GEMINI_PREVIEW_TASKS),\n \"Google Gemini\",\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 { normalizedModelSearchQuery } from \"@workglow/ai/provider-utils\";\nimport { GOOGLE_GEMINI } from \"./Gemini_Constants\";\n\ninterface GeminiModelEntry {\n readonly label: string;\n readonly value: string;\n readonly tasks?: readonly string[];\n}\n\nconst GEMINI_MODELS: readonly GeminiModelEntry[] = [\n { label: \"gemini-3.1-pro-preview\", value: \"gemini-3.1-pro-preview\" },\n { label: \"gemini-3-flash-preview\", value: \"gemini-3-flash-preview\" },\n { label: \"gemini-3.1-flash-lite-preview\", value: \"gemini-3.1-flash-lite-preview\" },\n { label: \"gemini-2.5-flash\", value: \"gemini-2.5-flash\" },\n { label: \"gemini-2.5-pro\", value: \"gemini-2.5-pro\" },\n // Embedding models\n {\n label: \"gemini-embedding-2\",\n value: \"gemini-embedding-2\",\n tasks: [\"TextEmbeddingTask\"],\n },\n {\n label: \"gemini-embedding-001\",\n value: \"gemini-embedding-001\",\n tasks: [\"TextEmbeddingTask\"],\n },\n // Image-output models\n {\n label: \"gemini-3.1-flash-image-preview\",\n value: \"gemini-3.1-flash-image-preview\",\n tasks: [\"ImageGenerateTask\", \"ImageEditTask\"],\n },\n {\n label: \"gemini-3-pro-image-preview\",\n value: \"gemini-3-pro-image-preview\",\n tasks: [\"ImageGenerateTask\", \"ImageEditTask\"],\n },\n {\n label: \"imagen-4.0-generate-001\",\n value: \"imagen-4.0-generate-001\",\n tasks: [\"ImageGenerateTask\"],\n },\n];\n\ninterface GeminiApiModel {\n readonly name: string;\n readonly displayName?: string;\n readonly description?: string;\n readonly supportedGenerationMethods?: readonly string[];\n}\n\nfunction tasksForGeminiApiModel(model: GeminiApiModel, id: string): string[] {\n const staticEntry = GEMINI_MODELS.find((m) => m.value === id);\n if (staticEntry?.tasks) return [...staticEntry.tasks];\n\n const methods = model.supportedGenerationMethods ?? [];\n if (methods.some((method) => method.toLowerCase().includes(\"embed\"))) {\n return [\"TextEmbeddingTask\"];\n }\n return [];\n}\n\nfunction mapGeminiModel(model: GeminiApiModel): ModelSearchResultItem {\n const id = model.name.startsWith(\"models/\") ? model.name.slice(\"models/\".length) : model.name;\n const title = model.displayName || id;\n return {\n id,\n label: title,\n description: model.displayName ? id : (model.description ?? \"\"),\n record: {\n model_id: id,\n provider: GOOGLE_GEMINI,\n title,\n description: model.description ?? \"\",\n tasks: tasksForGeminiApiModel(model, id),\n provider_config: { model_name: id },\n metadata: {},\n },\n raw: model,\n };\n}\n\nasync function listGeminiModels(\n credentialKey: string,\n signal?: AbortSignal\n): Promise<ModelSearchResultItem[]> {\n const params = new URLSearchParams({ key: credentialKey });\n const response = await fetch(\n `https://generativelanguage.googleapis.com/v1beta/models?${params}`,\n {\n signal,\n }\n );\n if (!response.ok) throw new Error(`Gemini API returned ${response.status}`);\n const body = (await response.json()) as { models?: GeminiApiModel[] };\n return (body.models ?? []).map(mapGeminiModel);\n}\n\nexport const Gemini_ModelSearch: AiProviderRunFn<\n ModelSearchTaskInput,\n ModelSearchTaskOutput\n> = async (input, _model, _onProgress, signal) => {\n const q = normalizedModelSearchQuery(input.query);\n if (input.credential_key) {\n const models = await listGeminiModels(input.credential_key, signal);\n const results = q\n ? models.filter((m) => m.id.toLowerCase().includes(q) || m.label.toLowerCase().includes(q))\n : models;\n return { results };\n }\n\n const filtered = q\n ? GEMINI_MODELS.filter(\n (m) => m.value.toLowerCase().includes(q) || m.label.toLowerCase().includes(q)\n )\n : GEMINI_MODELS;\n const results: ModelSearchResultItem[] = filtered.map((m) => ({\n id: m.value,\n label: m.label,\n description: \"\",\n record: {\n model_id: m.value,\n provider: GOOGLE_GEMINI,\n title: m.value,\n description: \"\",\n tasks: m.tasks ? [...m.tasks] : [],\n provider_config: { model_name: m.value },\n metadata: {},\n },\n raw: m,\n }));\n return { results };\n};\n",
|
|
8
|
+
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nexport const GOOGLE_GEMINI = \"GOOGLE_GEMINI\";\n",
|
|
9
|
+
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * Recursively strip JSON Schema properties that the Gemini API does not support\n * (e.g. `additionalProperties`). Returns a shallow-cloned schema without mutating the original.\n */\nexport function sanitizeSchemaForGemini(schema: Record<string, unknown>): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(schema)) {\n if (key === \"additionalProperties\") continue;\n if (value && typeof value === \"object\" && !Array.isArray(value)) {\n result[key] = sanitizeSchemaForGemini(value as Record<string, unknown>);\n } else {\n result[key] = value;\n }\n }\n return result;\n}\n",
|
|
10
|
+
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { FunctionCallingMode } from \"@google/generative-ai\";\nimport { buildToolDescription, filterValidToolCalls } from \"@workglow/ai/worker\";\nimport type {\n AiProviderRunFn,\n AiProviderStreamFn,\n ChatMessage,\n ToolCallingTaskInput,\n ToolCallingTaskOutput,\n ToolCalls,\n ToolDefinition,\n} from \"@workglow/ai\";\nimport type { StreamEvent } from \"@workglow/task-graph\";\nimport type { GeminiModelConfig } from \"./Gemini_ModelSchema\";\nimport { getApiKey, getModelName, loadGeminiSDK } from \"./Gemini_Client\";\nimport { sanitizeSchemaForGemini } from \"./Gemini_Schema\";\n\nexport function buildGeminiContents(\n messages: ReadonlyArray<ChatMessage> | undefined,\n prompt: unknown\n): any[] {\n if (!messages || messages.length === 0) {\n return [{ role: \"user\", parts: [{ text: prompt }] }];\n }\n\n // Index tool_use ids → names from any prior assistant turn (Gemini wants\n // the function name on the functionResponse, not just the id).\n const toolUseNames = new Map<string, string>();\n for (const msg of messages) {\n if (msg.role !== \"assistant\") continue;\n for (const block of msg.content) {\n if (block.type === \"tool_use\") {\n toolUseNames.set(block.id, block.name);\n }\n }\n }\n\n const contents: any[] = [];\n for (const msg of messages) {\n if (msg.role === \"user\") {\n const parts: any[] = [];\n for (const block of msg.content) {\n if (block.type === \"text\") {\n parts.push({ text: block.text });\n } else if (block.type === \"image\") {\n parts.push({ inlineData: { mimeType: block.mimeType, data: block.data } });\n }\n }\n contents.push({ role: \"user\", parts });\n } else if (msg.role === \"assistant\") {\n const parts: any[] = [];\n for (const block of msg.content) {\n if (block.type === \"text\" && block.text) {\n parts.push({ text: block.text });\n } else if (block.type === \"tool_use\") {\n parts.push({ functionCall: { name: block.name, args: block.input } });\n }\n }\n if (parts.length > 0) contents.push({ role: \"model\", parts });\n } else if (msg.role === \"tool\") {\n const parts: any[] = [];\n for (const block of msg.content) {\n if (block.type !== \"tool_result\") continue;\n const name = toolUseNames.get(block.tool_use_id) ?? \"unknown\";\n const textContent = block.content\n .filter((b) => b.type === \"text\")\n .map((b) => (b as { type: \"text\"; text: string }).text)\n .join(\"\");\n let response: Record<string, unknown>;\n try {\n response = JSON.parse(textContent);\n } catch {\n response = { result: textContent };\n }\n parts.push({ functionResponse: { name, response } });\n }\n if (parts.length > 0) contents.push({ role: \"user\", parts });\n }\n }\n return contents;\n}\n\nfunction mapGeminiToolConfig(\n toolChoice: string | undefined\n):\n | { functionCallingConfig: { mode: FunctionCallingMode; allowedFunctionNames?: string[] } }\n | undefined {\n if (!toolChoice || toolChoice === \"auto\") {\n return { functionCallingConfig: { mode: \"AUTO\" as FunctionCallingMode } };\n }\n if (toolChoice === \"none\") {\n return { functionCallingConfig: { mode: \"NONE\" as FunctionCallingMode } };\n }\n if (toolChoice === \"required\") {\n return { functionCallingConfig: { mode: \"ANY\" as FunctionCallingMode } };\n }\n return {\n functionCallingConfig: {\n mode: \"ANY\" as FunctionCallingMode,\n allowedFunctionNames: [toolChoice],\n },\n };\n}\n\nexport const Gemini_ToolCalling: AiProviderRunFn<\n ToolCallingTaskInput,\n ToolCallingTaskOutput,\n GeminiModelConfig\n> = async (input, model, update_progress, signal) => {\n update_progress(0, \"Starting Gemini tool calling\");\n const GoogleGenerativeAI = await loadGeminiSDK();\n const genAI = new GoogleGenerativeAI(getApiKey(model));\n\n const functionDeclarations = input.tools.map((t: ToolDefinition) => ({\n name: t.name,\n description: buildToolDescription(t),\n parameters: sanitizeSchemaForGemini(t.inputSchema as Record<string, unknown>) as any,\n }));\n\n const toolConfig = mapGeminiToolConfig(input.toolChoice);\n\n const genModel = genAI.getGenerativeModel({\n model: getModelName(model),\n tools: [{ functionDeclarations }],\n toolConfig: toolConfig as any,\n systemInstruction: input.systemPrompt || undefined,\n generationConfig: {\n maxOutputTokens: input.maxTokens,\n temperature: input.temperature,\n },\n });\n\n const contents = buildGeminiContents(input.messages, input.prompt);\n\n const result = await genModel.generateContent({ contents });\n\n const parts = result.response.candidates?.[0]?.content?.parts ?? [];\n\n const textParts: string[] = [];\n const toolCalls: ToolCalls = [];\n let callIndex = 0;\n\n for (const part of parts) {\n if (\"text\" in part && part.text) {\n textParts.push(part.text);\n }\n if (\"functionCall\" in part && part.functionCall) {\n const id = `call_${callIndex++}`;\n toolCalls.push({\n id,\n name: part.functionCall.name,\n input: (part.functionCall.args as Record<string, unknown>) ?? {},\n });\n }\n }\n\n update_progress(100, \"Completed Gemini tool calling\");\n return { text: textParts.join(\"\"), toolCalls: filterValidToolCalls(toolCalls, input.tools) };\n};\n\nexport const Gemini_ToolCalling_Stream: AiProviderStreamFn<\n ToolCallingTaskInput,\n ToolCallingTaskOutput,\n GeminiModelConfig\n> = async function* (input, model, signal): AsyncIterable<StreamEvent<ToolCallingTaskOutput>> {\n const GoogleGenerativeAI = await loadGeminiSDK();\n const genAI = new GoogleGenerativeAI(getApiKey(model));\n\n const functionDeclarations = input.tools.map((t: ToolDefinition) => ({\n name: t.name,\n description: buildToolDescription(t),\n parameters: sanitizeSchemaForGemini(t.inputSchema as Record<string, unknown>) as any,\n }));\n\n const toolConfig = mapGeminiToolConfig(input.toolChoice);\n\n const genModel = genAI.getGenerativeModel({\n model: getModelName(model),\n tools: [{ functionDeclarations }],\n toolConfig: toolConfig as any,\n systemInstruction: input.systemPrompt || undefined,\n generationConfig: {\n maxOutputTokens: input.maxTokens,\n temperature: input.temperature,\n },\n });\n\n const contents = buildGeminiContents(input.messages, input.prompt);\n\n const result = await genModel.generateContentStream({ contents }, { signal });\n\n let callIndex = 0;\n\n for await (const chunk of result.stream) {\n const parts = chunk.candidates?.[0]?.content?.parts ?? [];\n for (const part of parts) {\n if (\"text\" in part && part.text) {\n yield { type: \"text-delta\", port: \"text\", textDelta: part.text };\n }\n if (\"functionCall\" in part && part.functionCall) {\n const id = `call_${callIndex++}`;\n yield {\n type: \"object-delta\",\n port: \"toolCalls\",\n objectDelta: [\n {\n id,\n name: part.functionCall.name,\n input: (part.functionCall.args as Record<string, unknown>) ?? {},\n },\n ],\n };\n }\n }\n }\n\n yield { type: \"finish\", data: { text: \"\", toolCalls: [] } as ToolCallingTaskOutput };\n};\n",
|
|
11
|
+
"/**\n * @license\n * Copyright 2026 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {\n AiChatProviderInput,\n AiChatProviderOutput,\n AiProviderRunFn,\n AiProviderStreamFn,\n} from \"@workglow/ai\";\nimport type { StreamEvent } from \"@workglow/task-graph\";\nimport type { GeminiModelConfig } from \"./Gemini_ModelSchema\";\nimport { getApiKey, getModelName, loadGeminiSDK } from \"./Gemini_Client\";\nimport { buildGeminiContents } from \"./Gemini_ToolCalling\";\n\nexport const Gemini_Chat: AiProviderRunFn<\n AiChatProviderInput,\n AiChatProviderOutput,\n GeminiModelConfig\n> = async (input, model, update_progress, signal) => {\n update_progress(0, \"Gemini chat turn\");\n const GoogleGenerativeAI = await loadGeminiSDK();\n const genAI = new GoogleGenerativeAI(getApiKey(model));\n const genModel = genAI.getGenerativeModel({\n model: getModelName(model),\n systemInstruction: input.systemPrompt || undefined,\n generationConfig: {\n maxOutputTokens: input.maxTokens,\n temperature: input.temperature,\n },\n });\n\n const contents = buildGeminiContents(input.messages, input.prompt);\n\n const result = await genModel.generateContent({ contents });\n const text = result.response.text() ?? \"\";\n update_progress(100, \"Turn complete\");\n return { text };\n};\n\nexport const Gemini_Chat_Stream: AiProviderStreamFn<\n AiChatProviderInput,\n AiChatProviderOutput,\n GeminiModelConfig\n> = async function* (input, model, signal): AsyncIterable<StreamEvent<AiChatProviderOutput>> {\n const GoogleGenerativeAI = await loadGeminiSDK();\n const genAI = new GoogleGenerativeAI(getApiKey(model));\n const genModel = genAI.getGenerativeModel({\n model: getModelName(model),\n systemInstruction: input.systemPrompt || undefined,\n generationConfig: {\n maxOutputTokens: input.maxTokens,\n temperature: input.temperature,\n },\n });\n\n const contents = buildGeminiContents(input.messages, input.prompt);\n\n const result = await genModel.generateContentStream({ contents }, { signal });\n\n for await (const chunk of result.stream) {\n const text = chunk.text();\n if (text) {\n yield { type: \"text-delta\", port: \"text\", textDelta: text };\n }\n }\n yield { type: \"finish\", data: {} as AiChatProviderOutput };\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 AiProviderPreviewRunFn,\n AiProviderRunFn,\n CountTokensTaskInput,\n CountTokensTaskOutput,\n} from \"@workglow/ai\";\nimport type { GeminiModelConfig } from \"./Gemini_ModelSchema\";\nimport { getApiKey, getModelName, loadGeminiSDK } from \"./Gemini_Client\";\n\nexport const Gemini_CountTokens: AiProviderRunFn<\n CountTokensTaskInput,\n CountTokensTaskOutput,\n GeminiModelConfig\n> = async (input, model, onProgress, signal) => {\n const GoogleGenerativeAI = await loadGeminiSDK();\n const genAI = new GoogleGenerativeAI(getApiKey(model));\n const genModel = genAI.getGenerativeModel({ model: getModelName(model) });\n const result = await genModel.countTokens(input.text);\n return { count: result.totalTokens };\n};\n\nexport const Gemini_CountTokens_Preview: AiProviderPreviewRunFn<\n CountTokensTaskInput,\n CountTokensTaskOutput,\n GeminiModelConfig\n> = async (input, _model) => {\n return { count: Math.ceil(input.text.length / 4) };\n};\n",
|
|
13
|
+
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {\n AiProviderRunFn,\n AiProviderStreamFn,\n 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-utils\";\nimport { getApiKey, getModelName, loadGeminiSDK } from \"./Gemini_Client\";\nimport type { GeminiModelConfig } from \"./Gemini_ModelSchema\";\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 \"gemini\"\n );\n}\n\n/** Decode a base64 inline image part into an ImageValue. */\nasync function decodeInlineImage(mimeType: string, data: string): Promise<ImageValue> {\n return dataUriToImageValue(`data:${mimeType};base64,${data}`);\n}\n\n/**\n * Encode an inbound `ImageValue` (or a legacy data URI string) as base64 PNG\n * for use in an inlineData Part.\n */\nasync function gpuImageToInlinePart(\n image: ImageValue | string\n): Promise<{ inlineData: { mimeType: string; data: string } }> {\n if (typeof image === \"string\" && image.startsWith(\"data:\")) {\n // Data URI materialized at an earlier worker boundary — extract base64 directly.\n const base64 = image.replace(/^data:[^;]+;base64,/, \"\");\n return { inlineData: { mimeType: \"image/png\", data: base64 } };\n }\n const bytes = await imageValueToPngBytes(image);\n // Convert raw bytes to base64 for the inlineData part. Buffer.toString\n // is used in node; fall back to btoa over chunks in browser-like runtimes.\n let base64: string;\n if (typeof Buffer !== \"undefined\") {\n base64 = Buffer.from(bytes.buffer, bytes.byteOffset, bytes.byteLength).toString(\"base64\");\n } else {\n let binary = \"\";\n for (let i = 0; i < bytes.byteLength; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n base64 = btoa(binary);\n }\n return { inlineData: { mimeType: \"image/png\", data: base64 } };\n}\n\n/** Non-streaming path. */\nexport const Gemini_ImageEdit: AiProviderRunFn<\n ImageEditTaskInput,\n ImageEditTaskOutput,\n GeminiModelConfig\n> = async (input, model, update_progress, signal) => {\n const logger = getLogger();\n const timer = `gemini:ImageEdit:${modelIdOf(model)}`;\n logger.time(timer, { model: modelIdOf(model) });\n update_progress(0, \"Starting Gemini image edit\");\n\n const GoogleGenerativeAI = await loadGeminiSDK();\n const genAI = new GoogleGenerativeAI(getApiKey(model));\n const modelName = getModelName(model);\n const genModel = genAI.getGenerativeModel({ model: modelName });\n\n // image/additionalImages may be data URI strings if the input crossed\n // an earlier worker boundary in legacy form; otherwise they are ImageValue\n // POJOs from the standard image hydration resolver.\n const primaryPart = await gpuImageToInlinePart(input.image as unknown as ImageValue | string);\n\n const additionalParts: Array<{ inlineData: { mimeType: string; data: string } }> =\n input.additionalImages && (input.additionalImages as Array<ImageValue | string>).length > 0\n ? await Promise.all(\n (input.additionalImages as Array<ImageValue | string>).map((g) => gpuImageToInlinePart(g))\n )\n : [];\n\n const parts: Array<any> = [{ text: input.prompt }, primaryPart, ...additionalParts];\n\n try {\n const result = await genModel.generateContent({ contents: [{ role: \"user\", parts }] }, {\n signal,\n } as any);\n\n const response = result.response;\n\n // Check for safety blocks\n if (\n !response.candidates ||\n response.candidates.length === 0 ||\n response.promptFeedback?.blockReason\n ) {\n const reason = response.promptFeedback?.blockReason ?? \"SAFETY\";\n throw new ImageGenerationContentPolicyError(modelIdOf(model), `Blocked: ${reason}`);\n }\n\n // Find the inline image part\n const candidateParts = response.candidates[0]?.content?.parts ?? [];\n const imagePart = candidateParts.find(\n (p: any) => p.inlineData && p.inlineData.mimeType && p.inlineData.data\n ) as { inlineData: { mimeType: string; data: string } } | undefined;\n\n if (!imagePart) {\n throw new ImageGenerationProviderError(\n modelIdOf(model),\n \"No image part in response (Gemini did not return an inline image)\"\n );\n }\n\n const image = await decodeInlineImage(imagePart.inlineData.mimeType, imagePart.inlineData.data);\n update_progress(100, \"Completed Gemini image edit\");\n logger.timeEnd(timer, { model: modelIdOf(model) });\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|blocked|SAFETY|PROHIBITED/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 * One-shot stream wrapper. Gemini does not support partial image streaming,\n * so we call the non-streaming run function, yield one snapshot, then finish.\n */\nexport const Gemini_ImageEdit_Stream: AiProviderStreamFn<\n ImageEditTaskInput,\n ImageEditTaskOutput,\n GeminiModelConfig\n> = async function* (input, model, signal): AsyncIterable<StreamEvent<ImageEditTaskOutput>> {\n const noop = () => {};\n const result = await Gemini_ImageEdit(input, model, noop, signal);\n yield { type: \"snapshot\", data: result } as StreamEvent<ImageEditTaskOutput>;\n yield { type: \"finish\", data: {} as ImageEditTaskOutput };\n};\n",
|
|
14
|
+
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {\n AiProviderRunFn,\n AiProviderStreamFn,\n 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-utils\";\nimport type { GeminiModelConfig } from \"./Gemini_ModelSchema\";\nimport { getApiKey, getModelName, loadGeminiSDK } from \"./Gemini_Client\";\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 \"gemini\"\n );\n}\n\n/** Decode a base64 string with an explicit mime type into an ImageValue. */\nasync function decodeInlineImage(mimeType: string, data: string): Promise<ImageValue> {\n return dataUriToImageValue(`data:${mimeType};base64,${data}`);\n}\n\n/** Non-streaming path. */\nexport const Gemini_ImageGenerate: AiProviderRunFn<\n ImageGenerateTaskInput,\n ImageGenerateTaskOutput,\n GeminiModelConfig\n> = async (input, model, update_progress, signal) => {\n const logger = getLogger();\n const timer = `gemini:ImageGenerate:${modelIdOf(model)}`;\n logger.time(timer, { model: modelIdOf(model) });\n update_progress(0, \"Starting Gemini image generation\");\n\n const GoogleGenerativeAI = await loadGeminiSDK();\n const genAI = new GoogleGenerativeAI(getApiKey(model));\n const modelName = getModelName(model);\n const genModel = genAI.getGenerativeModel({ model: modelName });\n\n const parts: Array<{ text: string }> = [{ text: input.prompt }];\n\n try {\n const result = await genModel.generateContent({ contents: [{ role: \"user\", parts }] }, {\n signal,\n } as any);\n\n const response = result.response;\n\n // Check for safety blocks\n if (\n !response.candidates ||\n response.candidates.length === 0 ||\n response.promptFeedback?.blockReason\n ) {\n const reason = response.promptFeedback?.blockReason ?? \"SAFETY\";\n throw new ImageGenerationContentPolicyError(modelIdOf(model), `Blocked: ${reason}`);\n }\n\n // Find the inline image part\n const candidateParts = response.candidates[0]?.content?.parts ?? [];\n const imagePart = candidateParts.find(\n (p: any) => p.inlineData && p.inlineData.mimeType && p.inlineData.data\n ) as { inlineData: { mimeType: string; data: string } } | undefined;\n\n if (!imagePart) {\n throw new ImageGenerationProviderError(\n modelIdOf(model),\n \"No image part in response (Gemini did not return an inline image)\"\n );\n }\n\n const image = await decodeInlineImage(imagePart.inlineData.mimeType, imagePart.inlineData.data);\n update_progress(100, \"Completed Gemini image generation\");\n logger.timeEnd(timer, { model: modelIdOf(model) });\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|blocked|SAFETY|PROHIBITED/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 * One-shot stream wrapper. Gemini's @google/generative-ai SDK does not support\n * partial image streaming, so we call the non-streaming run function, yield one\n * snapshot, then finish.\n */\nexport const Gemini_ImageGenerate_Stream: AiProviderStreamFn<\n ImageGenerateTaskInput,\n ImageGenerateTaskOutput,\n GeminiModelConfig\n> = async function* (input, model, signal): AsyncIterable<StreamEvent<ImageGenerateTaskOutput>> {\n const noop = () => {};\n const result = await Gemini_ImageGenerate(input, model, noop, signal);\n yield { type: \"snapshot\", data: result } as StreamEvent<ImageGenerateTaskOutput>;\n yield { type: \"finish\", data: {} as ImageGenerateTaskOutput };\n};\n",
|
|
15
|
+
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { AiProviderRunFn, ModelInfoTaskInput, ModelInfoTaskOutput } from \"@workglow/ai\";\nimport type { GeminiModelConfig } from \"./Gemini_ModelSchema\";\n\n/** Known Gemini embedding model dimensions. */\nconst GEMINI_EMBEDDING_DIMENSIONS: Record<string, { native_dimensions: number; mrl: boolean }> = {\n \"text-embedding-004\": { native_dimensions: 768, mrl: true },\n \"embedding-001\": { native_dimensions: 768, mrl: false },\n};\n\nexport const Gemini_ModelInfo: AiProviderRunFn<\n ModelInfoTaskInput,\n ModelInfoTaskOutput,\n GeminiModelConfig\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 if (native_dimensions === undefined) {\n const modelName = (pc?.model_name as string) ?? \"\";\n const known = GEMINI_EMBEDDING_DIMENSIONS[modelName];\n if (known) {\n native_dimensions = known.native_dimensions;\n mrl = mrl ?? known.mrl;\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 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",
|
|
16
|
+
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {\n AiProviderRunFn,\n AiProviderStreamFn,\n StructuredGenerationTaskInput,\n StructuredGenerationTaskOutput,\n} from \"@workglow/ai\";\nimport type { StreamEvent } from \"@workglow/task-graph\";\nimport { parsePartialJson } from \"@workglow/util/worker\";\nimport type { GeminiModelConfig } from \"./Gemini_ModelSchema\";\nimport { getApiKey, getModelName, loadGeminiSDK } from \"./Gemini_Client\";\nimport { sanitizeSchemaForGemini } from \"./Gemini_Schema\";\n\nexport const Gemini_StructuredGeneration: AiProviderRunFn<\n StructuredGenerationTaskInput,\n StructuredGenerationTaskOutput,\n GeminiModelConfig\n> = async (input, model, update_progress, signal, outputSchema) => {\n update_progress(0, \"Starting Gemini structured generation\");\n const GoogleGenerativeAI = await loadGeminiSDK();\n const genAI = new GoogleGenerativeAI(getApiKey(model));\n\n const schema = input.outputSchema ?? outputSchema;\n\n const sanitizedSchema = sanitizeSchemaForGemini(schema as Record<string, unknown>);\n\n const genModel = genAI.getGenerativeModel({\n model: getModelName(model),\n generationConfig: {\n responseMimeType: \"application/json\",\n responseSchema: sanitizedSchema as any,\n maxOutputTokens: input.maxTokens,\n temperature: input.temperature,\n },\n });\n\n const result = await genModel.generateContent({\n contents: [{ role: \"user\", parts: [{ text: input.prompt as string }] }],\n });\n\n const text = result.response.text();\n update_progress(100, \"Completed Gemini structured generation\");\n return { object: JSON.parse(text) };\n};\n\nexport const Gemini_StructuredGeneration_Stream: AiProviderStreamFn<\n StructuredGenerationTaskInput,\n StructuredGenerationTaskOutput,\n GeminiModelConfig\n> = async function* (\n input,\n model,\n signal,\n outputSchema\n): AsyncIterable<StreamEvent<StructuredGenerationTaskOutput>> {\n const GoogleGenerativeAI = await loadGeminiSDK();\n const genAI = new GoogleGenerativeAI(getApiKey(model));\n\n const schema = input.outputSchema ?? outputSchema;\n\n const sanitizedSchema = sanitizeSchemaForGemini(schema as Record<string, unknown>);\n\n const genModel = genAI.getGenerativeModel({\n model: getModelName(model),\n generationConfig: {\n responseMimeType: \"application/json\",\n responseSchema: sanitizedSchema as any,\n maxOutputTokens: input.maxTokens,\n temperature: input.temperature,\n },\n });\n\n const result = await genModel.generateContentStream(\n { contents: [{ role: \"user\", parts: [{ text: input.prompt as string }] }] },\n { signal }\n );\n\n let accumulatedJson = \"\";\n for await (const chunk of result.stream) {\n const text = chunk.text();\n if (text) {\n accumulatedJson += text;\n const partial = parsePartialJson(accumulatedJson);\n if (partial !== undefined) {\n yield { type: \"object-delta\", port: \"object\", objectDelta: partial };\n }\n }\n }\n\n let finalObject: Record<string, unknown>;\n try {\n finalObject = JSON.parse(accumulatedJson);\n } catch {\n finalObject = parsePartialJson(accumulatedJson) ?? {};\n }\n yield { type: \"finish\", data: { object: finalObject } as StructuredGenerationTaskOutput };\n};\n",
|
|
17
|
+
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { TaskType } from \"@google/generative-ai\";\nimport type {\n AiProviderRunFn,\n TextEmbeddingTaskInput,\n TextEmbeddingTaskOutput,\n} from \"@workglow/ai\";\nimport { getLogger } from \"@workglow/util/worker\";\nimport type { GeminiModelConfig } from \"./Gemini_ModelSchema\";\nimport { getApiKey, getModelName, loadGeminiSDK } from \"./Gemini_Client\";\n\nexport const Gemini_TextEmbedding: AiProviderRunFn<\n TextEmbeddingTaskInput,\n TextEmbeddingTaskOutput,\n GeminiModelConfig\n> = async (input, model, update_progress, signal) => {\n const logger = getLogger();\n const timerLabel = `gemini:TextEmbedding:${model?.provider_config?.model_name}`;\n logger.time(timerLabel, { model: model?.provider_config?.model_name });\n\n update_progress(0, \"Starting Gemini text embedding\");\n const GoogleGenerativeAI = await loadGeminiSDK();\n const genAI = new GoogleGenerativeAI(getApiKey(model));\n const embeddingModel = genAI.getGenerativeModel({\n model: getModelName(model),\n });\n\n const taskType =\n (model?.provider_config?.embedding_task_type as TaskType) || (\"RETRIEVAL_DOCUMENT\" as TaskType);\n\n if (Array.isArray(input.text)) {\n const result = await embeddingModel.batchEmbedContents({\n requests: input.text.map((t) => ({\n content: { role: \"user\", parts: [{ text: t }] },\n taskType,\n })),\n });\n update_progress(100, \"Completed Gemini text embedding\");\n logger.timeEnd(timerLabel, { model: model?.provider_config?.model_name, batch: true });\n return {\n vector: result.embeddings.map((e) => new Float32Array(e.values)),\n };\n }\n\n const result = await embeddingModel.embedContent({\n content: { role: \"user\", parts: [{ text: input.text as string }] },\n taskType,\n });\n\n update_progress(100, \"Completed Gemini text embedding\");\n logger.timeEnd(timerLabel, { model: model?.provider_config?.model_name });\n return { vector: new Float32Array(result.embedding.values) };\n};\n",
|
|
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 TextGenerationTaskInput,\n TextGenerationTaskOutput,\n} from \"@workglow/ai\";\nimport type { StreamEvent } from \"@workglow/task-graph\";\nimport { getLogger } from \"@workglow/util/worker\";\nimport type { GeminiModelConfig } from \"./Gemini_ModelSchema\";\nimport { getApiKey, getModelName, loadGeminiSDK } from \"./Gemini_Client\";\n\nexport const Gemini_TextGeneration: AiProviderRunFn<\n TextGenerationTaskInput,\n TextGenerationTaskOutput,\n GeminiModelConfig\n> = async (input, model, update_progress, signal) => {\n signal?.throwIfAborted?.();\n const logger = getLogger();\n const timerLabel = `gemini:TextGeneration:${model?.provider_config?.model_name}`;\n logger.time(timerLabel, { model: model?.provider_config?.model_name });\n\n update_progress(0, \"Starting Gemini text generation\");\n const GoogleGenerativeAI = await loadGeminiSDK();\n const genAI = new GoogleGenerativeAI(getApiKey(model));\n const genModel = genAI.getGenerativeModel({\n model: getModelName(model),\n generationConfig: {\n maxOutputTokens: input.maxTokens,\n temperature: input.temperature,\n topP: input.topP,\n },\n });\n\n const result = await genModel.generateContent(\n {\n contents: [{ role: \"user\", parts: [{ text: input.prompt }] }],\n },\n { signal }\n );\n\n const text = result.response.text();\n update_progress(100, \"Completed Gemini text generation\");\n logger.timeEnd(timerLabel, { model: model?.provider_config?.model_name });\n return { text };\n};\n\nexport const Gemini_TextGeneration_Stream: AiProviderStreamFn<\n TextGenerationTaskInput,\n TextGenerationTaskOutput,\n GeminiModelConfig\n> = async function* (input, model, signal): AsyncIterable<StreamEvent<TextGenerationTaskOutput>> {\n signal?.throwIfAborted?.();\n const GoogleGenerativeAI = await loadGeminiSDK();\n const genAI = new GoogleGenerativeAI(getApiKey(model));\n const genModel = genAI.getGenerativeModel({\n model: getModelName(model),\n generationConfig: {\n maxOutputTokens: input.maxTokens,\n temperature: input.temperature,\n topP: input.topP,\n },\n });\n\n const result = await genModel.generateContentStream(\n { contents: [{ role: \"user\", parts: [{ text: input.prompt }] }] },\n { signal }\n );\n\n for await (const chunk of result.stream) {\n const text = chunk.text();\n if (text) {\n yield { type: \"text-delta\", port: \"text\", textDelta: text };\n }\n }\n yield { type: \"finish\", data: {} as TextGenerationTaskOutput };\n};\n",
|
|
19
|
+
"/**\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 { GeminiModelConfig } from \"./Gemini_ModelSchema\";\nimport { getApiKey, getModelName, loadGeminiSDK } from \"./Gemini_Client\";\n\nexport const Gemini_TextRewriter: AiProviderRunFn<\n TextRewriterTaskInput,\n TextRewriterTaskOutput,\n GeminiModelConfig\n> = async (input, model, update_progress, signal) => {\n update_progress(0, \"Starting Gemini text rewriting\");\n const GoogleGenerativeAI = await loadGeminiSDK();\n const genAI = new GoogleGenerativeAI(getApiKey(model));\n const genModel = genAI.getGenerativeModel({\n model: getModelName(model),\n systemInstruction: input.prompt,\n });\n\n const result = await genModel.generateContent({\n contents: [{ role: \"user\", parts: [{ text: input.text }] }],\n });\n\n const text = result.response.text();\n update_progress(100, \"Completed Gemini text rewriting\");\n return { text };\n};\n\nexport const Gemini_TextRewriter_Stream: AiProviderStreamFn<\n TextRewriterTaskInput,\n TextRewriterTaskOutput,\n GeminiModelConfig\n> = async function* (input, model, signal): AsyncIterable<StreamEvent<TextRewriterTaskOutput>> {\n const GoogleGenerativeAI = await loadGeminiSDK();\n const genAI = new GoogleGenerativeAI(getApiKey(model));\n const genModel = genAI.getGenerativeModel({\n model: getModelName(model),\n systemInstruction: input.prompt,\n });\n\n const result = await genModel.generateContentStream(\n { contents: [{ role: \"user\", parts: [{ text: input.text }] }] },\n { signal }\n );\n\n for await (const chunk of result.stream) {\n const text = chunk.text();\n if (text) {\n yield { type: \"text-delta\", port: \"text\", textDelta: text };\n }\n }\n yield { type: \"finish\", data: {} as TextRewriterTaskOutput };\n};\n",
|
|
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 AiProviderStreamFn,\n TextSummaryTaskInput,\n TextSummaryTaskOutput,\n} from \"@workglow/ai\";\nimport type { StreamEvent } from \"@workglow/task-graph\";\nimport type { GeminiModelConfig } from \"./Gemini_ModelSchema\";\nimport { getApiKey, getModelName, loadGeminiSDK } from \"./Gemini_Client\";\n\nexport const Gemini_TextSummary: AiProviderRunFn<\n TextSummaryTaskInput,\n TextSummaryTaskOutput,\n GeminiModelConfig\n> = async (input, model, update_progress, signal) => {\n update_progress(0, \"Starting Gemini text summarization\");\n const GoogleGenerativeAI = await loadGeminiSDK();\n const genAI = new GoogleGenerativeAI(getApiKey(model));\n const genModel = genAI.getGenerativeModel({\n model: getModelName(model),\n systemInstruction: \"Summarize the following text concisely.\",\n });\n\n const result = await genModel.generateContent({\n contents: [{ role: \"user\", parts: [{ text: input.text }] }],\n });\n\n const text = result.response.text();\n update_progress(100, \"Completed Gemini text summarization\");\n return { text };\n};\n\nexport const Gemini_TextSummary_Stream: AiProviderStreamFn<\n TextSummaryTaskInput,\n TextSummaryTaskOutput,\n GeminiModelConfig\n> = async function* (input, model, signal): AsyncIterable<StreamEvent<TextSummaryTaskOutput>> {\n const GoogleGenerativeAI = await loadGeminiSDK();\n const genAI = new GoogleGenerativeAI(getApiKey(model));\n const genModel = genAI.getGenerativeModel({\n model: getModelName(model),\n systemInstruction: \"Summarize the following text concisely.\",\n });\n\n const result = await genModel.generateContentStream(\n { contents: [{ role: \"user\", parts: [{ text: input.text }] }] },\n { signal }\n );\n\n for await (const chunk of result.stream) {\n const text = chunk.text();\n if (text) {\n yield { type: \"text-delta\", port: \"text\", textDelta: text };\n }\n }\n yield { type: \"finish\", data: {} as TextSummaryTaskOutput };\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, AiProviderRunFn, AiProviderStreamFn } from \"@workglow/ai\";\nimport type { GeminiModelConfig } from \"./Gemini_ModelSchema\";\nimport { Gemini_ModelSearch } from \"./Gemini_ModelSearch\";\n\nexport { loadGeminiSDK, getApiKey, getModelName } from \"./Gemini_Client\";\nexport { sanitizeSchemaForGemini } from \"./Gemini_Schema\";\n\nimport { Gemini_Chat, Gemini_Chat_Stream } from \"./Gemini_Chat\";\nimport { Gemini_CountTokens, Gemini_CountTokens_Preview } from \"./Gemini_CountTokens\";\nimport { Gemini_ImageEdit, Gemini_ImageEdit_Stream } from \"./Gemini_ImageEdit\";\nimport { Gemini_ImageGenerate, Gemini_ImageGenerate_Stream } from \"./Gemini_ImageGenerate\";\nimport { Gemini_ModelInfo } from \"./Gemini_ModelInfo\";\nimport {\n Gemini_StructuredGeneration,\n Gemini_StructuredGeneration_Stream,\n} from \"./Gemini_StructuredGeneration\";\nimport { Gemini_TextEmbedding } from \"./Gemini_TextEmbedding\";\nimport { Gemini_TextGeneration, Gemini_TextGeneration_Stream } from \"./Gemini_TextGeneration\";\nimport { Gemini_TextRewriter, Gemini_TextRewriter_Stream } from \"./Gemini_TextRewriter\";\nimport { Gemini_TextSummary, Gemini_TextSummary_Stream } from \"./Gemini_TextSummary\";\nimport { Gemini_ToolCalling, Gemini_ToolCalling_Stream } from \"./Gemini_ToolCalling\";\n\nexport const GEMINI_TASKS: Record<string, AiProviderRunFn<any, any, GeminiModelConfig>> = {\n AiChatTask: Gemini_Chat,\n CountTokensTask: Gemini_CountTokens,\n ModelInfoTask: Gemini_ModelInfo,\n TextGenerationTask: Gemini_TextGeneration,\n TextEmbeddingTask: Gemini_TextEmbedding,\n TextRewriterTask: Gemini_TextRewriter,\n TextSummaryTask: Gemini_TextSummary,\n StructuredGenerationTask: Gemini_StructuredGeneration,\n ToolCallingTask: Gemini_ToolCalling,\n ModelSearchTask: Gemini_ModelSearch,\n ImageGenerateTask: Gemini_ImageGenerate,\n ImageEditTask: Gemini_ImageEdit,\n};\n\nexport const GEMINI_STREAM_TASKS: Record<\n string,\n AiProviderStreamFn<any, any, GeminiModelConfig>\n> = {\n AiChatTask: Gemini_Chat_Stream,\n TextGenerationTask: Gemini_TextGeneration_Stream,\n TextRewriterTask: Gemini_TextRewriter_Stream,\n TextSummaryTask: Gemini_TextSummary_Stream,\n StructuredGenerationTask: Gemini_StructuredGeneration_Stream,\n ToolCallingTask: Gemini_ToolCalling_Stream,\n ImageGenerateTask: Gemini_ImageGenerate_Stream,\n ImageEditTask: Gemini_ImageEdit_Stream,\n};\n\nexport const GEMINI_PREVIEW_TASKS: Record<\n string,\n AiProviderPreviewRunFn<any, any, GeminiModelConfig>\n> = {\n CountTokensTask: Gemini_CountTokens_Preview,\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\";\nimport { createCloudProviderClass } from \"@workglow/ai/provider-utils\";\nimport { GOOGLE_GEMINI } from \"./common/Gemini_Constants\";\nimport type { GeminiModelConfig } from \"./common/Gemini_ModelSchema\";\n\nconst GEMINI_TASK_TYPES = [\n \"CountTokensTask\",\n \"ModelInfoTask\",\n \"TextGenerationTask\",\n \"TextEmbeddingTask\",\n \"TextRewriterTask\",\n \"TextSummaryTask\",\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 GoogleGeminiQueuedProvider extends createCloudProviderClass<\n GeminiModelConfig,\n typeof GEMINI_TASK_TYPES\n>(AiProvider, {\n name: GOOGLE_GEMINI,\n displayName: \"Google Gemini\",\n taskTypes: GEMINI_TASK_TYPES,\n}) {}\n",
|
|
23
|
+
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { AiImageOutputTask, ProviderUnsupportedFeatureError } from \"@workglow/ai\";\nimport type { ModelConfig } from \"@workglow/ai\";\n\nimport { GOOGLE_GEMINI } from \"./Gemini_Constants\";\n\n/**\n * Registers the Gemini 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 * - ImageEditTask + non-null mask → throws (Gemini does not support mask-based inpainting).\n */\nexport function registerGeminiImageValidator(): void {\n AiImageOutputTask.registerProviderImageValidator(\n GOOGLE_GEMINI,\n (taskType, input, model: ModelConfig) => {\n if (taskType !== \"ImageEditTask\") return;\n if (input[\"mask\"] !== undefined && input[\"mask\"] !== null) {\n throw new ProviderUnsupportedFeatureError(\n \"mask\",\n model.model_id ?? \"gemini\",\n \"Gemini does not support mask-based inpainting; remove the mask or use OpenAI gpt-image-2\"\n );\n }\n }\n );\n}\n",
|
|
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 { GEMINI_PREVIEW_TASKS, GEMINI_STREAM_TASKS, GEMINI_TASKS } from \"./common/Gemini_JobRunFns\";\nimport { GoogleGeminiProvider } from \"./GoogleGeminiProvider\";\n\nexport async function registerGeminiWorker(): Promise<void> {\n await registerProviderWorker(\n (ws) =>\n new GoogleGeminiProvider(\n GEMINI_TASKS,\n GEMINI_STREAM_TASKS,\n GEMINI_PREVIEW_TASKS\n ).registerOnWorkerServer(ws),\n \"Google Gemini\"\n );\n}\n",
|
|
25
|
+
"/**\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-utils\";\nimport { GOOGLE_GEMINI } from \"./common/Gemini_Constants\";\nimport type { GeminiModelConfig } from \"./common/Gemini_ModelSchema\";\n\nconst GEMINI_TASK_TYPES = [\n \"CountTokensTask\",\n \"ModelInfoTask\",\n \"TextGenerationTask\",\n \"TextEmbeddingTask\",\n \"TextRewriterTask\",\n \"TextSummaryTask\",\n \"StructuredGenerationTask\",\n \"ToolCallingTask\",\n \"ModelSearchTask\",\n \"ImageGenerateTask\",\n \"ImageEditTask\",\n] as const;\n\n/**\n * Worker-server registration for Google Gemini cloud models. Imports\n * `AiProvider` from `@workglow/ai/worker` so the SDK is only loaded in the\n * worker.\n */\nexport class GoogleGeminiProvider extends createCloudProviderClass<\n GeminiModelConfig,\n typeof GEMINI_TASK_TYPES\n>(AiProvider, {\n name: GOOGLE_GEMINI,\n displayName: \"Google Gemini\",\n taskTypes: GEMINI_TASK_TYPES,\n}) {}\n"
|
|
26
|
+
],
|
|
27
|
+
"mappings": "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",
|
|
28
|
+
"debugId": "D11D66D2FAE6785964756E2164756E21",
|
|
29
|
+
"names": []
|
|
30
|
+
}
|
package/dist/ai.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai.d.ts","sourceRoot":"","sources":["../src/ai.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,YAAY,CAAC"}
|
|
@@ -1,7 +1,15 @@
|
|
|
1
|
-
|
|
1
|
+
var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
|
|
2
|
+
get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
|
|
3
|
+
}) : x)(function(x) {
|
|
4
|
+
if (typeof require !== "undefined")
|
|
5
|
+
return require.apply(this, arguments);
|
|
6
|
+
throw Error('Dynamic require of "' + x + '" is not supported');
|
|
7
|
+
});
|
|
8
|
+
|
|
9
|
+
// src/ai/common/Gemini_Constants.ts
|
|
2
10
|
var GOOGLE_GEMINI = "GOOGLE_GEMINI";
|
|
3
11
|
|
|
4
|
-
// src/ai
|
|
12
|
+
// src/ai/common/Gemini_ImageValidation.ts
|
|
5
13
|
import { AiImageOutputTask, ProviderUnsupportedFeatureError } from "@workglow/ai";
|
|
6
14
|
function registerGeminiImageValidator() {
|
|
7
15
|
AiImageOutputTask.registerProviderImageValidator(GOOGLE_GEMINI, (taskType, input, model) => {
|
|
@@ -13,7 +21,7 @@ function registerGeminiImageValidator() {
|
|
|
13
21
|
});
|
|
14
22
|
}
|
|
15
23
|
|
|
16
|
-
// src/ai
|
|
24
|
+
// src/ai/common/Gemini_ModelSchema.ts
|
|
17
25
|
import { ModelConfigSchema, ModelRecordSchema } from "@workglow/ai/worker";
|
|
18
26
|
var GeminiModelSchema = {
|
|
19
27
|
type: "object",
|
|
@@ -80,8 +88,8 @@ var GeminiModelConfigSchema = {
|
|
|
80
88
|
additionalProperties: false
|
|
81
89
|
};
|
|
82
90
|
|
|
83
|
-
// src/ai
|
|
84
|
-
import { normalizedModelSearchQuery } from "@workglow/ai-
|
|
91
|
+
// src/ai/common/Gemini_ModelSearch.ts
|
|
92
|
+
import { normalizedModelSearchQuery } from "@workglow/ai/provider-utils";
|
|
85
93
|
var GEMINI_MODELS = [
|
|
86
94
|
{ label: "gemini-3.1-pro-preview", value: "gemini-3.1-pro-preview" },
|
|
87
95
|
{ label: "gemini-3-flash-preview", value: "gemini-3-flash-preview" },
|
|
@@ -179,12 +187,12 @@ var Gemini_ModelSearch = async (input, _model, _onProgress, signal) => {
|
|
|
179
187
|
return { results };
|
|
180
188
|
};
|
|
181
189
|
|
|
182
|
-
// src/ai
|
|
183
|
-
import { registerProviderWithWorker } from "@workglow/ai-
|
|
190
|
+
// src/ai/registerGemini.ts
|
|
191
|
+
import { registerProviderWithWorker } from "@workglow/ai/provider-utils";
|
|
184
192
|
|
|
185
|
-
// src/ai
|
|
193
|
+
// src/ai/GoogleGeminiQueuedProvider.ts
|
|
186
194
|
import { AiProvider } from "@workglow/ai";
|
|
187
|
-
import { createCloudProviderClass } from "@workglow/ai-
|
|
195
|
+
import { createCloudProviderClass } from "@workglow/ai/provider-utils";
|
|
188
196
|
var GEMINI_TASK_TYPES = [
|
|
189
197
|
"CountTokensTask",
|
|
190
198
|
"ModelInfoTask",
|
|
@@ -206,7 +214,7 @@ class GoogleGeminiQueuedProvider extends createCloudProviderClass(AiProvider, {
|
|
|
206
214
|
}) {
|
|
207
215
|
}
|
|
208
216
|
|
|
209
|
-
// src/ai
|
|
217
|
+
// src/ai/registerGemini.ts
|
|
210
218
|
async function registerGemini(options) {
|
|
211
219
|
registerGeminiImageValidator();
|
|
212
220
|
await registerProviderWithWorker(new GoogleGeminiQueuedProvider, "Google Gemini", options);
|
|
@@ -221,4 +229,4 @@ export {
|
|
|
221
229
|
GOOGLE_GEMINI
|
|
222
230
|
};
|
|
223
231
|
|
|
224
|
-
//# debugId=
|
|
232
|
+
//# debugId=84E9A60003FFA1DA64756E2164756E21
|
package/dist/ai.js.map
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/ai/common/Gemini_Constants.ts", "../src/ai/common/Gemini_ImageValidation.ts", "../src/ai/common/Gemini_ModelSchema.ts", "../src/ai/common/Gemini_ModelSearch.ts", "../src/ai/registerGemini.ts", "../src/ai/GoogleGeminiQueuedProvider.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nexport const GOOGLE_GEMINI = \"GOOGLE_GEMINI\";\n",
|
|
6
|
+
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { AiImageOutputTask, ProviderUnsupportedFeatureError } from \"@workglow/ai\";\nimport type { ModelConfig } from \"@workglow/ai\";\n\nimport { GOOGLE_GEMINI } from \"./Gemini_Constants\";\n\n/**\n * Registers the Gemini 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 * - ImageEditTask + non-null mask → throws (Gemini does not support mask-based inpainting).\n */\nexport function registerGeminiImageValidator(): void {\n AiImageOutputTask.registerProviderImageValidator(\n GOOGLE_GEMINI,\n (taskType, input, model: ModelConfig) => {\n if (taskType !== \"ImageEditTask\") return;\n if (input[\"mask\"] !== undefined && input[\"mask\"] !== null) {\n throw new ProviderUnsupportedFeatureError(\n \"mask\",\n model.model_id ?? \"gemini\",\n \"Gemini does not support mask-based inpainting; remove the mask or use OpenAI gpt-image-2\"\n );\n }\n }\n );\n}\n",
|
|
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 { GOOGLE_GEMINI } from \"./Gemini_Constants\";\n\nexport const GeminiModelSchema = {\n type: \"object\",\n properties: {\n provider: {\n const: GOOGLE_GEMINI,\n description: \"Discriminator: Google Gemini cloud provider.\",\n },\n provider_config: {\n type: \"object\",\n description: \"Google Gemini-specific configuration.\",\n properties: {\n model_name: {\n type: \"string\",\n description:\n \"The Gemini model identifier (e.g., 'gemini-2.0-flash', 'text-embedding-004').\",\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 embedding_task_type: {\n oneOf: [\n { type: \"null\" },\n {\n type: \"string\",\n enum: [\n \"RETRIEVAL_QUERY\",\n \"RETRIEVAL_DOCUMENT\",\n \"SEMANTIC_SIMILARITY\",\n \"CLASSIFICATION\",\n \"CLUSTERING\",\n ],\n },\n ],\n description: \"Task type hint for embedding models.\",\n default: null,\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 GeminiModelRecordSchema = {\n type: \"object\",\n properties: {\n ...ModelRecordSchema.properties,\n ...GeminiModelSchema.properties,\n },\n required: [...ModelRecordSchema.required, ...GeminiModelSchema.required],\n additionalProperties: false,\n} as const satisfies DataPortSchemaObject;\n\nexport type GeminiModelRecord = FromSchema<typeof GeminiModelRecordSchema>;\n\nexport const GeminiModelConfigSchema = {\n type: \"object\",\n properties: {\n ...ModelConfigSchema.properties,\n ...GeminiModelSchema.properties,\n },\n required: [...ModelConfigSchema.required, ...GeminiModelSchema.required],\n additionalProperties: false,\n} as const satisfies DataPortSchemaObject;\n\nexport type GeminiModelConfig = FromSchema<typeof GeminiModelConfigSchema>;\n",
|
|
8
|
+
"/**\n * @license\n * Copyright 2025 Steven Roussey <sroussey@gmail.com>\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {\n AiProviderRunFn,\n ModelSearchResultItem,\n ModelSearchTaskInput,\n ModelSearchTaskOutput,\n} from \"@workglow/ai\";\nimport { normalizedModelSearchQuery } from \"@workglow/ai/provider-utils\";\nimport { GOOGLE_GEMINI } from \"./Gemini_Constants\";\n\ninterface GeminiModelEntry {\n readonly label: string;\n readonly value: string;\n readonly tasks?: readonly string[];\n}\n\nconst GEMINI_MODELS: readonly GeminiModelEntry[] = [\n { label: \"gemini-3.1-pro-preview\", value: \"gemini-3.1-pro-preview\" },\n { label: \"gemini-3-flash-preview\", value: \"gemini-3-flash-preview\" },\n { label: \"gemini-3.1-flash-lite-preview\", value: \"gemini-3.1-flash-lite-preview\" },\n { label: \"gemini-2.5-flash\", value: \"gemini-2.5-flash\" },\n { label: \"gemini-2.5-pro\", value: \"gemini-2.5-pro\" },\n // Embedding models\n {\n label: \"gemini-embedding-2\",\n value: \"gemini-embedding-2\",\n tasks: [\"TextEmbeddingTask\"],\n },\n {\n label: \"gemini-embedding-001\",\n value: \"gemini-embedding-001\",\n tasks: [\"TextEmbeddingTask\"],\n },\n // Image-output models\n {\n label: \"gemini-3.1-flash-image-preview\",\n value: \"gemini-3.1-flash-image-preview\",\n tasks: [\"ImageGenerateTask\", \"ImageEditTask\"],\n },\n {\n label: \"gemini-3-pro-image-preview\",\n value: \"gemini-3-pro-image-preview\",\n tasks: [\"ImageGenerateTask\", \"ImageEditTask\"],\n },\n {\n label: \"imagen-4.0-generate-001\",\n value: \"imagen-4.0-generate-001\",\n tasks: [\"ImageGenerateTask\"],\n },\n];\n\ninterface GeminiApiModel {\n readonly name: string;\n readonly displayName?: string;\n readonly description?: string;\n readonly supportedGenerationMethods?: readonly string[];\n}\n\nfunction tasksForGeminiApiModel(model: GeminiApiModel, id: string): string[] {\n const staticEntry = GEMINI_MODELS.find((m) => m.value === id);\n if (staticEntry?.tasks) return [...staticEntry.tasks];\n\n const methods = model.supportedGenerationMethods ?? [];\n if (methods.some((method) => method.toLowerCase().includes(\"embed\"))) {\n return [\"TextEmbeddingTask\"];\n }\n return [];\n}\n\nfunction mapGeminiModel(model: GeminiApiModel): ModelSearchResultItem {\n const id = model.name.startsWith(\"models/\") ? model.name.slice(\"models/\".length) : model.name;\n const title = model.displayName || id;\n return {\n id,\n label: title,\n description: model.displayName ? id : (model.description ?? \"\"),\n record: {\n model_id: id,\n provider: GOOGLE_GEMINI,\n title,\n description: model.description ?? \"\",\n tasks: tasksForGeminiApiModel(model, id),\n provider_config: { model_name: id },\n metadata: {},\n },\n raw: model,\n };\n}\n\nasync function listGeminiModels(\n credentialKey: string,\n signal?: AbortSignal\n): Promise<ModelSearchResultItem[]> {\n const params = new URLSearchParams({ key: credentialKey });\n const response = await fetch(\n `https://generativelanguage.googleapis.com/v1beta/models?${params}`,\n {\n signal,\n }\n );\n if (!response.ok) throw new Error(`Gemini API returned ${response.status}`);\n const body = (await response.json()) as { models?: GeminiApiModel[] };\n return (body.models ?? []).map(mapGeminiModel);\n}\n\nexport const Gemini_ModelSearch: AiProviderRunFn<\n ModelSearchTaskInput,\n ModelSearchTaskOutput\n> = async (input, _model, _onProgress, signal) => {\n const q = normalizedModelSearchQuery(input.query);\n if (input.credential_key) {\n const models = await listGeminiModels(input.credential_key, signal);\n const results = q\n ? models.filter((m) => m.id.toLowerCase().includes(q) || m.label.toLowerCase().includes(q))\n : models;\n return { results };\n }\n\n const filtered = q\n ? GEMINI_MODELS.filter(\n (m) => m.value.toLowerCase().includes(q) || m.label.toLowerCase().includes(q)\n )\n : GEMINI_MODELS;\n const results: ModelSearchResultItem[] = filtered.map((m) => ({\n id: m.value,\n label: m.label,\n description: \"\",\n record: {\n model_id: m.value,\n provider: GOOGLE_GEMINI,\n title: m.value,\n description: \"\",\n tasks: m.tasks ? [...m.tasks] : [],\n provider_config: { model_name: m.value },\n metadata: {},\n },\n raw: m,\n }));\n return { results };\n};\n",
|
|
9
|
+
"/**\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 { GoogleGeminiQueuedProvider } from \"./GoogleGeminiQueuedProvider\";\nimport { registerGeminiImageValidator } from \"./common/Gemini_ImageValidation\";\n\nexport async function registerGemini(\n options: AiProviderRegisterOptions & {\n worker: Worker | (() => Worker);\n }\n): Promise<void> {\n registerGeminiImageValidator();\n await registerProviderWithWorker(new GoogleGeminiQueuedProvider(), \"Google Gemini\", options);\n}\n",
|
|
10
|
+
"/**\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-utils\";\nimport { GOOGLE_GEMINI } from \"./common/Gemini_Constants\";\nimport type { GeminiModelConfig } from \"./common/Gemini_ModelSchema\";\n\nconst GEMINI_TASK_TYPES = [\n \"CountTokensTask\",\n \"ModelInfoTask\",\n \"TextGenerationTask\",\n \"TextEmbeddingTask\",\n \"TextRewriterTask\",\n \"TextSummaryTask\",\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 GoogleGeminiQueuedProvider extends createCloudProviderClass<\n GeminiModelConfig,\n typeof GEMINI_TASK_TYPES\n>(AiProvider, {\n name: GOOGLE_GEMINI,\n displayName: \"Google Gemini\",\n taskTypes: GEMINI_TASK_TYPES,\n}) {}\n"
|
|
11
|
+
],
|
|
12
|
+
"mappings": "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",
|
|
13
|
+
"debugId": "84E9A60003FFA1DA64756E2164756E21",
|
|
14
|
+
"names": []
|
|
15
|
+
}
|
package/package.json
CHANGED
|
@@ -2,53 +2,49 @@
|
|
|
2
2
|
"name": "@workglow/google-gemini",
|
|
3
3
|
"type": "module",
|
|
4
4
|
"sideEffects": false,
|
|
5
|
-
"version": "0.2.
|
|
5
|
+
"version": "0.2.33",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|
|
8
|
-
"url": "https://github.com/workglow-dev/
|
|
8
|
+
"url": "https://github.com/workglow-dev/libs.git",
|
|
9
9
|
"directory": "packages/google-gemini"
|
|
10
10
|
},
|
|
11
|
-
"description": "Google Gemini provider for @workglow/ai
|
|
11
|
+
"description": "Google Gemini provider for @workglow/ai.",
|
|
12
12
|
"scripts": {
|
|
13
13
|
"watch": "concurrently -c 'auto' 'bun:watch-*'",
|
|
14
|
-
"watch-code": "bun build --watch --no-clear-screen --sourcemap=external --packages=external --root ./src --outdir ./dist ./src/ai
|
|
14
|
+
"watch-code": "bun build --watch --no-clear-screen --sourcemap=external --packages=external --root ./src --outdir ./dist ./src/ai.ts ./src/ai-runtime.ts",
|
|
15
15
|
"watch-types": "tsc --watch --preserveWatchOutput",
|
|
16
16
|
"build-package": "concurrently -c 'auto' -n 'code,types' 'bun run build-code' 'bun run build-types'",
|
|
17
17
|
"build-js": "bun run build-code",
|
|
18
18
|
"build-clean": "rm -fr dist/* tsconfig.tsbuildinfo",
|
|
19
|
-
"build-code": "bun build --sourcemap=external --packages=external --root ./src --outdir ./dist ./src/ai
|
|
19
|
+
"build-code": "bun build --sourcemap=external --packages=external --root ./src --outdir ./dist ./src/ai.ts ./src/ai-runtime.ts",
|
|
20
20
|
"build-types": "rm -f tsconfig.tsbuildinfo && tsgo",
|
|
21
21
|
"lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0",
|
|
22
22
|
"test": "bun test"
|
|
23
23
|
},
|
|
24
24
|
"exports": {
|
|
25
|
-
"./ai
|
|
26
|
-
"types": "./dist/ai
|
|
27
|
-
"import": "./dist/ai
|
|
25
|
+
"./ai": {
|
|
26
|
+
"types": "./dist/ai.d.ts",
|
|
27
|
+
"import": "./dist/ai.js"
|
|
28
28
|
},
|
|
29
|
-
"./ai-
|
|
30
|
-
"types": "./dist/ai-
|
|
31
|
-
"import": "./dist/ai-
|
|
29
|
+
"./ai-runtime": {
|
|
30
|
+
"types": "./dist/ai-runtime.d.ts",
|
|
31
|
+
"import": "./dist/ai-runtime.js"
|
|
32
32
|
}
|
|
33
33
|
},
|
|
34
34
|
"dependencies": {
|
|
35
35
|
"@google/generative-ai": "^0.24.1"
|
|
36
36
|
},
|
|
37
37
|
"peerDependencies": {
|
|
38
|
-
"@workglow/ai": "0.2.
|
|
39
|
-
"@workglow/
|
|
40
|
-
"@workglow/
|
|
41
|
-
"@workglow/
|
|
42
|
-
"@workglow/
|
|
43
|
-
"@workglow/util": "0.2.31"
|
|
38
|
+
"@workglow/ai": "0.2.33",
|
|
39
|
+
"@workglow/job-queue": "0.2.33",
|
|
40
|
+
"@workglow/storage": "0.2.33",
|
|
41
|
+
"@workglow/task-graph": "0.2.33",
|
|
42
|
+
"@workglow/util": "0.2.33"
|
|
44
43
|
},
|
|
45
44
|
"peerDependenciesMeta": {
|
|
46
45
|
"@workglow/ai": {
|
|
47
46
|
"optional": false
|
|
48
47
|
},
|
|
49
|
-
"@workglow/ai-provider": {
|
|
50
|
-
"optional": false
|
|
51
|
-
},
|
|
52
48
|
"@workglow/job-queue": {
|
|
53
49
|
"optional": false
|
|
54
50
|
},
|
|
@@ -63,12 +59,11 @@
|
|
|
63
59
|
}
|
|
64
60
|
},
|
|
65
61
|
"devDependencies": {
|
|
66
|
-
"@workglow/ai": "0.2.
|
|
67
|
-
"@workglow/
|
|
68
|
-
"@workglow/
|
|
69
|
-
"@workglow/
|
|
70
|
-
"@workglow/
|
|
71
|
-
"@workglow/util": "0.2.31"
|
|
62
|
+
"@workglow/ai": "0.2.33",
|
|
63
|
+
"@workglow/job-queue": "0.2.33",
|
|
64
|
+
"@workglow/storage": "0.2.33",
|
|
65
|
+
"@workglow/task-graph": "0.2.33",
|
|
66
|
+
"@workglow/util": "0.2.33"
|
|
72
67
|
},
|
|
73
68
|
"files": [
|
|
74
69
|
"dist",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"GoogleGeminiProvider.d.ts","sourceRoot":"","sources":["../../src/ai-provider/GoogleGeminiProvider.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmBjD;;;;GAIG;AACH,qBAAa,oBAAqB,SAAQ,yBAOxC;CAAG"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"GoogleGeminiQueuedProvider.d.ts","sourceRoot":"","sources":["../../src/ai-provider/GoogleGeminiQueuedProvider.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmB1C,4FAA4F;AAC5F,qBAAa,0BAA2B,SAAQ,+BAO9C;CAAG"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Gemini_Chat.d.ts","sourceRoot":"","sources":["../../../src/ai-provider/common/Gemini_Chat.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,mBAAmB,EACnB,oBAAoB,EACpB,eAAe,EACf,kBAAkB,EACnB,MAAM,cAAc,CAAC;AAEtB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAI9D,eAAO,MAAM,WAAW,EAAE,eAAe,CACvC,mBAAmB,EACnB,oBAAoB,EACpB,iBAAiB,CAoBlB,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,kBAAkB,CACjD,mBAAmB,EACnB,oBAAoB,EACpB,iBAAiB,CAwBlB,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Gemini_Client.d.ts","sourceRoot":"","sources":["../../../src/ai-provider/common/Gemini_Client.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAI9D,wBAAsB,aAAa,uEAQlC;AASD,wBAAgB,SAAS,CAAC,KAAK,EAAE,iBAAiB,GAAG,SAAS,GAAG,MAAM,CAOtE;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,SAAS,GAAG,MAAM,CAMzE"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Gemini_Constants.d.ts","sourceRoot":"","sources":["../../../src/ai-provider/common/Gemini_Constants.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,eAAO,MAAM,aAAa,kBAAkB,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Gemini_CountTokens.d.ts","sourceRoot":"","sources":["../../../src/ai-provider/common/Gemini_CountTokens.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,sBAAsB,EACtB,eAAe,EACf,oBAAoB,EACpB,qBAAqB,EACtB,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAG9D,eAAO,MAAM,kBAAkB,EAAE,eAAe,CAC9C,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,CAOlB,CAAC;AAEF,eAAO,MAAM,0BAA0B,EAAE,sBAAsB,CAC7D,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,CAGlB,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Gemini_ImageEdit.d.ts","sourceRoot":"","sources":["../../../src/ai-provider/common/Gemini_ImageEdit.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,eAAe,EACf,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EAEpB,MAAM,cAAc,CAAC;AAQtB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AA2C9D,0BAA0B;AAC1B,eAAO,MAAM,gBAAgB,EAAE,eAAe,CAC5C,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,CAyElB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,uBAAuB,EAAE,kBAAkB,CACtD,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,CAMlB,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Gemini_ImageGenerate.d.ts","sourceRoot":"","sources":["../../../src/ai-provider/common/Gemini_ImageGenerate.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,eAAe,EACf,kBAAkB,EAClB,sBAAsB,EACtB,uBAAuB,EAExB,MAAM,cAAc,CAAC;AAOtB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAgB9D,0BAA0B;AAC1B,eAAO,MAAM,oBAAoB,EAAE,eAAe,CAChD,sBAAsB,EACtB,uBAAuB,EACvB,iBAAiB,CA6DlB,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,2BAA2B,EAAE,kBAAkB,CAC1D,sBAAsB,EACtB,uBAAuB,EACvB,iBAAiB,CAMlB,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Gemini_ImageValidation.d.ts","sourceRoot":"","sources":["../../../src/ai-provider/common/Gemini_ImageValidation.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH;;;;;;GAMG;AACH,wBAAgB,4BAA4B,IAAI,IAAI,CAcnD"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Gemini_JobRunFns.d.ts","sourceRoot":"","sources":["../../../src/ai-provider/common/Gemini_JobRunFns.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,sBAAsB,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAChG,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAG9D,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACzE,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAiB1D,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,GAAG,EAAE,GAAG,EAAE,iBAAiB,CAAC,CAarF,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,MAAM,CACtC,MAAM,EACN,kBAAkB,CAAC,GAAG,EAAE,GAAG,EAAE,iBAAiB,CAAC,CAUhD,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,MAAM,CACvC,MAAM,EACN,sBAAsB,CAAC,GAAG,EAAE,GAAG,EAAE,iBAAiB,CAAC,CAGpD,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Gemini_ModelInfo.d.ts","sourceRoot":"","sources":["../../../src/ai-provider/common/Gemini_ModelInfo.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAC7F,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAQ9D,eAAO,MAAM,gBAAgB,EAAE,eAAe,CAC5C,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,CAsClB,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Gemini_ModelSchema.d.ts","sourceRoot":"","sources":["../../../src/ai-provider/common/Gemini_ModelSchema.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAwB,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAGzE,eAAO,MAAM,iBAAiB;mBACtB,QAAQ;;;qBAGV,KAAK;qBACL,WAAW,EAAE,8CAA8C;;;2BAGrD,QAAQ;kCACD,uCAAuC;;;6BAGhD,IAAI,EAAE,QAAQ;6BACd,WAAW,EACT,+EAA+E;;;6BAGjF,IAAI,EAAE,QAAQ;6BACd,MAAM,EAAE,YAAY;6BACpB,WAAW,EAAE,yDAAyD;6BACtE,aAAa;;;;uCAIH,MAAM;;uCAEN,QAAQ;;;0CAUL,sCAAsC;;;;;;;;;;CAUpB,CAAC;AAE1C,eAAO,MAAM,uBAAuB;mBAC5B,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;qBA7CV,KAAK;qBACL,WAAW,EAAE,8CAA8C;;;2BAGrD,QAAQ;kCACD,uCAAuC;;;6BAGhD,IAAI,EAAE,QAAQ;6BACd,WAAW,EACT,+EAA+E;;;6BAGjF,IAAI,EAAE,QAAQ;6BACd,MAAM,EAAE,YAAY;6BACpB,WAAW,EAAE,yDAAyD;6BACtE,aAAa;;;;uCAIH,MAAM;;uCAEN,QAAQ;;;0CAUL,sCAAsC;;;;;;;;;;CAoBpB,CAAC;AAE1C,MAAM,MAAM,iBAAiB,GAAG,UAAU,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAE3E,eAAO,MAAM,uBAAuB;mBAC5B,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;qBAzDV,KAAK;qBACL,WAAW,EAAE,8CAA8C;;;2BAGrD,QAAQ;kCACD,uCAAuC;;;6BAGhD,IAAI,EAAE,QAAQ;6BACd,WAAW,EACT,+EAA+E;;;6BAGjF,IAAI,EAAE,QAAQ;6BACd,MAAM,EAAE,YAAY;6BACpB,WAAW,EAAE,yDAAyD;6BACtE,aAAa;;;;uCAIH,MAAM;;uCAEN,QAAQ;;;0CAUL,sCAAsC;;;;;;;;;;CAgCpB,CAAC;AAE1C,MAAM,MAAM,iBAAiB,GAAG,UAAU,CAAC,OAAO,uBAAuB,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Gemini_ModelSearch.d.ts","sourceRoot":"","sources":["../../../src/ai-provider/common/Gemini_ModelSearch.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,eAAe,EAEf,oBAAoB,EACpB,qBAAqB,EACtB,MAAM,cAAc,CAAC;AAmGtB,eAAO,MAAM,kBAAkB,EAAE,eAAe,CAC9C,oBAAoB,EACpB,qBAAqB,CAgCtB,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Gemini_Schema.d.ts","sourceRoot":"","sources":["../../../src/ai-provider/common/Gemini_Schema.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAWhG"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Gemini_StructuredGeneration.d.ts","sourceRoot":"","sources":["../../../src/ai-provider/common/Gemini_StructuredGeneration.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,eAAe,EACf,kBAAkB,EAClB,6BAA6B,EAC7B,8BAA8B,EAC/B,MAAM,cAAc,CAAC;AAGtB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAI9D,eAAO,MAAM,2BAA2B,EAAE,eAAe,CACvD,6BAA6B,EAC7B,8BAA8B,EAC9B,iBAAiB,CA2BlB,CAAC;AAEF,eAAO,MAAM,kCAAkC,EAAE,kBAAkB,CACjE,6BAA6B,EAC7B,8BAA8B,EAC9B,iBAAiB,CAgDlB,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Gemini_TextEmbedding.d.ts","sourceRoot":"","sources":["../../../src/ai-provider/common/Gemini_TextEmbedding.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EACV,eAAe,EACf,sBAAsB,EACtB,uBAAuB,EACxB,MAAM,cAAc,CAAC;AAEtB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAG9D,eAAO,MAAM,oBAAoB,EAAE,eAAe,CAChD,sBAAsB,EACtB,uBAAuB,EACvB,iBAAiB,CAsClB,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Gemini_TextGeneration.d.ts","sourceRoot":"","sources":["../../../src/ai-provider/common/Gemini_TextGeneration.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,eAAe,EACf,kBAAkB,EAClB,uBAAuB,EACvB,wBAAwB,EACzB,MAAM,cAAc,CAAC;AAGtB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAG9D,eAAO,MAAM,qBAAqB,EAAE,eAAe,CACjD,uBAAuB,EACvB,wBAAwB,EACxB,iBAAiB,CA0BlB,CAAC;AAEF,eAAO,MAAM,4BAA4B,EAAE,kBAAkB,CAC3D,uBAAuB,EACvB,wBAAwB,EACxB,iBAAiB,CAyBlB,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Gemini_TextRewriter.d.ts","sourceRoot":"","sources":["../../../src/ai-provider/common/Gemini_TextRewriter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,eAAe,EACf,kBAAkB,EAClB,qBAAqB,EACrB,sBAAsB,EACvB,MAAM,cAAc,CAAC;AAEtB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAG9D,eAAO,MAAM,mBAAmB,EAAE,eAAe,CAC/C,qBAAqB,EACrB,sBAAsB,EACtB,iBAAiB,CAiBlB,CAAC;AAEF,eAAO,MAAM,0BAA0B,EAAE,kBAAkB,CACzD,qBAAqB,EACrB,sBAAsB,EACtB,iBAAiB,CAqBlB,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Gemini_TextSummary.d.ts","sourceRoot":"","sources":["../../../src/ai-provider/common/Gemini_TextSummary.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,eAAe,EACf,kBAAkB,EAClB,oBAAoB,EACpB,qBAAqB,EACtB,MAAM,cAAc,CAAC;AAEtB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAG9D,eAAO,MAAM,kBAAkB,EAAE,eAAe,CAC9C,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,CAiBlB,CAAC;AAEF,eAAO,MAAM,yBAAyB,EAAE,kBAAkB,CACxD,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,CAqBlB,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Gemini_ToolCalling.d.ts","sourceRoot":"","sources":["../../../src/ai-provider/common/Gemini_ToolCalling.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EACV,eAAe,EACf,kBAAkB,EAClB,WAAW,EACX,oBAAoB,EACpB,qBAAqB,EAGtB,MAAM,cAAc,CAAC;AAEtB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAI9D,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,aAAa,CAAC,WAAW,CAAC,GAAG,SAAS,EAChD,MAAM,EAAE,OAAO,GACd,GAAG,EAAE,CA4DP;AAwBD,eAAO,MAAM,kBAAkB,EAAE,eAAe,CAC9C,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,CAmDlB,CAAC;AAEF,eAAO,MAAM,yBAAyB,EAAE,kBAAkB,CACxD,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,CAsDlB,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ai-provider/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,2BAA2B,CAAC;AAC1C,cAAc,iCAAiC,CAAC;AAChD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,kBAAkB,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"registerGemini.d.ts","sourceRoot":"","sources":["../../src/ai-provider/registerGemini.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AAK9D,wBAAsB,cAAc,CAClC,OAAO,EAAE,yBAAyB,GAAG;IACnC,MAAM,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,CAAC;CACjC,GACA,OAAO,CAAC,IAAI,CAAC,CAGf"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"registerGeminiInline.d.ts","sourceRoot":"","sources":["../../src/ai-provider/registerGeminiInline.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AAM9D,wBAAsB,oBAAoB,CAAC,OAAO,CAAC,EAAE,yBAAyB,GAAG,OAAO,CAAC,IAAI,CAAC,CAO7F"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"registerGeminiWorker.d.ts","sourceRoot":"","sources":["../../src/ai-provider/registerGeminiWorker.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC,CAU1D"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/ai-provider/runtime.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;;GAMG;AACH,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ai-provider-runtime.d.ts","sourceRoot":"","sources":["../src/ai-provider-runtime.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,uBAAuB,CAAC"}
|