[Bug] (Backend) Gemini 3 models receive error 400: function call is missing thought_signature
1. Checklist / 检查项
I have removed sensitive information from configuration/logs.
我已移除配置或日志中的敏感信息。
I have checked the FAQ and existing issues.
I am using the latest version of the project.
我正在使用项目的最新版本。
2. Environment Details / 环境信息
How did you install Open-LLM-VTuber:
你是如何安装 Open-LLM-VTuber 的:
- git clone (源码克隆)
- release zip (发布包)
- exe (Windows) (Windows 安装包)
- dmg (MacOS) (MacOS 安装包)
Are you running the backend and frontend on the same device? Yes
后端和前端是否在同一台设备上运行?
If you used GPU, please provide your GPU model and driver version:
如果你使用了 GPU,请提供你的 GPU 型号及驱动版本信息:
Browser (if applicable): Chrome
浏览器(如果适用):
3. Describe the bug / 问题描述
What exactly is happening? What do you want to see? How to reproduce?
请详细描述发生了什么、你希望看到什么,以及如何复现。
When using gemini's newer models (I used gemini-3.5-flash-lite), the application crashes with a 400 INVALID_ARGUMENT error after successfully executing a tool call.
The Gemini API now requires a cryptographic thought_signature to be passed back along with the tool results. However, this Google-specific signature is stripped from the function call schema. When the message history is sent back to the API with the tool result, Gemini rejects it for missing the required signature, hence giving a 400 error.
This has been an issue in other gemini-related projects, and I would like to know if a patch to this is possible.
4. Screenshots / Logs (if relevant)
截图 / 日志(如有)
- Backend log: 后端日志
2026-09-01 13:33:25 | INFO | src.open_llm_vtuber.conversations.single_conversation:process_single_conversation:84 | User input: ちょっとバックグランドで色々修正して動いてるか確認したいし、今年のF1イタリアGPは何月何日に決勝やるか、インターネットで調べて教えてくれる? 2026-09-01 13:33:29 | INFO | src.open_llm_vtuber.agent.stateless_llm.openai_compatible_llm:chat_completion:173 | Complete tool calls: {None: {'index': None, 'id': 'call_424209', 'type': 'function', 'function': {'name': 'search', 'arguments': '{"query":"F1イタリアGP 2025 決勝 日程"}'}}} 2026-09-01 13:33:29 | INFO | src.open_llm_vtuber.mcpp.tool_executor:execute_tools:163 | Executing 1 tool(s) for OpenAI caller. 2026-09-01 13:33:29 | INFO | src.open_llm_vtuber.mcpp.tool_executor:execute_tools:174 | Executing tool: ToolCallObject(id='call_424209', type='function', index=None, function=ToolCallFunctionObject(name='search', arguments='{"query":"F1イタリアGP 2025 決勝 日程"}')) 2026-09-01 13:33:29 | INFO | src.open_llm_vtuber.mcpp.tool_executor:run_single_tool:311 | Executing tool: search (ID: call_424209) 2026-09-01 13:33:29 | INFO | src.open_llm_vtuber.mcpp.mcp_client:_ensure_server_running_and_get_session:50 | MCPC: Starting and connecting to server 'ddg-search'... DuckDuckGo MCP Server initialized: SafeSearch: MODERATE (kp=-1) Default Region: none Search backend: auto Fetch backend: httpx Allow private URLs: False 2026-09-01 13:33:30 | INFO | src.open_llm_vtuber.mcpp.mcp_client:_ensure_server_running_and_get_session:75 | MCPC: Successfully connected to server 'ddg-search'. 2026-09-01 13:33:30 | INFO | src.open_llm_vtuber.mcpp.mcp_client:call_tool:110 | MCPC: Calling tool 'search' on server 'ddg-search'... [09/01/26 13:33:30] INFO Processing request of type server.py:733 CallToolRequest [09/01/26 13:33:31] INFO HTTP Request: POST _client.py:1740 https://html.duckduckgo.com/html "HTTP/1.1 200 OK" INFO Processing request of type server.py:733 ListToolsRequest 2026-09-01 13:33:31 | INFO | src.open_llm_vtuber.mcpp.tool_executor:run_single_tool:354 | Tool 'search' executed successfully. 2026-09-01 13:33:31 | INFO | src.open_llm_vtuber.mcpp.tool_executor:run_single_tool:356 | Content items from tool 'search': 2026-09-01 13:33:31 | INFO | src.open_llm_vtuber.mcpp.tool_executor:run_single_tool:359 | Type: text 2026-09-01 13:33:31 | INFO | src.open_llm_vtuber.mcpp.tool_executor:run_single_tool:369 | text: (length: 2862) 2026-09-01 13:33:31 | INFO | src.open_llm_vtuber.mcpp.tool_executor:execute_tools:298 | Finished executing tools with 1 results. 2026-09-01 13:33:32 | ERROR | src.open_llm_vtuber.agent.stateless_llm.openai_compatible_llm:chat_completion:224 | LLM API: Error occurred: Error code: 400 - [{'error': {'code': 400, 'message': 'Function call is missing a thought_signature in functionCall parts. This is required for tools to work correctly, and missing thought_signature may lead to degraded model performance. Additional data, function call default_api:search , position 20. Please refer to https://ai.google.dev/gemini-api/docs/thought-signatures for more details.', 'status': 'INVALID_ARGUMENT'}}]
- Frontend setting (General): 前端设置(通用)
- Frontend console log (F12): 前端控制台日志(F12)
- If using Ollama: output of
ollama ps: 如果使用 Ollama,请附上ollama ps的输出
5. Configuration / 配置文件
Please provide relevant config files, with sensitive info like API keys removed
请提供相关配置文件(请务必去除 API key 等敏感信息)
conf.yaml
model_dict.json,.model3.json
Source: Open-LLM-VTuber/Open-LLM-VTuber