@topthink/chat 1.3.18 → 1.3.20
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 +2 -2
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,SimpleBar as
|
|
1
|
+
import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as n,useAsync as i,css as o,formatSize as s,Tooltip as a,isCancel as l,isRequestError as c,Form as d,Toast as u,InfiniteScroller as m,useDebounce as h,Offcanvas as p,ModalForm as g,RequestButton as f,Loader as b,useImmer as v,getAbsoluteUrl as y,Lightbox as x,Clipboard as w,Button as k,isImageUrl as E,request as N,SimpleBar as j}from"@topthink/components";import*as C from"react";import{createContext as $,useContext as R,useRef as S,useCallback as M,useEffect as F,useState as q,forwardRef as A,useMemo as z,useImperativeHandle as I,Fragment as L,memo as D,Component as P}from"react";import*as T from"path";import O from"path";import{Spinner as B,Badge as U,Dropdown as _,FormControl as H,CloseButton as J,OverlayTrigger as Q,Popover as K}from"react-bootstrap";import W from"eventemitter3";import X from"react-textarea-autosize";import V from"lodash/isEqual";import{toString as Y}from"hast-util-to-string";import G from"react-markdown";import"katex/dist/katex.min.css";import Z from"rehype-highlight";import ee from"rehype-katex";import te from"rehype-raw";import re from"remark-breaks";import ne from"remark-gfm";import ie from"remark-math";import{codes as oe,types as se}from"micromark-util-symbol";import{markdownLineEnding as ae}from"micromark-util-character";import{createPortal as le}from"react-dom";import ce from"use-resize-observer";import{unified as de}from"unified";import ue from"rehype-stringify";import me from"remark-parse";import he from"remark-rehype";function pe(e,t){return e.name===t}function ge({name:t,className:r}){const n=O.extname(t).substring(1),{result:o}=i(async e=>{try{return(await function(e){switch(e){case"../../images/file/docx.svg":return import("./docx-2LwnwWwv.js");case"../../images/file/html.svg":return import("./html-BSKTzJZQ.js");case"../../images/file/jpg.svg":return import("./jpg-muicsKjX.js");case"../../images/file/md.svg":return import("./md-DRS7QmE8.js");case"../../images/file/mp3.svg":return import("./mp3-HhP1Gk4B.js");case"../../images/file/mp4.svg":return import("./mp4-CWxSyjdn.js");case"../../images/file/pdf.svg":return import("./pdf-CWBi2u4Z.js");case"../../images/file/png.svg":return import("./png-DNwbFeJk.js");case"../../images/file/pptx.svg":return import("./pptx-Bv4V_F_3.js");case"../../images/file/py.svg":return import("./py-D30pRTJN.js");case"../../images/file/txt.svg":return import("./txt-CsqmEKjF.js");case"../../images/file/unknown.svg":return import("./unknown-DW8znerP.js");case"../../images/file/xlsx.svg":return import("./xlsx-CmkshfKZ.js");default:return new Promise(function(t,r){("function"==typeof queueMicrotask?queueMicrotask:setTimeout)(r.bind(null,new Error("Unknown variable dynamic import: "+e)))})}}(`../../images/file/${e}.svg`)).default}catch{return(await import("./unknown-DW8znerP.js")).default}},[n]);return o?e(fe,{src:o,className:r}):null}const fe=n.img`
|
|
2
2
|
width: 30px;
|
|
3
3
|
height: 30px;
|
|
4
|
-
`;function
|
|
4
|
+
`;function be({className:r,name:n,size:i=0,loading:o,error:l,onRemove:c,onClick:d}){const u=t(we,{className:r,$error:!!l,onClick:d,children:[t(xe,{children:[e(ge,{name:n}),o&&e(B,{variant:"primary"})]}),t(ye,{children:[e("h4",{children:n}),i>0&&e("p",{children:s(i,1)})]}),c&&e(ve,{onClick:e=>{e.preventDefault(),c()},children:e("i",{className:"bi bi-trash3"})})]});return l?e(a,{placement:"top",tooltip:l,children:u}):u}const ve=n.div`
|
|
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
|
+
`,ye=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
|
+
`,xe=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
|
+
`,we=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
|
+
`,ke=[".txt",".md",".pdf",".docx",".xlsx",".pptx",".png",".jpg"],Ee=$(null),Ne=$(null);function je(){const e=R(Ee);if(!e)throw new Error("useChatContext must be used within a ChatProvider");return e}function Ce(){return R(Ne)}function $e(){const e=R(Ee),t=R(Ne);if(!e||!t)throw new Error("useContext must be used within a Provider");return{...e,...t}}function Re({children:t,...r}){return e(Ee.Provider,{value:r,children:t})}function Se({children:t,...r}){const{request:n,loading:i,setLoading:o,inputRef:s,...a}=r;return e(Ee.Provider,{value:{request:n,loading:i,setLoading:o,inputRef:s},children:e(Ne.Provider,{value:a,children:t})})}function Me({variables:t,values:r,onSubmit:n,onChange:i,children:o}){const s={},a=[],l={};return t.forEach(e=>{s[e.key]={type:"string",title:e.label},"textarea"===e.type?l[e.key]={"ui:widget":"textarea"}:"select"===e.type&&e.options&&(s[e.key].enum=e.options,s[e.key].enumNames=e.options,e.options.length>0&&(s[e.key].default=e.options[0])),e.required&&a.push(e.key)}),e(d,{schema:{type:"object",properties:s,required:a},formData:r,omitExtraData:!0,uiSchema:l,submitText:"开始对话",onSubmit:n,onChange:i,children:o})}const Fe=n.button`
|
|
72
72
|
color: var(--bs-secondary);
|
|
73
73
|
cursor: pointer;
|
|
74
74
|
display: flex;
|
|
@@ -99,12 +99,12 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
|
|
|
99
99
|
}
|
|
100
100
|
`};
|
|
101
101
|
|
|
102
|
-
`;let
|
|
102
|
+
`;let qe=class{#e;#t;constructor(){this.#t=new W}onResult(e){this.#t.on("result",e)}onRecording(e){this.#t.on("recording",e)}onTranscribing(e){this.#t.on("transcribing",e)}start(){if(!this.#e){const e=window.SpeechRecognition||window.webkitSpeechRecognition;if(!e)return void u.error("浏览器不支持语音识别");const t=new e;t.continuous=!0,t.lang=navigator.language,t.onresult=e=>{const t=Array.from(e.results).at(-1)?.item(0).transcript;t&&this.#t.emit("result",t)},t.onspeechend=()=>{this.#t.emit("recording",!1)},t.onerror=e=>{this.#t.emit("recording",!1),u.error(e.error)},this.#e=t}this.#t.emit("recording",!0),this.#e.start()}stop(){this.#e?.stop(),this.#t.emit("recording",!1)}},Ae=class{#t;#r;#n;#i;constructor(e){this.#r=e,this.#t=new W}async start(){try{this.#n=await navigator.mediaDevices.getUserMedia({audio:!0}),this.#i=new AudioContext;const e=this.#i.createScriptProcessor(0,1,1);this.#i.createMediaStreamSource(this.#n).connect(e),e.connect(this.#i.destination);let t=[],r=0;const n=.01,i=1;e.onaudioprocess=e=>{const o=e.playbackTime,s=e.inputBuffer.getChannelData(0);let a=!0;for(let e=0;e<s.length;e++)if(Math.abs(s[e])>n){a=!1;break}if(a){const e=o-r;e>i&&(t.length>1&&(this.save(t),t=[]),e>10&&this.stop())}else t.push(new Float32Array(s)),r=o},this.#t.emit("recording",!0)}catch(e){u.error(e.message)}}convertBuffer(e){const t=new Float32Array(e),r=new Int16Array(e.length);for(let e=0;e<t.length;e++){const n=Math.max(-1,Math.min(1,t[e]));r[e]=n<0?32768*n:32767*n}return r}async encodeMP3(e){const{Mp3Encoder:t}=await import("@breezystack/lamejs"),r=new t(1,44100,128),n=[];for(const t of e){const e=this.convertBuffer(t),i=1152;let o=e.length;for(let t=0;o>=0;t+=i){const s=e.subarray(t,t+i),a=r.encodeBuffer(s);n.push(new Int8Array(a)),o-=i}}return n.push(r.flush()),new Blob(n,{type:"audio/mp3"})}async save(e){const t=await this.encodeMP3(e);try{this.#t.emit("transcribing",!0);const e=await this.#r(t);e&&this.#t.emit("result",e)}catch(e){}finally{this.#t.emit("transcribing",!1)}}stop(){this.#n&&(this.#n.getTracks().forEach(e=>e.stop()),this.#n=void 0),this.#i&&(this.#i.close(),this.#i=void 0),this.#t.emit("recording",!1)}onResult(e){this.#t.on("result",e)}onRecording(e){this.#t.on("recording",e)}onTranscribing(e){this.#t.on("transcribing",e)}};const ze=A(({onResult:r,model:n="builtin"},i)=>{const{request:o}=je(),s=z(()=>{if("builtin"!==n)return async e=>{const t=new FormData;t.append("file",e,"audio.mp3"),t.append("model",n);return(await o({url:"/transcriptions",method:"post",data:t})).text}},[n]),{start:l,stop:c,recording:d,transcribing:u}=function({onResult:e,loader:t}){const r=S(),[n,i]=q(!1),[o,s]=q(!1);return F(()=>()=>{r.current&&(r.current.stop(),r.current=void 0)},[]),{recording:n,transcribing:o,start:async()=>{r.current||(r.current=t?new Ae(t):new qe,r.current.onRecording(i),r.current.onTranscribing(s),r.current.onResult(e)),r.current.start()},stop:()=>{r.current&&r.current.stop()}}}({onResult:r,loader:s});return I(i,()=>({start:l,stop:c}),[l,c]),e(a,{tooltip:d?"停止":"语音输入",placement:"top",children:t(Fe,{onMouseDown:e=>{e.preventDefault(),d?c():l()},children:[u&&e(Ie,{animation:"border",variant:"primary",size:"sm"}),e("i",d?{className:"bi bi-mic-fill text-danger"}:{className:"bi bi-mic"})]})})}),Ie=n(B)`
|
|
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
|
+
`,Le=A(({className:t,children:r,size:n,tooltip:i,placement:o,onClick:s,onMouseDown:l},c)=>{const d=e(De,{ref:c,className:t,onClick:s,onMouseDown:l,$size:n,children:r});return i?e(a,{tooltip:i,placement:o,children:d}):d}),De=n.div`
|
|
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 Pe(){const{request:n,reset:i,conversationId:o}=$e(),[s,a]=q(!1),[l,c]=q(""),[d,u]=q(""),m=h(e=>{u(e)},500);return F(()=>{m(l)},[l]),t(r,{children:[e(Le,{tooltip:"历史记录",placement:"top",onClick:()=>a(!0),children:e("i",{className:"bi bi-clock-history"})}),e(p,{show:s,onHide:()=>{a(!1)},placement:"end",headerAs:_e,header:t(r,{children:[e("span",{children:"聊天历史记录"}),e(He,{children:e(H,{type:"search",placeholder:"搜索聊天记录...",value:l,onChange:e=>c(e.target.value),autoFocus:!0})})]}),bodyAs:Te,children:s&&e(Ue,{children:e(Be,{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(L,{children:[l>0&&e("hr",{className:"mx-2 my-2"}),t(Oe,{children:[d&&e(U,{bg:"secondary",children:"当前"}),e("span",{className:"overflow-hidden text-truncate flex-fill",onClick:()=>{i(s),a(!1)},children:s.title||"未命名对话"}),t(_,{align:"end",children:[e(_.Toggle,{size:"sm",className:"no-caret",as:Le,children:e("i",{className:"bi bi-three-dots-vertical"})}),t(_.Menu,{children:[e(g,{buttonProps:{as:_.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:_.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 Te=n.div`
|
|
132
132
|
padding: 0;
|
|
133
133
|
overflow: hidden;
|
|
134
|
-
`,
|
|
134
|
+
`,Oe=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
|
+
`,Be=n(m)`
|
|
154
154
|
display: flex;
|
|
155
155
|
flex-direction: column;
|
|
156
156
|
padding: .5rem;
|
|
157
|
-
`,
|
|
157
|
+
`,Ue=n.div`
|
|
158
158
|
height: 100%;
|
|
159
159
|
overflow-y: auto;
|
|
160
|
-
`,
|
|
160
|
+
`,_e=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
|
+
`,He=n.div`
|
|
168
168
|
display: flex;
|
|
169
169
|
align-items: center;
|
|
170
170
|
gap: 0.5rem;
|
|
171
|
-
`;var
|
|
171
|
+
`;var Je;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 Ke=e=>C.createElement("svg",Qe({width:"1em",height:"1em",fill:"currentColor",viewBox:"0 0 256 256"},e),Je||(Je=C.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 We({onClick:t}){const{reset:r}=$e();return e(Le,{className:"text-primary",tooltip:"新会话",placement:"top",onClick:()=>t?.()??r(),children:e(Ke,{})})}function Xe({children:n,actions:i}){const o=t(r,{children:[e(Pe,{}),e(We,{})]}),s="function"==typeof i?i({History:Pe,Reset:We}):t(r,{children:[i,o]});return t(Ye,{children:[n,e(Ve,{children:s})]})}const Ve=n.div`
|
|
172
172
|
display: flex;
|
|
173
173
|
gap: .25rem;
|
|
174
174
|
margin-left: auto;
|
|
175
|
-
`,
|
|
175
|
+
`,Ye=n.div`
|
|
176
176
|
margin-bottom: .5rem;
|
|
177
177
|
display: flex;
|
|
178
178
|
padding: 0 .125rem;
|
|
179
|
-
`;var
|
|
179
|
+
`;var Ge=A(function({readonly:t,autoFocus:r,placeholder:n,minRows:i,maxRows:o,onSubmit:s,onFocusedChange:a,onQueryChange:l,onPaste:c},d){const u=S(null),[m,h]=q(""),p=M(()=>{const e=u.current;if(!e)return;e.focus();const t=e.value.length;e.setSelectionRange(t,t)},[]),g=M(e=>{const t="string"==typeof e?e:e(m);h(t),l?.(t.trim()),requestAnimationFrame(()=>{p()})},[m,l,p]);return I(d,()=>({setContent:g,focus(){p()}}),[g,p]),e(Ze,{ref:u,value:m,minRows:i,maxRows:o,readOnly:t,autoFocus:r,placeholder:n,onFocus:()=>a?.(!0),onBlur:()=>a?.(!1),onChange:e=>{h(e.target.value),l?.(e.target.value.trim())},onPaste:e=>{c?.(e.nativeEvent)},onKeyDown:e=>{e.nativeEvent.isComposing||"Enter"!==e.key||e.shiftKey||(e.preventDefault(),e.stopPropagation(),s?.())}})});const Ze=n(X)`
|
|
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 et=A(function({className:r,fileTypes:n,speech:i,scrollRef:o,variables:s,minRows:d=1,maxRows:m=5,toolbar:h,toolbarActions:p,disabled:g,autoFocus:f,tools:b,renderEditableInput:y,placeholder:x="请输入你的问题, Enter+Shift换行, Enter发送",supportStop:w=!1,onEvent:k,onNewConversation:E},N){const j=S(null),C=S(null),$=S(null),[R,A]=q(""),[L,D]=q(""),[P,O]=v([]),[B,U]=q(!1),_=n&&n.length>0?n:ke,H=M(()=>{requestAnimationFrame(()=>{$.current?.focus()})},[]),{send:Q,resume:K,stop:W}=function(e){const{setLoading:t,request:r}=je(),n=Ce(),i=n?.setMessages,o=n?.setConversationId,s=n?.conversationId,a=n?.messages,d=!0===e?.supportStop,{onEvent:u,onNewConversation:m,onComplete:h}=e??{},p=S(null),g=S(),f=S(s),b=()=>(p.current&&p.current.abort(),p.current=new AbortController,p.current.signal),v=M(e=>{const t=(e,r)=>{Object.entries(r).forEach(([r,n])=>{if("string"!=typeof n)if(!n||"object"!=typeof n||Array.isArray(n))e[r]=n;else if("index"in n){const{index:i,...o}=n;Array.isArray(e[r])||(e[r]=[]),e[r][i]||(e[r][i]={}),t(e[r][i],o)}else e[r]=n;else e[r]="string"==typeof e[r]?e[r]+n:n})};if(e.data)if("[DONE]"!=e.data)try{const r=JSON.parse(e.data);r.conversation?(f.current=r.conversation,o?.(r.conversation)):r.event?u?.(r.event):i?.(e=>{const n=e[e.length-1];if(r.chunks){if(n.chunks){const e=r.chunks.index;if(n.chunks[e]||(n.chunks[e]={content:"",reasoning:"",tools:[]}),r.chunks.error)n.chunks[e].error=r.chunks.error;else if(r.chunks.tools){n.chunks[e].tools||(n.chunks[e].tools=[]);const{index:i,...o}=r.chunks.tools;n.chunks[e].tools[i]||(n.chunks[e].tools[i]={name:"",title:"",arguments:""}),t(n.chunks[e].tools[i],o)}else if(r.chunks.reasoning)n.chunks[e].reasoning+=r.chunks.reasoning;else if(r.chunks.content)if("object"==typeof r.chunks.content){Array.isArray(n.chunks[e].content)||(n.chunks[e].content=[]);const t=r.chunks.content.index,i=r.chunks.content.value;"string"==typeof i?(n.chunks[e].content[t]||(n.chunks[e].content[t]=""),n.chunks[e].content[t]+=i):n.chunks[e].content[t]=i}else n.chunks[e].content+=r.chunks.content;else r.chunks.node&&(n.chunks[e].node={...n.chunks[e].node,...r.chunks.node})}}else r.stats?n.stats=r.stats:r.id&&(n.id=r.id)})}catch(e){console.error(e)}else i?.(e=>{e[e.length-1].loading=!1})},[u]),y=M(e=>{if(l(e))i?.(e=>{const t=e[e.length-1];t&&(t.loading=!1)});else{let t="未知错误";c(e)&&(t=401==e.response?.status?"未授权或授权已过期,请刷新页面后重试":"string"==typeof e.errors?e.errors:Object.values(e.errors).join("\n")),i?.(e=>{const r=e[e.length-1];r.chunks&&(0===r.chunks.length?r.chunks=[{error:t}]:r.chunks[r.chunks.length-1].error=t),r.loading=!1})}},[]),x=M(async e=>{g.current=e;try{const n=b();t(!0),i?.(e=>{e[e.length-1].loading=!0,delete e[e.length-1].stats});let o={url:"message",method:"get",params:{id:e},onMessage:v,signal:n};await r(o)}catch(e){y(e)}finally{p.current=null,g.current=void 0}t(!1),h?.()},[r,u,m,h]),w=M(async(e,...o)=>{"string"==typeof e&&(e={query:e,...o});const{query:s,files:a=[],variables:l={},extra:c={},quote:d}=e;let u=null,g=null;if(s||a.length>0){const e=b();t(!0),n?.setSuggestions?.([]),i?.(e=>{e.push({query:s,quote:d,files:a,variables:l,chunks:[],loading:!0})});try{let t={method:"post",data:{query:s,quote:d,files:a,variables:l,extra:c,conversation:f.current},onMessage:v,signal:e};const n=await r(t);u=n.message??null,g=n.conversation??null}catch(e){y(e)}finally{p.current=null}if(u){let e=!1;g&&!f.current&&(e=m?.(g)??!1),e||await x(u.id)}else t(!1),h?.()}},[r,u,m,h]),k=M(async e=>{let n=null;try{const o=b();t(!0),i?.(e=>{e[e.length-1].loading=!0});let s={url:"resume",method:"post",data:{conversation:f.current,chunk:e.chunk,tool:e.tool,payload:e.payload},onMessage:v,signal:o};n=(await r(s)).message??null}catch(e){y(e)}finally{p.current=null}n?await x(n.id):(t(!1),h?.())},[r,u,m,h]),E=M(async()=>{if(d)if(g.current)try{await r({url:"stop",method:"post",data:{id:g.current}})}catch{}else p.current?.abort()},[r,d]),N=()=>{const e=a?.[a.length-1];e&&e.id&&2===e.status&&x(e.id)};return F(()=>(N(),()=>{p.current&&p.current.abort()}),[]),F(()=>{s!=f.current&&(f.current=s,p.current&&p.current.abort(),N())},[s]),{send:w,resume:k,stop:E}}({supportStop:w,onEvent:k,onNewConversation:E,onComplete:H}),{loading:X,request:V,inputRef:Y}=je(),G=Ce(),[Z,ee]=q(),[te,re]=v({});F(()=>{const e=(G?.messages||[]).filter(e=>!!e.query);ee(e.at(-1)?.variables)},[G?.messages]),F(()=>{!n&&P.length>0&&O([])},[n]),F(()=>{const e=o?.current;if(e){const t=e=>{if(e.target instanceof HTMLAnchorElement&&"#!question"===e.target.hash){e.preventDefault();const t={query:e.target.text};s&&(t.variables={...Z,...s.values}),Q(t)}};return e.addEventListener("click",t),()=>{e.removeEventListener("click",t)}}},[s,Z]);const ne=M(e=>{const t=e.map((e,t)=>{if(e.name)return e;const r=e.type.split("/")[1]||"png";return new File([e],`screenshot-${Date.now()}-${t}.${r}`,{type:e.type})}).filter(e=>!(!_.includes("*")&&!_.includes(T.extname(e.name)))&&!(e.size>20971520)).slice(0,6-P.length);return 0!==t.length&&(O(e=>{e.push(...t.map(e=>({file:e})))}),t.forEach(async e=>{try{const t=new FormData;t.set("file",e);const r=await V({method:"POST",url:"/upload",data:t});O(t=>{const n=t.find(t=>t.file===e);n&&(n.path=r.path)})}catch(t){const r=c(t)?t.message:"unknown error";O(t=>{const n=t.find(t=>t.file===e);n&&(n.error=r)})}}),!0)},[P.length,_,V,O]),ie=M(({target:e})=>{e.files&&ne(Array.from(e.files)),e.value=""},[ne]),oe=M(e=>{const t=Array.from(e.clipboardData?.files||[]),r=Array.from(e.clipboardData?.items||[]).filter(e=>"file"===e.kind).map(e=>e.getAsFile()).filter(e=>!!e),n=t.length>0?t:r;0!==n.length&&ne(n)&&e.preventDefault()},[ne]),se=P.flatMap(({file:e,path:t})=>t?[{name:e.name,size:e.size,path:t}]:[]),ae=M(()=>{if(R||se.length>0){const e={query:R,files:se,extra:te};s&&(e.variables={...Z,...s.values}),L&&(e.quote=L),Q(e),$.current?.setContent(""),D(""),O([]),C.current?.stop(!0)}},[R,se,s,Z,te,L]),le=z(()=>{const e={setQuery(e){$.current?.setContent(e)},setQuote:D,setExtra:re,send:Q,resume:K,focus(){$.current?.focus()}};return Y.current=e,e},[D,re,Q,K]);if(I(N,()=>le,[le]),s){const t=s.config.filter(e=>!(e.key in(s.values||{}))),r=(e,r=!1)=>!!e&&t.every(t=>{const n=!t.required||e?.[t.key];return!n&&r&&u.error("请完善必填信息"),n});if(t.length>0&&!r(Z))return e(rt,{children:e(tt,{children:e(Me,{values:Z,variables:t,onSubmit:({formData:e})=>{if(r(e,!0))return ee(e),!0}})})})}return t("div",{className:r,children:[h&&e(Xe,{actions:p,children:h}),t(lt,{$focused:B&&!X,children:[P.length>0&&e(it,{children:P.map(({file:t,error:r,path:n},i)=>{const o=void 0===r&&void 0===n;return e(nt,{name:t.name,size:t.size,error:r,loading:o,onRemove:()=>{O(e=>{const r=e.findIndex(e=>e.file===t);-1!==r&&e.splice(r,1)})}},i)})}),!!L&&t(at,{children:[e("i",{className:"bi bi-quote"}),e("p",{children:L}),e(J,{onClick:()=>D("")})]}),t(ot,{$minRows:d,children:[y?.({Component:Ge,props:{ref:$,readonly:X||g,autoFocus:f,placeholder:x,minRows:d,maxRows:m,onSubmit:ae,onFocusedChange:U,onQueryChange:A,onPaste:oe}})||e(Ge,{ref:$,readonly:X||g,autoFocus:f,placeholder:x,minRows:d,maxRows:m,onSubmit:ae,onFocusedChange:U,onQueryChange:A,onPaste:oe}),t(st,{children:[b,n&&e(a,{tooltip:"可上传不超过6个小于20MB的文件",placement:"top",children:t(Fe,{disabled:P.length>=6,onClick:()=>j.current?.click(),children:[e("input",{onChange:ie,multiple:!0,accept:_.join(","),ref:j,type:"file",hidden:!0}),e("i",{className:"bi bi-file-earmark-arrow-up"})]})}),i&&e(ze,{ref:C,model:i.model,onResult:e=>{$.current?.setContent(t=>t+e+" ")}}),e(Fe,{$fill:X&&w,className:X&&w?"text-danger":"text-primary",disabled:!R&&0===se.length&&!X||X&&!w,onClick:e=>{e.preventDefault(),X&&w?W():ae()},children:e("i",X&&w?{className:"bi bi-square-fill fs-7"}:{className:"bi bi-send-fill"})})]})]})]})]})});const tt=n.div`
|
|
189
189
|
border-radius: var(--bs-border-radius-lg);
|
|
190
190
|
box-shadow: var(--bs-box-shadow-sm);
|
|
191
191
|
margin: 1rem;
|
|
192
192
|
padding: 1rem;
|
|
193
193
|
width: 100%;
|
|
194
194
|
max-width: 500px;
|
|
195
|
-
`,
|
|
195
|
+
`,rt=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
|
+
`,nt=n(be)`
|
|
206
206
|
width: calc((100% - 0.75rem) / 2);
|
|
207
|
-
`,
|
|
207
|
+
`,it=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
|
+
`,ot=n.div`
|
|
214
214
|
display: flex;
|
|
215
215
|
gap: 0.2rem;
|
|
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
|
+
`,st=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
|
+
`,at=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
|
+
`,lt=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 ct(e){return e.map(e=>({id:e.id,query:e.query,quote:e.quote||void 0,files:e.files||void 0,variables:e.variables,chunks:e.chunks.map(({content:e="",node:t,error:r,tools:n=[],reasoning:i})=>({content:e,reasoning:i,error:r,tools:n,node:t})),annotation:e.annotation,stats:{usage:e.usage,context:e.context,latency:e.latency},status:e.status??1}))}function dt(e){if((e=e.filter(e=>!!e.trim())).length>3){const t=[...e];let r=e.length-3;for(;r--;){let e=Math.floor(Math.random()*t.length);t.splice(e,1)}e=t}return e}var ut,mt,ht;function pt(){return pt=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)({}).hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},pt.apply(null,arguments)}const gt=e=>C.createElement("svg",pt({xmlns:"http://www.w3.org/2000/svg",width:20,height:10,fill:"#fff",viewBox:"0 0 120 30"},e),ut||(ut=C.createElement("circle",{cx:15,cy:15,r:15,fill:"#3c60ff"},C.createElement("animate",{attributeName:"r",begin:"0s",calcMode:"linear",dur:"0.8s",from:15,repeatCount:"indefinite",to:15,values:"15;9;15"}),C.createElement("animate",{attributeName:"fill-opacity",begin:"0s",calcMode:"linear",dur:"0.8s",from:1,repeatCount:"indefinite",to:1,values:"1;.5;1"}))),mt||(mt=C.createElement("circle",{cx:60,cy:15,r:9,fill:"#3c60ff",fillOpacity:.3},C.createElement("animate",{attributeName:"r",begin:"0s",calcMode:"linear",dur:"0.8s",from:9,repeatCount:"indefinite",to:9,values:"9;15;9"}),C.createElement("animate",{attributeName:"fill-opacity",begin:"0s",calcMode:"linear",dur:"0.8s",from:.5,repeatCount:"indefinite",to:.5,values:".5;1;.5"}))),ht||(ht=C.createElement("circle",{cx:105,cy:15,r:15,fill:"#3c60ff"},C.createElement("animate",{attributeName:"r",begin:"0s",calcMode:"linear",dur:"0.8s",from:15,repeatCount:"indefinite",to:15,values:"15;9;15"}),C.createElement("animate",{attributeName:"fill-opacity",begin:"0s",calcMode:"linear",dur:"0.8s",from:1,repeatCount:"indefinite",to:1,values:"1;.5;1"}))));function ft(e){if(!e)return"";if("string"==typeof e)return e;if("image"===e.type){return`})`}return""}const bt=function(e,t,r){function n(t){return t!==oe.leftSquareBracket?(e.exit("citeMarker"),e.enter("citeData"),e.enter(se.chunkString,{contentType:"string"}),i(t)):(e.consume(t),n)}function i(n){return n===oe.rightSquareBracket?(e.exit(se.chunkString),e.exit("citeData"),e.enter("citeMarker"),function(n){if(n!==oe.rightSquareBracket)return r(n);return e.consume(n),e.exit("citeMarker"),e.exit("cite"),t(n)}(n)):ae(n)||n===oe.eof||n>57||n<48?r(n):(e.consume(n),i)}return function(t){return t!==oe.leftSquareBracket?r(t):(e.enter("cite"),e.enter("citeMarker"),n(t))}},vt=function(){const e=this.data();e.micromarkExtensions.push({text:{[oe.leftSquareBracket]:{tokenize:bt}}}),e.fromMarkdownExtensions.push({enter:{cite:function(e){this.enter({type:"cite",data:{hName:"cite",hChildren:[{type:"text",value:""}]}},e)},citeData:function(){this.buffer()}},exit:{cite:function(e){this.exit(e)},citeData:function(){const e=this.resume();this.stack[this.stack.length-1].data.hChildren[0].value=e}}})},yt=x.Image,xt={pre:({children:r,node:n})=>{if(!n)return null;const[i,o]=q(!1),s=z(()=>{const e=n.children[0];return"element"===(t=e).type&&"code"===t.tagName&&!!e.properties?.className?.includes("language-svg");var t},[n]);F(()=>{s&&o(s)},[s]);const a=z(()=>Y(n),[n]);return t(Ct,{children:[t(jt,{children:[!i&&e(w,{tooltip:!1,as:Nt,content:a}),s&&i&&e(Nt,{onClick:()=>{const e=new Blob([a],{type:"image/svg+xml"}),t=URL.createObjectURL(e),r=document.createElement("a");r.href=t,r.download="image.svg",r.click(),URL.revokeObjectURL(t)},children:"下载"}),s&&e(Nt,{onClick:()=>o(!i),children:i?"源码":"预览"})]}),s&&i?e("div",{dangerouslySetInnerHTML:{__html:a}}):e("pre",{children:r})]})},a:({node:t,href:r,...n})=>{const i=r?.startsWith("http")?"_blank":"_self";return e("a",{...n,href:r,target:i})},img:({node:t,...r})=>e(yt,{...r})},wt=[[ie,{singleDollarTextMath:!1}],ne,re],kt=[[te,{tagfilter:!0}],ee,[Z,{detect:!1,ignoreMissing:!0}]],Et=D(A(({content:t,components:r,cite:n},i)=>{t=t.replace(/\\\(\s(.+?)\s\\\)/g,"$$$$ $1 $$$$");const o=z(()=>{const e={...xt,...r};return n&&(e.cite=n),e},[r,n]),s=z(()=>n?[...wt,vt]:wt,[n]);return e($t,{ref:i,children:e(G,{remarkPlugins:s,rehypePlugins:kt,components:o,children:t})})}),V),Nt=n.div`
|
|
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
|
+
`,jt=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
|
+
`,Ct=n.div`
|
|
275
275
|
position: relative;
|
|
276
276
|
|
|
277
277
|
&:hover {
|
|
278
|
-
${
|
|
278
|
+
${jt} {
|
|
279
279
|
pointer-events: all;
|
|
280
280
|
transform: translateX(0px);
|
|
281
281
|
opacity: 0.7;
|
|
282
282
|
}
|
|
283
283
|
}
|
|
284
|
-
|
|
284
|
+
`,$t=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 Rt=A(function({children:t,tooltip:r,onClick:n,disabled:i,...o},s){i&&(n=void 0);const l=e(St,{ref:s,onClick:n,$disabled:i,...o,children:t});return r?e(a,{tooltip:r,placement:"top",children:l}):l});const St=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
|
+
`,Mt=$(null);var Ft=Mt.Provider;const qt=x.Image;function At({src:t,...r}){const{imageResolver:n}=$e();return n&&t&&(t=n(t)),e(zt,{children:e(qt,{src:t,...r})},t)}const zt=n.div`
|
|
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
|
+
`,It=$(null);function Lt(){const e=R(It);if(!e)throw new Error("useContext must be used within a Provider");return e}function Dt({children:t,...r}){return e(It.Provider,{value:r,children:t})}function Pt(e){const[t,r]=q(e);return F(()=>{r(e)},[e]),[t,r]}function Tt({description:r,options:n}){const{resume:i,disabled:o,response:s}=Lt(),[a,l]=Pt(s?.result),c=o||void 0!==a;return t(Ot,{children:[r&&e(Bt,{children:r}),n.map((t,r)=>e(Ut,{$selected:a===t,$disabled:c,onClick:()=>(e=>{c||(l(e),i(e))})(t),children:t},r))]})}const Ot=n.div`
|
|
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
|
+
`,Bt=n.div`
|
|
626
626
|
color: var(--bs-secondary);
|
|
627
627
|
line-height: 1.5;
|
|
628
|
-
`,
|
|
628
|
+
`,Ut=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 _t({description:r,fields:n}){const{resume:i,disabled:o,response:s}=Lt(),[a,l]=Pt(void 0!==s),c=o||a,{schema:u,uiSchema:m}=z(()=>{const e={},t=[],r={};for(const i of n)e[i.name]={type:"string",title:i.label,default:i.default},i.placeholder&&(r[i.name]={"ui:placeholder":i.placeholder}),"number"===i.type?(e[i.name].type="number",void 0!==i.default&&(e[i.name].default=Number(i.default))):"textarea"===i.type?r[i.name]={...r[i.name],"ui:widget":"textarea"}:"select"!==i.type&&"radio"!==i.type||!i.options?"checkbox"===i.type&&i.options?(e[i.name].type="array",e[i.name].uniqueItems=!0,e[i.name].items={type:"string",enum:i.options},"string"==typeof i.default&&(e[i.name].default=i.default.split(",")),r[i.name]={...r[i.name],"ui:widget":"checkboxes","ui:enumNames":i.options,"ui:inline":!0}):"email"===i.type?e[i.name].format="email":"date"===i.type?e[i.name].format="date":"tel"===i.type&&(r[i.name]={...r[i.name],"ui:options":{inputType:"tel"}}):(r[i.name]={...r[i.name],"ui:widget":i.type},e[i.name].enum=i.options,e[i.name].enumNames=i.options),i.required&&t.push(i.name);return{schema:{type:"object",properties:e,required:t},uiSchema:r}},[n]);return t(Jt,{className:"rounded bg-white shadow-sm",children:[r&&e(Qt,{children:r}),e(d,{schema:u,uiSchema:m,formData:s,onSubmit:({formData:e})=>{c||(l(!0),i(e))},disabled:c,validate:!0,showErrorList:!1,submitText:a?"已提交":"提交",omitExtraData:!0,children:({submit:t})=>e(Ht,{children:t})})]})}const Ht=n.div`
|
|
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
|
+
`,Jt=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 Kt({content:r}){const{resume:n,disabled:i,response:o}=Lt(),[s,a]=Pt(void 0!==o),l=i||s;return t(Wt,{className:"rounded bg-white shadow-sm",children:[r&&e(Xt,{children:e(Et,{content:r})}),e(Vt,{children:e(k,{disabled:l,onClick:()=>{l||(a(!0),n("已确认"))},children:s?"已确认":"确认"})})]})}const Wt=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
|
+
`,Xt=n.div`
|
|
692
692
|
line-height: 1.6;
|
|
693
693
|
color: var(--bs-body-color);
|
|
694
|
-
`,
|
|
694
|
+
`,Vt=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 Yt(e){return e instanceof Error&&e.message||String(e)}class Gt extends P{state={hasError:!1};static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(e,t){this.props.onRenderError(e)}render(){return this.state.hasError?null:this.props.children}}function Zt({suspend:t}){const{readonly:r,inputRef:n}=$e(),{chunkIndex:i,chunk:o,toolIndex:s,tool:a,isLastMessage:l}=function(){const e=R(Mt);if(!e)throw new Error("useContext must be used within a Provider");return e}(),c=M(e=>{n.current?.resume({chunk:i,tool:s,payload:e})},[i,s]),d=M(e=>{c({error:Yt(e)})},[c]);let u=null;switch(t.type){case"select":u=e(Tt,{...t.select});break;case"form":u=e(_t,{...t.form});break;case"confirm":u=e(Kt,{...t.confirm})}const m=a?.response||o.node?.output;return e(Dt,{resume:c,disabled:r||!!o.error||!l,response:"(Empty)"===m?void 0:m,children:e(Gt,{onRenderError:d,children:u})})}function er({value:t,cite:n}){const i=t=>"string"==typeof t?e(Et,{content:t,cite:n}):"image"===t.type?e(At,{src:t.image}):"suspend"===t.type?e(Zt,{suspend:t.suspend}):null;return Array.isArray(t)?e(r,{children:t.map((t,r)=>e(L,{children:i(t)},r))}):i(t)}const tr=({reasoning:r,loading:n})=>{const[i,o]=q(!1);return F(()=>{n||o(!1)},[n]),e(L,{children:e("div",{className:"mb-2",children:t("div",i?{className:"shadow-sm rounded bg-white fs-7",children:[t("div",{onClick:()=>o(!1),role:"button",className:"d-flex align-items-center p-1 px-2 gap-2",children:[n?e(B,{animation:"border",variant:"primary",size:"sm"}):e("i",{className:"bi bi-check-circle-fill text-success"}),e("span",{className:"text-muted",children:n?"思考中":"已思考"}),e("i",{className:"bi bi-caret-up-fill text-muted"})]}),e("div",{className:"border-top p-2 d-flex flex-column gap-2",children:e("div",{className:"border rounded bg-light p-2",children:e(Et,{content:r})})})]}:{onClick:()=>o(!0),role:"button",className:"d-inline-flex align-items-center shadow-sm rounded bg-white p-1 px-2 fs-7 gap-2",children:[n?e(B,{animation:"border",variant:"primary",size:"sm"}):e("i",{className:"bi bi-check-circle-fill text-success"}),e("span",{className:"text-muted",children:n?"思考中":"已思考"}),e("i",{className:"bi bi-caret-down-fill text-muted"})]})})})},rr=D(t=>{const{renderReasoning:r}=$e();return r?r({Component:tr,props:t}):e(tr,{...t})}),nr=e=>null==e?"None":"object"==typeof e?JSON.stringify(e,null,2):e;function ir({tool:r,loading:n}){const{logLevel:i="none",renderToolContent:o}=$e(),s="response"in r,a=!s&&!n,{response:l,title:c,content:d,showStatus:u,defaultExpanded:m}=z(()=>{const i=(e=>{try{return JSON.parse(e.arguments)}catch(e){return null}})(r),a=e("span",{className:"text-truncate",children:r.title}),l=t("div",{className:"border-top p-2 d-flex flex-column gap-2",children:[t("div",{className:"border rounded bg-light",children:[e("div",{className:"d-flex align-items-center p-1 px-2 fs-7 gap-2",children:e("span",{className:"text-muted",children:"参数"})}),e(sr,{className:"border-top p-2",children:r.arguments})]}),s&&t("div",{className:"border rounded bg-light",children:[e("div",{className:"d-flex align-items-center p-1 px-2 fs-7 gap-2",children:e("span",{className:"text-muted",children:"响应"})}),e(sr,{className:"border-top p-2",children:nr(r.response)})]})]}),c=r.content&&e(er,{value:r.content});if(o){const e=o({tool:r,args:i,loading:n});if(e)return{title:null===e.title?null:e.title??a,response:null===e.response?null:e.response??l,content:null===e.content?null:e.content??c,showStatus:e.showStatus??!0,defaultExpanded:e.defaultExpanded??!1}}return{title:a,response:l,content:c,showStatus:!0,defaultExpanded:!1}},[r,o]),[h,p]=q(m),g="all"==i&&null!==l;return t(L,{children:[c&&e("div",{className:"mb-2",children:t(or,{className:"shadow-sm rounded bg-white fs-7",$open:h,children:[t("div",{onClick:()=>p(g&&!h),role:"button",className:"d-flex align-items-center flex-nowrap p-1 px-2 gap-2",children:[a?e("i",{className:"bi bi-dash-circle-fill text-muted"}):s?r.error?e("i",{className:"bi bi-x-circle-fill text-danger"}):e("i",{className:"bi bi-check-circle-fill text-success"}):e(B,{animation:"border",variant:"primary",size:"sm"}),u&&e("span",{className:"text-muted",children:a?"已取消":s?"已使用":"正在使用"}),c,g&&e("i",h?{className:"bi bi-caret-up-fill text-muted"}:{className:"bi bi-caret-down-fill text-muted"})]}),h&&l]})}),d]})}const or=n.div`
|
|
704
704
|
width: ${e=>e.$open?"auto":"fit-content"};
|
|
705
705
|
max-width: 100%;
|
|
706
706
|
overflow: hidden;
|
|
707
|
-
`,
|
|
707
|
+
`,sr=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 ar({node:r}){const[n,i]=q(!1),{nodeIconResolver:o}=$e(),s=!("latency"in r),a=s?e(B,{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(cr,{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(dr,{className:"me-2 text-truncate",children:r.title}),e("span",{className:"me-auto"}),!s&&e("span",{className:"text-nowrap text-muted",children:lr(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 lr=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`,cr=n.div`
|
|
713
713
|
svg {
|
|
714
714
|
flex-shrink: 0;
|
|
715
715
|
}
|
|
716
|
-
`,
|
|
716
|
+
`,dr=n.span`
|
|
717
717
|
display: inline-block;
|
|
718
|
-
`;function
|
|
718
|
+
`;function ur({nodes:r,loading:n}){const[i,o]=q(!1),s=r.some(e=>"error"in e),a=n?e(B,{animation:"border",variant:"primary",size:"sm"}):e("i",s?{className:"bi bi-x-circle-fill text-danger"}:{className:"bi bi-check-circle-fill text-success"});return e("div",{className:"mb-2",children:t("div",i?{className:"shadow-sm rounded bg-white fs-7",children:[t("div",{onClick:()=>o(!1),role:"button",className:"d-flex align-items-center p-1 px-2 gap-2",children:[a,e("span",{children:"工作流"}),e("i",{className:"bi bi-caret-up-fill text-muted"})]}),e("div",{className:"border-top p-2 d-flex flex-column gap-1 bg-light bg-opacity-50",children:r.map((t,r)=>e(ar,{node:t},r))})]}:{onClick:()=>o(!0),role:"button",className:"d-inline-flex align-items-center shadow-sm rounded bg-white p-1 px-2 fs-7 gap-2",children:[a,e("span",{children:"工作流"}),e("i",{className:"bi bi-caret-down-fill text-muted"})]})})}const mr=D(A(({chunks:r,loading:n,cite:i,isLast:o=!1,deleted:s=!1},a)=>{const{logLevel:l="none"}=$e(),c=z(()=>r.flatMap(e=>e.node?[e.node]:[]),[r]);return t(hr,{ref:a,$deleted:s,children:["all"===l&&c.length>0&&e(ur,{loading:n,nodes:c}),r.map((r,s)=>t(L,{children:[r.reasoning&&["stats","all"].includes(l)&&e(rr,{reasoning:r.reasoning,loading:n&&!r.content&&0===(r.tools||[]).length}),r.content&&e(Ft,{value:{chunkIndex:s,chunk:r,isLastMessage:o},children:e(er,{cite:i,value:r.content})}),(r.tools||[]).map((t,i)=>e(Ft,{value:{chunkIndex:s,chunk:r,toolIndex:i,tool:t,isLastMessage:o},children:e(ir,{tool:t,loading:n})},i)),r.error&&e(Et,{content:`[${r.error}]`})]},s))]})})),hr=n.div`
|
|
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 pr{#t;#o=[];#s=0;constructor(){this.#t=new W}speak(){for(this.#t.emit("playing",!0);this.#s<this.#o.length;){const e=this.#o[this.#s],t=new SpeechSynthesisUtterance(e),r=++this.#s;t.onend=()=>{r>=this.#o.length&&this.clear()},t.onerror=()=>{this.clear()},window.speechSynthesis.speak(t)}}clear(){this.#t.emit("playing",!1)}start(e,t=!1){this.#o=Array.isArray(e)?e:[e],t||(window.speechSynthesis.cancel(),this.#s=0),this.speak()}stop(){window.speechSynthesis.cancel(),this.clear()}onPlaying(e){this.#t.on("playing",e)}onSpeaking(e){this.#t.on("speaking",e)}}const gr=new Map;class fr{#r;#t;#o=[];#a=new Map;#l=!1;#s=0;#c=!1;constructor(e){this.#r=e,this.#t=new W}createLoader(e){const t=new Promise(async t=>{try{const{type:r,data:n}=await this.#r(e),i=new Audio(`data:${r};base64,${n}`);this.#a.set(e,i),t(i)}catch{this.#a.delete(e),t(void 0)}});return this.#a.set(e,t),t}async loadAudioData(){this.#c=!0,this.#t.emit("speaking",!0);let e=0;for(;e<this.#o.length;){const t=this.#o[e];!this.#a.has(t)&&this.#c&&await this.createLoader(t),e++}this.#t.emit("speaking",!1),this.#c=!1}waitForAudioLoaded(e){const t=this.#a.get(e);return t instanceof Promise?t:Promise.resolve(t)}async playAudio(e=0){this.#l=!0;const t=await this.waitForAudioLoaded(this.#o[e]);this.#t.emit("playing",!0),t?(gr.set(this,t),t.onpause=async()=>{t.ended?(this.#s++,this.#s<this.#o.length?await this.playAudio(this.#s):this.clear()):this.clear()},await t.play()):this.clear()}clear(){this.#l=!1,this.#c=!1,this.#t.emit("playing",!1),this.#t.emit("speaking",!1),gr.delete(this)}start(e,t=!1){gr.forEach((e,t)=>{t!==this&&(e.pause(),e.currentTime=0)}),this.#o=Array.isArray(e)?e:[e],t||(this.#s=0),this.#c||this.loadAudioData(),this.#l||this.playAudio()}update(e){this.#o=Array.isArray(e)?e:[e]}stop(){const e=gr.get(this);e&&(e.pause(),e.currentTime=0)}onPlaying(e){this.#t.on("playing",e)}onSpeaking(e){this.#t.on("speaking",e)}}function br({text:e,loading:t,loader:r}){const n=S(),[i,o]=q(!1),[s,a]=q(!1),l=S(t),c=async(i=!1)=>{n.current||(n.current=r?new fr(r):new pr,n.current.onSpeaking(o),n.current.onPlaying(a));let s="";"string"==typeof e?s=e:e.current&&(s=function(e){const t=e.querySelectorAll("p, h1, h2, h3, h4, h5, h6, li:not(:has(p,h1, h2, h3, h4, h5, h6))");return Array.from(t).flatMap(e=>e.textContent?[e.textContent]:[])}(e.current),t&&s.pop()),s&&0!==s.length&&n.current.start(s,i)};return F(()=>{if(l.current&&"string"!=typeof e&&e.current){if(t){const t={childList:!0,subtree:!0},r=new MutationObserver(function(){c(!0)});return r.observe(e.current,t),c(),()=>{r.disconnect()}}c(!0)}},[t]),F(()=>()=>{n.current&&(n.current.stop(),n.current=void 0)},[]),{playing:s,speaking:i,start:c,stop:()=>{n.current&&n.current.stop()}}}function vr({model:r="builtin",voice:n,loading:i,autoplay:o,contentRef:s,avatarRef:a}){const{request:l}=$e(),c=z(()=>{if("builtin"!==r)return async e=>(await l({url:"/speech",method:"post",data:{model:r,voice:n,input:e}})).audio},[r,n]),{playing:d,speaking:u,start:m,stop:h}=br({loader:c,text:s,loading:o&&i});let p=null;return a.current&&(u&&(p=le(e(yr,{children:e(B,{size:"sm",variant:"light"})}),a.current)),d&&(p=le(e(yr,{children:e(xr,{className:"bi bi-volume-down-fill text-light"})}),a.current))),t(Rt,{disabled:i&&!d,onClick:()=>{d?h():m()},children:[d?e(xr,{className:"bi bi-volume-down-fill"}):u?e(B,{size:"sm",variant:"primary"}):e(xr,{className:"bi bi-volume-down"}),p]})}const yr=n.div`
|
|
724
724
|
position: absolute;
|
|
725
725
|
top: 0;
|
|
726
726
|
left: 0;
|
|
@@ -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
|
+
`,xr=n.i`
|
|
734
734
|
|
|
735
735
|
&::before {
|
|
736
736
|
transform: scale(1.4)
|
|
737
737
|
}
|
|
738
|
-
`,
|
|
738
|
+
`,wr=D(({message:n,actions:i,setMessage:o,cite:s,speech:a,isLast:l})=>{const{query:c,quote:d,files:u=[],chunks:m,annotation:h,loading:p}=n,{user:g,bot:f,logLevel:b="none",messages:v,renderFileItem:y}=$e(),x=z(()=>m?m.reduce(function(e,t){const r=Array.isArray(t.content)?t.content.reduce((e,t)=>{const r=ft(t);return r?e+r+"\n":e},""):ft(t.content);return e+r+"\n"+(t.tools||[]).reduce((e,t)=>{if(t.content){const r=ft(t.content);if(r)return e+r+"\n"}return e},"")},""):"",[m]),k=S(null),N=S(null),j=S(null),C=c||u.length>0;return t(r,{children:[C&&t(Fr,{$reverse:!0,children:[g&&t(r,{children:[e(Rr,{children:e("img",{src:g.avatar})}),e(Sr,{})]}),t(Mr,{ref:k,children:[c&&e(Et,{content:c}),d&&e(Q,{trigger:"click",container:k,rootClose:!0,placement:"bottom",overlay:e(kr,{body:!0,children:d}),children:e(Nr,{children:e(Er,{children:d})})}),u.length>0&&u.map(({name:t,size:r,path:n},i)=>{if(E(n))return e(At,{src:`/uploads/${n}`},i);const o={name:t,url:`/uploads/${n}`,size:r};return e(jr,{children:y?y({Component:be,props:o}):e(be,{...o})},i)})]})]}),m&&t(Fr,{children:[f&&t(r,{children:[e(Rr,{ref:N,children:e("img",{src:f.avatar})}),e(Sr,{})]}),t(Mr,{children:[C&&!1!==i&&t(Cr,{children:[e(w,{placement:"top",content:x,as:Rt,tooltip:!0}),a&&e(vr,{loading:n.loading,avatarRef:N,contentRef:j,...a}),i?.({Component:Rt,message:n,content:x,setMessage:o,messages:v})]}),e($r,{children:["stats","all"].includes(b)&&n.stats&&t(r,{children:[t("span",{children:["耗时 ",n.stats.latency/1e3," 秒"]}),t("span",{children:["花费 ",n.stats.usage," Credits"]})]})}),e(mr,{ref:j,chunks:m,loading:p,isLast:l,cite:s,deleted:!!h}),h&&t("div",{children:[t("div",{className:"d-flex align-items-center",children:[e("span",{className:"fs-7 text-secondary me-2",children:"标注的答案"}),e("hr",{className:"flex-fill"})]}),e(Et,{content:h.answer})]}),n.loading&&e(gt,{})]})]})]})}),kr=n(K)`
|
|
739
739
|
max-width: calc(100% - .875rem * 2);
|
|
740
740
|
width: calc(100% - .875rem * 2);
|
|
741
741
|
font-size: 1rem;
|
|
@@ -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
|
+
`,Er=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
|
+
`,Nr=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
|
+
`,jr=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
|
+
`,Cr=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
|
+
`,$r=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
|
+
`,Rr=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
|
+
`,Sr=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
|
+
`,Mr=n.div`
|
|
812
812
|
padding: .875rem;
|
|
813
813
|
background-color: rgb(243, 243, 243);
|
|
814
814
|
border-radius: var(--bs-border-radius-lg);
|
|
@@ -816,32 +816,32 @@ 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
|
+
${$r}, ${Cr} {
|
|
820
820
|
opacity: 1;
|
|
821
821
|
}
|
|
822
822
|
}
|
|
823
|
-
`,
|
|
823
|
+
`,Fr=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
|
+
${Sr} {
|
|
831
831
|
border-left-color: rgba(var(--bs-primary-rgb), 0.1);
|
|
832
832
|
border-right-color: transparent;
|
|
833
833
|
}
|
|
834
834
|
|
|
835
|
-
${
|
|
835
|
+
${Mr} {
|
|
836
836
|
background: rgba(var(--bs-primary-rgb), 0.1);
|
|
837
837
|
}
|
|
838
838
|
`};
|
|
839
|
-
`;function
|
|
839
|
+
`;function qr(r){const{placeholder:n,actions:i,cite:o,speech:s,renderItem:a,scrollRef:l}=r,{messages:c,setMessages:d,loading:u,suggestions:m,conversationId:p}=$e(),g=S(r.loaded),f=S(!0),b=S(!1);F(()=>{const e=l.current;if(!e)return;const t=()=>{b.current=!0},r=()=>{if(!b.current)return;const t=e.scrollHeight-e.scrollTop-e.clientHeight<50;f.current=t,t&&(b.current=!1)};return e.addEventListener("wheel",t,{passive:!0}),e.addEventListener("touchstart",t,{passive:!0}),e.addEventListener("scroll",r,{passive:!0}),()=>{e.removeEventListener("wheel",t),e.removeEventListener("touchstart",t),e.removeEventListener("scroll",r)}},[l]);const v=h(()=>{if(!f.current)return;const e=l.current;e&&requestAnimationFrame(()=>{e.scrollTo({top:e.scrollHeight})})},200),y=S(null),{height:x}=ce({ref:y});F(()=>{(u||!g.current)&&c.length>0&&(u&&(g.current=!0),v())},[x,u,g,c]),F(()=>{m.length>0&&v()},[m]),F(()=>{g.current=r.loaded},[p]),F(()=>{const e=y.current;if(e){const t=()=>{g.current=!0};return e.addEventListener("click",t),()=>{e.removeEventListener("click",t)}}},[y]);const w=c.slice(-30);return t(Ar,{ref:y,children:[0===w.length&&n,w.map((t,r)=>{const n={actions:i,cite:o,speech:s,message:t,setMessage:e=>{d(r=>{const n=r.findIndex(e=>e.id===t.id);-1!==n&&e(r[n])})},isLast:r===w.length-1};return a?e(L,{children:a({Component:wr,props:n})},r):e(wr,{...n},r)}),m.length>0&&e(zr,{children:m.map((t,r)=>e("a",{href:"#!question",children:t},r))})]})}const Ar=n.div`
|
|
840
840
|
display: flex;
|
|
841
841
|
flex-direction: column;
|
|
842
842
|
flex: 1;
|
|
843
843
|
margin-bottom: .5rem;
|
|
844
|
-
`,
|
|
844
|
+
`,zr=n.div`
|
|
845
845
|
display: flex;
|
|
846
846
|
flex-direction: column;
|
|
847
847
|
align-items: flex-start;
|
|
@@ -858,7 +858,7 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
|
|
|
858
858
|
background: var(--bs-secondary-bg-subtle);
|
|
859
859
|
}
|
|
860
860
|
}
|
|
861
|
-
`,
|
|
861
|
+
`,Ir=D(A(({className:r,bot:n,user:i,input:o,logLevel:s,imageResolver:a,nodeIconResolver:l,placeholder:c,actions:d,onboarding:u,conversation:m,cite:h,speech:p,renderItem:g,renderFileItem:f,renderToolContent:b,renderReasoning:y,messages:w,request:k,onReset:E,transformMessages:j=ct},C)=>{const $=M(e=>{const t=[];if(u&&!1!==u.enable){const e=dt(u.questions||[]);t.push({chunks:[{content:[u.prologue,...e.map(e=>`[${e}](#!question)`)].join("\n"),tools:[]}],loading:u.loading})}return e?t.concat(j(e.messages||[])):w?t.concat(j(w)):t},[u]),[R,F]=q(m?.id),A=S(),[L,D]=v(()=>$(m)),P=z(()=>k?"string"==typeof k?N.create({baseURL:k}):k:N,[k]),[T,O]=q(!1),B=S(),[U,_]=q("0px"),[H,J]=q([]),Q=M(e=>{"suggestion"==e.type&&J(e.data),o?.onEvent?.(e)},[o?.onEvent]),K=M(e=>{F(e?.id),D($(e)),J([]),O(!1),E?.(e)},[T,$,E]);return I(C,()=>({reset:K}),[K]),e(Se,{request:P,bot:n,user:i,logLevel:s,imageResolver:a,nodeIconResolver:l,conversationId:R,setConversationId:F,inputRef:A,messages:L,setMessages:D,suggestions:H,setSuggestions:J,loading:T,setLoading:O,renderFileItem:f,reset:K,readonly:!o,renderToolContent:b,renderReasoning:y,children:e(x,{children:e(Pr,{className:r,scrollableNodeProps:{ref:M(e=>{B.current=e;const t=e?.firstElementChild;t&&requestAnimationFrame(()=>{const e=window.getComputedStyle(t);_(e.paddingBottom)})},[])},children:t(Dr,{children:[e(qr,{placeholder:c,cite:h,actions:d,loaded:!o,speech:p,renderItem:g,scrollRef:B}),o&&e(Lr,{$bottom:U,...o,onEvent:Q,scrollRef:B})]})})})})}),V),Lr=n(et)`
|
|
862
862
|
position: sticky;
|
|
863
863
|
bottom: 0;
|
|
864
864
|
z-index: 1;
|
|
@@ -866,7 +866,7 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
|
|
|
866
866
|
padding-top: .5rem;
|
|
867
867
|
margin-bottom: -${e=>e.$bottom};
|
|
868
868
|
padding-bottom: calc(1rem + ${e=>e.$bottom});
|
|
869
|
-
`,
|
|
869
|
+
`,Dr=n.div`
|
|
870
870
|
display: flex;
|
|
871
871
|
flex-direction: column;
|
|
872
872
|
width: 100%;
|
|
@@ -875,10 +875,10 @@ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{styled as
|
|
|
875
875
|
max-width: calc(810px + 2rem);
|
|
876
876
|
padding: 0 1rem;
|
|
877
877
|
flex: 1;
|
|
878
|
-
`,
|
|
878
|
+
`,Pr=n(j)`
|
|
879
879
|
.simplebar-content {
|
|
880
880
|
min-height: 100%;
|
|
881
881
|
display: flex;
|
|
882
882
|
flex-direction: column;
|
|
883
883
|
}
|
|
884
|
-
`,
|
|
884
|
+
`,Tr=D(A(({className:t,request:r,disabled:n,supportStop:i,fileTypes:o,speech:s,minRows:a,maxRows:l,toolbar:c,toolbarActions:d,tools:u,autoFocus:m,renderEditableInput:h,placeholder:p,variables:g,onEvent:f,onNewConversation:b},v)=>{const[y,x]=q(!1),w=S(),k=z(()=>r?"string"==typeof r?N.create({baseURL:r}):r:N,[r]);return e(Re,{request:k,loading:y,setLoading:x,inputRef:w,children:e(et,{ref:v,className:t,fileTypes:o,speech:s,variables:g,minRows:a,maxRows:l,toolbar:c,toolbarActions:d,tools:u,disabled:n,autoFocus:m,renderEditableInput:h,placeholder:p,supportStop:i,onEvent:f,onNewConversation:b})})}),V);async function Or(e){const t=await de().use(me).use(re).use(ne).use(ie).use(he).use(ue).process(e);return String(t)}export{Le as ActionButton,Tr as ChatInput,mr as Chunks,Ge as EditableInput,ge as FileIcon,be as FileItem,Fe as InputButton,Et as Markdown,Ir as MessageBox,Me as VariableForm,pe as isToolMessage,Or as md2html,dt as pickQuestions,je as useChatContext,$e as useMessageContext,br as useSynthesis};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@topthink/chat",
|
|
3
|
-
"version": "1.3.
|
|
3
|
+
"version": "1.3.20",
|
|
4
4
|
"scripts": {
|
|
5
5
|
"prebuild": "rimraf es types",
|
|
6
6
|
"build": "rollup -c --environment NODE_ENV:production",
|
|
@@ -71,5 +71,5 @@
|
|
|
71
71
|
},
|
|
72
72
|
"author": "yunwuxin <tzzhangyajun@qq.com> (https://github.com/yunwuxin)",
|
|
73
73
|
"license": "MIT",
|
|
74
|
-
"gitHead": "
|
|
74
|
+
"gitHead": "f7c690a014e4b4f6ab3fa8d92c0fe47983bf6133"
|
|
75
75
|
}
|