from functools import lru_cache from pathlib import Path from pydantic import Field, HttpUrl from pydantic_settings import BaseSettings, SettingsConfigDict BASE_DIR = Path(__file__).resolve().parent.parent class Settings(BaseSettings): model_config = SettingsConfigDict( env_file=BASE_DIR / ".env", env_file_encoding="utf-8", extra="ignore", ) app_name: str = "FALZH" environment: str = "development" app_timezone: str = "Asia/Aden" log_level: str = "INFO" supabase_url: HttpUrl supabase_service_role_key: str = Field(min_length=1) jina_api_key: str = Field(min_length=1) jina_embedding_model: str = "jina-embeddings-v5-text-small" jina_embedding_dimensions: int = 1024 jina_embedding_endpoint: str = "https://api.jina.ai/v1/embeddings" jina_query_task: str = "retrieval.query" jina_passage_task: str = "retrieval.passage" groq_api_key: str = Field(min_length=1) groq_model: str = Field(min_length=1) groq_api_key_2: str | None = None groq_model_2: str | None = None google_ai_api_key: str | None = None google_ai_model: str | None = None openrouter_api_key: str = Field(min_length=1) openrouter_model: str = Field(min_length=1) ai_temperature: float = 0.2 ai_max_tool_iterations: int = 3 request_timeout_seconds: float = 20.0 whatsapp_graph_url: str = "https://graph.facebook.com" whatsapp_api_version: str = "v20.0" whatsapp_verify_token: str = Field(min_length=1) whatsapp_app_secret: str = Field(min_length=1) whatsapp_access_token: str = Field(min_length=1) whatsapp_phone_number_id: str = Field(min_length=1) admin_api_key: str = Field(min_length=1) default_country_code: str = "967" @lru_cache def get_settings() -> Settings: return Settings()