Files
Aether/src/models/gemini.py
fawney19 0061fc04b7 feat: 添加访问令牌管理功能并升级至 0.2.4
- 新增 Management Token(访问令牌)功能,支持创建、更新、删除和管理
- 前端添加访问令牌管理页面,支持普通用户和管理员
- 后端实现完整的令牌生命周期管理 API
- 添加数据库迁移脚本创建 management_tokens 表
- Nginx 配置添加 gzip 压缩,优化响应传输
- Dialog 组件添加 persistent 属性,防止意外关闭
- 为管理后台 API 添加详细的中文文档注释
- 简化多处类型注解,统一代码风格
2026-01-07 14:55:07 +08:00

83 lines
2.9 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""
Google Gemini API 请求/响应模型
支持 Gemini API 的请求/响应格式
作为 API 网关,采用宽松类型定义以支持 API 新特性透传
"""
from typing import Any, Dict, List, Optional
from pydantic import BaseModel, ConfigDict, Field
class BaseModelWithExtras(BaseModel):
"""允许额外字段的基础模型"""
model_config = ConfigDict(extra="allow")
# ---------------------------------------------------------------------------
# 内容定义 - 使用宽松类型以支持透传
# ---------------------------------------------------------------------------
class GeminiContent(BaseModelWithExtras):
"""
Gemini 消息内容
使用宽松类型定义parts 接受任意字典列表以支持 API 新特性
"""
role: Optional[str] = None
parts: List[Dict[str, Any]]
# ---------------------------------------------------------------------------
# 请求模型 - 只定义网关需要的字段,其余透传
# ---------------------------------------------------------------------------
class GeminiRequest(BaseModelWithExtras):
"""
Gemini 统一请求模型
内部使用,统一处理 generateContent 和 streamGenerateContent
注意: Gemini API 通过 URL 端点区分流式/非流式请求:
- generateContent - 非流式
- streamGenerateContent - 流式
请求体中不应包含 stream 字段
采用宽松类型定义,除必要字段外全部透传
"""
model: Optional[str] = Field(default=None, description="模型名称,从 URL 路径提取(内部使用)")
contents: List[GeminiContent]
# 以下字段全部使用 Dict[str, Any] 透传,不做结构验证
system_instruction: Optional[Dict[str, Any]] = Field(default=None, alias="systemInstruction")
tools: Optional[List[Dict[str, Any]]] = None
tool_config: Optional[Dict[str, Any]] = Field(default=None, alias="toolConfig")
safety_settings: Optional[List[Dict[str, Any]]] = Field(default=None, alias="safetySettings")
generation_config: Optional[Dict[str, Any]] = Field(default=None, alias="generationConfig")
# ---------------------------------------------------------------------------
# 响应模型 - 用于解析上游响应提取必要信息(如 usage
# ---------------------------------------------------------------------------
class GeminiUsageMetadata(BaseModelWithExtras):
"""Token 使用量 - 用于计费统计"""
prompt_token_count: int = Field(default=0, alias="promptTokenCount")
candidates_token_count: int = Field(default=0, alias="candidatesTokenCount")
total_token_count: int = Field(default=0, alias="totalTokenCount")
# ---------------------------------------------------------------------------
# Thought Signature 常量
# ---------------------------------------------------------------------------
# 用于从其他模型迁移对话时绕过签名验证
DUMMY_THOUGHT_SIGNATURE = "context_engineering_is_the_way_to_go"