Spaces:
Running
Running
possible fix
Browse files- index.html +18 -12
index.html
CHANGED
|
@@ -842,18 +842,24 @@ async function embedText(t){const o=await ST.embedder(t,{pooling:'mean',normaliz
|
|
| 842 |
async function rerankRes(q,res){
|
| 843 |
if(!ST.reranker||!ST.nodeEnabled.rerank)return[];
|
| 844 |
try{
|
| 845 |
-
const
|
| 846 |
-
const
|
| 847 |
-
|
| 848 |
-
|
| 849 |
-
if(typeof out==='number'
|
| 850 |
-
else if(
|
| 851 |
-
|
| 852 |
-
|
| 853 |
-
if(score<0||score>1){score=1/(1+Math.exp(-score))}
|
| 854 |
-
return score;
|
| 855 |
});
|
| 856 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 857 |
}catch(e){console.warn('Rerank err:',e);return[]}
|
| 858 |
}
|
| 859 |
async function genAnswer(q,ctx){
|
|
@@ -912,7 +918,7 @@ function renderRet(items,lid,rr=false){
|
|
| 912 |
items.forEach((item,i)=>{
|
| 913 |
const d=document.createElement('div');d.className=`ret-item ${rr?'sel':''}`;
|
| 914 |
const sc=rr?(item.rerankScore??item.score):item.score;
|
| 915 |
-
d.innerHTML=`<div class="ret-rank">#${i+1}</div><div class="ret-text">${escH(item.text)}</div><div class="ret-foot"><span class="ret-meta">${item.source||'?'} · ${item.category||'?'}</span><div class="score-bar"><div class="score-fill" style="width:0"></div></div><span class="score-pct">${(sc*100).toFixed(1)}%</span></div>`;
|
| 916 |
el.appendChild(d);
|
| 917 |
setTimeout(()=>{d.classList.add(rr?'sel':'lit');d.querySelector('.score-fill').style.width=Math.min(100,Math.abs(sc)*100)+'%'},i*80);
|
| 918 |
});
|
|
|
|
| 842 |
async function rerankRes(q,res){
|
| 843 |
if(!ST.reranker||!ST.nodeEnabled.rerank)return[];
|
| 844 |
try{
|
| 845 |
+
const outputs=await ST.reranker(res.map(r=>q+' </s> '+r.text));
|
| 846 |
+
const scores=outputs.map(out=>{
|
| 847 |
+
let s=0;
|
| 848 |
+
if(typeof out==='number')s=out;
|
| 849 |
+
else if(Array.isArray(out)&&out.length>0)s=out[0]?.score??(typeof out[0]==='number'?out[0]:0);
|
| 850 |
+
else if(out&&typeof out.score==='number')s=out.score;
|
| 851 |
+
if(s<0||s>1)s=1/(1+Math.exp(-s));
|
| 852 |
+
return s;
|
|
|
|
|
|
|
| 853 |
});
|
| 854 |
+
const mn=Math.min(...scores),mx=Math.max(...scores);
|
| 855 |
+
let norm;
|
| 856 |
+
if(mx>mn)norm=scores.map(s=>(s-mn)/(mx-mn));
|
| 857 |
+
else{
|
| 858 |
+
const orig=res.map(r=>r.score);
|
| 859 |
+
const om=Math.min(...orig),ox=Math.max(...orig);
|
| 860 |
+
norm=ox>om?orig.map(s=>(s-om)/(ox-om)):orig.map((_,i)=>(orig.length-i-1)/(orig.length-1));
|
| 861 |
+
}
|
| 862 |
+
return res.map((r,i)=>({...r,rerankScore:norm[i]})).sort((a,b)=>b.rerankScore-a.rerankScore).slice(0,CFG.topKRerank);
|
| 863 |
}catch(e){console.warn('Rerank err:',e);return[]}
|
| 864 |
}
|
| 865 |
async function genAnswer(q,ctx){
|
|
|
|
| 918 |
items.forEach((item,i)=>{
|
| 919 |
const d=document.createElement('div');d.className=`ret-item ${rr?'sel':''}`;
|
| 920 |
const sc=rr?(item.rerankScore??item.score):item.score;
|
| 921 |
+
d.innerHTML=`<div class="ret-rank">#${i+1}</div><div class="ret-text">${escH(item.text)}</div><div class="ret-foot"><span class="ret-meta">${item.source||'?'} · ${item.category||'?'}</span><div class="score-bar"><div class="score-fill" style="width:0"></div></div><span class="score-pct">${(Math.abs(sc)*100).toFixed(1)}%</span></div>`;
|
| 922 |
el.appendChild(d);
|
| 923 |
setTimeout(()=>{d.classList.add(rr?'sel':'lit');d.querySelector('.score-fill').style.width=Math.min(100,Math.abs(sc)*100)+'%'},i*80);
|
| 924 |
});
|