vivekchakraverty's picture
Deploy CPU-first GameMaster Design Copilot
68d076e verified
Raw
History Blame Contribute Delete
2.49 kB
"""Runtime configuration for the GameMaster Design Copilot."""
from __future__ import annotations
import os
from dataclasses import dataclass
from pathlib import Path
ROOT_DIR = Path(__file__).resolve().parents[1]
MODES = {
"brainstorm": "Generate several usable design directions, then recommend one.",
"critique": "Identify weaknesses, missing constraints, and concrete fixes.",
"balance": "Analyze incentives, exploits, progression curves, and tuning levers.",
"level_design": "Focus on spatial flow, onboarding, pacing, affordances, and readability.",
"gm_session": "Prioritize table-ready content, pacing, rulings, NPCs, scenes, and improvisation.",
}
DEFAULT_EMBEDDING_MODEL = "sentence-transformers/all-MiniLM-L6-v2"
DEFAULT_LLM_REPO = "mistralai/Ministral-3-3B-Instruct-2512-GGUF"
DEFAULT_LLM_FILE = "Ministral-3-3B-Instruct-2512-Q4_K_M.gguf"
def _bool_env(name: str, default: bool = False) -> bool:
value = os.getenv(name)
if value is None:
return default
return value.strip().lower() in {"1", "true", "yes", "on"}
def _int_env(name: str, default: int) -> int:
value = os.getenv(name)
if value is None:
return default
try:
return int(value)
except ValueError:
return default
@dataclass(frozen=True)
class Settings:
"""Environment-backed settings with CPU-safe defaults."""
root_dir: Path = ROOT_DIR
sources_path: Path = Path(os.getenv("GMC_SOURCES_PATH", str(ROOT_DIR / "sources.yaml")))
index_dir: Path = Path(os.getenv("GMC_INDEX_DIR", str(ROOT_DIR / "data" / "index")))
embedding_backend: str = os.getenv("GMC_EMBEDDING_BACKEND", "auto")
embedding_model: str = os.getenv("GMC_EMBEDDING_MODEL", DEFAULT_EMBEDDING_MODEL)
embedding_dimensions: int = _int_env("GMC_EMBEDDING_DIMENSIONS", 384)
llm_provider: str = os.getenv("GMC_LLM_PROVIDER", "auto")
enable_local_llm: bool = _bool_env("GMC_ENABLE_LOCAL_LLM", False)
llm_model_repo: str = os.getenv("GMC_LLM_MODEL_REPO", DEFAULT_LLM_REPO)
llm_model_file: str = os.getenv("GMC_LLM_MODEL_FILE", DEFAULT_LLM_FILE)
llm_model_path: str = os.getenv("GMC_LLM_MODEL_PATH", "")
llm_context_window: int = _int_env("GMC_LLM_CONTEXT_WINDOW", 4096)
llm_max_tokens: int = _int_env("GMC_LLM_MAX_TOKENS", 768)
retrieval_min_score: float = float(os.getenv("GMC_RETRIEVAL_MIN_SCORE", "0.08"))
def get_settings() -> Settings:
"""Return current process settings."""
return Settings()