@topthink/chat 1.2.6 → 1.2.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/es/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as n,css as i,formatSize as o,Tooltip as s,useAsync as a,isCancel as l,isRequestError as c,Form as d,Toast as u,InfiniteScroller as m,useDebounce as h,Offcanvas as p,ModalForm as g,RequestButton as f,Loader as b,useImmer as v,getAbsoluteUrl as y,Lightbox as x,Clipboard as w,Button as k,isImageUrl as E,request as N}from"@topthink/components";import*as j from"react";import{createContext as C,useContext as $,useEffect as M,useState as S,useRef as q,useCallback as F,forwardRef as R,useMemo as z,useImperativeHandle as I,Fragment as A,memo as D}from"react";import*as L from"path";import P from"path";import{Spinner as T,Badge as O,Dropdown as B,FormControl as U,CloseButton as _,OverlayTrigger as H,Popover as Q}from"react-bootstrap";import J from"eventemitter3";import K from"react-textarea-autosize";import W from"lodash/isEqual";import{toString as X}from"hast-util-to-string";import V from"react-markdown";import"katex/dist/katex.min.css";import Y from"rehype-highlight";import G from"rehype-katex";import Z from"remark-breaks";import ee from"remark-gfm";import te from"remark-math";import{codes as re,types as ne}from"micromark-util-symbol";import{markdownLineEnding as ie}from"micromark-util-character";import{createPortal as oe}from"react-dom";import se from"use-resize-observer";import{unified as ae}from"unified";import le from"rehype-stringify";import ce from"remark-parse";import de from"remark-rehype";function ue(e,t){return e.name===t}const me=C(null);function he(e){const t=$(me);if(!t)throw new Error("useContext must be used within a Provider");const{setHandles:r}=t;return M(()=>{if(e)return r(e),()=>{r({})}},[e]),t}function pe({children:t,...r}){const[n,i]=S({});return e(me.Provider,{value:{...r,handles:n,setHandles:i},children:t})}const ge=function({ext:t}){const{result:r}=a(async e=>{try{return(await function(e){switch(e){case"../../images/file/docx.svg":return import("./docx-2LwnwWwv.js");case"../../images/file/html.svg":return import("./html-BSKTzJZQ.js");case"../../images/file/jpg.svg":return import("./jpg-muicsKjX.js");case"../../images/file/md.svg":return import("./md-DRS7QmE8.js");case"../../images/file/mp3.svg":return import("./mp3-HhP1Gk4B.js");case"../../images/file/mp4.svg":return import("./mp4-CWxSyjdn.js");case"../../images/file/pdf.svg":return import("./pdf-CWBi2u4Z.js");case"../../images/file/png.svg":return import("./png-DNwbFeJk.js");case"../../images/file/pptx.svg":return import("./pptx-Bv4V_F_3.js");case"../../images/file/py.svg":return import("./py-D30pRTJN.js");case"../../images/file/txt.svg":return import("./txt-CsqmEKjF.js");case"../../images/file/unknown.svg":return import("./unknown-DW8znerP.js");case"../../images/file/xlsx.svg":return import("./xlsx-CmkshfKZ.js");default:return new Promise(function(t,r){("function"==typeof queueMicrotask?queueMicrotask:setTimeout)(r.bind(null,new Error("Unknown variable dynamic import: "+e)))})}}(`../../images/file/${e}.svg`)).default}catch{return(await import("./unknown-DW8znerP.js")).default}},[t]);return r?e("img",{width:30,height:30,src:r}):null},fe=function({className:r,name:n,size:i=0,loading:a,error:l,onRemove:c,onClick:d}){const u=P.extname(n).substring(1),m=t(we,{className:r,$error:!!l,onClick:d,children:[t(xe,{children:[e(ge,{ext:u}),a&&e(T,{variant:"primary"})]}),t(ye,{children:[e("h4",{children:n}),i>0&&e("p",{children:o(i,1)})]}),c&&e(ve,{onClick:e=>{e.preventDefault(),c()},children:e("i",{className:"bi bi-trash3"})})]});return l?e(s,{placement:"top",tooltip:l,children:m}):m};function be(t){const{renderFileItem:r}=he();return r?r({Component:fe,props:t}):e(fe,{...t})}const ve=n.div`
1
+ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as n,css as i,formatSize as o,Tooltip as s,useAsync as a,isCancel as l,isRequestError as c,Form as d,Toast as u,InfiniteScroller as m,useDebounce as h,Offcanvas as p,ModalForm as g,RequestButton as f,Loader as b,useImmer as v,getAbsoluteUrl as y,Lightbox as x,Clipboard as w,Button as k,isImageUrl as E,request as N}from"@topthink/components";import*as j from"react";import{createContext as C,useContext as $,useEffect as S,useState as M,useRef as F,useCallback as R,forwardRef as q,useMemo as z,useImperativeHandle as I,Fragment as A,memo as D,Component as L}from"react";import*as P from"path";import T from"path";import{Spinner as O,Badge as B,Dropdown as U,FormControl as _,CloseButton as H,OverlayTrigger as Q,Popover as J}from"react-bootstrap";import K from"eventemitter3";import W from"react-textarea-autosize";import X from"lodash/isEqual";import{toString as V}from"hast-util-to-string";import Y from"react-markdown";import"katex/dist/katex.min.css";import G from"rehype-highlight";import Z from"rehype-katex";import ee from"remark-breaks";import te from"remark-gfm";import re from"remark-math";import{codes as ne,types as ie}from"micromark-util-symbol";import{markdownLineEnding as oe}from"micromark-util-character";import{createPortal as se}from"react-dom";import ae from"use-resize-observer";import{unified as le}from"unified";import ce from"rehype-stringify";import de from"remark-parse";import ue from"remark-rehype";function me(e,t){return e.name===t}const he=C(null);function pe(e){const t=$(he);if(!t)throw new Error("useContext must be used within a Provider");const{setHandles:r}=t;return S(()=>{if(e)return r(e),()=>{r({})}},[e]),t}function ge({children:t,...r}){const[n,i]=M({});return e(he.Provider,{value:{...r,handles:n,setHandles:i},children:t})}const fe=function({ext:t}){const{result:r}=a(async e=>{try{return(await function(e){switch(e){case"../../images/file/docx.svg":return import("./docx-2LwnwWwv.js");case"../../images/file/html.svg":return import("./html-BSKTzJZQ.js");case"../../images/file/jpg.svg":return import("./jpg-muicsKjX.js");case"../../images/file/md.svg":return import("./md-DRS7QmE8.js");case"../../images/file/mp3.svg":return import("./mp3-HhP1Gk4B.js");case"../../images/file/mp4.svg":return import("./mp4-CWxSyjdn.js");case"../../images/file/pdf.svg":return import("./pdf-CWBi2u4Z.js");case"../../images/file/png.svg":return import("./png-DNwbFeJk.js");case"../../images/file/pptx.svg":return import("./pptx-Bv4V_F_3.js");case"../../images/file/py.svg":return import("./py-D30pRTJN.js");case"../../images/file/txt.svg":return import("./txt-CsqmEKjF.js");case"../../images/file/unknown.svg":return import("./unknown-DW8znerP.js");case"../../images/file/xlsx.svg":return import("./xlsx-CmkshfKZ.js");default:return new Promise(function(t,r){("function"==typeof queueMicrotask?queueMicrotask:setTimeout)(r.bind(null,new Error("Unknown variable dynamic import: "+e)))})}}(`../../images/file/${e}.svg`)).default}catch{return(await import("./unknown-DW8znerP.js")).default}},[t]);return r?e("img",{width:30,height:30,src:r}):null},be=function({className:r,name:n,size:i=0,loading:a,error:l,onRemove:c,onClick:d}){const u=T.extname(n).substring(1),m=t(ke,{className:r,$error:!!l,onClick:d,children:[t(we,{children:[e(fe,{ext:u}),a&&e(O,{variant:"primary"})]}),t(xe,{children:[e("h4",{children:n}),i>0&&e("p",{children:o(i,1)})]}),c&&e(ye,{onClick:e=>{e.preventDefault(),c()},children:e("i",{className:"bi bi-trash3"})})]});return l?e(s,{placement:"top",tooltip:l,children:m}):m};function ve(t){const{renderFileItem:r}=pe();return r?r({Component:be,props:t}):e(be,{...t})}const ye=n.div`
2
2
  width: 1.75rem;
3
3
  height: 1.75rem;
4
4
  align-items: center;
@@ -13,7 +13,7 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
13
13
  color: var(--bs-danger);
14
14
  background-color: var(--bs-danger-bg-subtle);
15
15
  }
16
- `,ye=n.div`
16
+ `,xe=n.div`
17
17
  flex: 1;
18
18
  overflow: hidden;
19
19
 
@@ -34,7 +34,7 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
34
34
  line-height: 20px;
35
35
  margin-bottom: 0;
36
36
  }
37
- `,xe=n.div`
37
+ `,we=n.div`
38
38
  position: relative;
39
39
  width: 3rem;
40
40
  height: 3rem;
@@ -48,7 +48,7 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
48
48
  position: absolute;
49
49
  }
50
50
 
51
- `,we=n.div`
51
+ `,ke=n.div`
52
52
  display: flex;
53
53
  gap: .5rem;
54
54
  padding: .5rem;
@@ -65,7 +65,7 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
65
65
  ${e=>e.$error&&i`
66
66
  border-color: var(--bs-danger) !important;
67
67
  `}
68
- `,ke=[".txt",".md",".pdf",".docx",".xlsx",".pptx",".png",".jpg"];function Ee(e){const{setMessages:t,setSuggestions:r,setLoading:n,conversationId:i,setConversationId:o,request:s,handles:a,messages:d}=he(),u=!0===e?.supportStop,m=q(null),h=q(),p=q(i),g=()=>(m.current&&m.current.abort(),m.current=new AbortController,m.current.signal),{onComplete:f,onEvent:b}=a,v=F(e=>{if(e.data)if("[DONE]"!=e.data)try{const r=JSON.parse(e.data);r.conversation?(p.current=r.conversation,o(r.conversation)):r.event?b?.(r.event):t(e=>{const t=e[e.length-1];if(r.chunks){if(t.chunks){const e=r.chunks.index;if(t.chunks[e]||(t.chunks[e]={content:"",reasoning:"",tools:[]}),r.chunks.error)t.chunks[e].error=r.chunks.error;else if(r.chunks.tools){t.chunks[e].tools||(t.chunks[e].tools=[]);const n=r.chunks.tools.index;delete r.chunks.tools.index,t.chunks[e].tools[n]&&"arguments"in r.chunks.tools?t.chunks[e].tools[n].arguments+=r.chunks.tools.arguments:t.chunks[e].tools[n]={...t.chunks[e].tools[n],...r.chunks.tools}}else if(r.chunks.reasoning)t.chunks[e].reasoning+=r.chunks.reasoning;else if(r.chunks.content)if("object"==typeof r.chunks.content){Array.isArray(t.chunks[e].content)||(t.chunks[e].content=[]);const n=r.chunks.content.index,i=r.chunks.content.value;"string"==typeof i?(t.chunks[e].content[n]||(t.chunks[e].content[n]=""),t.chunks[e].content[n]+=i):t.chunks[e].content[n]=i}else t.chunks[e].content+=r.chunks.content;else r.chunks.node&&(t.chunks[e].node={...t.chunks[e].node,...r.chunks.node})}}else r.stats?t.stats=r.stats:r.id&&(t.id=r.id)})}catch(e){console.error(e)}else t(e=>{e[e.length-1].loading=!1})},[a]),y=F(e=>{if(l(e))t(e=>{const t=e[e.length-1];t&&(t.loading=!1)});else{let r="未知错误";c(e)&&(r=401==e.response?.status?"未授权或授权已过期,请刷新页面后重试":"string"==typeof e.errors?e.errors:Object.values(e.errors).join("\n")),t(e=>{const t=e[e.length-1];t.chunks&&(0===t.chunks.length?t.chunks=[{error:r}]:t.chunks[t.chunks.length-1].error=r),t.loading=!1})}},[]),x=F(async e=>{h.current=e;try{const r=g();n(!0),t(e=>{e[e.length-1].loading=!0,delete e[e.length-1].stats});let i={url:"message",method:"get",params:{id:e},onMessage:v,signal:r};await s(i)}catch(e){y(e)}finally{m.current=null,h.current=void 0}n(!1),f?.()},[s,a]),w=F(async(e,...i)=>{"string"==typeof e&&(e={query:e,...i});const{query:o,files:a=[],variables:l={},quote:c}=e;let d=null;if(o||a.length>0){const e=g();n(!0),r([]),t(e=>{e.push({query:o,quote:c,files:a,variables:l,chunks:[],loading:!0})});try{let t={method:"post",data:{query:o,quote:c,files:a,variables:l,conversation:p.current},onMessage:v,signal:e};d=(await s(t)).message??null}catch(e){y(e)}finally{m.current=null}d?await x(d.id):(n(!1),f?.())}},[s,a]),k=F(async e=>{let r=null;try{const i=g();n(!0),t(e=>{e[e.length-1].loading=!0});let o={url:"resume",method:"post",data:{conversation:p.current,chunk:e.chunk,tool:e.tool,payload:e.payload},onMessage:v,signal:i};r=(await s(o)).message??null}catch(e){y(e)}finally{m.current=null}r?await x(r.id):(n(!1),f?.())},[s,a]),E=F(async()=>{try{const e=g();let t={method:"post",url:"/suggestion",data:{conversation:p.current},signal:e};const n=await s(t);r(n)}catch{}finally{m.current=null}},[s]),N=F(async()=>{if(u)if(h.current)try{await s({url:"stop",method:"post",data:{id:h.current}})}catch{}else m.current?.abort()},[s,u]),j=()=>{const e=d[d.length-1];e&&e.id&&2===e.status&&x(e.id)};return M(()=>(j(),()=>{m.current&&m.current.abort()}),[]),M(()=>{i!=p.current&&(p.current=i,m.current&&m.current.abort(),j())},[i]),{send:w,resume:k,suggest:E,stop:N}}function Ne({variables:t,values:r,onSubmit:n,onChange:i,children:o}){const s={},a=[],l={};return t.forEach(e=>{s[e.key]={type:"string",title:e.label},"textarea"===e.type?l[e.key]={"ui:widget":"textarea"}:"select"===e.type&&e.options&&(s[e.key].enum=e.options,s[e.key].enumNames=e.options,e.options.length>0&&(s[e.key].default=e.options[0])),e.required&&a.push(e.key)}),e(d,{schema:{type:"object",properties:s,required:a},formData:r,omitExtraData:!0,uiSchema:l,submitText:"开始对话",onSubmit:n,onChange:i,children:o})}const je=n.button`
68
+ `,Ee=[".txt",".md",".pdf",".docx",".xlsx",".pptx",".png",".jpg"];function Ne({variables:t,values:r,onSubmit:n,onChange:i,children:o}){const s={},a=[],l={};return t.forEach(e=>{s[e.key]={type:"string",title:e.label},"textarea"===e.type?l[e.key]={"ui:widget":"textarea"}:"select"===e.type&&e.options&&(s[e.key].enum=e.options,s[e.key].enumNames=e.options,e.options.length>0&&(s[e.key].default=e.options[0])),e.required&&a.push(e.key)}),e(d,{schema:{type:"object",properties:s,required:a},formData:r,omitExtraData:!0,uiSchema:l,submitText:"开始对话",onSubmit:n,onChange:i,children:o})}const je=n.button`
69
69
  color: var(--bs-secondary);
70
70
  cursor: pointer;
71
71
  display: flex;
@@ -96,12 +96,12 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
96
96
  }
97
97
  `};
98
98
 
99
- `;let Ce=class{#e;#t;constructor(){this.#t=new J}onResult(e){this.#t.on("result",e)}onRecording(e){this.#t.on("recording",e)}onTranscribing(e){this.#t.on("transcribing",e)}start(){if(!this.#e){const e=window.SpeechRecognition||window.webkitSpeechRecognition;if(!e)return void u.error("浏览器不支持语音识别");const t=new e;t.continuous=!0,t.lang=navigator.language,t.onresult=e=>{const t=Array.from(e.results).at(-1)?.item(0).transcript;t&&this.#t.emit("result",t)},t.onspeechend=()=>{this.#t.emit("recording",!1)},t.onerror=e=>{this.#t.emit("recording",!1),u.error(e.error)},this.#e=t}this.#t.emit("recording",!0),this.#e.start()}stop(){this.#e?.stop(),this.#t.emit("recording",!1)}},$e=class{#t;#r;#n;#i;constructor(e){this.#r=e,this.#t=new J}async start(){try{this.#n=await navigator.mediaDevices.getUserMedia({audio:!0}),this.#i=new AudioContext;const e=this.#i.createScriptProcessor(0,1,1);this.#i.createMediaStreamSource(this.#n).connect(e),e.connect(this.#i.destination);let t=[],r=0;const n=.01,i=1;e.onaudioprocess=e=>{const o=e.playbackTime,s=e.inputBuffer.getChannelData(0);let a=!0;for(let e=0;e<s.length;e++)if(Math.abs(s[e])>n){a=!1;break}if(a){const e=o-r;e>i&&(t.length>1&&(this.save(t),t=[]),e>10&&this.stop())}else t.push(new Float32Array(s)),r=o},this.#t.emit("recording",!0)}catch(e){u.error(e.message)}}convertBuffer(e){const t=new Float32Array(e),r=new Int16Array(e.length);for(let e=0;e<t.length;e++){const n=Math.max(-1,Math.min(1,t[e]));r[e]=n<0?32768*n:32767*n}return r}async encodeMP3(e){const{Mp3Encoder:t}=await import("@breezystack/lamejs"),r=new t(1,44100,128),n=[];for(const t of e){const e=this.convertBuffer(t),i=1152;let o=e.length;for(let t=0;o>=0;t+=i){const s=e.subarray(t,t+i),a=r.encodeBuffer(s);n.push(new Int8Array(a)),o-=i}}return n.push(r.flush()),new Blob(n,{type:"audio/mp3"})}async save(e){const t=await this.encodeMP3(e);try{this.#t.emit("transcribing",!0);const e=await this.#r(t);e&&this.#t.emit("result",e)}catch(e){}finally{this.#t.emit("transcribing",!1)}}stop(){this.#n&&(this.#n.getTracks().forEach(e=>e.stop()),this.#n=void 0),this.#i&&(this.#i.close(),this.#i=void 0),this.#t.emit("recording",!1)}onResult(e){this.#t.on("result",e)}onRecording(e){this.#t.on("recording",e)}onTranscribing(e){this.#t.on("transcribing",e)}};const Me=R(({onResult:r,model:n="builtin"},i)=>{const{request:o}=he(),a=z(()=>{if("builtin"!==n)return async e=>{const t=new FormData;t.append("file",e,"audio.mp3"),t.append("model",n);return(await o({url:"/transcriptions",method:"post",data:t})).text}},[n]),{start:l,stop:c,recording:d,transcribing:u}=function({onResult:e,loader:t}){const r=q(),[n,i]=S(!1),[o,s]=S(!1);return M(()=>()=>{r.current&&(r.current.stop(),r.current=void 0)},[]),{recording:n,transcribing:o,start:async()=>{r.current||(r.current=t?new $e(t):new Ce,r.current.onRecording(i),r.current.onTranscribing(s),r.current.onResult(e)),r.current.start()},stop:()=>{r.current&&r.current.stop()}}}({onResult:r,loader:a});return I(i,()=>({start:l,stop:c}),[l,c]),e(s,{tooltip:d?"停止":"语音输入",placement:"top",children:t(je,{onMouseDown:e=>{e.preventDefault(),d?c():l()},children:[u&&e(Se,{animation:"border",variant:"primary",size:"sm"}),e("i",d?{className:"bi bi-mic-fill text-danger"}:{className:"bi bi-mic"})]})})}),Se=n(T)`
99
+ `;let Ce=class{#e;#t;constructor(){this.#t=new K}onResult(e){this.#t.on("result",e)}onRecording(e){this.#t.on("recording",e)}onTranscribing(e){this.#t.on("transcribing",e)}start(){if(!this.#e){const e=window.SpeechRecognition||window.webkitSpeechRecognition;if(!e)return void u.error("浏览器不支持语音识别");const t=new e;t.continuous=!0,t.lang=navigator.language,t.onresult=e=>{const t=Array.from(e.results).at(-1)?.item(0).transcript;t&&this.#t.emit("result",t)},t.onspeechend=()=>{this.#t.emit("recording",!1)},t.onerror=e=>{this.#t.emit("recording",!1),u.error(e.error)},this.#e=t}this.#t.emit("recording",!0),this.#e.start()}stop(){this.#e?.stop(),this.#t.emit("recording",!1)}},$e=class{#t;#r;#n;#i;constructor(e){this.#r=e,this.#t=new K}async start(){try{this.#n=await navigator.mediaDevices.getUserMedia({audio:!0}),this.#i=new AudioContext;const e=this.#i.createScriptProcessor(0,1,1);this.#i.createMediaStreamSource(this.#n).connect(e),e.connect(this.#i.destination);let t=[],r=0;const n=.01,i=1;e.onaudioprocess=e=>{const o=e.playbackTime,s=e.inputBuffer.getChannelData(0);let a=!0;for(let e=0;e<s.length;e++)if(Math.abs(s[e])>n){a=!1;break}if(a){const e=o-r;e>i&&(t.length>1&&(this.save(t),t=[]),e>10&&this.stop())}else t.push(new Float32Array(s)),r=o},this.#t.emit("recording",!0)}catch(e){u.error(e.message)}}convertBuffer(e){const t=new Float32Array(e),r=new Int16Array(e.length);for(let e=0;e<t.length;e++){const n=Math.max(-1,Math.min(1,t[e]));r[e]=n<0?32768*n:32767*n}return r}async encodeMP3(e){const{Mp3Encoder:t}=await import("@breezystack/lamejs"),r=new t(1,44100,128),n=[];for(const t of e){const e=this.convertBuffer(t),i=1152;let o=e.length;for(let t=0;o>=0;t+=i){const s=e.subarray(t,t+i),a=r.encodeBuffer(s);n.push(new Int8Array(a)),o-=i}}return n.push(r.flush()),new Blob(n,{type:"audio/mp3"})}async save(e){const t=await this.encodeMP3(e);try{this.#t.emit("transcribing",!0);const e=await this.#r(t);e&&this.#t.emit("result",e)}catch(e){}finally{this.#t.emit("transcribing",!1)}}stop(){this.#n&&(this.#n.getTracks().forEach(e=>e.stop()),this.#n=void 0),this.#i&&(this.#i.close(),this.#i=void 0),this.#t.emit("recording",!1)}onResult(e){this.#t.on("result",e)}onRecording(e){this.#t.on("recording",e)}onTranscribing(e){this.#t.on("transcribing",e)}};const Se=q(({onResult:r,model:n="builtin"},i)=>{const{request:o}=pe(),a=z(()=>{if("builtin"!==n)return async e=>{const t=new FormData;t.append("file",e,"audio.mp3"),t.append("model",n);return(await o({url:"/transcriptions",method:"post",data:t})).text}},[n]),{start:l,stop:c,recording:d,transcribing:u}=function({onResult:e,loader:t}){const r=F(),[n,i]=M(!1),[o,s]=M(!1);return S(()=>()=>{r.current&&(r.current.stop(),r.current=void 0)},[]),{recording:n,transcribing:o,start:async()=>{r.current||(r.current=t?new $e(t):new Ce,r.current.onRecording(i),r.current.onTranscribing(s),r.current.onResult(e)),r.current.start()},stop:()=>{r.current&&r.current.stop()}}}({onResult:r,loader:a});return I(i,()=>({start:l,stop:c}),[l,c]),e(s,{tooltip:d?"停止":"语音输入",placement:"top",children:t(je,{onMouseDown:e=>{e.preventDefault(),d?c():l()},children:[u&&e(Me,{animation:"border",variant:"primary",size:"sm"}),e("i",d?{className:"bi bi-mic-fill text-danger"}:{className:"bi bi-mic"})]})})}),Me=n(O)`
100
100
  position: absolute;
101
101
  --bs-spinner-width: .75rem;
102
102
  --bs-spinner-height: .75rem;
103
103
  --bs-spinner-border-width: 0.1em;
104
- `,qe=R(({className:t,children:r,size:n,tooltip:i,placement:o,onClick:a,onMouseDown:l},c)=>{const d=e(Fe,{ref:c,className:t,onClick:a,onMouseDown:l,$size:n,children:r});return i?e(s,{tooltip:i,placement:o,children:d}):d}),Fe=n.div`
104
+ `,Fe=q(({className:t,children:r,size:n,tooltip:i,placement:o,onClick:a,onMouseDown:l},c)=>{const d=e(Re,{ref:c,className:t,onClick:a,onMouseDown:l,$size:n,children:r});return i?e(s,{tooltip:i,placement:o,children:d}):d}),Re=n.div`
105
105
  width: 2rem;
106
106
  height: 2rem;
107
107
  align-items: center;
@@ -125,7 +125,7 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
125
125
  &:hover {
126
126
  background-color: var(--bs-secondary-bg-subtle);
127
127
  }
128
- `;function Re(){const{request:n,reset:i,conversationId:o}=he(),[s,a]=S(!1),[l,c]=S(""),[d,u]=S(""),m=h(e=>{u(e)},500);return M(()=>{m(l)},[l]),t(r,{children:[e(qe,{tooltip:"历史记录",placement:"top",onClick:()=>a(!0),children:e("i",{className:"bi bi-clock-history"})}),e(p,{show:s,onHide:()=>{a(!1)},placement:"end",headerAs:Le,header:t(r,{children:[e("span",{children:"聊天历史记录"}),e(Pe,{children:e(U,{type:"search",placeholder:"搜索聊天记录...",value:l,onChange:e=>c(e.target.value),autoFocus:!0})})]}),bodyAs:ze,children:s&&e(De,{children:e(Ae,{useWindow:!1,source:e=>n({url:"/conversation",params:{...e,...d&&{keyword:d}}}),render:({data:s,loading:l,setData:c})=>s.length||l?t(r,{children:[s.map((s,l)=>t(A,{children:[l>0&&e("hr",{className:"mx-2 my-2"}),t(Ie,{children:[o===s.id&&e(O,{bg:"secondary",children:"当前"}),e("span",{className:"overflow-hidden text-truncate flex-fill",onClick:()=>{i(s),a(!1)},children:s.title||"未命名对话"}),t(B,{align:"end",children:[e(B.Toggle,{size:"sm",className:"no-caret",as:qe,children:e("i",{className:"bi bi-three-dots-vertical"})}),t(B.Menu,{children:[e(g,{buttonProps:{as:B.Item},text:t(r,{children:[e("i",{className:"bi bi-pencil me-2"}),"重命名"]}),modalProps:{header:"编辑对话名称"},schema:{type:"object",properties:{title:{type:"string"}}},uiSchema:{title:{"ui:label":!1,"ui:autofocus":!0}},formData:{title:s.title},onRequest:e=>n({url:`/conversation/${s.id}`,method:"PUT",data:e}),onSuccess:(e,t)=>{c(e=>{const r=e.findIndex(e=>e.id===s.id);-1!==r&&Object.assign(e[r],t)})}}),t(f,{as:B.Item,confirm:"确定要删除吗?",onRequest:()=>n({url:`/conversation/${s.id}`,method:"DELETE"}),onSuccess:()=>{c(e=>{const t=e.findIndex(e=>e.id===s.id);-1!==t&&e.splice(t,1)})},children:[e("i",{className:"bi bi-trash3 me-2"}),"删除"]})]})]})]})]},s.id)),l&&e(b,{wrap:!0})]}):e("div",{className:"text-muted text-center py-5",children:d?"未找到匹配的聊天记录":"暂无对话记录"})},d)})})]})}const ze=n.div`
128
+ `;function qe(){const{request:n,reset:i,conversationId:o}=pe(),[s,a]=M(!1),[l,c]=M(""),[d,u]=M(""),m=h(e=>{u(e)},500);return S(()=>{m(l)},[l]),t(r,{children:[e(Fe,{tooltip:"历史记录",placement:"top",onClick:()=>a(!0),children:e("i",{className:"bi bi-clock-history"})}),e(p,{show:s,onHide:()=>{a(!1)},placement:"end",headerAs:Le,header:t(r,{children:[e("span",{children:"聊天历史记录"}),e(Pe,{children:e(_,{type:"search",placeholder:"搜索聊天记录...",value:l,onChange:e=>c(e.target.value),autoFocus:!0})})]}),bodyAs:ze,children:s&&e(De,{children:e(Ae,{useWindow:!1,source:e=>n({url:"/conversation",params:{...e,...d&&{keyword:d}}}),render:({data:s,loading:l,setData:c})=>s.length||l?t(r,{children:[s.map((s,l)=>t(A,{children:[l>0&&e("hr",{className:"mx-2 my-2"}),t(Ie,{children:[o===s.id&&e(B,{bg:"secondary",children:"当前"}),e("span",{className:"overflow-hidden text-truncate flex-fill",onClick:()=>{i(s),a(!1)},children:s.title||"未命名对话"}),t(U,{align:"end",children:[e(U.Toggle,{size:"sm",className:"no-caret",as:Fe,children:e("i",{className:"bi bi-three-dots-vertical"})}),t(U.Menu,{children:[e(g,{buttonProps:{as:U.Item},text:t(r,{children:[e("i",{className:"bi bi-pencil me-2"}),"重命名"]}),modalProps:{header:"编辑对话名称"},schema:{type:"object",properties:{title:{type:"string"}}},uiSchema:{title:{"ui:label":!1,"ui:autofocus":!0}},formData:{title:s.title},onRequest:e=>n({url:`/conversation/${s.id}`,method:"PUT",data:e}),onSuccess:(e,t)=>{c(e=>{const r=e.findIndex(e=>e.id===s.id);-1!==r&&Object.assign(e[r],t)})}}),t(f,{as:U.Item,confirm:"确定要删除吗?",onRequest:()=>n({url:`/conversation/${s.id}`,method:"DELETE"}),onSuccess:()=>{c(e=>{const t=e.findIndex(e=>e.id===s.id);-1!==t&&e.splice(t,1)})},children:[e("i",{className:"bi bi-trash3 me-2"}),"删除"]})]})]})]})]},s.id)),l&&e(b,{wrap:!0})]}):e("div",{className:"text-muted text-center py-5",children:d?"未找到匹配的聊天记录":"暂无对话记录"})},d)})})]})}const ze=n.div`
129
129
  padding: 0;
130
130
  overflow: hidden;
131
131
  `,Ie=n.div`
@@ -165,7 +165,7 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
165
165
  display: flex;
166
166
  align-items: center;
167
167
  gap: 0.5rem;
168
- `;var Te;function Oe(){return Oe=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)({}).hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},Oe.apply(null,arguments)}const Be=e=>j.createElement("svg",Oe({width:"1em",height:"1em",fill:"currentColor",viewBox:"0 0 256 256"},e),Te||(Te=j.createElement("path",{fillRule:"evenodd",d:"M128 22C69.458 22 22 69.458 22 128v96c0 5.523 4.477 10 10 10h96c58.542 0 106-47.458 106-106S186.542 22 128 22m0 56c5.523 0 10 4.477 10 10v30h30c5.523 0 10 4.477 10 10s-4.477 10-10 10h-30v30c0 5.523-4.477 10-10 10s-10-4.477-10-10v-30H88c-5.523 0-10-4.477-10-10s4.477-10 10-10h30V88c0-5.523 4.477-10 10-10",clipRule:"evenodd","data-follow-fill":"#000"})));function Ue(){const{reset:t}=he();return e(qe,{className:"text-primary",tooltip:"新会话",placement:"top",onClick:t,children:e(Be,{})})}function _e({children:r,actions:n}){return t(Qe,{children:[r,t(He,{children:[n,e(Re,{}),e(Ue,{})]})]})}const He=n.div`
168
+ `;var Te;function Oe(){return Oe=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)({}).hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},Oe.apply(null,arguments)}const Be=e=>j.createElement("svg",Oe({width:"1em",height:"1em",fill:"currentColor",viewBox:"0 0 256 256"},e),Te||(Te=j.createElement("path",{fillRule:"evenodd",d:"M128 22C69.458 22 22 69.458 22 128v96c0 5.523 4.477 10 10 10h96c58.542 0 106-47.458 106-106S186.542 22 128 22m0 56c5.523 0 10 4.477 10 10v30h30c5.523 0 10 4.477 10 10s-4.477 10-10 10h-30v30c0 5.523-4.477 10-10 10s-10-4.477-10-10v-30H88c-5.523 0-10-4.477-10-10s4.477-10 10-10h30V88c0-5.523 4.477-10 10-10",clipRule:"evenodd","data-follow-fill":"#000"})));function Ue(){const{reset:t}=pe();return e(Fe,{className:"text-primary",tooltip:"新会话",placement:"top",onClick:t,children:e(Be,{})})}function _e({children:r,actions:n}){return t(Qe,{children:[r,t(He,{children:[n,e(qe,{}),e(Ue,{})]})]})}const He=n.div`
169
169
  display: flex;
170
170
  gap: .25rem;
171
171
  margin-left: auto;
@@ -173,7 +173,7 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
173
173
  margin-bottom: .5rem;
174
174
  display: flex;
175
175
  padding: 0 .125rem;
176
- `;var Je=R(function({readonly:t,autoFocus:r,placeholder:n,minRows:i,maxRows:o,onSubmit:s,onFocusedChange:a,onQueryChange:l,onPaste:c},d){const u=q(null),[m,h]=S(""),p=F(()=>{const e=u.current;if(!e)return;e.focus();const t=e.value.length;e.setSelectionRange(t,t)},[]),g=F(e=>{const t="string"==typeof e?e:e(m);h(t),l?.(t.trim()),requestAnimationFrame(()=>{p()})},[m,l,p]);return I(d,()=>({setContent:g,focus(){p()}}),[g,p]),e(Ke,{ref:u,value:m,minRows:i,maxRows:o,readOnly:t,autoFocus:r,placeholder:n,onFocus:()=>a?.(!0),onBlur:()=>a?.(!1),onChange:e=>{h(e.target.value),l?.(e.target.value.trim())},onPaste:e=>{c?.(e.nativeEvent)},onKeyDown:e=>{e.nativeEvent.isComposing||"Enter"!==e.key||e.shiftKey||(e.preventDefault(),e.stopPropagation(),s?.())}})});const Ke=n(K)`
176
+ `;var Je=q(function({readonly:t,autoFocus:r,placeholder:n,minRows:i,maxRows:o,onSubmit:s,onFocusedChange:a,onQueryChange:l,onPaste:c},d){const u=F(null),[m,h]=M(""),p=R(()=>{const e=u.current;if(!e)return;e.focus();const t=e.value.length;e.setSelectionRange(t,t)},[]),g=R(e=>{const t="string"==typeof e?e:e(m);h(t),l?.(t.trim()),requestAnimationFrame(()=>{p()})},[m,l,p]);return I(d,()=>({setContent:g,focus(){p()}}),[g,p]),e(Ke,{ref:u,value:m,minRows:i,maxRows:o,readOnly:t,autoFocus:r,placeholder:n,onFocus:()=>a?.(!0),onBlur:()=>a?.(!1),onChange:e=>{h(e.target.value),l?.(e.target.value.trim())},onPaste:e=>{c?.(e.nativeEvent)},onKeyDown:e=>{e.nativeEvent.isComposing||"Enter"!==e.key||e.shiftKey||(e.preventDefault(),e.stopPropagation(),s?.())}})});const Ke=n(W)`
177
177
  min-height: calc(1.5em + 1rem);
178
178
  width: 100%;
179
179
  padding: 0.5rem 0.5rem 0.5rem 0.75rem;
@@ -183,7 +183,7 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
183
183
  flex: 1;
184
184
  line-height: 1.5;
185
185
  background: transparent;
186
- `;var We=R(function({suggestion:r,fileTypes:n,speech:i,scrollRef:o,variables:a,minRows:l=1,maxRows:d=5,toolbar:m,toolbarActions:h,disabled:p,autoFocus:g,renderEditableInput:f,placeholder:b="请输入你的问题, Enter+Shift换行, Enter发送",supportStop:y=!1,onEvent:x},w){const k=q(null),E=q(null),N=q(null),[j,C]=S(""),[$,R]=S(""),[A,D]=v([]),[P,T]=S(!1),O=n&&n.length>0?n:ke,{send:B,resume:U,stop:H,suggest:Q}=Ee({supportStop:y}),J=z(()=>({onSuccess(){r&&Q()},onComplete(){requestAnimationFrame(()=>{N.current?.focus()})},onEvent:x}),[r,x]),{messages:K,loading:W,request:X,setInput:V}=he(J),[Y,G]=S();M(()=>{const e=K.filter(e=>!!e.query);G(e.at(-1)?.variables)},[K]),M(()=>{!n&&A.length>0&&D([])},[n]),M(()=>{const e=o.current;if(e&&B){const t=e=>{if(e.target instanceof HTMLAnchorElement&&"#!question"===e.target.hash){e.preventDefault();const t={query:e.target.text};a&&(t.variables={...Y,...a.values}),B(t)}};return e.addEventListener("click",t),()=>{e.removeEventListener("click",t)}}},[a,Y]);const Z=F(e=>{const t=e.map((e,t)=>{if(e.name)return e;const r=e.type.split("/")[1]||"png";return new File([e],`screenshot-${Date.now()}-${t}.${r}`,{type:e.type})}).filter(e=>!(!O.includes("*")&&!O.includes(L.extname(e.name)))&&!(e.size>20971520)).slice(0,6-A.length);return 0!==t.length&&(D(e=>{e.push(...t.map(e=>({file:e})))}),t.forEach(async e=>{try{const t=new FormData;t.set("file",e);const r=await X({method:"POST",url:"/upload",data:t});D(t=>{const n=t.find(t=>t.file===e);n&&(n.path=r.path)})}catch(t){const r=c(t)?t.message:"unknown error";D(t=>{const n=t.find(t=>t.file===e);n&&(n.error=r)})}}),!0)},[A.length,O,X,D]),ee=F(({target:e})=>{e.files&&Z(Array.from(e.files)),e.value=""},[Z]),te=F(e=>{const t=Array.from(e.clipboardData?.files||[]),r=Array.from(e.clipboardData?.items||[]).filter(e=>"file"===e.kind).map(e=>e.getAsFile()).filter(e=>!!e),n=t.length>0?t:r;0!==n.length&&Z(n)&&e.preventDefault()},[Z]),re=A.flatMap(({file:e,path:t})=>t?[{name:e.name,size:e.size,path:t}]:[]),ne=F(()=>{if(j||re.length>0){const e={query:j,files:re};a&&(e.variables={...Y,...a.values}),$&&(e.quote=$),B(e),N.current?.setContent(""),R(""),D([]),E.current?.stop(!0)}},[j,re,a,Y,$]),ie=z(()=>({setQuery(e){N.current?.setContent(e)},setQuote:R,send:B,resume:U,focus(){N.current?.focus()}}),[R,B,U]);if(M(()=>{V(ie)},[ie]),I(w,()=>ie,[ie]),a){const t=a.config.filter(e=>!(e.key in(a.values||{}))),r=(e,r=!1)=>!!e&&t.every(t=>{const n=!t.required||e?.[t.key];return!n&&r&&u.error("请完善必填信息"),n});if(t.length>0&&!r(Y))return e(Ve,{children:e(Xe,{children:e(Ne,{values:Y,variables:t,onSubmit:({formData:e})=>{if(r(e,!0))return G(e),!0}})})})}return t(nt,{children:[m&&e(_e,{actions:h,children:m}),t(rt,{$focused:P&&!W,children:[A.length>0&&e(Ge,{children:A.map(({file:t,error:r,path:n},i)=>{const o=void 0===r&&void 0===n;return e(Ye,{name:t.name,size:t.size,error:r,loading:o,onRemove:()=>{D(e=>{const r=e.findIndex(e=>e.file===t);-1!==r&&e.splice(r,1)})}},i)})}),!!$&&t(tt,{children:[e("i",{className:"bi bi-quote"}),e("p",{children:$}),e(_,{onClick:()=>R("")})]}),t(Ze,{children:[f?.({Component:Je,props:{ref:N,readonly:W||p,autoFocus:g,placeholder:b,minRows:l,maxRows:d,onSubmit:ne,onFocusedChange:T,onQueryChange:C,onPaste:te}})||e(Je,{ref:N,readonly:W||p,autoFocus:g,placeholder:b,minRows:l,maxRows:d,onSubmit:ne,onFocusedChange:T,onQueryChange:C,onPaste:te}),t(et,{children:[n&&e(s,{tooltip:"可上传不超过6个小于20MB的文件",placement:"top",children:t(je,{disabled:A.length>=6,onClick:()=>k.current?.click(),children:[e("input",{onChange:ee,multiple:!0,accept:O.join(","),ref:k,type:"file",hidden:!0}),e("i",{className:"bi bi-file-earmark-arrow-up"})]})}),i&&e(Me,{ref:E,model:i.model,onResult:e=>{N.current?.setContent(t=>t+e+" ")}}),e(je,{$fill:W&&y,className:W&&y?"text-danger":"text-primary",disabled:!j&&0===re.length&&!W||W&&!y,onClick:e=>{e.preventDefault(),W&&y?H():ne()},children:e("i",W&&y?{className:"bi bi-square-fill fs-7"}:{className:"bi bi-send-fill"})})]})]})]})]})});const Xe=n.div`
186
+ `;var We=q(function({suggestion:r,fileTypes:n,speech:i,scrollRef:o,variables:a,minRows:d=1,maxRows:m=5,toolbar:h,toolbarActions:p,disabled:g,autoFocus:f,renderEditableInput:b,placeholder:y="请输入你的问题, Enter+Shift换行, Enter发送",supportStop:x=!1,onEvent:w},k){const E=F(null),N=F(null),j=F(null),[C,$]=M(""),[q,A]=M(""),[D,L]=v([]),[T,O]=M(!1),B=n&&n.length>0?n:Ee,{send:U,resume:_,stop:Q,suggest:J}=function(e){const{setMessages:t,setSuggestions:r,setLoading:n,conversationId:i,setConversationId:o,request:s,handles:a,messages:d}=pe(),u=!0===e?.supportStop,m=F(null),h=F(),p=F(i),g=()=>(m.current&&m.current.abort(),m.current=new AbortController,m.current.signal),{onComplete:f,onEvent:b}=a,v=R(e=>{if(e.data)if("[DONE]"!=e.data)try{const r=JSON.parse(e.data);r.conversation?(p.current=r.conversation,o(r.conversation)):r.event?b?.(r.event):t(e=>{const t=e[e.length-1];if(r.chunks){if(t.chunks){const e=r.chunks.index;if(t.chunks[e]||(t.chunks[e]={content:"",reasoning:"",tools:[]}),r.chunks.error)t.chunks[e].error=r.chunks.error;else if(r.chunks.tools){t.chunks[e].tools||(t.chunks[e].tools=[]);const n=r.chunks.tools.index;delete r.chunks.tools.index,t.chunks[e].tools[n]&&"arguments"in r.chunks.tools?t.chunks[e].tools[n].arguments+=r.chunks.tools.arguments:t.chunks[e].tools[n]={...t.chunks[e].tools[n],...r.chunks.tools}}else if(r.chunks.reasoning)t.chunks[e].reasoning+=r.chunks.reasoning;else if(r.chunks.content)if("object"==typeof r.chunks.content){Array.isArray(t.chunks[e].content)||(t.chunks[e].content=[]);const n=r.chunks.content.index,i=r.chunks.content.value;"string"==typeof i?(t.chunks[e].content[n]||(t.chunks[e].content[n]=""),t.chunks[e].content[n]+=i):t.chunks[e].content[n]=i}else t.chunks[e].content+=r.chunks.content;else r.chunks.node&&(t.chunks[e].node={...t.chunks[e].node,...r.chunks.node})}}else r.stats?t.stats=r.stats:r.id&&(t.id=r.id)})}catch(e){console.error(e)}else t(e=>{e[e.length-1].loading=!1})},[a]),y=R(e=>{if(l(e))t(e=>{const t=e[e.length-1];t&&(t.loading=!1)});else{let r="未知错误";c(e)&&(r=401==e.response?.status?"未授权或授权已过期,请刷新页面后重试":"string"==typeof e.errors?e.errors:Object.values(e.errors).join("\n")),t(e=>{const t=e[e.length-1];t.chunks&&(0===t.chunks.length?t.chunks=[{error:r}]:t.chunks[t.chunks.length-1].error=r),t.loading=!1})}},[]),x=R(async e=>{h.current=e;try{const r=g();n(!0),t(e=>{e[e.length-1].loading=!0,delete e[e.length-1].stats});let i={url:"message",method:"get",params:{id:e},onMessage:v,signal:r};await s(i)}catch(e){y(e)}finally{m.current=null,h.current=void 0}n(!1),f?.()},[s,a]),w=R(async(e,...i)=>{"string"==typeof e&&(e={query:e,...i});const{query:o,files:a=[],variables:l={},quote:c}=e;let d=null;if(o||a.length>0){const e=g();n(!0),r([]),t(e=>{e.push({query:o,quote:c,files:a,variables:l,chunks:[],loading:!0})});try{let t={method:"post",data:{query:o,quote:c,files:a,variables:l,conversation:p.current},onMessage:v,signal:e};d=(await s(t)).message??null}catch(e){y(e)}finally{m.current=null}d?await x(d.id):(n(!1),f?.())}},[s,a]),k=R(async e=>{let r=null;try{const i=g();n(!0),t(e=>{e[e.length-1].loading=!0});let o={url:"resume",method:"post",data:{conversation:p.current,chunk:e.chunk,tool:e.tool,payload:e.payload},onMessage:v,signal:i};r=(await s(o)).message??null}catch(e){y(e)}finally{m.current=null}r?await x(r.id):(n(!1),f?.())},[s,a]),E=R(async()=>{try{const e=g();let t={method:"post",url:"/suggestion",data:{conversation:p.current},signal:e};const n=await s(t);r(n)}catch{}finally{m.current=null}},[s]),N=R(async()=>{if(u)if(h.current)try{await s({url:"stop",method:"post",data:{id:h.current}})}catch{}else m.current?.abort()},[s,u]),j=()=>{const e=d[d.length-1];e&&e.id&&2===e.status&&x(e.id)};return S(()=>(j(),()=>{m.current&&m.current.abort()}),[]),S(()=>{i!=p.current&&(p.current=i,m.current&&m.current.abort(),j())},[i]),{send:w,resume:k,suggest:E,stop:N}}({supportStop:x}),K=z(()=>({onSuccess(){r&&J()},onComplete(){requestAnimationFrame(()=>{j.current?.focus()})},onEvent:w}),[r,w]),{messages:W,loading:X,request:V,setInput:Y}=pe(K),[G,Z]=M();S(()=>{const e=W.filter(e=>!!e.query);Z(e.at(-1)?.variables)},[W]),S(()=>{!n&&D.length>0&&L([])},[n]),S(()=>{const e=o.current;if(e&&U){const t=e=>{if(e.target instanceof HTMLAnchorElement&&"#!question"===e.target.hash){e.preventDefault();const t={query:e.target.text};a&&(t.variables={...G,...a.values}),U(t)}};return e.addEventListener("click",t),()=>{e.removeEventListener("click",t)}}},[a,G]);const ee=R(e=>{const t=e.map((e,t)=>{if(e.name)return e;const r=e.type.split("/")[1]||"png";return new File([e],`screenshot-${Date.now()}-${t}.${r}`,{type:e.type})}).filter(e=>!(!B.includes("*")&&!B.includes(P.extname(e.name)))&&!(e.size>20971520)).slice(0,6-D.length);return 0!==t.length&&(L(e=>{e.push(...t.map(e=>({file:e})))}),t.forEach(async e=>{try{const t=new FormData;t.set("file",e);const r=await V({method:"POST",url:"/upload",data:t});L(t=>{const n=t.find(t=>t.file===e);n&&(n.path=r.path)})}catch(t){const r=c(t)?t.message:"unknown error";L(t=>{const n=t.find(t=>t.file===e);n&&(n.error=r)})}}),!0)},[D.length,B,V,L]),te=R(({target:e})=>{e.files&&ee(Array.from(e.files)),e.value=""},[ee]),re=R(e=>{const t=Array.from(e.clipboardData?.files||[]),r=Array.from(e.clipboardData?.items||[]).filter(e=>"file"===e.kind).map(e=>e.getAsFile()).filter(e=>!!e),n=t.length>0?t:r;0!==n.length&&ee(n)&&e.preventDefault()},[ee]),ne=D.flatMap(({file:e,path:t})=>t?[{name:e.name,size:e.size,path:t}]:[]),ie=R(()=>{if(C||ne.length>0){const e={query:C,files:ne};a&&(e.variables={...G,...a.values}),q&&(e.quote=q),U(e),j.current?.setContent(""),A(""),L([]),N.current?.stop(!0)}},[C,ne,a,G,q]),oe=z(()=>({setQuery(e){j.current?.setContent(e)},setQuote:A,send:U,resume:_,focus(){j.current?.focus()}}),[A,U,_]);if(S(()=>{Y(oe)},[oe]),I(k,()=>oe,[oe]),a){const t=a.config.filter(e=>!(e.key in(a.values||{}))),r=(e,r=!1)=>!!e&&t.every(t=>{const n=!t.required||e?.[t.key];return!n&&r&&u.error("请完善必填信息"),n});if(t.length>0&&!r(G))return e(Ve,{children:e(Xe,{children:e(Ne,{values:G,variables:t,onSubmit:({formData:e})=>{if(r(e,!0))return Z(e),!0}})})})}return t(nt,{children:[h&&e(_e,{actions:p,children:h}),t(rt,{$focused:T&&!X,children:[D.length>0&&e(Ge,{children:D.map(({file:t,error:r,path:n},i)=>{const o=void 0===r&&void 0===n;return e(Ye,{name:t.name,size:t.size,error:r,loading:o,onRemove:()=>{L(e=>{const r=e.findIndex(e=>e.file===t);-1!==r&&e.splice(r,1)})}},i)})}),!!q&&t(tt,{children:[e("i",{className:"bi bi-quote"}),e("p",{children:q}),e(H,{onClick:()=>A("")})]}),t(Ze,{children:[b?.({Component:Je,props:{ref:j,readonly:X||g,autoFocus:f,placeholder:y,minRows:d,maxRows:m,onSubmit:ie,onFocusedChange:O,onQueryChange:$,onPaste:re}})||e(Je,{ref:j,readonly:X||g,autoFocus:f,placeholder:y,minRows:d,maxRows:m,onSubmit:ie,onFocusedChange:O,onQueryChange:$,onPaste:re}),t(et,{children:[n&&e(s,{tooltip:"可上传不超过6个小于20MB的文件",placement:"top",children:t(je,{disabled:D.length>=6,onClick:()=>E.current?.click(),children:[e("input",{onChange:te,multiple:!0,accept:B.join(","),ref:E,type:"file",hidden:!0}),e("i",{className:"bi bi-file-earmark-arrow-up"})]})}),i&&e(Se,{ref:N,model:i.model,onResult:e=>{j.current?.setContent(t=>t+e+" ")}}),e(je,{$fill:X&&x,className:X&&x?"text-danger":"text-primary",disabled:!C&&0===ne.length&&!X||X&&!x,onClick:e=>{e.preventDefault(),X&&x?Q():ie()},children:e("i",X&&x?{className:"bi bi-square-fill fs-7"}:{className:"bi bi-send-fill"})})]})]})]})]})});const Xe=n.div`
187
187
  border-radius: var(--bs-border-radius-lg);
188
188
  box-shadow: var(--bs-box-shadow-sm);
189
189
  margin: 1rem;
@@ -200,7 +200,7 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
200
200
  display: flex;
201
201
  justify-content: center;
202
202
  align-items: center;
203
- `,Ye=n(be)`
203
+ `,Ye=n(ve)`
204
204
  width: calc((100% - 0.75rem) / 2);
205
205
  `,Ge=n.div`
206
206
  display: flex;
@@ -246,7 +246,7 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
246
246
  box-shadow: 0.125rem 0.25rem 0.5rem rgba(0, 0, 0, 0.1);
247
247
  `,nt=n.div`
248
248
  margin: 0 1rem 1rem;
249
- `;function it(e){return e.map(e=>({id:e.id,query:e.query,quote:e.quote||void 0,files:e.files||void 0,variables:e.variables,chunks:e.chunks.map(({content:e="",node:t,error:r,tools:n=[],reasoning:i})=>({content:e,reasoning:i,error:r,tools:n,node:t})),annotation:e.annotation,stats:{usage:e.usage,latency:e.latency},status:e.status??1}))}function ot(e){if((e=e.filter(e=>!!e.trim())).length>3){const t=[...e];let r=e.length-3;for(;r--;){let e=Math.floor(Math.random()*t.length);t.splice(e,1)}e=t}return e}var st,at,lt;function ct(){return ct=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)({}).hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},ct.apply(null,arguments)}const dt=e=>j.createElement("svg",ct({xmlns:"http://www.w3.org/2000/svg",width:20,height:10,fill:"#fff",viewBox:"0 0 120 30"},e),st||(st=j.createElement("circle",{cx:15,cy:15,r:15,fill:"#3c60ff"},j.createElement("animate",{attributeName:"r",begin:"0s",calcMode:"linear",dur:"0.8s",from:15,repeatCount:"indefinite",to:15,values:"15;9;15"}),j.createElement("animate",{attributeName:"fill-opacity",begin:"0s",calcMode:"linear",dur:"0.8s",from:1,repeatCount:"indefinite",to:1,values:"1;.5;1"}))),at||(at=j.createElement("circle",{cx:60,cy:15,r:9,fill:"#3c60ff",fillOpacity:.3},j.createElement("animate",{attributeName:"r",begin:"0s",calcMode:"linear",dur:"0.8s",from:9,repeatCount:"indefinite",to:9,values:"9;15;9"}),j.createElement("animate",{attributeName:"fill-opacity",begin:"0s",calcMode:"linear",dur:"0.8s",from:.5,repeatCount:"indefinite",to:.5,values:".5;1;.5"}))),lt||(lt=j.createElement("circle",{cx:105,cy:15,r:15,fill:"#3c60ff"},j.createElement("animate",{attributeName:"r",begin:"0s",calcMode:"linear",dur:"0.8s",from:15,repeatCount:"indefinite",to:15,values:"15;9;15"}),j.createElement("animate",{attributeName:"fill-opacity",begin:"0s",calcMode:"linear",dur:"0.8s",from:1,repeatCount:"indefinite",to:1,values:"1;.5;1"}))));function ut(e){if(!e)return"";if("string"==typeof e)return e;if("image"===e.type){return`![](${y(e.image)})`}return""}const mt=function(e,t,r){function n(t){return t!==re.leftSquareBracket?(e.exit("citeMarker"),e.enter("citeData"),e.enter(ne.chunkString,{contentType:"string"}),i(t)):(e.consume(t),n)}function i(n){return n===re.rightSquareBracket?(e.exit(ne.chunkString),e.exit("citeData"),e.enter("citeMarker"),function(n){if(n!==re.rightSquareBracket)return r(n);return e.consume(n),e.exit("citeMarker"),e.exit("cite"),t(n)}(n)):ie(n)||n===re.eof||n>57||n<48?r(n):(e.consume(n),i)}return function(t){return t!==re.leftSquareBracket?r(t):(e.enter("cite"),e.enter("citeMarker"),n(t))}},ht=function(){const e=this.data();e.micromarkExtensions.push({text:{[re.leftSquareBracket]:{tokenize:mt}}}),e.fromMarkdownExtensions.push({enter:{cite:function(e){this.enter({type:"cite",data:{hName:"cite",hChildren:[{type:"text",value:""}]}},e)},citeData:function(){this.buffer()}},exit:{cite:function(e){this.exit(e)},citeData:function(){const e=this.resume();this.stack[this.stack.length-1].data.hChildren[0].value=e}}})},pt=x.Image,gt={pre:({children:r,node:n})=>{if(!n)return null;const[i,o]=S(!1),s=z(()=>{const e=n.children[0];return"element"===(t=e).type&&"code"===t.tagName&&!!e.properties?.className?.includes("language-svg");var t},[n]);M(()=>{s&&o(s)},[s]);const a=z(()=>X(n),[n]);return t(wt,{children:[t(xt,{children:[!i&&e(w,{tooltip:!1,as:yt,content:a}),s&&i&&e(yt,{onClick:()=>{const e=new Blob([a],{type:"image/svg+xml"}),t=URL.createObjectURL(e),r=document.createElement("a");r.href=t,r.download="image.svg",r.click(),URL.revokeObjectURL(t)},children:"下载"}),s&&e(yt,{onClick:()=>o(!i),children:i?"源码":"预览"})]}),s&&i?e("div",{dangerouslySetInnerHTML:{__html:a}}):e("pre",{children:r})]})},a:({node:t,href:r,...n})=>{const i=r?.startsWith("http")?"_blank":"_self";return e("a",{...n,href:r,target:i})},img:({node:t,...r})=>e(pt,{...r})},ft=[[te,{singleDollarTextMath:!1}],ee,Z],bt=[G,[Y,{detect:!1,ignoreMissing:!0}]],vt=D(R(({content:t,components:r,cite:n},i)=>{t=t.replace(/\\\(\s(.+?)\s\\\)/g,"$$$$ $1 $$$$");const o=z(()=>{const e={...gt,...r};return n&&(e.cite=n),e},[r,n]),s=z(()=>n?[...ft,ht]:ft,[n]);return e(kt,{ref:i,children:e(V,{remarkPlugins:s,rehypePlugins:bt,components:o,children:t})})}),W),yt=n.div`
249
+ `;function it(e){return e.map(e=>({id:e.id,query:e.query,quote:e.quote||void 0,files:e.files||void 0,variables:e.variables,chunks:e.chunks.map(({content:e="",node:t,error:r,tools:n=[],reasoning:i})=>({content:e,reasoning:i,error:r,tools:n,node:t})),annotation:e.annotation,stats:{usage:e.usage,latency:e.latency},status:e.status??1}))}function ot(e){if((e=e.filter(e=>!!e.trim())).length>3){const t=[...e];let r=e.length-3;for(;r--;){let e=Math.floor(Math.random()*t.length);t.splice(e,1)}e=t}return e}var st,at,lt;function ct(){return ct=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)({}).hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},ct.apply(null,arguments)}const dt=e=>j.createElement("svg",ct({xmlns:"http://www.w3.org/2000/svg",width:20,height:10,fill:"#fff",viewBox:"0 0 120 30"},e),st||(st=j.createElement("circle",{cx:15,cy:15,r:15,fill:"#3c60ff"},j.createElement("animate",{attributeName:"r",begin:"0s",calcMode:"linear",dur:"0.8s",from:15,repeatCount:"indefinite",to:15,values:"15;9;15"}),j.createElement("animate",{attributeName:"fill-opacity",begin:"0s",calcMode:"linear",dur:"0.8s",from:1,repeatCount:"indefinite",to:1,values:"1;.5;1"}))),at||(at=j.createElement("circle",{cx:60,cy:15,r:9,fill:"#3c60ff",fillOpacity:.3},j.createElement("animate",{attributeName:"r",begin:"0s",calcMode:"linear",dur:"0.8s",from:9,repeatCount:"indefinite",to:9,values:"9;15;9"}),j.createElement("animate",{attributeName:"fill-opacity",begin:"0s",calcMode:"linear",dur:"0.8s",from:.5,repeatCount:"indefinite",to:.5,values:".5;1;.5"}))),lt||(lt=j.createElement("circle",{cx:105,cy:15,r:15,fill:"#3c60ff"},j.createElement("animate",{attributeName:"r",begin:"0s",calcMode:"linear",dur:"0.8s",from:15,repeatCount:"indefinite",to:15,values:"15;9;15"}),j.createElement("animate",{attributeName:"fill-opacity",begin:"0s",calcMode:"linear",dur:"0.8s",from:1,repeatCount:"indefinite",to:1,values:"1;.5;1"}))));function ut(e){if(!e)return"";if("string"==typeof e)return e;if("image"===e.type){return`![](${y(e.image)})`}return""}const mt=function(e,t,r){function n(t){return t!==ne.leftSquareBracket?(e.exit("citeMarker"),e.enter("citeData"),e.enter(ie.chunkString,{contentType:"string"}),i(t)):(e.consume(t),n)}function i(n){return n===ne.rightSquareBracket?(e.exit(ie.chunkString),e.exit("citeData"),e.enter("citeMarker"),function(n){if(n!==ne.rightSquareBracket)return r(n);return e.consume(n),e.exit("citeMarker"),e.exit("cite"),t(n)}(n)):oe(n)||n===ne.eof||n>57||n<48?r(n):(e.consume(n),i)}return function(t){return t!==ne.leftSquareBracket?r(t):(e.enter("cite"),e.enter("citeMarker"),n(t))}},ht=function(){const e=this.data();e.micromarkExtensions.push({text:{[ne.leftSquareBracket]:{tokenize:mt}}}),e.fromMarkdownExtensions.push({enter:{cite:function(e){this.enter({type:"cite",data:{hName:"cite",hChildren:[{type:"text",value:""}]}},e)},citeData:function(){this.buffer()}},exit:{cite:function(e){this.exit(e)},citeData:function(){const e=this.resume();this.stack[this.stack.length-1].data.hChildren[0].value=e}}})},pt=x.Image,gt={pre:({children:r,node:n})=>{if(!n)return null;const[i,o]=M(!1),s=z(()=>{const e=n.children[0];return"element"===(t=e).type&&"code"===t.tagName&&!!e.properties?.className?.includes("language-svg");var t},[n]);S(()=>{s&&o(s)},[s]);const a=z(()=>V(n),[n]);return t(wt,{children:[t(xt,{children:[!i&&e(w,{tooltip:!1,as:yt,content:a}),s&&i&&e(yt,{onClick:()=>{const e=new Blob([a],{type:"image/svg+xml"}),t=URL.createObjectURL(e),r=document.createElement("a");r.href=t,r.download="image.svg",r.click(),URL.revokeObjectURL(t)},children:"下载"}),s&&e(yt,{onClick:()=>o(!i),children:i?"源码":"预览"})]}),s&&i?e("div",{dangerouslySetInnerHTML:{__html:a}}):e("pre",{children:r})]})},a:({node:t,href:r,...n})=>{const i=r?.startsWith("http")?"_blank":"_self";return e("a",{...n,href:r,target:i})},img:({node:t,...r})=>e(pt,{...r})},ft=[[re,{singleDollarTextMath:!1}],te,ee],bt=[Z,[G,{detect:!1,ignoreMissing:!0}]],vt=D(q(({content:t,components:r,cite:n},i)=>{t=t.replace(/\\\(\s(.+?)\s\\\)/g,"$$$$ $1 $$$$");const o=z(()=>{const e={...gt,...r};return n&&(e.cite=n),e},[r,n]),s=z(()=>n?[...ft,ht]:ft,[n]);return e(kt,{ref:i,children:e(Y,{remarkPlugins:s,rehypePlugins:bt,components:o,children:t})})}),X),yt=n.div`
250
250
  cursor: pointer;
251
251
  padding: 2px 10px;
252
252
  background-color: #303030;
@@ -550,7 +550,7 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
550
550
  .hljs-strong {
551
551
  font-weight: 700;
552
552
  }
553
- `;var Et=R(function({children:t,tooltip:r,onClick:n,disabled:i,...o},a){i&&(n=void 0);const l=e(Nt,{ref:a,onClick:n,$disabled:i,...o,children:t});return r?e(s,{tooltip:r,placement:"top",children:l}):l});const Nt=n.div`
553
+ `;var Et=q(function({children:t,tooltip:r,onClick:n,disabled:i,...o},a){i&&(n=void 0);const l=e(Nt,{ref:a,onClick:n,$disabled:i,...o,children:t});return r?e(s,{tooltip:r,placement:"top",children:l}):l});const Nt=n.div`
554
554
  align-items: center;
555
555
  justify-content: center;
556
556
  border-radius: .375rem;
@@ -583,7 +583,7 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
583
583
  `}
584
584
 
585
585
  }
586
- `,jt=C(null);var Ct=jt.Provider;const $t=x.Image;function Mt({src:t,...r}){const{imageResolver:n}=he();return n&&t&&(t=n(t)),e(St,{children:e($t,{src:t,...r})},t)}const St=n.div`
586
+ `,jt=C(null);var Ct=jt.Provider;const $t=x.Image;function St({src:t,...r}){const{imageResolver:n}=pe();return n&&t&&(t=n(t)),e(Mt,{children:e($t,{src:t,...r})},t)}const Mt=n.div`
587
587
  margin-bottom: .5rem;
588
588
  margin-top: .5rem;
589
589
  border: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color);
@@ -608,7 +608,7 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
608
608
  max-height: 100%;
609
609
  max-width: 100%;
610
610
  }
611
- `,qt=C(null);function Ft(){const e=$(qt);if(!e)throw new Error("useContext must be used within a Provider");return e}function Rt({children:t,...r}){return e(qt.Provider,{value:r,children:t})}function zt(e){const[t,r]=S(e);return M(()=>{r(e)},[e]),[t,r]}function It({description:r,options:n}){const{resume:i,disabled:o,response:s}=Ft(),[a,l]=zt(s?.result),c=o||void 0!==a;return t(At,{children:[r&&e(Dt,{children:r}),n.map((t,r)=>e(Lt,{$selected:a===t,$disabled:c,onClick:()=>(e=>{c||(l(e),i(e))})(t),children:t},r))]})}const At=n.div`
611
+ `,Ft=C(null);function Rt(){const e=$(Ft);if(!e)throw new Error("useContext must be used within a Provider");return e}function qt({children:t,...r}){return e(Ft.Provider,{value:r,children:t})}function zt(e){const[t,r]=M(e);return S(()=>{r(e)},[e]),[t,r]}function It({description:r,options:n}){const{resume:i,disabled:o,response:s}=Rt(),[a,l]=zt(s?.result),c=o||void 0!==a;return t(At,{children:[r&&e(Dt,{children:r}),n.map((t,r)=>e(Lt,{$selected:a===t,$disabled:c,onClick:()=>(e=>{c||(l(e),i(e))})(t),children:t},r))]})}const At=n.div`
612
612
  display: flex;
613
613
  flex-direction: column;
614
614
  gap: 0.5rem;
@@ -643,11 +643,12 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
643
643
  &:active {
644
644
  transform: ${e=>e.$disabled?"none":"scale(0.98)"};
645
645
  }
646
- `;function Pt({description:r,fields:n}){const{resume:i,disabled:o,response:s}=Ft(),[a,l]=zt(void 0!==s),c=o||a,{schema:u,uiSchema:m}=z(()=>{const e={},t=[],r={};for(const i of n)e[i.name]={type:"number"===i.type?"number":"string",title:i.label},i.placeholder&&(r[i.name]={"ui:placeholder":i.placeholder}),"textarea"===i.type?r[i.name]={...r[i.name],"ui:widget":"textarea"}:"select"!==i.type&&"radio"!==i.type||!i.options?"checkbox"===i.type&&i.options?(e[i.name].type="array",e[i.name].uniqueItems=!0,e[i.name].items={type:"string",enum:i.options},r[i.name]={...r[i.name],"ui:widget":"checkboxes","ui:enumNames":i.options,"ui:inline":!0}):"email"===i.type?e[i.name].format="email":"date"===i.type?e[i.name].format="date":"tel"===i.type&&(r[i.name]={...r[i.name],"ui:options":{inputType:"tel"}}):(r[i.name]={...r[i.name],"ui:widget":i.type},e[i.name].enum=i.options,e[i.name].enumNames=i.options),i.required&&t.push(i.name);return{schema:{type:"object",properties:e,required:t},uiSchema:r}},[n]);return t(Ot,{className:"rounded bg-white shadow-sm",children:[r&&e(Bt,{children:r}),e(d,{schema:u,uiSchema:m,formData:s,onSubmit:({formData:e})=>{c||(l(!0),i(e))},disabled:c,validate:!0,showErrorList:!1,submitText:a?"已提交":"提交",omitExtraData:!0,children:({submit:t})=>e(Tt,{children:t})})]})}const Tt=n.div`
646
+ `;function Pt({description:r,fields:n}){const{resume:i,disabled:o,response:s}=Rt(),[a,l]=zt(void 0!==s),c=o||a,{schema:u,uiSchema:m}=z(()=>{const e={},t=[],r={};for(const i of n)e[i.name]={type:"number"===i.type?"number":"string",title:i.label,default:i.default},i.placeholder&&(r[i.name]={"ui:placeholder":i.placeholder}),"textarea"===i.type?r[i.name]={...r[i.name],"ui:widget":"textarea"}:"select"!==i.type&&"radio"!==i.type||!i.options?"checkbox"===i.type&&i.options?(e[i.name].type="array",e[i.name].uniqueItems=!0,e[i.name].items={type:"string",enum:i.options},r[i.name]={...r[i.name],"ui:widget":"checkboxes","ui:enumNames":i.options,"ui:inline":!0}):"email"===i.type?e[i.name].format="email":"date"===i.type?e[i.name].format="date":"tel"===i.type&&(r[i.name]={...r[i.name],"ui:options":{inputType:"tel"}}):(r[i.name]={...r[i.name],"ui:widget":i.type},e[i.name].enum=i.options,e[i.name].enumNames=i.options),i.required&&t.push(i.name);return{schema:{type:"object",properties:e,required:t},uiSchema:r}},[n]);return t(Ot,{className:"rounded bg-white shadow-sm",children:[r&&e(Bt,{children:r}),e(d,{schema:u,uiSchema:m,formData:s,onSubmit:({formData:e})=>{c||(l(!0),i(e))},disabled:c,validate:!0,showErrorList:!1,submitText:a?"已提交":"提交",omitExtraData:!0,children:({submit:t})=>e(Tt,{children:t})})]})}const Tt=n.div`
647
647
  display: flex;
648
648
  justify-content: flex-end;
649
649
  border-top: 1px solid var(--bs-border-color);
650
650
  padding-top: .5rem;
651
+
651
652
  button {
652
653
  padding: .25rem;
653
654
  }
@@ -672,7 +673,7 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
672
673
  `,Bt=n.div`
673
674
  color: var(--bs-secondary);
674
675
  line-height: 1.5;
675
- `;function Ut({content:r}){const{resume:n,disabled:i,response:o}=Ft(),[s,a]=zt(void 0!==o),l=i||s;return t(_t,{className:"rounded bg-white shadow-sm",children:[r&&e(Ht,{children:e(vt,{content:r})}),e(Qt,{children:e(k,{disabled:l,onClick:()=>{l||(a(!0),n("已确认"))},children:s?"已确认":"确认"})})]})}const _t=n.div`
676
+ `;function Ut({content:r}){const{resume:n,disabled:i,response:o}=Rt(),[s,a]=zt(void 0!==o),l=i||s;return t(_t,{className:"rounded bg-white shadow-sm",children:[r&&e(Ht,{children:e(vt,{content:r})}),e(Qt,{children:e(k,{disabled:l,onClick:()=>{l||(a(!0),n("已确认"))},children:s?"已确认":"确认"})})]})}const _t=n.div`
676
677
  display: flex;
677
678
  flex-direction: column;
678
679
  gap: .5rem;
@@ -698,7 +699,7 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
698
699
  button {
699
700
  padding: .25rem 1.5rem;
700
701
  }
701
- `;function Jt({suspend:t}){const{readonly:r}=he(),{chunkIndex:n,chunk:i,toolIndex:o,tool:s,isLastMessage:a}=function(){const e=$(jt);if(!e)throw new Error("useContext must be used within a Provider");return e}(),{resume:l}=Ee(),c=F(e=>{l({chunk:n,tool:o,payload:e})},[]);let d=null;switch(t.type){case"select":d=e(It,{...t.select});break;case"form":d=e(Pt,{...t.form});break;case"confirm":d=e(Ut,{...t.confirm})}const u=s?.response||i.node?.output;return e(Rt,{resume:c,disabled:r||!!i.error||!a,response:"(Empty)"===u?void 0:u,children:d})}function Kt({value:t,cite:n}){const i=t=>"string"==typeof t?e(vt,{content:t,cite:n}):"image"===t.type?e(Mt,{src:t.image}):"suspend"===t.type?e(Jt,{suspend:t.suspend}):null;return Array.isArray(t)?e(r,{children:t.map((t,r)=>e(A,{children:i(t)},r))}):i(t)}const Wt=({reasoning:r,loading:n})=>{const[i,o]=S(!1);return M(()=>{n||o(!1)},[n]),e(A,{children:e("div",{className:"mb-2",children:t("div",i?{className:"shadow-sm rounded bg-white fs-7",children:[t("div",{onClick:()=>o(!1),role:"button",className:"d-flex align-items-center p-1 px-2 gap-2",children:[n?e(T,{animation:"border",variant:"primary",size:"sm"}):e("i",{className:"bi bi-check-circle-fill text-success"}),e("span",{className:"text-muted",children:n?"思考中":"已思考"}),e("i",{className:"bi bi-caret-up-fill text-muted"})]}),e("div",{className:"border-top p-2 d-flex flex-column gap-2",children:e("div",{className:"border rounded bg-light p-2",children:e(vt,{content:r})})})]}:{onClick:()=>o(!0),role:"button",className:"d-inline-flex align-items-center shadow-sm rounded bg-white p-1 px-2 fs-7 gap-2",children:[n?e(T,{animation:"border",variant:"primary",size:"sm"}):e("i",{className:"bi bi-check-circle-fill text-success"}),e("span",{className:"text-muted",children:n?"思考中":"已思考"}),e("i",{className:"bi bi-caret-down-fill text-muted"})]})})})},Xt=D(t=>{const{renderReasoning:r}=he();return r?r({Component:Wt,props:t}):e(Wt,{...t})});class Vt{#t;#o=[];#s=0;constructor(){this.#t=new J}speak(){for(this.#t.emit("playing",!0);this.#s<this.#o.length;){const e=this.#o[this.#s],t=new SpeechSynthesisUtterance(e),r=++this.#s;t.onend=()=>{r>=this.#o.length&&this.clear()},t.onerror=()=>{this.clear()},window.speechSynthesis.speak(t)}}clear(){this.#t.emit("playing",!1)}start(e,t=!1){this.#o=Array.isArray(e)?e:[e],t||(window.speechSynthesis.cancel(),this.#s=0),this.speak()}stop(){window.speechSynthesis.cancel(),this.clear()}onPlaying(e){this.#t.on("playing",e)}onSpeaking(e){this.#t.on("speaking",e)}}const Yt=new Map;class Gt{#r;#t;#o=[];#a=new Map;#l=!1;#s=0;#c=!1;constructor(e){this.#r=e,this.#t=new J}createLoader(e){const t=new Promise(async t=>{try{const{type:r,data:n}=await this.#r(e),i=new Audio(`data:${r};base64,${n}`);this.#a.set(e,i),t(i)}catch{this.#a.delete(e),t(void 0)}});return this.#a.set(e,t),t}async loadAudioData(){this.#c=!0,this.#t.emit("speaking",!0);let e=0;for(;e<this.#o.length;){const t=this.#o[e];!this.#a.has(t)&&this.#c&&await this.createLoader(t),e++}this.#t.emit("speaking",!1),this.#c=!1}waitForAudioLoaded(e){const t=this.#a.get(e);return t instanceof Promise?t:Promise.resolve(t)}async playAudio(e=0){this.#l=!0;const t=await this.waitForAudioLoaded(this.#o[e]);this.#t.emit("playing",!0),t?(Yt.set(this,t),t.onpause=async()=>{t.ended?(this.#s++,this.#s<this.#o.length?await this.playAudio(this.#s):this.clear()):this.clear()},await t.play()):this.clear()}clear(){this.#l=!1,this.#c=!1,this.#t.emit("playing",!1),this.#t.emit("speaking",!1),Yt.delete(this)}start(e,t=!1){Yt.forEach((e,t)=>{t!==this&&(e.pause(),e.currentTime=0)}),this.#o=Array.isArray(e)?e:[e],t||(this.#s=0),this.#c||this.loadAudioData(),this.#l||this.playAudio()}update(e){this.#o=Array.isArray(e)?e:[e]}stop(){const e=Yt.get(this);e&&(e.pause(),e.currentTime=0)}onPlaying(e){this.#t.on("playing",e)}onSpeaking(e){this.#t.on("speaking",e)}}function Zt({text:e,loading:t,loader:r}){const n=q(),[i,o]=S(!1),[s,a]=S(!1),l=q(t),c=async(i=!1)=>{n.current||(n.current=r?new Gt(r):new Vt,n.current.onSpeaking(o),n.current.onPlaying(a));let s="";"string"==typeof e?s=e:e.current&&(s=function(e){const t=e.querySelectorAll("p, h1, h2, h3, h4, h5, h6, li:not(:has(p,h1, h2, h3, h4, h5, h6))");return Array.from(t).flatMap(e=>e.textContent?[e.textContent]:[])}(e.current),t&&s.pop()),s&&0!==s.length&&n.current.start(s,i)};return M(()=>{if(l.current&&"string"!=typeof e&&e.current){if(t){const t={childList:!0,subtree:!0},r=new MutationObserver(function(){c(!0)});return r.observe(e.current,t),c(),()=>{r.disconnect()}}c(!0)}},[t]),M(()=>()=>{n.current&&(n.current.stop(),n.current=void 0)},[]),{playing:s,speaking:i,start:c,stop:()=>{n.current&&n.current.stop()}}}function er({model:r="builtin",voice:n,loading:i,autoplay:o,contentRef:s,avatarRef:a}){const{request:l}=he(),c=z(()=>{if("builtin"!==r)return async e=>(await l({url:"/speech",method:"post",data:{model:r,voice:n,input:e}})).audio},[r,n]),{playing:d,speaking:u,start:m,stop:h}=Zt({loader:c,text:s,loading:o&&i});let p=null;return a.current&&(u&&(p=oe(e(tr,{children:e(T,{size:"sm",variant:"light"})}),a.current)),d&&(p=oe(e(tr,{children:e(rr,{className:"bi bi-volume-down-fill text-light"})}),a.current))),t(Et,{disabled:i&&!d,onClick:()=>{d?h():m()},children:[d?e(rr,{className:"bi bi-volume-down-fill"}):u?e(T,{size:"sm",variant:"primary"}):e(rr,{className:"bi bi-volume-down"}),p]})}const tr=n.div`
702
+ `;function Jt(e){return e instanceof Error&&e.message||String(e)}class Kt extends L{state={hasError:!1};static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(e,t){this.props.onRenderError(e)}render(){return this.state.hasError?null:this.props.children}}function Wt({suspend:t}){const{readonly:r,input:n}=pe(),{chunkIndex:i,chunk:o,toolIndex:s,tool:a,isLastMessage:l}=function(){const e=$(jt);if(!e)throw new Error("useContext must be used within a Provider");return e}(),c=R(e=>{n?.resume({chunk:i,tool:s,payload:e})},[i,n,s]),d=R(e=>{c({error:Jt(e)})},[c]);let u=null;switch(t.type){case"select":u=e(It,{...t.select});break;case"form":u=e(Pt,{...t.form});break;case"confirm":u=e(Ut,{...t.confirm})}const m=a?.response||o.node?.output;return e(qt,{resume:c,disabled:r||!!o.error||!l,response:"(Empty)"===m?void 0:m,children:e(Kt,{onRenderError:d,children:u})})}function Xt({value:t,cite:n}){const i=t=>"string"==typeof t?e(vt,{content:t,cite:n}):"image"===t.type?e(St,{src:t.image}):"suspend"===t.type?e(Wt,{suspend:t.suspend}):null;return Array.isArray(t)?e(r,{children:t.map((t,r)=>e(A,{children:i(t)},r))}):i(t)}const Vt=({reasoning:r,loading:n})=>{const[i,o]=M(!1);return S(()=>{n||o(!1)},[n]),e(A,{children:e("div",{className:"mb-2",children:t("div",i?{className:"shadow-sm rounded bg-white fs-7",children:[t("div",{onClick:()=>o(!1),role:"button",className:"d-flex align-items-center p-1 px-2 gap-2",children:[n?e(O,{animation:"border",variant:"primary",size:"sm"}):e("i",{className:"bi bi-check-circle-fill text-success"}),e("span",{className:"text-muted",children:n?"思考中":"已思考"}),e("i",{className:"bi bi-caret-up-fill text-muted"})]}),e("div",{className:"border-top p-2 d-flex flex-column gap-2",children:e("div",{className:"border rounded bg-light p-2",children:e(vt,{content:r})})})]}:{onClick:()=>o(!0),role:"button",className:"d-inline-flex align-items-center shadow-sm rounded bg-white p-1 px-2 fs-7 gap-2",children:[n?e(O,{animation:"border",variant:"primary",size:"sm"}):e("i",{className:"bi bi-check-circle-fill text-success"}),e("span",{className:"text-muted",children:n?"思考中":"已思考"}),e("i",{className:"bi bi-caret-down-fill text-muted"})]})})})},Yt=D(t=>{const{renderReasoning:r}=pe();return r?r({Component:Vt,props:t}):e(Vt,{...t})});class Gt{#t;#o=[];#s=0;constructor(){this.#t=new K}speak(){for(this.#t.emit("playing",!0);this.#s<this.#o.length;){const e=this.#o[this.#s],t=new SpeechSynthesisUtterance(e),r=++this.#s;t.onend=()=>{r>=this.#o.length&&this.clear()},t.onerror=()=>{this.clear()},window.speechSynthesis.speak(t)}}clear(){this.#t.emit("playing",!1)}start(e,t=!1){this.#o=Array.isArray(e)?e:[e],t||(window.speechSynthesis.cancel(),this.#s=0),this.speak()}stop(){window.speechSynthesis.cancel(),this.clear()}onPlaying(e){this.#t.on("playing",e)}onSpeaking(e){this.#t.on("speaking",e)}}const Zt=new Map;class er{#r;#t;#o=[];#a=new Map;#l=!1;#s=0;#c=!1;constructor(e){this.#r=e,this.#t=new K}createLoader(e){const t=new Promise(async t=>{try{const{type:r,data:n}=await this.#r(e),i=new Audio(`data:${r};base64,${n}`);this.#a.set(e,i),t(i)}catch{this.#a.delete(e),t(void 0)}});return this.#a.set(e,t),t}async loadAudioData(){this.#c=!0,this.#t.emit("speaking",!0);let e=0;for(;e<this.#o.length;){const t=this.#o[e];!this.#a.has(t)&&this.#c&&await this.createLoader(t),e++}this.#t.emit("speaking",!1),this.#c=!1}waitForAudioLoaded(e){const t=this.#a.get(e);return t instanceof Promise?t:Promise.resolve(t)}async playAudio(e=0){this.#l=!0;const t=await this.waitForAudioLoaded(this.#o[e]);this.#t.emit("playing",!0),t?(Zt.set(this,t),t.onpause=async()=>{t.ended?(this.#s++,this.#s<this.#o.length?await this.playAudio(this.#s):this.clear()):this.clear()},await t.play()):this.clear()}clear(){this.#l=!1,this.#c=!1,this.#t.emit("playing",!1),this.#t.emit("speaking",!1),Zt.delete(this)}start(e,t=!1){Zt.forEach((e,t)=>{t!==this&&(e.pause(),e.currentTime=0)}),this.#o=Array.isArray(e)?e:[e],t||(this.#s=0),this.#c||this.loadAudioData(),this.#l||this.playAudio()}update(e){this.#o=Array.isArray(e)?e:[e]}stop(){const e=Zt.get(this);e&&(e.pause(),e.currentTime=0)}onPlaying(e){this.#t.on("playing",e)}onSpeaking(e){this.#t.on("speaking",e)}}function tr({text:e,loading:t,loader:r}){const n=F(),[i,o]=M(!1),[s,a]=M(!1),l=F(t),c=async(i=!1)=>{n.current||(n.current=r?new er(r):new Gt,n.current.onSpeaking(o),n.current.onPlaying(a));let s="";"string"==typeof e?s=e:e.current&&(s=function(e){const t=e.querySelectorAll("p, h1, h2, h3, h4, h5, h6, li:not(:has(p,h1, h2, h3, h4, h5, h6))");return Array.from(t).flatMap(e=>e.textContent?[e.textContent]:[])}(e.current),t&&s.pop()),s&&0!==s.length&&n.current.start(s,i)};return S(()=>{if(l.current&&"string"!=typeof e&&e.current){if(t){const t={childList:!0,subtree:!0},r=new MutationObserver(function(){c(!0)});return r.observe(e.current,t),c(),()=>{r.disconnect()}}c(!0)}},[t]),S(()=>()=>{n.current&&(n.current.stop(),n.current=void 0)},[]),{playing:s,speaking:i,start:c,stop:()=>{n.current&&n.current.stop()}}}function rr({model:r="builtin",voice:n,loading:i,autoplay:o,contentRef:s,avatarRef:a}){const{request:l}=pe(),c=z(()=>{if("builtin"!==r)return async e=>(await l({url:"/speech",method:"post",data:{model:r,voice:n,input:e}})).audio},[r,n]),{playing:d,speaking:u,start:m,stop:h}=tr({loader:c,text:s,loading:o&&i});let p=null;return a.current&&(u&&(p=se(e(nr,{children:e(O,{size:"sm",variant:"light"})}),a.current)),d&&(p=se(e(nr,{children:e(ir,{className:"bi bi-volume-down-fill text-light"})}),a.current))),t(Et,{disabled:i&&!d,onClick:()=>{d?h():m()},children:[d?e(ir,{className:"bi bi-volume-down-fill"}):u?e(O,{size:"sm",variant:"primary"}):e(ir,{className:"bi bi-volume-down"}),p]})}const nr=n.div`
702
703
  position: absolute;
703
704
  top: 0;
704
705
  left: 0;
@@ -708,27 +709,27 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
708
709
  align-items: center;
709
710
  justify-content: center;
710
711
  background-color: rgba(0, 0, 0, .3);
711
- `,rr=n.i`
712
+ `,ir=n.i`
712
713
 
713
714
  &::before {
714
715
  transform: scale(1.4)
715
716
  }
716
- `;function nr({tool:r,loading:n}){const{logLevel:i="none",renderToolContent:o}=he(),s="response"in r,a=!s&&!n,{response:l,title:c,content:d,showStatus:u,defaultExpanded:m}=z(()=>{const n=(e=>{try{return JSON.parse(e.arguments)}catch(e){return null}})(r),i=e("span",{className:"text-truncate",children:r.title}),a=t("div",{className:"border-top p-2 d-flex flex-column gap-2",children:[t("div",{className:"border rounded bg-light",children:[e("div",{className:"d-flex align-items-center p-1 px-2 fs-7 gap-2",children:e("span",{className:"text-muted",children:"参数"})}),e(or,{className:"border-top p-2",children:r.arguments})]}),s&&t("div",{className:"border rounded bg-light",children:[e("div",{className:"d-flex align-items-center p-1 px-2 fs-7 gap-2",children:e("span",{className:"text-muted",children:"响应"})}),e(or,{className:"border-top p-2",children:r.response||"None"})]})]}),l=r.content&&e(Kt,{value:r.content});if(o){const e=o({tool:r,args:n});if(e)return{title:null===e.title?null:e.title??i,response:null===e.response?null:e.response??a,content:null===e.content?null:e.content??l,showStatus:e.showStatus??!0,defaultExpanded:e.defaultExpanded??!1}}return{title:i,response:a,content:l,showStatus:!0,defaultExpanded:!1}},[r,o]),[h,p]=S(m),g="all"==i&&null!==l;return t(A,{children:[c&&e("div",{className:"mb-2",children:t(ir,{className:"shadow-sm rounded bg-white fs-7",$open:h,children:[t("div",{onClick:()=>p(g&&!h),role:"button",className:"d-flex align-items-center flex-nowrap p-1 px-2 gap-2",children:[a?e("i",{className:"bi bi-dash-circle-fill text-muted"}):s?r.error?e("i",{className:"bi bi-x-circle-fill text-danger"}):e("i",{className:"bi bi-check-circle-fill text-success"}):e(T,{animation:"border",variant:"primary",size:"sm"}),u&&e("span",{className:"text-muted",children:a?"已取消":s?"已使用":"正在使用"}),c,g&&e("i",h?{className:"bi bi-caret-up-fill text-muted"}:{className:"bi bi-caret-down-fill text-muted"})]}),h&&l]})}),d]})}const ir=n.div`
717
+ `;function or({tool:r,loading:n}){const{logLevel:i="none",renderToolContent:o}=pe(),s="response"in r,a=!s&&!n,{response:l,title:c,content:d,showStatus:u,defaultExpanded:m}=z(()=>{const n=(e=>{try{return JSON.parse(e.arguments)}catch(e){return null}})(r),i=e("span",{className:"text-truncate",children:r.title}),a=t("div",{className:"border-top p-2 d-flex flex-column gap-2",children:[t("div",{className:"border rounded bg-light",children:[e("div",{className:"d-flex align-items-center p-1 px-2 fs-7 gap-2",children:e("span",{className:"text-muted",children:"参数"})}),e(ar,{className:"border-top p-2",children:r.arguments})]}),s&&t("div",{className:"border rounded bg-light",children:[e("div",{className:"d-flex align-items-center p-1 px-2 fs-7 gap-2",children:e("span",{className:"text-muted",children:"响应"})}),e(ar,{className:"border-top p-2",children:r.response||"None"})]})]}),l=r.content&&e(Xt,{value:r.content});if(o){const e=o({tool:r,args:n});if(e)return{title:null===e.title?null:e.title??i,response:null===e.response?null:e.response??a,content:null===e.content?null:e.content??l,showStatus:e.showStatus??!0,defaultExpanded:e.defaultExpanded??!1}}return{title:i,response:a,content:l,showStatus:!0,defaultExpanded:!1}},[r,o]),[h,p]=M(m),g="all"==i&&null!==l;return t(A,{children:[c&&e("div",{className:"mb-2",children:t(sr,{className:"shadow-sm rounded bg-white fs-7",$open:h,children:[t("div",{onClick:()=>p(g&&!h),role:"button",className:"d-flex align-items-center flex-nowrap p-1 px-2 gap-2",children:[a?e("i",{className:"bi bi-dash-circle-fill text-muted"}):s?r.error?e("i",{className:"bi bi-x-circle-fill text-danger"}):e("i",{className:"bi bi-check-circle-fill text-success"}):e(O,{animation:"border",variant:"primary",size:"sm"}),u&&e("span",{className:"text-muted",children:a?"已取消":s?"已使用":"正在使用"}),c,g&&e("i",h?{className:"bi bi-caret-up-fill text-muted"}:{className:"bi bi-caret-down-fill text-muted"})]}),h&&l]})}),d]})}const sr=n.div`
717
718
  width: ${e=>e.$open?"auto":"fit-content"};
718
719
  max-width: 100%;
719
720
  overflow:hidden;
720
- `,or=n.div`
721
+ `,ar=n.div`
721
722
  white-space: pre-wrap;
722
723
  overflow-y: auto;
723
724
  overflow-x: hidden;
724
725
  max-height: 150px;
725
- `;function sr({node:r}){const[n,i]=S(!1),{nodeIconResolver:o}=he(),s=!("latency"in r),a=s?e(T,{animation:"border",variant:"primary",size:"sm"}):r.error?e("i",{className:"bi bi-x-circle-fill text-danger"}):e("i",{className:"bi bi-check-circle-fill text-success"});return t("div",{className:"shadow-sm rounded bg-white fs-7",children:[t(lr,{onClick:()=>i(e=>!e),role:"button",className:"d-flex align-items-center p-1 px-2 gap-1",children:[e("i",{className:"bi bi-chevron-down text-muted"}),o?.(r.type),e(cr,{className:"me-2 text-truncate",children:r.title}),e("span",{className:"me-auto"}),!s&&e("span",{className:"text-nowrap text-muted",children:ar(r.latency)}),e("span",{children:a})]}),n&&t("div",{className:"border-top p-2 d-flex flex-column gap-2",children:[t("div",{className:"border rounded bg-light",children:[e("div",{className:"d-flex align-items-center p-1 px-2 fs-7 gap-2",children:e("span",{className:"text-muted",children:"输入"})}),e("div",{className:"border-top p-2 overflow-hidden text-pre-wrap",children:r.input?JSON.stringify(r.input,null,4):"None"})]}),t("div",{className:"border rounded bg-light",children:[e("div",{className:"d-flex align-items-center p-1 px-2 fs-7 gap-2",children:e("span",{className:"text-muted",children:"输出"})}),e("div",{className:"border-top p-2 overflow-hidden text-pre-wrap",children:r.output?JSON.stringify(r.output,null,4):"None"})]})]})]})}const ar=e=>e<1?`${(1e3*e).toFixed(3)} ms`:e>60?`${parseInt(Math.round(e/60).toString())} m ${(e%60).toFixed(3)} s`:`${e.toFixed(3)} s`,lr=n.div`
726
+ `;function lr({node:r}){const[n,i]=M(!1),{nodeIconResolver:o}=pe(),s=!("latency"in r),a=s?e(O,{animation:"border",variant:"primary",size:"sm"}):r.error?e("i",{className:"bi bi-x-circle-fill text-danger"}):e("i",{className:"bi bi-check-circle-fill text-success"});return t("div",{className:"shadow-sm rounded bg-white fs-7",children:[t(dr,{onClick:()=>i(e=>!e),role:"button",className:"d-flex align-items-center p-1 px-2 gap-1",children:[e("i",{className:"bi bi-chevron-down text-muted"}),o?.(r.type),e(ur,{className:"me-2 text-truncate",children:r.title}),e("span",{className:"me-auto"}),!s&&e("span",{className:"text-nowrap text-muted",children:cr(r.latency)}),e("span",{children:a})]}),n&&t("div",{className:"border-top p-2 d-flex flex-column gap-2",children:[t("div",{className:"border rounded bg-light",children:[e("div",{className:"d-flex align-items-center p-1 px-2 fs-7 gap-2",children:e("span",{className:"text-muted",children:"输入"})}),e("div",{className:"border-top p-2 overflow-hidden text-pre-wrap",children:r.input?JSON.stringify(r.input,null,4):"None"})]}),t("div",{className:"border rounded bg-light",children:[e("div",{className:"d-flex align-items-center p-1 px-2 fs-7 gap-2",children:e("span",{className:"text-muted",children:"输出"})}),e("div",{className:"border-top p-2 overflow-hidden text-pre-wrap",children:r.output?JSON.stringify(r.output,null,4):"None"})]})]})]})}const cr=e=>e<1?`${(1e3*e).toFixed(3)} ms`:e>60?`${parseInt(Math.round(e/60).toString())} m ${(e%60).toFixed(3)} s`:`${e.toFixed(3)} s`,dr=n.div`
726
727
  svg {
727
728
  flex-shrink: 0;
728
729
  }
729
- `,cr=n.span`
730
+ `,ur=n.span`
730
731
  display: inline-block;
731
- `;function dr({nodes:r,loading:n}){const[i,o]=S(!1),s=r.some(e=>"error"in e),a=n?e(T,{animation:"border",variant:"primary",size:"sm"}):e("i",s?{className:"bi bi-x-circle-fill text-danger"}:{className:"bi bi-check-circle-fill text-success"});return e("div",{className:"mb-2",children:t("div",i?{className:"shadow-sm rounded bg-white fs-7",children:[t("div",{onClick:()=>o(!1),role:"button",className:"d-flex align-items-center p-1 px-2 gap-2",children:[a,e("span",{children:"工作流"}),e("i",{className:"bi bi-caret-up-fill text-muted"})]}),e("div",{className:"border-top p-2 d-flex flex-column gap-1 bg-light bg-opacity-50",children:r.map((t,r)=>e(sr,{node:t},r))})]}:{onClick:()=>o(!0),role:"button",className:"d-inline-flex align-items-center shadow-sm rounded bg-white p-1 px-2 fs-7 gap-2",children:[a,e("span",{children:"工作流"}),e("i",{className:"bi bi-caret-down-fill text-muted"})]})})}const ur=D(({message:n,actions:i,setMessage:o,cite:s,speech:a,isLast:l})=>{const{query:c,quote:d,files:u=[],chunks:m,annotation:h,loading:p}=n,{user:g,bot:f,logLevel:b="none",messages:v}=he(),y=z(()=>m?m.reduce(function(e,t){const r=Array.isArray(t.content)?t.content.reduce((e,t)=>{const r=ut(t);return r?e+r+"\n":e},""):ut(t.content);return e+r+"\n"+(t.tools||[]).reduce((e,t)=>{if(t.content){const r=ut(t.content);if(r)return e+r+"\n"}return e},"")},""):"",[m]),x=q(null),k=q(null),N=q(null),j=z(()=>m?.flatMap(e=>e.node?[e.node]:[])||[],[m]),C=c||u.length>0;return t(r,{children:[C&&t(kr,{$reverse:!0,children:[g&&e(yr,{children:e("img",{src:g.avatar})}),e(xr,{}),t(wr,{ref:x,children:[c&&e(vt,{content:c}),d&&e(H,{trigger:"click",container:x,rootClose:!0,placement:"bottom",overlay:e(mr,{body:!0,children:d}),children:e(pr,{children:e(hr,{children:d})})}),u.length>0&&u.map(({name:t,size:r,path:n},i)=>E(n)?e(Mt,{src:`/uploads/${n}`},i):e(fr,{children:e(be,{name:t,url:`/uploads/${n}`,size:r})},i))]})]}),m&&t(kr,{children:[f&&e(yr,{ref:k,children:e("img",{src:f.avatar})}),e(xr,{}),t(wr,{children:[C&&!1!==i&&t(br,{children:[e(w,{placement:"top",content:y,as:Et,tooltip:!0}),a&&e(er,{loading:n.loading,avatarRef:k,contentRef:N,...a}),i?.({Component:Et,message:n,content:y,setMessage:o,messages:v})]}),e(vr,{children:["stats","all"].includes(b)&&n.stats&&t(r,{children:[t("span",{children:["耗时 ",n.stats.latency/1e3," 秒"]}),t("span",{children:["花费 Token ",n.stats.usage]})]})}),t(gr,{ref:N,$deleted:!!h,children:["all"===b&&j.length>0&&e(dr,{loading:p,nodes:j}),m.map((r,n)=>t(A,{children:[r.reasoning&&["stats","all"].includes(b)&&e(Xt,{reasoning:r.reasoning,loading:!r.content&&0===(r.tools||[]).length}),r.content&&e(Ct,{value:{chunkIndex:n,chunk:r,isLastMessage:l},children:e(Kt,{cite:s,value:r.content})}),(r.tools||[]).map((t,i)=>e(Ct,{value:{chunkIndex:n,chunk:r,toolIndex:i,tool:t,isLastMessage:l},children:e(nr,{tool:t,loading:p})},i)),r.error&&e(vt,{content:`[${r.error}]`})]},n))]}),h&&t("div",{children:[t("div",{className:"d-flex align-items-center",children:[e("span",{className:"fs-7 text-secondary me-2",children:"标注的答案"}),e("hr",{className:"flex-fill"})]}),e(vt,{content:h.answer})]}),n.loading&&e(dt,{})]})]})]})}),mr=n(Q)`
732
+ `;function mr({nodes:r,loading:n}){const[i,o]=M(!1),s=r.some(e=>"error"in e),a=n?e(O,{animation:"border",variant:"primary",size:"sm"}):e("i",s?{className:"bi bi-x-circle-fill text-danger"}:{className:"bi bi-check-circle-fill text-success"});return e("div",{className:"mb-2",children:t("div",i?{className:"shadow-sm rounded bg-white fs-7",children:[t("div",{onClick:()=>o(!1),role:"button",className:"d-flex align-items-center p-1 px-2 gap-2",children:[a,e("span",{children:"工作流"}),e("i",{className:"bi bi-caret-up-fill text-muted"})]}),e("div",{className:"border-top p-2 d-flex flex-column gap-1 bg-light bg-opacity-50",children:r.map((t,r)=>e(lr,{node:t},r))})]}:{onClick:()=>o(!0),role:"button",className:"d-inline-flex align-items-center shadow-sm rounded bg-white p-1 px-2 fs-7 gap-2",children:[a,e("span",{children:"工作流"}),e("i",{className:"bi bi-caret-down-fill text-muted"})]})})}const hr=D(({message:n,actions:i,setMessage:o,cite:s,speech:a,isLast:l})=>{const{query:c,quote:d,files:u=[],chunks:m,annotation:h,loading:p}=n,{user:g,bot:f,logLevel:b="none",messages:v}=pe(),y=z(()=>m?m.reduce(function(e,t){const r=Array.isArray(t.content)?t.content.reduce((e,t)=>{const r=ut(t);return r?e+r+"\n":e},""):ut(t.content);return e+r+"\n"+(t.tools||[]).reduce((e,t)=>{if(t.content){const r=ut(t.content);if(r)return e+r+"\n"}return e},"")},""):"",[m]),x=F(null),k=F(null),N=F(null),j=z(()=>m?.flatMap(e=>e.node?[e.node]:[])||[],[m]),C=c||u.length>0;return t(r,{children:[C&&t(Nr,{$reverse:!0,children:[g&&e(wr,{children:e("img",{src:g.avatar})}),e(kr,{}),t(Er,{ref:x,children:[c&&e(vt,{content:c}),d&&e(Q,{trigger:"click",container:x,rootClose:!0,placement:"bottom",overlay:e(pr,{body:!0,children:d}),children:e(fr,{children:e(gr,{children:d})})}),u.length>0&&u.map(({name:t,size:r,path:n},i)=>E(n)?e(St,{src:`/uploads/${n}`},i):e(vr,{children:e(ve,{name:t,url:`/uploads/${n}`,size:r})},i))]})]}),m&&t(Nr,{children:[f&&e(wr,{ref:k,children:e("img",{src:f.avatar})}),e(kr,{}),t(Er,{children:[C&&!1!==i&&t(yr,{children:[e(w,{placement:"top",content:y,as:Et,tooltip:!0}),a&&e(rr,{loading:n.loading,avatarRef:k,contentRef:N,...a}),i?.({Component:Et,message:n,content:y,setMessage:o,messages:v})]}),e(xr,{children:["stats","all"].includes(b)&&n.stats&&t(r,{children:[t("span",{children:["耗时 ",n.stats.latency/1e3," 秒"]}),t("span",{children:["花费 Token ",n.stats.usage]})]})}),t(br,{ref:N,$deleted:!!h,children:["all"===b&&j.length>0&&e(mr,{loading:p,nodes:j}),m.map((r,n)=>t(A,{children:[r.reasoning&&["stats","all"].includes(b)&&e(Yt,{reasoning:r.reasoning,loading:!r.content&&0===(r.tools||[]).length}),r.content&&e(Ct,{value:{chunkIndex:n,chunk:r,isLastMessage:l},children:e(Xt,{cite:s,value:r.content})}),(r.tools||[]).map((t,i)=>e(Ct,{value:{chunkIndex:n,chunk:r,toolIndex:i,tool:t,isLastMessage:l},children:e(or,{tool:t,loading:p})},i)),r.error&&e(vt,{content:`[${r.error}]`})]},n))]}),h&&t("div",{children:[t("div",{className:"d-flex align-items-center",children:[e("span",{className:"fs-7 text-secondary me-2",children:"标注的答案"}),e("hr",{className:"flex-fill"})]}),e(vt,{content:h.answer})]}),n.loading&&e(dt,{})]})]})]})}),pr=n(J)`
732
733
  max-width: calc(100% - .875rem * 2);
733
734
  width: calc(100% - .875rem * 2);
734
735
  font-size: 1rem;
@@ -737,25 +738,25 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
737
738
  .popover-body {
738
739
  padding: .5rem .75rem;
739
740
  }
740
- `,hr=n.div`
741
+ `,gr=n.div`
741
742
  overflow: hidden;
742
743
  text-overflow: ellipsis;
743
744
  word-break: break-all;
744
745
  -webkit-line-clamp: 2;
745
746
  -webkit-box-orient: vertical;
746
747
  display: -webkit-box;
747
- `,pr=n.div`
748
+ `,fr=n.div`
748
749
  padding: .5rem .75rem;
749
750
  color: var(--bs-secondary);
750
751
  border-radius: var(--bs-border-radius-lg);
751
752
  background: #FFFFFF;
752
753
  cursor: pointer;
753
- `,gr=n.div`
754
+ `,br=n.div`
754
755
  ${e=>e.$deleted&&i`
755
756
  text-decoration-line: line-through;
756
757
  color: var(--bs-secondary);
757
758
  `}
758
- `,fr=n.div`
759
+ `,vr=n.div`
759
760
  width: 100%;
760
761
  margin-bottom: .5rem;
761
762
  margin-top: .5rem;
@@ -767,7 +768,7 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
767
768
  &:last-child {
768
769
  margin-bottom: 0;
769
770
  }
770
- `,br=n.div`
771
+ `,yr=n.div`
771
772
  position: absolute;
772
773
  top: -1.1rem;
773
774
  right: 0;
@@ -775,7 +776,7 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
775
776
  gap: .5rem;
776
777
  opacity: 0;
777
778
  z-index: 1;
778
- `,vr=n.div`
779
+ `,xr=n.div`
779
780
  position: absolute;
780
781
  bottom: -1.4rem;
781
782
  left: 0;
@@ -788,7 +789,7 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
788
789
  display: flex;
789
790
  opacity: 0;
790
791
  z-index: 1;
791
- `,yr=n.div`
792
+ `,wr=n.div`
792
793
  width: 35px;
793
794
  height: 35px;
794
795
  border-radius: 50%;
@@ -799,14 +800,14 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
799
800
  width: 100%;
800
801
  height: 100%;
801
802
  }
802
- `,xr=n.div`
803
+ `,kr=n.div`
803
804
  width: 0;
804
805
  height: 0;
805
806
  content: "";
806
807
  border: 5px solid transparent;
807
808
  border-right-color: #f3f3f3;
808
809
  transform: translateY(10px);
809
- `,wr=n.div`
810
+ `,Er=n.div`
810
811
  padding: .875rem;
811
812
  background-color: rgb(243, 243, 243);
812
813
  border-radius: var(--bs-border-radius-lg);
@@ -814,31 +815,31 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
814
815
  position: relative;
815
816
 
816
817
  &:hover {
817
- ${vr}, ${br} {
818
+ ${xr}, ${yr} {
818
819
  opacity: 1;
819
820
  }
820
821
  }
821
- `,kr=n.div`
822
+ `,Nr=n.div`
822
823
  display: flex;
823
824
  justify-content: flex-start;
824
825
  padding: 1rem 0 1rem 0;
825
826
  ${e=>e.$reverse&&i`
826
827
  flex-direction: row-reverse;
827
828
 
828
- ${xr} {
829
+ ${kr} {
829
830
  border-left-color: rgba(var(--bs-primary-rgb), 0.1);
830
831
  border-right-color: transparent;
831
832
  }
832
833
 
833
- ${wr} {
834
+ ${Er} {
834
835
  background: rgba(var(--bs-primary-rgb), 0.1);
835
836
  }
836
837
  `};
837
- `;function Er(r){const{placeholder:n,actions:i,cite:o,speech:s,renderItem:a,scrollRef:l}=r,{messages:c,setMessages:d,loading:u,suggestions:m,conversationId:h}=he(),p=q(r.loaded),g=F(()=>{const e=l.current;e&&requestAnimationFrame(()=>{e.scrollTo({top:e.scrollHeight})})},[]),f=q(null),{height:b}=se({ref:f});M(()=>{(u||!p.current)&&c.length>0&&(u&&(p.current=!0),g())},[b,u,p,c]),M(()=>{m.length>0&&g()},[m]),M(()=>{p.current=r.loaded},[h]),M(()=>{const e=f.current;if(e){const t=()=>{p.current=!0};return e.addEventListener("click",t),()=>{e.removeEventListener("click",t)}}},[f]);const v=c.slice(-30);return t(Nr,{ref:f,children:[0===v.length&&n,v.map((t,r)=>{const n={actions:i,cite:o,speech:s,message:t,setMessage:e=>{d(r=>{const n=r.findIndex(e=>e.id===t.id);-1!==n&&e(r[n])})},isLast:r===v.length-1};return a?a({Component:ur,props:n},r):e(ur,{...n},r)}),m.length>0&&e(jr,{children:m.map((t,r)=>e("a",{href:"#!question",children:t},r))})]})}const Nr=n.div`
838
+ `;function jr(r){const{placeholder:n,actions:i,cite:o,speech:s,renderItem:a,scrollRef:l}=r,{messages:c,setMessages:d,loading:u,suggestions:m,conversationId:h}=pe(),p=F(r.loaded),g=R(()=>{const e=l.current;e&&requestAnimationFrame(()=>{e.scrollTo({top:e.scrollHeight})})},[]),f=F(null),{height:b}=ae({ref:f});S(()=>{(u||!p.current)&&c.length>0&&(u&&(p.current=!0),g())},[b,u,p,c]),S(()=>{m.length>0&&g()},[m]),S(()=>{p.current=r.loaded},[h]),S(()=>{const e=f.current;if(e){const t=()=>{p.current=!0};return e.addEventListener("click",t),()=>{e.removeEventListener("click",t)}}},[f]);const v=c.slice(-30);return t(Cr,{ref:f,children:[0===v.length&&n,v.map((t,r)=>{const n={actions:i,cite:o,speech:s,message:t,setMessage:e=>{d(r=>{const n=r.findIndex(e=>e.id===t.id);-1!==n&&e(r[n])})},isLast:r===v.length-1};return a?e(A,{children:a({Component:hr,props:n})},r):e(hr,{...n},r)}),m.length>0&&e($r,{children:m.map((t,r)=>e("a",{href:"#!question",children:t},r))})]})}const Cr=n.div`
838
839
  display: flex;
839
840
  flex-direction: column;
840
841
  flex: 1;
841
- `,jr=n.div`
842
+ `,$r=n.div`
842
843
  display: flex;
843
844
  flex-direction: column;
844
845
  align-items: flex-start;
@@ -855,16 +856,16 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
855
856
  background: var(--bs-secondary-bg-subtle);
856
857
  }
857
858
  }
858
- `,Cr=D(R(({className:r,bot:n,user:i,input:o,logLevel:s,imageResolver:a,nodeIconResolver:l,placeholder:c,actions:d,onboarding:u,conversation:m,cite:h,speech:p,renderItem:g,renderFileItem:f,renderToolContent:b,renderReasoning:y,messages:w,request:k,onReset:E,transformMessages:j=it},C)=>{const $=F(e=>{const t=[];if(u&&!1!==u.enable){const e=ot(u.questions||[]);t.push({chunks:[{content:[u.prologue,...e.map(e=>`[${e}](#!question)`)].join("\n"),tools:[]}],loading:u.loading})}return e?t.concat(j(e.messages||[])):w?t.concat(j(w)):t},[u]),[M,R]=S(m?.id),[A,D]=S(),[L,P]=v(()=>$(m)),[T,O]=S(!1),B=q(null),[U,_]=S([]),H=F(e=>{R(e?.id),P($(e)),_([]),O(!1),E?.(e)},[T,$,E]);return I(C,()=>({reset:H}),[H]),e(pe,{request:z(()=>k?"string"==typeof k?N.create({baseURL:k}):k:N,[k]),bot:n,user:i,logLevel:s,imageResolver:a,nodeIconResolver:l,conversationId:M,setConversationId:R,input:A,setInput:D,messages:L,setMessages:P,suggestions:U,setSuggestions:_,loading:T,setLoading:O,renderFileItem:f,reset:H,readonly:!o,renderToolContent:b,renderReasoning:y,children:e(Mr,{className:r,children:t(x,{children:[e($r,{ref:B,children:e(Er,{placeholder:c,cite:h,actions:d,loaded:!o,speech:p,renderItem:g,scrollRef:B})}),o&&e(We,{...o,scrollRef:B})]})})})}),W),$r=n.div`
859
+ `,Sr=D(q(({className:r,bot:n,user:i,input:o,logLevel:s,imageResolver:a,nodeIconResolver:l,placeholder:c,actions:d,onboarding:u,conversation:m,cite:h,speech:p,renderItem:g,renderFileItem:f,renderToolContent:b,renderReasoning:y,messages:w,request:k,onReset:E,transformMessages:j=it},C)=>{const $=R(e=>{const t=[];if(u&&!1!==u.enable){const e=ot(u.questions||[]);t.push({chunks:[{content:[u.prologue,...e.map(e=>`[${e}](#!question)`)].join("\n"),tools:[]}],loading:u.loading})}return e?t.concat(j(e.messages||[])):w?t.concat(j(w)):t},[u]),[S,q]=M(m?.id),[A,D]=M(),[L,P]=v(()=>$(m)),[T,O]=M(!1),B=F(null),[U,_]=M([]),H=R(e=>{q(e?.id),P($(e)),_([]),O(!1),E?.(e)},[T,$,E]);return I(C,()=>({reset:H}),[H]),e(ge,{request:z(()=>k?"string"==typeof k?N.create({baseURL:k}):k:N,[k]),bot:n,user:i,logLevel:s,imageResolver:a,nodeIconResolver:l,conversationId:S,setConversationId:q,input:A,setInput:D,messages:L,setMessages:P,suggestions:U,setSuggestions:_,loading:T,setLoading:O,renderFileItem:f,reset:H,readonly:!o,renderToolContent:b,renderReasoning:y,children:e(Fr,{className:r,children:t(x,{children:[e(Mr,{ref:B,children:e(jr,{placeholder:c,cite:h,actions:d,loaded:!o,speech:p,renderItem:g,scrollRef:B})}),o&&e(We,{...o,scrollRef:B})]})})})}),X),Mr=n.div`
859
860
  display: flex;
860
861
  flex-direction: column;
861
862
  flex: 1;
862
863
  overflow-y: auto;
863
864
  padding: 0 1rem;
864
865
  margin-bottom: .5rem;
865
- `,Mr=n.div`
866
+ `,Fr=n.div`
866
867
  display: flex;
867
868
  flex-direction: column;
868
869
  height: 100%;
869
870
  position: relative;
870
- `;async function Sr(e){const t=await ae().use(ce).use(Z).use(ee).use(te).use(de).use(le).process(e);return String(t)}export{qe as ActionButton,Je as EditableInput,be as FileItem,vt as Markdown,Cr as MessageBox,Ne as VariableForm,ue as isToolMessage,Sr as md2html,ot as pickQuestions,he as useMessageContext,Zt as useSynthesis};
871
+ `;async function Rr(e){const t=await le().use(de).use(ee).use(te).use(re).use(ue).use(ce).process(e);return String(t)}export{Fe as ActionButton,Je as EditableInput,ve as FileItem,vt as Markdown,Sr as MessageBox,Ne as VariableForm,me as isToolMessage,Rr as md2html,ot as pickQuestions,pe as useMessageContext,tr as useSynthesis};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@topthink/chat",
3
- "version": "1.2.6",
3
+ "version": "1.2.8",
4
4
  "module": "es/index.js",
5
5
  "types": "types/index.d.ts",
6
6
  "files": [
@@ -63,7 +63,7 @@
63
63
  },
64
64
  "author": "yunwuxin <tzzhangyajun@qq.com> (https://github.com/yunwuxin)",
65
65
  "license": "MIT",
66
- "gitHead": "c8c80da8dec40f09bdd752b134019370e81ce5c9",
66
+ "gitHead": "b31f33b0088e1e6c4ce42633e89dc4b21ee52a47",
67
67
  "scripts": {
68
68
  "prebuild": "rimraf es types",
69
69
  "build": "rollup -c --environment NODE_ENV:production",
@@ -64,7 +64,7 @@ export interface MessageBoxProps {
64
64
  renderItem?: (props: {
65
65
  Component: ComponentType<MessageItemProps>;
66
66
  props: MessageItemProps;
67
- }, index: number) => ReactNode;
67
+ }) => ReactNode;
68
68
  renderFileItem?: (props: {
69
69
  Component: ComponentType<FileItemProps>;
70
70
  props: FileItemProps;
@@ -14,7 +14,7 @@ interface Props {
14
14
  renderItem?: (props: {
15
15
  Component: typeof MessageItem;
16
16
  props: MessageItemProps;
17
- }, index: number) => ReactNode;
17
+ }) => ReactNode;
18
18
  scrollRef: MutableRefObject<HTMLDivElement | null>;
19
19
  }
20
20
  export default function List(props: Props): import("react/jsx-runtime").JSX.Element;
package/types/types.d.ts CHANGED
@@ -5,6 +5,7 @@ export interface FormField {
5
5
  required: boolean;
6
6
  placeholder?: string;
7
7
  options?: string[];
8
+ default?: string;
8
9
  }
9
10
  export type SuspendType = {
10
11
  type: 'select';