Spaces:
Sleeping
Sleeping
| import os | |
| from typing import List, Optional | |
| from pydantic_settings import BaseSettings | |
| from pydantic import Field | |
| class Settings(BaseSettings): | |
| # Application | |
| app_name: str = Field(default="ChatCal.ai", env="APP_NAME") | |
| app_env: str = Field(default="development", env="APP_ENV") | |
| app_host: str = Field(default="0.0.0.0", env="APP_HOST") | |
| app_port: int = Field(default=8000, env="APP_PORT") | |
| # Groq API (primary) | |
| groq_api_key: str = Field(..., env="GROQ_API_KEY") | |
| # Anthropic (optional - fallback) | |
| anthropic_api_key: Optional[str] = Field(None, env="ANTHROPIC_API_KEY") | |
| # Gemini API (optional - fallback) | |
| gemini_api_key: Optional[str] = Field(None, env="GEMINI_API_KEY") | |
| # Google Calendar | |
| google_calendar_id: str = Field(default="pgits.job@gmail.com", env="GOOGLE_CALENDAR_ID") | |
| google_client_id: Optional[str] = Field(None, env="GOOGLE_CLIENT_ID") | |
| google_client_secret: Optional[str] = Field(None, env="GOOGLE_CLIENT_SECRET") | |
| google_credentials_path: str = Field(default="credentials/google_calendar_credentials.json", env="GOOGLE_CREDENTIALS_PATH") | |
| # OAuth Token Storage (for local development) | |
| google_access_token: Optional[str] = Field(None, env="GOOGLE_ACCESS_TOKEN") | |
| google_refresh_token: Optional[str] = Field(None, env="GOOGLE_REFRESH_TOKEN") | |
| google_token_expiry: Optional[str] = Field(None, env="GOOGLE_TOKEN_EXPIRY") | |
| # Redis | |
| redis_url: str = Field(default="redis://localhost:6379/0", env="REDIS_URL") | |
| # Session Backend (redis or jwt) | |
| session_backend: str = Field(default="redis", env="SESSION_BACKEND") | |
| # Security | |
| secret_key: str = Field(..., env="SECRET_KEY") | |
| cors_origins: List[str] = Field(default=["http://localhost:3000", "http://localhost:8000"], env="CORS_ORIGINS") | |
| # Timezone | |
| default_timezone: str = Field(default="America/New_York", env="DEFAULT_TIMEZONE") | |
| # Chat Settings | |
| max_conversation_history: int = Field(default=20, env="MAX_CONVERSATION_HISTORY") | |
| session_timeout_minutes: int = Field(default=10, env="SESSION_TIMEOUT_MINUTES") # 10 minutes max | |
| # HuggingFace Settings | |
| tokenizers_parallelism: Optional[str] = Field(default="false", env="TOKENIZERS_PARALLELISM") | |
| # Peter's Contact Information | |
| my_phone_number: str = Field(..., env="MY_PHONE_NUMBER") | |
| my_email_address: str = Field(..., env="MY_EMAIL_ADDRESS") | |
| # Email Service Configuration | |
| smtp_server: str = Field(default="smtp.gmail.com", env="SMTP_SERVER") | |
| smtp_port: int = Field(default=587, env="SMTP_PORT") | |
| smtp_username: Optional[str] = Field(None, env="SMTP_USERNAME") | |
| smtp_password: Optional[str] = Field(None, env="SMTP_PASSWORD") | |
| email_from_name: str = Field(default="ChatCal.ai", env="EMAIL_FROM_NAME") | |
| # Testing Configuration | |
| testing_mode: bool = Field(default=True, env="TESTING_MODE") # Set to True to ignore Peter's email validation | |
| # Default Appointment Settings | |
| default_appointment_title: str = Field(default="VoiceCal Appt", env="DEFAULT_APPOINTMENT_TITLE") | |
| # STT Service Settings (Direct Connection) | |
| stt_service_wss_url: str = Field(default="wss://pgits-stt-gpu-service-v3.hf.space/ws", env="STT_SERVICE_WSS_URL") | |
| stt_websocket_timeout: int = Field(default=30, env="STT_WEBSOCKET_TIMEOUT") | |
| stt_audio_chunk_size: int = Field(default=1280, env="STT_AUDIO_CHUNK_SIZE") # 80ms at 16kHz | |
| stt_sample_rate: int = Field(default=16000, env="STT_SAMPLE_RATE") # v3 service native rate | |
| # STT UI Settings | |
| stt_listening_indicator: bool = Field(default=True, env="STT_LISTENING_INDICATOR") | |
| stt_auto_submit: bool = Field(default=False, env="STT_AUTO_SUBMIT") # Future feature | |
| stt_silence_threshold: float = Field(default=2.5, env="STT_SILENCE_THRESHOLD") # seconds | |
| class Config: | |
| env_file = ".env" | |
| env_file_encoding = "utf-8" | |
| case_sensitive = False | |
| extra = "ignore" # Allow extra environment variables | |
| settings = Settings() |