AlaBoussoffara's picture
organized code and set up chainlit for demos
2d52135
Raw
History Blame Contribute Delete
1.52 kB
from __future__ import annotations
import os
from fastapi import FastAPI, HTTPException
from omegaconf import DictConfig
from mini_transformer.inference import run_inference
from mini_transformer.model_loader import (
CONFIG_DIR_ENV,
CONFIG_NAME_ENV,
MODEL_NAME_ENV,
compose_config_from_dir,
compose_model_config,
ensure_models_root,
list_model_names,
)
app = FastAPI(title="Mini-Transformer Inference API")
@app.get("/healthz")
def healthz():
return {"status": "ok"}
@app.get("/generate")
def generate(text: str | None = None):
config_dir = os.environ.get(CONFIG_DIR_ENV)
config_name = os.environ.get(CONFIG_NAME_ENV, "config_inference")
if config_dir:
cfg: DictConfig = compose_config_from_dir(config_dir, config_name=config_name)
else:
ensure_models_root()
model_name = os.environ.get(MODEL_NAME_ENV)
if not model_name:
names = list_model_names()
if not names:
raise HTTPException(
status_code=503,
detail=(
"No models available under `trained_models/`. "
"Start the server with --model or place a model folder."
),
)
model_name = names[0]
cfg = compose_model_config(model_name, config_name=config_name)
if text is not None and text.strip():
cfg.input_text = text
outputs = run_inference(cfg)
return {"outputs": outputs}