df591e4e01
Embeddings shared LOCAL_BASE_URL with the local chat backend (the 3090's Ollama), so the 3090 being powered off killed all chat (every turn embeds to recall + to store). Add a separate EMBED_BASE_URL (defaults to LOCAL_BASE_URL, so existing setups are unchanged) and use it in llm.embed. Deployed: a user-level Ollama (CPU) now runs nomic-embed-text on lyra-cortex itself; EMBED_BASE_URL points at 127.0.0.1:11434 while LOCAL_BASE_URL still points the local chat backend at the 3090. Local embeddings verified identical to the 3090's (cosine 0.999994, 768-dim) so existing vectors stay valid — no re-embed. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
48 lines
2.0 KiB
Python
48 lines
2.0 KiB
Python
"""Environment-driven configuration."""
|
|
from __future__ import annotations
|
|
|
|
import os
|
|
from dataclasses import dataclass
|
|
from pathlib import Path
|
|
|
|
from dotenv import load_dotenv
|
|
|
|
load_dotenv()
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class Config:
|
|
local_base_url: str
|
|
local_model: str
|
|
mi50_base_url: str # OpenAI-compatible llama.cpp server on the MI50 box
|
|
mi50_model: str
|
|
openai_api_key: str
|
|
cloud_model: str # cloud model for bulk/consolidation work (cheap)
|
|
chat_model: str # cloud model for live chat (stronger; persona fidelity)
|
|
embed_backend: str # "cloud" (OpenAI) or "local" (Ollama)
|
|
embed_model: str # OpenAI embedding model
|
|
local_embed_model: str # Ollama embedding model
|
|
embed_base_url: str # Ollama endpoint for embeddings (own box, decoupled from local chat)
|
|
summary_backend: str # "local" or "cloud" — backend used to compact memory
|
|
db_path: Path
|
|
|
|
|
|
def load() -> Config:
|
|
return Config(
|
|
local_base_url=os.getenv("LOCAL_BASE_URL", "http://localhost:11434"),
|
|
local_model=os.getenv("LOCAL_MODEL", "qwen2.5:7b-instruct"),
|
|
mi50_base_url=os.getenv("MI50_BASE_URL", "http://10.0.0.42:8080/v1"),
|
|
mi50_model=os.getenv("MI50_MODEL", "local-gpu"),
|
|
openai_api_key=os.getenv("OPENAI_API_KEY", ""),
|
|
cloud_model=os.getenv("CLOUD_MODEL", "gpt-4o-mini"),
|
|
chat_model=os.getenv("CHAT_MODEL", "gpt-4o"),
|
|
embed_backend=os.getenv("EMBED_BACKEND", "cloud").lower(),
|
|
embed_model=os.getenv("EMBED_MODEL", "text-embedding-3-small"),
|
|
local_embed_model=os.getenv("LOCAL_EMBED_MODEL", "nomic-embed-text"),
|
|
# Embeddings can live on their own always-on box, separate from the local
|
|
# chat backend. Defaults to LOCAL_BASE_URL so existing setups are unchanged.
|
|
embed_base_url=os.getenv("EMBED_BASE_URL", os.getenv("LOCAL_BASE_URL", "http://localhost:11434")),
|
|
summary_backend=os.getenv("SUMMARY_BACKEND", "local").lower(),
|
|
db_path=Path(os.getenv("LYRA_DB_PATH", "data/lyra.db")),
|
|
)
|