refactor: 提取 HandlerAdapterBase 基类,新增 api_family/endpoint_kind 结构化维度

- 从 ChatAdapterBase 和 CliAdapterBase 提取公共逻辑到 HandlerAdapterBase,
  消除头部处理、异常处理、计费策略等重复代码
- Usage 记录链路全程透传 api_family / endpoint_kind / provider_api_family /
  provider_endpoint_kind 四个结构化字段,替代从 api_format 字符串解析
- 删除冗余的 ClaudeCliNormalizer、GeminiCliNormalizer、ClaudeCliResponseParser、
  GeminiCliResponseParser,改用 data_format_id 回退机制自动复用 Chat 版本
- build_endpoint_url 签名统一扩展 request_data / model_name 参数
- 新增 Alembic 迁移,含历史数据回填
This commit is contained in:
fawney19
2026-02-21 13:17:11 +08:00
parent 54988916e3
commit 0fe5346f4d
36 changed files with 967 additions and 1310 deletions

View File

@@ -366,7 +366,11 @@ class Usage(Base):
# 请求详情
request_type = Column(String(50)) # chat, completion, embedding等
api_format = Column(String(50), nullable=True) # API 格式: CLAUDE, OPENAI 等(用户请求格式)
api_family = Column(String(50), nullable=True) # 协议族: claude, openai, gemini
endpoint_kind = Column(String(50), nullable=True) # 端点类型: chat, cli, video
endpoint_api_format = Column(String(50), nullable=True) # 端点原生 API 格式
provider_api_family = Column(String(50), nullable=True) # 提供商协议族
provider_endpoint_kind = Column(String(50), nullable=True) # 提供商端点类型
has_format_conversion = Column(Boolean, nullable=True, default=False) # 是否发生了格式转换
is_stream = Column(Boolean, default=False) # 是否为流式请求
status_code = Column(Integer)

View File

@@ -100,7 +100,11 @@ class Usage(Base):
# 请求详情
request_type = Column(String(50)) # chat, completion, embedding等
api_format = Column(String(50), nullable=True) # API 格式: CLAUDE, OPENAI 等(用户请求格式)
api_family = Column(String(50), nullable=True) # 协议族: claude, openai, gemini
endpoint_kind = Column(String(50), nullable=True) # 端点类型: chat, cli, video
endpoint_api_format = Column(String(50), nullable=True) # 端点原生 API 格式
provider_api_family = Column(String(50), nullable=True) # 提供商协议族
provider_endpoint_kind = Column(String(50), nullable=True) # 提供商端点类型
has_format_conversion = Column(Boolean, nullable=True, default=False) # 是否发生了格式转换
is_stream = Column(Boolean, default=False) # 是否为流式请求
status_code = Column(Integer)