1(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[5944],{48957:e=>{"use strict";e.exports=JSON.parse('{"D":"AI Chatbot Assistant","h":"Chat with an AI assistant powered by your knowledge base from compute job results"}')},50075:(e,t,s)=>{"use strict";s.d(t,{E:()=>n});class a{constructor(){this.baseUrl="/api/chatbot",this.sessionId=this.getOrCreateSessionId()}setNamespace(e){this.namespace=e,this.sessionId=this.getOrCreateSessionId(!0)}storageKey(){let e=this.namespace?.trim();return e?`chatbot_session_id:${e}`:"chatbot_session_id"}getOrCreateSessionId(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=this.storageKey();if(!e){let e=sessionStorage.getItem(t);if(e)return e}let s=this.generateSessionId();return sessionStorage.setItem(t,s),s}async uploadKnowledge(e){try{let t=this.extractKnowledgeChunks(e),s=this.extractDomains(e),a=new Set,n=[];for(let e of t){let t=`${e.content}|${JSON.stringify(e.metadata||{})}`;a.has(t)||(a.add(t),n.push(e))}let r=e=>{try{if("undefined"!=typeof Blob)return new Blob([e]).size;if("undefined"!=typeof TextEncoder)return new TextEncoder().encode(e).length}catch{}return e.length},o=r(JSON.stringify({sessionId:this.sessionId,knowledgeChunks:[],domains:s})),i=e=>r(JSON.stringify(e)),l=Math.floor(1572864),c=[],d=[],u=o;for(let e of n){let t=i(e)+1;d.length>0&&u+t>l&&(c.push(d),d=[],u=o),d.push(e),u+=t}d.length&&c.push(d);let h=0,m=new Set(s);for(let e=0;e<c.length;e++){let t=c[e],a={sessionId:this.sessionId,knowledgeChunks:t,domains:s},n=JSON.stringify(a),o=r(n),i=(o/1048576).toFixed(2);console.log(`[Chatbot Upload] batch ${e+1}/${c.length} chunks=${t.length} size=${i} MB (${o} bytes)`);let l=0,d=null;for(;l<3;)try{let t=await fetch(`${this.baseUrl}/upload`,{method:"POST",headers:{"Content-Type":"application/json","X-Session-ID":this.sessionId},body:n});if(!t.ok){let s=await t.text().catch(()=>"");throw Error(`Upload failed (batch ${e+1}): ${t.status} ${t.statusText} ${s}`)}let s=await t.json();h+=s?.chunks_processed||0,(s?.domains||[]).forEach(e=>m.add(e)),d=null;break}catch(t){if(d=t,(l+=1)>=3)break;let e=500*Math.pow(2,l-1);await new Promise(t=>setTimeout(t,e))}if(d)throw d}return{success:!0,session_id:this.sessionId,chunks_processed:h,domains:Array.from(m)}}catch(e){throw console.error("â Knowledge upload failed:",e),e}}async chat(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};try{let s={sessionId:this.sessionId,message:e,config:{max_tokens:t.maxTokens||500,temperature:t.temperature||.7,model:t.model||void 0}},a=await fetch(`${this.baseUrl}/chat`,{method:"POST",headers:{"Content-Type":"application/json","X-Session-ID":this.sessionId,"Cache-Control":"no-cache, no-store, must-revalidate",Pragma:"no-cache",Expires:"0"},body:JSON.stringify(s)});if(!a.ok){let e=await a.text();throw console.error("â HTTP Error Response:",e),Error(`Chat request failed: ${a.status} ${a.statusText}`)}return await a.json()}catch(e){throw console.error("â Chat request failed:",e),e}}async streamChat(e){let t,s,a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2?arguments[2]:void 0,r=arguments.length>3?arguments[3]:void 0,o={sessionId:this.sessionId,message:e,config:{max_tokens:a.maxTokens||500,temperature:a.temperature||.7,model:a.model||void 0}},i=await fetch(`${this.baseUrl}/stream`,{method:"POST",headers:{"Content-Type":"application/json","X-Session-ID":this.sessionId,Accept:"text/event-stream","Cache-Control":"no-cache, no-store, must-revalidate",Pragma:"no-cache",Expires:"0"},body:JSON.stringify(o),signal:r?.signal});if(!i.ok||!i.body)throw Error(await i.text().catch(()=>"")||`Stream request failed: ${i.status}`);let l=i.body.getReader(),c=new TextDecoder,d="",u="";for(;;){let{done:e,value:a}=await l.read();if(e)break;let r=(u+=c.decode(a,{stream:!0})).split("\n");for(let e of(u=r.pop()||"",r)){if(!e.startsWith("data: "))continue;let a=e.slice(6).trim();if(a)try{let e=JSON.parse(a);if(e?.type==="error"||e?.error){let t=e?.message||e?.error||"Streaming error";throw Error(t)}e?.type==="chunk"&&"string"==typeof e.content&&(d+=e.content,n?.({content:e.content})),e?.sources&&(t=e.sources),e?.metadata&&(s=e.metadata),(e?.type==="complete"||e?.done)&&n?.({done:!0,sources:t,metadata:s})}catch(e){}}}return{fullResponse:d,sources:t,metadata:s}}async getKnowledgeStatus(){try{let e=await fetch(`${this.baseUrl}/status`,{headers:{"X-Session-ID":this.sessionId}});if(!e.ok)throw Error(`Status check failed: ${e.status} ${e.statusText}`);return await e.json()}catch(e){throw console.error("â Knowledge status check failed:",e),e}}async healthCheck(){try{let e=await fetch(`${this.baseUrl}/health`);if(!e.ok)throw Error(`Health check failed: ${e.status}`);return await e.json()}catch(e){throw console.error("â Health check failed:",e),e}}extractKnowledgeChunks(e){let t=[];
1return e.forEach(e=>{e.result.forEach(e=>{e.knowledgeBase?.chunks&&t.push(...e.knowledgeBase.chunks)})}),t}extractDomains(e){let t=new Set;return e.forEach(e=>{e.result.forEach(e=>{e.domainInfo?.domain&&t.add(e.domainInfo.domain)})}),Array.from(t)}generateSessionId(){return`session_${Date.now()}_${Math.random().toString(36).substring(2,9)}`}clearSession(){sessionStorage.removeItem(this.storageKey()),this.sessionId=this.getOrCreateSessionId(!0)}async resetSession(){try{return await fetch(`${this.baseUrl}/session`,{method:"DELETE",headers:{"X-Session-ID":this.sessionId}}),this.sessionId=this.getOrCreateSessionId(!0),this.sessionId}catch(e){return console.error("â Reset session failed:",e),this.sessionId=this.getOrCreateSessionId(!0),this.sessionId}}async replaceSessionKnowledge(e){return await this.resetSession(),this.uploadKnowledge(e)}getSessionId(){return this.sessionId}getBaseUrl(){return this.baseUrl}async checkAndAutoSync(){try{let e=await this.getKnowledgeStatus();if(e.has_knowledge)return e;let{database:t}=await Promise.resolve().then(s.bind(s,4052)),a=await t.chatbots.toArray(),n=this.namespace?a.filter(e=>e.namespace===this.namespace):a;if(n&&n.length>0){let e=this.extractKnowledgeChunks(n);if(this.extractDomains(n),e.length>0){let e=await this.uploadKnowledge(n);if(e.success)return{has_knowledge:!0,chunk_count:e.chunks_processed,domains:e.domains,session_id:this.sessionId}}}return e}catch(e){throw console.error("â Auto-sync check failed:",e),e}}}let n=new a},51244:(e,t,s)=>{"use strict";s.d(t,{A:()=>z});var a=s(37876),n=s(14232),r=s(89589),o=s(48641),i=s(55432),l=s(82189),c=s(57762),d=s(59760),u=s(79400),h=s(4052),m=s(49685),p=s(92282),g=s(682),f=s(93050),b=s.n(f),y=s(50075),x=s(44144),w=s(41926);function v(e){let{chainIds:t}=(0,d.H)(),s=Object.values(e.algoDidsByChain).flat(),f=e.datasetDidsByChain?Object.values(e.datasetDidsByChain).flat():[],{address:v}=(0,l.F7)(),{data:k}=(0,l.ix)(),{autoWallet:j}=(0,c.TU)(),{chatbotList:C,createOrUpdateChatbot:S,clearChatbotByNamespace:N,deleteChatbot:I}
1=(0,h.QH)(),[E,T]=(0,n.useState)([]),[P,A]=(0,n.useState)(!1),[_,D]=(0,n.useState)(!1),[$,O]=(0,n.useState)(!1),R=(0,u.t)();(0,n.useEffect)(()=>{if(C){let t=C.filter(t=>t.namespace===e.namespace);e.setChatbotData(t)}},[C,e.namespace,e.setChatbotData]);let U=(0,n.useCallback)(async()=>{if(v)try{D(!0);let e=await (0,w.oZ)(t,v,null,R()),a=e?.computeJobs||[],n=e?.isLoaded,r=j?.address;if(r&&r.toLowerCase()!==v.toLowerCase()){let e=await (0,w.oZ)(t,r,null,R());a=a.concat(e?.computeJobs||[]),n=n&&e?.isLoaded}let o=Array.from(new Map(a.map(e=>[e.jobId,e])).values()).filter(e=>!!s.includes(e.algoDID)&&70===e.status&&(!(f.length>0)||!!(e.inputDID??[]).some(e=>f.includes(e)))&&!0);T(o),D(!n)}catch(e){r.Qs.error(e.message),D(!1)}},[t,s,f,v,j,R]);(0,n.useEffect)(()=>{U()},[P,t]);let L=async t=>{let s;if(C.filter(t=>t.namespace===e.namespace).find(e=>e.job.jobId===t.jobId))return void o.oR.info("This compute job result is already being used by the chatbot.");try{O(!0),e.onStatusChange?.("uploading"),s=(0,i.k_)("Uploading knowledgeâ¦");let a=await (0,x.p_)(t.inputDID[0],R()),n=t.owner.toLowerCase()===j?.address.toLowerCase()?j:k,o=Array.isArray(t.results)?t.results:[],l=0;if(o.length>0){let e=o.findIndex(e=>"string"==typeof e?.filename&&e.filename.toLowerCase().includes("final_output"));if(-1!==e)l=e;else for(let e=o.length-1;e>=0;e--){let t=o[e];if(t?.type==="output"){l=e;break}}}let c=await r.pP.getComputeResultUrl(a.services[0].serviceEndpoint,n,t.jobId,l),d=await fetch(c);if(!d.ok)throw Error(`HTTP error! status: ${d.status}`);let u=await d.text();if(u.trim().startsWith("Traceback")||u.trim().startsWith("Error")||u.trim().startsWith("Exception")||u.includes("Traceback (most recent call last)")){console.error("â Compute job returned error/traceback:",u),(0,i.vc)(s,"Compute job failed â check status"),O(!1);return}let h=[];try{let e=JSON.parse(u);h=[{knowledgeBase:{chunks:Array.isArray(e)?e:[e]},domainInfo:{domain:t.assetName?.toLowerCase().replace(/[^a-z0-9]/g,"-")||"compute-job-result",entities:[],description:`Knowledge from compute job: ${t.assetName||t.jobId} (result: ${o[l]?.filename||`#${l}`})`}}]}catch(e){console.error("â JSON parsing failed:",e),console.error("â File content that failed to parse:",u.substring(0,500)),(0,i.vc)(s,"Failed to parse compute job result â invalid JSON"),O(!1);return}let m={job:t,result:h,namespace:e.namespace};try{await S(m);let t=await y.E.uploadKnowledge([m]);if(t.success){e.onStatusChange?.("processing"),e.onForceRefresh?.();let a=`Data ready! ${t.chunks_processed} pieces of information uploaded. Session: ${t.session_id.slice(-8)}`;(0,i.eP)(s,a)}else throw Error(t.message||"Upload failed")}catch(t){r.Qs.error("â Knowledge upload failed:",t),(0,i.vc)(s,"Could not add compute result to chatbot"),e.onStatusChange?.("no-knowledge")}finally{O(!1)}}catch(t){r.Qs.error("â Failed to process compute job:",t),(0,i.vc)(s,"Could not process compute job result"),O(!1),e.onStatusChange?.("no-knowledge")}},M=async t=>{if(!confirm("Are you sure you want to remove this result from the chatbot?"))return;let s=C.find(e=>e.job.jobId===t.jobId);if(s)try{O(!0),void 0!==s.id&&await I(s.id);let a=C.filter(t=>t.namespace===e.namespace).filter(e=>e.job.jobId!==t.jobId);a.length>0?(await y.E.replaceSessionKnowledge(a),e.onForceRefresh?.(),(0,i.eP)(null,"Data updated")):(await y.E.resetSession(),e.onForceRefresh?.(),(0,i.eP)(null,"Data removed and session reset"),e.onStatusChange?.("no-knowledge"))}catch(e){r.Qs.error("Knowledge update failed:",e),(0,i.vc)(null,"Failed to update knowledge base")}finally{O(!1)}},B=async()=>{if(confirm("All chatbot data will be removed from your cache. Proceed?"))try{O(!0),await N(e.namespace),await y.E.resetSession(),e.onForceRefresh?.(),(0,i.eP)(null,"Chatbot data was cleared and session reset. Add compute job results to start over."),e.onStatusChange?.("no-knowledge")}catch(e){r.Qs.error("â Failed to clear data:",e),(0,i.vc)(null,"Failed to clear chatbot data")}finally{O(!1)}};return(0,a.jsx)("div",{className:b().accordionWrapper,children:(0,a.jsxs)(m.A,{title:"Compute Jobs",defaultExpanded:!0,children:[(0,a.jsx)(g.A,{jobs:E,isLoading:_,refetchJobs:()=>A(!P),getActions:t=>{let s={label:(0,a.jsx)("span",{children:"Add"}),onClick:e=>{L(e)}},n={label:(0,a.jsx)("span",{children:"Remove"}),onClick:e=>{M(e)}},r=C.find(s=>s.job.jobId===t.jobId&&s.namespace===e.namespace),o=[];return r?o.push(n):o.push(s),o},hideDetails:!0}),(0,a.jsx)("div",{className:b().actions,children:(0,a.jsx)(p.A,{onClick:()=>B(),disabled:$,children:"Clear Data"})})]})})}var k=s(52274),j=s(8530),C=s(98477),S=s(94882),N=s(72262);function I(e){let{label:t,children:s,placement:r="top"}
1=e,o=(0,n.useId)(),[i,l]=(0,n.useState)(!1),{x:c,y:d,strategy:u,refs:h,update:m}=(0,S.we)({placement:r,strategy:"fixed",middleware:[(0,S.cY)(8),(0,S.UU)(),(0,S.BN)({padding:8})]});(0,n.useEffect)(()=>{if(i&&h.reference.current&&h.floating.current)return(0,N.ll)(h.reference.current,h.floating.current,m)},[i,h.reference,h.floating,m]);let p=(0,a.jsx)(j.N,{children:i&&(0,a.jsx)(k.P.div,{ref:h.setFloating,role:"tooltip",id:o,initial:{opacity:0,scale:.96,y:2},animate:{opacity:1,scale:1,y:0},exit:{opacity:0,scale:.96,y:2},transition:{duration:.15},style:{position:u,top:d??0,left:c??0},className:"px-3 py-1.5 rounded-lg text-sm font-medium text-white bg-black/90 backdrop-blur shadow-lg whitespace-nowrap z-[999] pointer-events-none",children:t})});return(0,a.jsxs)("div",{ref:h.setReference,className:"relative inline-block",onMouseEnter:()=>l(!0),onMouseLeave:()=>l(!1),onFocus:()=>l(!0),onBlur:()=>l(!1),children:[s,(0,C.createPortal)(p,document.body)]})}var E=s(6996),T=s(83319);function P(e){let{visible:t,content:s,onCopy:r,onEdit:o,disabled:i=!1,className:l}=e,[c,d]=(0,n.useState)(!1),u=(0,n.useCallback)(async()=>{try{r?await r(s):await navigator.clipboard.writeText(s),d(!0),setTimeout(()=>d(!1),2e3)}catch(e){try{let e=document.createElement("textarea");e.value=s,document.body.appendChild(e),e.select(),document.execCommand("copy"),document.body.removeChild(e),d(!0),setTimeout(()=>d(!1),2e3)}catch{}}},[s,r]);return(0,a.jsx)("div",{className:`mt-0 inline-block ${l||""}`,children:(0,a.jsxs)(k.P.div,{initial:{opacity:0,y:4},animate:{opacity:+!!t},transition:{duration:.2,delay:.05},className:`flex items-center justify-end pt-0 ${t?"":"invisible pointer-events-none"} min-h-8`,children:[(0,a.jsx)(I,{label:c?"Copied":"Copy",placement:"bottom",children:(0,a.jsx)("button",{type:"button","aria-label":"Copy",onClick:u,className:"inline-flex items-center justify-center rounded-md bg-white hover:bg-gray-200 transition-colors disabled:opacity-50 disabled:cursor-not-allowed cursor-pointer w-8 h-8",disabled:i,children:(0,a.jsx)(E.A,{className:"h-5 w-5 text-[#4c5167]",strokeWidth:1.75})})}),(0,a.jsx)(I,{label:"Edit",placement:"bottom",children:(0,a.jsx)("button",{type:"button","aria-label":"Edit",onClick:()=>o&&o(),className:"inline-flex items-center justify-center rounded-md bg-white hover:bg-gray-200 transition-colors disabled:opacity-50 disabled:cursor-not-allowed cursor-pointer w-8 h-8",disabled:i||!o,children:(0,a.jsx)(T.A,{className:"h-5 w-5 text-[#4c5167]",strokeWidth:1.75})})})]})})}var A=s(42662);function _(e){let{visible:t,content:s,onCopy:n,onRetry:r,disabled:o=!1,className:i}=e;return t?(0,a.jsxs)("div",{className:`mt-3 w-full ${i||""}`,children:[(0,a.jsx)(k.P.div,{initial:{width:0},animate:{width:"100%"},transition:{duration:.5,ease:[.4,0,.2,1]},className:"h-[1px] bg-[#d0d2dd]"}),(0,a.jsxs)(k.P.div,{initial:{opacity:0,y:4},animate:{opacity:1,y:0},transition:{duration:.2,delay:.05},className:"flex items-center pt-2",children:[(0,a.jsx)(I,{label:"Copy",placement:"bottom",children:(0,a.jsx)("button",{type:"button","aria-label":"Copy",onClick:async()=>n?await n(s):await navigator.clipboard.writeText(s),className:"inline-flex items-center justify-center rounded-md bg-white hover:bg-gray-200 transition-colors disabled:opacity-50 disabled:cursor-not-allowed cursor-pointer w-8 h-8",disabled:o,children:(0,a.jsx)(E.A,{className:"h-5 w-5 text-[#4c5167]",strokeWidth:1.75})})}),(0,a.jsx)(I,{label:o?"Generatingâ¦":"Try again",placement:"bottom",children:(0,a.jsx)("button",{type:"button","aria-label":"Try again",onClick:()=>r&&r(),className:"inline-flex items-center justify-center rounded-md bg-white hover:bg-gray-200 transition-colors disabled:opacity-50 disabled:cursor-not-allowed cursor-pointer w-8 h-8",disabled:o||!r,children:(0,a.jsx)(A.A,{className:"h-5 w-5 text-[#4c5167]",strokeWidth:1.75})})})]})]}):null}var D=s(20848);let $=(0,n.memo)(function(e){let{message:t,index:s,animateIn:r=!0,onRetry:o,onUpdateUserMessage:i,assistantIdForUser:l,onResendFromEdit:c,lockUserActions:d}
1=e,u="assistant"===t.role,[h,m]=(0,n.useState)(!1),[p,g]=(0,n.useState)(!1),[f,b]=(0,n.useState)(t.content),y=(0,n.useMemo)(()=>u&&(t.metadata?.isComplete||t.metadata?.isAborted),[u,t.metadata]),x=(0,n.useCallback)(()=>{b(t.content),g(!0)},[t.content]),w=(0,n.useCallback)(()=>{let e=f.trim();if(!e)return void g(!1);i?.(t.id,e),g(!1),l&&c&&c(l,e)},[l,f,t.id,c,i]),v=(0,n.useCallback)(()=>{b(t.content),g(!1)},[t.content]),j="user"===t.role?"items-end":"items-start",C=u?"max-w-[80%]":"w-full",S=u?"":p?"w-full":"max-w-[80%]";return(0,a.jsx)(k.P.div,{initial:!!r&&{opacity:0,y:20},animate:{opacity:1,y:0},transition:{duration:.4},className:`flex ${"user"===t.role?"justify-end":"mb-6 justify-start"}`,onMouseEnter:()=>m(!0),onMouseLeave:()=>m(!1),children:(0,a.jsxs)("div",{className:`flex flex-col ${j} ${C}`,children:[(0,a.jsx)("div",{className:`${S} px-3 py-3 ${"user"===t.role?"bg-[#E5E7EB] text-[#0d0d0d] rounded-2xl rounded-br-xs":"text-[#0d0d0d]"}`,children:p?(0,a.jsxs)("div",{className:"mt-1",children:[(0,a.jsx)("textarea",{value:f,onChange:e=>b(e.target.value),className:"w-full min-h-20 max-h-96 px-3 py-2 bg-white border border-gray-200 rounded-lg focus:outline-none resize-none overflow-y-auto text-base",style:{height:"80px",minHeight:"80px",maxHeight:"288px"}}),(0,a.jsxs)("div",{className:"flex items-center gap-2 mt-2 justify-end font-medium",children:[(0,a.jsx)("button",{type:"button",onClick:v,className:"inline-flex items-center justify-center rounded-full bg-white hover:bg-gray-100 transition-colors cursor-pointer h-10 px-4 text-sm","aria-label":"Cancel",children:"Cancel"}),(0,a.jsx)("button",{type:"button",onClick:w,className:"inline-flex items-center justify-center rounded-full bg-black text-white hover:bg-black/90 transition-colors cursor-pointer h-10 px-4 text-sm","aria-label":"Save",children:"Send"})]})]}):(0,a.jsx)("div",{className:"text-[16px] leading-relaxed",children:(0,a.jsx)(D.A,{text:t.content})})}),u?(0,a.jsx)(_,{visible:!!y,content:t.content,onRetry:o,disabled:!1}):(0,a.jsx)(P,{visible:!p&&h&&!d,content:t.content,onEdit:x,disabled:!1,className:"mb-0"})]})})});function O(){return(0,a.jsx)(k.P.div,{initial:{opacity:0,y:10},animate:{opacity:1,y:0},exit:{opacity:0,y:-10},className:"flex justify-start mb-4",children:(0,a.jsx)("div",{className:"flex items-center space-x-2 px-4 py-3",children:(0,a.jsx)("div",{className:"flex space-x-1",children:[0,1,2].map(e=>(0,a.jsx)(k.P.div,{className:"w-2 h-2 bg-gray-400 rounded-full",animate:{scale:[1,1.2,1],opacity:[.5,1,.5]},transition:{duration:1.5,repeat:1/0,delay:.2*e}},e))})})})}function R(e){let{messages:t,isTyping:s,animateItems:r=!0,onRetry:o,onUpdateUserMessage:i,onResendFromEdit:l}=e,{assistantToPrevUser:c,userToNextAssistant:d,idToMessage:u}=(0,n.useMemo)(()=>{let e=null,s={},a={},n={};for(let r of t)n[r.id]=r,"user"===r.role?e={id:r.id,content:r.content}:"assistant"===r.role&&e&&(s[r.id]=e.content,a[e.id]||(a[e.id]=r.id),e=null);return{assistantToPrevUser:s,userToNextAssistant:a,idToMessage:n}},[t]);return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(j.N,{children:t.map((e,t)=>{let s="user"===e.role?d[e.id]:void 0,n=!!("user"===e.role&&s&&(()=>{let e=s?u[s]:void 0;if(!e)return!1;let t=e.metadata;return!(t?.isComplete||t?.isAborted)})());return(0,a.jsx)($,{message:e,index:t,animateIn:r,onRetry:"assistant"===e.role&&o&&c[e.id]?()=>o(c[e.id],e.id):void 0,onUpdateUserMessage:i,assistantIdForUser:"user"===e.role?d[e.id]:void 0,onResendFromEdit:l,lockUserActions:n},e.id)})}),(0,a.jsx)(j.N,{children:s&&(0,a.jsx)(O,{})})]})}var U=s(6420),L=s(91835),M=s(83440),B=s(37037);function F(e){let{inputMessage:t,onInputChange:s,onKeyDown:r,onSubmit:o,disabled:i,isStreaming:l,isTyping:c,onPause:d,placeholder:u,isHovered:h,onMouseEnter:m,onMouseLeave:p,onToggleInfo:g,isInfoOpen:f,sessionId:b,assistantStatus:y,knowledgeStatus:x,backendError:w,isHero:v}=e,j=(0,n.useRef)(null),C=(0,n.useRef)(null),S=(0,n.useRef)(null),N=(0,n.useRef)(null),[I,T]=(0,n.use
1State)(!1);return(0,n.useEffect)(()=>{if(!f)return;let e=e=>{"Escape"===e.key&&g()},t=e=>{let t=e.target;!C.current?.contains(t)&&(j.current?.contains(t)||g())};return document.addEventListener("keydown",e),document.addEventListener("mousedown",t),()=>{document.removeEventListener("keydown",e),document.removeEventListener("mousedown",t)}},[f,g]),(0,n.useEffect)(()=>(S.current&&(clearTimeout(S.current),S.current=null),"uploading"===y||"processing"===y?T(!0):"ready"===y?(T(!0),S.current=setTimeout(()=>T(!1),5e3)):T(!1),()=>{S.current&&(clearTimeout(S.current),S.current=null)}),[y]),(0,n.useEffect)(()=>{if(""!==t)return;let e=N.current;e&&(e.style.height="auto",e.style.height="48px")},[t]),(0,a.jsx)("div",{className:"bg-[#F8F7F5] rounded-2xl p-3 space-y-4 relative",children:(0,a.jsxs)("form",{onSubmit:o,className:"space-y-4",children:[(0,a.jsx)("textarea",{ref:N,value:t,onChange:s,onKeyDown:r,placeholder:u,disabled:i,className:"w-full min-h-20 max-h-96 px-4 py-2 bg-white border-0 rounded-xl focus:outline-none resize-none overflow-y-auto transition-all duration-200 disabled:opacity-50 disabled:cursor-not-allowed text-base",style:{height:"60px",minHeight:"60px",maxHeight:"288px"}}),(0,a.jsxs)("div",{className:"flex justify-between items-center mb-0",children:[(0,a.jsxs)("div",{className:"flex items-center gap-2 relative",ref:j,children:[(0,a.jsx)("button",{type:"button",onClick:g,className:"w-8 h-8 bg-white border border-gray-300 rounded-lg flex items-center justify-center hover:bg-gray-50 transition-colors cursor-pointer","aria-label":"Show session info",children:(0,a.jsx)(U.A,{className:"h-4 w-4 text-gray-700"})}),I&&(0,a.jsxs)(k.P.div,{initial:{opacity:0,y:-4,scale:.98},animate:{opacity:1,y:0,scale:1},exit:{opacity:0,y:-4},transition:{duration:.18},role:"status","aria-live":"polite",className:"h-8 inline-flex items-center gap-2 max-w-[520px] whitespace-nowrap truncate rounded-lg border px-2 text-xs bg-white border-gray-300 text-[#4c5167]",children:[(0,a.jsx)("span",{className:`inline-block h-2.5 w-2.5 rounded-full ${"uploading"===y?"bg-blue-500 animate-pulse":"processing"===y?"bg-cyan-500 animate-pulse":"bg-emerald-500"}`}),(0,a.jsx)("span",{className:"truncate",children:"uploading"===y?"Uploading knowledge â input disabled":"processing"===y?"Processing data â input disabled":"Knowledge ready â you can start chatting"}),(0,a.jsx)("button",{type:"button","aria-label":"Dismiss status",className:"ml-1 p-0.5 rounded hover:bg-white/50 text-inherit cursor-pointer",onClick:()=>T(!1),children:(0,a.jsx)(L.A,{className:"h-3.5 w-3.5"})})]}),f&&(0,a.jsxs)(k.P.div,{ref:C,role:"dialog","aria-label":"Session and knowledge status",initial:{opacity:0,y:v?6:-6,scale:.98},animate:{opacity:1,y:0,scale:1},transition:{duration:.18},className:`absolute ${v?"top-full mt-2":"bottom-full mb-2"} left-0 w-80 rounded-2xl bg-white/40 backdrop-blur-md border border-white/50 ring-1 ring-black/5 shadow-xl p-4 z-30`,children:[(0,a.jsxs)("div",{className:"mb-3",children:[(0,a.jsx)("div",{className:"text-sm font-semibold text-[#2b2e3b] mb-1",children:"Session"}),(0,a.jsxs)("div",{className:"flex items-center justify-between gap-2",children:[(0,a.jsx)("code",{className:"text-xs text-[#4c5167] truncate",children:b||"Unknown"}),(0,a.jsx)("button",{type:"button",className:"p-1 rounded hover:bg-white/50 transition-colors text-[#c8794d] cursor-pointer",onClick:()=>b&&navigator.clipboard.writeText(b),"aria-label":"Copy session id",title:"Copy",children:(0,a.jsx)(E.A,{className:"h-4 w-4"})})]})]}),(0,a.jsxs)("div",{className:"mb-3",children:[(0,a.jsx)("div",{className:"text-sm font-semibold text-[#2b2e3b] mb-1",children:"Assistant"}),(0,a.jsxs)("div",{className:"text-xs text-[#4c5167]",children:["Status: ",(e=>{switch(e){case"uploading":return"Uploading knowledgeâ¦";case"processing":return"Processing knowledgeâ¦";case"ready":return"Ready";case"no-knowledge":return"No knowledge";case"backend-error":return"Assistant unavailable";case"connecting":return"Checking statusâ¦";default:return"Unknown"}})(y)]}),w&&(0,a.jsx)("div",{className:"text-xs text-red-600 mt-1",children:w})]}),(0,a.jsxs)("div",{children:[(0,a.jsx)("div",{className:"text-sm font-semibold text-[#2b2e3b] mb-1",children:"Knowledge"}),(0,a.jsxs)("div",{className:"text-xs text-[#4c5167]",children:["has_knowledge:"," ",x?.has_knowledge?"Yes":"No"]}),(0,a.jsxs)("div",{className:"text-xs text-[#4c5167] mt-1",children:["chunks: ",x?.chunk_count??0]}),x?.domains&&x.domains.length>0&&(0,a.jsxs)("div",{className:"text-xs text-[#4c5167] mt-1 truncate",children:["domains:"," ",x.domains.slice(0,3).join(", "),x.domains.length>3&&"â¦"]})]})]})]}),l||c?(0,a.jsx)(k.P.button,{type:"button",disabled:i,className:"w-8 h-8 text-white rounded-lg flex items-center justify-center focus:outline-none transition-all duration-200 disabled:opacity-50 disabled:cursor-not-allowed cursor-pointer",style:{backgroundColor:h&&!i?"#4b5563":"#6b7280","--tw-ring-color":"#6b7280"},onMouseEnter:m,onMouseLeave:p,whileTap:{scale:i?1:.95},"aria-label":"Pause generation",onClick:d,children:(0,a.jsx)(M.A,{className:"h-4 w-4"})}):(0,a.jsx)(k.P.button,{type:"submit",disabled:i||!t.trim(),className:"w-8 h-8 text-white rounded-lg flex items-center justify-center focus:outline-none transition-all duration-200 disabled:opacity-50 disabled:cursor-not-allowed cursor-pointer",style:{backgroundColor:h&&!i?"#b56a3e":"#c8794d","--tw-ring-color":"#c8794d"},onMouseEnter:m,onMouseLeave:p,whileTap:{scale:i?1:.95},"aria-label":"Send message",children:(0,a.jsx)(B.A,{className:"h-4 w-4"})})]})]})})}function H(e){let{onSendMessage:t,disabled:s,variant:r="default",sessionId:o,assistantStatus:i,knowledgeStatus:l,backendError:c,isTyping:d=!1,isStreaming:u=!1,onPause:h}
1=e,[m,p]=(0,n.useState)(""),[g,f]=(0,n.useState)(!1),[b,y]=(0,n.useState)(!1),x=(0,n.useRef)(0),w=(0,n.useCallback)(()=>{x.current=Date.now(),h?.()},[h]),v=["Hello. Ready to dive in?","What can I help you explore today?","Got something in mind? Let's start.","Curious today? Ask me anything.","Ready when you are.","How can I help you today?","What are we exploring today?","Bring your questionâI'll fetch answers.","Need a hand? I'm here.","Let's get something done."],[k,j]=(0,n.useState)(v[0]),[C,S]=(0,n.useState)(""),N="hero"===r,[I,E]=(0,n.useState)(!0),[T,P]=(0,n.useState)(!1),[A,_]=(0,n.useState)("gathering"),[D,$]=(0,n.useState)(null),O=()=>c?"Service temporarily unavailable...":d?"gathering"===A?"Gathering details to give you the best response...":"Preparing your answer...":"uploading"===i?"Uploading knowledge⦠Please wait.":"processing"===i?"Processing knowledge⦠Please wait.":"backend-error"===i?"Assistant unavailable...":l?.has_knowledge?N?"How can I help you today?":"Ask me anything...":"Please add a knowledge base to start chatting...";(0,n.useEffect)(()=>{j(v[Math.floor(Math.random()*v.length)])},[]),(0,n.useEffect)(()=>{if(!N)return;let e=null,t=0;return S(""),e=setInterval(()=>{t+=1,S(k.slice(0,t)),t>=k.length&&e&&clearInterval(e)},35),()=>{e&&clearInterval(e)}},[N,k]),(0,n.useEffect)(()=>{if(!N)return;if(C.length!==k.length){P(!1),E(!0);return}E(!1),P(!1);let e=0,t=setInterval(()=>{E(s=>{let a=!s;return(a&&(e+=1),e>=7)?(clearInterval(t),P(!0),!1):a})},500);return()=>clearInterval(t)},[N,C.length,k.length]),(0,n.useEffect)(()=>{d&&null===D?($(Date.now()),_("gathering")):d||($(null),_("gathering"))},[d,D]),(0,n.useEffect)(()=>{if(!d||null===D)return;let e=setTimeout(()=>{_("preparing")},5e3*Math.random()+1e4);return()=>clearTimeout(e)},[d,D]);let R=e=>{p(e.target.value);let t=e.target;t.style.height="auto";let{scrollHeight:s}=t;s<=288?t.style.height=Math.max(s,48)+"px":t.style.height="288px"},U=e=>{e.preventDefault(),u||d||Date.now()-x.current<250||m.trim()&&!s&&(t(m.trim()),p(""))},L=e=>{"Enter"===e.key&&!e.shiftKey&&(e.preventDefault(),u||d||Date.now()-x.current<250||m.trim()&&!s&&(t(m.trim()),p("")))};return"hero"===r?(0,a.jsx)("div",{className:"px-6 w-full max-w-[1200px] flex items-center min-h-[700px]",children:(0,a.jsxs)("div",{className:"w-full relative",children:[(0,a.jsx)("div",{className:"absolute -top-20 left-1/2 -translate-x-1/2 w-full text-center pointer-events-none select-none text-[28px] md:text-[40px] leading-tight font-serif text-[#2b2e3b] whitespace-nowrap",children:(0,a.jsxs)("span",{className:"inline-block relative align-middle",children:[C,!T&&(0,a.jsx)("span",{className:`absolute left-full -top-1.5 pl-1 ${I?"opacity-100":"opacity-0"}`,children:"|"})]})}),(0,a.jsx)(F,{inputMessage:m,onInputChange:R,onKeyDown:L,onSubmit:U,disabled:s,isStreaming:u,isTyping:d,onPause:w,placeholder:O(),isHovered:g,onMouseEnter:()=>f(!0),onMouseLeave:()=>f(!1),onToggleInfo:()=>y(e=>!e),isInfoOpen:b,sessionId:o,assistantStatus:i,knowledgeStatus:l,backendError:c,isHero:!0})]})}):(0,a.jsx)("div",{className:"relative bg-white",children:(0,a.jsx)(F,{inputMessage:m,onInputChange:R,onKeyDown:L,onSubmit:U,disabled:s,isStreaming:u,isTyping:d,onPause:w,placeholder:O(),isHovered:g,onMouseEnter:()=>f(!0),onMouseLeave:()=>f(!1),onToggleInfo:()=>y(e=>!e),isInfoOpen:b,sessionId:o,assistantStatus:i,knowledgeStatus:l,backendError:c,isHero:!1})})}var K=s(24832);function J(e){let{onClick:t}=e;return(0,a.jsx)(k.P.button,{onClick:t,className:"absolute left-1/2 -translate-x-1/2 bottom-40 bg-white/90 backdrop-blur-sm text-gray-600 rounded-full shadow-lg hover:bg-white hover:text-gray-800 hover:shadow-xl border border-gray-200/50 transition-all duration-200 z-20 cursor-pointer w-11 h-11 flex items-center justify-center",initial:{opacity:0,scale:.8},animate:{opacity:1,scale:1},exit:{opacity:0,scale:.8},whileHover:{scale:1.08},whileTap:{scale:.95},"aria-label":"Scroll to latest",children:(0,a.jsx)(K.A,{className:"w-6 h-6",strokeWidth:1.75})})}function W(e){let{status:t,knowledgeStatus:s,backendError:r}=e,{messages:o,isTyping:i,isStreaming:l,sendMessage:c,retryMessage:d,cancelStream:u,updateUserMessage:h,pruneAfterMessage:m}
1=function(e,t){let[s,a]=(0,n.useState)([]),[r,o]=(0,n.useState)(!1),[i,l]=(0,n.useState)(!1),c=(0,n.useRef)(null),d=(0,n.useRef)(null),u=(0,n.useMemo)(()=>"ready"===e||(t?.has_knowledge??!1),[e,t]),h=()=>"undefined"!=typeof crypto&&"randomUUID"in crypto?crypto.randomUUID():`${Date.now()}_${Math.random().toString(36).slice(2,8)}`,m=(0,n.useCallback)(()=>{if(d.current){d.current.abort(),d.current=null;let e=c.current;e&&a(t=>t.map(t=>t.id===e?{...t,metadata:{...t.metadata||{},isAborted:!0,isComplete:!1}}:t)),c.current=null,o(!1),l(!1)}},[]),p=(0,n.useCallback)(e=>{c.current&&c.current!==e&&m(),a(t=>{let s=t.findIndex(t=>t.id===e);return -1===s?t:t.slice(0,s+1)})},[m]),g=(0,n.useCallback)(async e=>{if(!u){let e={id:h(),role:"assistant",content:"I don't have any information loaded yet. Please add some compute job results first using the 'Add' button above.",timestamp:new Date};a(t=>[...t,e]);return}let t={id:h(),role:"user",content:e,timestamp:new Date};a(e=>[...e,t]),o(!0);let s=h();a(e=>[...e,{id:s,role:"assistant",content:"",timestamp:new Date,metadata:{isComplete:!1,isAborted:!1}}]);let n=new AbortController;d.current=n,c.current=s;try{let t="",r=!1,i=await y.E.streamChat(e,{maxTokens:500,temperature:.7},e=>{"string"==typeof e.content&&e.content.length>0&&(r||(r=!0,o(!1),l(!0)),t+=e.content,a(e=>e.map(e=>e.id===s?{...e,content:t}:e)))},{signal:n.signal});a(e=>e.map(e=>e.id===s?{...e,content:i.fullResponse,metadata:{...e.metadata||{},isComplete:!0,sources:i.sources?.map(e=>e.source)||[],confidence:i.metadata?.chunks_retrieved}}:e))}catch(e){if(e?.name==="AbortError");else{console.error("â Chat message failed:",e);let t="Sorry, I encountered an error processing your message.",n=e?.message||"Unknown error";n.includes("no_knowledge")?t="I don't have access to any information for this session. Please add some compute job results first.":n.includes("Cannot connect")?t="Cannot connect to the chatbot backend. Please ensure the backend server is running on port 8001.":n.includes("fetch")&&(t="Network error: Unable to reach the chatbot backend. Please check your connection."),a(e=>e.map(e=>e.id===s?{...e,content:t,metadata:{...e.metadata||{},isComplete:!0}}:e))}}finally{o(!1),l(!1),c.current=null,d.current===n&&(d.current=null)}},[u]);return{messages:s,isTyping:r,isStreaming:i,sendMessage:g,retryMessage:(0,n.useCallback)(async(e,t)=>{c.current===e&&m(),o(!0),a(t=>t.map(t=>t.id===e?{...t,content:"",metadata:{...t.metadata||{},isComplete:!1,isAborted:!1,sources:[],confidence:void 0}}:t));let s=new AbortController;d.current=s,c.current=e;try{let n="",r=!1,i=await y.E.streamChat(t,{maxTokens:500,temperature:.7},t=>{"string"==typeof t.content&&t.content.length>0&&(r||(r=!0,o(!1),l(!0)),n+=t.content,a(t=>t.map(t=>t.id===e?{...t,content:n}:t)))},{signal:s.signal});a(t=>t.map(t=>t.id===e?{...t,content:i.fullResponse,metadata:{...t.metadata||{},isComplete:!0,sources:i.sources?.map(e=>e.source)||[],confidence:i.metadata?.chunks_retrieved}}:t))}catch(t){t?.name==="AbortError"||(console.error("â Retry failed:",t),a(t=>t.map(t=>t.id===e?{...t,content:"Sorry, I encountered an error retrying the response. Please try again.",metadata:{...t.metadata||{},isComplete:!0}}:t)))}finally{o(!1),l(!1),c.current=null,d.current===s&&(d.current=null)}},[m]),cancelStream:m,updateUserMessage:(0,n.useCallback)((e,t)=>{a(s=>s.map(s=>s.id===e&&"user"===s.role?{...s,content:t}:s))},[]),pruneAfterMessage:p}}(t,s),p=o[o.length-1]?.content||"",{messagesEndRef:g,shouldAutoScroll:f,handleScroll:b,scrollToBottom:x}=function(e,t){let s=(0,n.useRef)(null),[a,r]=(0,n.useState)(!0);return(0,n.useEffect)(()=>{if(!a)return;let e=s.current?.parentElement;e&&requestAnimationFrame(()=>{e.scrollTop=e.scrollHeight})},[e,t,a]),{messagesEndRef:s,shouldAutoScroll:a,handleScroll:e=>{let{scrollTop:t,scrollHeight:s,clientHeight:a}=e.currentTarget;r(s-t-a<10)},scrollToBottom:()=>{r(!0);let e=s.current?.parentElement;e&&(e.scrollTop=e.scrollHeight)}}}
1(o.length,p),[w,v]=(0,n.useState)(!1),[C,S]=(0,n.useState)(!1),N=!w&&0===o.length,I=y.E.getSessionId();return(0,n.useEffect)(()=>{if(!N&&C){let e=setTimeout(()=>S(!1),0);return()=>clearTimeout(e)}},[N,C]),(0,a.jsxs)(k.P.div,{className:`relative flex flex-col w-full max-w-[1200px] mx-auto max-h-[1080px] ${N?"min-h-[700px]":"min-h-[700px] border-t border-[#d0d2dd]"} bg-transparent overflow-hidden`,initial:{opacity:0,scale:.95},animate:{opacity:1,scale:1},transition:{duration:.4,ease:[.4,0,.2,1]},children:[(0,a.jsxs)("div",{className:"flex-1 overflow-y-auto px-6 py-4 bg-transparent relative",onScroll:b,"aria-live":"polite",children:[!N&&(0,a.jsx)(j.N,{children:(0,a.jsx)(k.P.div,{initial:{opacity:0},animate:{opacity:1},transition:{duration:.3,delay:.2},className:"px-3",children:(0,a.jsx)(R,{messages:o,isTyping:i,animateItems:!C,onRetry:(e,t)=>{e&&!i&&d(t,e)},onUpdateUserMessage:h,onResendFromEdit:(e,t)=>{t&&!i&&(m(e),d(e,t))}})})}),(0,a.jsx)(k.P.div,{ref:g,layout:!0,transition:{duration:.3}})]}),!N&&!f&&(0,a.jsx)(J,{onClick:x}),(0,a.jsx)(k.P.div,{className:"px-6",animate:{position:N?"absolute":"static",top:N?"50%":"auto",left:N?"0":"auto",right:N?"0":"auto",y:N?"-50%":0,zIndex:N?10:"auto"},transition:{type:"spring",damping:30,stiffness:300,duration:.6},children:(0,a.jsx)(H,{onSendMessage:e=>{N&&(v(!0),S(!0)),c(e)},disabled:null!==r||"connecting"===t||"uploading"===t||"processing"===t||"backend-error"===t||!s?.has_knowledge,variant:N?"hero":"default",sessionId:I,assistantStatus:t,knowledgeStatus:s,backendError:r,isTyping:i,isStreaming:l,onPause:()=>u()})})]})}function z(e){let{algoDidsByChain:t,datasetDidsByChain:s,namespace:r}
1=e,[,o]=(0,n.useState)([]),[i,l]=(0,n.useState)("connecting"),[c,d]=(0,n.useState)(null),[u,h]=(0,n.useState)(null),m=(0,n.useRef)(!1),p=(0,n.useRef)(null),g=(0,n.useRef)(2e3),f=(0,n.useRef)("connecting"),b=(0,n.useRef)(null),x=(0,n.useCallback)(async()=>{if(m.current)return;m.current=!0;let e=36e5;try{await y.E.healthCheck(),b.current&&h(null);let t=await y.E.checkAndAutoSync();d(t);let s=!!t?.has_knowledge;"uploading"===f.current?l("uploading"):"processing"===f.current?l(s?"ready":"processing"):l(s?"ready":"no-knowledge"),"uploading"===f.current||"processing"===f.current?(e=g.current,g.current=Math.min(2*g.current,3e4)):g.current=2e3}catch(s){let t=s?.message||"";t.includes("429")?e=6e4:(h(t||"Unknown backend error"),l("backend-error"),e=3e4)}finally{m.current=!1,p.current&&clearTimeout(p.current),("uploading"===f.current||"processing"===f.current)&&(p.current=setTimeout(()=>{x()},e))}},[]),w=(0,n.useCallback)(()=>{p.current&&clearTimeout(p.current),g.current=2e3,x()},[x]);return(0,n.useEffect)(()=>{f.current=i},[i]),(0,n.useEffect)(()=>{b.current=u},[u]),(0,n.useEffect)(()=>
1{l("connecting"),g.current=2e3;try{y.E.setNamespace(r)}catch{}return x(),()=>{p.current&&clearTimeout(p.current)}},[x,r]),(0,a.jsxs)("div",{className:"flex flex-col gap-6",children:[(0,a.jsx)(v,{algoDidsByChain:t,datasetDidsByChain:s,namespace:r,setChatbotData:o,onStatusChange:e=>{l(e),("processing"===e||"uploading"===e)&&(g.current=2e3,p.current&&clearTimeout(p.current),x())},onForceRefresh:w}),(0,a.jsx)(W,{status:i,knowledgeStatus:c,backendError:u})]})}},55432:(e,t,s)=>{"use strict";s.d(t,{eP:()=>r,k_:()=>n,vc:()=>o});var a=s(48641);function n(e,t){try{return a.oR.loading(e,{autoClose:!1,closeOnClick:!1,pauseOnHover:!1,draggable:!1,closeButton:!1,...t})}catch{return}}function r(e,t){let s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:8e3;try{null!=e?a.oR.update(e,{render:t,type:"success",isLoading:!1,autoClose:s,hideProgressBar:!1,pauseOnHover:!0,pauseOnFocusLoss:!0,closeOnClick:!0,closeButton:!0}):a.oR.success(t,{autoClose:s,hideProgressBar:!1,pauseOnHover:!0,pauseOnFocusLoss:!0,closeOnClick:!0,closeButton:!0})}catch{try{a.oR.success(t,{autoClose:s,hideProgressBar:!1,pauseOnHover:!0,pauseOnFocusLoss:!0,closeOnClick:!0,closeButton:!0})}catch{}}}function o(e,t){let s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1e4;try{null!=e?a.oR.update(e,{render:t,type:"error",isLoading:!1,autoClose:s,hideProgressBar:!1,pauseOnHover:!0,pauseOnFocusLoss:!0,closeOnClick:!0,closeButton:!0}):a.oR.error(t,{autoClose:s,hideProgressBar:!1,pauseOnHover:!0,pauseOnFocusLoss:!0,closeOnClick:!0,closeButton:!0})}catch{try{a.oR.error(t,{autoClose:s,hideProgressBar:!1,pauseOnHover:!0,pauseOnFocusLoss:!0,closeOnClick:!0,closeButton:!0})}catch{}}}},93050:e=>{e.exports={actions:"JobList_actions__6_RK_",accordionWrapper:"JobList_accordionWrapper__ubNLc",legend:"JobList_legend__Sq1gr"}}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.