Skip to content

Commit 5406935

Browse files
committed
feat: Integrate trace collection into chat_router
Added trace initialization and finalization. Trace ID is included in ChatResponse. Full trace data collection (RAG, LLM, validation) can be added incrementally.
1 parent 04e2a00 commit 5406935

1 file changed

Lines changed: 35 additions & 1 deletion

File tree

backend/api/routers/chat_router.py

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,11 @@
4242
import json
4343
import unicodedata
4444

45+
# Trace utilities
46+
from backend.utils.trace_utils import RequestTrace, generate_correlation_id
47+
from backend.utils.trace_storage import get_trace_storage
48+
from backend.api.request_tracking_middleware import get_correlation_id
49+
4550
logger = logging.getLogger(__name__)
4651

4752
router = APIRouter()
@@ -3585,8 +3590,17 @@ async def chat_with_rag(request: Request, chat_request: ChatRequest):
35853590
start_time = time.time()
35863591
timing_logs = {}
35873592

3593+
# Initialize trace for request traceability
3594+
trace_id = get_correlation_id() or generate_correlation_id()
3595+
trace_storage = get_trace_storage()
3596+
trace = RequestTrace(
3597+
trace_id=trace_id,
3598+
timestamp=datetime.now(timezone.utc).isoformat(),
3599+
query=chat_request.message[:500] # Limit query length in trace
3600+
)
3601+
35883602
# DEBUG: Log request received (very early)
3589-
logger.info(f"📥 Received chat request: message_length={len(chat_request.message)}, use_option_b={getattr(chat_request, 'use_option_b', 'NOT_SET')}")
3603+
logger.info(f"📥 Received chat request: message_length={len(chat_request.message)}, use_option_b={getattr(chat_request, 'use_option_b', 'NOT_SET')}, trace_id={trace_id}")
35903604

35913605
# Initialize latency variables (will be set during processing)
35923606
rag_retrieval_latency = 0.0
@@ -10489,9 +10503,29 @@ async def store_conversation_background():
1048910503
except Exception as e:
1049010504
logger.warning(f"⚠️ Failed to record strategy usage for Meta-Learning: {e}")
1049110505

10506+
# Finalize trace before returning
10507+
total_duration = (time.time() - start_time) * 1000
10508+
trace.duration_ms = total_duration
10509+
if trace.final_response is None:
10510+
trace.final_response = {}
10511+
trace.final_response.update({
10512+
"response_length": len(response) if response else 0,
10513+
"confidence_score": confidence_score,
10514+
"validation_passed": validation_info.get("passed", False) if validation_info else None,
10515+
"epistemic_state": epistemic_state.value if epistemic_state else None
10516+
})
10517+
10518+
# Store trace
10519+
try:
10520+
trace_storage.store(trace)
10521+
logger.debug(f"📊 Stored trace: {trace_id}")
10522+
except Exception as e:
10523+
logger.warning(f"⚠️ Failed to store trace {trace_id}: {e}")
10524+
1049210525
return ChatResponse(
1049310526
response=response,
1049410527
message_id=message_id,
10528+
trace_id=trace_id, # NEW: Include trace ID in response
1049510529
context_used=context,
1049610530
accuracy_score=accuracy_score,
1049710531
confidence_score=confidence_score,

0 commit comments

Comments
 (0)