diff --git a/app/config.py b/app/config.py index dc701d8..fa91515 100644 --- a/app/config.py +++ b/app/config.py @@ -1,11 +1,9 @@ """ FILE: app/config.py -DESCRIPTION: Zentrale Pydantic-Konfiguration. Enthält Parameter für Qdrant, - Embeddings, Ollama, Google GenAI und OpenRouter. - WP-20: Optimiert für Hybrid-Cloud Modus und Vektor-Synchronisation. - WP-22: Integration von Change-Detection und Vocab-Paths. -FIX: Hinzufügen von load_dotenv() und Bereinigung redundanter Modell-Variablen. -VERSION: 0.6.4 +DESCRIPTION: Zentrale Pydantic-Konfiguration. + WP-20: Hybrid-Cloud Modus Support (OpenRouter/Gemini/Ollama). + FIX: Update auf Gemini 2.5 Serie & Optimierung für Gemma 2 Durchsatz. +VERSION: 0.6.6 STATUS: Active DEPENDENCIES: os, functools, pathlib, python-dotenv """ @@ -16,34 +14,36 @@ from pathlib import Path from dotenv import load_dotenv # WP-20: Lade Umgebungsvariablen aus der .env Datei -# Muss zwingend vor dem Zugriff auf os.getenv erfolgen! -load_dotenv() +# override=True garantiert, dass Änderungen in der .env immer Vorrang haben. +load_dotenv(override=True) class Settings: # --- Qdrant Datenbank --- QDRANT_URL: str = os.getenv("QDRANT_URL", "http://127.0.0.1:6333") QDRANT_API_KEY: str | None = os.getenv("QDRANT_API_KEY") - COLLECTION_PREFIX: str = os.getenv("MINDNET_PREFIX", "mindnet") + COLLECTION_PREFIX: str = os.getenv("MINDNET_PREFIX", "mindnet_dev") - # WP-22: Vektor-Dimension muss mit dem Embedding-Modell (nomic) übereinstimmen + # WP-22: Vektor-Dimension für das Embedding-Modell (nomic) VECTOR_SIZE: int = int(os.getenv("VECTOR_DIM", "768")) DISTANCE: str = os.getenv("MINDNET_DISTANCE", "Cosine") - # --- Lokale Embeddings (Ollama & Sentence-Transformers) --- + # --- Lokale Embeddings --- EMBEDDING_MODEL: str = os.getenv("MINDNET_EMBEDDING_MODEL", "nomic-embed-text") MODEL_NAME: str = os.getenv("MINDNET_MODEL", "sentence-transformers/all-MiniLM-L6-v2") # --- WP-20 Hybrid LLM Provider --- - # Erlaubt: "ollama" | "gemini" | "openrouter" - MINDNET_LLM_PROVIDER: str = os.getenv("MINDNET_LLM_PROVIDER", "ollama").lower() + # "openrouter" ist primär für den Ingest-Turbo mit Gemma 2 empfohlen. + MINDNET_LLM_PROVIDER: str = os.getenv("MINDNET_LLM_PROVIDER", "openrouter").lower() - # Google AI Studio (Direkt-Integration) + # Google AI Studio (Fallback auf 2.5-Serie) GOOGLE_API_KEY: str | None = os.getenv("GOOGLE_API_KEY") - GEMINI_MODEL: str = os.getenv("MINDNET_GEMINI_MODEL", "gemini-1.5-flash") + # "gemini-2.5-flash-lite" ist die skalierbare 2025-Alternative für hohe Last. + GEMINI_MODEL: str = os.getenv("MINDNET_GEMINI_MODEL", "gemini-2.5-flash-lite") - # OpenRouter Integration (Primärlösung für Turbo-Ingest) + # OpenRouter Integration (openai/gpt-oss-20b:free oder gemma-2) OPENROUTER_API_KEY: str | None = os.getenv("OPENROUTER_API_KEY") - OPENROUTER_MODEL: str = os.getenv("OPENROUTER_MODEL", "openai/gpt-oss-20b:free") + # "google/gemma-2-9b-it:free" bietet hohe Kapazität bei Kostenfreiheit. + OPENROUTER_MODEL: str = os.getenv("OPENROUTER_MODEL", "google/gemma-2-9b-it:free") LLM_FALLBACK_ENABLED: bool = os.getenv("MINDNET_LLM_FALLBACK", "true").lower() == "true" @@ -52,21 +52,21 @@ class Settings: LLM_MODEL: str = os.getenv("MINDNET_LLM_MODEL", "phi3:mini") PROMPTS_PATH: str = os.getenv("MINDNET_PROMPTS_PATH", "config/prompts.yaml") - # --- WP-06 / WP-14 Performance & Last-Steuerung --- + # --- Performance & Last-Steuerung --- LLM_TIMEOUT: float = float(os.getenv("MINDNET_LLM_TIMEOUT", "300.0")) DECISION_CONFIG_PATH: str = os.getenv("MINDNET_DECISION_CONFIG", "config/decision_engine.yaml") BACKGROUND_LIMIT: int = int(os.getenv("MINDNET_LLM_BACKGROUND_LIMIT", "2")) # --- System-Pfade & Ingestion-Logik --- DEBUG: bool = os.getenv("DEBUG", "false").lower() == "true" - MINDNET_VAULT_ROOT: str = os.getenv("MINDNET_VAULT_ROOT", "./vault") + MINDNET_VAULT_ROOT: str = os.getenv("MINDNET_VAULT_ROOT", "./vault_master") MINDNET_TYPES_FILE: str = os.getenv("MINDNET_TYPES_FILE", "config/types.yaml") - MINDNET_VOCAB_PATH: str = os.getenv("MINDNET_VOCAB_PATH", "vault/_system/dictionary/edge_vocabulary.md") + MINDNET_VOCAB_PATH: str = os.getenv("MINDNET_VOCAB_PATH", "/mindnet/vault/mindnet/_system/dictionary/edge_vocabulary.md") - # WP-22: 'full' aktiviert Multi-Hash Change Detection + # WP-22: 'full' für Multi-Hash Change Detection CHANGE_DETECTION_MODE: str = os.getenv("MINDNET_CHANGE_DETECTION_MODE", "full") - # --- WP-04 Retriever Gewichte (Finetuning des Scorings) --- + # --- WP-04 Retriever Gewichte --- RETRIEVER_W_SEM: float = float(os.getenv("MINDNET_WP04_W_SEM", "0.70")) RETRIEVER_W_EDGE: float = float(os.getenv("MINDNET_WP04_W_EDGE", "0.25")) RETRIEVER_W_CENT: float = float(os.getenv("MINDNET_WP04_W_CENT", "0.05")) @@ -76,5 +76,5 @@ class Settings: @lru_cache def get_settings() -> Settings: - """Gibt eine gecachte Instanz der Einstellungen zurück (Singleton-Muster).""" + """Gibt die zentralen Einstellungen als Singleton zurück.""" return Settings() \ No newline at end of file