kql_duration_breakdown_rag.md

February 20, 2025 ยท View on GitHub

Get duration breakdown for RAG based bot:

let conv_dialogs = 
traces
| extend conversation_id = tostring(customDimensions.conversation_id)
| extend dialog_id = tostring(customDimensions.dialog_id)
| where * contains "demo:" // add additional filters here
| where tostring(customDimensions.dialog_id) !in ("")
| project conversation_id, dialog_id
| distinct conversation_id, dialog_id
;

conv_dialogs
| join kind=leftouter (
    traces
    | where * contains "StaticOrchestrator run completed"
    | extend conversation_id = tostring(customDimensions.conversation_id)
    | extend dialog_id = tostring(customDimensions.dialog_id)
    | extend rephrase_duration = round(toreal(customDimensions.search_request_generation_duration_ms)/1000,2)
    | extend search_duration = round(toreal(customDimensions.search_duration_ms)/1000,2)
    | extend final_answer_duration = round(toreal(customDimensions.final_answer_duration_ms)/1000,2)
) on $left.conversation_id == $right.conversation_id and $left.dialog_id == $right.dialog_id
| join kind=leftouter(
    traces
    | where * contains "Finished orchestrator run"
    | extend conversation_id = tostring(customDimensions.conversation_id)
    | extend dialog_id = tostring(customDimensions.dialog_id)
    | extend session_duration = round(toreal(customDimensions.duration_ms)/1000,2)
)on $left.conversation_id == $right.conversation_id and $left.dialog_id == $right.dialog_id
| project conversation_id, dialog_id, session_duration, rephrase_duration, search_duration, final_answer_duration
| order by conversation_id, dialog_id