common : remove json.hpp from common.cpp (#12697)

* common : remove json.hpp from common.cpp

* fix comment
This commit is contained in:
Xuan-Son Nguyen
2025-04-02 09:58:34 +02:00
committed by GitHub
parent 9bacd6b374
commit 42eb248f46
4 changed files with 34 additions and 38 deletions

View File

@ -7,9 +7,6 @@
#include "common.h" #include "common.h"
#include "log.h" #include "log.h"
// Change JSON_ASSERT from assert() to GGML_ASSERT:
#define JSON_ASSERT GGML_ASSERT
#include "json.hpp"
#include "llama.h" #include "llama.h"
#include <algorithm> #include <algorithm>
@ -56,8 +53,6 @@
#pragma warning(disable: 4244 4267) // possible loss of data #pragma warning(disable: 4244 4267) // possible loss of data
#endif #endif
using json = nlohmann::ordered_json;
// //
// CPU utils // CPU utils
// //
@ -1545,26 +1540,3 @@ common_control_vector_data common_control_vector_load(const std::vector<common_c
return result; return result;
} }
template <>
json common_grammar_trigger::to_json() const {
json out {
{"type", (int) type},
{"value", value},
};
if (type == COMMON_GRAMMAR_TRIGGER_TYPE_TOKEN) {
out["token"] = (int) token;
}
return out;
}
template <>
common_grammar_trigger common_grammar_trigger::from_json(const json & in) {
common_grammar_trigger out;
out.type = (common_grammar_trigger_type) in.at("type").get<int>();
out.value = in.at("value").get<std::string>();
if (out.type == COMMON_GRAMMAR_TRIGGER_TYPE_TOKEN) {
out.token = (llama_token) in.at("token").get<int>();
}
return out;
}

View File

@ -121,10 +121,6 @@ struct common_grammar_trigger {
common_grammar_trigger_type type; common_grammar_trigger_type type;
std::string value; std::string value;
llama_token token = LLAMA_TOKEN_NULL; llama_token token = LLAMA_TOKEN_NULL;
// T can only be nlohmann::ordered_json
template <class T> T to_json() const;
template <class T> static common_grammar_trigger from_json(const T & in);
}; };
// sampling parameters // sampling parameters

View File

@ -133,7 +133,8 @@ struct slot_params {
auto grammar_triggers = json::array(); auto grammar_triggers = json::array();
for (const auto & trigger : sampling.grammar_triggers) { for (const auto & trigger : sampling.grammar_triggers) {
grammar_triggers.push_back(trigger.to_json<json>()); server_grammar_trigger ct(std::move(trigger));
grammar_triggers.push_back(ct.to_json());
} }
return json { return json {
@ -372,9 +373,9 @@ struct server_task {
const auto grammar_triggers = data.find("grammar_triggers"); const auto grammar_triggers = data.find("grammar_triggers");
if (grammar_triggers != data.end()) { if (grammar_triggers != data.end()) {
for (const auto & t : *grammar_triggers) { for (const auto & t : *grammar_triggers) {
auto ct = common_grammar_trigger::from_json(t); server_grammar_trigger ct(t);
if (ct.type == COMMON_GRAMMAR_TRIGGER_TYPE_WORD) { if (ct.value.type == COMMON_GRAMMAR_TRIGGER_TYPE_WORD) {
const auto & word = ct.value; const auto & word = ct.value.value;
auto ids = common_tokenize(vocab, word, /* add_special= */ false, /* parse_special= */ true); auto ids = common_tokenize(vocab, word, /* add_special= */ false, /* parse_special= */ true);
if (ids.size() == 1) { if (ids.size() == 1) {
auto token = ids[0]; auto token = ids[0];
@ -392,7 +393,7 @@ struct server_task {
params.sampling.grammar_triggers.push_back({COMMON_GRAMMAR_TRIGGER_TYPE_WORD, word}); params.sampling.grammar_triggers.push_back({COMMON_GRAMMAR_TRIGGER_TYPE_WORD, word});
} }
} else { } else {
params.sampling.grammar_triggers.push_back(ct); params.sampling.grammar_triggers.push_back(std::move(ct.value));
} }
} }
} }

View File

@ -58,6 +58,32 @@ static T json_value(const json & body, const std::string & key, const T & defaul
const static std::string build_info("b" + std::to_string(LLAMA_BUILD_NUMBER) + "-" + LLAMA_COMMIT); const static std::string build_info("b" + std::to_string(LLAMA_BUILD_NUMBER) + "-" + LLAMA_COMMIT);
// thin wrapper around common_grammar_trigger with (de)serialization functions
struct server_grammar_trigger {
common_grammar_trigger value;
server_grammar_trigger() = default;
server_grammar_trigger(const common_grammar_trigger & value) : value(value) {}
server_grammar_trigger(const json & in) {
value.type = (common_grammar_trigger_type) in.at("type").get<int>();
value.value = in.at("value").get<std::string>();
if (value.type == COMMON_GRAMMAR_TRIGGER_TYPE_TOKEN) {
value.token = (llama_token) in.at("token").get<int>();
}
}
json to_json() const {
json out {
{"type", (int) value.type},
{"value", value.value},
};
if (value.type == COMMON_GRAMMAR_TRIGGER_TYPE_TOKEN) {
out["token"] = (int) value.token;
}
return out;
}
};
// //
// tokenizer and input processing utils // tokenizer and input processing utils
// //
@ -627,7 +653,8 @@ static json oaicompat_completion_params_parse(
llama_params["grammar_lazy"] = chat_params.grammar_lazy; llama_params["grammar_lazy"] = chat_params.grammar_lazy;
auto grammar_triggers = json::array(); auto grammar_triggers = json::array();
for (const auto & trigger : chat_params.grammar_triggers) { for (const auto & trigger : chat_params.grammar_triggers) {
grammar_triggers.push_back(trigger.to_json<json>()); server_grammar_trigger ct(trigger);
grammar_triggers.push_back(ct.to_json());
} }
llama_params["grammar_triggers"] = grammar_triggers; llama_params["grammar_triggers"] = grammar_triggers;
llama_params["preserved_tokens"] = chat_params.preserved_tokens; llama_params["preserved_tokens"] = chat_params.preserved_tokens;