"""Configurazione statica del Memory Gateway letta dall'ambiente.""" from __future__ import annotations import logging import os from collections import Counter from typing import Any QDRANT_URL = os.environ.get("QDRANT_URL", "http://127.0.0.1:6333") QDRANT_API_KEY = os.environ.get("QDRANT_API_KEY", "") EMBED_API = os.environ.get("EMBED_API", "ollama") EMBED_URL = os.environ.get("EMBED_URL", os.environ.get("OLLAMA_URL", "http://127.0.0.1:11434")) EMBED_MODEL = os.environ.get("EMBED_MODEL", "bge-m3") EMBED_API_KEY = os.environ.get("EMBED_API_KEY", "") EMBED_DIM = int(os.environ.get("EMBED_DIM", "1024")) COLLECTION = os.environ.get("COLLECTION", "memories") API_KEYS: set[str] = {k.strip() for k in os.environ.get("API_KEYS", "").split(",") if k.strip()} RATE_LIMIT_PER_MIN = int(os.environ.get("RATE_LIMIT_PER_MIN", "120")) MAX_TEXT_LEN = int(os.environ.get("MAX_TEXT_LEN", "8000")) GUARDRAIL_ENABLED = os.environ.get("GUARDRAIL_ENABLED", "true").lower() == "true" GUARDRAIL_BLOCK_THRESHOLD = float(os.environ.get("GUARDRAIL_BLOCK_THRESHOLD", "0.85")) GUARDRAIL_WARN_THRESHOLD = float(os.environ.get("GUARDRAIL_WARN_THRESHOLD", "0.70")) GUARDRAIL_VERSION = "similarity-v1" GIT_COMMIT = os.environ.get("GIT_COMMIT", "unknown").strip() GATEWAY_VERSION = os.environ.get("GATEWAY_VERSION", "2.9.0").strip() VM_PUSH_URL = os.environ.get("VM_PUSH_URL", "http://host.docker.internal:8428/api/v1/import/prometheus") VM_PUSH_INTERVAL = int(os.environ.get("VM_PUSH_INTERVAL", "30")) METRICS_ENABLED = os.environ.get("METRICS_ENABLED", "true").lower() == "true" logging.basicConfig(level=logging.INFO, format="%(asctime)s %(levelname)s %(message)s") log = logging.getLogger("memory-gateway") SPARSE_VECTOR_NAME = "bm25" # Re-ranking: catena di fallback resiliente (frigate → brain locale). # Il default nel codice è OFF; il deploy imposta RERANK_ENABLED=true e la catena. RERANK_ENABLED = os.environ.get("RERANK_ENABLED", "false").lower() == "true" RERANK_MODEL = os.environ.get("RERANK_MODEL", "bge-reranker-v2-m3") RERANK_CANDIDATES = int(os.environ.get("RERANK_CANDIDATES", "16")) RERANK_TIMEOUT_MS = int(os.environ.get("RERANK_TIMEOUT_MS", "10000")) RERANK_RETRY_COOLDOWN_S = int(os.environ.get("RERANK_RETRY_COOLDOWN_S", "60")) RERANK_CHAIN = os.environ.get("RERANK_CHAIN", "") _metrics: dict[str, Any] = { "requests": Counter(), "duration_sum": Counter(), "duration_count": Counter(), "errors": Counter(), "search_queries": 0, "search_hits": 0, "rerank_calls": Counter(), "rerank_duration_sum": Counter(), }