File size: 3,769 Bytes
b064311
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
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="令牌类型")