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