From 61e18cad3f74f184e0d77b12896417b4cd9cda1e Mon Sep 17 00:00:00 2001 From: Piotr Wilkin Date: Sat, 14 Feb 2026 00:26:17 +0100 Subject: [PATCH] Create basic content parser if no parser definition found --- common/chat.cpp | 11 ++++++++--- common/chat.h | 2 +- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/common/chat.cpp b/common/chat.cpp index abc93392aa..4c03d030ff 100644 --- a/common/chat.cpp +++ b/common/chat.cpp @@ -11,6 +11,7 @@ #include "jinja/value.h" #include "jinja/runtime.h" #include "jinja/caps.h" +#include "peg-parser.h" #include #include @@ -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()); diff --git a/common/chat.h b/common/chat.h index 0492b82c44..8ccdba03e1 100644 --- a/common/chat.h +++ b/common/chat.h @@ -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);