zai / app /core /config.py
sanbo110's picture
update sth at 2025-10-23 17:38:54
fdc7f56
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
from typing import Dict, List, Optional
from pydantic_settings import BaseSettings
class Settings(BaseSettings):
"""Application settings"""
# API Configuration
API_ENDPOINT: str = "https://chat.z.ai/api/chat/completions"
# Authentication
AUTH_TOKEN: Optional[str] = os.getenv("AUTH_TOKEN")
# Token池配置
TOKEN_FAILURE_THRESHOLD: int = int(os.getenv("TOKEN_FAILURE_THRESHOLD", "3")) # 失败3次后标记为不可用
TOKEN_RECOVERY_TIMEOUT: int = int(os.getenv("TOKEN_RECOVERY_TIMEOUT", "1800")) # 30分钟后重试失败的token
# Model Configuration
GLM45_MODEL: str = os.getenv("GLM45_MODEL", "GLM-4.5")
GLM45_THINKING_MODEL: str = os.getenv("GLM45_THINKING_MODEL", "GLM-4.5-Thinking")
GLM45_SEARCH_MODEL: str = os.getenv("GLM45_SEARCH_MODEL", "GLM-4.5-Search")
GLM45_AIR_MODEL: str = os.getenv("GLM45_AIR_MODEL", "GLM-4.5-Air")
GLM45V_MODEL: str = os.getenv("GLM45V_MODEL", "GLM-4.5V")
GLM46_MODEL: str = os.getenv("GLM46_MODEL", "GLM-4.6")
GLM46_THINKING_MODEL: str = os.getenv("GLM46_THINKING_MODEL", "GLM-4.6-Thinking")
GLM46_SEARCH_MODEL: str = os.getenv("GLM46_SEARCH_MODEL", "GLM-4.6-Search")
GLM46_ADVANCED_SEARCH_MODEL: str = os.getenv("GLM46_ADVANCED_SEARCH_MODEL", "GLM-4.6-advanced-search")
# Provider Model Mapping
@property
def provider_model_mapping(self) -> Dict[str, str]:
"""模型到提供商的映射"""
return {
# Z.AI models
"GLM-4.5": "zai",
"GLM-4.5-Thinking": "zai",
"GLM-4.5-Search": "zai",
"GLM-4.5-Air": "zai",
"GLM-4.5V": "zai",
"GLM-4.6": "zai",
"GLM-4.6-Thinking": "zai",
"GLM-4.6-Search": "zai",
"GLM-4.6-advanced-search": "zai",
# K2Think models
"MBZUAI-IFM/K2-Think": "k2think",
# LongCat models
"LongCat-Flash": "longcat",
"LongCat": "longcat",
"LongCat-Search": "longcat",
}
# Server Configuration
LISTEN_PORT: int = int(os.getenv("LISTEN_PORT", "7860"))
DEBUG_LOGGING: bool = os.getenv("DEBUG_LOGGING", "true").lower() == "true"
SERVICE_NAME: str = os.getenv("SERVICE_NAME", "z-ai2api-server")
ROOT_PATH: str = os.getenv("ROOT_PATH", "") # For Nginx reverse proxy path prefix, e.g., "/api" or "/path-prefix"
ANONYMOUS_MODE: bool = os.getenv("ANONYMOUS_MODE", "true").lower() == "true"
TOOL_SUPPORT: bool = os.getenv("TOOL_SUPPORT", "true").lower() == "true"
SCAN_LIMIT: int = int(os.getenv("SCAN_LIMIT", "200000"))
SKIP_AUTH_TOKEN: bool = os.getenv("SKIP_AUTH_TOKEN", "false").lower() == "true"
# LongCat Configuration
LONGCAT_TOKEN: Optional[str] = os.getenv("LONGCAT_TOKEN")
# Provider Configuration
DEFAULT_PROVIDER: str = os.getenv("DEFAULT_PROVIDER", "zai") # 默认提供商:zai/k2think/longcat
# Proxy Configuration
HTTP_PROXY: Optional[str] = os.getenv("HTTP_PROXY") # HTTP代理,格式: http://user:pass@host:port 或 http://host:port
HTTPS_PROXY: Optional[str] = os.getenv("HTTPS_PROXY") # HTTPS代理,格式同上
SOCKS5_PROXY: Optional[str] = os.getenv("SOCKS5_PROXY") # SOCKS5代理,格式: socks5://user:pass@host:port
# Admin Panel Authentication
ADMIN_PASSWORD: str = os.getenv("ADMIN_PASSWORD", "admin123") # 管理后台密码
SESSION_SECRET_KEY: str = os.getenv("SESSION_SECRET_KEY", "your-secret-key-change-in-production") # Session 密钥
class Config:
env_file = ".env"
extra = "ignore" # 忽略额外字段,防止环境变量中的未知字段导致验证错误
settings = Settings()