Skip to content

Commit 6d5c226

Browse files
fix: skip stale session.error when persisted reply exists (#473)
* fix: skip stale session.error when persisted reply exists Runtime SDK stream replays buffered events including errors from prior turns. finish_error now checks persisted_assistant_text_after baseline_seq first — if a successful response is already in the DB, the error is from a previous turn and the real answer is used instead. Affects Slack, Teams, and Google Chat reply streams. * fix: compress finish_error to fit 300-line limit * fix: rustfmt and 300-line limit in slack reply_stream
1 parent 7a59915 commit 6d5c226

3 files changed

Lines changed: 17 additions & 3 deletions

File tree

src/channels/google_chat/reply_stream.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,12 @@ impl<'a> GoogleChatReply<'a> {
176176
}
177177

178178
async fn finish_error(&mut self, properties: &Value) -> Result<bool, GatewayError> {
179+
if let Some(text) =
180+
persisted_assistant_text_after(self.pool, self.session_id, self.baseline_seq).await?
181+
{
182+
self.replace_text(&text).await?;
183+
return Ok(true);
184+
}
179185
let message = properties
180186
.get("error")
181187
.and_then(|error| error.get("message"))

src/http/managed_agents/slack/reply_stream.rs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -185,9 +185,12 @@ impl<'a> SlackReply<'a> {
185185
}
186186

187187
async fn finish_error(&mut self, properties: &Value) -> Result<bool, GatewayError> {
188+
if let Some(text) = self.persisted_text().await? {
189+
return self.finish_with_text(text).await.map(|()| true);
190+
}
188191
let message = properties
189192
.get("error")
190-
.and_then(|error| error.get("message"))
193+
.and_then(|e| e.get("message"))
191194
.and_then(Value::as_str)
192195
.unwrap_or("Agent run failed.");
193196
self.replace_text(message).await?;
@@ -217,8 +220,7 @@ impl<'a> SlackReply<'a> {
217220

218221
async fn finish_if_terminal(&mut self) -> Result<bool, GatewayError> {
219222
if let Some(text) = self.persisted_text().await? {
220-
self.finish_with_text(text).await?;
221-
return Ok(true);
223+
return self.finish_with_text(text).await.map(|()| true);
222224
}
223225
let Some(run) = self.state.agent_runs.get_run(self.session_id) else {
224226
return Ok(false);

src/http/managed_agents/teams/reply_stream.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,12 @@ impl<'a> TeamsReply<'a> {
174174
}
175175

176176
async fn finish_error(&mut self, properties: &Value) -> Result<bool, GatewayError> {
177+
if let Some(text) =
178+
persisted_assistant_text_after(self.pool, self.session_id, self.baseline_seq).await?
179+
{
180+
self.replace_text(&text).await?;
181+
return Ok(true);
182+
}
177183
let message = properties
178184
.get("error")
179185
.and_then(|error| error.get("message"))

0 commit comments

Comments
 (0)