Bisher wurden Issues aus dem Feedback-Widget unter Tobias' Identitaet angelegt (GITEA_TOKEN ist sein persoenlicher Token). Folge: echte Tobias-Issues und User-Feedback waren in der Authoren-Spalte nicht mehr unterscheidbar. Neuer Gitea-Account 'gwoe-feedback' (Display: Gast-Feedback) bekommt seinen eigenen Token mit Scope write:issue+write:repository, ist Collaborator mit write-Perm auf das Repo. Code nimmt diesen Token bevorzugt; wenn er leer ist, faellt er auf gitea_token zurueck (Rueckwaerts-Kompat fuer noch-nicht-konfigurierte Umgebungen). ENV: GITEA_FEEDBACK_TOKEN — in beide Compose-Files reingereicht, in beide .env-Files eingetragen.
80 lines
3.1 KiB
Python
80 lines
3.1 KiB
Python
from pydantic_settings import BaseSettings
|
|
from pathlib import Path
|
|
|
|
|
|
class Settings(BaseSettings):
|
|
app_name: str = "GWÖ-Antragsprüfer"
|
|
app_version: str = "2.0.0"
|
|
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 (Tobias' persoenlicher Token) — fuer alle internen
|
|
# Operationen ausser User-Feedback (siehe gitea_feedback_token).
|
|
# Wert in .env: GITEA_TOKEN=<token>
|
|
# Token-Quelle: cat ~/.claude/.gitea-token
|
|
gitea_token: str = ""
|
|
# Separater Token fuer das Feedback-Widget. Authentisiert sich als
|
|
# eigener Account (z.B. `gwoe-feedback`), damit User-Feedback-Issues
|
|
# nicht unter Tobias' Identitaet erscheinen — saubere Trennung
|
|
# zwischen Owner und externen Eingaben.
|
|
# Wert in .env: GITEA_FEEDBACK_TOKEN=<token>
|
|
# Fallback: wenn leer, wird gitea_token verwendet (Rueckwaerts-Kompat).
|
|
gitea_feedback_token: str = ""
|
|
gitea_api_url: str = "https://repo.toppyr.de/api/v1"
|
|
gitea_repo_owner: str = "tobias"
|
|
gitea_repo_name: str = "gwoe-antragspruefer"
|
|
# Komma-getrennte Liste zusätzlicher Labels, die Feedback-Issues bekommen.
|
|
# Auf Dev: "feedback,dev" — damit Issues aus gwoe-dev.toppyr.de unterscheidbar sind.
|
|
gitea_feedback_labels: str = "feedback"
|
|
|
|
model_config = {"env_file": ".env", "env_file_encoding": "utf-8"}
|
|
|
|
|
|
settings = Settings()
|