MCPcopy Index your code
hub / github.com/ChrisFeldmeier/OpenCodeRust / collect_stream

Function collect_stream

crates/opencode-session/src/llm.rs:1432–1519  ·  view source on GitHub ↗
(
    mut output: StreamOutput,
    abort: tokio_util::sync::CancellationToken,
)

Source from the content-addressed store, hash-verified

1430}
1431
1432pub async fn collect_stream(
1433 mut output: StreamOutput,
1434 abort: tokio_util::sync::CancellationToken,
1435) -> anyhow::Result<StreamResult> {
1436 let mut text = String::new();
1437 let mut tool_calls = Vec::new();
1438 let mut current_tool: Option<ToolCallResult> = None;
1439 let mut finish_reason = None;
1440
1441 while let Some(event) = output.events.recv().await {
1442 if abort.is_cancelled() {
1443 break;
1444 }
1445
1446 match event {
1447 StreamEvent::Start => {}
1448 StreamEvent::TextStart => {}
1449 StreamEvent::TextDelta(delta) => {
1450 text.push_str(&delta);
1451 }
1452 StreamEvent::TextEnd => {}
1453 StreamEvent::ReasoningStart { .. } => {}
1454 StreamEvent::ReasoningDelta { .. } => {}
1455 StreamEvent::ReasoningEnd { .. } => {}
1456 StreamEvent::ToolInputStart { id, tool_name } => {
1457 current_tool = Some(ToolCallResult {
1458 id,
1459 name: tool_name,
1460 input: serde_json::Value::Null,
1461 });
1462 }
1463 StreamEvent::ToolInputDelta { delta, .. } => {
1464 if let Some(ref mut tool) = current_tool {
1465 if tool.input.is_null() {
1466 tool.input = serde_json::Value::String(delta);
1467 } else if let Some(s) = tool.input.as_str() {
1468 let mut existing = s.to_string();
1469 existing.push_str(&delta);
1470 tool.input = serde_json::Value::String(existing);
1471 }
1472 }
1473 }
1474 StreamEvent::ToolInputEnd { .. } => {}
1475 StreamEvent::ToolCallStart { id, name } => {
1476 current_tool = Some(ToolCallResult {
1477 id,
1478 name,
1479 input: serde_json::Value::Null,
1480 });
1481 }
1482 StreamEvent::ToolCallDelta { input, .. } => {
1483 if let Some(ref mut tool) = current_tool {
1484 if tool.input.is_null() {
1485 tool.input = serde_json::Value::String(input);
1486 } else if let Some(s) = tool.input.as_str() {
1487 let mut existing = s.to_string();
1488 existing.push_str(&input);
1489 tool.input = serde_json::Value::String(existing);

Callers 1

processMethod · 0.85

Calls 3

newFunction · 0.85
is_cancelledMethod · 0.45
as_strMethod · 0.45

Tested by

no test coverage detected