diff --git a/tinygrad/llm/chat.html b/tinygrad/llm/chat.html index 2ea21ff279..c5eb80ce76 100644 --- a/tinygrad/llm/chat.html +++ b/tinygrad/llm/chat.html @@ -21,7 +21,7 @@ const d = document.createElement('div'); d.className = 'msg'; chat.appendChild(d); const r = await fetch('/v1/chat/completions', {method: 'POST', headers: {'Content-Type': 'application/json'}, body: JSON.stringify({model: 'llama', messages: msgs, stream: true, temperature: 0.7})}); - let buf = ''; + let buf = '', txt = '', rsn = ''; for (const rd = r.body.getReader(), dec = new TextDecoder();;) { const {done, value} = await rd.read(); if (done) break; @@ -30,9 +30,13 @@ buf = lines.pop(); for (const ln of lines) if (ln.startsWith('data: ') && !ln.includes('[DONE]')) - try { d.textContent += JSON.parse(ln.slice(6)).choices[0]?.delta?.content || '' } catch {} + try { const dl = JSON.parse(ln.slice(6)).choices[0]?.delta; + if (dl?.reasoning_content) { const s = document.createElement('span'); s.style.color = '#888'; + s.textContent = dl.reasoning_content; rsn += dl.reasoning_content; d.appendChild(s) } + if (dl?.content) { const s = document.createElement('span'); + s.textContent = dl.content; txt += dl.content; d.appendChild(s) } } catch {} chat.scrollTop = chat.scrollHeight; } - msgs.push({role: 'assistant', content: d.textContent}); + const m = {role:'assistant', content:txt}; if (rsn) m.reasoning_content = rsn; msgs.push(m); }