From 5569ef50f5686aa9d22f1828e99cc2f68572d2ac Mon Sep 17 00:00:00 2001 From: multipleof4 Date: Sun, 24 Aug 2025 01:13:11 -0700 Subject: [PATCH] Update index.html --- index.html | 45 ++++++++++++++++++++++++++++++++++++--------- 1 file changed, 36 insertions(+), 9 deletions(-) diff --git a/index.html b/index.html index b3d64d3..db52f2c 100644 --- a/index.html +++ b/index.html @@ -216,20 +216,47 @@ const WS_URL="wss://orp.awww.workers.dev/ws"; const buildBody=()=>{const msgs=[];if(store.system_prompt)msgs.push({role:"system",content:[{type:"text",text:store.system_prompt}]});msgs.push(...state.messages.filter(m=>m.role!=="system").map(m=>({role:m.role,content:m.content})));const b=payloadWithSampling({model:store.model,messages:msgs,stream:true});if(store.reasoning_effort&&store.reasoning_effort!=="default")b.reasoning={effort:store.reasoning_effort};return b}; class RunWS{ - constructor(onDelta){this.onDelta=onDelta;this.ws=null;this.seq=-1;this.done=false;this.manual=false;this.rid=Math.random().toString(36).slice(2);this.backoff=300} - start(){this.open("begin")} - abort(){this.manual=true;this.done=true;try{this.ws?.send(JSON.stringify({type:"stop",rid:this.rid}))}catch{}try{this.ws?.close()}catch{}} + constructor(onDelta){ + this.onDelta=onDelta; + this.ws=null; + this.seq=-1; + this.done=false; + this.manual=false; + this.signaled=false; + this.rid=Math.random().toString(36).slice(2); + this.backoff=300; + } + start(){ this.open("begin") } + abort(){ + this.manual=true; this.done=true; + try{ this.ws?.send(JSON.stringify({type:"stop",rid:this.rid})) }catch{} + try{ this.ws?.close() }catch{} + if(!this.signaled){ this.signaled=true; this.onDelta("",true) } // ensure UI resets + } open(mode){ if(this.done)return; this.ws=new WebSocket(WS_URL); - this.ws.onopen=()=>this.ws.send(JSON.stringify(mode==="begin"?{type:"begin",rid:this.rid,apiKey:store.apiKey,or_body:buildBody()}:{type:"resume",rid:this.rid,after:this.seq})); + this.ws.onopen=()=>this.ws.send(JSON.stringify( + mode==="begin" + ? {type:"begin",rid:this.rid,apiKey:store.apiKey,or_body:buildBody()} + : {type:"resume",rid:this.rid,after:this.seq} + )); this.ws.onmessage=e=>{ - let m;try{m=JSON.parse(e.data)}catch{return} - if(m.type==="delta"&&typeof m.seq==="number"&&m.seq>this.seq){this.seq=m.seq;this.onDelta(m.text,false)} - else if(m.type==="done"){this.done=true;this.onDelta("",true);this.ws.close()} - else if(m.type==="err"){this.done=true;this.onDelta("\n\n"+(m.message||"error"),true);this.ws.close()} + let m; try{ m=JSON.parse(e.data) }catch{ return } + if(m.type==="delta"&&typeof m.seq==="number"&&m.seq>this.seq){ + this.seq=m.seq; this.onDelta(m.text,false); + }else if(m.type==="done"){ + this.done=true; if(!this.signaled){this.signaled=true; this.onDelta("",true)}; this.ws.close(); + }else if(m.type==="err"){ + this.done=true; if(!this.signaled){this.signaled=true; this.onDelta("\n\n"+(m.message||"error"),true)}; this.ws.close(); + } }; - this.ws.onclose=()=>{if(!this.done&&!this.manual)setTimeout(()=>this.open("resume"),this.backoff=Math.min(this.backoff*1.5,5e3))} + this.ws.onclose=()=>{ + if(!this.done&&!this.manual){ + setTimeout(()=>this.open("resume"), this.backoff=Math.min(this.backoff*1.5,5000)); + } + }; + this.ws.onerror=()=>{}; } }