config.py 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  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 = 25 # 最大空闲时间(秒),必须小于豆包超时时间
  34. CONNECTION_HEALTH_CHECK_INTERVAL: int = 20 # 健康检查间隔(秒)
  35. # 音频配置
  36. AUDIO_SAMPLE_RATE: int = 16000
  37. AUDIO_BIT_RATE: int = 16
  38. AUDIO_CHANNELS: int = 1
  39. # CORS配置
  40. # 支持localhost和任意IP地址访问
  41. CORS_ORIGINS: list = [
  42. "http://localhost:5173",
  43. "https://localhost:5173",
  44. "http://127.0.0.1:5173",
  45. "https://127.0.0.1:5173",
  46. # 支持局域网IP访问
  47. "http://10.241.40.29:5173",
  48. "https://10.241.40.29:5173",
  49. # 如有其他IP,继续添加
  50. # "https://192.168.2.105:5173",
  51. ]
  52. # 是否允许所有来源(开发环境可设为True,生产环境务必设为False)
  53. CORS_ALLOW_ALL: bool = os.getenv("CORS_ALLOW_ALL", "true").lower() == "true"
  54. # 日志配置
  55. LOG_LEVEL: str = "INFO"
  56. LOG_DIR: str = "logs"
  57. LOG_ROTATION: str = "500 MB"
  58. LOG_RETENTION: str = "10 days"
  59. # SSL配置(可选)
  60. SSL_KEYFILE: str = os.getenv("SSL_KEYFILE", "../ssl/key.pem")
  61. SSL_CERTFILE: str = os.getenv("SSL_CERTFILE", "../ssl/cert.pem")
  62. class Config:
  63. env_file = ".env"
  64. case_sensitive = True
  65. # 创建全局配置实例
  66. settings = Settings()
  67. # 确保日志目录存在
  68. Path(settings.LOG_DIR).mkdir(parents=True, exist_ok=True)