|
| 1 | +import logging |
1 | 2 | from datetime import datetime, timezone |
2 | 3 | from typing import Any, Dict, List, Optional |
3 | 4 | from langchain_core.runnables import RunnableConfig |
4 | 5 | from app.graph.state import EvaluationState |
5 | 6 | from app.criteria.bmad_items import list_items, get_category, get_category_max |
6 | 7 | from app.constants import get_quality_gate |
7 | 8 | from app.models.graph import ItemScore |
| 9 | +from app.services.event_channel import create_sommelier_event, get_event_channel |
| 10 | + |
| 11 | +logger = logging.getLogger(__name__) |
8 | 12 |
|
9 | 13 |
|
10 | 14 | async def finalize( |
@@ -52,6 +56,35 @@ async def finalize( |
52 | 56 |
|
53 | 57 | quality_gate = get_quality_gate(normalized, coverage) |
54 | 58 |
|
| 59 | + evaluation_id = state.get("evaluation_id", "") |
| 60 | + if evaluation_id: |
| 61 | + try: |
| 62 | + event_channel = get_event_channel() |
| 63 | + event_channel.emit_sync( |
| 64 | + evaluation_id, |
| 65 | + create_sommelier_event( |
| 66 | + evaluation_id=evaluation_id, |
| 67 | + sommelier="finalize", |
| 68 | + event_type="quality_gate_complete", |
| 69 | + progress_percent=95, |
| 70 | + message=f"Quality gate: {quality_gate}, score: {round(normalized, 2)}", |
| 71 | + ), |
| 72 | + ) |
| 73 | + event_channel.emit_sync( |
| 74 | + evaluation_id, |
| 75 | + create_sommelier_event( |
| 76 | + evaluation_id=evaluation_id, |
| 77 | + sommelier="system", |
| 78 | + event_type="evaluation_complete", |
| 79 | + progress_percent=100, |
| 80 | + message="Evaluation complete!", |
| 81 | + ), |
| 82 | + ) |
| 83 | + except Exception: |
| 84 | + logger.warning( |
| 85 | + "Failed to emit finalize events for %s", evaluation_id, exc_info=True |
| 86 | + ) |
| 87 | + |
55 | 88 | return { |
56 | 89 | "trace_metadata": { |
57 | 90 | "finalize": { |
|
0 commit comments