config.py 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. """
  2. 配置管理模块
  3. """
  4. import os
  5. from pathlib import Path
  6. from pydantic_settings import BaseSettings
  7. from dotenv import load_dotenv
  8. # 加载环境变量
  9. load_dotenv()
  10. class Settings(BaseSettings):
  11. """应用配置"""
  12. # 应用基础配置
  13. APP_NAME: str = "Tolan Voice Assistant"
  14. APP_VERSION: str = "1.0.0"
  15. DEBUG: bool = False
  16. # 服务器配置
  17. HOST: str = "0.0.0.0"
  18. PORT: int = 8000
  19. # WebSocket配置
  20. WS_HEARTBEAT_INTERVAL: int = 30 # 心跳间隔(秒)
  21. WS_TIMEOUT: int = 60 # 超时时间(秒)
  22. # 豆包API超时配置
  23. DOUBAO_RECV_TIMEOUT: int = 15 # 接收消息超时(秒)
  24. DOUBAO_CONNECT_TIMEOUT: int = 10 # 连接超时(秒)
  25. DOUBAO_RESPONSE_TIMEOUT: int = 20 # 响应超时(秒)
  26. # 豆包API配置
  27. DOUBAO_API_KEY: str = os.getenv("DOUBAO_API_KEY", "")
  28. DOUBAO_APP_ID: str = os.getenv("DOUBAO_APP_ID", "")
  29. DOUBAO_API_URL: str = os.getenv("DOUBAO_API_URL", "wss://openspeech.bytedance.com/api/v3/realtime/dialogue")
  30. DOUBAO_OUTPUT_FORMAT: str = os.getenv("DOUBAO_OUTPUT_FORMAT", "ogg_opus") # ogg_opus 或 pcm
  31. # 连接池配置
  32. CONNECTION_POOL_SIZE: int = 15 # 增加连接池大小
  33. CONNECTION_MAX_IDLE_TIME: int = 180 # 减少最大空闲时间(秒)
  34. CONNECTION_HEALTH_CHECK_INTERVAL: int = 30 # 减少健康检查间隔(秒)
  35. # 音频配置
  36. AUDIO_SAMPLE_RATE: int = 16000
  37. AUDIO_BIT_RATE: int = 16
  38. AUDIO_CHANNELS: int = 1
  39. # CORS配置
  40. CORS_ORIGINS: list = [
  41. "http://localhost:5173",
  42. "https://localhost:5173",
  43. "http://127.0.0.1:5173",
  44. "https://127.0.0.1:5173",
  45. ]
  46. # 日志配置
  47. LOG_LEVEL: str = "INFO"
  48. LOG_DIR: str = "logs"
  49. LOG_ROTATION: str = "500 MB"
  50. LOG_RETENTION: str = "10 days"
  51. # SSL配置(可选)
  52. SSL_KEYFILE: str = os.getenv("SSL_KEYFILE", "../ssl/key.pem")
  53. SSL_CERTFILE: str = os.getenv("SSL_CERTFILE", "../ssl/cert.pem")
  54. class Config:
  55. env_file = ".env"
  56. case_sensitive = True
  57. # 创建全局配置实例
  58. settings = Settings()
  59. # 确保日志目录存在
  60. Path(settings.LOG_DIR).mkdir(parents=True, exist_ok=True)