SupraDashboard / src /inference /__init__.py
Tianyi-Billy-Ma
Deploy: simplify codebase (dead-code removal, behavior-preserving)
1727091
Raw
History Blame Contribute Delete
2.25 kB
"""Inference backends — dispatches to OpenRouter (UI server) or Codex (local).
Backend selection (`active_backend`):
* On a Hugging Face Space (``SPACE_ID``/``SPACE_HOST`` set) -> ALWAYS ``openrouter``.
A Space can't hold codex's interactive OAuth and the codex CLI isn't installed there.
* Otherwise -> env ``INFERENCE_BACKEND`` (``openrouter`` | ``codex``), default ``openrouter``.
Local computing sets ``INFERENCE_BACKEND=codex`` in ``.env`` to bill the ChatGPT
subscription via the codex CLI instead of the OpenRouter API.
Both backends expose the same surface, so callers (ui/cache.py, ui/app.py) are unchanged.
"""
from __future__ import annotations
import os
_BACKENDS = {"openrouter", "codex"}
def active_backend() -> str:
"""Resolve the inference backend for this process (see module docstring)."""
if os.environ.get("SPACE_ID") or os.environ.get("SPACE_HOST"):
return "openrouter"
name = os.environ.get("INFERENCE_BACKEND", "openrouter").strip().lower()
return name if name in _BACKENDS else "openrouter"
def backend_label() -> str:
"""Human label for the active backend (UI health line)."""
return "Codex" if active_backend() == "codex" else "OpenRouter"
def _backend():
if active_backend() == "codex":
from inference import codex as module
else:
from inference import openrouter as module
return module
def run_inference(
system_prompt: str, user_prompt: str, *, model: str | None = None, timeout: float | None = None
) -> str:
"""Run one completion through the active backend. ``timeout`` is forwarded only when
given, so each backend applies its own default (OpenRouter 180s, Codex 900s)."""
kwargs: dict = {"model": model}
if timeout is not None:
kwargs["timeout"] = timeout
return _backend().run_inference(system_prompt, user_prompt, **kwargs)
def available_models() -> list[str]:
return _backend().available_models()
def default_model() -> str:
return _backend().default_model()
def healthcheck() -> tuple[bool, str]:
return _backend().healthcheck()
__all__ = [
"active_backend",
"backend_label",
"available_models",
"default_model",
"healthcheck",
"run_inference",
]