From cdffdd2926005f6b9009d7330eb139d378db2fcb Mon Sep 17 00:00:00 2001 From: Danny Avila Date: Mon, 12 Jan 2026 09:01:23 -0500 Subject: [PATCH] =?UTF-8?q?=F0=9F=8F=9E=EF=B8=8F=20fix:=20Gemini=20Image?= =?UTF-8?q?=20Filenames=20and=20Add=20Tool=20Cache=20Safety=20(#11306)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 🔧 fix: Handle undefined tool definitions in agent and assistant creation (#11295) * Updated the tool fetching logic in createAgentHandler, createAssistant, and patchAssistant functions to use nullish coalescing, ensuring that an empty object is returned if no tools are available. This change improves robustness against undefined values in tool definitions across multiple controller files. * Adjusted the ToolService to maintain consistency in tool definition handling. * 🔧 fix: Update filename generation in createToolEndCallback function * Modified the filename generation logic to remove the tool_call_id from the filename, simplifying the naming convention for saved images. This change enhances clarity and consistency in the generated filenames. --- api/server/controllers/agents/callbacks.js | 2 +- api/server/controllers/agents/v1.js | 2 +- api/server/controllers/assistants/v1.js | 4 ++-- api/server/controllers/assistants/v2.js | 4 ++-- api/server/services/ToolService.js | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/api/server/controllers/agents/callbacks.js b/api/server/controllers/agents/callbacks.js index aee419577a..0d2a7bc317 100644 --- a/api/server/controllers/agents/callbacks.js +++ b/api/server/controllers/agents/callbacks.js @@ -408,7 +408,7 @@ function createToolEndCallback({ req, res, artifactPromises, streamId = null }) const { url } = part.image_url; artifactPromises.push( (async () => { - const filename = `${output.name}_${output.tool_call_id}_img_${nanoid()}`; + const filename = `${output.name}_img_${nanoid()}`; const file_id = output.artifact.file_ids?.[i]; const file = await saveBase64Image(url, { req, diff --git a/api/server/controllers/agents/v1.js b/api/server/controllers/agents/v1.js index 5c2ac8bb06..19a185279e 100644 --- a/api/server/controllers/agents/v1.js +++ b/api/server/controllers/agents/v1.js @@ -119,7 +119,7 @@ const createAgentHandler = async (req, res) => { agentData.author = userId; agentData.tools = []; - const availableTools = await getCachedTools(); + const availableTools = (await getCachedTools()) ?? {}; for (const tool of tools) { if (availableTools[tool]) { agentData.tools.push(tool); diff --git a/api/server/controllers/assistants/v1.js b/api/server/controllers/assistants/v1.js index 32842deb0f..5d13d30334 100644 --- a/api/server/controllers/assistants/v1.js +++ b/api/server/controllers/assistants/v1.js @@ -31,7 +31,7 @@ const createAssistant = async (req, res) => { delete assistantData.conversation_starters; delete assistantData.append_current_datetime; - const toolDefinitions = await getCachedTools(); + const toolDefinitions = (await getCachedTools()) ?? {}; assistantData.tools = tools .map((tool) => { @@ -136,7 +136,7 @@ const patchAssistant = async (req, res) => { ...updateData } = req.body; - const toolDefinitions = await getCachedTools(); + const toolDefinitions = (await getCachedTools()) ?? {}; updateData.tools = (updateData.tools ?? []) .map((tool) => { diff --git a/api/server/controllers/assistants/v2.js b/api/server/controllers/assistants/v2.js index 278dd13021..b9c5cd709f 100644 --- a/api/server/controllers/assistants/v2.js +++ b/api/server/controllers/assistants/v2.js @@ -28,7 +28,7 @@ const createAssistant = async (req, res) => { delete assistantData.conversation_starters; delete assistantData.append_current_datetime; - const toolDefinitions = await getCachedTools(); + const toolDefinitions = (await getCachedTools()) ?? {}; assistantData.tools = tools .map((tool) => { @@ -125,7 +125,7 @@ const updateAssistant = async ({ req, openai, assistant_id, updateData }) => { let hasFileSearch = false; for (const tool of updateData.tools ?? []) { - const toolDefinitions = await getCachedTools(); + const toolDefinitions = (await getCachedTools()) ?? {}; let actualTool = typeof tool === 'string' ? toolDefinitions[tool] : tool; if (!actualTool && manifestToolMap[tool] && manifestToolMap[tool].toolkit === true) { diff --git a/api/server/services/ToolService.js b/api/server/services/ToolService.js index 1e2074cdf4..62d25b23eb 100644 --- a/api/server/services/ToolService.js +++ b/api/server/services/ToolService.js @@ -79,7 +79,7 @@ async function processRequiredActions(client, requiredActions) { requiredActions, ); const appConfig = client.req.config; - const toolDefinitions = await getCachedTools(); + const toolDefinitions = (await getCachedTools()) ?? {}; const seenToolkits = new Set(); const tools = requiredActions .map((action) => {