Skip to content

Commit 6ed8a8f

Browse files
author
ochafik
committed
server: wire chat diffs in stream mode
1 parent 9462365 commit 6ed8a8f

File tree

8 files changed

+293
-205
lines changed

8 files changed

+293
-205
lines changed

common/chat.cpp

Lines changed: 1 addition & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1695,43 +1695,11 @@ static void common_chat_parse(common_chat_msg_parser & builder, common_chat_form
16951695
builder.finish();
16961696
}
16971697

1698-
common_chat_msg common_chat_parse(const std::string & input, common_chat_format format, bool is_partial, const std::vector<common_regex> & trigger_regexes) {
1698+
common_chat_msg common_chat_parse(const std::string & input, common_chat_format format, bool is_partial) {
16991699
auto extract_reasoning = format == COMMON_CHAT_FORMAT_DEEPSEEK_R1_EXTRACT_REASONING
17001700
|| format == COMMON_CHAT_FORMAT_HERMES_2_PRO_EXTRACT_REASONING
17011701
|| format == COMMON_CHAT_FORMAT_COMMAND_R7B_EXTRACT_REASONING;
17021702

1703-
if (is_partial) {
1704-
bool found_trigger = false;
1705-
auto earliest_partial_trigger = std::string::npos;
1706-
1707-
for (const auto & trigger_regex : trigger_regexes) {
1708-
auto match = trigger_regex.search(input, 0);
1709-
if (match.type == COMMON_REGEX_MATCH_TYPE_PARTIAL) {
1710-
earliest_partial_trigger = std::min(earliest_partial_trigger, match.groups[0].begin);
1711-
} else if (match.type == COMMON_REGEX_MATCH_TYPE_FULL) {
1712-
if (match.groups[0].begin < earliest_partial_trigger) {
1713-
found_trigger = true;
1714-
break;
1715-
}
1716-
}
1717-
}
1718-
1719-
if (!found_trigger && earliest_partial_trigger != std::string::npos) {
1720-
// Stop stopping at the earliest partial trigger to avoid messing the parsing big time.
1721-
auto before_trigger = input.substr(0, earliest_partial_trigger);
1722-
if (before_trigger.empty()) {
1723-
return {};
1724-
}
1725-
common_chat_msg_parser builder(before_trigger, is_partial, extract_reasoning);
1726-
try {
1727-
common_chat_parse(builder, format);
1728-
} catch (const common_chat_msg_partial_exception & ex) {
1729-
LOG_DBG("Partial parse: %s\n", ex.what());
1730-
}
1731-
return builder.result();
1732-
}
1733-
}
1734-
17351703
common_chat_msg_parser builder(input, is_partial, extract_reasoning);
17361704
try {
17371705
common_chat_parse(builder, format);

common/chat.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@ std::string common_chat_format_example(
145145
bool use_jinja);
146146

147147
std::string common_chat_format_name(common_chat_format format);
148-
common_chat_msg common_chat_parse(const std::string & input, common_chat_format format, bool is_partial = false, const std::vector<common_regex> & trigger_regexes = {});
148+
common_chat_msg common_chat_parse(const std::string & input, common_chat_format format, bool is_partial = false);
149149

150150
common_chat_tool_choice common_chat_tool_choice_parse_oaicompat(const std::string & tool_choice);
151151

0 commit comments

Comments
 (0)