feat: LLM router with local (Ollama) and cloud (OpenAI) backends
- lyra.config.load() reads env into a frozen Config dataclass - lyra.llm.complete(messages, backend) routes to Ollama /api/chat or OpenAI chat completions - lyra.llm.embed(texts) calls OpenAI embeddings - .env.example switched from Anthropic to OpenAI to match available key
This commit is contained in:
@@ -0,0 +1,31 @@
|
||||
"""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
|
||||
openai_api_key: str
|
||||
cloud_model: str
|
||||
embed_model: str
|
||||
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"),
|
||||
openai_api_key=os.getenv("OPENAI_API_KEY", ""),
|
||||
cloud_model=os.getenv("CLOUD_MODEL", "gpt-4o-mini"),
|
||||
embed_model=os.getenv("EMBED_MODEL", "text-embedding-3-small"),
|
||||
db_path=Path(os.getenv("LYRA_DB_PATH", "data/lyra.db")),
|
||||
)
|
||||
Reference in New Issue
Block a user