50 std::string cleaned = std::regex_replace(content,
51 std::regex(R
"((?:<tool_call>|<\|tool_call\|?>|<\|im_start\|>tool_call))"
52 R"(\s*[\s\S]*?\s*</tool_call>)"),
79 static const std::regex kGemmaTemplateMarkers(
80 R
"(<\|im_end\|?>|<\|im_start\|?>(?:user|assistant|system|tool_call)?|)"
81 R"(<end_of_turn>|<start_of_turn>(?:user|model)?)");
82 cleaned = std::regex_replace(cleaned, kGemmaTemplateMarkers, "");
std::vector< ToolCall > parse_tagged_tool_calls(const std::string &content) const
Parse <tool_call>JSON</tool_call> tagged blocks.
std::vector< ToolCall > parse_bare_json_tool_calls(const std::string &content) const
Parse bare JSON lines containing "name" key.
std::string strip_think_blocks(const std::string &content) const
Strip all <think>...</think> blocks from content.
ParseResult parse_tool_calls(const std::string &content) const override
Parse tool calls via tagged JSON, falling back to bare JSON.
Gemma 4 chat adapter (v2.1.9, gh#46).
Activate model on GPU (WARM → ACTIVE).
Parsed tool call result: cleaned content + extracted calls.
std::string cleaned_content
Content with tool calls removed.
std::vector< ToolCall > tool_calls
Extracted tool calls.