Everything is streaming (#7247)

Co-authored-by: Douwe Osinga <douwe@squareup.com>
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
Douwe Osinga
2026-02-17 19:53:38 +01:00
committed by GitHub
parent 65d3a1550f
commit 9a91fccfb5
42 changed files with 801 additions and 1718 deletions
+12 -11
View File
@@ -7,7 +7,10 @@ use std::process::Stdio;
use tokio::io::{AsyncBufReadExt, BufReader};
use tokio::process::Command;
use super::base::{ConfigKey, Provider, ProviderDef, ProviderMetadata, ProviderUsage, Usage};
use super::base::{
stream_from_single_message, ConfigKey, MessageStream, Provider, ProviderDef, ProviderMetadata,
ProviderUsage, Usage,
};
use super::errors::ProviderError;
use super::utils::{filter_extensions_from_system_prompt, RequestLog};
use crate::config::base::CursorAgentCommand;
@@ -171,7 +174,6 @@ impl CursorAgentProvider {
message_content,
);
let usage = Usage::default();
Ok((response_message, usage))
}
@@ -325,19 +327,20 @@ impl Provider for CursorAgentProvider {
skip(self, model_config, system, messages, tools),
fields(model_config, input, output, input_tokens, output_tokens, total_tokens)
)]
async fn complete_with_model(
async fn stream(
&self,
_session_id: Option<&str>, // CLI has no external session-id flag to propagate.
model_config: &ModelConfig,
_session_id: &str, // CLI has no external session-id flag to propagate.
system: &str,
messages: &[Message],
tools: &[Tool],
) -> Result<(Message, ProviderUsage), ProviderError> {
) -> Result<MessageStream, ProviderError> {
if super::cli_common::is_session_description_request(system) {
return super::cli_common::generate_simple_session_description(
let (message, provider_usage) = super::cli_common::generate_simple_session_description(
&model_config.model_name,
messages,
);
)?;
return Ok(stream_from_single_message(message, provider_usage));
}
let lines = self.execute_command(system, messages, tools).await?;
@@ -360,9 +363,7 @@ impl Provider for CursorAgentProvider {
let mut log = RequestLog::start(&self.model, &payload)?;
log.write(&response, Some(&usage))?;
Ok((
message,
ProviderUsage::new(model_config.model_name.clone(), usage),
))
let provider_usage = ProviderUsage::new(model_config.model_name.clone(), usage);
Ok(stream_from_single_message(message, provider_usage))
}
}