@topthink/chat 1.3.7 → 1.3.9
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 +67 -67
- package/package.json +74 -72
package/es/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
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}from"@topthink/components";import*as j from"react";import{createContext as C,useContext as $,useRef as R,useCallback as S,useEffect as M,useState as q,forwardRef as F,useMemo as A,useImperativeHandle as z,Fragment as I,memo as L,Component as D}from"react";import*as P from"path";import T from"path";import{Spinner as O,Badge as B,Dropdown as U,FormControl as _,CloseButton as H,OverlayTrigger as Q,Popover as J}from"react-bootstrap";import K from"eventemitter3";import W from"react-textarea-autosize";import X from"lodash/isEqual";import{toString as V}from"hast-util-to-string";import Y from"react-markdown";import"katex/dist/katex.min.css";import G from"rehype-highlight";import Z from"rehype-katex";import ee from"remark-breaks";import
|
|
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}from"@topthink/components";import*as j from"react";import{createContext as C,useContext as $,useRef as R,useCallback as S,useEffect as M,useState as q,forwardRef as F,useMemo as A,useImperativeHandle as z,Fragment as I,memo as L,Component as D}from"react";import*as P from"path";import T from"path";import{Spinner as O,Badge as B,Dropdown as U,FormControl as _,CloseButton as H,OverlayTrigger as Q,Popover as J}from"react-bootstrap";import K from"eventemitter3";import W from"react-textarea-autosize";import X from"lodash/isEqual";import{toString as V}from"hast-util-to-string";import Y from"react-markdown";import"katex/dist/katex.min.css";import G from"rehype-highlight";import Z from"rehype-katex";import ee from"rehype-raw";import te from"remark-breaks";import re from"remark-gfm";import ne from"remark-math";import{codes as ie,types as oe}from"micromark-util-symbol";import{markdownLineEnding as se}from"micromark-util-character";import{createPortal as ae}from"react-dom";import le from"use-resize-observer";import{unified as ce}from"unified";import de from"rehype-stringify";import ue from"remark-parse";import me from"remark-rehype";function he(e,t){return e.name===t}function pe({name:t,className:r}){const n=T.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(ge,{src:o,className:r}):null}const ge=n.img`
|
|
2
2
|
width: 30px;
|
|
3
3
|
height: 30px;
|
|
4
|
-
`;function
|
|
4
|
+
`;function fe({className:r,name:n,size:i=0,loading:o,error:l,onRemove:c,onClick:d}){const u=t(xe,{className:r,$error:!!l,onClick:d,children:[t(ye,{children:[e(pe,{name:n}),o&&e(O,{variant:"primary"})]}),t(ve,{children:[e("h4",{children:n}),i>0&&e("p",{children:s(i,1)})]}),c&&e(be,{onClick:e=>{e.preventDefault(),c()},children:e("i",{className:"bi bi-trash3"})})]});return l?e(a,{placement:"top",tooltip:l,children:u}):u}const be=n.div`
|
|
5
5
|
width: 1.75rem;
|
|
6
6
|
height: 1.75rem;
|
|
7
7
|
align-items: center;
|
|
@@ -16,7 +16,7 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
|
|
|
16
16
|
color: var(--bs-danger);
|
|
17
17
|
background-color: var(--bs-danger-bg-subtle);
|
|
18
18
|
}
|
|
19
|
-
`,
|
|
19
|
+
`,ve=n.div`
|
|
20
20
|
flex: 1;
|
|
21
21
|
overflow: hidden;
|
|
22
22
|
|
|
@@ -37,7 +37,7 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
|
|
|
37
37
|
line-height: 20px;
|
|
38
38
|
margin-bottom: 0;
|
|
39
39
|
}
|
|
40
|
-
`,
|
|
40
|
+
`,ye=n.div`
|
|
41
41
|
position: relative;
|
|
42
42
|
width: 3rem;
|
|
43
43
|
height: 3rem;
|
|
@@ -51,7 +51,7 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
|
|
|
51
51
|
position: absolute;
|
|
52
52
|
}
|
|
53
53
|
|
|
54
|
-
`,
|
|
54
|
+
`,xe=n.div`
|
|
55
55
|
display: flex;
|
|
56
56
|
gap: .5rem;
|
|
57
57
|
padding: .5rem;
|
|
@@ -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
|
-
`,
|
|
71
|
+
`,we=[".txt",".md",".pdf",".docx",".xlsx",".pptx",".png",".jpg"],ke=C(null),Ee=C(null);function Ne(){const e=$(ke);if(!e)throw new Error("useChatContext must be used within a ChatProvider");return e}function je(){return $(Ee)}function Ce(){const e=$(ke),t=$(Ee);if(!e||!t)throw new Error("useContext must be used within a Provider");return{...e,...t}}function $e({children:t,...r}){return e(ke.Provider,{value:r,children:t})}function Re({children:t,...r}){const{request:n,loading:i,setLoading:o,...s}=r;return e(ke.Provider,{value:{request:n,loading:i,setLoading:o},children:e(Ee.Provider,{value:s,children:t})})}function Se({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 Me=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
|
|
102
|
+
`;let qe=class{#e;#t;constructor(){this.#t=new K}onResult(e){this.#t.on("result",e)}onRecording(e){this.#t.on("recording",e)}onTranscribing(e){this.#t.on("transcribing",e)}start(){if(!this.#e){const e=window.SpeechRecognition||window.webkitSpeechRecognition;if(!e)return void u.error("浏览器不支持语音识别");const t=new e;t.continuous=!0,t.lang=navigator.language,t.onresult=e=>{const t=Array.from(e.results).at(-1)?.item(0).transcript;t&&this.#t.emit("result",t)},t.onspeechend=()=>{this.#t.emit("recording",!1)},t.onerror=e=>{this.#t.emit("recording",!1),u.error(e.error)},this.#e=t}this.#t.emit("recording",!0),this.#e.start()}stop(){this.#e?.stop(),this.#t.emit("recording",!1)}},Fe=class{#t;#r;#n;#i;constructor(e){this.#r=e,this.#t=new K}async start(){try{this.#n=await navigator.mediaDevices.getUserMedia({audio:!0}),this.#i=new AudioContext;const e=this.#i.createScriptProcessor(0,1,1);this.#i.createMediaStreamSource(this.#n).connect(e),e.connect(this.#i.destination);let t=[],r=0;const n=.01,i=1;e.onaudioprocess=e=>{const o=e.playbackTime,s=e.inputBuffer.getChannelData(0);let a=!0;for(let e=0;e<s.length;e++)if(Math.abs(s[e])>n){a=!1;break}if(a){const e=o-r;e>i&&(t.length>1&&(this.save(t),t=[]),e>10&&this.stop())}else t.push(new Float32Array(s)),r=o},this.#t.emit("recording",!0)}catch(e){u.error(e.message)}}convertBuffer(e){const t=new Float32Array(e),r=new Int16Array(e.length);for(let e=0;e<t.length;e++){const n=Math.max(-1,Math.min(1,t[e]));r[e]=n<0?32768*n:32767*n}return r}async encodeMP3(e){const{Mp3Encoder:t}=await import("@breezystack/lamejs"),r=new t(1,44100,128),n=[];for(const t of e){const e=this.convertBuffer(t),i=1152;let o=e.length;for(let t=0;o>=0;t+=i){const s=e.subarray(t,t+i),a=r.encodeBuffer(s);n.push(new Int8Array(a)),o-=i}}return n.push(r.flush()),new Blob(n,{type:"audio/mp3"})}async save(e){const t=await this.encodeMP3(e);try{this.#t.emit("transcribing",!0);const e=await this.#r(t);e&&this.#t.emit("result",e)}catch(e){}finally{this.#t.emit("transcribing",!1)}}stop(){this.#n&&(this.#n.getTracks().forEach(e=>e.stop()),this.#n=void 0),this.#i&&(this.#i.close(),this.#i=void 0),this.#t.emit("recording",!1)}onResult(e){this.#t.on("result",e)}onRecording(e){this.#t.on("recording",e)}onTranscribing(e){this.#t.on("transcribing",e)}};const Ae=F(({onResult:r,model:n="builtin"},i)=>{const{request:o}=Ne(),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 M(()=>()=>{r.current&&(r.current.stop(),r.current=void 0)},[]),{recording:n,transcribing:o,start:async()=>{r.current||(r.current=t?new Fe(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(Me,{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(O)`
|
|
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
|
-
`,
|
|
107
|
+
`,Ie=F(({className:t,children:r,size:n,tooltip:i,placement:o,onClick:s,onMouseDown:l},c)=>{const d=e(Le,{ref:c,className:t,onClick:s,onMouseDown:l,$size:n,children:r});return i?e(a,{tooltip:i,placement:o,children:d}):d}),Le=n.div`
|
|
108
108
|
width: 2rem;
|
|
109
109
|
height: 2rem;
|
|
110
110
|
align-items: center;
|
|
@@ -128,10 +128,10 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
|
|
|
128
128
|
&:hover {
|
|
129
129
|
background-color: var(--bs-secondary-bg-subtle);
|
|
130
130
|
}
|
|
131
|
-
`;function
|
|
131
|
+
`;function De(){const{request:n,reset:i,conversationId:o}=Ce(),[s,a]=q(!1),[l,c]=q(""),[d,u]=q(""),m=h(e=>{u(e)},500);return M(()=>{m(l)},[l]),t(r,{children:[e(Ie,{tooltip:"历史记录",placement:"top",onClick:()=>a(!0),children:e("i",{className:"bi bi-clock-history"})}),e(p,{show:s,onHide:()=>{a(!1)},placement:"end",headerAs:Ue,header:t(r,{children:[e("span",{children:"聊天历史记录"}),e(_e,{children:e(_,{type:"search",placeholder:"搜索聊天记录...",value:l,onChange:e=>c(e.target.value),autoFocus:!0})})]}),bodyAs:Pe,children:s&&e(Be,{children:e(Oe,{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)=>{const d=o===s.id;return t(I,{children:[l>0&&e("hr",{className:"mx-2 my-2"}),t(Te,{children:[d&&e(B,{bg:"secondary",children:"当前"}),e("span",{className:"overflow-hidden text-truncate flex-fill",onClick:()=>{i(s),a(!1)},children:s.title||"未命名对话"}),t(U,{align:"end",children:[e(U.Toggle,{size:"sm",className:"no-caret",as:Ie,children:e("i",{className:"bi bi-three-dots-vertical"})}),t(U.Menu,{children:[e(g,{buttonProps:{as:U.Item},text:t(r,{children:[e("i",{className:"bi bi-pencil me-2"}),"重命名"]}),modalProps:{header:"编辑对话名称"},schema:{type:"object",properties:{title:{type:"string"}}},uiSchema:{title:{"ui:label":!1,"ui:autofocus":!0}},formData:{title:s.title},onRequest:e=>n({url:`/conversation/${s.id}`,method:"PUT",data:e}),onSuccess:(e,t)=>{c(e=>{const r=e.findIndex(e=>e.id===s.id);-1!==r&&Object.assign(e[r],t)})}}),t(f,{as:U.Item,confirm:"确定要删除吗?",onRequest:()=>n({url:`/conversation/${s.id}`,method:"DELETE"}),onSuccess:()=>{c(e=>{const t=e.findIndex(e=>e.id===s.id);-1!==t&&e.splice(t,1)}),d&&i()},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 Pe=n.div`
|
|
132
132
|
padding: 0;
|
|
133
133
|
overflow: hidden;
|
|
134
|
-
`,
|
|
134
|
+
`,Te=n.div`
|
|
135
135
|
gap: .5rem;
|
|
136
136
|
display: flex;
|
|
137
137
|
cursor: pointer;
|
|
@@ -150,33 +150,33 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
|
|
|
150
150
|
display: block;
|
|
151
151
|
}
|
|
152
152
|
}
|
|
153
|
-
`,
|
|
153
|
+
`,Oe=n(m)`
|
|
154
154
|
display: flex;
|
|
155
155
|
flex-direction: column;
|
|
156
156
|
padding: .5rem;
|
|
157
|
-
`,
|
|
157
|
+
`,Be=n.div`
|
|
158
158
|
height: 100%;
|
|
159
159
|
overflow-y: auto;
|
|
160
|
-
`,
|
|
160
|
+
`,Ue=n.div`
|
|
161
161
|
display: flex;
|
|
162
162
|
align-items: center;
|
|
163
163
|
justify-content: space-between;
|
|
164
164
|
gap: 0.5rem;
|
|
165
165
|
flex: 1;
|
|
166
166
|
margin-right: .5rem;
|
|
167
|
-
`,
|
|
167
|
+
`,_e=n.div`
|
|
168
168
|
display: flex;
|
|
169
169
|
align-items: center;
|
|
170
170
|
gap: 0.5rem;
|
|
171
|
-
`;var
|
|
171
|
+
`;var He;function Qe(){return Qe=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},Qe.apply(null,arguments)}const Je=e=>j.createElement("svg",Qe({width:"1em",height:"1em",fill:"currentColor",viewBox:"0 0 256 256"},e),He||(He=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 Ke({onClick:t}){const{reset:r}=Ce();return e(Ie,{className:"text-primary",tooltip:"新会话",placement:"top",onClick:()=>t?.()??r(),children:e(Je,{})})}function We({children:n,actions:i}){const o=t(r,{children:[e(De,{}),e(Ke,{})]}),s="function"==typeof i?i({History:De,Reset:Ke}):t(r,{children:[i,o]});return t(Ve,{children:[n,e(Xe,{children:s})]})}const Xe=n.div`
|
|
172
172
|
display: flex;
|
|
173
173
|
gap: .25rem;
|
|
174
174
|
margin-left: auto;
|
|
175
|
-
`,
|
|
175
|
+
`,Ve=n.div`
|
|
176
176
|
margin-bottom: .5rem;
|
|
177
177
|
display: flex;
|
|
178
178
|
padding: 0 .125rem;
|
|
179
|
-
`;var
|
|
179
|
+
`;var Ye=F(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=S(()=>{const e=u.current;if(!e)return;e.focus();const t=e.value.length;e.setSelectionRange(t,t)},[]),g=S(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(Ge,{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 Ge=n(W)`
|
|
180
180
|
min-height: calc(1.5em + 1rem);
|
|
181
181
|
width: 100%;
|
|
182
182
|
padding: 0.5rem 0.5rem 0.5rem 0.75rem;
|
|
@@ -185,14 +185,14 @@ 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
|
|
188
|
+
`;var Ze=F(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),[F,I]=q(""),[L,D]=q(""),[T,O]=v([]),[B,U]=q(!1),_=n&&n.length>0?n:we,Q=S(()=>{requestAnimationFrame(()=>{$.current?.focus()})},[]),{send:J,resume:K,stop:W}=function(e){const{setLoading:t,request:r}=Ne(),n=je(),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=S(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=S(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=S(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=S(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=S(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=S(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 M(()=>(N(),()=>{p.current&&p.current.abort()}),[]),M(()=>{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:Q}),{loading:X,request:V}=Ne(),Y=je(),[G,Z]=q();M(()=>{const e=(Y?.messages||[]).filter(e=>!!e.query);Z(e.at(-1)?.variables)},[Y?.messages]),M(()=>{!n&&T.length>0&&O([])},[n]),M(()=>{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}),J(t)}};return e.addEventListener("click",t),()=>{e.removeEventListener("click",t)}}},[s,G]);const ee=S(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(P.extname(e.name)))&&!(e.size>20971520)).slice(0,6-T.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)},[T.length,_,V,O]),te=S(({target:e})=>{e.files&&ee(Array.from(e.files)),e.value=""},[ee]),re=S(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=T.flatMap(({file:e,path:t})=>t?[{name:e.name,size:e.size,path:t}]:[]),ie=S(()=>{if(F||ne.length>0){const e={query:F,files:ne};s&&(e.variables={...G,...s.values}),L&&(e.quote=L),J(e),$.current?.setContent(""),D(""),O([]),C.current?.stop(!0)}},[F,ne,s,G,L]),oe=A(()=>({setQuery(e){$.current?.setContent(e)},setQuote:D,send:J,resume:K,focus(){$.current?.focus()}}),[D,J,K]);if(M(()=>{Y?.setInput?.(oe)},[oe]),z(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(tt,{children:e(et,{children:e(Se,{values:G,variables:t,onSubmit:({formData:e})=>{if(r(e,!0))return Z(e),!0}})})})}return t("div",{className:r,children:[h&&e(We,{actions:p,children:h}),t(at,{$focused:B&&!X,children:[T.length>0&&e(nt,{children:T.map(({file:t,error:r,path:n},i)=>{const o=void 0===r&&void 0===n;return e(rt,{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(st,{children:[e("i",{className:"bi bi-quote"}),e("p",{children:L}),e(H,{onClick:()=>D("")})]}),t(it,{$minRows:d,children:[y?.({Component:Ye,props:{ref:$,readonly:X||g,autoFocus:f,placeholder:x,minRows:d,maxRows:m,onSubmit:ie,onFocusedChange:U,onQueryChange:I,onPaste:re}})||e(Ye,{ref:$,readonly:X||g,autoFocus:f,placeholder:x,minRows:d,maxRows:m,onSubmit:ie,onFocusedChange:U,onQueryChange:I,onPaste:re}),t(ot,{children:[b,n&&e(a,{tooltip:"可上传不超过6个小于20MB的文件",placement:"top",children:t(Me,{disabled:T.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(Ae,{ref:C,model:i.model,onResult:e=>{$.current?.setContent(t=>t+e+" ")}}),e(Me,{$fill:X&&w,className:X&&w?"text-danger":"text-primary",disabled:!F&&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 et=n.div`
|
|
189
189
|
border-radius: var(--bs-border-radius-lg);
|
|
190
190
|
box-shadow: var(--bs-box-shadow-sm);
|
|
191
191
|
margin: 1rem;
|
|
192
192
|
padding: 1rem;
|
|
193
193
|
width: 100%;
|
|
194
194
|
max-width: 500px;
|
|
195
|
-
`,
|
|
195
|
+
`,tt=n.div`
|
|
196
196
|
position: absolute;
|
|
197
197
|
left: 0;
|
|
198
198
|
right: 0;
|
|
@@ -202,26 +202,26 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
|
|
|
202
202
|
display: flex;
|
|
203
203
|
justify-content: center;
|
|
204
204
|
align-items: center;
|
|
205
|
-
`,
|
|
205
|
+
`,rt=n(fe)`
|
|
206
206
|
width: calc((100% - 0.75rem) / 2);
|
|
207
|
-
`,
|
|
207
|
+
`,nt=n.div`
|
|
208
208
|
display: flex;
|
|
209
209
|
flex-wrap: wrap;
|
|
210
210
|
padding: 0.75rem;
|
|
211
211
|
gap: 0.75rem;
|
|
212
212
|
border-bottom: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color);
|
|
213
|
-
`,
|
|
213
|
+
`,it=n.div`
|
|
214
214
|
display: flex;
|
|
215
215
|
gap: 0.25rem;
|
|
216
216
|
align-items: ${e=>e.$minRows&&e.$minRows>1?"stretch":"end"};
|
|
217
217
|
flex-direction: ${e=>e.$minRows&&e.$minRows>1?"column":"row"};
|
|
218
|
-
`,
|
|
218
|
+
`,ot=n.div`
|
|
219
219
|
display: flex;
|
|
220
220
|
flex-direction: row;
|
|
221
221
|
justify-content: end;
|
|
222
222
|
gap: 0.25rem;
|
|
223
223
|
padding: 0.375rem 0.5rem 0.375rem 0.5rem;
|
|
224
|
-
`,
|
|
224
|
+
`,st=n.div`
|
|
225
225
|
margin: 0.75rem 0.75rem 0 0.75rem;
|
|
226
226
|
padding: 4px 8px;
|
|
227
227
|
display: flex;
|
|
@@ -242,12 +242,12 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
|
|
|
242
242
|
-webkit-box-orient: vertical;
|
|
243
243
|
display: -webkit-box;
|
|
244
244
|
}
|
|
245
|
-
`,
|
|
245
|
+
`,at=n.div`
|
|
246
246
|
background: #fff;
|
|
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
|
|
250
|
+
`;function lt(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 ct(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 dt,ut,mt;function ht(){return ht=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},ht.apply(null,arguments)}const pt=e=>j.createElement("svg",ht({xmlns:"http://www.w3.org/2000/svg",width:20,height:10,fill:"#fff",viewBox:"0 0 120 30"},e),dt||(dt=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"}))),ut||(ut=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"}))),mt||(mt=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 gt(e){if(!e)return"";if("string"==typeof e)return e;if("image"===e.type){return`})`}return""}const ft=function(e,t,r){function n(t){return t!==ie.leftSquareBracket?(e.exit("citeMarker"),e.enter("citeData"),e.enter(oe.chunkString,{contentType:"string"}),i(t)):(e.consume(t),n)}function i(n){return n===ie.rightSquareBracket?(e.exit(oe.chunkString),e.exit("citeData"),e.enter("citeMarker"),function(n){if(n!==ie.rightSquareBracket)return r(n);return e.consume(n),e.exit("citeMarker"),e.exit("cite"),t(n)}(n)):se(n)||n===ie.eof||n>57||n<48?r(n):(e.consume(n),i)}return function(t){return t!==ie.leftSquareBracket?r(t):(e.enter("cite"),e.enter("citeMarker"),n(t))}},bt=function(){const e=this.data();e.micromarkExtensions.push({text:{[ie.leftSquareBracket]:{tokenize:ft}}}),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}}})},vt=x.Image,yt={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]);M(()=>{s&&o(s)},[s]);const a=A(()=>V(n),[n]);return t(jt,{children:[t(Nt,{children:[!i&&e(w,{tooltip:!1,as:Et,content:a}),s&&i&&e(Et,{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(Et,{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(vt,{...r})},xt=[[ne,{singleDollarTextMath:!1}],re,te],wt=[[ee,{tagfilter:!0}],Z,[G,{detect:!1,ignoreMissing:!0}]],kt=L(F(({content:t,components:r,cite:n},i)=>{t=t.replace(/\\\(\s(.+?)\s\\\)/g,"$$$$ $1 $$$$");const o=A(()=>{const e={...yt,...r};return n&&(e.cite=n),e},[r,n]),s=A(()=>n?[...xt,bt]:xt,[n]);return e(Ct,{ref:i,children:e(Y,{remarkPlugins:s,rehypePlugins:wt,components:o,children:t})})}),X),Et=n.div`
|
|
251
251
|
cursor: pointer;
|
|
252
252
|
padding: 2px 10px;
|
|
253
253
|
background-color: #303030;
|
|
@@ -257,7 +257,7 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
|
|
|
257
257
|
font-size: 12px;
|
|
258
258
|
font-family: initial;
|
|
259
259
|
user-select: none;
|
|
260
|
-
`,
|
|
260
|
+
`,Nt=n.div`
|
|
261
261
|
position: absolute;
|
|
262
262
|
right: 10px;
|
|
263
263
|
top: 1em;
|
|
@@ -271,17 +271,17 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
|
|
|
271
271
|
&:hover {
|
|
272
272
|
opacity: 1;
|
|
273
273
|
}
|
|
274
|
-
`,
|
|
274
|
+
`,jt=n.div`
|
|
275
275
|
position: relative;
|
|
276
276
|
|
|
277
277
|
&:hover {
|
|
278
|
-
${
|
|
278
|
+
${Nt} {
|
|
279
279
|
pointer-events: all;
|
|
280
280
|
transform: translateX(0px);
|
|
281
281
|
opacity: 0.7;
|
|
282
282
|
}
|
|
283
283
|
}
|
|
284
|
-
`,
|
|
284
|
+
`,Ct=n.div`
|
|
285
285
|
-ms-text-size-adjust: 100%;
|
|
286
286
|
-webkit-text-size-adjust: 100%;
|
|
287
287
|
line-height: 1.8;
|
|
@@ -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
|
|
554
|
+
`;var $t=F(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
|
-
`,
|
|
587
|
+
`,St=C(null);var Mt=St.Provider;const qt=x.Image;function Ft({src:t,...r}){const{imageResolver:n}=Ce();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
|
-
`,
|
|
612
|
+
`,zt=C(null);function It(){const e=$(zt);if(!e)throw new Error("useContext must be used within a Provider");return e}function Lt({children:t,...r}){return e(zt.Provider,{value:r,children:t})}function Dt(e){const[t,r]=q(e);return M(()=>{r(e)},[e]),[t,r]}function Pt({description:r,options:n}){const{resume:i,disabled:o,response:s}=It(),[a,l]=Dt(s?.result),c=o||void 0!==a;return t(Tt,{children:[r&&e(Ot,{children:r}),n.map((t,r)=>e(Bt,{$selected:a===t,$disabled:c,onClick:()=>(e=>{c||(l(e),i(e))})(t),children:t},r))]})}const Tt=n.div`
|
|
613
613
|
display: flex;
|
|
614
614
|
flex-direction: column;
|
|
615
615
|
gap: 0.5rem;
|
|
@@ -622,10 +622,10 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
|
|
|
622
622
|
&:last-child {
|
|
623
623
|
margin-bottom: 0;
|
|
624
624
|
}
|
|
625
|
-
`,
|
|
625
|
+
`,Ot=n.div`
|
|
626
626
|
color: var(--bs-secondary);
|
|
627
627
|
line-height: 1.5;
|
|
628
|
-
`,
|
|
628
|
+
`,Bt=n.div`
|
|
629
629
|
padding: 0.375rem 0.75rem;
|
|
630
630
|
background-color: ${e=>e.$selected?"rgba(var(--bs-primary-rgb), 0.1)":"#FFFFFF"};
|
|
631
631
|
border: 1px solid ${e=>e.$selected?"rgba(var(--bs-primary-rgb), 0.3)":"var(--bs-border-color)"};
|
|
@@ -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
|
|
647
|
+
`;function Ut({description:r,fields:n}){const{resume:i,disabled:o,response:s}=It(),[a,l]=Dt(void 0!==s),c=o||a,{schema:u,uiSchema:m}=A(()=>{const e={},t=[],r={};for(const i of n)e[i.name]={type:"number"===i.type?"number":"string",title:i.label,default:i.default},i.placeholder&&(r[i.name]={"ui:placeholder":i.placeholder}),"textarea"===i.type?r[i.name]={...r[i.name],"ui:widget":"textarea"}:"select"!==i.type&&"radio"!==i.type||!i.options?"checkbox"===i.type&&i.options?(e[i.name].type="array",e[i.name].uniqueItems=!0,e[i.name].items={type:"string",enum:i.options},r[i.name]={...r[i.name],"ui:widget":"checkboxes","ui:enumNames":i.options,"ui:inline":!0}):"email"===i.type?e[i.name].format="email":"date"===i.type?e[i.name].format="date":"tel"===i.type&&(r[i.name]={...r[i.name],"ui:options":{inputType:"tel"}}):(r[i.name]={...r[i.name],"ui:widget":i.type},e[i.name].enum=i.options,e[i.name].enumNames=i.options),i.required&&t.push(i.name);return{schema:{type:"object",properties:e,required:t},uiSchema:r}},[n]);return t(Ht,{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(_t,{children:t})})]})}const _t=n.div`
|
|
648
648
|
display: flex;
|
|
649
649
|
justify-content: flex-end;
|
|
650
650
|
border-top: 1px solid var(--bs-border-color);
|
|
@@ -653,7 +653,7 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
|
|
|
653
653
|
button {
|
|
654
654
|
padding: .25rem;
|
|
655
655
|
}
|
|
656
|
-
`,
|
|
656
|
+
`,Ht=n.div`
|
|
657
657
|
display: flex;
|
|
658
658
|
flex-direction: column;
|
|
659
659
|
gap: 0.5rem;
|
|
@@ -671,10 +671,10 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
|
|
|
671
671
|
&:last-child {
|
|
672
672
|
margin-bottom: 0;
|
|
673
673
|
}
|
|
674
|
-
`,
|
|
674
|
+
`,Qt=n.div`
|
|
675
675
|
color: var(--bs-secondary);
|
|
676
676
|
line-height: 1.5;
|
|
677
|
-
`;function
|
|
677
|
+
`;function Jt({content:r}){const{resume:n,disabled:i,response:o}=It(),[s,a]=Dt(void 0!==o),l=i||s;return t(Kt,{className:"rounded bg-white shadow-sm",children:[r&&e(Wt,{children:e(kt,{content:r})}),e(Xt,{children:e(k,{disabled:l,onClick:()=>{l||(a(!0),n("已确认"))},children:s?"已确认":"确认"})})]})}const Kt=n.div`
|
|
678
678
|
display: flex;
|
|
679
679
|
flex-direction: column;
|
|
680
680
|
gap: .5rem;
|
|
@@ -688,10 +688,10 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
|
|
|
688
688
|
&:last-child {
|
|
689
689
|
margin-bottom: 0;
|
|
690
690
|
}
|
|
691
|
-
`,
|
|
691
|
+
`,Wt=n.div`
|
|
692
692
|
line-height: 1.6;
|
|
693
693
|
color: var(--bs-body-color);
|
|
694
|
-
`,
|
|
694
|
+
`,Xt=n.div`
|
|
695
695
|
display: flex;
|
|
696
696
|
justify-content: flex-end;
|
|
697
697
|
border-top: 1px solid var(--bs-border-color);
|
|
@@ -700,27 +700,27 @@ 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
|
|
703
|
+
`;function Vt(e){return e instanceof Error&&e.message||String(e)}class Yt extends D{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 Gt({suspend:t}){const{readonly:r,input:n}=Ce(),{chunkIndex:i,chunk:o,toolIndex:s,tool:a,isLastMessage:l}=function(){const e=$(St);if(!e)throw new Error("useContext must be used within a Provider");return e}(),c=S(e=>{n?.resume({chunk:i,tool:s,payload:e})},[i,n,s]),d=S(e=>{c({error:Vt(e)})},[c]);let u=null;switch(t.type){case"select":u=e(Pt,{...t.select});break;case"form":u=e(Ut,{...t.form});break;case"confirm":u=e(Jt,{...t.confirm})}const m=a?.response||o.node?.output;return e(Lt,{resume:c,disabled:r||!!o.error||!l,response:"(Empty)"===m?void 0:m,children:e(Yt,{onRenderError:d,children:u})})}function Zt({value:t,cite:n}){const i=t=>"string"==typeof t?e(kt,{content:t,cite:n}):"image"===t.type?e(Ft,{src:t.image}):"suspend"===t.type?e(Gt,{suspend:t.suspend}):null;return Array.isArray(t)?e(r,{children:t.map((t,r)=>e(I,{children:i(t)},r))}):i(t)}const er=({reasoning:r,loading:n})=>{const[i,o]=q(!1);return M(()=>{n||o(!1)},[n]),e(I,{children:e("div",{className:"mb-2",children:t("div",i?{className:"shadow-sm rounded bg-white fs-7",children:[t("div",{onClick:()=>o(!1),role:"button",className:"d-flex align-items-center p-1 px-2 gap-2",children:[n?e(O,{animation:"border",variant:"primary",size:"sm"}):e("i",{className:"bi bi-check-circle-fill text-success"}),e("span",{className:"text-muted",children:n?"思考中":"已思考"}),e("i",{className:"bi bi-caret-up-fill text-muted"})]}),e("div",{className:"border-top p-2 d-flex flex-column gap-2",children:e("div",{className:"border rounded bg-light p-2",children:e(kt,{content:r})})})]}:{onClick:()=>o(!0),role:"button",className:"d-inline-flex align-items-center shadow-sm rounded bg-white p-1 px-2 fs-7 gap-2",children:[n?e(O,{animation:"border",variant:"primary",size:"sm"}):e("i",{className:"bi bi-check-circle-fill text-success"}),e("span",{className:"text-muted",children:n?"思考中":"已思考"}),e("i",{className:"bi bi-caret-down-fill text-muted"})]})})})},tr=L(t=>{const{renderReasoning:r}=Ce();return r?r({Component:er,props:t}):e(er,{...t})});function rr({tool:r,loading:n}){const{logLevel:i="none",renderToolContent:o}=Ce(),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(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"})]})]}),c=r.content&&e(Zt,{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(I,{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(O,{animation:"border",variant:"primary",size:"sm"}),u&&e("span",{className:"text-muted",children:a?"已取消":s?"已使用":"正在使用"}),c,g&&e("i",h?{className:"bi bi-caret-up-fill text-muted"}:{className:"bi bi-caret-down-fill text-muted"})]}),h&&l]})}),d]})}const nr=n.div`
|
|
704
704
|
width: ${e=>e.$open?"auto":"fit-content"};
|
|
705
705
|
max-width: 100%;
|
|
706
706
|
overflow:hidden;
|
|
707
|
-
`,
|
|
707
|
+
`,ir=n.div`
|
|
708
708
|
white-space: pre-wrap;
|
|
709
709
|
overflow-y: auto;
|
|
710
710
|
overflow-x: hidden;
|
|
711
711
|
max-height: 150px;
|
|
712
|
-
`;function
|
|
712
|
+
`;function or({node:r}){const[n,i]=q(!1),{nodeIconResolver:o}=Ce(),s=!("latency"in r),a=s?e(O,{animation:"border",variant:"primary",size:"sm"}):r.error?e("i",{className:"bi bi-x-circle-fill text-danger"}):e("i",{className:"bi bi-check-circle-fill text-success"});return t("div",{className:"shadow-sm rounded bg-white fs-7",children:[t(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`
|
|
713
713
|
svg {
|
|
714
714
|
flex-shrink: 0;
|
|
715
715
|
}
|
|
716
|
-
`,
|
|
716
|
+
`,lr=n.span`
|
|
717
717
|
display: inline-block;
|
|
718
|
-
`;function
|
|
718
|
+
`;function cr({nodes:r,loading:n}){const[i,o]=q(!1),s=r.some(e=>"error"in e),a=n?e(O,{animation:"border",variant:"primary",size:"sm"}):e("i",s?{className:"bi bi-x-circle-fill text-danger"}:{className:"bi bi-check-circle-fill text-success"});return e("div",{className:"mb-2",children:t("div",i?{className:"shadow-sm rounded bg-white fs-7",children:[t("div",{onClick:()=>o(!1),role:"button",className:"d-flex align-items-center p-1 px-2 gap-2",children:[a,e("span",{children:"工作流"}),e("i",{className:"bi bi-caret-up-fill text-muted"})]}),e("div",{className:"border-top p-2 d-flex flex-column gap-1 bg-light bg-opacity-50",children:r.map((t,r)=>e(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=L(F(({chunks:r,loading:n,cite:i,isLast:o=!1,deleted:s=!1},a)=>{const{logLevel:l="none"}=Ce(),c=A(()=>r.flatMap(e=>e.node?[e.node]:[]),[r]);return t(ur,{ref:a,$deleted:s,children:["all"===l&&c.length>0&&e(cr,{loading:n,nodes:c}),r.map((r,s)=>t(I,{children:[r.reasoning&&["stats","all"].includes(l)&&e(tr,{reasoning:r.reasoning,loading:n&&!r.content&&0===(r.tools||[]).length}),r.content&&e(Mt,{value:{chunkIndex:s,chunk:r,isLastMessage:o},children:e(Zt,{cite:i,value:r.content})}),(r.tools||[]).map((t,i)=>e(Mt,{value:{chunkIndex:s,chunk:r,toolIndex:i,tool:t,isLastMessage:o},children:e(rr,{tool:t,loading:n})},i)),r.error&&e(kt,{content:`[${r.error}]`})]},s))]})})),ur=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
|
|
723
|
+
`;class mr{#t;#o=[];#s=0;constructor(){this.#t=new K}speak(){for(this.#t.emit("playing",!0);this.#s<this.#o.length;){const e=this.#o[this.#s],t=new SpeechSynthesisUtterance(e),r=++this.#s;t.onend=()=>{r>=this.#o.length&&this.clear()},t.onerror=()=>{this.clear()},window.speechSynthesis.speak(t)}}clear(){this.#t.emit("playing",!1)}start(e,t=!1){this.#o=Array.isArray(e)?e:[e],t||(window.speechSynthesis.cancel(),this.#s=0),this.speak()}stop(){window.speechSynthesis.cancel(),this.clear()}onPlaying(e){this.#t.on("playing",e)}onSpeaking(e){this.#t.on("speaking",e)}}const hr=new Map;class pr{#r;#t;#o=[];#a=new Map;#l=!1;#s=0;#c=!1;constructor(e){this.#r=e,this.#t=new K}createLoader(e){const t=new Promise(async t=>{try{const{type:r,data:n}=await this.#r(e),i=new Audio(`data:${r};base64,${n}`);this.#a.set(e,i),t(i)}catch{this.#a.delete(e),t(void 0)}});return this.#a.set(e,t),t}async loadAudioData(){this.#c=!0,this.#t.emit("speaking",!0);let e=0;for(;e<this.#o.length;){const t=this.#o[e];!this.#a.has(t)&&this.#c&&await this.createLoader(t),e++}this.#t.emit("speaking",!1),this.#c=!1}waitForAudioLoaded(e){const t=this.#a.get(e);return t instanceof Promise?t:Promise.resolve(t)}async playAudio(e=0){this.#l=!0;const t=await this.waitForAudioLoaded(this.#o[e]);this.#t.emit("playing",!0),t?(hr.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),hr.delete(this)}start(e,t=!1){hr.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=hr.get(this);e&&(e.pause(),e.currentTime=0)}onPlaying(e){this.#t.on("playing",e)}onSpeaking(e){this.#t.on("speaking",e)}}function gr({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 pr(r):new mr,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 fr({model:r="builtin",voice:n,loading:i,autoplay:o,contentRef:s,avatarRef:a}){const{request:l}=Ce(),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}=gr({loader:c,text:s,loading:o&&i});let p=null;return a.current&&(u&&(p=ae(e(br,{children:e(O,{size:"sm",variant:"light"})}),a.current)),d&&(p=ae(e(br,{children:e(vr,{className:"bi bi-volume-down-fill text-light"})}),a.current))),t($t,{disabled:i&&!d,onClick:()=>{d?h():m()},children:[d?e(vr,{className:"bi bi-volume-down-fill"}):u?e(O,{size:"sm",variant:"primary"}):e(vr,{className:"bi bi-volume-down"}),p]})}const br=n.div`
|
|
724
724
|
position: absolute;
|
|
725
725
|
top: 0;
|
|
726
726
|
left: 0;
|
|
@@ -730,12 +730,12 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
|
|
|
730
730
|
align-items: center;
|
|
731
731
|
justify-content: center;
|
|
732
732
|
background-color: rgba(0, 0, 0, .3);
|
|
733
|
-
`,
|
|
733
|
+
`,vr=n.i`
|
|
734
734
|
|
|
735
735
|
&::before {
|
|
736
736
|
transform: scale(1.4)
|
|
737
737
|
}
|
|
738
|
-
`,
|
|
738
|
+
`,yr=L(({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}=Ce(),x=A(()=>m?m.reduce(function(e,t){const r=Array.isArray(t.content)?t.content.reduce((e,t)=>{const r=gt(t);return r?e+r+"\n":e},""):gt(t.content);return e+r+"\n"+(t.tools||[]).reduce((e,t)=>{if(t.content){const r=gt(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(Sr,{$reverse:!0,children:[g&&t(r,{children:[e(Cr,{children:e("img",{src:g.avatar})}),e($r,{})]}),t(Rr,{ref:k,children:[c&&e(kt,{content:c}),d&&e(Q,{trigger:"click",container:k,rootClose:!0,placement:"bottom",overlay:e(xr,{body:!0,children:d}),children:e(kr,{children:e(wr,{children:d})})}),u.length>0&&u.map(({name:t,size:r,path:n},i)=>{if(E(n))return e(Ft,{src:`/uploads/${n}`},i);const o={name:t,url:`/uploads/${n}`,size:r};return e(Er,{children:y?y({Component:fe,props:o}):e(fe,{...o})},i)})]})]}),m&&t(Sr,{children:[f&&t(r,{children:[e(Cr,{ref:N,children:e("img",{src:f.avatar})}),e($r,{})]}),t(Rr,{children:[C&&!1!==i&&t(Nr,{children:[e(w,{placement:"top",content:x,as:$t,tooltip:!0}),a&&e(fr,{loading:n.loading,avatarRef:N,contentRef:j,...a}),i?.({Component:$t,message:n,content:x,setMessage:o,messages:v})]}),e(jr,{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(dr,{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(kt,{content:h.answer})]}),n.loading&&e(pt,{})]})]})]})}),xr=n(J)`
|
|
739
739
|
max-width: calc(100% - .875rem * 2);
|
|
740
740
|
width: calc(100% - .875rem * 2);
|
|
741
741
|
font-size: 1rem;
|
|
@@ -744,20 +744,20 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
|
|
|
744
744
|
.popover-body {
|
|
745
745
|
padding: .5rem .75rem;
|
|
746
746
|
}
|
|
747
|
-
`,
|
|
747
|
+
`,wr=n.div`
|
|
748
748
|
overflow: hidden;
|
|
749
749
|
text-overflow: ellipsis;
|
|
750
750
|
word-break: break-all;
|
|
751
751
|
-webkit-line-clamp: 2;
|
|
752
752
|
-webkit-box-orient: vertical;
|
|
753
753
|
display: -webkit-box;
|
|
754
|
-
`,
|
|
754
|
+
`,kr=n.div`
|
|
755
755
|
padding: .5rem .75rem;
|
|
756
756
|
color: var(--bs-secondary);
|
|
757
757
|
border-radius: var(--bs-border-radius-lg);
|
|
758
758
|
background: #FFFFFF;
|
|
759
759
|
cursor: pointer;
|
|
760
|
-
`,
|
|
760
|
+
`,Er=n.div`
|
|
761
761
|
width: 100%;
|
|
762
762
|
margin-bottom: .5rem;
|
|
763
763
|
margin-top: .5rem;
|
|
@@ -769,7 +769,7 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
|
|
|
769
769
|
&:last-child {
|
|
770
770
|
margin-bottom: 0;
|
|
771
771
|
}
|
|
772
|
-
`,
|
|
772
|
+
`,Nr=n.div`
|
|
773
773
|
position: absolute;
|
|
774
774
|
top: -1.1rem;
|
|
775
775
|
right: 0;
|
|
@@ -777,7 +777,7 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
|
|
|
777
777
|
gap: .5rem;
|
|
778
778
|
opacity: 0;
|
|
779
779
|
z-index: 1;
|
|
780
|
-
`,
|
|
780
|
+
`,jr=n.div`
|
|
781
781
|
position: absolute;
|
|
782
782
|
bottom: -1.4rem;
|
|
783
783
|
left: 0;
|
|
@@ -790,7 +790,7 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
|
|
|
790
790
|
display: flex;
|
|
791
791
|
opacity: 0;
|
|
792
792
|
z-index: 1;
|
|
793
|
-
`,
|
|
793
|
+
`,Cr=n.div`
|
|
794
794
|
width: 35px;
|
|
795
795
|
height: 35px;
|
|
796
796
|
border-radius: 50%;
|
|
@@ -801,14 +801,14 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
|
|
|
801
801
|
width: 100%;
|
|
802
802
|
height: 100%;
|
|
803
803
|
}
|
|
804
|
-
|
|
804
|
+
`,$r=n.div`
|
|
805
805
|
width: 0;
|
|
806
806
|
height: 0;
|
|
807
807
|
content: "";
|
|
808
808
|
border: 5px solid transparent;
|
|
809
809
|
border-right-color: #f3f3f3;
|
|
810
810
|
transform: translateY(10px);
|
|
811
|
-
|
|
811
|
+
`,Rr=n.div`
|
|
812
812
|
padding: .875rem;
|
|
813
813
|
background-color: rgb(243, 243, 243);
|
|
814
814
|
border-radius: var(--bs-border-radius-lg);
|
|
@@ -816,31 +816,31 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
|
|
|
816
816
|
position: relative;
|
|
817
817
|
|
|
818
818
|
&:hover {
|
|
819
|
-
${
|
|
819
|
+
${jr}, ${Nr} {
|
|
820
820
|
opacity: 1;
|
|
821
821
|
}
|
|
822
822
|
}
|
|
823
|
-
`,
|
|
823
|
+
`,Sr=n.div`
|
|
824
824
|
display: flex;
|
|
825
825
|
justify-content: flex-start;
|
|
826
826
|
padding: 1rem 0 1rem 0;
|
|
827
827
|
${e=>e.$reverse&&o`
|
|
828
828
|
flex-direction: row-reverse;
|
|
829
829
|
|
|
830
|
-
${
|
|
830
|
+
${$r} {
|
|
831
831
|
border-left-color: rgba(var(--bs-primary-rgb), 0.1);
|
|
832
832
|
border-right-color: transparent;
|
|
833
833
|
}
|
|
834
834
|
|
|
835
|
-
${
|
|
835
|
+
${Rr} {
|
|
836
836
|
background: rgba(var(--bs-primary-rgb), 0.1);
|
|
837
837
|
}
|
|
838
838
|
`};
|
|
839
|
-
`;function
|
|
839
|
+
`;function Mr(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}=Ce(),g=R(r.loaded),f=R(!0),b=R(!1);M(()=>{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}=le({ref:y});M(()=>{(u||!g.current)&&c.length>0&&(u&&(g.current=!0),v())},[x,u,g,c]),M(()=>{m.length>0&&v()},[m]),M(()=>{g.current=r.loaded},[p]),M(()=>{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(qr,{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(I,{children:a({Component:yr,props:n})},r):e(yr,{...n},r)}),m.length>0&&e(Fr,{children:m.map((t,r)=>e("a",{href:"#!question",children:t},r))})]})}const qr=n.div`
|
|
840
840
|
display: flex;
|
|
841
841
|
flex-direction: column;
|
|
842
842
|
flex: 1;
|
|
843
|
-
`,
|
|
843
|
+
`,Fr=n.div`
|
|
844
844
|
display: flex;
|
|
845
845
|
flex-direction: column;
|
|
846
846
|
align-items: flex-start;
|
|
@@ -857,18 +857,18 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
|
|
|
857
857
|
background: var(--bs-secondary-bg-subtle);
|
|
858
858
|
}
|
|
859
859
|
}
|
|
860
|
-
`,
|
|
860
|
+
`,Ar=L(F(({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=lt},C)=>{const $=S(e=>{const t=[];if(u&&!1!==u.enable){const e=ct(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,F]=q(m?.id),[I,L]=q(),[D,P]=v(()=>$(m)),[T,O]=q(!1),B=R(null),[U,_]=q([]),H=S(e=>{"suggestion"==e.type&&_(e.data),o?.onEvent?.(e)},[o?.onEvent]),Q=S(e=>{F(e?.id),P($(e)),_([]),O(!1),E?.(e)},[T,$,E]);return z(C,()=>({reset:Q}),[Q]),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:M,setConversationId:F,input:I,setInput:L,messages:D,setMessages:P,suggestions:U,setSuggestions:_,loading:T,setLoading:O,renderFileItem:f,reset:Q,readonly:!o,renderToolContent:b,renderReasoning:y,children:e(Lr,{className:r,children:t(x,{children:[e(Ir,{ref:B,children:e(Mr,{placeholder:c,cite:h,actions:d,loaded:!o,speech:p,renderItem:g,scrollRef:B})}),o&&e(zr,{...o,onEvent:H,scrollRef:B})]})})})}),X),zr=n(Ze)`
|
|
861
861
|
margin: 0 1rem 1rem;
|
|
862
|
-
`,
|
|
862
|
+
`,Ir=n.div`
|
|
863
863
|
display: flex;
|
|
864
864
|
flex-direction: column;
|
|
865
865
|
flex: 1;
|
|
866
866
|
overflow-y: auto;
|
|
867
867
|
padding: 0 1rem;
|
|
868
868
|
margin-bottom: .5rem;
|
|
869
|
-
`,
|
|
869
|
+
`,Lr=n.div`
|
|
870
870
|
display: flex;
|
|
871
871
|
flex-direction: column;
|
|
872
872
|
height: 100%;
|
|
873
873
|
position: relative;
|
|
874
|
-
`,
|
|
874
|
+
`,Dr=L(F(({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($e,{request:A(()=>r?"string"==typeof r?N.create({baseURL:r}):r:N,[r]),loading:y,setLoading:x,children:e(Ze,{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})})}),X);async function Pr(e){const t=await ce().use(ue).use(te).use(re).use(ne).use(me).use(de).process(e);return String(t)}export{Ie as ActionButton,Dr as ChatInput,dr as Chunks,Ye as EditableInput,pe as FileIcon,fe as FileItem,Me as InputButton,kt as Markdown,Ar as MessageBox,Se as VariableForm,he as isToolMessage,Pr as md2html,ct as pickQuestions,Ce as useMessageContext,gr as useSynthesis};
|
package/package.json
CHANGED
|
@@ -1,73 +1,75 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
"
|
|
13
|
-
"
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
"
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
"
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
"
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
2
|
+
"name": "@topthink/chat",
|
|
3
|
+
"version": "1.3.9",
|
|
4
|
+
"scripts": {
|
|
5
|
+
"prebuild": "rimraf es types",
|
|
6
|
+
"build": "rollup -c --environment NODE_ENV:production",
|
|
7
|
+
"build:dev": "rollup -c",
|
|
8
|
+
"watch": "rollup -c -w",
|
|
9
|
+
"prepack": "npm run build"
|
|
10
|
+
},
|
|
11
|
+
"module": "es/index.js",
|
|
12
|
+
"types": "types/index.d.ts",
|
|
13
|
+
"files": [
|
|
14
|
+
"es",
|
|
15
|
+
"types",
|
|
16
|
+
"scss"
|
|
17
|
+
],
|
|
18
|
+
"dependencies": {
|
|
19
|
+
"@babel/runtime": "^7.11.2",
|
|
20
|
+
"@breezystack/lamejs": "^1.2.7",
|
|
21
|
+
"@topthink/components": "1.2.10",
|
|
22
|
+
"@types/hast": "^3.0.4",
|
|
23
|
+
"@types/mdast": "^4.0.4",
|
|
24
|
+
"eventemitter3": "^5.0.1",
|
|
25
|
+
"hast-util-to-string": "^3.0.1",
|
|
26
|
+
"katex": "^0.16.28",
|
|
27
|
+
"mdast-util-from-markdown": "^2.0.2",
|
|
28
|
+
"micromark-util-character": "^2.1.1",
|
|
29
|
+
"micromark-util-symbol": "^2.0.1",
|
|
30
|
+
"micromark-util-types": "^2.0.2",
|
|
31
|
+
"react-markdown": "^10.1.0",
|
|
32
|
+
"react-textarea-autosize": "^8.5.9",
|
|
33
|
+
"rehype-highlight": "^7.0.2",
|
|
34
|
+
"rehype-katex": "^7.0.1",
|
|
35
|
+
"rehype-raw": "^7.0.0",
|
|
36
|
+
"rehype-stringify": "^10.0.1",
|
|
37
|
+
"remark-breaks": "^4.0.0",
|
|
38
|
+
"remark-gfm": "^4.0.1",
|
|
39
|
+
"remark-math": "^6.0.0",
|
|
40
|
+
"remark-parse": "^11.0.0",
|
|
41
|
+
"remark-rehype": "^11.1.2",
|
|
42
|
+
"unified": "^11.0.5",
|
|
43
|
+
"use-resize-observer": "^9.1.0"
|
|
44
|
+
},
|
|
45
|
+
"peerDependencies": {
|
|
46
|
+
"lodash": "*",
|
|
47
|
+
"react": "^17||^18",
|
|
48
|
+
"react-bootstrap": "^2.1.2",
|
|
49
|
+
"react-dom": "^17||^18"
|
|
50
|
+
},
|
|
51
|
+
"devDependencies": {
|
|
52
|
+
"@babel/core": "^7.23.6",
|
|
53
|
+
"@babel/plugin-transform-runtime": "^7.23.6",
|
|
54
|
+
"@babel/preset-env": "^7.23.6",
|
|
55
|
+
"@rollup/plugin-babel": "^6.0.4",
|
|
56
|
+
"@rollup/plugin-commonjs": "^25.0.7",
|
|
57
|
+
"@rollup/plugin-dynamic-import-vars": "^2.1.2",
|
|
58
|
+
"@rollup/plugin-image": "^3.0.3",
|
|
59
|
+
"@rollup/plugin-node-resolve": "^15.2.3",
|
|
60
|
+
"@rollup/plugin-terser": "^0.4.4",
|
|
61
|
+
"@rollup/plugin-typescript": "^11.1.5",
|
|
62
|
+
"@svgr/rollup": "^8.1.0",
|
|
63
|
+
"@types/dom-speech-recognition": "^0.0.4",
|
|
64
|
+
"@types/lodash": "^4.14.161",
|
|
65
|
+
"@types/node": "^18.11.18",
|
|
66
|
+
"@types/react": "^17.0.0",
|
|
67
|
+
"@types/react-dom": "^17.0.0",
|
|
68
|
+
"react-bootstrap": "^2.1.2",
|
|
69
|
+
"rollup": "^4.8.0",
|
|
70
|
+
"typescript": "^5.9.2"
|
|
71
|
+
},
|
|
72
|
+
"author": "yunwuxin <tzzhangyajun@qq.com> (https://github.com/yunwuxin)",
|
|
73
|
+
"license": "MIT",
|
|
74
|
+
"gitHead": "79fae30348e37ff1a436286310dcb17df4722cf1"
|
|
75
|
+
}
|