Updates
Rolling release / release (push) Successful in 8m31s

This commit is contained in:
2026-09-13 15:08:05 -04:00
parent b56171da9b
commit c5ccaa490b
29 changed files with 933 additions and 146 deletions
+49 -3
View File
@@ -10,13 +10,59 @@ function clip(s) {
return t.slice(0, MAX_DELTA);
}
function eventDelta(ev) {
if (ev == null) return '';
if (typeof ev === 'string' || typeof ev === 'number' || typeof ev === 'boolean') return clip(ev);
return clip(ev.text || ev.delta || ev.content || ev.chunk || '');
}
const THINK_OPEN = '<think>';
const THINK_CLOSE = '</think>';
function trailingPartial(buf, marker) {
const max = Math.min(buf.length, marker.length - 1);
for (let len = max; len > 0; len--) {
if (marker.startsWith(buf.slice(buf.length - len))) return len;
}
return 0;
}
function expandThinkEvents(n, state) {
const st = state && typeof state === 'object' ? state : { inThink: false, carry: '' };
if (!n) return { events: [], state: st };
if (n.type === 'thinkingDelta') {
const delta = n.delta || '';
return { events: delta ? [n] : [], state: st };
}
if (n.type !== 'contentDelta') return { events: [n], state: st };
let rest = String(st.carry || '') + String(n.delta || '');
const events = [];
let inThink = !!st.inThink;
while (rest) {
const marker = inThink ? THINK_CLOSE : THINK_OPEN;
const idx = rest.indexOf(marker);
if (idx < 0) {
const partial = trailingPartial(rest, marker);
const emit = partial ? rest.slice(0, rest.length - partial) : rest;
const carry = partial ? rest.slice(rest.length - partial) : '';
if (emit) events.push({ type: inThink ? 'thinkingDelta' : 'contentDelta', delta: emit });
return { events, state: { inThink, carry } };
}
const before = rest.slice(0, idx);
if (before) events.push({ type: inThink ? 'thinkingDelta' : 'contentDelta', delta: before });
rest = rest.slice(idx + marker.length);
inThink = !inThink;
}
return { events, state: { inThink, carry: '' } };
}
function normalizeCompletionEvent(ev) {
if (!ev || !ev.type) return null;
if (ev.type === 'contentDelta') {
return { type: 'contentDelta', delta: clip(ev.delta || ev.text || ev.content || '') };
return { type: 'contentDelta', delta: eventDelta(ev) };
}
if (ev.type === 'thinkingDelta') {
return { type: 'thinkingDelta', delta: clip(ev.delta || ev.text || ev.content || '') };
return { type: 'thinkingDelta', delta: eventDelta(ev) };
}
if (ev.type === 'toolCall') {
const call = ev.call || ev.toolCall || ev;
@@ -35,4 +81,4 @@ function normalizeCompletionEvent(ev) {
return { type: ev.type, delta: ev.delta != null ? clip(ev.delta) : undefined, call: ev.call };
}
module.exports = { normalizeCompletionEvent, MAX_DELTA };
module.exports = { normalizeCompletionEvent, expandThinkEvents, eventDelta, MAX_DELTA };