Only send Stop event at end of google completion request (#29885)

I don't think this makes much of a difference in current use, but this
more closely matches other providers and cleans up the "Response"
section of eval markdown output

Release Notes:

- N/A
This commit is contained in:
Michael Sloan 2025-05-04 14:23:13 -06:00 committed by GitHub
parent bb82d9ca82
commit a0895a6ed8
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -507,12 +507,18 @@ impl GoogleEventMapper {
events: Pin<Box<dyn Send + Stream<Item = Result<GenerateContentResponse>>>>, events: Pin<Box<dyn Send + Stream<Item = Result<GenerateContentResponse>>>>,
) -> impl Stream<Item = Result<LanguageModelCompletionEvent, LanguageModelCompletionError>> ) -> impl Stream<Item = Result<LanguageModelCompletionEvent, LanguageModelCompletionError>>
{ {
events.flat_map(move |event| { events
futures::stream::iter(match event { .map(Some)
Ok(event) => self.map_event(event), .chain(futures::stream::once(async { None }))
Err(error) => vec![Err(LanguageModelCompletionError::Other(anyhow!(error)))], .flat_map(move |event| {
futures::stream::iter(match event {
Some(Ok(event)) => self.map_event(event),
Some(Err(error)) => {
vec![Err(LanguageModelCompletionError::Other(anyhow!(error)))]
}
None => vec![Ok(LanguageModelCompletionEvent::Stop(self.stop_reason))],
})
}) })
})
} }
pub fn map_event( pub fn map_event(
@ -578,7 +584,6 @@ impl GoogleEventMapper {
if wants_to_use_tool { if wants_to_use_tool {
self.stop_reason = StopReason::ToolUse; self.stop_reason = StopReason::ToolUse;
} }
events.push(Ok(LanguageModelCompletionEvent::Stop(self.stop_reason)));
events events
} }
} }