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
+15 -8
View File
@@ -10,7 +10,9 @@ use tempfile::NamedTempFile;
use tokio::io::{AsyncBufReadExt, BufReader};
use tokio::process::Command;
use super::base::{ConfigKey, Provider, ProviderDef, ProviderMetadata, ProviderUsage, Usage};
use super::base::{
ConfigKey, MessageStream, Provider, ProviderDef, ProviderMetadata, ProviderUsage, Usage,
};
use super::errors::ProviderError;
use super::utils::{filter_extensions_from_system_prompt, RequestLog};
use crate::config::base::{CodexCommand, CodexReasoningEffort, CodexSkipGitCheck};
@@ -671,19 +673,23 @@ impl Provider for CodexProvider {
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(super::base::stream_from_single_message(
message,
provider_usage,
));
}
let lines = self.execute_command(system, messages, tools).await?;
@@ -712,9 +718,10 @@ impl Provider for CodexProvider {
ProviderError::RequestFailed(format!("Failed to write request log: {}", e))
})?;
Ok((
let provider_usage = ProviderUsage::new(model_config.model_name.clone(), usage);
Ok(super::base::stream_from_single_message(
message,
ProviderUsage::new(model_config.model_name.clone(), usage),
provider_usage,
))
}