(frame: &str)
| 2371 | } |
| 2372 | |
| 2373 | fn extract_sse_data(frame: &str) -> Option<String> { |
| 2374 | let mut data_lines = Vec::new(); |
| 2375 | for raw_line in frame.lines() { |
| 2376 | let line = raw_line.trim_end_matches('\r'); |
| 2377 | if let Some(rest) = line.strip_prefix("data:") { |
| 2378 | data_lines.push(rest.trim_start().to_string()); |
| 2379 | } |
| 2380 | } |
| 2381 | |
| 2382 | if data_lines.is_empty() { |
| 2383 | None |
| 2384 | } else { |
| 2385 | Some(data_lines.join("\n")) |
| 2386 | } |
| 2387 | } |
| 2388 | |
| 2389 | fn finish_reason_label(reason: FinishReason) -> &'static str { |
| 2390 | match reason { |