diff --git a/common/chat.cpp b/common/chat.cpp index c371edaa5a..694e93c4d4 100644 --- a/common/chat.cpp +++ b/common/chat.cpp @@ -672,6 +672,7 @@ const char * common_chat_format_name(common_chat_format format) { case COMMON_CHAT_FORMAT_PEG_SIMPLE: return "peg-simple"; case COMMON_CHAT_FORMAT_PEG_NATIVE: return "peg-native"; case COMMON_CHAT_FORMAT_PEG_CONSTRUCTED: return "peg-constructed"; + case COMMON_CHAT_FORMAT_GIGACHAT_V3: return "GigaChat V3"; default: throw std::runtime_error("Unknown chat format"); } @@ -2451,6 +2452,10 @@ static common_chat_params common_chat_params_init_seed_oss( return data; } + +common_chat_params_init_gigachat_v3 +common_chat_params_parse_gigachat_v3 + static common_chat_params common_chat_templates_apply_jinja( const struct common_chat_templates * tmpls, const struct common_chat_templates_inputs & inputs) @@ -2601,6 +2606,11 @@ static common_chat_params common_chat_templates_apply_jinja( return common_chat_params_init_apriel_1_5(tmpl, params); } + // GigaChatV3 format detection + if (src.find("<|role_sep|>\n") != std::string::npos && src.find("<|message_sep|>\n\n") != std::string::npos) { + return common_chat_params_init_gigachat_v3(tmpl, params); + } + // Use generic handler when mixing tools + JSON schema. // TODO: support that mix in handlers below. if ((params.tools.is_array() && params.json_schema.is_object())) { diff --git a/common/chat.h b/common/chat.h index 6085510a40..b89ea91b07 100644 --- a/common/chat.h +++ b/common/chat.h @@ -124,6 +124,7 @@ enum common_chat_format { COMMON_CHAT_FORMAT_QWEN3_CODER_XML, COMMON_CHAT_FORMAT_APRIEL_1_5, COMMON_CHAT_FORMAT_XIAOMI_MIMO, + COMMON_CHAT_FORMAT_GIGACHAT_V3, // These are intended to be parsed by the PEG parser COMMON_CHAT_FORMAT_PEG_SIMPLE,