diff --git a/crates/goose/src/providers/formats/openai.rs b/crates/goose/src/providers/formats/openai.rs index a0e57447c578..8606067f7ad1 100644 --- a/crates/goose/src/providers/formats/openai.rs +++ b/crates/goose/src/providers/formats/openai.rs @@ -48,7 +48,7 @@ struct StreamingChunk { created: Option, id: Option, usage: Option, - model: String, + model: Option, } /// Convert internal Message format to OpenAI's API message specification @@ -428,13 +428,14 @@ where let chunk: StreamingChunk = serde_json::from_str(line .ok_or_else(|| anyhow!("unexpected stream format"))?) .map_err(|e| anyhow!("Failed to parse streaming chunk: {}: {:?}", e, &line))?; - let model = chunk.model.clone(); - let usage = chunk.usage.as_ref().map(|u| { - ProviderUsage { - usage: get_usage(u), - model, - } + let usage = chunk.usage.as_ref().and_then(|u| { + chunk.model.as_ref().map(|model| { + ProviderUsage { + usage: get_usage(u), + model: model.clone(), + } + }) }); if chunk.choices.is_empty() { @@ -534,6 +535,8 @@ where None }, ) + } else if usage.is_some() { + yield (None, usage) } } }