From: Pascal Date: Fri, 10 Jul 2026 20:07:29 +0000 (+0200) Subject: server: accept null sampling params (#25538) X-Git-Tag: upstream/0.0.10438~471 X-Git-Url: https://git.djapps.eu/?a=commitdiff_plain;h=4f37f519722aa3242eecb7649466b4a4a2d6d6da;p=pkg%2Fggml%2Fsources%2Fllama.cpp server: accept null sampling params (#25538) * server: accept null sampling params Extend the schema validation to treat a null value as absent, so clients can send null on nullable params (temperature, top_p, ...) to request the server default. This matches the OpenAI spec and the json_value convention used elsewhere. Add has_field() to skip null in the field eval guards. * has_field -> has_value​ --- diff --git a/tools/server/server-schema.cpp b/tools/server/server-schema.cpp index 5713cc831..89026eb4e 100644 --- a/tools/server/server-schema.cpp +++ b/tools/server/server-schema.cpp @@ -568,10 +568,16 @@ static void handle_with_catch(const char * name, std::function func) { } } +// treat a null value as absent so clients can send null to request the server default +static bool has_value(const json & data, const char * n) { + auto it = data.find(n); + return it != data.end() && !it->is_null(); +} + template void field_num::eval(field_eval_context & ctx, const json & data) { for (const auto & n : name) { - if (data.contains(n)) { + if (has_value(data, n)) { handle_with_catch(n, [&]() { if (custom_handler) { custom_handler(ctx, data); @@ -593,7 +599,7 @@ void field_num::eval(field_eval_context & ctx, const json & data) { void field_str::eval(field_eval_context & ctx, const json & data) { GGML_ASSERT(custom_handler); for (const auto & n : name) { - if (data.contains(n)) { + if (has_value(data, n)) { handle_with_catch(n, [&]() { custom_handler(ctx, data); }); @@ -604,7 +610,7 @@ void field_str::eval(field_eval_context & ctx, const json & data) { void field_bool::eval(field_eval_context & ctx, const json & data) { for (const auto & n : name) { - if (data.contains(n)) { + if (has_value(data, n)) { handle_with_catch(n, [&]() { if (custom_handler) { custom_handler(ctx, data); @@ -620,7 +626,7 @@ void field_bool::eval(field_eval_context & ctx, const json & data) { void field_json::eval(field_eval_context & ctx, const json & data) { GGML_ASSERT(custom_handler); for (const auto & n : name) { - if (data.contains(n)) { + if (has_value(data, n)) { handle_with_catch(n, [&]() { custom_handler(ctx, data); });