diff --git a/app/core/env_vars.py b/app/core/env_vars.py new file mode 100644 index 0000000..b1f2d4b --- /dev/null +++ b/app/core/env_vars.py @@ -0,0 +1,103 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +Datei: app/core/env_vars.py +Version: 1.1.0 (2025-11-08) + +Zweck + Einheitliche Auflösung von ENV-Variablen (Prefix, Qdrant, Embeddings, Hashing) + mit Abwärtskompatibilität. + +Grundsatz + - Für Qdrant-Funktionen ist 'COLLECTION_PREFIX' der Primärschlüssel. + - 'MINDNET_PREFIX' bleibt für App-/UI-/Exporter-Kontexte nutzbar. + - Fallbacks sorgen dafür, dass ältere Umgebungen weiter funktionieren. + +Wichtig + - Lädt optional eine .env (wenn python-dotenv verfügbar ist). + - Überschreibt keine bereits gesetzten OS-Variablen (override=False). +""" +from __future__ import annotations + +import os +from typing import Optional, Dict + +# Optional: .env automatisch laden (ohne Hard-Fail, falls nicht vorhanden) +try: + from dotenv import load_dotenv, find_dotenv # type: ignore + _p = find_dotenv() + if _p: + load_dotenv(_p, override=False) +except Exception: + pass + +# -------- Prefix-Auflösung -------- + +def get_collection_prefix(cli_override: Optional[str] = None) -> str: + """ + Für Qdrant-relevante Funktionen: + 1) CLI-Override (--prefix) + 2) ENV COLLECTION_PREFIX + 3) ENV MINDNET_PREFIX (Fallback) + 4) 'mindnet' (Default) + """ + if cli_override and str(cli_override).strip(): + return str(cli_override).strip() + return ( + os.getenv("COLLECTION_PREFIX") + or os.getenv("MINDNET_PREFIX") + or "mindnet" + ) + +def get_mindnet_prefix(cli_override: Optional[str] = None) -> str: + """ + Für App-/UI-/Exporter-Kontexte: + 1) CLI-Override (--prefix) + 2) ENV MINDNET_PREFIX + 3) ENV COLLECTION_PREFIX (Fallback) + 4) 'mindnet' + """ + if cli_override and str(cli_override).strip(): + return str(cli_override).strip() + return ( + os.getenv("MINDNET_PREFIX") + or os.getenv("COLLECTION_PREFIX") + or "mindnet" + ) + +def get_prefix(cli_override: Optional[str] = None, target: str = "qdrant") -> str: + """ + Universelle Hülle (abwärtskompatibel): + target='qdrant' -> get_collection_prefix + target='app' -> get_mindnet_prefix + """ + if target.lower() == "app": + return get_mindnet_prefix(cli_override) + return get_collection_prefix(cli_override) + +# -------- Qdrant / Embeddings / Hashing -------- + +def get_qdrant_url(default: str = "http://127.0.0.1:6333") -> str: + return os.getenv("QDRANT_URL", default) + +def get_qdrant_api_key(default: str = "") -> str: + return os.getenv("QDRANT_API_KEY", default) + +def get_vector_dim(default: int = 384) -> int: + try: + return int(os.getenv("VECTOR_DIM", str(default))) + except Exception: + return default + +def get_embed_url(default: Optional[str] = None) -> Optional[str]: + return os.getenv("EMBED_URL", default) + +def get_hash_env() -> Dict[str, str]: + """ + Liefert die Hash-Konfiguration (nur Aggregation; die Auswertung bleibt in den Skripten). + """ + return { + "MINDNET_HASH_COMPARE": os.getenv("MINDNET_HASH_COMPARE", ""), + "MINDNET_HASH_SOURCE": os.getenv("MINDNET_HASH_SOURCE", ""), + "MINDNET_HASH_NORMALIZE": os.getenv("MINDNET_HASH_NORMALIZE", ""), + }