28#include <llama/llama.h>
30#include <peg-parser.h>
143 const std::string& output,
144 common_chat_format format,
145 common_reasoning_format reasoning_format = COMMON_REASONING_FORMAT_NONE,
146 bool is_partial =
false,
147 bool thinking_forced_open =
false,
148 const std::string& parser_data =
""
154 common_chat_parser_params syntax;
155 syntax.format = format;
157 syntax.thinking_forced_open = thinking_forced_open;
160 if (!parser_data.empty()) {
161 syntax.parser.load(parser_data);
165 common_chat_msg msg = common_chat_parse(output, is_partial, syntax);
171 for (
const auto& tc : msg.tool_calls) {
172 result.
tool_calls.push_back({tc.name, tc.arguments, tc.id});
175 }
catch (
const std::exception& e) {
176 LLOYAL_LOG_DEBUG(
"[chat_out::parse] Parse failed: %s, returning raw output", e.what());
201 const llama_model* model,
202 const std::string& output,
203 bool is_partial =
false
209 common_chat_templates_ptr tmpls = common_chat_templates_init(model,
"");
216 common_chat_templates_inputs inputs;
217 inputs.messages = {{.role =
"user", .
content =
""}};
218 inputs.add_generation_prompt =
true;
219 inputs.use_jinja =
true;
221 common_chat_params params = common_chat_templates_apply(tmpls.get(), inputs);
224 return parse(output, params.format, COMMON_REASONING_FORMAT_NONE, is_partial,
225 params.thinking_forced_open);
227 }
catch (
const std::exception& e) {
#define LLOYAL_LOG_DEBUG(...)
liblloyal - Common definitions and logging
Chat output parsing (tool calls, reasoning, content)
ParseResult parse(const std::string &output, common_chat_format format, common_reasoning_format reasoning_format=COMMON_REASONING_FORMAT_NONE, bool is_partial=false, bool thinking_forced_open=false, const std::string &parser_data="")
Parse model output with explicit format.
Result from parsing model output.
std::vector< ToolCall > tool_calls
Extracted tool calls (empty array if none)
std::string content
Main response text (visible to user)
std::string reasoning_content
Extracted thinking/reasoning blocks (empty if none)