NLP-RAG / backend /routes /title.py
Qar-Raz's picture
hf-space: deploy branch without frontend/data/results
c7256ee
from fastapi import APIRouter, HTTPException
from huggingface_hub import InferenceClient
from backend.schemas import TitleRequest, TitleResponse
from backend.services.title import parse_title_model_candidates, title_from_hf, title_from_query
from backend.state import state
router = APIRouter()
@router.post("/predict/title", response_model=TitleResponse)
def suggest_title(payload: TitleRequest) -> TitleResponse:
query = payload.query.strip()
if not query:
raise HTTPException(status_code=400, detail="Query cannot be empty")
fallback_title = title_from_query(query)
title_client: InferenceClient | None = state.get("title_client")
title_model_ids: list[str] = state.get("title_model_ids", parse_title_model_candidates())
if title_client is not None:
for title_model_id in title_model_ids:
try:
hf_title = title_from_hf(query, title_client, title_model_id)
if hf_title:
return TitleResponse(title=hf_title, source=f"hf:{title_model_id}")
except Exception as exc:
err_text = str(exc)
if "model_not_supported" in err_text or "not supported by any provider" in err_text:
continue
print(f"Title generation model failed ({title_model_id}): {exc}")
continue
print("Title generation fallback triggered: no title model available/successful")
return TitleResponse(title=fallback_title, source="rule-based")