File size: 1,413 Bytes
590a604
 
 
 
 
 
 
 
 
ee1a8a3
1fbc47b
 
 
 
 
 
 
 
 
 
 
 
a18e93d
 
 
 
1fbc47b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
"""
API routes for LexiMind.

Defines REST endpoints for text analysis including summarization,
emotion detection, and topic classification.

Author: Oliver Perrin
Date: December 2025
"""

from typing import cast

from fastapi import APIRouter, Depends, HTTPException, status

from ..inference import EmotionPrediction, InferencePipeline, TopicPrediction
from .dependencies import get_pipeline
from .schemas import SummaryRequest, SummaryResponse

router = APIRouter()


@router.post("/summarize", response_model=SummaryResponse)
def summarize(
    payload: SummaryRequest,
    pipeline: InferencePipeline = Depends(get_pipeline),  # noqa: B008
) -> SummaryResponse:
    try:
        outputs = pipeline.batch_predict([payload.text])
    except Exception as exc:  # noqa: BLE001 - surface inference error to client
        raise HTTPException(
            status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
            detail=str(exc),
        ) from exc
    summaries = cast(list[str], outputs["summaries"])
    emotion_preds = cast(list[EmotionPrediction], outputs["emotion"])
    topic_preds = cast(list[TopicPrediction], outputs["topic"])

    emotion = emotion_preds[0]
    topic = topic_preds[0]
    return SummaryResponse(
        summary=summaries[0],
        emotion_labels=emotion.labels,
        emotion_scores=emotion.scores,
        topic=topic.label,
        topic_confidence=topic.confidence,
    )