@@ -1218,9 +1218,21 @@ fn encode_eval_event_for_http(event: &EvalEvent) -> Option<String> {
12181218 EvalEvent :: Summary ( summary) => serde_json:: to_string ( summary)
12191219 . ok ( )
12201220 . map ( |data| serialize_sse_event ( "summary" , & data) ) ,
1221- EvalEvent :: Progress ( progress) => serde_json:: to_string ( progress)
1222- . ok ( )
1223- . map ( |data| serialize_sse_event ( "progress" , & data) ) ,
1221+ EvalEvent :: Progress ( progress) => {
1222+ // Filter out internal eval_progress events (start/increment/stop)
1223+ // which are used for CLI progress bars but crash the UI stream
1224+ // parser. Only forward external progress events (e.g. json_delta).
1225+ if serde_json:: from_str :: < EvalProgressData > ( & progress. data )
1226+ . map ( |p| p. kind_type == "eval_progress" )
1227+ . unwrap_or ( false )
1228+ {
1229+ None
1230+ } else {
1231+ serde_json:: to_string ( progress)
1232+ . ok ( )
1233+ . map ( |data| serialize_sse_event ( "progress" , & data) )
1234+ }
1235+ }
12241236 EvalEvent :: Dependencies { .. } => None ,
12251237 EvalEvent :: Done => Some ( serialize_sse_event ( "done" , "" ) ) ,
12261238 EvalEvent :: Error {
@@ -4010,7 +4022,7 @@ mod tests {
40104022 }
40114023
40124024 #[ test]
4013- fn encode_eval_event_for_http_forwards_eval_progress ( ) {
4025+ fn encode_eval_event_for_http_filters_internal_eval_progress ( ) {
40144026 let event = EvalEvent :: Progress ( SseProgressEventData {
40154027 id : "id-1" . to_string ( ) ,
40164028 object_type : "task" . to_string ( ) ,
@@ -4022,9 +4034,7 @@ mod tests {
40224034 data : r#"{"type":"eval_progress","kind":"start","total":1}"# . to_string ( ) ,
40234035 } ) ;
40244036
4025- let encoded = encode_eval_event_for_http ( & event) . expect ( "eval_progress should be forwarded" ) ;
4026- assert ! ( encoded. contains( "event: progress" ) ) ;
4027- assert ! ( encoded. contains( "eval_progress" ) ) ;
4037+ assert ! ( encode_eval_event_for_http( & event) . is_none( ) ) ;
40284038 }
40294039
40304040 #[ test]
0 commit comments