kql_duration_breakdown_retail.md

February 19, 2025 ยท View on GitHub

Duration Breakdown query for Retail demo

// using timestamp > ago(8h) to only consider logs from last 8 hours which could also be changed to use any conversaiton id
 
let filteredTrace = traces 
| where timestamp > ago(8h);
 
let sm = 
(
    filteredTrace
    | where message has "Finished chat request"
    | extend timestamp = datetime_utc_to_local(timestamp, 'US/Pacific')
    | extend conversation_id = tostring(customDimensions.conversation_id)
    | extend dialog_id = tostring(customDimensions.dialog_id)
    | extend dialog_sec = round(toreal(customDimensions.duration_ms) / 1000, 2)
    | extend sm_conversation_id = conversation_id
    | extend sm_dialog_id = dialog_id
);
 
 
let orchestrator =
(
    filteredTrace
    | where * has "StaticOrchestrator run completed"
    | extend timestamp = datetime_utc_to_local(timestamp, 'US/Pacific')
    | extend conversation_id = tostring(customDimensions.conversation_id)
    | extend dialog_id = tostring(customDimensions.dialog_id)
    | extend img_describer_sec = round(toreal(customDimensions.describe_and_replace_images_duration_ms) / 1000, 2)
    | extend classification_sec = round(toreal(customDimensions.classification_duration_ms) / 1000, 2)
    | extend recommender_sec = round(toreal(customDimensions.recommender_duration_ms) / 1000, 2)
    | extend search_sec = round(toreal(customDimensions.search_duration_ms) / 1000, 2)
    | extend final_answer_sec = round(toreal(customDimensions.final_answer_duration_ms) / 1000, 2)
    | extend orc_conversation_id = conversation_id
    | extend orc_dialog_id = dialog_id
);
 
 
sm
| join kind=fullouter orchestrator on conversation_id, dialog_id
| project timestamp,
            conversation_id = coalesce(sm_conversation_id, orc_conversation_id), 
          dialog_id = coalesce(sm_dialog_id, orc_dialog_id), 
          dialog_sec, img_describer_sec, classification_sec, recommender_sec, search_sec
// | where  img_describer_sec > 1.0
| order by timestamp asc
        //, conversation_id, dialog_id
// | summarize percentile(dialog_sec, 50), percentile(dialog_sec, 75), percentile(dialog_sec, 95),
//             percentile(img_describer_sec, 50), percentile(img_describer_sec, 75), percentile(img_describer_sec, 95),
//             percentile(classification_sec, 50), percentile(classification_sec, 75), percentile(classification_sec, 95),
//             percentile(recommender_sec, 50), percentile(recommender_sec, 75), percentile(recommender_sec, 95),
//             percentile(search_sec, 50), percentile(search_sec, 75), percentile(search_sec, 95)