This commit is contained in:
Windpicker-owo
2025-10-06 01:07:08 +08:00
102 changed files with 2825 additions and 989 deletions

View File

@@ -5,7 +5,6 @@ MCP (Model Context Protocol) SSE (Server-Sent Events) 客户端实现
import asyncio
import io
import json
from collections.abc import Callable
from typing import Any
@@ -20,7 +19,6 @@ from ..exceptions import (
NetworkConnectionError,
ReqAbortException,
RespNotOkException,
RespParseException,
)
from ..payload_content.message import Message, RoleType
from ..payload_content.resp_format import RespFormat

View File

@@ -68,14 +68,14 @@ def _remove_title(schema: dict[str, Any] | list[Any]) -> dict[str, Any] | list[A
if isinstance(schema, list):
# 如果当前Schema是列表则对所有dict/list子元素递归调用
for idx, item in enumerate(schema):
if isinstance(item, (dict, list)):
if isinstance(item, dict | list):
schema[idx] = _remove_title(item)
elif isinstance(schema, dict):
# 是字典移除title字段并对所有dict/list子元素递归调用
if "title" in schema:
del schema["title"]
for key, value in schema.items():
if isinstance(value, (dict, list)):
if isinstance(value, dict | list):
schema[key] = _remove_title(value)
return schema
@@ -120,7 +120,7 @@ def _link_definitions(schema: dict[str, Any]) -> dict[str, Any]:
raise ValueError(f"Schema中引用的定义'{def_key}'不存在")
# 遍历键值对
for key, value in sub_schema.items():
if isinstance(value, (dict, list)):
if isinstance(value, dict | list):
# 如果当前值是字典或列表,则递归调用
sub_schema[key] = link_definitions_recursive(f"{path}/{key}", value, defs)
@@ -136,13 +136,13 @@ def _remove_defs(schema: dict[str, Any]) -> dict[str, Any]:
if isinstance(schema, list):
# 如果当前Schema是列表则对所有dict/list子元素递归调用
for idx, item in enumerate(schema):
if isinstance(item, (dict, list)):
if isinstance(item, dict | list):
schema[idx] = _remove_title(item)
elif isinstance(schema, dict):
# 是字典移除title字段并对所有dict/list子元素递归调用
schema.pop("$defs", None)
for key, value in schema.items():
if isinstance(value, (dict, list)):
if isinstance(value, dict | list):
schema[key] = _remove_title(value)
return schema

View File

@@ -157,7 +157,7 @@ class LLMUsageRecorder:
):
input_cost = (model_usage.prompt_tokens / 1000000) * model_info.price_in
output_cost = (model_usage.completion_tokens / 1000000) * model_info.price_out
total_cost = round(input_cost + output_cost, 6)
round(input_cost + output_cost, 6)
session = None
try:

View File

@@ -227,7 +227,7 @@ class _ModelSelector:
penalty_increment = self.DEFAULT_PENALTY_INCREMENT
# 对严重错误施加更高的惩罚,以便快速将问题模型移出候选池
if isinstance(e, (NetworkConnectionError, ReqAbortException)):
if isinstance(e, NetworkConnectionError | ReqAbortException):
# 网络连接错误或请求被中断,通常是基础设施问题,应重罚
penalty_increment = self.CRITICAL_PENALTY_MULTIPLIER
logger.warning(