MCPcopy Create free account
hub / github.com/ChrisFeldmeier/OpenCodeRust / parse_anthropic_sse

Function parse_anthropic_sse

crates/opencode-provider/src/stream.rs:270–321  ·  view source on GitHub ↗
(data: &str)

Source from the content-addressed store, hash-verified

268}
269
270pub fn parse_anthropic_sse(data: &str) -> Option<StreamEvent> {
271 let event: AnthropicEvent = serde_json::from_str(data).ok()?;
272
273 match event.event_type.as_str() {
274 "content_block_delta" => {
275 if let Some(delta) = event.delta {
276 if let Some(text) = delta.text {
277 return Some(StreamEvent::TextDelta(text));
278 }
279 if let Some(json) = delta.partial_json {
280 return Some(StreamEvent::ToolCallDelta {
281 id: String::new(),
282 input: json,
283 });
284 }
285 }
286 }
287 "content_block_start" => {
288 if let Some(block) = event.content_block {
289 if block.block_type == "tool_use" {
290 return Some(StreamEvent::ToolCallStart {
291 id: block.id.unwrap_or_default(),
292 name: block.name.unwrap_or_default(),
293 });
294 }
295 }
296 }
297 "content_block_stop" => {
298 return Some(StreamEvent::Done);
299 }
300 "message_delta" => {
301 if let Some(delta) = event.delta {
302 if delta.stop_reason.is_some() {
303 return Some(StreamEvent::Done);
304 }
305 }
306 }
307 "message_start" => {
308 if let Some(msg) = event.message {
309 if let Some(usage) = msg.usage {
310 return Some(StreamEvent::Usage {
311 prompt_tokens: usage.input_tokens,
312 completion_tokens: usage.output_tokens,
313 });
314 }
315 }
316 }
317 _ => {}
318 }
319
320 None
321}
322
323#[cfg(test)]
324mod tests {

Callers 1

chat_streamMethod · 0.85

Calls 2

newFunction · 0.85
as_strMethod · 0.45

Tested by

no test coverage detected