Merge branch 'main' into RAGAnything
This commit is contained in:
commit
9bc5f1578c
54 changed files with 3438 additions and 40 deletions
|
|
@ -1,5 +1,5 @@
|
|||
from .lightrag import LightRAG as LightRAG, QueryParam as QueryParam
|
||||
|
||||
__version__ = "1.4.8.1"
|
||||
__version__ = "1.4.8.2"
|
||||
__author__ = "Zirui Guo"
|
||||
__url__ = "https://github.com/HKUDS/LightRAG"
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
__api_version__ = "0222"
|
||||
__api_version__ = "0223"
|
||||
|
|
|
|||
1
lightrag/api/webui/assets/_basePickBy-BZlRisJu.js
generated
Normal file
1
lightrag/api/webui/assets/_basePickBy-BZlRisJu.js
generated
Normal file
|
|
@ -0,0 +1 @@
|
|||
import{e as o,c as l,g as b,k as O,h as P,j as p,l as w,m as c,n as v,t as A,o as N}from"./_baseUniq-DkG1DiI3.js";import{a_ as g,aw as _,a$ as $,b0 as E,b1 as F,b2 as x,b3 as M,b4 as y,b5 as B,b6 as T}from"./mermaid-vendor-BOzHoVUU.js";var S=/\s/;function G(n){for(var r=n.length;r--&&S.test(n.charAt(r)););return r}var H=/^\s+/;function L(n){return n&&n.slice(0,G(n)+1).replace(H,"")}var m=NaN,R=/^[-+]0x[0-9a-f]+$/i,q=/^0b[01]+$/i,z=/^0o[0-7]+$/i,C=parseInt;function K(n){if(typeof n=="number")return n;if(o(n))return m;if(g(n)){var r=typeof n.valueOf=="function"?n.valueOf():n;n=g(r)?r+"":r}if(typeof n!="string")return n===0?n:+n;n=L(n);var t=q.test(n);return t||z.test(n)?C(n.slice(2),t?2:8):R.test(n)?m:+n}var W=1/0,X=17976931348623157e292;function Y(n){if(!n)return n===0?n:0;if(n=K(n),n===W||n===-1/0){var r=n<0?-1:1;return r*X}return n===n?n:0}function D(n){var r=Y(n),t=r%1;return r===r?t?r-t:r:0}function fn(n){var r=n==null?0:n.length;return r?l(n):[]}var I=Object.prototype,J=I.hasOwnProperty,dn=_(function(n,r){n=Object(n);var t=-1,e=r.length,i=e>2?r[2]:void 0;for(i&&$(r[0],r[1],i)&&(e=1);++t<e;)for(var f=r[t],a=E(f),s=-1,d=a.length;++s<d;){var u=a[s],h=n[u];(h===void 0||F(h,I[u])&&!J.call(n,u))&&(n[u]=f[u])}return n});function un(n){var r=n==null?0:n.length;return r?n[r-1]:void 0}function Q(n){return function(r,t,e){var i=Object(r);if(!x(r)){var f=b(t);r=O(r),t=function(s){return f(i[s],s,i)}}var a=n(r,t,e);return a>-1?i[f?r[a]:a]:void 0}}var U=Math.max;function Z(n,r,t){var e=n==null?0:n.length;if(!e)return-1;var i=t==null?0:D(t);return i<0&&(i=U(e+i,0)),P(n,b(r),i)}var hn=Q(Z);function V(n,r){var t=-1,e=x(n)?Array(n.length):[];return p(n,function(i,f,a){e[++t]=r(i,f,a)}),e}function gn(n,r){var t=M(n)?w:V;return t(n,b(r))}var j=Object.prototype,k=j.hasOwnProperty;function nn(n,r){return n!=null&&k.call(n,r)}function bn(n,r){return n!=null&&c(n,r,nn)}function rn(n,r){return n<r}function tn(n,r,t){for(var e=-1,i=n.length;++e<i;){var f=n[e],a=r(f);if(a!=null&&(s===void 0?a===a&&!o(a):t(a,s)))var s=a,d=f}return d}function mn(n){return n&&n.length?tn(n,y,rn):void 0}function an(n,r,t,e){if(!g(n))return n;r=v(r,n);for(var i=-1,f=r.length,a=f-1,s=n;s!=null&&++i<f;){var d=A(r[i]),u=t;if(d==="__proto__"||d==="constructor"||d==="prototype")return n;if(i!=a){var h=s[d];u=void 0,u===void 0&&(u=g(h)?h:B(r[i+1])?[]:{})}T(s,d,u),s=s[d]}return n}function on(n,r,t){for(var e=-1,i=r.length,f={};++e<i;){var a=r[e],s=N(n,a);t(s,a)&&an(f,v(a,n),s)}return f}export{rn as a,tn as b,V as c,on as d,mn as e,fn as f,hn as g,bn as h,dn as i,D as j,un as l,gn as m,Y as t};
|
||||
1
lightrag/api/webui/assets/_baseUniq-DkG1DiI3.js
generated
Normal file
1
lightrag/api/webui/assets/_baseUniq-DkG1DiI3.js
generated
Normal file
File diff suppressed because one or more lines are too long
36
lightrag/api/webui/assets/architectureDiagram-SUXI7LT5-DxGZ4Qwo.js
generated
Normal file
36
lightrag/api/webui/assets/architectureDiagram-SUXI7LT5-DxGZ4Qwo.js
generated
Normal file
File diff suppressed because one or more lines are too long
122
lightrag/api/webui/assets/blockDiagram-6J76NXCF-DcYErWhY.js
generated
Normal file
122
lightrag/api/webui/assets/blockDiagram-6J76NXCF-DcYErWhY.js
generated
Normal file
File diff suppressed because one or more lines are too long
10
lightrag/api/webui/assets/c4Diagram-6F6E4RAY-BbSTqnii.js
generated
Normal file
10
lightrag/api/webui/assets/c4Diagram-6F6E4RAY-BbSTqnii.js
generated
Normal file
File diff suppressed because one or more lines are too long
1
lightrag/api/webui/assets/chunk-353BL4L5-DshwP1ma.js
generated
Normal file
1
lightrag/api/webui/assets/chunk-353BL4L5-DshwP1ma.js
generated
Normal file
|
|
@ -0,0 +1 @@
|
|||
import{_ as l}from"./mermaid-vendor-BOzHoVUU.js";function m(e,c){var i,t,o;e.accDescr&&((i=c.setAccDescription)==null||i.call(c,e.accDescr)),e.accTitle&&((t=c.setAccTitle)==null||t.call(c,e.accTitle)),e.title&&((o=c.setDiagramTitle)==null||o.call(c,e.title))}l(m,"populateCommonDb");export{m as p};
|
||||
1
lightrag/api/webui/assets/chunk-67H74DCK-D0z1MsVm.js
generated
Normal file
1
lightrag/api/webui/assets/chunk-67H74DCK-D0z1MsVm.js
generated
Normal file
|
|
@ -0,0 +1 @@
|
|||
import{_ as n,a2 as x,j as l}from"./mermaid-vendor-BOzHoVUU.js";var c=n((a,t)=>{const e=a.append("rect");if(e.attr("x",t.x),e.attr("y",t.y),e.attr("fill",t.fill),e.attr("stroke",t.stroke),e.attr("width",t.width),e.attr("height",t.height),t.name&&e.attr("name",t.name),t.rx&&e.attr("rx",t.rx),t.ry&&e.attr("ry",t.ry),t.attrs!==void 0)for(const r in t.attrs)e.attr(r,t.attrs[r]);return t.class&&e.attr("class",t.class),e},"drawRect"),d=n((a,t)=>{const e={x:t.startx,y:t.starty,width:t.stopx-t.startx,height:t.stopy-t.starty,fill:t.fill,stroke:t.stroke,class:"rect"};c(a,e).lower()},"drawBackgroundRect"),g=n((a,t)=>{const e=t.text.replace(x," "),r=a.append("text");r.attr("x",t.x),r.attr("y",t.y),r.attr("class","legend"),r.style("text-anchor",t.anchor),t.class&&r.attr("class",t.class);const s=r.append("tspan");return s.attr("x",t.x+t.textMargin*2),s.text(e),r},"drawText"),h=n((a,t,e,r)=>{const s=a.append("image");s.attr("x",t),s.attr("y",e);const i=l.sanitizeUrl(r);s.attr("xlink:href",i)},"drawImage"),m=n((a,t,e,r)=>{const s=a.append("use");s.attr("x",t),s.attr("y",e);const i=l.sanitizeUrl(r);s.attr("xlink:href",`#${i}`)},"drawEmbeddedImage"),y=n(()=>({x:0,y:0,width:100,height:100,fill:"#EDF2AE",stroke:"#666",anchor:"start",rx:0,ry:0}),"getNoteRect"),p=n(()=>({x:0,y:0,width:100,height:100,"text-anchor":"start",style:"#666",textMargin:0,rx:0,ry:0,tspan:!0}),"getTextObj");export{d as a,p as b,m as c,c as d,h as e,g as f,y as g};
|
||||
1
lightrag/api/webui/assets/chunk-AACKK3MU-Bfw9V3bu.js
generated
Normal file
1
lightrag/api/webui/assets/chunk-AACKK3MU-Bfw9V3bu.js
generated
Normal file
|
|
@ -0,0 +1 @@
|
|||
import{_ as s}from"./mermaid-vendor-BOzHoVUU.js";var t,e=(t=class{constructor(i){this.init=i,this.records=this.init()}reset(){this.records=this.init()}},s(t,"ImperativeState"),t);export{e as I};
|
||||
1
lightrag/api/webui/assets/chunk-BFAMUDN2-CmfJj-4x.js
generated
Normal file
1
lightrag/api/webui/assets/chunk-BFAMUDN2-CmfJj-4x.js
generated
Normal file
|
|
@ -0,0 +1 @@
|
|||
import{_ as a,d as o}from"./mermaid-vendor-BOzHoVUU.js";var d=a((t,e)=>{let n;return e==="sandbox"&&(n=o("#i"+t)),(e==="sandbox"?o(n.nodes()[0].contentDocument.body):o("body")).select(`[id="${t}"]`)},"getDiagramElement");export{d as g};
|
||||
15
lightrag/api/webui/assets/chunk-E2GYISFI-Bj4t4I37.js
generated
Normal file
15
lightrag/api/webui/assets/chunk-E2GYISFI-Bj4t4I37.js
generated
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
import{_ as e}from"./mermaid-vendor-BOzHoVUU.js";var l=e(()=>`
|
||||
/* Font Awesome icon styling - consolidated */
|
||||
.label-icon {
|
||||
display: inline-block;
|
||||
height: 1em;
|
||||
overflow: visible;
|
||||
vertical-align: -0.125em;
|
||||
}
|
||||
|
||||
.node .label-icon path {
|
||||
fill: currentColor;
|
||||
stroke: revert;
|
||||
stroke-width: revert;
|
||||
}
|
||||
`,"getIconStyles");export{l as g};
|
||||
220
lightrag/api/webui/assets/chunk-OW32GOEJ-Cv4eoNWH.js
generated
Normal file
220
lightrag/api/webui/assets/chunk-OW32GOEJ-Cv4eoNWH.js
generated
Normal file
File diff suppressed because one or more lines are too long
1
lightrag/api/webui/assets/chunk-SKB7J2MH-Bl1qvyQL.js
generated
Normal file
1
lightrag/api/webui/assets/chunk-SKB7J2MH-Bl1qvyQL.js
generated
Normal file
|
|
@ -0,0 +1 @@
|
|||
import{_ as a,e as w,l as x}from"./mermaid-vendor-BOzHoVUU.js";var d=a((e,t,i,o)=>{e.attr("class",i);const{width:r,height:h,x:n,y:c}=u(e,t);w(e,h,r,o);const s=l(n,c,r,h,t);e.attr("viewBox",s),x.debug(`viewBox configured: ${s} with padding: ${t}`)},"setupViewPortForSVG"),u=a((e,t)=>{var o;const i=((o=e.node())==null?void 0:o.getBBox())||{width:0,height:0,x:0,y:0};return{width:i.width+t*2,height:i.height+t*2,x:i.x,y:i.y}},"calculateDimensionsWithPadding"),l=a((e,t,i,o,r)=>`${e-r} ${t-r} ${i} ${o}`,"createViewBox");export{d as s};
|
||||
165
lightrag/api/webui/assets/chunk-SZ463SBG-CsKBHaWY.js
generated
Normal file
165
lightrag/api/webui/assets/chunk-SZ463SBG-CsKBHaWY.js
generated
Normal file
File diff suppressed because one or more lines are too long
1
lightrag/api/webui/assets/classDiagram-M3E45YP4-CzL1fI5K.js
generated
Normal file
1
lightrag/api/webui/assets/classDiagram-M3E45YP4-CzL1fI5K.js
generated
Normal file
|
|
@ -0,0 +1 @@
|
|||
import{s as a,c as s,a as e,C as t}from"./chunk-SZ463SBG-CsKBHaWY.js";import{_ as i}from"./mermaid-vendor-BOzHoVUU.js";import"./chunk-E2GYISFI-Bj4t4I37.js";import"./chunk-BFAMUDN2-CmfJj-4x.js";import"./chunk-SKB7J2MH-Bl1qvyQL.js";import"./feature-graph-bahMe5Gt.js";import"./react-vendor-DEwriMA6.js";import"./graph-vendor-B-X5JegA.js";import"./ui-vendor-CeCm8EER.js";import"./utils-vendor-BysuhMZA.js";var c={parser:e,get db(){return new t},renderer:s,styles:a,init:i(r=>{r.class||(r.class={}),r.class.arrowMarkerAbsolute=r.arrowMarkerAbsolute},"init")};export{c as diagram};
|
||||
1
lightrag/api/webui/assets/classDiagram-v2-YAWTLIQI-CzL1fI5K.js
generated
Normal file
1
lightrag/api/webui/assets/classDiagram-v2-YAWTLIQI-CzL1fI5K.js
generated
Normal file
|
|
@ -0,0 +1 @@
|
|||
import{s as a,c as s,a as e,C as t}from"./chunk-SZ463SBG-CsKBHaWY.js";import{_ as i}from"./mermaid-vendor-BOzHoVUU.js";import"./chunk-E2GYISFI-Bj4t4I37.js";import"./chunk-BFAMUDN2-CmfJj-4x.js";import"./chunk-SKB7J2MH-Bl1qvyQL.js";import"./feature-graph-bahMe5Gt.js";import"./react-vendor-DEwriMA6.js";import"./graph-vendor-B-X5JegA.js";import"./ui-vendor-CeCm8EER.js";import"./utils-vendor-BysuhMZA.js";var c={parser:e,get db(){return new t},renderer:s,styles:a,init:i(r=>{r.class||(r.class={}),r.class.arrowMarkerAbsolute=r.arrowMarkerAbsolute},"init")};export{c as diagram};
|
||||
1
lightrag/api/webui/assets/clone-CXHLa2LR.js
generated
Normal file
1
lightrag/api/webui/assets/clone-CXHLa2LR.js
generated
Normal file
|
|
@ -0,0 +1 @@
|
|||
import{b as r}from"./_baseUniq-DkG1DiI3.js";var e=4;function a(o){return r(o,e)}export{a as c};
|
||||
4
lightrag/api/webui/assets/dagre-JOIXM2OF-Bi9F9HyM.js
generated
Normal file
4
lightrag/api/webui/assets/dagre-JOIXM2OF-Bi9F9HyM.js
generated
Normal file
File diff suppressed because one or more lines are too long
24
lightrag/api/webui/assets/diagram-5UYTHUR4-B0w9c3ea.js
generated
Normal file
24
lightrag/api/webui/assets/diagram-5UYTHUR4-B0w9c3ea.js
generated
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
import{p as y}from"./chunk-353BL4L5-DshwP1ma.js";import{_ as l,s as B,g as S,t as z,q as F,a as P,b as E,F as v,K as W,e as T,z as D,G as _,H as A,l as w}from"./mermaid-vendor-BOzHoVUU.js";import{p as N}from"./treemap-75Q7IDZK-BCGfM6IV.js";import"./feature-graph-bahMe5Gt.js";import"./react-vendor-DEwriMA6.js";import"./graph-vendor-B-X5JegA.js";import"./ui-vendor-CeCm8EER.js";import"./utils-vendor-BysuhMZA.js";import"./_baseUniq-DkG1DiI3.js";import"./_basePickBy-BZlRisJu.js";import"./clone-CXHLa2LR.js";var x={packet:[]},m=structuredClone(x),L=A.packet,Y=l(()=>{const t=v({...L,..._().packet});return t.showBits&&(t.paddingY+=10),t},"getConfig"),G=l(()=>m.packet,"getPacket"),H=l(t=>{t.length>0&&m.packet.push(t)},"pushWord"),I=l(()=>{D(),m=structuredClone(x)},"clear"),u={pushWord:H,getPacket:G,getConfig:Y,clear:I,setAccTitle:E,getAccTitle:P,setDiagramTitle:F,getDiagramTitle:z,getAccDescription:S,setAccDescription:B},K=1e4,M=l(t=>{y(t,u);let e=-1,o=[],n=1;const{bitsPerRow:i}=u.getConfig();for(let{start:a,end:r,bits:c,label:f}of t.blocks){if(a!==void 0&&r!==void 0&&r<a)throw new Error(`Packet block ${a} - ${r} is invalid. End must be greater than start.`);if(a??(a=e+1),a!==e+1)throw new Error(`Packet block ${a} - ${r??a} is not contiguous. It should start from ${e+1}.`);if(c===0)throw new Error(`Packet block ${a} is invalid. Cannot have a zero bit field.`);for(r??(r=a+(c??1)-1),c??(c=r-a+1),e=r,w.debug(`Packet block ${a} - ${e} with label ${f}`);o.length<=i+1&&u.getPacket().length<K;){const[d,p]=O({start:a,end:r,bits:c,label:f},n,i);if(o.push(d),d.end+1===n*i&&(u.pushWord(o),o=[],n++),!p)break;({start:a,end:r,bits:c,label:f}=p)}}u.pushWord(o)},"populate"),O=l((t,e,o)=>{if(t.start===void 0)throw new Error("start should have been set during first phase");if(t.end===void 0)throw new Error("end should have been set during first phase");if(t.start>t.end)throw new Error(`Block start ${t.start} is greater than block end ${t.end}.`);if(t.end+1<=e*o)return[t,void 0];const n=e*o-1,i=e*o;return[{start:t.start,end:n,label:t.label,bits:n-t.start},{start:i,end:t.end,label:t.label,bits:t.end-i}]},"getNextFittingBlock"),q={parse:l(async t=>{const e=await N("packet",t);w.debug(e),M(e)},"parse")},R=l((t,e,o,n)=>{const i=n.db,a=i.getConfig(),{rowHeight:r,paddingY:c,bitWidth:f,bitsPerRow:d}=a,p=i.getPacket(),s=i.getDiagramTitle(),k=r+c,g=k*(p.length+1)-(s?0:r),b=f*d+2,h=W(e);h.attr("viewbox",`0 0 ${b} ${g}`),T(h,g,b,a.useMaxWidth);for(const[C,$]of p.entries())U(h,$,C,a);h.append("text").text(s).attr("x",b/2).attr("y",g-k/2).attr("dominant-baseline","middle").attr("text-anchor","middle").attr("class","packetTitle")},"draw"),U=l((t,e,o,{rowHeight:n,paddingX:i,paddingY:a,bitWidth:r,bitsPerRow:c,showBits:f})=>{const d=t.append("g"),p=o*(n+a)+a;for(const s of e){const k=s.start%c*r+1,g=(s.end-s.start+1)*r-i;if(d.append("rect").attr("x",k).attr("y",p).attr("width",g).attr("height",n).attr("class","packetBlock"),d.append("text").attr("x",k+g/2).attr("y",p+n/2).attr("class","packetLabel").attr("dominant-baseline","middle").attr("text-anchor","middle").text(s.label),!f)continue;const b=s.end===s.start,h=p-2;d.append("text").attr("x",k+(b?g/2:0)).attr("y",h).attr("class","packetByte start").attr("dominant-baseline","auto").attr("text-anchor",b?"middle":"start").text(s.start),b||d.append("text").attr("x",k+g).attr("y",h).attr("class","packetByte end").attr("dominant-baseline","auto").attr("text-anchor","end").text(s.end)}},"drawWord"),X={draw:R},j={byteFontSize:"10px",startByteColor:"black",endByteColor:"black",labelColor:"black",labelFontSize:"12px",titleColor:"black",titleFontSize:"14px",blockStrokeColor:"black",blockStrokeWidth:"1",blockFillColor:"#efefef"},J=l(({packet:t}={})=>{const e=v(j,t);return`
|
||||
.packetByte {
|
||||
font-size: ${e.byteFontSize};
|
||||
}
|
||||
.packetByte.start {
|
||||
fill: ${e.startByteColor};
|
||||
}
|
||||
.packetByte.end {
|
||||
fill: ${e.endByteColor};
|
||||
}
|
||||
.packetLabel {
|
||||
fill: ${e.labelColor};
|
||||
font-size: ${e.labelFontSize};
|
||||
}
|
||||
.packetTitle {
|
||||
fill: ${e.titleColor};
|
||||
font-size: ${e.titleFontSize};
|
||||
}
|
||||
.packetBlock {
|
||||
stroke: ${e.blockStrokeColor};
|
||||
stroke-width: ${e.blockStrokeWidth};
|
||||
fill: ${e.blockFillColor};
|
||||
}
|
||||
`},"styles"),lt={parser:q,db:u,renderer:X,styles:J};export{lt as diagram};
|
||||
24
lightrag/api/webui/assets/diagram-VMROVX33-55nCUjKZ.js
generated
Normal file
24
lightrag/api/webui/assets/diagram-VMROVX33-55nCUjKZ.js
generated
Normal file
File diff suppressed because one or more lines are too long
43
lightrag/api/webui/assets/diagram-ZTM2IBQH-DU929E49.js
generated
Normal file
43
lightrag/api/webui/assets/diagram-ZTM2IBQH-DU929E49.js
generated
Normal file
File diff suppressed because one or more lines are too long
60
lightrag/api/webui/assets/erDiagram-3M52JZNH-DY40TlFY.js
generated
Normal file
60
lightrag/api/webui/assets/erDiagram-3M52JZNH-DY40TlFY.js
generated
Normal file
File diff suppressed because one or more lines are too long
88
lightrag/api/webui/assets/feature-documents-cF4-Vta6.js
generated
Normal file
88
lightrag/api/webui/assets/feature-documents-cF4-Vta6.js
generated
Normal file
File diff suppressed because one or more lines are too long
729
lightrag/api/webui/assets/feature-graph-bahMe5Gt.js
generated
Normal file
729
lightrag/api/webui/assets/feature-graph-bahMe5Gt.js
generated
Normal file
File diff suppressed because one or more lines are too long
10
lightrag/api/webui/assets/feature-retrieval-CnKoygV2.js
generated
Normal file
10
lightrag/api/webui/assets/feature-retrieval-CnKoygV2.js
generated
Normal file
File diff suppressed because one or more lines are too long
162
lightrag/api/webui/assets/flowDiagram-KYDEHFYC-jEI5eok_.js
generated
Normal file
162
lightrag/api/webui/assets/flowDiagram-KYDEHFYC-jEI5eok_.js
generated
Normal file
File diff suppressed because one or more lines are too long
267
lightrag/api/webui/assets/ganttDiagram-EK5VF46D-DVkuF32e.js
generated
Normal file
267
lightrag/api/webui/assets/ganttDiagram-EK5VF46D-DVkuF32e.js
generated
Normal file
File diff suppressed because one or more lines are too long
65
lightrag/api/webui/assets/gitGraphDiagram-GW3U2K7C-DGr7TQha.js
generated
Normal file
65
lightrag/api/webui/assets/gitGraphDiagram-GW3U2K7C-DGr7TQha.js
generated
Normal file
File diff suppressed because one or more lines are too long
1
lightrag/api/webui/assets/graph-CzemdfMH.js
generated
Normal file
1
lightrag/api/webui/assets/graph-CzemdfMH.js
generated
Normal file
File diff suppressed because one or more lines are too long
151
lightrag/api/webui/assets/index-Bjp1KQxU.js
generated
Normal file
151
lightrag/api/webui/assets/index-Bjp1KQxU.js
generated
Normal file
File diff suppressed because one or more lines are too long
3
lightrag/api/webui/assets/index-VdaexpWA.js
generated
Normal file
3
lightrag/api/webui/assets/index-VdaexpWA.js
generated
Normal file
File diff suppressed because one or more lines are too long
2
lightrag/api/webui/assets/infoDiagram-LHK5PUON-RAWFfZhB.js
generated
Normal file
2
lightrag/api/webui/assets/infoDiagram-LHK5PUON-RAWFfZhB.js
generated
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
import{_ as e,l as o,K as i,e as n,L as p}from"./mermaid-vendor-BOzHoVUU.js";import{p as m}from"./treemap-75Q7IDZK-BCGfM6IV.js";import"./feature-graph-bahMe5Gt.js";import"./react-vendor-DEwriMA6.js";import"./graph-vendor-B-X5JegA.js";import"./ui-vendor-CeCm8EER.js";import"./utils-vendor-BysuhMZA.js";import"./_baseUniq-DkG1DiI3.js";import"./_basePickBy-BZlRisJu.js";import"./clone-CXHLa2LR.js";var g={parse:e(async r=>{const a=await m("info",r);o.debug(a)},"parse")},v={version:p.version+""},d=e(()=>v.version,"getVersion"),c={getVersion:d},l=e((r,a,s)=>{o.debug(`rendering info diagram
|
||||
`+r);const t=i(a);n(t,100,400,!0),t.append("g").append("text").attr("x",100).attr("y",40).attr("class","version").attr("font-size",32).style("text-anchor","middle").text(`v${s}`)},"draw"),f={draw:l},L={parser:g,db:c,renderer:f};export{L as diagram};
|
||||
139
lightrag/api/webui/assets/journeyDiagram-EWQZEKCU-C8hrNfef.js
generated
Normal file
139
lightrag/api/webui/assets/journeyDiagram-EWQZEKCU-C8hrNfef.js
generated
Normal file
File diff suppressed because one or more lines are too long
89
lightrag/api/webui/assets/kanban-definition-ZSS6B67P-Dq_JRjqn.js
generated
Normal file
89
lightrag/api/webui/assets/kanban-definition-ZSS6B67P-Dq_JRjqn.js
generated
Normal file
File diff suppressed because one or more lines are too long
1
lightrag/api/webui/assets/layout-Dyo3w9hM.js
generated
Normal file
1
lightrag/api/webui/assets/layout-Dyo3w9hM.js
generated
Normal file
File diff suppressed because one or more lines are too long
49
lightrag/api/webui/assets/markdown-vendor-DmIvJdn7.js
generated
Normal file
49
lightrag/api/webui/assets/markdown-vendor-DmIvJdn7.js
generated
Normal file
File diff suppressed because one or more lines are too long
217
lightrag/api/webui/assets/mermaid-vendor-BOzHoVUU.js
generated
Normal file
217
lightrag/api/webui/assets/mermaid-vendor-BOzHoVUU.js
generated
Normal file
File diff suppressed because one or more lines are too long
95
lightrag/api/webui/assets/mindmap-definition-6CBA2TL7-Kn6oZbpT.js
generated
Normal file
95
lightrag/api/webui/assets/mindmap-definition-6CBA2TL7-Kn6oZbpT.js
generated
Normal file
File diff suppressed because one or more lines are too long
30
lightrag/api/webui/assets/pieDiagram-NIOCPIFQ-DJLEOVyx.js
generated
Normal file
30
lightrag/api/webui/assets/pieDiagram-NIOCPIFQ-DJLEOVyx.js
generated
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
import{p as N}from"./chunk-353BL4L5-DshwP1ma.js";import{_ as i,g as B,s as U,a as q,b as H,t as K,q as V,l as C,c as Z,F as j,K as J,M as Q,N as z,O as X,e as Y,z as tt,P as et,H as at}from"./mermaid-vendor-BOzHoVUU.js";import{p as rt}from"./treemap-75Q7IDZK-BCGfM6IV.js";import"./feature-graph-bahMe5Gt.js";import"./react-vendor-DEwriMA6.js";import"./graph-vendor-B-X5JegA.js";import"./ui-vendor-CeCm8EER.js";import"./utils-vendor-BysuhMZA.js";import"./_baseUniq-DkG1DiI3.js";import"./_basePickBy-BZlRisJu.js";import"./clone-CXHLa2LR.js";var it=at.pie,D={sections:new Map,showData:!1},f=D.sections,w=D.showData,st=structuredClone(it),ot=i(()=>structuredClone(st),"getConfig"),nt=i(()=>{f=new Map,w=D.showData,tt()},"clear"),lt=i(({label:t,value:a})=>{f.has(t)||(f.set(t,a),C.debug(`added new section: ${t}, with value: ${a}`))},"addSection"),ct=i(()=>f,"getSections"),pt=i(t=>{w=t},"setShowData"),dt=i(()=>w,"getShowData"),F={getConfig:ot,clear:nt,setDiagramTitle:V,getDiagramTitle:K,setAccTitle:H,getAccTitle:q,setAccDescription:U,getAccDescription:B,addSection:lt,getSections:ct,setShowData:pt,getShowData:dt},gt=i((t,a)=>{N(t,a),a.setShowData(t.showData),t.sections.map(a.addSection)},"populateDb"),ut={parse:i(async t=>{const a=await rt("pie",t);C.debug(a),gt(a,F)},"parse")},mt=i(t=>`
|
||||
.pieCircle{
|
||||
stroke: ${t.pieStrokeColor};
|
||||
stroke-width : ${t.pieStrokeWidth};
|
||||
opacity : ${t.pieOpacity};
|
||||
}
|
||||
.pieOuterCircle{
|
||||
stroke: ${t.pieOuterStrokeColor};
|
||||
stroke-width: ${t.pieOuterStrokeWidth};
|
||||
fill: none;
|
||||
}
|
||||
.pieTitleText {
|
||||
text-anchor: middle;
|
||||
font-size: ${t.pieTitleTextSize};
|
||||
fill: ${t.pieTitleTextColor};
|
||||
font-family: ${t.fontFamily};
|
||||
}
|
||||
.slice {
|
||||
font-family: ${t.fontFamily};
|
||||
fill: ${t.pieSectionTextColor};
|
||||
font-size:${t.pieSectionTextSize};
|
||||
// fill: white;
|
||||
}
|
||||
.legend text {
|
||||
fill: ${t.pieLegendTextColor};
|
||||
font-family: ${t.fontFamily};
|
||||
font-size: ${t.pieLegendTextSize};
|
||||
}
|
||||
`,"getStyles"),ft=mt,ht=i(t=>{const a=[...t.entries()].map(s=>({label:s[0],value:s[1]})).sort((s,n)=>n.value-s.value);return et().value(s=>s.value)(a)},"createPieArcs"),St=i((t,a,G,s)=>{C.debug(`rendering pie chart
|
||||
`+t);const n=s.db,y=Z(),T=j(n.getConfig(),y.pie),$=40,o=18,d=4,c=450,h=c,S=J(a),l=S.append("g");l.attr("transform","translate("+h/2+","+c/2+")");const{themeVariables:r}=y;let[A]=Q(r.pieOuterStrokeWidth);A??(A=2);const _=T.textPosition,g=Math.min(h,c)/2-$,M=z().innerRadius(0).outerRadius(g),O=z().innerRadius(g*_).outerRadius(g*_);l.append("circle").attr("cx",0).attr("cy",0).attr("r",g+A/2).attr("class","pieOuterCircle");const b=n.getSections(),v=ht(b),P=[r.pie1,r.pie2,r.pie3,r.pie4,r.pie5,r.pie6,r.pie7,r.pie8,r.pie9,r.pie10,r.pie11,r.pie12],p=X(P);l.selectAll("mySlices").data(v).enter().append("path").attr("d",M).attr("fill",e=>p(e.data.label)).attr("class","pieCircle");let E=0;b.forEach(e=>{E+=e}),l.selectAll("mySlices").data(v).enter().append("text").text(e=>(e.data.value/E*100).toFixed(0)+"%").attr("transform",e=>"translate("+O.centroid(e)+")").style("text-anchor","middle").attr("class","slice"),l.append("text").text(n.getDiagramTitle()).attr("x",0).attr("y",-400/2).attr("class","pieTitleText");const x=l.selectAll(".legend").data(p.domain()).enter().append("g").attr("class","legend").attr("transform",(e,u)=>{const m=o+d,R=m*p.domain().length/2,I=12*o,L=u*m-R;return"translate("+I+","+L+")"});x.append("rect").attr("width",o).attr("height",o).style("fill",p).style("stroke",p),x.data(v).append("text").attr("x",o+d).attr("y",o-d).text(e=>{const{label:u,value:m}=e.data;return n.getShowData()?`${u} [${m}]`:u});const W=Math.max(...x.selectAll("text").nodes().map(e=>(e==null?void 0:e.getBoundingClientRect().width)??0)),k=h+$+o+d+W;S.attr("viewBox",`0 0 ${k} ${c}`),Y(S,c,k,T.useMaxWidth)},"draw"),vt={draw:St},kt={parser:ut,db:F,renderer:vt,styles:ft};export{kt as diagram};
|
||||
7
lightrag/api/webui/assets/quadrantDiagram-2OG54O6I-BTpnJJir.js
generated
Normal file
7
lightrag/api/webui/assets/quadrantDiagram-2OG54O6I-BTpnJJir.js
generated
Normal file
File diff suppressed because one or more lines are too long
64
lightrag/api/webui/assets/requirementDiagram-QOLK2EJ7-BRdW6-Xb.js
generated
Normal file
64
lightrag/api/webui/assets/requirementDiagram-QOLK2EJ7-BRdW6-Xb.js
generated
Normal file
File diff suppressed because one or more lines are too long
10
lightrag/api/webui/assets/sankeyDiagram-4UZDY2LN-Dqc1OM9R.js
generated
Normal file
10
lightrag/api/webui/assets/sankeyDiagram-4UZDY2LN-Dqc1OM9R.js
generated
Normal file
File diff suppressed because one or more lines are too long
122
lightrag/api/webui/assets/sequenceDiagram-SKLFT4DO-Dfj6wn25.js
generated
Normal file
122
lightrag/api/webui/assets/sequenceDiagram-SKLFT4DO-Dfj6wn25.js
generated
Normal file
File diff suppressed because one or more lines are too long
1
lightrag/api/webui/assets/stateDiagram-MI5ZYTHO-_bvO_A_v.js
generated
Normal file
1
lightrag/api/webui/assets/stateDiagram-MI5ZYTHO-_bvO_A_v.js
generated
Normal file
File diff suppressed because one or more lines are too long
1
lightrag/api/webui/assets/stateDiagram-v2-5AN5P6BG-BddHgqbi.js
generated
Normal file
1
lightrag/api/webui/assets/stateDiagram-v2-5AN5P6BG-BddHgqbi.js
generated
Normal file
|
|
@ -0,0 +1 @@
|
|||
import{s as r,b as e,a,S as i}from"./chunk-OW32GOEJ-Cv4eoNWH.js";import{_ as s}from"./mermaid-vendor-BOzHoVUU.js";import"./chunk-BFAMUDN2-CmfJj-4x.js";import"./chunk-SKB7J2MH-Bl1qvyQL.js";import"./feature-graph-bahMe5Gt.js";import"./react-vendor-DEwriMA6.js";import"./graph-vendor-B-X5JegA.js";import"./ui-vendor-CeCm8EER.js";import"./utils-vendor-BysuhMZA.js";var f={parser:a,get db(){return new i(2)},renderer:e,styles:r,init:s(t=>{t.state||(t.state={}),t.state.arrowMarkerAbsolute=t.arrowMarkerAbsolute},"init")};export{f as diagram};
|
||||
61
lightrag/api/webui/assets/timeline-definition-MYPXXCX6-ChkNsZ2q.js
generated
Normal file
61
lightrag/api/webui/assets/timeline-definition-MYPXXCX6-ChkNsZ2q.js
generated
Normal file
File diff suppressed because one or more lines are too long
128
lightrag/api/webui/assets/treemap-75Q7IDZK-BCGfM6IV.js
generated
Normal file
128
lightrag/api/webui/assets/treemap-75Q7IDZK-BCGfM6IV.js
generated
Normal file
File diff suppressed because one or more lines are too long
7
lightrag/api/webui/assets/xychartDiagram-H2YORKM3-CMrwvRk5.js
generated
Normal file
7
lightrag/api/webui/assets/xychartDiagram-H2YORKM3-CMrwvRk5.js
generated
Normal file
File diff suppressed because one or more lines are too long
27
lightrag/api/webui/index.html
generated
27
lightrag/api/webui/index.html
generated
|
|
@ -8,20 +8,21 @@
|
|||
<link rel="icon" type="image/png" href="favicon.png" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>Lightrag</title>
|
||||
<script type="module" crossorigin src="/webui/assets/index-oYZPo1xP.js"></script>
|
||||
<link rel="modulepreload" crossorigin href="/webui/assets/react-vendor-DEwriMA6.js">
|
||||
<link rel="modulepreload" crossorigin href="/webui/assets/ui-vendor-CeCm8EER.js">
|
||||
<link rel="modulepreload" crossorigin href="/webui/assets/graph-vendor-B-X5JegA.js">
|
||||
<link rel="modulepreload" crossorigin href="/webui/assets/utils-vendor-BysuhMZA.js">
|
||||
<link rel="modulepreload" crossorigin href="/webui/assets/feature-graph-xUsMo1iK.js">
|
||||
<link rel="modulepreload" crossorigin href="/webui/assets/feature-documents-22OwnQq9.js">
|
||||
<link rel="modulepreload" crossorigin href="/webui/assets/mermaid-vendor-CpW20EHd.js">
|
||||
<link rel="modulepreload" crossorigin href="/webui/assets/markdown-vendor-C1oKx5V8.js">
|
||||
<link rel="modulepreload" crossorigin href="/webui/assets/feature-retrieval-CeceOXFg.js">
|
||||
<link rel="stylesheet" crossorigin href="/webui/assets/feature-graph-BipNuM18.css">
|
||||
<link rel="stylesheet" crossorigin href="/webui/assets/index-CEupRNOQ.css">
|
||||
<script type="module" crossorigin src="/webui/assets/index-oYZPo1xP.js"></script>
|
||||
<link rel="modulepreload" crossorigin href="/webui/assets/react-vendor-DEwriMA6.js">
|
||||
<link rel="modulepreload" crossorigin href="/webui/assets/ui-vendor-CeCm8EER.js">
|
||||
<link rel="modulepreload" crossorigin href="/webui/assets/graph-vendor-B-X5JegA.js">
|
||||
<link rel="modulepreload" crossorigin href="/webui/assets/utils-vendor-BysuhMZA.js">
|
||||
<link rel="modulepreload" crossorigin href="/webui/assets/feature-graph-xUsMo1iK.js">
|
||||
<link rel="modulepreload" crossorigin href="/webui/assets/feature-documents-22OwnQq9.js">
|
||||
<link rel="modulepreload" crossorigin href="/webui/assets/mermaid-vendor-CpW20EHd.js">
|
||||
<link rel="modulepreload" crossorigin href="/webui/assets/markdown-vendor-C1oKx5V8.js">
|
||||
<link rel="modulepreload" crossorigin href="/webui/assets/feature-retrieval-CeceOXFg.js">
|
||||
<link rel="stylesheet" crossorigin href="/webui/assets/feature-graph-BipNuM18.css">
|
||||
<link rel="stylesheet" crossorigin href="/webui/assets/index-CEupRNOQ.css">
|
||||
</head>
|
||||
<body>
|
||||
<div id="root"></div>
|
||||
<div id="root"></div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
|
|
@ -2207,7 +2207,12 @@ async def extract_entities(
|
|||
|
||||
async def _process_with_semaphore(chunk):
|
||||
async with semaphore:
|
||||
return await _process_single_content(chunk)
|
||||
try:
|
||||
return await _process_single_content(chunk)
|
||||
except Exception as e:
|
||||
chunk_id = chunk[0] # Extract chunk_id from chunk[0]
|
||||
prefixed_exception = create_prefixed_exception(e, chunk_id)
|
||||
raise prefixed_exception from e
|
||||
|
||||
tasks = []
|
||||
for c in ordered_chunks:
|
||||
|
|
@ -2245,7 +2250,7 @@ async def extract_entities(
|
|||
await asyncio.wait(pending)
|
||||
|
||||
# Add progress prefix to the exception message
|
||||
progress_prefix = f"Chunks[{processed_chunks+1}/{total_chunks}]"
|
||||
progress_prefix = f"C[{processed_chunks+1}/{total_chunks}]"
|
||||
|
||||
# Re-raise the original exception with a prefix
|
||||
prefixed_exception = create_prefixed_exception(first_exception, progress_prefix)
|
||||
|
|
|
|||
|
|
@ -244,6 +244,26 @@ export default function DocumentManager() {
|
|||
const [selectedDocIds, setSelectedDocIds] = useState<string[]>([])
|
||||
const isSelectionMode = selectedDocIds.length > 0
|
||||
|
||||
// Add refs to track previous pipelineBusy state and current interval
|
||||
const prevPipelineBusyRef = useRef<boolean | undefined>(undefined);
|
||||
const pollingIntervalRef = useRef<ReturnType<typeof setInterval> | null>(null);
|
||||
|
||||
// Add retry mechanism state
|
||||
const [retryState, setRetryState] = useState({
|
||||
count: 0,
|
||||
lastError: null as Error | null,
|
||||
isBackingOff: false
|
||||
});
|
||||
|
||||
// Add circuit breaker state
|
||||
const [circuitBreakerState, setCircuitBreakerState] = useState({
|
||||
isOpen: false,
|
||||
failureCount: 0,
|
||||
lastFailureTime: null as number | null,
|
||||
nextRetryTime: null as number | null
|
||||
});
|
||||
|
||||
|
||||
// Handle checkbox change for individual documents
|
||||
const handleDocumentSelect = useCallback((docId: string, checked: boolean) => {
|
||||
setSelectedDocIds(prev => {
|
||||
|
|
@ -533,6 +553,98 @@ export default function DocumentManager() {
|
|||
setDocs(response.pagination.total_count > 0 ? legacyDocs : null);
|
||||
}, []);
|
||||
|
||||
// Utility function to create timeout wrapper for API calls
|
||||
const withTimeout = useCallback((
|
||||
promise: Promise<any>,
|
||||
timeoutMs: number = 30000,
|
||||
errorMsg: string = 'Request timeout'
|
||||
): Promise<any> => {
|
||||
const timeoutPromise = new Promise((_, reject) => {
|
||||
setTimeout(() => reject(new Error(errorMsg)), timeoutMs)
|
||||
});
|
||||
return Promise.race([promise, timeoutPromise]);
|
||||
}, []);
|
||||
|
||||
|
||||
// Enhanced error classification
|
||||
const classifyError = useCallback((error: any) => {
|
||||
if (error.name === 'AbortError') {
|
||||
return { type: 'cancelled', shouldRetry: false, shouldShowToast: false };
|
||||
}
|
||||
|
||||
if (error.message === 'Request timeout') {
|
||||
return { type: 'timeout', shouldRetry: true, shouldShowToast: true };
|
||||
}
|
||||
|
||||
if (error.message?.includes('Network Error') || error.code === 'NETWORK_ERROR') {
|
||||
return { type: 'network', shouldRetry: true, shouldShowToast: true };
|
||||
}
|
||||
|
||||
if (error.status >= 500) {
|
||||
return { type: 'server', shouldRetry: true, shouldShowToast: true };
|
||||
}
|
||||
|
||||
if (error.status >= 400 && error.status < 500) {
|
||||
return { type: 'client', shouldRetry: false, shouldShowToast: true };
|
||||
}
|
||||
|
||||
return { type: 'unknown', shouldRetry: true, shouldShowToast: true };
|
||||
}, []);
|
||||
|
||||
// Circuit breaker utility functions
|
||||
const isCircuitBreakerOpen = useCallback(() => {
|
||||
if (!circuitBreakerState.isOpen) return false;
|
||||
|
||||
const now = Date.now();
|
||||
if (circuitBreakerState.nextRetryTime && now >= circuitBreakerState.nextRetryTime) {
|
||||
// Reset circuit breaker to half-open state
|
||||
setCircuitBreakerState(prev => ({
|
||||
...prev,
|
||||
isOpen: false,
|
||||
failureCount: Math.max(0, prev.failureCount - 1)
|
||||
}));
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}, [circuitBreakerState]);
|
||||
|
||||
const recordFailure = useCallback((error: Error) => {
|
||||
const now = Date.now();
|
||||
setCircuitBreakerState(prev => {
|
||||
const newFailureCount = prev.failureCount + 1;
|
||||
const shouldOpen = newFailureCount >= 3; // Open after 3 failures
|
||||
|
||||
return {
|
||||
isOpen: shouldOpen,
|
||||
failureCount: newFailureCount,
|
||||
lastFailureTime: now,
|
||||
nextRetryTime: shouldOpen ? now + (Math.pow(2, newFailureCount) * 1000) : null
|
||||
};
|
||||
});
|
||||
|
||||
setRetryState(prev => ({
|
||||
count: prev.count + 1,
|
||||
lastError: error,
|
||||
isBackingOff: true
|
||||
}));
|
||||
}, []);
|
||||
|
||||
const recordSuccess = useCallback(() => {
|
||||
setCircuitBreakerState({
|
||||
isOpen: false,
|
||||
failureCount: 0,
|
||||
lastFailureTime: null,
|
||||
nextRetryTime: null
|
||||
});
|
||||
|
||||
setRetryState({
|
||||
count: 0,
|
||||
lastError: null,
|
||||
isBackingOff: false
|
||||
});
|
||||
}, []);
|
||||
|
||||
// Intelligent refresh function: handles all boundary cases
|
||||
const handleIntelligentRefresh = useCallback(async (
|
||||
targetPage?: number, // Optional target page, defaults to current page
|
||||
|
|
@ -554,7 +666,12 @@ export default function DocumentManager() {
|
|||
sort_direction: sortDirection
|
||||
};
|
||||
|
||||
const response = await getDocumentsPaginated(request);
|
||||
// Use timeout wrapper for the API call
|
||||
const response = await withTimeout(
|
||||
getDocumentsPaginated(request),
|
||||
30000, // 30 second timeout
|
||||
'Document fetch timeout'
|
||||
);
|
||||
|
||||
if (!isMountedRef.current) return;
|
||||
|
||||
|
|
@ -570,7 +687,11 @@ export default function DocumentManager() {
|
|||
page: lastPage
|
||||
};
|
||||
|
||||
const lastPageResponse = await getDocumentsPaginated(lastPageRequest);
|
||||
const lastPageResponse = await withTimeout(
|
||||
getDocumentsPaginated(lastPageRequest),
|
||||
30000,
|
||||
'Document fetch timeout'
|
||||
);
|
||||
|
||||
if (!isMountedRef.current) return;
|
||||
|
||||
|
|
@ -589,14 +710,22 @@ export default function DocumentManager() {
|
|||
|
||||
} catch (err) {
|
||||
if (isMountedRef.current) {
|
||||
toast.error(t('documentPanel.documentManager.errors.loadFailed', { error: errorMessage(err) }));
|
||||
const errorClassification = classifyError(err);
|
||||
|
||||
if (errorClassification.shouldShowToast) {
|
||||
toast.error(t('documentPanel.documentManager.errors.loadFailed', { error: errorMessage(err) }));
|
||||
}
|
||||
|
||||
if (errorClassification.shouldRetry) {
|
||||
recordFailure(err as Error);
|
||||
}
|
||||
}
|
||||
} finally {
|
||||
if (isMountedRef.current) {
|
||||
setIsRefreshing(false);
|
||||
}
|
||||
}
|
||||
}, [statusFilter, pagination.page, pagination.page_size, sortField, sortDirection, t, updateComponentState]);
|
||||
}, [statusFilter, pagination.page, pagination.page_size, sortField, sortDirection, t, updateComponentState, withTimeout, classifyError, recordFailure]);
|
||||
|
||||
// New paginated data fetching function
|
||||
const fetchPaginatedDocuments = useCallback(async (
|
||||
|
|
@ -616,10 +745,6 @@ export default function DocumentManager() {
|
|||
await fetchPaginatedDocuments(pagination.page, pagination.page_size, statusFilter);
|
||||
}, [fetchPaginatedDocuments, pagination.page, pagination.page_size, statusFilter]);
|
||||
|
||||
// Add refs to track previous pipelineBusy state and current interval
|
||||
const prevPipelineBusyRef = useRef<boolean | undefined>(undefined);
|
||||
const pollingIntervalRef = useRef<ReturnType<typeof setInterval> | null>(null);
|
||||
|
||||
// Function to clear current polling interval
|
||||
const clearPollingInterval = useCallback(() => {
|
||||
if (pollingIntervalRef.current) {
|
||||
|
|
@ -634,18 +759,49 @@ export default function DocumentManager() {
|
|||
|
||||
pollingIntervalRef.current = setInterval(async () => {
|
||||
try {
|
||||
// Check circuit breaker before making request
|
||||
if (isCircuitBreakerOpen()) {
|
||||
return; // Skip this polling cycle
|
||||
}
|
||||
|
||||
// Only perform fetch if component is still mounted
|
||||
if (isMountedRef.current) {
|
||||
await fetchDocuments()
|
||||
await fetchDocuments();
|
||||
recordSuccess(); // Record successful operation
|
||||
}
|
||||
} catch (err) {
|
||||
// Only show error if component is still mounted
|
||||
// Only handle error if component is still mounted
|
||||
if (isMountedRef.current) {
|
||||
toast.error(t('documentPanel.documentManager.errors.scanProgressFailed', { error: errorMessage(err) }))
|
||||
const errorClassification = classifyError(err);
|
||||
|
||||
// Always reset isRefreshing state on error
|
||||
setIsRefreshing(false);
|
||||
|
||||
if (errorClassification.shouldShowToast) {
|
||||
toast.error(t('documentPanel.documentManager.errors.scanProgressFailed', { error: errorMessage(err) }));
|
||||
}
|
||||
|
||||
if (errorClassification.shouldRetry) {
|
||||
recordFailure(err as Error);
|
||||
|
||||
// Implement exponential backoff for retries
|
||||
const backoffDelay = Math.min(Math.pow(2, retryState.count) * 1000, 30000); // Max 30s
|
||||
|
||||
if (retryState.count < 3) { // Max 3 retries
|
||||
setTimeout(() => {
|
||||
if (isMountedRef.current) {
|
||||
setRetryState(prev => ({ ...prev, isBackingOff: false }));
|
||||
}
|
||||
}, backoffDelay);
|
||||
}
|
||||
} else {
|
||||
// For non-retryable errors, stop polling
|
||||
clearPollingInterval();
|
||||
}
|
||||
}
|
||||
}
|
||||
}, intervalMs);
|
||||
}, [fetchDocuments, t, clearPollingInterval]);
|
||||
}, [fetchDocuments, t, clearPollingInterval, isCircuitBreakerOpen, recordSuccess, recordFailure, classifyError, retryState.count]);
|
||||
|
||||
const scanDocuments = useCallback(async () => {
|
||||
try {
|
||||
|
|
|
|||
|
|
@ -23,12 +23,13 @@ import LegendButton from '@/components/graph/LegendButton'
|
|||
|
||||
import { useSettingsStore } from '@/stores/settings'
|
||||
import { useGraphStore } from '@/stores/graph'
|
||||
import { labelColorDarkTheme, labelColorLightTheme } from '@/lib/constants'
|
||||
|
||||
import '@react-sigma/core/lib/style.css'
|
||||
import '@react-sigma/graph-search/lib/style.css'
|
||||
|
||||
// Sigma settings
|
||||
const defaultSigmaSettings: Partial<SigmaSettings> = {
|
||||
// Function to create sigma settings based on theme
|
||||
const createSigmaSettings = (isDarkTheme: boolean): Partial<SigmaSettings> => ({
|
||||
allowInvalidContainer: true,
|
||||
defaultNodeType: 'default',
|
||||
defaultEdgeType: 'curvedNoArrow',
|
||||
|
|
@ -47,18 +48,18 @@ const defaultSigmaSettings: Partial<SigmaSettings> = {
|
|||
labelRenderedSizeThreshold: 12,
|
||||
enableEdgeEvents: true,
|
||||
labelColor: {
|
||||
color: '#000',
|
||||
color: isDarkTheme ? labelColorDarkTheme : labelColorLightTheme,
|
||||
attribute: 'labelColor'
|
||||
},
|
||||
edgeLabelColor: {
|
||||
color: '#000',
|
||||
color: isDarkTheme ? labelColorDarkTheme : labelColorLightTheme,
|
||||
attribute: 'labelColor'
|
||||
},
|
||||
edgeLabelSize: 8,
|
||||
labelSize: 12
|
||||
// minEdgeThickness: 2
|
||||
// labelFont: 'Lato, sans-serif'
|
||||
}
|
||||
})
|
||||
|
||||
const GraphEvents = () => {
|
||||
const registerEvents = useRegisterEvents()
|
||||
|
|
@ -107,7 +108,7 @@ const GraphEvents = () => {
|
|||
}
|
||||
|
||||
const GraphViewer = () => {
|
||||
const [sigmaSettings, setSigmaSettings] = useState(defaultSigmaSettings)
|
||||
const [sigmaSettings, setSigmaSettings] = useState<Partial<SigmaSettings>>({})
|
||||
const sigmaRef = useRef<any>(null)
|
||||
|
||||
const selectedNode = useGraphStore.use.selectedNode()
|
||||
|
|
@ -119,13 +120,15 @@ const GraphViewer = () => {
|
|||
const showNodeSearchBar = useSettingsStore.use.showNodeSearchBar()
|
||||
const enableNodeDrag = useSettingsStore.use.enableNodeDrag()
|
||||
const showLegend = useSettingsStore.use.showLegend()
|
||||
const theme = useSettingsStore.use.theme()
|
||||
|
||||
// Initialize sigma settings once on component mount
|
||||
// All dynamic settings will be updated in GraphControl using useSetSettings
|
||||
// Initialize sigma settings based on theme
|
||||
useEffect(() => {
|
||||
setSigmaSettings(defaultSigmaSettings)
|
||||
console.log('Initialized sigma settings')
|
||||
}, [])
|
||||
const isDarkTheme = theme === 'dark'
|
||||
const settings = createSigmaSettings(isDarkTheme)
|
||||
setSigmaSettings(settings)
|
||||
console.log('Initialized sigma settings for theme:', theme)
|
||||
}, [theme])
|
||||
|
||||
// Clean up sigma instance when component unmounts
|
||||
useEffect(() => {
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ export const webuiPrefix = '/webui/'
|
|||
export const controlButtonVariant: ButtonVariantType = 'ghost'
|
||||
|
||||
export const labelColorDarkTheme = '#B2EBF2'
|
||||
export const labelColorLightTheme = '#000'
|
||||
export const LabelColorHighlightedDarkTheme = '#000'
|
||||
|
||||
export const nodeColorDisabled = '#E2E2E2'
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue