ObjectverseDiary / src /config.py
qqyule's picture
Deploy Hub GGUF downloader runtime
c45600f verified
"""Shared configuration for the initial mock MVP."""
import os
from collections.abc import Mapping
from dataclasses import dataclass
from pathlib import Path
APP_TITLE = "Objectverse Diary"
APP_SUBTITLE = "Every object has a secret life. / 每个物品都有秘密人生。"
APP_VERSION = "0.1.0-mock"
PERSONALITY_MODES = [
"Cynical",
"Dramatic",
"Lonely",
"Philosopher",
"Romantic",
]
DEFAULT_MODE = "Cynical"
@dataclass(frozen=True)
class RuntimeSettings:
vision_backend: str
text_backend: str
text_model_path: str
text_model_repo_id: str
text_model_filename: str
text_model_revision: str
vision_model_id: str
trace_output_dir: Path
def get_runtime_settings(environ: Mapping[str, str] | None = None) -> RuntimeSettings:
env = os.environ if environ is None else environ
return RuntimeSettings(
vision_backend=env.get("OBJECTVERSE_VISION_BACKEND", "mock"),
text_backend=env.get("OBJECTVERSE_TEXT_BACKEND", "mock"),
text_model_path=env.get("TEXT_MODEL_PATH", ""),
text_model_repo_id=env.get("TEXT_MODEL_REPO_ID", ""),
text_model_filename=env.get("TEXT_MODEL_FILENAME", ""),
text_model_revision=env.get("TEXT_MODEL_REVISION", ""),
vision_model_id=env.get("VISION_MODEL_ID", ""),
trace_output_dir=Path(env.get("TRACE_OUTPUT_DIR", "data/traces")),
)
def runtime_status(settings: RuntimeSettings | None = None) -> dict[str, str]:
current = settings or get_runtime_settings()
vision_backend = current.vision_backend.strip().lower()
text_backend = current.text_backend.strip().lower()
vision = (
"mock object understanding"
if vision_backend == "mock"
else f"{vision_backend} object understanding"
)
text = "mock persona and diary generation"
if text_backend in {"llama-cpp", "llama_cpp", "llamacpp"}:
text = "llama-cpp text generation"
elif text_backend != "mock":
text = f"{text_backend} text generation"
runtime_parts: list[str] = []
if vision_backend != "mock":
runtime_parts.append(f"vision model id: {current.vision_model_id or '[not configured]'}")
if text_backend == "mock":
runtime_parts.append("no llama.cpp model connected yet")
else:
runtime_parts.append(f"text model source: {_text_model_source_status(current)}")
runtime = "; ".join(runtime_parts)
return {"vision": vision, "text": text, "runtime": runtime}
def _text_model_source_status(settings: RuntimeSettings) -> str:
if settings.text_model_path.strip():
return "[configured external GGUF]"
repo_id = settings.text_model_repo_id.strip()
filename = settings.text_model_filename.strip()
if repo_id and filename:
revision = settings.text_model_revision.strip()
suffix = f"@{revision}" if revision else ""
return f"Hub GGUF: {repo_id}/{filename}{suffix}"
return "[not configured]"
SETTINGS = get_runtime_settings()
TRACE_DIR = SETTINGS.trace_output_dir
MODEL_RUNTIME_STATUS = runtime_status(SETTINGS)