|
@@ -62,6 +62,7 @@
|
|
|
const reader = response.body.getReader();
|
|
const reader = response.body.getReader();
|
|
|
const decoder = new TextDecoder();
|
|
const decoder = new TextDecoder();
|
|
|
let buffer = "";
|
|
let buffer = "";
|
|
|
|
|
+ let doneReceived = false;
|
|
|
|
|
|
|
|
while(true){
|
|
while(true){
|
|
|
const {done, value} = await reader.read();
|
|
const {done, value} = await reader.read();
|
|
@@ -74,7 +75,16 @@
|
|
|
for(let i = 0; i < lines.length; i++){
|
|
for(let i = 0; i < lines.length; i++){
|
|
|
if(!lines[i].startsWith("data:")) continue;
|
|
if(!lines[i].startsWith("data:")) continue;
|
|
|
const data = lines[i].slice(5).trim();
|
|
const data = lines[i].slice(5).trim();
|
|
|
- if(data === "[DONE]") continue;
|
|
|
|
|
|
|
+ if(data === "[DONE]") { doneReceived = true; continue; }
|
|
|
|
|
+ if(doneReceived) {
|
|
|
|
|
+ try {
|
|
|
|
|
+ const meta = JSON.parse(data);
|
|
|
|
|
+ turns[turns.length - 1].created_at = meta.created_at;
|
|
|
|
|
+ turns[turns.length - 1].tokens_used = meta.tokens;
|
|
|
|
|
+ tokensRemaining -= meta.tokens;
|
|
|
|
|
+ } catch {}
|
|
|
|
|
+ continue;
|
|
|
|
|
+ }
|
|
|
try{
|
|
try{
|
|
|
const json = JSON.parse(data);
|
|
const json = JSON.parse(data);
|
|
|
const chunk = json.choices?.[0]?.delta?.content;
|
|
const chunk = json.choices?.[0]?.delta?.content;
|
|
@@ -84,15 +94,6 @@
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
streaming = false;
|
|
streaming = false;
|
|
|
-
|
|
|
|
|
- try {
|
|
|
|
|
- const refreshRes = await fetch(`${PUBLIC_API_URL}/game/${game.id}`, { credentials: "include" });
|
|
|
|
|
- if(refreshRes.ok){
|
|
|
|
|
- const refreshData = await refreshRes.json();
|
|
|
|
|
- turns = refreshData.data.turns;
|
|
|
|
|
- tokensRemaining = refreshData.data.tokens_remaining;
|
|
|
|
|
- }
|
|
|
|
|
- } catch {}
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
onMount(()=>{
|
|
onMount(()=>{
|