|
|
@@ -240,7 +240,7 @@ async function streamAsk(query,media,aiDiv,contentDiv){
|
|
|
var ctrl=streamAbort?streamAbort:new AbortController();
|
|
|
var r=await fetch(endpoint,{method:'POST',headers:authHeaders(),body:body,signal:ctrl.signal});
|
|
|
if(!r.ok){contentDiv.innerHTML=md2html('请求失败: HTTP '+r.status);aiDiv.classList.remove('streaming');STREAMING=false;resetSendBtn();return}
|
|
|
- var reader=r.body.getReader(),decoder=new TextDecoder(),buffer='',fullText='',eventType='';
|
|
|
+ var reader=r.body.getReader(),decoder=new TextDecoder(),buffer='',fullText='',eventType='',sourcesHtml='';
|
|
|
while(true){
|
|
|
var{ done, value }=await reader.read();
|
|
|
if(done)break;
|
|
|
@@ -260,7 +260,7 @@ async function streamAsk(query,media,aiDiv,contentDiv){
|
|
|
}
|
|
|
if(eventType==='intent'){currentIntent=data;var tagEl=aiDiv.querySelector('.tag');if(tagEl){tagEl.textContent=intentLabel(data);tagEl.className='tag '+tagClass(data)}continue}
|
|
|
if(eventType==='meta'){
|
|
|
- try{var meta=JSON.parse(data);if(meta.sources&&meta.sources.length>0){var sh='<div class="source">参考:';for(var s=0;s<Math.min(meta.sources.length,3);s++){var src=meta.sources[s];sh+=esc(src.name||'')+' ('+esc(src.section||'')+') '}sh+='</div>';fullText+=sh}}catch(e){}
|
|
|
+ try{var meta=JSON.parse(data);}catch(e){}
|
|
|
continue;
|
|
|
}
|
|
|
fullText+=data;
|
|
|
@@ -270,9 +270,9 @@ async function streamAsk(query,media,aiDiv,contentDiv){
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- contentDiv.innerHTML=md2html(fullText);var c=contentDiv.querySelector('.cursor');if(c)c.remove();
|
|
|
+ contentDiv.innerHTML=md2html(fullText)+(sourcesHtml||'');var c=contentDiv.querySelector('.cursor');if(c)c.remove();
|
|
|
}catch(e){
|
|
|
- if(e.name==='AbortError'){contentDiv.innerHTML=md2html(fullText+' <span style="color:var(--rd)">已停止</span>');}
|
|
|
+ if(e.name==='AbortError'){contentDiv.innerHTML=md2html(fullText+' <span style="color:var(--rd)">已停止</span>')+(sourcesHtml||'');}
|
|
|
else{contentDiv.innerHTML=md2html('连接失败: '+esc(e.message));}
|
|
|
}
|
|
|
aiDiv.classList.remove('streaming');STREAMING=false;streamAbort=null;resetSendBtn();
|