@@ -511,6 +511,10 @@ pub(crate) fn refine_slices_concurrent(ctx: RefineCtx<'_>) -> (Vec<String>, usiz
511511 let req = & reqs[ idx] ;
512512 let mut outcome: Option < String > = None ;
513513 for attempt in 0 ..=SLICE_RETRY {
514+ // REQ-290(v0.19.6)埋点先行:单片耗时归因——任务级 elapsed_ms
515+ // 已有(db_ai_tasks),此处补片级时间(非流式阶段只有总耗时;
516+ // 流式上线后同点补首 delta 时刻,见批次设计 §2.8 ③)。
517+ let started = std:: time:: Instant :: now ( ) ;
514518 let resp = if mock {
515519 Ok ( mock_adapter. refine ( req) )
516520 } else if ctx. vision_images . is_empty ( ) {
@@ -521,8 +525,13 @@ pub(crate) fn refine_slices_concurrent(ctx: RefineCtx<'_>) -> (Vec<String>, usiz
521525 . refine_vision ( req, ctx. vision_images , Some ( dims) )
522526 . map_err ( AiTaskFailure :: from)
523527 } ;
528+ let elapsed_ms = started. elapsed ( ) . as_millis ( ) ;
524529 match resp {
525530 Ok ( r) => {
531+ eprintln ! (
532+ "[refine-task] task={} 片 {}/{} attempt={} ok elapsed_ms={}" ,
533+ task_id, idx + 1 , total, attempt + 1 , elapsed_ms
534+ ) ;
526535 // REQ-230:成功片记录轨迹(提示词/回答全文——任务对话视图)
527536 turns
528537 . lock ( )
@@ -537,10 +546,10 @@ pub(crate) fn refine_slices_concurrent(ctx: RefineCtx<'_>) -> (Vec<String>, usiz
537546 break ;
538547 }
539548 Err ( e) if attempt < SLICE_RETRY => {
540- eprintln ! ( "[refine-task] task={} 片 {} 第{}次失败,重试: {}" , task_id, idx + 1 , attempt + 1 , e. message( ) ) ;
549+ eprintln ! ( "[refine-task] task={} 片 {} 第{}次失败 elapsed_ms={} ,重试: {}" , task_id, idx + 1 , attempt + 1 , elapsed_ms , e. message( ) ) ;
541550 }
542551 Err ( e) => {
543- eprintln ! ( "[refine-task] task={} 片 {} 重试后仍失败(保留已成功片): {}" , task_id, idx + 1 , e. message( ) ) ;
552+ eprintln ! ( "[refine-task] task={} 片 {} 重试后仍失败 elapsed_ms={} (保留已成功片): {}" , task_id, idx + 1 , elapsed_ms , e. message( ) ) ;
544553 break ;
545554 }
546555 }
0 commit comments