@topthink/chat 1.3.16 → 1.3.17

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,useAsync as i,css as o,formatSize as s,Tooltip 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,SimpleBar as j}from"@topthink/components";import*as C from"react";import{createContext as $,useContext as S,useRef as R,useCallback as M,useEffect as F,useState as q,forwardRef as A,useMemo as z,useImperativeHandle as I,Fragment as L,memo as D,Component as P}from"react";import*as T from"path";import O from"path";import{Spinner as B,Badge as U,Dropdown as _,FormControl as H,CloseButton as J,OverlayTrigger as Q,Popover as K}from"react-bootstrap";import W from"eventemitter3";import X from"react-textarea-autosize";import V from"lodash/isEqual";import{toString as Y}from"hast-util-to-string";import G from"react-markdown";import"katex/dist/katex.min.css";import Z from"rehype-highlight";import ee from"rehype-katex";import te from"rehype-raw";import re from"remark-breaks";import ne from"remark-gfm";import ie from"remark-math";import{codes as oe,types as se}from"micromark-util-symbol";import{markdownLineEnding as ae}from"micromark-util-character";import{createPortal as le}from"react-dom";import ce from"use-resize-observer";import{unified as de}from"unified";import ue from"rehype-stringify";import me from"remark-parse";import he from"remark-rehype";function pe(e,t){return e.name===t}function ge({name:t,className:r}){const n=O.extname(t).substring(1),{result:o}=i(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}},[n]);return o?e(fe,{src:o,className:r}):null}const fe=n.img`
1
+ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as n,useAsync as i,css as o,formatSize as s,Tooltip 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,SimpleBar as j}from"@topthink/components";import*as C from"react";import{createContext as $,useContext as S,useRef as R,useCallback as M,useEffect as F,useState as q,forwardRef as I,useMemo as A,useImperativeHandle as z,Fragment as L,memo as D,Component as P}from"react";import*as T from"path";import O from"path";import{Spinner as B,Badge as U,Dropdown as _,FormControl as H,CloseButton as J,OverlayTrigger as Q,Popover as K}from"react-bootstrap";import W from"eventemitter3";import X from"react-textarea-autosize";import V from"lodash/isEqual";import{toString as Y}from"hast-util-to-string";import G from"react-markdown";import"katex/dist/katex.min.css";import Z from"rehype-highlight";import ee from"rehype-katex";import te from"rehype-raw";import re from"remark-breaks";import ne from"remark-gfm";import ie from"remark-math";import{codes as oe,types as se}from"micromark-util-symbol";import{markdownLineEnding as ae}from"micromark-util-character";import{createPortal as le}from"react-dom";import ce from"use-resize-observer";import{unified as de}from"unified";import ue from"rehype-stringify";import me from"remark-parse";import he from"remark-rehype";function pe(e,t){return e.name===t}function ge({name:t,className:r}){const n=O.extname(t).substring(1),{result:o}=i(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}},[n]);return o?e(fe,{src:o,className:r}):null}const fe=n.img`
2
2
  width: 30px;
3
3
  height: 30px;
4
4
  `;function be({className:r,name:n,size:i=0,loading:o,error:l,onRemove:c,onClick:d}){const u=t(we,{className:r,$error:!!l,onClick:d,children:[t(xe,{children:[e(ge,{name:n}),o&&e(B,{variant:"primary"})]}),t(ye,{children:[e("h4",{children:n}),i>0&&e("p",{children:s(i,1)})]}),c&&e(ve,{onClick:e=>{e.preventDefault(),c()},children:e("i",{className:"bi bi-trash3"})})]});return l?e(a,{placement:"top",tooltip:l,children:u}):u}const ve=n.div`
@@ -68,7 +68,7 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
68
68
  ${e=>e.$error&&o`
69
69
  border-color: var(--bs-danger) !important;
70
70
  `}
71
- `,ke=[".txt",".md",".pdf",".docx",".xlsx",".pptx",".png",".jpg"],Ee=$(null),Ne=$(null);function je(){const e=S(Ee);if(!e)throw new Error("useChatContext must be used within a ChatProvider");return e}function Ce(){return S(Ne)}function $e(){const e=S(Ee),t=S(Ne);if(!e||!t)throw new Error("useContext must be used within a Provider");return{...e,...t}}function Se({children:t,...r}){return e(Ee.Provider,{value:r,children:t})}function Re({children:t,...r}){const{request:n,loading:i,setLoading:o,...s}=r;return e(Ee.Provider,{value:{request:n,loading:i,setLoading:o},children:e(Ne.Provider,{value:s,children:t})})}function Me({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 Fe=n.button`
71
+ `,ke=[".txt",".md",".pdf",".docx",".xlsx",".pptx",".png",".jpg"],Ee=$(null),Ne=$(null);function je(){const e=S(Ee);if(!e)throw new Error("useChatContext must be used within a ChatProvider");return e}function Ce(){return S(Ne)}function $e(){const e=S(Ee),t=S(Ne);if(!e||!t)throw new Error("useContext must be used within a Provider");return{...e,...t}}function Se({children:t,...r}){return e(Ee.Provider,{value:r,children:t})}function Re({children:t,...r}){const{request:n,loading:i,setLoading:o,input:s,setInput:a,...l}=r;return e(Ee.Provider,{value:{request:n,loading:i,setLoading:o,input:s,setInput:a},children:e(Ne.Provider,{value:l,children:t})})}function Me({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 Fe=n.button`
72
72
  color: var(--bs-secondary);
73
73
  cursor: pointer;
74
74
  display: flex;
@@ -99,12 +99,12 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
99
99
  }
100
100
  `};
101
101
 
102
- `;let qe=class{#e;#t;constructor(){this.#t=new W}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)}},Ae=class{#t;#r;#n;#i;constructor(e){this.#r=e,this.#t=new W}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 ze=A(({onResult:r,model:n="builtin"},i)=>{const{request:o}=je(),s=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=R(),[n,i]=q(!1),[o,s]=q(!1);return F(()=>()=>{r.current&&(r.current.stop(),r.current=void 0)},[]),{recording:n,transcribing:o,start:async()=>{r.current||(r.current=t?new Ae(t):new qe,r.current.onRecording(i),r.current.onTranscribing(s),r.current.onResult(e)),r.current.start()},stop:()=>{r.current&&r.current.stop()}}}({onResult:r,loader:s});return I(i,()=>({start:l,stop:c}),[l,c]),e(a,{tooltip:d?"停止":"语音输入",placement:"top",children:t(Fe,{onMouseDown:e=>{e.preventDefault(),d?c():l()},children:[u&&e(Ie,{animation:"border",variant:"primary",size:"sm"}),e("i",d?{className:"bi bi-mic-fill text-danger"}:{className:"bi bi-mic"})]})})}),Ie=n(B)`
102
+ `;let qe=class{#e;#t;constructor(){this.#t=new W}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)}},Ie=class{#t;#r;#n;#i;constructor(e){this.#r=e,this.#t=new W}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 Ae=I(({onResult:r,model:n="builtin"},i)=>{const{request:o}=je(),s=A(()=>{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=R(),[n,i]=q(!1),[o,s]=q(!1);return F(()=>()=>{r.current&&(r.current.stop(),r.current=void 0)},[]),{recording:n,transcribing:o,start:async()=>{r.current||(r.current=t?new Ie(t):new qe,r.current.onRecording(i),r.current.onTranscribing(s),r.current.onResult(e)),r.current.start()},stop:()=>{r.current&&r.current.stop()}}}({onResult:r,loader:s});return z(i,()=>({start:l,stop:c}),[l,c]),e(a,{tooltip:d?"停止":"语音输入",placement:"top",children:t(Fe,{onMouseDown:e=>{e.preventDefault(),d?c():l()},children:[u&&e(ze,{animation:"border",variant:"primary",size:"sm"}),e("i",d?{className:"bi bi-mic-fill text-danger"}:{className:"bi bi-mic"})]})})}),ze=n(B)`
103
103
  position: absolute;
104
104
  --bs-spinner-width: .75rem;
105
105
  --bs-spinner-height: .75rem;
106
106
  --bs-spinner-border-width: 0.1em;
107
- `,Le=A(({className:t,children:r,size:n,tooltip:i,placement:o,onClick:s,onMouseDown:l},c)=>{const d=e(De,{ref:c,className:t,onClick:s,onMouseDown:l,$size:n,children:r});return i?e(a,{tooltip:i,placement:o,children:d}):d}),De=n.div`
107
+ `,Le=I(({className:t,children:r,size:n,tooltip:i,placement:o,onClick:s,onMouseDown:l},c)=>{const d=e(De,{ref:c,className:t,onClick:s,onMouseDown:l,$size:n,children:r});return i?e(a,{tooltip:i,placement:o,children:d}):d}),De=n.div`
108
108
  width: 2rem;
109
109
  height: 2rem;
110
110
  align-items: center;
@@ -176,7 +176,7 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
176
176
  margin-bottom: .5rem;
177
177
  display: flex;
178
178
  padding: 0 .125rem;
179
- `;var Ge=A(function({readonly:t,autoFocus:r,placeholder:n,minRows:i,maxRows:o,onSubmit:s,onFocusedChange:a,onQueryChange:l,onPaste:c},d){const u=R(null),[m,h]=q(""),p=M(()=>{const e=u.current;if(!e)return;e.focus();const t=e.value.length;e.setSelectionRange(t,t)},[]),g=M(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(Ze,{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 Ze=n(X)`
179
+ `;var Ge=I(function({readonly:t,autoFocus:r,placeholder:n,minRows:i,maxRows:o,onSubmit:s,onFocusedChange:a,onQueryChange:l,onPaste:c},d){const u=R(null),[m,h]=q(""),p=M(()=>{const e=u.current;if(!e)return;e.focus();const t=e.value.length;e.setSelectionRange(t,t)},[]),g=M(e=>{const t="string"==typeof e?e:e(m);h(t),l?.(t.trim()),requestAnimationFrame(()=>{p()})},[m,l,p]);return z(d,()=>({setContent:g,focus(){p()}}),[g,p]),e(Ze,{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 Ze=n(X)`
180
180
  min-height: calc(1.5em + 1rem);
181
181
  width: 100%;
182
182
  padding: 0.5rem 0.5rem 0.5rem 0.75rem;
@@ -185,7 +185,7 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
185
185
  resize: none;
186
186
  line-height: 1.5;
187
187
  background: transparent;
188
- `;var et=A(function({className:r,fileTypes:n,speech:i,scrollRef:o,variables:s,minRows:d=1,maxRows:m=5,toolbar:h,toolbarActions:p,disabled:g,autoFocus:f,tools:b,renderEditableInput:y,placeholder:x="请输入你的问题, Enter+Shift换行, Enter发送",supportStop:w=!1,onEvent:k,onNewConversation:E},N){const j=R(null),C=R(null),$=R(null),[S,A]=q(""),[L,D]=q(""),[P,O]=v([]),[B,U]=q(!1),_=n&&n.length>0?n:ke,H=M(()=>{requestAnimationFrame(()=>{$.current?.focus()})},[]),{send:Q,resume:K,stop:W}=function(e){const{setLoading:t,request:r}=je(),n=Ce(),i=n?.setMessages,o=n?.setConversationId,s=n?.conversationId,a=n?.messages,d=!0===e?.supportStop,{onEvent:u,onNewConversation:m,onComplete:h}=e??{},p=R(null),g=R(),f=R(s),b=()=>(p.current&&p.current.abort(),p.current=new AbortController,p.current.signal),v=M(e=>{const t=(e,r)=>{Object.entries(r).forEach(([r,n])=>{if("string"!=typeof n)if(!n||"object"!=typeof n||Array.isArray(n))e[r]=n;else if("index"in n){const{index:i,...o}=n;Array.isArray(e[r])||(e[r]=[]),e[r][i]||(e[r][i]={}),t(e[r][i],o)}else e[r]=n;else e[r]="string"==typeof e[r]?e[r]+n:n})};if(e.data)if("[DONE]"!=e.data)try{const r=JSON.parse(e.data);r.conversation?(f.current=r.conversation,o?.(r.conversation)):r.event?u?.(r.event):i?.(e=>{const n=e[e.length-1];if(r.chunks){if(n.chunks){const e=r.chunks.index;if(n.chunks[e]||(n.chunks[e]={content:"",reasoning:"",tools:[]}),r.chunks.error)n.chunks[e].error=r.chunks.error;else if(r.chunks.tools){n.chunks[e].tools||(n.chunks[e].tools=[]);const{index:i,...o}=r.chunks.tools;n.chunks[e].tools[i]||(n.chunks[e].tools[i]={name:"",title:"",arguments:""}),t(n.chunks[e].tools[i],o)}else if(r.chunks.reasoning)n.chunks[e].reasoning+=r.chunks.reasoning;else if(r.chunks.content)if("object"==typeof r.chunks.content){Array.isArray(n.chunks[e].content)||(n.chunks[e].content=[]);const t=r.chunks.content.index,i=r.chunks.content.value;"string"==typeof i?(n.chunks[e].content[t]||(n.chunks[e].content[t]=""),n.chunks[e].content[t]+=i):n.chunks[e].content[t]=i}else n.chunks[e].content+=r.chunks.content;else r.chunks.node&&(n.chunks[e].node={...n.chunks[e].node,...r.chunks.node})}}else r.stats?n.stats=r.stats:r.id&&(n.id=r.id)})}catch(e){console.error(e)}else i?.(e=>{e[e.length-1].loading=!1})},[u]),y=M(e=>{if(l(e))i?.(e=>{const t=e[e.length-1];t&&(t.loading=!1)});else{let t="未知错误";c(e)&&(t=401==e.response?.status?"未授权或授权已过期,请刷新页面后重试":"string"==typeof e.errors?e.errors:Object.values(e.errors).join("\n")),i?.(e=>{const r=e[e.length-1];r.chunks&&(0===r.chunks.length?r.chunks=[{error:t}]:r.chunks[r.chunks.length-1].error=t),r.loading=!1})}},[]),x=M(async e=>{g.current=e;try{const n=b();t(!0),i?.(e=>{e[e.length-1].loading=!0,delete e[e.length-1].stats});let o={url:"message",method:"get",params:{id:e},onMessage:v,signal:n};await r(o)}catch(e){y(e)}finally{p.current=null,g.current=void 0}t(!1),h?.()},[r,u,m,h]),w=M(async(e,...o)=>{"string"==typeof e&&(e={query:e,...o});const{query:s,files:a=[],variables:l={},quote:c}=e;let d=null,u=null;if(s||a.length>0){const e=b();t(!0),n?.setSuggestions?.([]),i?.(e=>{e.push({query:s,quote:c,files:a,variables:l,chunks:[],loading:!0})});try{let t={method:"post",data:{query:s,quote:c,files:a,variables:l,conversation:f.current},onMessage:v,signal:e};const n=await r(t);d=n.message??null,u=n.conversation??null}catch(e){y(e)}finally{p.current=null}if(d){let e=!1;u&&!f.current&&(e=m?.(u)??!1),e||await x(d.id)}else t(!1),h?.()}},[r,u,m,h]),k=M(async e=>{let n=null;try{const o=b();t(!0),i?.(e=>{e[e.length-1].loading=!0});let s={url:"resume",method:"post",data:{conversation:f.current,chunk:e.chunk,tool:e.tool,payload:e.payload},onMessage:v,signal:o};n=(await r(s)).message??null}catch(e){y(e)}finally{p.current=null}n?await x(n.id):(t(!1),h?.())},[r,u,m,h]),E=M(async()=>{if(d)if(g.current)try{await r({url:"stop",method:"post",data:{id:g.current}})}catch{}else p.current?.abort()},[r,d]),N=()=>{const e=a?.[a.length-1];e&&e.id&&2===e.status&&x(e.id)};return F(()=>(N(),()=>{p.current&&p.current.abort()}),[]),F(()=>{s!=f.current&&(f.current=s,p.current&&p.current.abort(),N())},[s]),{send:w,resume:k,stop:E}}({supportStop:w,onEvent:k,onNewConversation:E,onComplete:H}),{loading:X,request:V}=je(),Y=Ce(),[G,Z]=q();F(()=>{const e=(Y?.messages||[]).filter(e=>!!e.query);Z(e.at(-1)?.variables)},[Y?.messages]),F(()=>{!n&&P.length>0&&O([])},[n]),F(()=>{const e=o?.current;if(e){const t=e=>{if(e.target instanceof HTMLAnchorElement&&"#!question"===e.target.hash){e.preventDefault();const t={query:e.target.text};s&&(t.variables={...G,...s.values}),Q(t)}};return e.addEventListener("click",t),()=>{e.removeEventListener("click",t)}}},[s,G]);const ee=M(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=>!(!_.includes("*")&&!_.includes(T.extname(e.name)))&&!(e.size>20971520)).slice(0,6-P.length);return 0!==t.length&&(O(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});O(t=>{const n=t.find(t=>t.file===e);n&&(n.path=r.path)})}catch(t){const r=c(t)?t.message:"unknown error";O(t=>{const n=t.find(t=>t.file===e);n&&(n.error=r)})}}),!0)},[P.length,_,V,O]),te=M(({target:e})=>{e.files&&ee(Array.from(e.files)),e.value=""},[ee]),re=M(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=P.flatMap(({file:e,path:t})=>t?[{name:e.name,size:e.size,path:t}]:[]),ie=M(()=>{if(S||ne.length>0){const e={query:S,files:ne};s&&(e.variables={...G,...s.values}),L&&(e.quote=L),Q(e),$.current?.setContent(""),D(""),O([]),C.current?.stop(!0)}},[S,ne,s,G,L]),oe=z(()=>({setQuery(e){$.current?.setContent(e)},setQuote:D,send:Q,resume:K,focus(){$.current?.focus()}}),[D,Q,K]);if(F(()=>{Y?.setInput?.(oe)},[oe]),I(N,()=>oe,[oe]),s){const t=s.config.filter(e=>!(e.key in(s.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(rt,{children:e(tt,{children:e(Me,{values:G,variables:t,onSubmit:({formData:e})=>{if(r(e,!0))return Z(e),!0}})})})}return t("div",{className:r,children:[h&&e(Xe,{actions:p,children:h}),t(lt,{$focused:B&&!X,children:[P.length>0&&e(it,{children:P.map(({file:t,error:r,path:n},i)=>{const o=void 0===r&&void 0===n;return e(nt,{name:t.name,size:t.size,error:r,loading:o,onRemove:()=>{O(e=>{const r=e.findIndex(e=>e.file===t);-1!==r&&e.splice(r,1)})}},i)})}),!!L&&t(at,{children:[e("i",{className:"bi bi-quote"}),e("p",{children:L}),e(J,{onClick:()=>D("")})]}),t(ot,{$minRows:d,children:[y?.({Component:Ge,props:{ref:$,readonly:X||g,autoFocus:f,placeholder:x,minRows:d,maxRows:m,onSubmit:ie,onFocusedChange:U,onQueryChange:A,onPaste:re}})||e(Ge,{ref:$,readonly:X||g,autoFocus:f,placeholder:x,minRows:d,maxRows:m,onSubmit:ie,onFocusedChange:U,onQueryChange:A,onPaste:re}),t(st,{children:[b,n&&e(a,{tooltip:"可上传不超过6个小于20MB的文件",placement:"top",children:t(Fe,{disabled:P.length>=6,onClick:()=>j.current?.click(),children:[e("input",{onChange:te,multiple:!0,accept:_.join(","),ref:j,type:"file",hidden:!0}),e("i",{className:"bi bi-file-earmark-arrow-up"})]})}),i&&e(ze,{ref:C,model:i.model,onResult:e=>{$.current?.setContent(t=>t+e+" ")}}),e(Fe,{$fill:X&&w,className:X&&w?"text-danger":"text-primary",disabled:!S&&0===ne.length&&!X||X&&!w,onClick:e=>{e.preventDefault(),X&&w?W():ie()},children:e("i",X&&w?{className:"bi bi-square-fill fs-7"}:{className:"bi bi-send-fill"})})]})]})]})]})});const tt=n.div`
188
+ `;var et=I(function({className:r,fileTypes:n,speech:i,scrollRef:o,variables:s,minRows:d=1,maxRows:m=5,toolbar:h,toolbarActions:p,disabled:g,autoFocus:f,tools:b,renderEditableInput:y,placeholder:x="请输入你的问题, Enter+Shift换行, Enter发送",supportStop:w=!1,onEvent:k,onNewConversation:E},N){const j=R(null),C=R(null),$=R(null),[S,I]=q(""),[L,D]=q(""),[P,O]=v([]),[B,U]=q(!1),_=n&&n.length>0?n:ke,H=M(()=>{requestAnimationFrame(()=>{$.current?.focus()})},[]),{send:Q,resume:K,stop:W}=function(e){const{setLoading:t,request:r}=je(),n=Ce(),i=n?.setMessages,o=n?.setConversationId,s=n?.conversationId,a=n?.messages,d=!0===e?.supportStop,{onEvent:u,onNewConversation:m,onComplete:h}=e??{},p=R(null),g=R(),f=R(s),b=()=>(p.current&&p.current.abort(),p.current=new AbortController,p.current.signal),v=M(e=>{const t=(e,r)=>{Object.entries(r).forEach(([r,n])=>{if("string"!=typeof n)if(!n||"object"!=typeof n||Array.isArray(n))e[r]=n;else if("index"in n){const{index:i,...o}=n;Array.isArray(e[r])||(e[r]=[]),e[r][i]||(e[r][i]={}),t(e[r][i],o)}else e[r]=n;else e[r]="string"==typeof e[r]?e[r]+n:n})};if(e.data)if("[DONE]"!=e.data)try{const r=JSON.parse(e.data);r.conversation?(f.current=r.conversation,o?.(r.conversation)):r.event?u?.(r.event):i?.(e=>{const n=e[e.length-1];if(r.chunks){if(n.chunks){const e=r.chunks.index;if(n.chunks[e]||(n.chunks[e]={content:"",reasoning:"",tools:[]}),r.chunks.error)n.chunks[e].error=r.chunks.error;else if(r.chunks.tools){n.chunks[e].tools||(n.chunks[e].tools=[]);const{index:i,...o}=r.chunks.tools;n.chunks[e].tools[i]||(n.chunks[e].tools[i]={name:"",title:"",arguments:""}),t(n.chunks[e].tools[i],o)}else if(r.chunks.reasoning)n.chunks[e].reasoning+=r.chunks.reasoning;else if(r.chunks.content)if("object"==typeof r.chunks.content){Array.isArray(n.chunks[e].content)||(n.chunks[e].content=[]);const t=r.chunks.content.index,i=r.chunks.content.value;"string"==typeof i?(n.chunks[e].content[t]||(n.chunks[e].content[t]=""),n.chunks[e].content[t]+=i):n.chunks[e].content[t]=i}else n.chunks[e].content+=r.chunks.content;else r.chunks.node&&(n.chunks[e].node={...n.chunks[e].node,...r.chunks.node})}}else r.stats?n.stats=r.stats:r.id&&(n.id=r.id)})}catch(e){console.error(e)}else i?.(e=>{e[e.length-1].loading=!1})},[u]),y=M(e=>{if(l(e))i?.(e=>{const t=e[e.length-1];t&&(t.loading=!1)});else{let t="未知错误";c(e)&&(t=401==e.response?.status?"未授权或授权已过期,请刷新页面后重试":"string"==typeof e.errors?e.errors:Object.values(e.errors).join("\n")),i?.(e=>{const r=e[e.length-1];r.chunks&&(0===r.chunks.length?r.chunks=[{error:t}]:r.chunks[r.chunks.length-1].error=t),r.loading=!1})}},[]),x=M(async e=>{g.current=e;try{const n=b();t(!0),i?.(e=>{e[e.length-1].loading=!0,delete e[e.length-1].stats});let o={url:"message",method:"get",params:{id:e},onMessage:v,signal:n};await r(o)}catch(e){y(e)}finally{p.current=null,g.current=void 0}t(!1),h?.()},[r,u,m,h]),w=M(async(e,...o)=>{"string"==typeof e&&(e={query:e,...o});const{query:s,files:a=[],variables:l={},quote:c}=e;let d=null,u=null;if(s||a.length>0){const e=b();t(!0),n?.setSuggestions?.([]),i?.(e=>{e.push({query:s,quote:c,files:a,variables:l,chunks:[],loading:!0})});try{let t={method:"post",data:{query:s,quote:c,files:a,variables:l,conversation:f.current},onMessage:v,signal:e};const n=await r(t);d=n.message??null,u=n.conversation??null}catch(e){y(e)}finally{p.current=null}if(d){let e=!1;u&&!f.current&&(e=m?.(u)??!1),e||await x(d.id)}else t(!1),h?.()}},[r,u,m,h]),k=M(async e=>{let n=null;try{const o=b();t(!0),i?.(e=>{e[e.length-1].loading=!0});let s={url:"resume",method:"post",data:{conversation:f.current,chunk:e.chunk,tool:e.tool,payload:e.payload},onMessage:v,signal:o};n=(await r(s)).message??null}catch(e){y(e)}finally{p.current=null}n?await x(n.id):(t(!1),h?.())},[r,u,m,h]),E=M(async()=>{if(d)if(g.current)try{await r({url:"stop",method:"post",data:{id:g.current}})}catch{}else p.current?.abort()},[r,d]),N=()=>{const e=a?.[a.length-1];e&&e.id&&2===e.status&&x(e.id)};return F(()=>(N(),()=>{p.current&&p.current.abort()}),[]),F(()=>{s!=f.current&&(f.current=s,p.current&&p.current.abort(),N())},[s]),{send:w,resume:k,stop:E}}({supportStop:w,onEvent:k,onNewConversation:E,onComplete:H}),{loading:X,request:V,setInput:Y}=je(),G=Ce(),[Z,ee]=q();F(()=>{const e=(G?.messages||[]).filter(e=>!!e.query);ee(e.at(-1)?.variables)},[G?.messages]),F(()=>{!n&&P.length>0&&O([])},[n]),F(()=>{const e=o?.current;if(e){const t=e=>{if(e.target instanceof HTMLAnchorElement&&"#!question"===e.target.hash){e.preventDefault();const t={query:e.target.text};s&&(t.variables={...Z,...s.values}),Q(t)}};return e.addEventListener("click",t),()=>{e.removeEventListener("click",t)}}},[s,Z]);const te=M(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=>!(!_.includes("*")&&!_.includes(T.extname(e.name)))&&!(e.size>20971520)).slice(0,6-P.length);return 0!==t.length&&(O(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});O(t=>{const n=t.find(t=>t.file===e);n&&(n.path=r.path)})}catch(t){const r=c(t)?t.message:"unknown error";O(t=>{const n=t.find(t=>t.file===e);n&&(n.error=r)})}}),!0)},[P.length,_,V,O]),re=M(({target:e})=>{e.files&&te(Array.from(e.files)),e.value=""},[te]),ne=M(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&&te(n)&&e.preventDefault()},[te]),ie=P.flatMap(({file:e,path:t})=>t?[{name:e.name,size:e.size,path:t}]:[]),oe=M(()=>{if(S||ie.length>0){const e={query:S,files:ie};s&&(e.variables={...Z,...s.values}),L&&(e.quote=L),Q(e),$.current?.setContent(""),D(""),O([]),C.current?.stop(!0)}},[S,ie,s,Z,L]),se=A(()=>({setQuery(e){$.current?.setContent(e)},setQuote:D,send:Q,resume:K,focus(){$.current?.focus()}}),[D,Q,K]);if(F(()=>{Y(se)},[se]),z(N,()=>se,[se]),s){const t=s.config.filter(e=>!(e.key in(s.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(Z))return e(rt,{children:e(tt,{children:e(Me,{values:Z,variables:t,onSubmit:({formData:e})=>{if(r(e,!0))return ee(e),!0}})})})}return t("div",{className:r,children:[h&&e(Xe,{actions:p,children:h}),t(lt,{$focused:B&&!X,children:[P.length>0&&e(it,{children:P.map(({file:t,error:r,path:n},i)=>{const o=void 0===r&&void 0===n;return e(nt,{name:t.name,size:t.size,error:r,loading:o,onRemove:()=>{O(e=>{const r=e.findIndex(e=>e.file===t);-1!==r&&e.splice(r,1)})}},i)})}),!!L&&t(at,{children:[e("i",{className:"bi bi-quote"}),e("p",{children:L}),e(J,{onClick:()=>D("")})]}),t(ot,{$minRows:d,children:[y?.({Component:Ge,props:{ref:$,readonly:X||g,autoFocus:f,placeholder:x,minRows:d,maxRows:m,onSubmit:oe,onFocusedChange:U,onQueryChange:I,onPaste:ne}})||e(Ge,{ref:$,readonly:X||g,autoFocus:f,placeholder:x,minRows:d,maxRows:m,onSubmit:oe,onFocusedChange:U,onQueryChange:I,onPaste:ne}),t(st,{children:[b,n&&e(a,{tooltip:"可上传不超过6个小于20MB的文件",placement:"top",children:t(Fe,{disabled:P.length>=6,onClick:()=>j.current?.click(),children:[e("input",{onChange:re,multiple:!0,accept:_.join(","),ref:j,type:"file",hidden:!0}),e("i",{className:"bi bi-file-earmark-arrow-up"})]})}),i&&e(Ae,{ref:C,model:i.model,onResult:e=>{$.current?.setContent(t=>t+e+" ")}}),e(Fe,{$fill:X&&w,className:X&&w?"text-danger":"text-primary",disabled:!S&&0===ie.length&&!X||X&&!w,onClick:e=>{e.preventDefault(),X&&w?W():oe()},children:e("i",X&&w?{className:"bi bi-square-fill fs-7"}:{className:"bi bi-send-fill"})})]})]})]})]})});const tt=n.div`
189
189
  border-radius: var(--bs-border-radius-lg);
190
190
  box-shadow: var(--bs-box-shadow-sm);
191
191
  margin: 1rem;
@@ -247,7 +247,7 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
247
247
  border: var(--bs-border-width) var(--bs-border-style) ${e=>e.$focused?"var(--bs-primary)":"var(--bs-border-color)"};
248
248
  border-radius: var(--bs-border-radius-lg);
249
249
  box-shadow: 0.125rem 0.25rem 0.5rem rgba(0, 0, 0, 0.1);
250
- `;function ct(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,context:e.context,latency:e.latency},status:e.status??1}))}function dt(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 ut,mt,ht;function pt(){return pt=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},pt.apply(null,arguments)}const gt=e=>C.createElement("svg",pt({xmlns:"http://www.w3.org/2000/svg",width:20,height:10,fill:"#fff",viewBox:"0 0 120 30"},e),ut||(ut=C.createElement("circle",{cx:15,cy:15,r:15,fill:"#3c60ff"},C.createElement("animate",{attributeName:"r",begin:"0s",calcMode:"linear",dur:"0.8s",from:15,repeatCount:"indefinite",to:15,values:"15;9;15"}),C.createElement("animate",{attributeName:"fill-opacity",begin:"0s",calcMode:"linear",dur:"0.8s",from:1,repeatCount:"indefinite",to:1,values:"1;.5;1"}))),mt||(mt=C.createElement("circle",{cx:60,cy:15,r:9,fill:"#3c60ff",fillOpacity:.3},C.createElement("animate",{attributeName:"r",begin:"0s",calcMode:"linear",dur:"0.8s",from:9,repeatCount:"indefinite",to:9,values:"9;15;9"}),C.createElement("animate",{attributeName:"fill-opacity",begin:"0s",calcMode:"linear",dur:"0.8s",from:.5,repeatCount:"indefinite",to:.5,values:".5;1;.5"}))),ht||(ht=C.createElement("circle",{cx:105,cy:15,r:15,fill:"#3c60ff"},C.createElement("animate",{attributeName:"r",begin:"0s",calcMode:"linear",dur:"0.8s",from:15,repeatCount:"indefinite",to:15,values:"15;9;15"}),C.createElement("animate",{attributeName:"fill-opacity",begin:"0s",calcMode:"linear",dur:"0.8s",from:1,repeatCount:"indefinite",to:1,values:"1;.5;1"}))));function ft(e){if(!e)return"";if("string"==typeof e)return e;if("image"===e.type){return`![](${y(e.image)})`}return""}const bt=function(e,t,r){function n(t){return t!==oe.leftSquareBracket?(e.exit("citeMarker"),e.enter("citeData"),e.enter(se.chunkString,{contentType:"string"}),i(t)):(e.consume(t),n)}function i(n){return n===oe.rightSquareBracket?(e.exit(se.chunkString),e.exit("citeData"),e.enter("citeMarker"),function(n){if(n!==oe.rightSquareBracket)return r(n);return e.consume(n),e.exit("citeMarker"),e.exit("cite"),t(n)}(n)):ae(n)||n===oe.eof||n>57||n<48?r(n):(e.consume(n),i)}return function(t){return t!==oe.leftSquareBracket?r(t):(e.enter("cite"),e.enter("citeMarker"),n(t))}},vt=function(){const e=this.data();e.micromarkExtensions.push({text:{[oe.leftSquareBracket]:{tokenize:bt}}}),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}}})},yt=x.Image,xt={pre:({children:r,node:n})=>{if(!n)return null;const[i,o]=q(!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]);F(()=>{s&&o(s)},[s]);const a=z(()=>Y(n),[n]);return t(Ct,{children:[t(jt,{children:[!i&&e(w,{tooltip:!1,as:Nt,content:a}),s&&i&&e(Nt,{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(Nt,{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(yt,{...r})},wt=[[ie,{singleDollarTextMath:!1}],ne,re],kt=[[te,{tagfilter:!0}],ee,[Z,{detect:!1,ignoreMissing:!0}]],Et=D(A(({content:t,components:r,cite:n},i)=>{t=t.replace(/\\\(\s(.+?)\s\\\)/g,"$$$$ $1 $$$$");const o=z(()=>{const e={...xt,...r};return n&&(e.cite=n),e},[r,n]),s=z(()=>n?[...wt,vt]:wt,[n]);return e($t,{ref:i,children:e(G,{remarkPlugins:s,rehypePlugins:kt,components:o,children:t})})}),V),Nt=n.div`
250
+ `;function ct(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,context:e.context,latency:e.latency},status:e.status??1}))}function dt(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 ut,mt,ht;function pt(){return pt=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},pt.apply(null,arguments)}const gt=e=>C.createElement("svg",pt({xmlns:"http://www.w3.org/2000/svg",width:20,height:10,fill:"#fff",viewBox:"0 0 120 30"},e),ut||(ut=C.createElement("circle",{cx:15,cy:15,r:15,fill:"#3c60ff"},C.createElement("animate",{attributeName:"r",begin:"0s",calcMode:"linear",dur:"0.8s",from:15,repeatCount:"indefinite",to:15,values:"15;9;15"}),C.createElement("animate",{attributeName:"fill-opacity",begin:"0s",calcMode:"linear",dur:"0.8s",from:1,repeatCount:"indefinite",to:1,values:"1;.5;1"}))),mt||(mt=C.createElement("circle",{cx:60,cy:15,r:9,fill:"#3c60ff",fillOpacity:.3},C.createElement("animate",{attributeName:"r",begin:"0s",calcMode:"linear",dur:"0.8s",from:9,repeatCount:"indefinite",to:9,values:"9;15;9"}),C.createElement("animate",{attributeName:"fill-opacity",begin:"0s",calcMode:"linear",dur:"0.8s",from:.5,repeatCount:"indefinite",to:.5,values:".5;1;.5"}))),ht||(ht=C.createElement("circle",{cx:105,cy:15,r:15,fill:"#3c60ff"},C.createElement("animate",{attributeName:"r",begin:"0s",calcMode:"linear",dur:"0.8s",from:15,repeatCount:"indefinite",to:15,values:"15;9;15"}),C.createElement("animate",{attributeName:"fill-opacity",begin:"0s",calcMode:"linear",dur:"0.8s",from:1,repeatCount:"indefinite",to:1,values:"1;.5;1"}))));function ft(e){if(!e)return"";if("string"==typeof e)return e;if("image"===e.type){return`![](${y(e.image)})`}return""}const bt=function(e,t,r){function n(t){return t!==oe.leftSquareBracket?(e.exit("citeMarker"),e.enter("citeData"),e.enter(se.chunkString,{contentType:"string"}),i(t)):(e.consume(t),n)}function i(n){return n===oe.rightSquareBracket?(e.exit(se.chunkString),e.exit("citeData"),e.enter("citeMarker"),function(n){if(n!==oe.rightSquareBracket)return r(n);return e.consume(n),e.exit("citeMarker"),e.exit("cite"),t(n)}(n)):ae(n)||n===oe.eof||n>57||n<48?r(n):(e.consume(n),i)}return function(t){return t!==oe.leftSquareBracket?r(t):(e.enter("cite"),e.enter("citeMarker"),n(t))}},vt=function(){const e=this.data();e.micromarkExtensions.push({text:{[oe.leftSquareBracket]:{tokenize:bt}}}),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}}})},yt=x.Image,xt={pre:({children:r,node:n})=>{if(!n)return null;const[i,o]=q(!1),s=A(()=>{const e=n.children[0];return"element"===(t=e).type&&"code"===t.tagName&&!!e.properties?.className?.includes("language-svg");var t},[n]);F(()=>{s&&o(s)},[s]);const a=A(()=>Y(n),[n]);return t(Ct,{children:[t(jt,{children:[!i&&e(w,{tooltip:!1,as:Nt,content:a}),s&&i&&e(Nt,{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(Nt,{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(yt,{...r})},wt=[[ie,{singleDollarTextMath:!1}],ne,re],kt=[[te,{tagfilter:!0}],ee,[Z,{detect:!1,ignoreMissing:!0}]],Et=D(I(({content:t,components:r,cite:n},i)=>{t=t.replace(/\\\(\s(.+?)\s\\\)/g,"$$$$ $1 $$$$");const o=A(()=>{const e={...xt,...r};return n&&(e.cite=n),e},[r,n]),s=A(()=>n?[...wt,vt]:wt,[n]);return e($t,{ref:i,children:e(G,{remarkPlugins:s,rehypePlugins:kt,components:o,children:t})})}),V),Nt=n.div`
251
251
  cursor: pointer;
252
252
  padding: 2px 10px;
253
253
  background-color: #303030;
@@ -551,7 +551,7 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
551
551
  .hljs-strong {
552
552
  font-weight: 700;
553
553
  }
554
- `;var St=A(function({children:t,tooltip:r,onClick:n,disabled:i,...o},s){i&&(n=void 0);const l=e(Rt,{ref:s,onClick:n,$disabled:i,...o,children:t});return r?e(a,{tooltip:r,placement:"top",children:l}):l});const Rt=n.div`
554
+ `;var St=I(function({children:t,tooltip:r,onClick:n,disabled:i,...o},s){i&&(n=void 0);const l=e(Rt,{ref:s,onClick:n,$disabled:i,...o,children:t});return r?e(a,{tooltip:r,placement:"top",children:l}):l});const Rt=n.div`
555
555
  align-items: center;
556
556
  justify-content: center;
557
557
  border-radius: .375rem;
@@ -584,7 +584,7 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
584
584
  `}
585
585
 
586
586
  }
587
- `,Mt=$(null);var Ft=Mt.Provider;const qt=x.Image;function At({src:t,...r}){const{imageResolver:n}=$e();return n&&t&&(t=n(t)),e(zt,{children:e(qt,{src:t,...r})},t)}const zt=n.div`
587
+ `,Mt=$(null);var Ft=Mt.Provider;const qt=x.Image;function It({src:t,...r}){const{imageResolver:n}=$e();return n&&t&&(t=n(t)),e(At,{children:e(qt,{src:t,...r})},t)}const At=n.div`
588
588
  margin-bottom: .5rem;
589
589
  margin-top: .5rem;
590
590
  border: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color);
@@ -609,7 +609,7 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
609
609
  max-height: 100%;
610
610
  max-width: 100%;
611
611
  }
612
- `,It=$(null);function Lt(){const e=S(It);if(!e)throw new Error("useContext must be used within a Provider");return e}function Dt({children:t,...r}){return e(It.Provider,{value:r,children:t})}function Pt(e){const[t,r]=q(e);return F(()=>{r(e)},[e]),[t,r]}function Tt({description:r,options:n}){const{resume:i,disabled:o,response:s}=Lt(),[a,l]=Pt(s?.result),c=o||void 0!==a;return t(Ot,{children:[r&&e(Bt,{children:r}),n.map((t,r)=>e(Ut,{$selected:a===t,$disabled:c,onClick:()=>(e=>{c||(l(e),i(e))})(t),children:t},r))]})}const Ot=n.div`
612
+ `,zt=$(null);function Lt(){const e=S(zt);if(!e)throw new Error("useContext must be used within a Provider");return e}function Dt({children:t,...r}){return e(zt.Provider,{value:r,children:t})}function Pt(e){const[t,r]=q(e);return F(()=>{r(e)},[e]),[t,r]}function Tt({description:r,options:n}){const{resume:i,disabled:o,response:s}=Lt(),[a,l]=Pt(s?.result),c=o||void 0!==a;return t(Ot,{children:[r&&e(Bt,{children:r}),n.map((t,r)=>e(Ut,{$selected:a===t,$disabled:c,onClick:()=>(e=>{c||(l(e),i(e))})(t),children:t},r))]})}const Ot=n.div`
613
613
  display: flex;
614
614
  flex-direction: column;
615
615
  gap: 0.5rem;
@@ -644,7 +644,7 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
644
644
  &:active {
645
645
  transform: ${e=>e.$disabled?"none":"scale(0.98)"};
646
646
  }
647
- `;function _t({description:r,fields:n}){const{resume:i,disabled:o,response:s}=Lt(),[a,l]=Pt(void 0!==s),c=o||a,{schema:u,uiSchema:m}=z(()=>{const e={},t=[],r={};for(const i of n)e[i.name]={type:"string",title:i.label,default:i.default},i.placeholder&&(r[i.name]={"ui:placeholder":i.placeholder}),"number"===i.type?(e[i.name].type="number",void 0!==i.default&&(e[i.name].default=Number(i.default))):"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},"string"==typeof i.default&&(e[i.name].default=i.default.split(",")),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(Jt,{className:"rounded bg-white shadow-sm",children:[r&&e(Qt,{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(Ht,{children:t})})]})}const Ht=n.div`
647
+ `;function _t({description:r,fields:n}){const{resume:i,disabled:o,response:s}=Lt(),[a,l]=Pt(void 0!==s),c=o||a,{schema:u,uiSchema:m}=A(()=>{const e={},t=[],r={};for(const i of n)e[i.name]={type:"string",title:i.label,default:i.default},i.placeholder&&(r[i.name]={"ui:placeholder":i.placeholder}),"number"===i.type?(e[i.name].type="number",void 0!==i.default&&(e[i.name].default=Number(i.default))):"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},"string"==typeof i.default&&(e[i.name].default=i.default.split(",")),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(Jt,{className:"rounded bg-white shadow-sm",children:[r&&e(Qt,{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(Ht,{children:t})})]})}const Ht=n.div`
648
648
  display: flex;
649
649
  justify-content: flex-end;
650
650
  border-top: 1px solid var(--bs-border-color);
@@ -700,7 +700,7 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
700
700
  button {
701
701
  padding: .25rem 1.5rem;
702
702
  }
703
- `;function Yt(e){return e instanceof Error&&e.message||String(e)}class Gt extends P{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 Zt({suspend:t}){const{readonly:r,input:n}=$e(),{chunkIndex:i,chunk:o,toolIndex:s,tool:a,isLastMessage:l}=function(){const e=S(Mt);if(!e)throw new Error("useContext must be used within a Provider");return e}(),c=M(e=>{n?.resume({chunk:i,tool:s,payload:e})},[i,n,s]),d=M(e=>{c({error:Yt(e)})},[c]);let u=null;switch(t.type){case"select":u=e(Tt,{...t.select});break;case"form":u=e(_t,{...t.form});break;case"confirm":u=e(Kt,{...t.confirm})}const m=a?.response||o.node?.output;return e(Dt,{resume:c,disabled:r||!!o.error||!l,response:"(Empty)"===m?void 0:m,children:e(Gt,{onRenderError:d,children:u})})}function er({value:t,cite:n}){const i=t=>"string"==typeof t?e(Et,{content:t,cite:n}):"image"===t.type?e(At,{src:t.image}):"suspend"===t.type?e(Zt,{suspend:t.suspend}):null;return Array.isArray(t)?e(r,{children:t.map((t,r)=>e(L,{children:i(t)},r))}):i(t)}const tr=({reasoning:r,loading:n})=>{const[i,o]=q(!1);return F(()=>{n||o(!1)},[n]),e(L,{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(B,{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(Et,{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(B,{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"})]})})})},rr=D(t=>{const{renderReasoning:r}=$e();return r?r({Component:tr,props:t}):e(tr,{...t})}),nr=e=>null==e?"None":"object"==typeof e?JSON.stringify(e,null,2):e;function ir({tool:r,loading:n}){const{logLevel:i="none",renderToolContent:o}=$e(),s="response"in r,a=!s&&!n,{response:l,title:c,content:d,showStatus:u,defaultExpanded:m}=z(()=>{const i=(e=>{try{return JSON.parse(e.arguments)}catch(e){return null}})(r),a=e("span",{className:"text-truncate",children:r.title}),l=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(sr,{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(sr,{className:"border-top p-2",children:nr(r.response)})]})]}),c=r.content&&e(er,{value:r.content});if(o){const e=o({tool:r,args:i,loading:n});if(e)return{title:null===e.title?null:e.title??a,response:null===e.response?null:e.response??l,content:null===e.content?null:e.content??c,showStatus:e.showStatus??!0,defaultExpanded:e.defaultExpanded??!1}}return{title:a,response:l,content:c,showStatus:!0,defaultExpanded:!1}},[r,o]),[h,p]=q(m),g="all"==i&&null!==l;return t(L,{children:[c&&e("div",{className:"mb-2",children:t(or,{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(B,{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 or=n.div`
703
+ `;function Yt(e){return e instanceof Error&&e.message||String(e)}class Gt extends P{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 Zt({suspend:t}){const{readonly:r,input:n}=$e(),{chunkIndex:i,chunk:o,toolIndex:s,tool:a,isLastMessage:l}=function(){const e=S(Mt);if(!e)throw new Error("useContext must be used within a Provider");return e}(),c=M(e=>{n?.resume({chunk:i,tool:s,payload:e})},[i,n,s]),d=M(e=>{c({error:Yt(e)})},[c]);let u=null;switch(t.type){case"select":u=e(Tt,{...t.select});break;case"form":u=e(_t,{...t.form});break;case"confirm":u=e(Kt,{...t.confirm})}const m=a?.response||o.node?.output;return e(Dt,{resume:c,disabled:r||!!o.error||!l,response:"(Empty)"===m?void 0:m,children:e(Gt,{onRenderError:d,children:u})})}function er({value:t,cite:n}){const i=t=>"string"==typeof t?e(Et,{content:t,cite:n}):"image"===t.type?e(It,{src:t.image}):"suspend"===t.type?e(Zt,{suspend:t.suspend}):null;return Array.isArray(t)?e(r,{children:t.map((t,r)=>e(L,{children:i(t)},r))}):i(t)}const tr=({reasoning:r,loading:n})=>{const[i,o]=q(!1);return F(()=>{n||o(!1)},[n]),e(L,{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(B,{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(Et,{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(B,{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"})]})})})},rr=D(t=>{const{renderReasoning:r}=$e();return r?r({Component:tr,props:t}):e(tr,{...t})}),nr=e=>null==e?"None":"object"==typeof e?JSON.stringify(e,null,2):e;function ir({tool:r,loading:n}){const{logLevel:i="none",renderToolContent:o}=$e(),s="response"in r,a=!s&&!n,{response:l,title:c,content:d,showStatus:u,defaultExpanded:m}=A(()=>{const i=(e=>{try{return JSON.parse(e.arguments)}catch(e){return null}})(r),a=e("span",{className:"text-truncate",children:r.title}),l=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(sr,{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(sr,{className:"border-top p-2",children:nr(r.response)})]})]}),c=r.content&&e(er,{value:r.content});if(o){const e=o({tool:r,args:i,loading:n});if(e)return{title:null===e.title?null:e.title??a,response:null===e.response?null:e.response??l,content:null===e.content?null:e.content??c,showStatus:e.showStatus??!0,defaultExpanded:e.defaultExpanded??!1}}return{title:a,response:l,content:c,showStatus:!0,defaultExpanded:!1}},[r,o]),[h,p]=q(m),g="all"==i&&null!==l;return t(L,{children:[c&&e("div",{className:"mb-2",children:t(or,{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(B,{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 or=n.div`
704
704
  width: ${e=>e.$open?"auto":"fit-content"};
705
705
  max-width: 100%;
706
706
  overflow: hidden;
@@ -715,12 +715,12 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
715
715
  }
716
716
  `,dr=n.span`
717
717
  display: inline-block;
718
- `;function ur({nodes:r,loading:n}){const[i,o]=q(!1),s=r.some(e=>"error"in e),a=n?e(B,{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(ar,{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 mr=D(A(({chunks:r,loading:n,cite:i,isLast:o=!1,deleted:s=!1},a)=>{const{logLevel:l="none"}=$e(),c=z(()=>r.flatMap(e=>e.node?[e.node]:[]),[r]);return t(hr,{ref:a,$deleted:s,children:["all"===l&&c.length>0&&e(ur,{loading:n,nodes:c}),r.map((r,s)=>t(L,{children:[r.reasoning&&["stats","all"].includes(l)&&e(rr,{reasoning:r.reasoning,loading:n&&!r.content&&0===(r.tools||[]).length}),r.content&&e(Ft,{value:{chunkIndex:s,chunk:r,isLastMessage:o},children:e(er,{cite:i,value:r.content})}),(r.tools||[]).map((t,i)=>e(Ft,{value:{chunkIndex:s,chunk:r,toolIndex:i,tool:t,isLastMessage:o},children:e(ir,{tool:t,loading:n})},i)),r.error&&e(Et,{content:`[${r.error}]`})]},s))]})})),hr=n.div`
718
+ `;function ur({nodes:r,loading:n}){const[i,o]=q(!1),s=r.some(e=>"error"in e),a=n?e(B,{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(ar,{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 mr=D(I(({chunks:r,loading:n,cite:i,isLast:o=!1,deleted:s=!1},a)=>{const{logLevel:l="none"}=$e(),c=A(()=>r.flatMap(e=>e.node?[e.node]:[]),[r]);return t(hr,{ref:a,$deleted:s,children:["all"===l&&c.length>0&&e(ur,{loading:n,nodes:c}),r.map((r,s)=>t(L,{children:[r.reasoning&&["stats","all"].includes(l)&&e(rr,{reasoning:r.reasoning,loading:n&&!r.content&&0===(r.tools||[]).length}),r.content&&e(Ft,{value:{chunkIndex:s,chunk:r,isLastMessage:o},children:e(er,{cite:i,value:r.content})}),(r.tools||[]).map((t,i)=>e(Ft,{value:{chunkIndex:s,chunk:r,toolIndex:i,tool:t,isLastMessage:o},children:e(ir,{tool:t,loading:n})},i)),r.error&&e(Et,{content:`[${r.error}]`})]},s))]})})),hr=n.div`
719
719
  ${e=>e.$deleted&&o`
720
720
  text-decoration-line: line-through;
721
721
  color: var(--bs-secondary);
722
722
  `}
723
- `;class pr{#t;#o=[];#s=0;constructor(){this.#t=new W}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 gr=new Map;class fr{#r;#t;#o=[];#a=new Map;#l=!1;#s=0;#c=!1;constructor(e){this.#r=e,this.#t=new W}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?(gr.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),gr.delete(this)}start(e,t=!1){gr.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=gr.get(this);e&&(e.pause(),e.currentTime=0)}onPlaying(e){this.#t.on("playing",e)}onSpeaking(e){this.#t.on("speaking",e)}}function br({text:e,loading:t,loader:r}){const n=R(),[i,o]=q(!1),[s,a]=q(!1),l=R(t),c=async(i=!1)=>{n.current||(n.current=r?new fr(r):new pr,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 F(()=>{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]),F(()=>()=>{n.current&&(n.current.stop(),n.current=void 0)},[]),{playing:s,speaking:i,start:c,stop:()=>{n.current&&n.current.stop()}}}function vr({model:r="builtin",voice:n,loading:i,autoplay:o,contentRef:s,avatarRef:a}){const{request:l}=$e(),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}=br({loader:c,text:s,loading:o&&i});let p=null;return a.current&&(u&&(p=le(e(yr,{children:e(B,{size:"sm",variant:"light"})}),a.current)),d&&(p=le(e(yr,{children:e(xr,{className:"bi bi-volume-down-fill text-light"})}),a.current))),t(St,{disabled:i&&!d,onClick:()=>{d?h():m()},children:[d?e(xr,{className:"bi bi-volume-down-fill"}):u?e(B,{size:"sm",variant:"primary"}):e(xr,{className:"bi bi-volume-down"}),p]})}const yr=n.div`
723
+ `;class pr{#t;#o=[];#s=0;constructor(){this.#t=new W}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 gr=new Map;class fr{#r;#t;#o=[];#a=new Map;#l=!1;#s=0;#c=!1;constructor(e){this.#r=e,this.#t=new W}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?(gr.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),gr.delete(this)}start(e,t=!1){gr.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=gr.get(this);e&&(e.pause(),e.currentTime=0)}onPlaying(e){this.#t.on("playing",e)}onSpeaking(e){this.#t.on("speaking",e)}}function br({text:e,loading:t,loader:r}){const n=R(),[i,o]=q(!1),[s,a]=q(!1),l=R(t),c=async(i=!1)=>{n.current||(n.current=r?new fr(r):new pr,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 F(()=>{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]),F(()=>()=>{n.current&&(n.current.stop(),n.current=void 0)},[]),{playing:s,speaking:i,start:c,stop:()=>{n.current&&n.current.stop()}}}function vr({model:r="builtin",voice:n,loading:i,autoplay:o,contentRef:s,avatarRef:a}){const{request:l}=$e(),c=A(()=>{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}=br({loader:c,text:s,loading:o&&i});let p=null;return a.current&&(u&&(p=le(e(yr,{children:e(B,{size:"sm",variant:"light"})}),a.current)),d&&(p=le(e(yr,{children:e(xr,{className:"bi bi-volume-down-fill text-light"})}),a.current))),t(St,{disabled:i&&!d,onClick:()=>{d?h():m()},children:[d?e(xr,{className:"bi bi-volume-down-fill"}):u?e(B,{size:"sm",variant:"primary"}):e(xr,{className:"bi bi-volume-down"}),p]})}const yr=n.div`
724
724
  position: absolute;
725
725
  top: 0;
726
726
  left: 0;
@@ -735,7 +735,7 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
735
735
  &::before {
736
736
  transform: scale(1.4)
737
737
  }
738
- `,wr=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,renderFileItem:y}=$e(),x=z(()=>m?m.reduce(function(e,t){const r=Array.isArray(t.content)?t.content.reduce((e,t)=>{const r=ft(t);return r?e+r+"\n":e},""):ft(t.content);return e+r+"\n"+(t.tools||[]).reduce((e,t)=>{if(t.content){const r=ft(t.content);if(r)return e+r+"\n"}return e},"")},""):"",[m]),k=R(null),N=R(null),j=R(null),C=c||u.length>0;return t(r,{children:[C&&t(Fr,{$reverse:!0,children:[g&&t(r,{children:[e(Sr,{children:e("img",{src:g.avatar})}),e(Rr,{})]}),t(Mr,{ref:k,children:[c&&e(Et,{content:c}),d&&e(Q,{trigger:"click",container:k,rootClose:!0,placement:"bottom",overlay:e(kr,{body:!0,children:d}),children:e(Nr,{children:e(Er,{children:d})})}),u.length>0&&u.map(({name:t,size:r,path:n},i)=>{if(E(n))return e(At,{src:`/uploads/${n}`},i);const o={name:t,url:`/uploads/${n}`,size:r};return e(jr,{children:y?y({Component:be,props:o}):e(be,{...o})},i)})]})]}),m&&t(Fr,{children:[f&&t(r,{children:[e(Sr,{ref:N,children:e("img",{src:f.avatar})}),e(Rr,{})]}),t(Mr,{children:[C&&!1!==i&&t(Cr,{children:[e(w,{placement:"top",content:x,as:St,tooltip:!0}),a&&e(vr,{loading:n.loading,avatarRef:N,contentRef:j,...a}),i?.({Component:St,message:n,content:x,setMessage:o,messages:v})]}),e($r,{children:["stats","all"].includes(b)&&n.stats&&t(r,{children:[t("span",{children:["耗时 ",n.stats.latency/1e3," 秒"]}),t("span",{children:["花费 Token ",n.stats.usage]})]})}),e(mr,{ref:j,chunks:m,loading:p,isLast:l,cite:s,deleted:!!h}),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(Et,{content:h.answer})]}),n.loading&&e(gt,{})]})]})]})}),kr=n(K)`
738
+ `,wr=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,renderFileItem:y}=$e(),x=A(()=>m?m.reduce(function(e,t){const r=Array.isArray(t.content)?t.content.reduce((e,t)=>{const r=ft(t);return r?e+r+"\n":e},""):ft(t.content);return e+r+"\n"+(t.tools||[]).reduce((e,t)=>{if(t.content){const r=ft(t.content);if(r)return e+r+"\n"}return e},"")},""):"",[m]),k=R(null),N=R(null),j=R(null),C=c||u.length>0;return t(r,{children:[C&&t(Fr,{$reverse:!0,children:[g&&t(r,{children:[e(Sr,{children:e("img",{src:g.avatar})}),e(Rr,{})]}),t(Mr,{ref:k,children:[c&&e(Et,{content:c}),d&&e(Q,{trigger:"click",container:k,rootClose:!0,placement:"bottom",overlay:e(kr,{body:!0,children:d}),children:e(Nr,{children:e(Er,{children:d})})}),u.length>0&&u.map(({name:t,size:r,path:n},i)=>{if(E(n))return e(It,{src:`/uploads/${n}`},i);const o={name:t,url:`/uploads/${n}`,size:r};return e(jr,{children:y?y({Component:be,props:o}):e(be,{...o})},i)})]})]}),m&&t(Fr,{children:[f&&t(r,{children:[e(Sr,{ref:N,children:e("img",{src:f.avatar})}),e(Rr,{})]}),t(Mr,{children:[C&&!1!==i&&t(Cr,{children:[e(w,{placement:"top",content:x,as:St,tooltip:!0}),a&&e(vr,{loading:n.loading,avatarRef:N,contentRef:j,...a}),i?.({Component:St,message:n,content:x,setMessage:o,messages:v})]}),e($r,{children:["stats","all"].includes(b)&&n.stats&&t(r,{children:[t("span",{children:["耗时 ",n.stats.latency/1e3," 秒"]}),t("span",{children:["花费 Token ",n.stats.usage]})]})}),e(mr,{ref:j,chunks:m,loading:p,isLast:l,cite:s,deleted:!!h}),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(Et,{content:h.answer})]}),n.loading&&e(gt,{})]})]})]})}),kr=n(K)`
739
739
  max-width: calc(100% - .875rem * 2);
740
740
  width: calc(100% - .875rem * 2);
741
741
  font-size: 1rem;
@@ -836,12 +836,12 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
836
836
  background: rgba(var(--bs-primary-rgb), 0.1);
837
837
  }
838
838
  `};
839
- `;function qr(r){const{placeholder:n,actions:i,cite:o,speech:s,renderItem:a,scrollRef:l}=r,{messages:c,setMessages:d,loading:u,suggestions:m,conversationId:p}=$e(),g=R(r.loaded),f=R(!0),b=R(!1);F(()=>{const e=l.current;if(!e)return;const t=()=>{b.current=!0},r=()=>{if(!b.current)return;const t=e.scrollHeight-e.scrollTop-e.clientHeight<50;f.current=t,t&&(b.current=!1)};return e.addEventListener("wheel",t,{passive:!0}),e.addEventListener("touchstart",t,{passive:!0}),e.addEventListener("scroll",r,{passive:!0}),()=>{e.removeEventListener("wheel",t),e.removeEventListener("touchstart",t),e.removeEventListener("scroll",r)}},[l]);const v=h(()=>{if(!f.current)return;const e=l.current;e&&requestAnimationFrame(()=>{e.scrollTo({top:e.scrollHeight})})},200),y=R(null),{height:x}=ce({ref:y});F(()=>{(u||!g.current)&&c.length>0&&(u&&(g.current=!0),v())},[x,u,g,c]),F(()=>{m.length>0&&v()},[m]),F(()=>{g.current=r.loaded},[p]),F(()=>{const e=y.current;if(e){const t=()=>{g.current=!0};return e.addEventListener("click",t),()=>{e.removeEventListener("click",t)}}},[y]);const w=c.slice(-30);return t(Ar,{ref:y,children:[0===w.length&&n,w.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===w.length-1};return a?e(L,{children:a({Component:wr,props:n})},r):e(wr,{...n},r)}),m.length>0&&e(zr,{children:m.map((t,r)=>e("a",{href:"#!question",children:t},r))})]})}const Ar=n.div`
839
+ `;function qr(r){const{placeholder:n,actions:i,cite:o,speech:s,renderItem:a,scrollRef:l}=r,{messages:c,setMessages:d,loading:u,suggestions:m,conversationId:p}=$e(),g=R(r.loaded),f=R(!0),b=R(!1);F(()=>{const e=l.current;if(!e)return;const t=()=>{b.current=!0},r=()=>{if(!b.current)return;const t=e.scrollHeight-e.scrollTop-e.clientHeight<50;f.current=t,t&&(b.current=!1)};return e.addEventListener("wheel",t,{passive:!0}),e.addEventListener("touchstart",t,{passive:!0}),e.addEventListener("scroll",r,{passive:!0}),()=>{e.removeEventListener("wheel",t),e.removeEventListener("touchstart",t),e.removeEventListener("scroll",r)}},[l]);const v=h(()=>{if(!f.current)return;const e=l.current;e&&requestAnimationFrame(()=>{e.scrollTo({top:e.scrollHeight})})},200),y=R(null),{height:x}=ce({ref:y});F(()=>{(u||!g.current)&&c.length>0&&(u&&(g.current=!0),v())},[x,u,g,c]),F(()=>{m.length>0&&v()},[m]),F(()=>{g.current=r.loaded},[p]),F(()=>{const e=y.current;if(e){const t=()=>{g.current=!0};return e.addEventListener("click",t),()=>{e.removeEventListener("click",t)}}},[y]);const w=c.slice(-30);return t(Ir,{ref:y,children:[0===w.length&&n,w.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===w.length-1};return a?e(L,{children:a({Component:wr,props:n})},r):e(wr,{...n},r)}),m.length>0&&e(Ar,{children:m.map((t,r)=>e("a",{href:"#!question",children:t},r))})]})}const Ir=n.div`
840
840
  display: flex;
841
841
  flex-direction: column;
842
842
  flex: 1;
843
843
  margin-bottom: .5rem;
844
- `,zr=n.div`
844
+ `,Ar=n.div`
845
845
  display: flex;
846
846
  flex-direction: column;
847
847
  align-items: flex-start;
@@ -858,7 +858,7 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
858
858
  background: var(--bs-secondary-bg-subtle);
859
859
  }
860
860
  }
861
- `,Ir=D(A(({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=ct},C)=>{const $=M(e=>{const t=[];if(u&&!1!==u.enable){const e=dt(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,F]=q(m?.id),[A,L]=q(),[D,P]=v(()=>$(m)),[T,O]=q(!1),B=R(),[U,_]=q("0px"),[H,J]=q([]),Q=M(e=>{"suggestion"==e.type&&J(e.data),o?.onEvent?.(e)},[o?.onEvent]),K=M(e=>{F(e?.id),P($(e)),J([]),O(!1),E?.(e)},[T,$,E]);return I(C,()=>({reset:K}),[K]),e(Re,{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:F,input:A,setInput:L,messages:D,setMessages:P,suggestions:H,setSuggestions:J,loading:T,setLoading:O,renderFileItem:f,reset:K,readonly:!o,renderToolContent:b,renderReasoning:y,children:e(x,{children:e(Pr,{className:r,scrollableNodeProps:{ref:M(e=>{B.current=e;const t=e?.firstElementChild;t&&requestAnimationFrame(()=>{const e=window.getComputedStyle(t);_(e.paddingBottom)})},[])},children:t(Dr,{children:[e(qr,{placeholder:c,cite:h,actions:d,loaded:!o,speech:p,renderItem:g,scrollRef:B}),o&&e(Lr,{$bottom:U,...o,onEvent:Q,scrollRef:B})]})})})})}),V),Lr=n(et)`
861
+ `,zr=D(I(({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=ct},C)=>{const $=M(e=>{const t=[];if(u&&!1!==u.enable){const e=dt(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,F]=q(m?.id),[I,L]=q(),[D,P]=v(()=>$(m)),[T,O]=q(!1),B=R(),[U,_]=q("0px"),[H,J]=q([]),Q=M(e=>{"suggestion"==e.type&&J(e.data),o?.onEvent?.(e)},[o?.onEvent]),K=M(e=>{F(e?.id),P($(e)),J([]),O(!1),E?.(e)},[T,$,E]);return z(C,()=>({reset:K}),[K]),e(Re,{request:A(()=>k?"string"==typeof k?N.create({baseURL:k}):k:N,[k]),bot:n,user:i,logLevel:s,imageResolver:a,nodeIconResolver:l,conversationId:S,setConversationId:F,input:I,setInput:L,messages:D,setMessages:P,suggestions:H,setSuggestions:J,loading:T,setLoading:O,renderFileItem:f,reset:K,readonly:!o,renderToolContent:b,renderReasoning:y,children:e(x,{children:e(Pr,{className:r,scrollableNodeProps:{ref:M(e=>{B.current=e;const t=e?.firstElementChild;t&&requestAnimationFrame(()=>{const e=window.getComputedStyle(t);_(e.paddingBottom)})},[])},children:t(Dr,{children:[e(qr,{placeholder:c,cite:h,actions:d,loaded:!o,speech:p,renderItem:g,scrollRef:B}),o&&e(Lr,{$bottom:U,...o,onEvent:Q,scrollRef:B})]})})})})}),V),Lr=n(et)`
862
862
  position: sticky;
863
863
  bottom: 0;
864
864
  z-index: 1;
@@ -881,4 +881,4 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
881
881
  display: flex;
882
882
  flex-direction: column;
883
883
  }
884
- `,Tr=D(A(({className:t,request:r,disabled:n,supportStop:i,fileTypes:o,speech:s,minRows:a,maxRows:l,toolbar:c,toolbarActions:d,tools:u,autoFocus:m,renderEditableInput:h,placeholder:p,variables:g,onEvent:f,onNewConversation:b},v)=>{const[y,x]=q(!1);return e(Se,{request:z(()=>r?"string"==typeof r?N.create({baseURL:r}):r:N,[r]),loading:y,setLoading:x,children:e(et,{ref:v,className:t,fileTypes:o,speech:s,variables:g,minRows:a,maxRows:l,toolbar:c,toolbarActions:d,tools:u,disabled:n,autoFocus:m,renderEditableInput:h,placeholder:p,supportStop:i,onEvent:f,onNewConversation:b})})}),V);async function Or(e){const t=await de().use(me).use(re).use(ne).use(ie).use(he).use(ue).process(e);return String(t)}export{Le as ActionButton,Tr as ChatInput,mr as Chunks,Ge as EditableInput,ge as FileIcon,be as FileItem,Fe as InputButton,Et as Markdown,Ir as MessageBox,Me as VariableForm,pe as isToolMessage,Or as md2html,dt as pickQuestions,$e as useMessageContext,br as useSynthesis};
884
+ `,Tr=D(I(({className:t,request:r,disabled:n,supportStop:i,fileTypes:o,speech:s,minRows:a,maxRows:l,toolbar:c,toolbarActions:d,tools:u,autoFocus:m,renderEditableInput:h,placeholder:p,variables:g,onEvent:f,onNewConversation:b},v)=>{const[y,x]=q(!1),[w,k]=q();return e(Se,{request:A(()=>r?"string"==typeof r?N.create({baseURL:r}):r:N,[r]),loading:y,setLoading:x,input:w,setInput:k,children:e(et,{ref:v,className:t,fileTypes:o,speech:s,variables:g,minRows:a,maxRows:l,toolbar:c,toolbarActions:d,tools:u,disabled:n,autoFocus:m,renderEditableInput:h,placeholder:p,supportStop:i,onEvent:f,onNewConversation:b})})}),V);async function Or(e){const t=await de().use(me).use(re).use(ne).use(ie).use(he).use(ue).process(e);return String(t)}export{Le as ActionButton,Tr as ChatInput,mr as Chunks,Ge as EditableInput,ge as FileIcon,be as FileItem,Fe as InputButton,Et as Markdown,zr as MessageBox,Me as VariableForm,pe as isToolMessage,Or as md2html,dt as pickQuestions,je as useChatContext,$e as useMessageContext,br as useSynthesis};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@topthink/chat",
3
- "version": "1.3.16",
3
+ "version": "1.3.17",
4
4
  "scripts": {
5
5
  "prebuild": "rimraf es types",
6
6
  "build": "rollup -c --environment NODE_ENV:production",
@@ -71,5 +71,5 @@
71
71
  },
72
72
  "author": "yunwuxin <tzzhangyajun@qq.com> (https://github.com/yunwuxin)",
73
73
  "license": "MIT",
74
- "gitHead": "fa3fc03f578ec279c71aaad91c67128fba780e00"
74
+ "gitHead": "794626b6e35378ab88f63cf25489ee2647e55620"
75
75
  }
@@ -26,6 +26,8 @@ interface ChatContextType {
26
26
  request: RequestInstance;
27
27
  loading: boolean;
28
28
  setLoading: Dispatch<SetStateAction<boolean>>;
29
+ input?: Input;
30
+ setInput: Dispatch<SetStateAction<Input | undefined>>;
29
31
  }
30
32
  interface DisplayContextType {
31
33
  bot?: {
@@ -41,8 +43,6 @@ interface DisplayContextType {
41
43
  nodeIconResolver?: (type: string) => ReactNode;
42
44
  reset: (conversation?: Conversation) => void;
43
45
  readonly: boolean;
44
- input?: Input;
45
- setInput: Dispatch<SetStateAction<Input | undefined>>;
46
46
  conversationId?: string;
47
47
  setConversationId: Dispatch<SetStateAction<string | undefined>>;
48
48
  messages: Message[];
package/types/index.d.ts CHANGED
@@ -2,7 +2,7 @@ export * from './types';
2
2
  export { default as MessageBox, MessageBoxProps } from './components/message-box';
3
3
  export { default as ChatInput, ChatInputProps } from './components/chat-input';
4
4
  export { default as Chunks, ChunksProps } from './components/message-box/chunks';
5
- export { useContext as useMessageContext, ToolRenderOptions, ToolRenderResult } from './components/message-box/context';
5
+ export { useContext as useMessageContext, useChatContext, ToolRenderOptions, ToolRenderResult, } from './components/message-box/context';
6
6
  export { default as EditableInput } from './components/message-box/input-box/editable-input';
7
7
  export type { EditableInputProps, EditableInputRef } from './components/message-box/input-box/editable-input';
8
8
  export type { EditableInputComponent, RenderEditableInput } from './components/message-box/input-box';