server: fix finish_reason for token-limit stops (#2362)

This commit is contained in:
Joel Farthing 2026-08-26 12:54:11 -05:00 committed by GitHub
parent 1d76336eeb
commit ef40550042
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 7 additions and 13 deletions

View File

@ -2396,7 +2396,6 @@ void server_context::send_error(const int id_task, const int id_multi, const std
auto res = std::make_unique<server_task_result_error>();
res->id = id_task;
res->id_multi = id_multi;
res->stop = false;
res->error = true;
res->err_type = type;
res->err_msg = error;
@ -2423,7 +2422,6 @@ void server_context::send_partial_response(server_slot& slot, completion_token_o
res->id_multi = slot.id_multi;
res->index = slot.task->index;
res->error = false;
res->stop = false;
res->stream = slot.params.stream;
res->content = tkn.text_to_send;
res->post_sampling_probs = slot.params.post_sampling_probs;
@ -2497,7 +2495,10 @@ void server_context::send_final_response(server_slot& slot) {
res->id_multi = slot.id_multi;
res->index = slot.task->index;
res->error = false;
res->stop = true; // to do: set value
res->stop = slot.stopped_word ? STOP_TYPE_WORD
: slot.stopped_eos ? STOP_TYPE_EOS
: slot.stopped_limit ? STOP_TYPE_LIMIT
: STOP_TYPE_EOS;
res->stream = slot.params.stream;
res->include_usage = slot.params.include_usage;
res->content = slot.generated_text;
@ -2911,7 +2912,6 @@ void server_context::process_single_task(server_task&& task) {
server_task_result res;
res.id = task.id;
res.id_multi = task.id_multi;
res.stop = true;
res.error = false;
res.data = {
{ "idle", n_idle_slots },
@ -2975,7 +2975,6 @@ void server_context::process_single_task(server_task&& task) {
server_task_result result;
result.id = task.id;
result.stop = true;
result.error = false;
result.data = json{
{ "id_slot", id_slot },
@ -3023,7 +3022,6 @@ void server_context::process_single_task(server_task&& task) {
server_task_result result;
result.id = task.id;
result.stop = true;
result.error = false;
result.data = json{
{ "id_slot", id_slot },
@ -3059,7 +3057,6 @@ void server_context::process_single_task(server_task&& task) {
slot->server_cached_prompt.data.clear();
server_task_result result;
result.id = task.id;
result.stop = true;
result.error = false;
result.data = json{
{ "id_slot", id_slot },
@ -3072,7 +3069,6 @@ void server_context::process_single_task(server_task&& task) {
llama_lora_adapters_apply(ctx, lora_adapters);
server_task_result result;
result.id = task.id;
result.stop = true;
result.error = false;
result.data = json{ { "success", true } };
queue_results.send(result);
@ -3280,7 +3276,6 @@ void server_context::on_finish_multitask(const server_task_multi& multitask) {
// all subtasks done == multitask is done
server_task_result result;
result.id = multitask.id;
result.stop = true;
result.error = false;
// collect json results into one json result

View File

@ -370,7 +370,7 @@ json server_task_result_cmpl_final::to_json_oaicompat_chat_final() {
msg.role = "assistant";
msg.content = content;
}
if (stop) {
if (stop == STOP_TYPE_WORD || stop == STOP_TYPE_EOS) {
finish_reason = msg.tool_calls.empty() ? "stop" : "tool_calls";
}
@ -412,8 +412,7 @@ json server_task_result_cmpl_final::to_json_oaicompat_chat_final() {
json server_task_result_cmpl_final::to_json_oaicompat_chat_stream() {
std::time_t t = std::time(0);
std::string finish_reason = "length";
if (stop) {
//if (stop == STOP_TYPE_WORD || stop == STOP_TYPE_EOS) {
if (stop == STOP_TYPE_WORD || stop == STOP_TYPE_EOS) {
finish_reason = oaicompat_msg.tool_calls.empty() ? "stop" : "tool_calls";
}

View File

@ -144,7 +144,7 @@ struct server_task_result {
json data;
bool stop;
stop_type stop = STOP_TYPE_NONE;
bool error;
bool final_result = false;
result_timings timings;