All checks were successful
Deploy mindnet to llm-node / deploy (push) Successful in 3s
104 lines
3.1 KiB
Python
104 lines
3.1 KiB
Python
#!/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", ""),
|
|
}
|