Files
MoviePilot/app/schemas/llm.py

116 lines
3.1 KiB
Python

"""LLM 配置、目录和测试 API 输出模型。"""
from typing import Optional
from pydantic import BaseModel, Field
class LLMAuthStatus(BaseModel):
"""LLM 提供商授权状态摘要。"""
connected: bool = False
type: Optional[str] = None
label: Optional[str] = None
expires_at: Optional[int | float | str] = None
updated_at: Optional[int | float | str] = None
class LLMServerToolCapability(BaseModel):
"""模型支持的服务端工具能力。"""
id: str
required_api_protocol: Optional[str] = None
client_adapter: Optional[str] = None
class LLMModelInfo(BaseModel):
"""标准化 LLM 模型目录项。"""
id: str
name: str
family: Optional[str] = None
context_tokens: Optional[int] = None
input_tokens: Optional[int] = None
output_tokens: Optional[int] = None
context_tokens_k: Optional[int] = None
supports_reasoning: bool = False
supports_tools: bool = False
supports_image_input: bool = False
supports_audio_input: bool = False
transport: Optional[str] = None
source: Optional[str] = None
release_date: Optional[str] = None
status: Optional[str] = None
server_tools: list[LLMServerToolCapability] = Field(default_factory=list)
class LLMModelCatalogData(BaseModel):
"""指定提供商的模型目录。"""
provider: str
models: list[LLMModelInfo] = Field(default_factory=list)
auth_status: LLMAuthStatus
class LLMProviderAuthMethod(BaseModel):
"""LLM 提供商可用的交互授权方式。"""
id: str
type: str
label: str
description: Optional[str] = None
class LLMProviderBaseUrlPreset(BaseModel):
"""LLM 提供商预设基础地址。"""
id: str
label: str
value: str
runtime: Optional[str] = None
model_list_strategy: Optional[str] = None
class LLMProviderInfo(BaseModel):
"""前端可配置的 LLM 提供商定义。"""
id: str
name: str
runtime: str
default_base_url: str = ""
base_url_presets: list[LLMProviderBaseUrlPreset] = Field(default_factory=list)
base_url_editable: bool = True
requires_base_url: bool = False
supports_api_key: bool = True
api_key_label: Optional[str] = None
api_key_hint: Optional[str] = None
supports_model_refresh: bool = True
oauth_methods: list[LLMProviderAuthMethod] = Field(default_factory=list)
description: Optional[str] = None
auth_status: LLMAuthStatus
class LLMProviderAuthSession(BaseModel):
"""LLM 提供商交互授权会话。"""
session_id: str
provider_id: Optional[str] = None
flow_type: Optional[str] = None
status: Optional[str] = None
message: Optional[str] = None
authorize_url: Optional[str] = None
verification_url: Optional[str] = None
user_code: Optional[str] = None
instructions: Optional[str] = None
interval_seconds: Optional[int] = None
expires_at: Optional[int | float] = None
class LLMTestResult(BaseModel):
"""LLM 连通性测试结果。"""
provider: str
model: str
duration_ms: Optional[int] = None
reply_preview: Optional[str] = None