From 841e09eaf46bf6ec962c465d22601c4411c92c0d Mon Sep 17 00:00:00 2001 From: James O'Leary Date: Wed, 18 Mar 2026 12:30:44 -0700 Subject: [PATCH] server: workaround new chat parser regression --- tools/server/server-task.h | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/tools/server/server-task.h b/tools/server/server-task.h index 1e342531d8..0c36bfab59 100644 --- a/tools/server/server-task.h +++ b/tools/server/server-task.h @@ -378,7 +378,15 @@ struct server_task_result_cmpl_final : server_task_result { virtual void update(task_result_state & state) override { is_updated = true; - oaicompat_msg = state.update_chat_msg(content, false, oaicompat_msg_diffs); + // common_chat_parse can throw std::runtime_error when the PEG + // parser fails to match the final output (is_partial=false). + // During streaming, the same text was parsed with is_partial=true + // and succeeded. Only this final parse can throw. + try { + oaicompat_msg = state.update_chat_msg(content, false, oaicompat_msg_diffs); + } catch (const std::exception & e) { + SRV_WRN("Final chat parse failed, using last partial result: %s\n", e.what()); + } oai_resp_id = state.oai_resp_id; oai_resp_reasoning_id = state.oai_resp_reasoning_id;