From 46f9f0fb317c4662e02b8cb19f55a9d0b16c6f2e Mon Sep 17 00:00:00 2001 From: hksdpc255 <43977088+hksdpc255@users.noreply.github.com> Date: Mon, 30 Mar 2026 03:50:09 +1100 Subject: [PATCH] fix #1524 (#1543) --- examples/server/server-context.cpp | 5 +++++ examples/server/server-task.cpp | 16 +++++++--------- examples/server/server-task.h | 3 +++ 3 files changed, 15 insertions(+), 9 deletions(-) diff --git a/examples/server/server-context.cpp b/examples/server/server-context.cpp index ccaa7bd3..3daf86af 100644 --- a/examples/server/server-context.cpp +++ b/examples/server/server-context.cpp @@ -393,6 +393,9 @@ void server_slot::reset() { json_schema = json(); generated_tool_call_ids.clear(); + anthropic_thinking_block_started = false; + anthropic_text_block_started = false; + oai_resp_thinking_block_started = false; oai_resp_text_block_started = false; oai_resp_id.clear(); @@ -1834,6 +1837,8 @@ void server_context::send_final_response(server_slot& slot) { res->oai_resp_reasoning_id = slot.oai_resp_reasoning_id; res->oai_resp_message_id = slot.oai_resp_message_id; res->n_decoded = slot.n_decoded; + res->anthropic_thinking_block_started = slot.anthropic_thinking_block_started; + res->anthropic_text_block_started = slot.anthropic_text_block_started; res->n_prompt_tokens = slot.n_prompt_tokens; res->oaicompat_model = slot.task->params.oaicompat_model; res->data = json{ diff --git a/examples/server/server-task.cpp b/examples/server/server-task.cpp index 421f1620..561f3120 100644 --- a/examples/server/server-task.cpp +++ b/examples/server/server-task.cpp @@ -719,15 +719,13 @@ json server_task_result_cmpl_final::to_json_anthropic_stream() { stop_reason = oaicompat_msg.tool_calls.empty() ? "end_turn" : "tool_use"; } - bool has_thinking = !oaicompat_msg.reasoning_content.empty(); - bool has_text = !oaicompat_msg.content.empty(); size_t num_tool_calls = oaicompat_msg.tool_calls.size(); size_t thinking_block_index = 0; - size_t text_block_index = has_thinking ? 1 : 0; + size_t text_block_index = anthropic_thinking_block_started ? 1 : 0; - bool thinking_block_started = false; - bool text_block_started = false; + bool thinking_block_started = anthropic_thinking_block_started; + bool text_block_started = anthropic_text_block_started; std::set tool_calls_started; for (const auto& diff : oaicompat_msg_diffs) { @@ -790,7 +788,7 @@ json server_task_result_cmpl_final::to_json_anthropic_stream() { } if (diff.tool_call_index != std::string::npos) { - size_t content_block_index = (has_thinking ? 1 : 0) + (has_text ? 1 : 0) + diff.tool_call_index; + size_t content_block_index = (thinking_block_started ? 1 : 0) + (text_block_started ? 1 : 0) + diff.tool_call_index; if (tool_calls_started.find(diff.tool_call_index) == tool_calls_started.end()) { const auto& full_tool_call = oaicompat_msg.tool_calls[diff.tool_call_index]; @@ -826,7 +824,7 @@ json server_task_result_cmpl_final::to_json_anthropic_stream() { } } - if (has_thinking) { + if (thinking_block_started) { events.push_back({ {"event", "content_block_delta"}, {"data", { @@ -847,7 +845,7 @@ json server_task_result_cmpl_final::to_json_anthropic_stream() { }); } - if (has_text) { + if (text_block_started) { events.push_back({ {"event", "content_block_stop"}, {"data", { @@ -858,7 +856,7 @@ json server_task_result_cmpl_final::to_json_anthropic_stream() { } for (size_t i = 0; i < num_tool_calls; i++) { - size_t content_block_index = (has_thinking ? 1 : 0) + (has_text ? 1 : 0) + i; + size_t content_block_index = (thinking_block_started ? 1 : 0) + (text_block_started ? 1 : 0) + i; events.push_back({ {"event", "content_block_stop"}, {"data", { diff --git a/examples/server/server-task.h b/examples/server/server-task.h index 1cce0907..89232b3d 100644 --- a/examples/server/server-task.h +++ b/examples/server/server-task.h @@ -249,6 +249,9 @@ struct server_task_result_cmpl_final : server_task_result { std::string oai_resp_reasoning_id; std::string oai_resp_message_id; + bool anthropic_thinking_block_started = false; + bool anthropic_text_block_started = false; + virtual bool is_stop() override { return true; }