Files
JARVIS/backend/app/schemas/settings.py

61 lines
1.8 KiB
Python
Raw Normal View History

2026-03-21 10:13:29 +08:00
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
2026-03-21 10:13:29 +08:00
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
2026-03-21 10:13:29 +08:00
model: str
base_url: str
api_key: str