mirror of
https://github.com/ollama/ollama.git
synced 2025-08-25 04:41:31 +02:00
thinking: fix double emit when no opening tag
The thinking parser will automatically transition to being a pass-through if non-whitespace is seen before an opening tag. However, we weren't clearing the buffer after the first non-whitespace input, so in practice the first token would be emitted twice. Added a test that demonstrated this, and then fixed the bug.
This commit is contained in:
@@ -103,7 +103,9 @@ func eat(s *Parser) (string, string, bool) {
|
|||||||
// note that we use the original content, not the trimmed one because we
|
// note that we use the original content, not the trimmed one because we
|
||||||
// don't want to eat any whitespace in the real content if there were no
|
// don't want to eat any whitespace in the real content if there were no
|
||||||
// thinking tags
|
// thinking tags
|
||||||
return "", s.acc.String(), false
|
untrimmed := s.acc.String()
|
||||||
|
s.acc.Reset()
|
||||||
|
return "", untrimmed, false
|
||||||
}
|
}
|
||||||
case thinkingState_ThinkingStartedEatingWhitespace:
|
case thinkingState_ThinkingStartedEatingWhitespace:
|
||||||
trimmed := strings.TrimLeftFunc(s.acc.String(), unicode.IsSpace)
|
trimmed := strings.TrimLeftFunc(s.acc.String(), unicode.IsSpace)
|
||||||
|
@@ -58,6 +58,15 @@ func TestThinkingStreaming(t *testing.T) {
|
|||||||
wantContent: " abc",
|
wantContent: " abc",
|
||||||
wantStateAfter: thinkingState_ThinkingDone,
|
wantStateAfter: thinkingState_ThinkingDone,
|
||||||
},
|
},
|
||||||
|
// regression test for a bug where we were transitioning directly to
|
||||||
|
// ThinkingDone without clearing the buffer. This would cuase the first
|
||||||
|
// step to be outputted twice
|
||||||
|
{
|
||||||
|
input: "def",
|
||||||
|
wantThinking: "",
|
||||||
|
wantContent: "def",
|
||||||
|
wantStateAfter: thinkingState_ThinkingDone,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user