| from __future__ import annotations | |
| from typing import Dict, Iterable | |
| from fastapi import HTTPException | |
| from src.summarization import summarize_transcript, generate_title | |
| from ..models.summarization import SummaryRequest | |
| def iter_summary_events(payload: SummaryRequest) -> Iterable[Dict[str, str]]: | |
| try: | |
| # Generate title if requested | |
| title = None | |
| if payload.generate_title: | |
| title = generate_title(payload.transcript, payload.llm_model) | |
| yield {"type": "title", "content": title} | |
| # Generate summary | |
| generator = summarize_transcript( | |
| transcript=payload.transcript, | |
| selected_gguf_model=payload.llm_model, | |
| prompt_input=payload.prompt, | |
| ) | |
| for chunk in generator: | |
| yield {"type": "partial", "content": chunk} | |
| yield {"type": "complete"} | |
| except Exception as exc: # pragma: no cover | |
| raise HTTPException(status_code=500, detail=f"Summary failed: {exc}") | |