soraapi / src /models /schemas.py
anycallzhf's picture
Initial commit for Hugging Face Space deployment
b064311
from typing import List, Dict, Any, Optional, Union
from pydantic import BaseModel, Field
# 聊天完成请求模型
class ContentItem(BaseModel):
type: str
text: Optional[str] = None
image_url: Optional[Dict[str, str]] = None
class ChatMessage(BaseModel):
role: str
content: Union[str, List[ContentItem]]
class ChatCompletionRequest(BaseModel):
model: str
messages: List[ChatMessage]
temperature: Optional[float] = 1.0
top_p: Optional[float] = 1.0
n: Optional[int] = 1
stream: Optional[bool] = False
max_tokens: Optional[int] = None
presence_penalty: Optional[float] = 0
frequency_penalty: Optional[float] = 0
# API密钥创建模型
class ApiKeyCreate(BaseModel):
name: str = Field(..., description="密钥名称")
key_value: str = Field(..., description="密钥值")
weight: int = Field(1, description="权重")
rate_limit: int = Field(60, description="速率限制(每分钟请求数)")
is_enabled: bool = Field(True, description="是否启用")
notes: Optional[str] = Field(None, description="备注")
# API密钥更新模型
class ApiKeyUpdate(BaseModel):
name: Optional[str] = Field(None, description="密钥名称")
key_value: Optional[str] = Field(None, description="密钥值")
weight: Optional[int] = Field(None, description="权重")
rate_limit: Optional[int] = Field(None, description="速率限制(每分钟请求数)")
is_enabled: Optional[bool] = Field(None, description="是否启用")
notes: Optional[str] = Field(None, description="备注")
# 批量操作基础模型
class BatchOperation(BaseModel):
action: str = Field(..., description="操作类型:import, enable, disable, delete")
key_ids: Optional[List[str]] = Field(None, description="要操作的密钥ID列表")
# 批量导入的密钥项模型
class ImportKeyItem(BaseModel):
name: str = Field(..., description="密钥名称")
key: str = Field(..., description="密钥值")
weight: int = Field(1, description="权重")
rate_limit: int = Field(60, description="速率限制(每分钟请求数)")
enabled: bool = Field(True, description="是否启用")
notes: Optional[str] = Field(None, description="备注")
# 批量导入模型
class BatchImportOperation(BatchOperation):
keys: List[ImportKeyItem] = Field(..., description="要导入的密钥列表")
key_ids: Optional[List[str]] = None
# 系统配置更新模型
class ConfigUpdate(BaseModel):
PROXY_HOST: Optional[str] = Field(None, description="代理服务器主机")
PROXY_PORT: Optional[str] = Field(None, description="代理服务器端口")
PROXY_USER: Optional[str] = Field(None, description="代理服务器用户名")
PROXY_PASS: Optional[str] = Field(None, description="代理服务器密码")
BASE_URL: Optional[str] = Field(None, description="基础URL,用于图片访问地址")
IMAGE_LOCALIZATION: Optional[bool] = Field(None, description="是否启用图片本地化存储")
IMAGE_SAVE_DIR: Optional[str] = Field(None, description="图片保存目录")
save_to_env: bool = Field(True, description="是否保存到环境变量文件")
# 日志级别更新模型
class LogLevelUpdate(BaseModel):
level: str = Field(..., description="日志级别: DEBUG, INFO, WARNING, ERROR, CRITICAL")
save_to_env: bool = Field(True, description="是否保存到环境变量文件")
# JWT认证请求模型
class LoginRequest(BaseModel):
admin_key: str = Field(..., description="管理员密钥")
# JWT令牌响应模型
class TokenResponse(BaseModel):
token: str = Field(..., description="JWT令牌")
expires_in: int = Field(..., description="有效期(秒)")
token_type: str = Field("bearer", description="令牌类型")