Create basic content parser if no parser definition found

This commit is contained in:
Piotr Wilkin 2026-02-14 00:26:17 +01:00
parent 3605e78569
commit 61e18cad3f
2 changed files with 9 additions and 4 deletions

View File

@ -11,6 +11,7 @@
#include "jinja/value.h"
#include "jinja/runtime.h"
#include "jinja/caps.h"
#include "peg-parser.h"
#include <cstdio>
#include <cstdlib>
@ -1368,12 +1369,16 @@ common_chat_msg common_chat_parse(const std::string & input,
return common_chat_peg_parse(params.parser, input, is_partial, params);
}
common_chat_msg common_chat_peg_parse(const common_peg_arena & parser,
common_chat_msg common_chat_peg_parse(const common_peg_arena & src_parser,
const std::string & input,
bool is_partial,
const common_chat_parser_params & params) {
if (parser.empty()) {
throw std::runtime_error("Failed to parse due to missing parser definition.");
const common_peg_arena & parser = src_parser.empty() ?
build_chat_peg_unified_parser([](common_chat_peg_unified_builder & p) { return p.content(p.rest()) + p.end(); }) :
src_parser;
if (src_parser.empty()) {
LOG_WRN("No parser definition detected, assuming pure content parser.");
}
LOG_DBG("Parsing PEG input with format %s: %s\n", common_chat_format_name(params.format), input.c_str());

View File

@ -272,7 +272,7 @@ std::string common_chat_format_example(const struct common_chat_templates *
const char * common_chat_format_name(common_chat_format format);
common_chat_msg common_chat_parse(const std::string & input, bool is_partial, const common_chat_parser_params & params);
common_chat_msg common_chat_peg_parse(const common_peg_arena & parser, const std::string & input, bool is_partial, const common_chat_parser_params & params);
common_chat_msg common_chat_peg_parse(const common_peg_arena & src_parser, const std::string & input, bool is_partial, const common_chat_parser_params & params);
// used by arg and server
const char * common_reasoning_format_name(common_reasoning_format format);