mirror of
https://github.com/snailyp/gemini-balance.git
synced 2026-07-04 14:21:27 +08:00
Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ebfa1d247c | ||
|
|
cdb85ef9b7 | ||
|
|
7006522c13 |
@@ -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),
|
||||||
|
|||||||
@@ -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),
|
||||||
|
|||||||
@@ -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),
|
||||||
|
|||||||
Reference in New Issue
Block a user