#!/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", ""), }