@topthink/chat 1.2.6 → 1.2.7
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
|
@@ -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(
|
|
68
|
+
`,ke=[".txt",".md",".pdf",".docx",".xlsx",".pptx",".png",".jpg"];function Ee({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 Ne=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
|
|
99
|
+
`;let je=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)}},Ce=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 $e=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 Ce(t):new je,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(Ne,{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(T)`
|
|
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
|
-
`,
|
|
104
|
+
`,Se=R(({className:t,children:r,size:n,tooltip:i,placement:o,onClick:a,onMouseDown:l},c)=>{const d=e(qe,{ref:c,className:t,onClick:a,onMouseDown:l,$size:n,children:r});return i?e(s,{tooltip:i,placement:o,children:d}):d}),qe=n.div`
|
|
105
105
|
width: 2rem;
|
|
106
106
|
height: 2rem;
|
|
107
107
|
align-items: center;
|
|
@@ -125,10 +125,10 @@ 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
|
|
128
|
+
`;function Fe(){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(Se,{tooltip:"历史记录",placement:"top",onClick:()=>a(!0),children:e("i",{className:"bi bi-clock-history"})}),e(p,{show:s,onHide:()=>{a(!1)},placement:"end",headerAs:De,header:t(r,{children:[e("span",{children:"聊天历史记录"}),e(Le,{children:e(U,{type:"search",placeholder:"搜索聊天记录...",value:l,onChange:e=>c(e.target.value),autoFocus:!0})})]}),bodyAs:Re,children:s&&e(Ae,{children:e(Ie,{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(ze,{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:Se,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 Re=n.div`
|
|
129
129
|
padding: 0;
|
|
130
130
|
overflow: hidden;
|
|
131
|
-
`,
|
|
131
|
+
`,ze=n.div`
|
|
132
132
|
gap: .5rem;
|
|
133
133
|
display: flex;
|
|
134
134
|
cursor: pointer;
|
|
@@ -147,33 +147,33 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
|
|
|
147
147
|
display: block;
|
|
148
148
|
}
|
|
149
149
|
}
|
|
150
|
-
`,
|
|
150
|
+
`,Ie=n(m)`
|
|
151
151
|
display: flex;
|
|
152
152
|
flex-direction: column;
|
|
153
153
|
padding: .5rem;
|
|
154
|
-
`,
|
|
154
|
+
`,Ae=n.div`
|
|
155
155
|
height: 100%;
|
|
156
156
|
overflow-y: auto;
|
|
157
|
-
`,
|
|
157
|
+
`,De=n.div`
|
|
158
158
|
display: flex;
|
|
159
159
|
align-items: center;
|
|
160
160
|
justify-content: space-between;
|
|
161
161
|
gap: 0.5rem;
|
|
162
162
|
flex: 1;
|
|
163
163
|
margin-right: .5rem;
|
|
164
|
-
`,
|
|
164
|
+
`,Le=n.div`
|
|
165
165
|
display: flex;
|
|
166
166
|
align-items: center;
|
|
167
167
|
gap: 0.5rem;
|
|
168
|
-
`;var
|
|
168
|
+
`;var Pe;function Te(){return Te=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},Te.apply(null,arguments)}const Oe=e=>j.createElement("svg",Te({width:"1em",height:"1em",fill:"currentColor",viewBox:"0 0 256 256"},e),Pe||(Pe=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 Be(){const{reset:t}=he();return e(Se,{className:"text-primary",tooltip:"新会话",placement:"top",onClick:t,children:e(Oe,{})})}function Ue({children:r,actions:n}){return t(He,{children:[r,t(_e,{children:[n,e(Fe,{}),e(Be,{})]})]})}const _e=n.div`
|
|
169
169
|
display: flex;
|
|
170
170
|
gap: .25rem;
|
|
171
171
|
margin-left: auto;
|
|
172
|
-
`,
|
|
172
|
+
`,He=n.div`
|
|
173
173
|
margin-bottom: .5rem;
|
|
174
174
|
display: flex;
|
|
175
175
|
padding: 0 .125rem;
|
|
176
|
-
`;var
|
|
176
|
+
`;var Qe=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(Je,{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 Je=n(K)`
|
|
177
177
|
min-height: calc(1.5em + 1rem);
|
|
178
178
|
width: 100%;
|
|
179
179
|
padding: 0.5rem 0.5rem 0.5rem 0.75rem;
|
|
@@ -183,14 +183,14 @@ 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
|
|
186
|
+
`;var Ke=R(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=q(null),N=q(null),j=q(null),[C,$]=S(""),[R,A]=S(""),[D,P]=v([]),[T,O]=S(!1),B=n&&n.length>0?n:ke,{send:U,resume:H,stop:Q,suggest:J}=function(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}}({supportStop:x}),K=z(()=>({onSuccess(){r&&J()},onComplete(){requestAnimationFrame(()=>{j.current?.focus()})},onEvent:w}),[r,w]),{messages:W,loading:X,request:V,setInput:Y}=he(K),[G,Z]=S();M(()=>{const e=W.filter(e=>!!e.query);Z(e.at(-1)?.variables)},[W]),M(()=>{!n&&D.length>0&&P([])},[n]),M(()=>{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=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=>!(!B.includes("*")&&!B.includes(L.extname(e.name)))&&!(e.size>20971520)).slice(0,6-D.length);return 0!==t.length&&(P(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});P(t=>{const n=t.find(t=>t.file===e);n&&(n.path=r.path)})}catch(t){const r=c(t)?t.message:"unknown error";P(t=>{const n=t.find(t=>t.file===e);n&&(n.error=r)})}}),!0)},[D.length,B,V,P]),te=F(({target:e})=>{e.files&&ee(Array.from(e.files)),e.value=""},[ee]),re=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&&ee(n)&&e.preventDefault()},[ee]),ne=D.flatMap(({file:e,path:t})=>t?[{name:e.name,size:e.size,path:t}]:[]),ie=F(()=>{if(C||ne.length>0){const e={query:C,files:ne};a&&(e.variables={...G,...a.values}),R&&(e.quote=R),U(e),j.current?.setContent(""),A(""),P([]),N.current?.stop(!0)}},[C,ne,a,G,R]),oe=z(()=>({setQuery(e){j.current?.setContent(e)},setQuote:A,send:U,resume:H,focus(){j.current?.focus()}}),[A,U,H]);if(M(()=>{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(Xe,{children:e(We,{children:e(Ee,{values:G,variables:t,onSubmit:({formData:e})=>{if(r(e,!0))return Z(e),!0}})})})}return t(rt,{children:[h&&e(Ue,{actions:p,children:h}),t(tt,{$focused:T&&!X,children:[D.length>0&&e(Ye,{children:D.map(({file:t,error:r,path:n},i)=>{const o=void 0===r&&void 0===n;return e(Ve,{name:t.name,size:t.size,error:r,loading:o,onRemove:()=>{P(e=>{const r=e.findIndex(e=>e.file===t);-1!==r&&e.splice(r,1)})}},i)})}),!!R&&t(et,{children:[e("i",{className:"bi bi-quote"}),e("p",{children:R}),e(_,{onClick:()=>A("")})]}),t(Ge,{children:[b?.({Component:Qe,props:{ref:j,readonly:X||g,autoFocus:f,placeholder:y,minRows:d,maxRows:m,onSubmit:ie,onFocusedChange:O,onQueryChange:$,onPaste:re}})||e(Qe,{ref:j,readonly:X||g,autoFocus:f,placeholder:y,minRows:d,maxRows:m,onSubmit:ie,onFocusedChange:O,onQueryChange:$,onPaste:re}),t(Ze,{children:[n&&e(s,{tooltip:"可上传不超过6个小于20MB的文件",placement:"top",children:t(Ne,{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($e,{ref:N,model:i.model,onResult:e=>{j.current?.setContent(t=>t+e+" ")}}),e(Ne,{$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 We=n.div`
|
|
187
187
|
border-radius: var(--bs-border-radius-lg);
|
|
188
188
|
box-shadow: var(--bs-box-shadow-sm);
|
|
189
189
|
margin: 1rem;
|
|
190
190
|
padding: 1rem;
|
|
191
191
|
width: 100%;
|
|
192
192
|
max-width: 500px;
|
|
193
|
-
`,
|
|
193
|
+
`,Xe=n.div`
|
|
194
194
|
position: absolute;
|
|
195
195
|
left: 0;
|
|
196
196
|
right: 0;
|
|
@@ -200,25 +200,25 @@ 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
|
-
`,
|
|
203
|
+
`,Ve=n(be)`
|
|
204
204
|
width: calc((100% - 0.75rem) / 2);
|
|
205
|
-
`,
|
|
205
|
+
`,Ye=n.div`
|
|
206
206
|
display: flex;
|
|
207
207
|
flex-wrap: wrap;
|
|
208
208
|
padding: 0.75rem;
|
|
209
209
|
gap: 0.75rem;
|
|
210
210
|
border-bottom: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color);
|
|
211
|
-
`,
|
|
211
|
+
`,Ge=n.div`
|
|
212
212
|
display: flex;
|
|
213
213
|
gap: 0.25rem;
|
|
214
214
|
align-items: end;
|
|
215
215
|
flex-direction: row;
|
|
216
|
-
`,
|
|
216
|
+
`,Ze=n.div`
|
|
217
217
|
display: flex;
|
|
218
218
|
flex-direction: row;
|
|
219
219
|
gap: 0.25rem;
|
|
220
220
|
padding: 0.375rem 0.5rem 0.375rem 0.5rem;
|
|
221
|
-
`,
|
|
221
|
+
`,et=n.div`
|
|
222
222
|
margin: 0.75rem 0.75rem 0 0.75rem;
|
|
223
223
|
padding: 4px 8px;
|
|
224
224
|
display: flex;
|
|
@@ -239,14 +239,14 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
|
|
|
239
239
|
-webkit-box-orient: vertical;
|
|
240
240
|
display: -webkit-box;
|
|
241
241
|
}
|
|
242
|
-
`,
|
|
242
|
+
`,tt=n.div`
|
|
243
243
|
background: #fff;
|
|
244
244
|
border: var(--bs-border-width) var(--bs-border-style) ${e=>e.$focused?"var(--bs-primary)":"var(--bs-border-color)"};
|
|
245
245
|
border-radius: var(--bs-border-radius-lg);
|
|
246
246
|
box-shadow: 0.125rem 0.25rem 0.5rem rgba(0, 0, 0, 0.1);
|
|
247
|
-
`,
|
|
247
|
+
`,rt=n.div`
|
|
248
248
|
margin: 0 1rem 1rem;
|
|
249
|
-
`;function
|
|
249
|
+
`;function nt(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 it(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 ot,st,at;function lt(){return lt=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},lt.apply(null,arguments)}const ct=e=>j.createElement("svg",lt({xmlns:"http://www.w3.org/2000/svg",width:20,height:10,fill:"#fff",viewBox:"0 0 120 30"},e),ot||(ot=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"}))),st||(st=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"}))),at||(at=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 dt(e){if(!e)return"";if("string"==typeof e)return e;if("image"===e.type){return`})`}return""}const ut=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))}},mt=function(){const e=this.data();e.micromarkExtensions.push({text:{[re.leftSquareBracket]:{tokenize:ut}}}),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}}})},ht=x.Image,pt={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(xt,{children:[t(yt,{children:[!i&&e(w,{tooltip:!1,as:vt,content:a}),s&&i&&e(vt,{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(vt,{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(ht,{...r})},gt=[[te,{singleDollarTextMath:!1}],ee,Z],ft=[G,[Y,{detect:!1,ignoreMissing:!0}]],bt=D(R(({content:t,components:r,cite:n},i)=>{t=t.replace(/\\\(\s(.+?)\s\\\)/g,"$$$$ $1 $$$$");const o=z(()=>{const e={...pt,...r};return n&&(e.cite=n),e},[r,n]),s=z(()=>n?[...gt,mt]:gt,[n]);return e(wt,{ref:i,children:e(V,{remarkPlugins:s,rehypePlugins:ft,components:o,children:t})})}),W),vt=n.div`
|
|
250
250
|
cursor: pointer;
|
|
251
251
|
padding: 2px 10px;
|
|
252
252
|
background-color: #303030;
|
|
@@ -256,7 +256,7 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
|
|
|
256
256
|
font-size: 12px;
|
|
257
257
|
font-family: initial;
|
|
258
258
|
user-select: none;
|
|
259
|
-
`,
|
|
259
|
+
`,yt=n.div`
|
|
260
260
|
position: absolute;
|
|
261
261
|
right: 10px;
|
|
262
262
|
top: 1em;
|
|
@@ -270,17 +270,17 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
|
|
|
270
270
|
&:hover {
|
|
271
271
|
opacity: 1;
|
|
272
272
|
}
|
|
273
|
-
`,
|
|
273
|
+
`,xt=n.div`
|
|
274
274
|
position: relative;
|
|
275
275
|
|
|
276
276
|
&:hover {
|
|
277
|
-
${
|
|
277
|
+
${yt} {
|
|
278
278
|
pointer-events: all;
|
|
279
279
|
transform: translateX(0px);
|
|
280
280
|
opacity: 0.7;
|
|
281
281
|
}
|
|
282
282
|
}
|
|
283
|
-
`,
|
|
283
|
+
`,wt=n.div`
|
|
284
284
|
-ms-text-size-adjust: 100%;
|
|
285
285
|
-webkit-text-size-adjust: 100%;
|
|
286
286
|
line-height: 1.8;
|
|
@@ -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
|
|
553
|
+
`;var kt=R(function({children:t,tooltip:r,onClick:n,disabled:i,...o},a){i&&(n=void 0);const l=e(Et,{ref:a,onClick:n,$disabled:i,...o,children:t});return r?e(s,{tooltip:r,placement:"top",children:l}):l});const Et=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
|
-
`,
|
|
586
|
+
`,Nt=C(null);var jt=Nt.Provider;const Ct=x.Image;function $t({src:t,...r}){const{imageResolver:n}=he();return n&&t&&(t=n(t)),e(Mt,{children:e(Ct,{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
|
-
`,
|
|
611
|
+
`,St=C(null);function qt(){const e=$(St);if(!e)throw new Error("useContext must be used within a Provider");return e}function Ft({children:t,...r}){return e(St.Provider,{value:r,children:t})}function Rt(e){const[t,r]=S(e);return M(()=>{r(e)},[e]),[t,r]}function zt({description:r,options:n}){const{resume:i,disabled:o,response:s}=qt(),[a,l]=Rt(s?.result),c=o||void 0!==a;return t(It,{children:[r&&e(At,{children:r}),n.map((t,r)=>e(Dt,{$selected:a===t,$disabled:c,onClick:()=>(e=>{c||(l(e),i(e))})(t),children:t},r))]})}const It=n.div`
|
|
612
612
|
display: flex;
|
|
613
613
|
flex-direction: column;
|
|
614
614
|
gap: 0.5rem;
|
|
@@ -621,10 +621,10 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
|
|
|
621
621
|
&:last-child {
|
|
622
622
|
margin-bottom: 0;
|
|
623
623
|
}
|
|
624
|
-
`,
|
|
624
|
+
`,At=n.div`
|
|
625
625
|
color: var(--bs-secondary);
|
|
626
626
|
line-height: 1.5;
|
|
627
|
-
`,
|
|
627
|
+
`,Dt=n.div`
|
|
628
628
|
padding: 0.375rem 0.75rem;
|
|
629
629
|
background-color: ${e=>e.$selected?"rgba(var(--bs-primary-rgb), 0.1)":"#FFFFFF"};
|
|
630
630
|
border: 1px solid ${e=>e.$selected?"rgba(var(--bs-primary-rgb), 0.3)":"var(--bs-border-color)"};
|
|
@@ -643,7 +643,7 @@ 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
|
|
646
|
+
`;function Lt({description:r,fields:n}){const{resume:i,disabled:o,response:s}=qt(),[a,l]=Rt(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(Tt,{className:"rounded bg-white shadow-sm",children:[r&&e(Ot,{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(Pt,{children:t})})]})}const Pt=n.div`
|
|
647
647
|
display: flex;
|
|
648
648
|
justify-content: flex-end;
|
|
649
649
|
border-top: 1px solid var(--bs-border-color);
|
|
@@ -651,7 +651,7 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
|
|
|
651
651
|
button {
|
|
652
652
|
padding: .25rem;
|
|
653
653
|
}
|
|
654
|
-
`,
|
|
654
|
+
`,Tt=n.div`
|
|
655
655
|
display: flex;
|
|
656
656
|
flex-direction: column;
|
|
657
657
|
gap: 0.5rem;
|
|
@@ -669,10 +669,10 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
|
|
|
669
669
|
&:last-child {
|
|
670
670
|
margin-bottom: 0;
|
|
671
671
|
}
|
|
672
|
-
`,
|
|
672
|
+
`,Ot=n.div`
|
|
673
673
|
color: var(--bs-secondary);
|
|
674
674
|
line-height: 1.5;
|
|
675
|
-
`;function
|
|
675
|
+
`;function Bt({content:r}){const{resume:n,disabled:i,response:o}=qt(),[s,a]=Rt(void 0!==o),l=i||s;return t(Ut,{className:"rounded bg-white shadow-sm",children:[r&&e(_t,{children:e(bt,{content:r})}),e(Ht,{children:e(k,{disabled:l,onClick:()=>{l||(a(!0),n("已确认"))},children:s?"已确认":"确认"})})]})}const Ut=n.div`
|
|
676
676
|
display: flex;
|
|
677
677
|
flex-direction: column;
|
|
678
678
|
gap: .5rem;
|
|
@@ -686,10 +686,10 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
|
|
|
686
686
|
&:last-child {
|
|
687
687
|
margin-bottom: 0;
|
|
688
688
|
}
|
|
689
|
-
`,
|
|
689
|
+
`,_t=n.div`
|
|
690
690
|
line-height: 1.6;
|
|
691
691
|
color: var(--bs-body-color);
|
|
692
|
-
`,
|
|
692
|
+
`,Ht=n.div`
|
|
693
693
|
display: flex;
|
|
694
694
|
justify-content: flex-end;
|
|
695
695
|
border-top: 1px solid var(--bs-border-color);
|
|
@@ -698,7 +698,7 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
|
|
|
698
698
|
button {
|
|
699
699
|
padding: .25rem 1.5rem;
|
|
700
700
|
}
|
|
701
|
-
`;function
|
|
701
|
+
`;function Qt({suspend:t}){const{readonly:r,input:n}=he(),{chunkIndex:i,chunk:o,toolIndex:s,tool:a,isLastMessage:l}=function(){const e=$(Nt);if(!e)throw new Error("useContext must be used within a Provider");return e}(),c=F(e=>{n?.resume({chunk:i,tool:s,payload:e})},[n]);let d=null;switch(t.type){case"select":d=e(zt,{...t.select});break;case"form":d=e(Lt,{...t.form});break;case"confirm":d=e(Bt,{...t.confirm})}const u=a?.response||o.node?.output;return e(Ft,{resume:c,disabled:r||!!o.error||!l,response:"(Empty)"===u?void 0:u,children:d})}function Jt({value:t,cite:n}){const i=t=>"string"==typeof t?e(bt,{content:t,cite:n}):"image"===t.type?e($t,{src:t.image}):"suspend"===t.type?e(Qt,{suspend:t.suspend}):null;return Array.isArray(t)?e(r,{children:t.map((t,r)=>e(A,{children:i(t)},r))}):i(t)}const Kt=({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(bt,{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"})]})})})},Wt=D(t=>{const{renderReasoning:r}=he();return r?r({Component:Kt,props:t}):e(Kt,{...t})});class Xt{#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 Vt=new Map;class Yt{#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?(Vt.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),Vt.delete(this)}start(e,t=!1){Vt.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=Vt.get(this);e&&(e.pause(),e.currentTime=0)}onPlaying(e){this.#t.on("playing",e)}onSpeaking(e){this.#t.on("speaking",e)}}function Gt({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 Yt(r):new Xt,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 Zt({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}=Gt({loader:c,text:s,loading:o&&i});let p=null;return a.current&&(u&&(p=oe(e(er,{children:e(T,{size:"sm",variant:"light"})}),a.current)),d&&(p=oe(e(er,{children:e(tr,{className:"bi bi-volume-down-fill text-light"})}),a.current))),t(kt,{disabled:i&&!d,onClick:()=>{d?h():m()},children:[d?e(tr,{className:"bi bi-volume-down-fill"}):u?e(T,{size:"sm",variant:"primary"}):e(tr,{className:"bi bi-volume-down"}),p]})}const er=n.div`
|
|
702
702
|
position: absolute;
|
|
703
703
|
top: 0;
|
|
704
704
|
left: 0;
|
|
@@ -708,27 +708,27 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
|
|
|
708
708
|
align-items: center;
|
|
709
709
|
justify-content: center;
|
|
710
710
|
background-color: rgba(0, 0, 0, .3);
|
|
711
|
-
`,
|
|
711
|
+
`,tr=n.i`
|
|
712
712
|
|
|
713
713
|
&::before {
|
|
714
714
|
transform: scale(1.4)
|
|
715
715
|
}
|
|
716
|
-
`;function
|
|
716
|
+
`;function rr({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(ir,{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(ir,{className:"border-top p-2",children:r.response||"None"})]})]}),l=r.content&&e(Jt,{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(nr,{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 nr=n.div`
|
|
717
717
|
width: ${e=>e.$open?"auto":"fit-content"};
|
|
718
718
|
max-width: 100%;
|
|
719
719
|
overflow:hidden;
|
|
720
|
-
`,
|
|
720
|
+
`,ir=n.div`
|
|
721
721
|
white-space: pre-wrap;
|
|
722
722
|
overflow-y: auto;
|
|
723
723
|
overflow-x: hidden;
|
|
724
724
|
max-height: 150px;
|
|
725
|
-
`;function
|
|
725
|
+
`;function or({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(ar,{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(lr,{className:"me-2 text-truncate",children:r.title}),e("span",{className:"me-auto"}),!s&&e("span",{className:"text-nowrap text-muted",children:sr(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 sr=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`,ar=n.div`
|
|
726
726
|
svg {
|
|
727
727
|
flex-shrink: 0;
|
|
728
728
|
}
|
|
729
|
-
`,
|
|
729
|
+
`,lr=n.span`
|
|
730
730
|
display: inline-block;
|
|
731
|
-
`;function
|
|
731
|
+
`;function cr({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(or,{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 dr=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=dt(t);return r?e+r+"\n":e},""):dt(t.content);return e+r+"\n"+(t.tools||[]).reduce((e,t)=>{if(t.content){const r=dt(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(wr,{$reverse:!0,children:[g&&e(vr,{children:e("img",{src:g.avatar})}),e(yr,{}),t(xr,{ref:x,children:[c&&e(bt,{content:c}),d&&e(H,{trigger:"click",container:x,rootClose:!0,placement:"bottom",overlay:e(ur,{body:!0,children:d}),children:e(hr,{children:e(mr,{children:d})})}),u.length>0&&u.map(({name:t,size:r,path:n},i)=>E(n)?e($t,{src:`/uploads/${n}`},i):e(gr,{children:e(be,{name:t,url:`/uploads/${n}`,size:r})},i))]})]}),m&&t(wr,{children:[f&&e(vr,{ref:k,children:e("img",{src:f.avatar})}),e(yr,{}),t(xr,{children:[C&&!1!==i&&t(fr,{children:[e(w,{placement:"top",content:y,as:kt,tooltip:!0}),a&&e(Zt,{loading:n.loading,avatarRef:k,contentRef:N,...a}),i?.({Component:kt,message:n,content:y,setMessage:o,messages:v})]}),e(br,{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(pr,{ref:N,$deleted:!!h,children:["all"===b&&j.length>0&&e(cr,{loading:p,nodes:j}),m.map((r,n)=>t(A,{children:[r.reasoning&&["stats","all"].includes(b)&&e(Wt,{reasoning:r.reasoning,loading:!r.content&&0===(r.tools||[]).length}),r.content&&e(jt,{value:{chunkIndex:n,chunk:r,isLastMessage:l},children:e(Jt,{cite:s,value:r.content})}),(r.tools||[]).map((t,i)=>e(jt,{value:{chunkIndex:n,chunk:r,toolIndex:i,tool:t,isLastMessage:l},children:e(rr,{tool:t,loading:p})},i)),r.error&&e(bt,{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(bt,{content:h.answer})]}),n.loading&&e(ct,{})]})]})]})}),ur=n(Q)`
|
|
732
732
|
max-width: calc(100% - .875rem * 2);
|
|
733
733
|
width: calc(100% - .875rem * 2);
|
|
734
734
|
font-size: 1rem;
|
|
@@ -737,25 +737,25 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
|
|
|
737
737
|
.popover-body {
|
|
738
738
|
padding: .5rem .75rem;
|
|
739
739
|
}
|
|
740
|
-
`,
|
|
740
|
+
`,mr=n.div`
|
|
741
741
|
overflow: hidden;
|
|
742
742
|
text-overflow: ellipsis;
|
|
743
743
|
word-break: break-all;
|
|
744
744
|
-webkit-line-clamp: 2;
|
|
745
745
|
-webkit-box-orient: vertical;
|
|
746
746
|
display: -webkit-box;
|
|
747
|
-
`,
|
|
747
|
+
`,hr=n.div`
|
|
748
748
|
padding: .5rem .75rem;
|
|
749
749
|
color: var(--bs-secondary);
|
|
750
750
|
border-radius: var(--bs-border-radius-lg);
|
|
751
751
|
background: #FFFFFF;
|
|
752
752
|
cursor: pointer;
|
|
753
|
-
`,
|
|
753
|
+
`,pr=n.div`
|
|
754
754
|
${e=>e.$deleted&&i`
|
|
755
755
|
text-decoration-line: line-through;
|
|
756
756
|
color: var(--bs-secondary);
|
|
757
757
|
`}
|
|
758
|
-
`,
|
|
758
|
+
`,gr=n.div`
|
|
759
759
|
width: 100%;
|
|
760
760
|
margin-bottom: .5rem;
|
|
761
761
|
margin-top: .5rem;
|
|
@@ -767,7 +767,7 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
|
|
|
767
767
|
&:last-child {
|
|
768
768
|
margin-bottom: 0;
|
|
769
769
|
}
|
|
770
|
-
`,
|
|
770
|
+
`,fr=n.div`
|
|
771
771
|
position: absolute;
|
|
772
772
|
top: -1.1rem;
|
|
773
773
|
right: 0;
|
|
@@ -775,7 +775,7 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
|
|
|
775
775
|
gap: .5rem;
|
|
776
776
|
opacity: 0;
|
|
777
777
|
z-index: 1;
|
|
778
|
-
`,
|
|
778
|
+
`,br=n.div`
|
|
779
779
|
position: absolute;
|
|
780
780
|
bottom: -1.4rem;
|
|
781
781
|
left: 0;
|
|
@@ -788,7 +788,7 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
|
|
|
788
788
|
display: flex;
|
|
789
789
|
opacity: 0;
|
|
790
790
|
z-index: 1;
|
|
791
|
-
`,
|
|
791
|
+
`,vr=n.div`
|
|
792
792
|
width: 35px;
|
|
793
793
|
height: 35px;
|
|
794
794
|
border-radius: 50%;
|
|
@@ -799,14 +799,14 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
|
|
|
799
799
|
width: 100%;
|
|
800
800
|
height: 100%;
|
|
801
801
|
}
|
|
802
|
-
`,
|
|
802
|
+
`,yr=n.div`
|
|
803
803
|
width: 0;
|
|
804
804
|
height: 0;
|
|
805
805
|
content: "";
|
|
806
806
|
border: 5px solid transparent;
|
|
807
807
|
border-right-color: #f3f3f3;
|
|
808
808
|
transform: translateY(10px);
|
|
809
|
-
`,
|
|
809
|
+
`,xr=n.div`
|
|
810
810
|
padding: .875rem;
|
|
811
811
|
background-color: rgb(243, 243, 243);
|
|
812
812
|
border-radius: var(--bs-border-radius-lg);
|
|
@@ -814,31 +814,31 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
|
|
|
814
814
|
position: relative;
|
|
815
815
|
|
|
816
816
|
&:hover {
|
|
817
|
-
${
|
|
817
|
+
${br}, ${fr} {
|
|
818
818
|
opacity: 1;
|
|
819
819
|
}
|
|
820
820
|
}
|
|
821
|
-
`,
|
|
821
|
+
`,wr=n.div`
|
|
822
822
|
display: flex;
|
|
823
823
|
justify-content: flex-start;
|
|
824
824
|
padding: 1rem 0 1rem 0;
|
|
825
825
|
${e=>e.$reverse&&i`
|
|
826
826
|
flex-direction: row-reverse;
|
|
827
827
|
|
|
828
|
-
${
|
|
828
|
+
${yr} {
|
|
829
829
|
border-left-color: rgba(var(--bs-primary-rgb), 0.1);
|
|
830
830
|
border-right-color: transparent;
|
|
831
831
|
}
|
|
832
832
|
|
|
833
|
-
${
|
|
833
|
+
${xr} {
|
|
834
834
|
background: rgba(var(--bs-primary-rgb), 0.1);
|
|
835
835
|
}
|
|
836
836
|
`};
|
|
837
|
-
`;function
|
|
837
|
+
`;function kr(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(Er,{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:dr,props:n})},r):e(dr,{...n},r)}),m.length>0&&e(Nr,{children:m.map((t,r)=>e("a",{href:"#!question",children:t},r))})]})}const Er=n.div`
|
|
838
838
|
display: flex;
|
|
839
839
|
flex-direction: column;
|
|
840
840
|
flex: 1;
|
|
841
|
-
`,
|
|
841
|
+
`,Nr=n.div`
|
|
842
842
|
display: flex;
|
|
843
843
|
flex-direction: column;
|
|
844
844
|
align-items: flex-start;
|
|
@@ -855,16 +855,16 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
|
|
|
855
855
|
background: var(--bs-secondary-bg-subtle);
|
|
856
856
|
}
|
|
857
857
|
}
|
|
858
|
-
`,
|
|
858
|
+
`,jr=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=nt},C)=>{const $=F(e=>{const t=[];if(u&&!1!==u.enable){const e=it(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($r,{className:r,children:t(x,{children:[e(Cr,{ref:B,children:e(kr,{placeholder:c,cite:h,actions:d,loaded:!o,speech:p,renderItem:g,scrollRef:B})}),o&&e(Ke,{...o,scrollRef:B})]})})})}),W),Cr=n.div`
|
|
859
859
|
display: flex;
|
|
860
860
|
flex-direction: column;
|
|
861
861
|
flex: 1;
|
|
862
862
|
overflow-y: auto;
|
|
863
863
|
padding: 0 1rem;
|
|
864
864
|
margin-bottom: .5rem;
|
|
865
|
-
|
|
865
|
+
`,$r=n.div`
|
|
866
866
|
display: flex;
|
|
867
867
|
flex-direction: column;
|
|
868
868
|
height: 100%;
|
|
869
869
|
position: relative;
|
|
870
|
-
`;async function
|
|
870
|
+
`;async function Mr(e){const t=await ae().use(ce).use(Z).use(ee).use(te).use(de).use(le).process(e);return String(t)}export{Se as ActionButton,Qe as EditableInput,be as FileItem,bt as Markdown,jr as MessageBox,Ee as VariableForm,ue as isToolMessage,Mr as md2html,it as pickQuestions,he as useMessageContext,Gt as useSynthesis};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@topthink/chat",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.7",
|
|
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": "
|
|
66
|
+
"gitHead": "aba026d4f1183c1633629b4c54f684b2093a2754",
|
|
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
|
-
}
|
|
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
|
-
}
|
|
17
|
+
}) => ReactNode;
|
|
18
18
|
scrollRef: MutableRefObject<HTMLDivElement | null>;
|
|
19
19
|
}
|
|
20
20
|
export default function List(props: Props): import("react/jsx-runtime").JSX.Element;
|