Skip to content

Commit f4cc787

Browse files
authored
common : enable streaming JSON argument values (#23173)
* common : remove atomic from json arguments * common : remove parsing logic on JSON arguments
1 parent 3fbadb0 commit f4cc787

2 files changed

Lines changed: 2 additions & 30 deletions

File tree

common/chat-peg-parser.cpp

Lines changed: 1 addition & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -358,35 +358,7 @@ void common_chat_peg_mapper::map(const common_peg_ast_node & node) {
358358
if (is_potential_container) {
359359
value_content = normalize_container_value(value_content);
360360
}
361-
362-
// Try to parse as JSON value (number, bool, null, object, array)
363-
try {
364-
ordered_json parsed = ordered_json::parse(value_content);
365-
if (parsed.is_string()) {
366-
// Don't add closing quote yet (added by arg_close) for monotonic streaming
367-
std::string escaped = parsed.dump();
368-
if (!escaped.empty() && escaped.back() == '"') {
369-
escaped.pop_back();
370-
}
371-
value_to_add = escaped;
372-
closing_quote_pending = true;
373-
} else {
374-
// Non-string values: use raw content to preserve whitespace for monotonicity
375-
value_to_add = value_content;
376-
}
377-
} catch (...) {
378-
if (node.is_partial && is_potential_container) {
379-
// Partial container: pass through the already-normalized content
380-
value_to_add = value_content;
381-
} else {
382-
// Not valid JSON - treat as string value
383-
if (!closing_quote_pending) {
384-
value_to_add = "\"";
385-
closing_quote_pending = true;
386-
}
387-
value_to_add += escape_json_string_inner(value_content);
388-
}
389-
}
361+
value_to_add += value_content;
390362
}
391363

392364
args_target() += value_to_add;

common/chat-peg-parser.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ class common_chat_peg_builder : public common_peg_parser_builder {
9090

9191
// Use for schema-declared string types - won't be treated as potential JSON container
9292
common_peg_parser tool_arg_string_value(const common_peg_parser & p) { return tag(TOOL_ARG_STRING_VALUE, p); }
93-
common_peg_parser tool_arg_json_value(const common_peg_parser & p) { return atomic(tag(TOOL_ARG_VALUE, p)); }
93+
common_peg_parser tool_arg_json_value(const common_peg_parser & p) { return tag(TOOL_ARG_VALUE, p); }
9494

9595

9696
// Return a parser that parses the prefix of a string, up to a given delimiter.

0 commit comments

Comments
 (0)