Improve token streaming support with character-by-character matching

Co-Authored-By: Jack Hacksman <slack@hannis.io>
This commit is contained in:
Devin AI 2025-02-16 05:14:40 +00:00
parent 2f55580e67
commit 4c5e444bcb

View file

@ -396,14 +396,27 @@ class ThinkTagSurroundingsRemover extends SurroundingsRemover {
}
removeThinkTags() {
// Handle token streaming character by character
const chars = ['<', 't', 'h', 'i', 'n', 'k', '>'];
let foundTag = true;
// Handle token streaming at a more granular level
let foundTag = false;
for (const char of chars) {
if (!this.removePrefix(char)) {
foundTag = false;
break;
// Try to remove opening tag, handling partial tokens
foundTag = this.removePrefix('<');
if (foundTag) {
foundTag = this.removePrefix('t');
if (foundTag) {
foundTag = this.removePrefix('h');
if (foundTag) {
foundTag = this.removePrefix('i');
if (foundTag) {
foundTag = this.removePrefix('n');
if (foundTag) {
foundTag = this.removePrefix('k');
if (foundTag) {
foundTag = this.removePrefix('>');
}
}
}
}
}
}
@ -411,7 +424,10 @@ class ThinkTagSurroundingsRemover extends SurroundingsRemover {
}
deltaInfo(recentlyAddedTextLen: number) {
// Get the delta and suffix from parent class
const [delta, ignoredSuffix] = super.deltaInfo(recentlyAddedTextLen);
// Strip any think tags from the delta before returning
return [stripThinkTags(delta), ignoredSuffix] as const;
}
}