From 2e7ecd88b59efaeb3b999288dd1f7520b2b14226 Mon Sep 17 00:00:00 2001 From: snaily Date: Fri, 28 Mar 2025 20:50:01 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=A2=9E=E5=BC=BAGemini=20API=20tools?= =?UTF-8?q?=E5=8F=82=E6=95=B0=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 修改GeminiRequest模型,使tools字段支持单个工具对象或工具对象列表 - 在gemini_chat_service中添加类型转换逻辑,确保tools始终以列表形式处理 - 提高API的灵活性和兼容性 --- app/domain/gemini_models.py | 4 ++-- app/service/chat/gemini_chat_service.py | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/app/domain/gemini_models.py b/app/domain/gemini_models.py index e2fdb19..d2c07df 100644 --- a/app/domain/gemini_models.py +++ b/app/domain/gemini_models.py @@ -1,4 +1,4 @@ -from typing import List, Optional, Dict, Any, Literal +from typing import List, Optional, Dict, Any, Literal, Union from pydantic import BaseModel @@ -34,7 +34,7 @@ class GeminiContent(BaseModel): class GeminiRequest(BaseModel): contents: List[GeminiContent] = [] - tools: Optional[List[Dict[str, Any]]] = [] + tools: Optional[Union[List[Dict[str, Any]], Dict[str, Any]]] = [] safetySettings: Optional[List[SafetySetting]] = None generationConfig: Optional[GenerationConfig] = None systemInstruction: Optional[SystemInstruction] = None diff --git a/app/service/chat/gemini_chat_service.py b/app/service/chat/gemini_chat_service.py index 7d2367e..b109592 100644 --- a/app/service/chat/gemini_chat_service.py +++ b/app/service/chat/gemini_chat_service.py @@ -44,6 +44,8 @@ def _build_tools(model: str, payload: Dict[str, Any]) -> List[Dict[str, Any]]: tool = dict() if payload and isinstance(payload, dict) and "tools" in payload: + if payload.get("tools") and isinstance(payload.get("tools"), dict): + payload["tools"] = [payload.get("tools")] items = payload.get("tools", []) if items and isinstance(items, list): tool.update(_merge_tools(items))