@@ -83,33 +83,6 @@ static void sigint_handler(int signo) {
8383}
8484#endif
8585
86- class template_content_tracker {
87- public:
88- template_content_tracker () : pos_(0 ), start_(std::string::npos), end_(std::string::npos) {}
89-
90- void set_range (size_t start, size_t end) {
91- start_ = start;
92- end_ = end;
93- }
94-
95- bool should_display (size_t pos) const {
96- return start_ != std::string::npos && pos >= start_ && pos < end_;
97- }
98-
99- bool at_end (size_t pos) const {
100- return start_ != std::string::npos && pos >= end_;
101- }
102-
103- bool is_active () const {
104- return start_ != std::string::npos;
105- }
106-
107- private:
108- size_t pos_;
109- size_t start_;
110- size_t end_;
111- };
112-
11386class partial_formatter {
11487public:
11588 enum output_type {
@@ -175,7 +148,8 @@ class chat_formatter {
175148 cinputs.reasoning_format = params_.reasoning_format ;
176149
177150 cinputs.enable_thinking =
178- params_.use_jinja && params_.reasoning_budget != 0 &&
151+ params_.use_jinja &&
152+ params_.reasoning_budget != 0 &&
179153 common_chat_templates_support_enable_thinking (chat_templates_.get ());
180154
181155 common_chat_params cparams = common_chat_templates_apply (chat_templates_.get (), cinputs);
@@ -427,30 +401,6 @@ int main(int argc, char ** argv) {
427401 LOG_DBG (" tokens: %s\n " , string_from (ctx, embd_inp).c_str ());
428402 }
429403
430- // Set up content tracking to skip template markup during display
431- size_t prompt_pos = 0 ;
432- template_content_tracker system_tracker;
433- template_content_tracker prompt_tracker;
434-
435- if (params.conversation_mode && params.enable_chat_template ) {
436- size_t search_pos = 0 ;
437- for (const auto & msg : chat_msgs) {
438- if (msg.role == " system" ) {
439- size_t content_start = prompt.find (msg.content , search_pos);
440- if (content_start != std::string::npos) {
441- system_tracker.set_range (content_start, content_start + msg.content .length ());
442- search_pos = content_start + msg.content .length ();
443- }
444- } else if (msg.role == " user" ) {
445- size_t content_start = prompt.find (msg.content , search_pos);
446- if (content_start != std::string::npos) {
447- prompt_tracker.set_range (content_start, content_start + msg.content .length ());
448- search_pos = content_start + msg.content .length ();
449- }
450- }
451- }
452- }
453-
454404 // Should not run without any tokens
455405 if (!waiting_for_first_input && embd_inp.empty ()) {
456406 if (add_bos) {
@@ -698,6 +648,12 @@ int main(int argc, char ** argv) {
698648 embd_inp.push_back (decoder_start_token_id);
699649 }
700650
651+ if (chat_add_and_format.get_partial_formatter ()) {
652+ for (const auto & msg : chat_msgs) {
653+ LOG (" %s\n " , msg.content .c_str ());
654+ }
655+ }
656+
701657 while ((n_remain != 0 && !is_antiprompt) || params.interactive ) {
702658 // predict
703659 if (!embd.empty ()) {
@@ -883,27 +839,8 @@ int main(int argc, char ** argv) {
883839 for (auto id : embd) {
884840 const std::string token_str = common_token_to_piece (ctx, id, params.special );
885841
886- if (!chat_add_and_format.get_partial_formatter () || assistant_ss.str ().empty ()) {
887- bool always_display = !system_tracker.is_active () && !prompt_tracker.is_active ();
888- if (always_display) {
889- LOG (" %s" , token_str.c_str ());
890-
891- } else if (system_tracker.should_display (prompt_pos)) {
892- LOG (" %s" , token_str.c_str ());
893- size_t next_pos = prompt_pos + token_str.length ();
894- if (system_tracker.at_end (next_pos)) {
895- LOG (" \n " );
896- }
897-
898- } else if (prompt_tracker.should_display (prompt_pos)) {
899- LOG (" %s" , token_str.c_str ());
900- size_t next_pos = prompt_pos + token_str.length ();
901- if (prompt_tracker.at_end (next_pos)) {
902- LOG (" \n " );
903- }
904- }
905-
906- prompt_pos += token_str.length ();
842+ if (!chat_add_and_format.get_partial_formatter ()) {
843+ LOG (" %s" , token_str.c_str ());
907844 }
908845
909846 // Record Displayed Tokens To Log
0 commit comments