mirror of
https://github.com/fawney19/Aether.git
synced 2026-09-02 17:30:23 +08:00
refactor: 将 global_priority 和 rate_multiplier 改为按 API 格式配置
- 新增 global_priority_by_format 字段,支持按 API 格式设置全局优先级 - 移除已废弃的 rate_multiplier 字段,统一使用 rate_multipliers - 移除已废弃的 timeout 字段(providers 和 provider_endpoints 表) - 更新调度器以支持按格式的优先级排序 - 同步更新前后端类型定义和 API 接口 - 添加数据库迁移脚本,自动迁移现有数据
This commit is contained in:
@@ -551,11 +551,7 @@ class Provider(Base):
|
||||
# 限制
|
||||
concurrent_limit = Column(Integer, nullable=True) # 并发请求限制
|
||||
|
||||
# 请求配置(从 Endpoint 迁移,作为全局默认值)
|
||||
# [已废弃] timeout 字段不再使用,超时由环境变量控制:
|
||||
# - 非流式请求: HTTP_REQUEST_TIMEOUT(默认 300 秒)
|
||||
# - 流式首字节: STREAM_FIRST_BYTE_TIMEOUT(默认 30 秒)
|
||||
timeout = Column(Integer, default=300, nullable=True) # [已废弃] 请求超时(秒)
|
||||
# 请求配置
|
||||
max_retries = Column(Integer, default=2, nullable=True) # 最大重试次数
|
||||
proxy = Column(JSONB, nullable=True) # 代理配置: {url, username, password, enabled}
|
||||
|
||||
@@ -603,7 +599,6 @@ class ProviderEndpoint(Base):
|
||||
|
||||
# 请求配置
|
||||
header_rules = Column(JSON, nullable=True) # 请求头规则 [{action, key, value, from, to}]
|
||||
timeout = Column(Integer, default=300) # [已废弃] 超时(秒),由环境变量控制
|
||||
max_retries = Column(Integer, default=2) # 最大重试次数
|
||||
|
||||
# 状态
|
||||
@@ -1004,11 +999,6 @@ class ProviderAPIKey(Base):
|
||||
note = Column(String(500), nullable=True) # 备注说明(可选)
|
||||
|
||||
# 成本计算
|
||||
# [DEPRECATED] rate_multiplier 已废弃,请使用 rate_multipliers
|
||||
# 将在未来版本中移除,目前仅作为 rate_multipliers 未配置时的回退值
|
||||
rate_multiplier = Column(
|
||||
Float, default=1.0, nullable=False
|
||||
) # [DEPRECATED] 默认成本倍率,请使用 rate_multipliers
|
||||
rate_multipliers = Column(
|
||||
JSON, nullable=True
|
||||
) # 按 API 格式的成本倍率 {"CLAUDE_CLI": 1.0, "OPENAI_CLI": 0.8}
|
||||
@@ -1017,9 +1007,9 @@ class ProviderAPIKey(Base):
|
||||
internal_priority = Column(
|
||||
Integer, default=50
|
||||
) # Endpoint 内部优先级(用于提供商优先模式,同 Endpoint 内 Keys 的排序,同优先级参与负载均衡)
|
||||
global_priority = Column(
|
||||
Integer, nullable=True
|
||||
) # 全局 Key 优先级(用于全局 Key 优先模式,跨 Provider 的 Key 排序,NULL=未配置使用默认排序)
|
||||
global_priority_by_format = Column(
|
||||
JSON, nullable=True
|
||||
) # 按 API 格式的全局优先级 {"CLAUDE": 1, "CLAUDE_CLI": 2}
|
||||
|
||||
# RPM 限制配置(自适应学习)
|
||||
# rpm_limit 决定 RPM 控制模式:
|
||||
|
||||
@@ -152,10 +152,6 @@ class EndpointAPIKeyCreate(BaseModel):
|
||||
name: str = Field(..., min_length=1, max_length=100, description="密钥名称(必填,用于识别)")
|
||||
|
||||
# 成本计算
|
||||
# [DEPRECATED] rate_multiplier 已废弃,请使用 rate_multipliers
|
||||
rate_multiplier: float = Field(
|
||||
default=1.0, ge=0.01, description="[DEPRECATED] 默认成本倍率,已废弃,请使用 rate_multipliers"
|
||||
)
|
||||
rate_multipliers: Optional[Dict[str, float]] = Field(
|
||||
default=None, description="按 API 格式的成本倍率,如 {'CLAUDE_CLI': 1.0, 'OPENAI_CLI': 0.8}"
|
||||
)
|
||||
@@ -294,16 +290,14 @@ class EndpointAPIKeyUpdate(BaseModel):
|
||||
default=None, min_length=3, max_length=500, description="API Key(将自动加密)"
|
||||
)
|
||||
name: Optional[str] = Field(default=None, min_length=1, max_length=100, description="密钥名称")
|
||||
# [DEPRECATED] rate_multiplier 已废弃,请使用 rate_multipliers
|
||||
rate_multiplier: Optional[float] = Field(default=None, ge=0.01, description="[DEPRECATED] 默认成本倍率,已废弃")
|
||||
rate_multipliers: Optional[Dict[str, float]] = Field(
|
||||
default=None, description="按 API 格式的成本倍率,如 {'CLAUDE_CLI': 1.0, 'OPENAI_CLI': 0.8}"
|
||||
)
|
||||
internal_priority: Optional[int] = Field(
|
||||
default=None, description="Key 内部优先级(提供商优先模式,数字越小越优先)"
|
||||
)
|
||||
global_priority: Optional[int] = Field(
|
||||
default=None, description="全局 Key 优先级(全局 Key 优先模式,数字越小越优先)"
|
||||
global_priority_by_format: Optional[Dict[str, int]] = Field(
|
||||
default=None, description="按 API 格式的全局优先级,如 {'CLAUDE': 1, 'CLAUDE_CLI': 2}"
|
||||
)
|
||||
# rpm_limit: 使用特殊标记区分"未提供"和"设置为 null(自适应模式)"
|
||||
# - 不提供字段:不更新
|
||||
@@ -421,15 +415,15 @@ class EndpointAPIKeyResponse(BaseModel):
|
||||
name: str = Field(..., description="密钥名称")
|
||||
|
||||
# 成本计算
|
||||
# [DEPRECATED] rate_multiplier 已废弃,请使用 rate_multipliers
|
||||
rate_multiplier: float = Field(default=1.0, description="[DEPRECATED] 默认成本倍率,已废弃")
|
||||
rate_multipliers: Optional[Dict[str, float]] = Field(
|
||||
default=None, description="按 API 格式的成本倍率,如 {'CLAUDE_CLI': 1.0, 'OPENAI_CLI': 0.8}"
|
||||
)
|
||||
|
||||
# 优先级和限制
|
||||
internal_priority: int = Field(default=50, description="Endpoint 内部优先级")
|
||||
global_priority: Optional[int] = Field(default=None, description="全局 Key 优先级")
|
||||
global_priority_by_format: Optional[Dict[str, int]] = Field(
|
||||
default=None, description="按 API 格式的全局优先级"
|
||||
)
|
||||
rpm_limit: Optional[int] = None
|
||||
allowed_models: Optional[List[str]] = None
|
||||
capabilities: Optional[Dict[str, bool]] = Field(default=None, description="Key 能力标签")
|
||||
@@ -591,7 +585,6 @@ class ProviderUpdateRequest(BaseModel):
|
||||
quota_reset_day: Optional[int] = Field(None, ge=1, le=31, description="配额重置日(1-31)")
|
||||
quota_expires_at: Optional[datetime] = Field(None, description="配额过期时间")
|
||||
# 请求配置(从 Endpoint 迁移)
|
||||
timeout: Optional[int] = Field(None, ge=1, le=600, description="请求超时(秒)")
|
||||
max_retries: Optional[int] = Field(None, ge=0, le=10, description="最大重试次数")
|
||||
proxy: Optional[Dict[str, Any]] = Field(None, description="代理配置")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user