Otel: thread request context through streaming chat path (#129 review)
The legacy SSE streaming path (chat_turn_stream -> run_streaming_turn -> run_bootstrap/continuation_streaming) built its LLM spans from Context::current(), which is always the empty root context here: the codebase threads OTel contexts explicitly and never attaches one, there is no context-aware tokio layer, and the turn runs on a tokio::spawn. So every llm.request span on that path was an orphaned root span, uncorrelated with the HTTP request. Thread the handler's extracted request context down through chat_turn_stream -> chat_turn_stream_inner -> run_streaming_turn -> run_bootstrap_streaming / run_continuation_streaming, and use it for the describe_image and agentic-loop calls. Mirrors the non-streaming path, which already threads parent_cx -> loop_cx. Also rename the block-scoped db 'cx' in run_streaming_turn to db_cx so it no longer shadows the new parameter.
This commit is contained in:
1 parent
10ed84d7b4
commit
f850c535f1
2 files changed
+17
-14
No files matched your search
+3
-1
@@ -1667,10 +1667,12 @@ pub struct ChatSwitchBranchRequest {
|
||||
/// Returns `text/event-stream` with one event per chat stream event.
|
||||
#[post("/insights/chat/stream")]
|
||||
pub async fn chat_stream_handler(
|
||||
http_request: HttpRequest,
|
||||
claims: Claims,
|
||||
request: web::Json<ChatTurnHttpRequest>,
|
||||
app_state: web::Data<AppState>,
|
||||
) -> HttpResponse {
|
||||
let parent_context = extract_context_from_request(&http_request);
|
||||
let mut request = request.0;
|
||||
// Stored owner defaults fill what the client omitted (request → pref →
|
||||
// hard default; the hard default still applies downstream).
|
||||
@@ -1716,7 +1718,7 @@ pub async fn chat_stream_handler(
|
||||
};
|
||||
|
||||
let service = app_state.insight_chat.clone();
|
||||
let events = service.chat_turn_stream(chat_req);
|
||||
let events = service.chat_turn_stream(chat_req, parent_context);
|
||||
|
||||
// Map ChatStreamEvent → SSE frame bytes.
|
||||
let sse_stream = futures::stream::StreamExt::map(events, |ev| {
|
||||
|
||||
Reference in new issue
Block a user