from pydantic_settings import BaseSettings from pathlib import Path class Settings(BaseSettings): app_name: str = "GWÖ-Antragsprüfer" app_version: str = "1.0.2" prompt_version: str = "v4.1" # Paths base_dir: Path = Path(__file__).resolve().parent.parent data_dir: Path = base_dir / "data" reports_dir: Path = base_dir / "reports" kontext_dir: Path = Path(__file__).resolve().parent / "kontext" db_path: Path = data_dir / "gwoe-antraege.db" # LLM dashscope_api_key: str = "" dashscope_base_url: str = "https://dashscope-intl.aliyuncs.com/compatible-mode/v1" llm_model_default: str = "qwen-plus-latest" llm_model_premium: str = "qwen-max" # Embedding-Modell: neue Rows werden immer mit embedding_model_write geschrieben, # Lese-Queries filtern nach embedding_model_read. Zwei Settings erlauben einen # Zero-Downtime-Switch von v3 auf v4 (siehe Issue #123): # Phase 1: write=v4, read=v3 → Prod läuft weiter, Reindex füllt v4-Rows # Phase 2: write=v4, read=v4 → Switch aktiv, alte v3-Rows können gelöscht werden embedding_model_write: str = "text-embedding-v4" embedding_model_read: str = "text-embedding-v3" embedding_dimensions: int = 1024 # Keycloak keycloak_url: str = "" keycloak_realm: str = "" keycloak_client_id: str = "" keycloak_admin_user: str = "" keycloak_admin_password: str = "" # Server host: str = "0.0.0.0" port: int = 8000 # SMTP (Issue #124 E-Mail-Benachrichtigung) # 1blu: smtp.1blu.de:465 SSL, username = Postfachname (NICHT E-Mail!), # z.B. "q294440_0-gwoe-toppyr". Passwort via ENV SMTP_PASSWORD. smtp_host: str = "" smtp_port: int = 465 smtp_user: str = "" smtp_password: str = "" smtp_from_email: str = "noreply@toppyr.de" smtp_from_name: str = "GWÖ-Antragsprüfer" # URL-Basis für Links in Mails (Unsubscribe, Detail-Ansicht) base_url: str = "https://gwoe.toppyr.de" # Token für Unsubscribe-Links (HMAC-Secret) unsubscribe_secret: str = "change-me-in-prod" # Gitea-API-Token für Feedback-Issues (Issue #feedback-widget) # Wert in .env: GITEA_TOKEN= # Token-Quelle: cat ~/.claude/.gitea-token gitea_token: str = "" gitea_api_url: str = "https://repo.toppyr.de/api/v1" gitea_repo_owner: str = "tobias" gitea_repo_name: str = "gwoe-antragspruefer" model_config = {"env_file": ".env", "env_file_encoding": "utf-8"} settings = Settings()