61 lines
1.8 KiB
Python
61 lines
1.8 KiB
Python
from pydantic import BaseModel, Field
|
|
from typing import Optional, Literal, List
|
|
from app.schemas.auth import UserOut
|
|
|
|
# LLM Provider 类型
|
|
LLMProviderType = Literal["openai", "claude", "ollama", "deepseek", "custom"]
|
|
LLMType = Literal["chat", "vlm", "embedding", "rerank"]
|
|
|
|
|
|
# 单个模型配置
|
|
class LLMModelConfig(BaseModel):
|
|
name: str = "" # 模型名称/别名,用于标识
|
|
# provider 已废弃为必填字段:优先通过 base_url + model 推断。
|
|
provider: Optional[LLMProviderType] = None
|
|
model: str = ""
|
|
base_url: str = ""
|
|
api_key: str = ""
|
|
enabled: bool = True # 是否启用
|
|
|
|
|
|
# LLM 配置输入 - 每种类型支持多个模型
|
|
class LLMConfigIn(BaseModel):
|
|
chat: Optional[List[LLMModelConfig]] = []
|
|
vlm: Optional[List[LLMModelConfig]] = []
|
|
embedding: Optional[List[LLMModelConfig]] = []
|
|
rerank: Optional[List[LLMModelConfig]] = []
|
|
|
|
|
|
# 定时任务配置
|
|
class SchedulerConfigIn(BaseModel):
|
|
daily_plan_time: Optional[str] = "08:00"
|
|
forum_scan_interval_minutes: Optional[int] = 30
|
|
todo_ai_generate_time: Optional[str] = "08:00"
|
|
enabled: Optional[bool] = True
|
|
|
|
|
|
# 用户资料更新
|
|
class ProfileUpdateIn(BaseModel):
|
|
full_name: Optional[str] = Field(None, min_length=2, max_length=50)
|
|
password: Optional[str] = Field(None, min_length=8)
|
|
current_password: Optional[str] = None
|
|
|
|
|
|
# 完整设置输出
|
|
class SettingsOut(BaseModel):
|
|
profile: UserOut
|
|
llm_config: Optional[dict] = None
|
|
scheduler_config: Optional[dict] = None
|
|
|
|
model_config = {"from_attributes": True}
|
|
|
|
|
|
# 测试 LLM 连接请求
|
|
class LLMTestIn(BaseModel):
|
|
type: LLMType
|
|
# provider 已废弃为必填字段:优先通过 base_url + model 推断。
|
|
provider: Optional[LLMProviderType] = None
|
|
model: str
|
|
base_url: str
|
|
api_key: str
|