refactor: 移除 Provider/Endpoint 级别的 timeout 配置,改用全局环境变量

- 废弃 Provider.timeout 和 ProviderEndpoint.timeout 字段(保留数据库列以兼容)
- 非流式请求超时由 HTTP_REQUEST_TIMEOUT 环境变量控制(默认 300 秒)
- 流式请求首字节超时由 STREAM_FIRST_BYTE_TIMEOUT 环境变量控制(默认 30 秒)
- 移除前端表单中的超时配置输入框
- 简化 settings.py 中的 TTFB 超时解析逻辑
- 更新 API 请求/响应模型,移除 timeout 字段
- 更新导入导出功能,不再包含 timeout 配置
This commit is contained in:
fawney19
2026-01-16 13:08:39 +08:00
parent e6a31a61db
commit 50343d5459
20 changed files with 44 additions and 132 deletions

View File

@@ -88,7 +88,6 @@ class CreateProviderRequest(BaseModel):
is_active: Optional[bool] = Field(True, description="是否启用")
concurrent_limit: Optional[int] = Field(None, ge=0, description="并发限制")
# 请求配置(从 Endpoint 迁移)
timeout: Optional[int] = Field(300, ge=1, le=600, description="请求超时(秒)")
max_retries: Optional[int] = Field(2, ge=0, le=10, description="最大重试次数")
proxy: Optional[ProxyConfig] = Field(None, description="代理配置")
config: Optional[Dict[str, Any]] = Field(None, description="其他配置")
@@ -159,7 +158,6 @@ class UpdateProviderRequest(BaseModel):
is_active: Optional[bool] = None
concurrent_limit: Optional[int] = Field(None, ge=0)
# 请求配置(从 Endpoint 迁移)
timeout: Optional[int] = Field(None, ge=1, le=600, description="请求超时(秒)")
max_retries: Optional[int] = Field(None, ge=0, le=10, description="最大重试次数")
proxy: Optional[ProxyConfig] = Field(None, description="代理配置")
config: Optional[Dict[str, Any]] = None

View File

@@ -403,7 +403,6 @@ class ProviderUpdate(BaseModel):
api_format: Optional[str] = None
base_url: Optional[str] = None
headers: Optional[dict] = None
timeout: Optional[int] = Field(None, ge=1, le=600)
max_retries: Optional[int] = Field(None, ge=0, le=10)
priority: Optional[int] = None
weight: Optional[float] = Field(None, gt=0)
@@ -423,7 +422,6 @@ class ProviderResponse(BaseModel):
api_format: str
base_url: str
headers: Optional[dict]
timeout: int
max_retries: int
priority: int
weight: float

View File

@@ -552,11 +552,10 @@ class Provider(Base):
concurrent_limit = Column(Integer, nullable=True) # 并发请求限制
# 请求配置(从 Endpoint 迁移,作为全局默认值)
# 超时 300 秒对于 LLM API 是合理的默认值
# - 大多数请求在 30 秒内完成
# - 复杂推理(如 Claude thinking可能需要 60-120 秒
# - 300 秒足够覆盖极端场景(如超长上下文、复杂工具调用
timeout = Column(Integer, default=300, nullable=True) # 请求超时(秒)
# [已废弃] 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}
@@ -604,7 +603,7 @@ class ProviderEndpoint(Base):
# 请求配置
header_rules = Column(JSON, nullable=True) # 请求头规则 [{action, key, value, from, to}]
timeout = Column(Integer, default=300) # 超时(秒)
timeout = Column(Integer, default=300) # [已废弃] 超时(秒),由环境变量控制
max_retries = Column(Integer, default=2) # 最大重试次数
# 状态

View File

@@ -37,7 +37,6 @@ class ProviderEndpointCreate(BaseModel):
description="请求头规则列表,支持 set/drop/rename 操作",
)
timeout: int = Field(default=300, ge=10, le=600, description="超时时间(秒)")
max_retries: int = Field(default=2, ge=0, le=10, description="最大重试次数")
# 额外配置
@@ -81,7 +80,6 @@ class ProviderEndpointUpdate(BaseModel):
description="请求头规则列表,支持 set/drop/rename 操作",
)
timeout: Optional[int] = Field(default=None, ge=10, le=600, description="超时时间(秒)")
max_retries: Optional[int] = Field(default=None, ge=0, le=10, description="最大重试次数")
is_active: Optional[bool] = Field(default=None, description="是否启用")
config: Optional[Dict[str, Any]] = Field(default=None, description="额外配置")
@@ -117,7 +115,6 @@ class ProviderEndpointResponse(BaseModel):
default=None, description="请求头规则列表"
)
timeout: int
max_retries: int
# 状态
@@ -619,7 +616,6 @@ class ProviderWithEndpointsSummary(BaseModel):
quota_expires_at: Optional[datetime] = Field(default=None, description="配额过期时间")
# 请求配置(从 Endpoint 迁移)
timeout: Optional[int] = Field(default=300, description="请求超时(秒)")
max_retries: Optional[int] = Field(default=2, description="最大重试次数")
proxy: Optional[Dict[str, Any]] = Field(default=None, description="代理配置")