Compare commits

..

3 Commits

Author SHA1 Message Date
snaily
ebfa1d247c chore: 更新版本号至2.2.1 2025-07-20 13:43:18 +08:00
snaily
cdb85ef9b7 fix: 更新思考预算配置,使用_get_real_model函数获取真实模型 2025-07-20 13:42:36 +08:00
snaily
7006522c13 feat: 修复gemini-cli调用工具失败的问题 2025-07-20 13:19:59 +08:00
4 changed files with 36 additions and 6 deletions

View File

@@ -1 +1 @@
2.2.0 2.2.1

View File

@@ -80,6 +80,21 @@ def _clean_json_schema_properties(obj: Any) -> Any:
def _build_tools(model: str, payload: Dict[str, Any]) -> List[Dict[str, Any]]: def _build_tools(model: str, payload: Dict[str, Any]) -> List[Dict[str, Any]]:
"""构建工具""" """构建工具"""
def _has_function_call(contents: List[Dict[str, Any]]) -> bool:
"""检查内容中是否包含 functionCall"""
if not contents or not isinstance(contents, list):
return False
for content in contents:
if not content or not isinstance(content, dict) or "parts" not in content:
continue
parts = content.get("parts", [])
if not parts or not isinstance(parts, list):
continue
for part in parts:
if isinstance(part, dict) and "functionCall" in part:
return True
return False
def _merge_tools(tools: List[Dict[str, Any]]) -> Dict[str, Any]: def _merge_tools(tools: List[Dict[str, Any]]) -> Dict[str, Any]:
record = dict() record = dict()
for item in tools: for item in tools:
@@ -125,7 +140,7 @@ def _build_tools(model: str, payload: Dict[str, Any]) -> List[Dict[str, Any]]:
tool["urlContext"] = {} tool["urlContext"] = {}
# 解决 "Tool use with function calling is unsupported" 问题 # 解决 "Tool use with function calling is unsupported" 问题
if tool.get("functionDeclarations"): if tool.get("functionDeclarations") or _has_function_call(payload.get("contents", [])):
tool.pop("googleSearch", None) tool.pop("googleSearch", None)
tool.pop("codeExecution", None) tool.pop("codeExecution", None)
tool.pop("urlContext", None) tool.pop("urlContext", None)
@@ -227,7 +242,7 @@ def _build_payload(model: str, request: GeminiRequest) -> Dict[str, Any]:
payload["generationConfig"]["thinkingConfig"] = {"thinkingBudget": 128} payload["generationConfig"]["thinkingConfig"] = {"thinkingBudget": 128}
else: else:
payload["generationConfig"]["thinkingConfig"] = {"thinkingBudget": 0} payload["generationConfig"]["thinkingConfig"] = {"thinkingBudget": 0}
elif model in settings.THINKING_BUDGET_MAP: elif _get_real_model(model) in settings.THINKING_BUDGET_MAP:
if settings.SHOW_THINKING_PROCESS: if settings.SHOW_THINKING_PROCESS:
payload["generationConfig"]["thinkingConfig"] = { payload["generationConfig"]["thinkingConfig"] = {
"thinkingBudget": settings.THINKING_BUDGET_MAP.get(model,1000), "thinkingBudget": settings.THINKING_BUDGET_MAP.get(model,1000),

View File

@@ -206,7 +206,7 @@ def _build_payload(
else: else:
payload["generationConfig"]["thinkingConfig"] = {"thinkingBudget": 0} payload["generationConfig"]["thinkingConfig"] = {"thinkingBudget": 0}
if request.model in settings.THINKING_BUDGET_MAP: if _get_real_model(request.model) in settings.THINKING_BUDGET_MAP:
if settings.SHOW_THINKING_PROCESS: if settings.SHOW_THINKING_PROCESS:
payload["generationConfig"]["thinkingConfig"] = { payload["generationConfig"]["thinkingConfig"] = {
"thinkingBudget": settings.THINKING_BUDGET_MAP.get(request.model, 1000), "thinkingBudget": settings.THINKING_BUDGET_MAP.get(request.model, 1000),

View File

@@ -58,6 +58,21 @@ def _clean_json_schema_properties(obj: Any) -> Any:
def _build_tools(model: str, payload: Dict[str, Any]) -> List[Dict[str, Any]]: def _build_tools(model: str, payload: Dict[str, Any]) -> List[Dict[str, Any]]:
"""构建工具""" """构建工具"""
def _has_function_call(contents: List[Dict[str, Any]]) -> bool:
"""检查内容中是否包含 functionCall"""
if not contents or not isinstance(contents, list):
return False
for content in contents:
if not content or not isinstance(content, dict) or "parts" not in content:
continue
parts = content.get("parts", [])
if not parts or not isinstance(parts, list):
continue
for part in parts:
if isinstance(part, dict) and "functionCall" in part:
return True
return False
def _merge_tools(tools: List[Dict[str, Any]]) -> Dict[str, Any]: def _merge_tools(tools: List[Dict[str, Any]]) -> Dict[str, Any]:
record = dict() record = dict()
for item in tools: for item in tools:
@@ -103,7 +118,7 @@ def _build_tools(model: str, payload: Dict[str, Any]) -> List[Dict[str, Any]]:
tool["urlContext"] = {} tool["urlContext"] = {}
# 解决 "Tool use with function calling is unsupported" 问题 # 解决 "Tool use with function calling is unsupported" 问题
if tool.get("functionDeclarations"): if tool.get("functionDeclarations") or _has_function_call(payload.get("contents", [])):
tool.pop("googleSearch", None) tool.pop("googleSearch", None)
tool.pop("codeExecution", None) tool.pop("codeExecution", None)
tool.pop("urlContext", None) tool.pop("urlContext", None)
@@ -165,7 +180,7 @@ def _build_payload(model: str, request: GeminiRequest) -> Dict[str, Any]:
payload["generationConfig"]["thinkingConfig"] = {"thinkingBudget": 128} payload["generationConfig"]["thinkingConfig"] = {"thinkingBudget": 128}
else: else:
payload["generationConfig"]["thinkingConfig"] = {"thinkingBudget": 0} payload["generationConfig"]["thinkingConfig"] = {"thinkingBudget": 0}
elif model in settings.THINKING_BUDGET_MAP: elif _get_real_model(model) in settings.THINKING_BUDGET_MAP:
if settings.SHOW_THINKING_PROCESS: if settings.SHOW_THINKING_PROCESS:
payload["generationConfig"]["thinkingConfig"] = { payload["generationConfig"]["thinkingConfig"] = {
"thinkingBudget": settings.THINKING_BUDGET_MAP.get(model,1000), "thinkingBudget": settings.THINKING_BUDGET_MAP.get(model,1000),