(data: &str)
| 326 | } |
| 327 | |
| 328 | fn parse_vercel_sse(data: &str) -> Option<StreamEvent> { |
| 329 | if data.is_empty() { |
| 330 | return None; |
| 331 | } |
| 332 | |
| 333 | let response: VercelStreamResponse = serde_json::from_str(data).ok()?; |
| 334 | |
| 335 | let choice = response.choices.first()?; |
| 336 | |
| 337 | if let Some(content) = &choice.delta.content { |
| 338 | if !content.is_empty() { |
| 339 | return Some(StreamEvent::TextDelta(content.clone())); |
| 340 | } |
| 341 | } |
| 342 | |
| 343 | if let Some(reason) = &choice.finish_reason { |
| 344 | if reason == "tool_calls" { |
| 345 | return Some(StreamEvent::Done); |
| 346 | } |
| 347 | } |
| 348 | |
| 349 | None |
| 350 | } |
no test coverage detected