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

Method process_stream

crates/opencode-session/src/llm.rs:386–737  ·  view source on GitHub ↗

Process a single stream attempt.

(
        &mut self,
        input: &StreamInput,
        provider: Arc<dyn Provider>,
    )

Source from the content-addressed store, hash-verified

384
385 /// Process a single stream attempt.
386 async fn process_stream(
387 &mut self,
388 input: &StreamInput,
389 provider: Arc<dyn Provider>,
390 ) -> anyhow::Result<()> {
391 let mut output = LlmProcessor::stream_from_input(input, provider).await?;
392
393 while let Some(event) = output.events.recv().await {
394 if input.abort.is_cancelled() {
395 return Err(anyhow::anyhow!("Stream aborted"));
396 }
397
398 match event {
399 StreamEvent::Start => {
400 // Session is now busy — already set by caller
401 }
402
403 // ============================================================
404 // Reasoning events
405 // ============================================================
406 StreamEvent::ReasoningStart { id } => {
407 if self.reasoning_map.contains_key(&id) {
408 continue;
409 }
410 let now = chrono::Utc::now().timestamp_millis();
411 let part_id =
412 opencode_core::id::create(opencode_core::id::Prefix::Part, true, None);
413 self.reasoning_map.insert(
414 id,
415 ReasoningState {
416 _part_id: part_id,
417 text: String::new(),
418 _start_time: now,
419 _metadata: None,
420 },
421 );
422 }
423
424 StreamEvent::ReasoningDelta { id, text } => {
425 if let Some(state) = self.reasoning_map.get_mut(&id) {
426 state.text.push_str(&text);
427 }
428 }
429
430 StreamEvent::ReasoningEnd { id } => {
431 if let Some(mut state) = self.reasoning_map.remove(&id) {
432 state.text = state.text.trim_end().to_string();
433 }
434 }
435
436 // ============================================================
437 // Tool input streaming events
438 // ============================================================
439 StreamEvent::ToolInputStart { id, tool_name } => {
440 let part_id = self
441 .tool_calls
442 .get(&id)
443 .map(|tc| tc.part_id.clone())

Callers 1

processMethod · 0.45

Calls 15

createFunction · 0.85
newFunction · 0.85
trigger_collectFunction · 0.85
usage_from_streamFunction · 0.85
compute_costFunction · 0.85
with_dataMethod · 0.80
with_sessionMethod · 0.80
is_emptyMethod · 0.80
is_cancelledMethod · 0.45

Tested by

no test coverage detected