@topthink/chat 1.1.24 → 1.1.25
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 +63 -59
- package/package.json +5 -3
package/es/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{jsxs as e,jsx as t,Fragment as r}from"react/jsx-runtime";import{styled as n,css as i,formatSize as o,Tooltip as s,useAsync as a,isRequestError as l,Form as c,Toast as d,InfiniteScroller as h,Offcanvas as
|
|
1
|
+
import{jsxs as e,jsx as t,Fragment as r}from"react/jsx-runtime";import{styled as n,css as i,formatSize as o,Tooltip as s,useAsync as a,isRequestError as l,Form as c,Toast as d,InfiniteScroller as h,Offcanvas as m,dayjs as u,RequestButton as p,useImmer as g,Lightbox as f,Clipboard as b,getAbsoluteUrl as v,isImageUrl as x,request as y}from"@topthink/components";import*as k from"react";import{createContext as w,useContext as N,useRef as E,useEffect as j,useCallback as C,useState as M,forwardRef as $,useMemo as q,useImperativeHandle as z,Fragment as S,memo as R}from"react";import A from"react-textarea-autosize";import*as F from"path";import I from"path";import{Spinner as D,Badge as L,CloseButton as O,OverlayTrigger as T,Popover as P}from"react-bootstrap";import B from"eventemitter3";import _ from"lodash/isEqual";import{toString as U}from"hast-util-to-string";import H from"react-markdown";import"katex/dist/katex.min.css";import J from"rehype-highlight";import K from"rehype-katex";import Q from"remark-breaks";import W from"remark-gfm";import X from"remark-math";import{codes as V,types as Y}from"micromark-util-symbol";import{markdownLineEnding as G}from"micromark-util-character";import{createPortal as Z}from"react-dom";import ee from"use-resize-observer";const te=function(e){let{ext:r}=e;const{result:n}=a((async e=>(await function(e){switch(e){case"../../images/file/docx.svg":return import("./docx-nWXnlyT_.js");case"../../images/file/jpg.svg":return import("./jpg-6tBxSzWk.js");case"../../images/file/md.svg":return import("./md-GZ3HJPcw.js");case"../../images/file/pdf.svg":return import("./pdf-pVX1_E6T.js");case"../../images/file/png.svg":return import("./png-u0o1NMqQ.js");case"../../images/file/pptx.svg":return import("./pptx-Hprz0cON.js");case"../../images/file/txt.svg":return import("./txt-eHeCpvNO.js");case"../../images/file/xlsx.svg":return import("./xlsx-uOft-SV2.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),[r]);return n?t("img",{width:30,height:30,src:n}):null};function re(r){let{className:n,name:i,size:a,loading:l,error:c,onRemove:d}=r;const h=I.extname(i).substring(1),m=e(se,{className:n,$error:!!c,children:[e(oe,{children:[t(te,{ext:h}),l&&t(D,{variant:"primary"})]}),e(ie,{children:[t("h4",{children:i}),t("p",{children:o(a,1)})]}),d&&t(ne,{onClick:e=>{e.preventDefault(),d()},children:t("i",{className:"bi bi-trash3"})})]});return c?t(s,{placement:"top",tooltip:c,children:m}):m}const ne=n.div`
|
|
2
2
|
width: 1.75rem;
|
|
3
3
|
height: 1.75rem;
|
|
4
4
|
align-items: center;
|
|
@@ -13,7 +13,7 @@ import{jsxs as e,jsx as t,Fragment as r}from"react/jsx-runtime";import{styled as
|
|
|
13
13
|
color: var(--bs-danger);
|
|
14
14
|
background-color: var(--bs-danger-bg-subtle);
|
|
15
15
|
}
|
|
16
|
-
`,
|
|
16
|
+
`,ie=n.div`
|
|
17
17
|
flex: 1;
|
|
18
18
|
overflow: hidden;
|
|
19
19
|
|
|
@@ -34,7 +34,7 @@ import{jsxs as e,jsx as t,Fragment as r}from"react/jsx-runtime";import{styled as
|
|
|
34
34
|
line-height: 20px;
|
|
35
35
|
margin-bottom: 0;
|
|
36
36
|
}
|
|
37
|
-
`,
|
|
37
|
+
`,oe=n.div`
|
|
38
38
|
position: relative;
|
|
39
39
|
width: 3rem;
|
|
40
40
|
height: 3rem;
|
|
@@ -48,7 +48,7 @@ import{jsxs as e,jsx as t,Fragment as r}from"react/jsx-runtime";import{styled as
|
|
|
48
48
|
position: absolute;
|
|
49
49
|
}
|
|
50
50
|
|
|
51
|
-
`,
|
|
51
|
+
`,se=n.div`
|
|
52
52
|
display: flex;
|
|
53
53
|
gap: .5rem;
|
|
54
54
|
padding: .5rem;
|
|
@@ -64,7 +64,7 @@ import{jsxs as e,jsx as t,Fragment as r}from"react/jsx-runtime";import{styled as
|
|
|
64
64
|
${e=>e.$error&&i`
|
|
65
65
|
border-color: var(--bs-danger) !important;
|
|
66
66
|
`}
|
|
67
|
-
`,
|
|
67
|
+
`,ae=[".txt",".md",".pdf",".docx",".xlsx",".pptx",".png",".jpg"],le=w(null);function ce(){const e=N(le);if(!e)throw new Error("useContext must be used within a Provider");return e}function de(e){let{children:r,...n}=e;return t(le.Provider,{value:n,children:r})}function he(e){let{variables:r,values:n,onSubmit:i,onChange:o,children:s}=e;const a={},l=[],d={};return r.forEach((e=>{a[e.key]={type:"string",title:e.label},"textarea"===e.type?d[e.key]={"ui:widget":"textarea"}:"select"===e.type&&e.options&&(a[e.key].enum=e.options,a[e.key].enumNames=e.options,e.options.length>0&&(a[e.key].default=e.options[0])),e.required&&l.push(e.key)})),t(c,{schema:{type:"object",properties:a,required:l},formData:n,omitExtraData:!0,uiSchema:d,submitText:"开始对话",onSubmit:i,onChange:o,children:s})}const me=n.button`
|
|
68
68
|
color: var(--bs-secondary);
|
|
69
69
|
cursor: pointer;
|
|
70
70
|
display: flex;
|
|
@@ -87,12 +87,12 @@ import{jsxs as e,jsx as t,Fragment as r}from"react/jsx-runtime";import{styled as
|
|
|
87
87
|
background-color: var(--bs-gray-200);
|
|
88
88
|
}
|
|
89
89
|
|
|
90
|
-
`;let
|
|
90
|
+
`;let ue=class{#e;#t;constructor(){this.#t=new B}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 d.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),d.error(e.error)},this.#e=t}this.#t.emit("recording",!0),this.#e.start()}stop(){this.#e?.stop(),this.#t.emit("recording",!1)}},pe=class{#t;#r;#n;#i;constructor(e){this.#r=e,this.#t=new B}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){d.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 ge=$(((r,n)=>{let{onResult:i,model:o="builtin"}=r;const{request:a}=ce(),l=q((()=>{if("builtin"!==o)return async e=>{const t=new FormData;t.append("file",e,"audio.mp3"),t.append("model",o);return(await a({url:"/transcriptions",method:"post",data:t})).text}}),[o]),{start:c,stop:d,recording:h,transcribing:m}=function(e){let{onResult:t,loader:r}=e;const n=E(),[i,o]=M(!1),[s,a]=M(!1);return j((()=>()=>{n.current&&(n.current.stop(),n.current=void 0)}),[]),{recording:i,transcribing:s,start:async()=>{n.current||(n.current=r?new pe(r):new ue,n.current.onRecording(o),n.current.onTranscribing(a),n.current.onResult(t)),n.current.start()},stop:()=>{n.current&&n.current.stop()}}}({onResult:i,loader:l});return z(n,(()=>({start:c,stop:d})),[c,d]),t(s,{tooltip:h?"停止":"语音输入",placement:"top",children:e(me,{onMouseDown:e=>{e.preventDefault(),h?d():c()},children:[m&&t(fe,{animation:"border",variant:"primary",size:"sm"}),t("i",h?{className:"bi bi-mic-fill text-danger"}:{className:"bi bi-mic"})]})})})),fe=n(D)`
|
|
91
91
|
position: absolute;
|
|
92
92
|
--bs-spinner-width: .75rem;
|
|
93
93
|
--bs-spinner-height: .75rem;
|
|
94
94
|
--bs-spinner-border-width: 0.1em;
|
|
95
|
-
`,
|
|
95
|
+
`,be=$(((e,r)=>{let{className:n,children:i,size:o,tooltip:a,placement:l,onClick:c,onMouseDown:d}=e;const h=t(ve,{ref:r,className:n,onClick:c,onMouseDown:d,$size:o,children:i});return a?t(s,{tooltip:a,placement:l,children:h}):h})),ve=n.div`
|
|
96
96
|
width: 2rem;
|
|
97
97
|
height: 2rem;
|
|
98
98
|
align-items: center;
|
|
@@ -116,10 +116,10 @@ import{jsxs as e,jsx as t,Fragment as r}from"react/jsx-runtime";import{styled as
|
|
|
116
116
|
&:hover {
|
|
117
117
|
background-color: var(--bs-secondary-bg-subtle);
|
|
118
118
|
}
|
|
119
|
-
`;function
|
|
119
|
+
`;function xe(){const{request:n,reset:i,conversationId:o}=ce(),[a,l]=M(!1);return e(r,{children:[t(be,{tooltip:"历史记录",placement:"top",onClick:()=>l(!0),children:t("i",{className:"bi bi-clock-history"})}),t(m,{show:a,onHide:()=>{l(!1)},placement:"end",header:"聊天历史记录",bodyAs:ye,children:a&&t(je,{children:t(Ee,{useWindow:!1,source:e=>n({url:"/conversation",params:e}),render:r=>{let{data:a,loading:c,setData:d}=r;return a.length||c?a.map(((r,a)=>{const c=r.messages?.reduce(((e,t)=>e+t.chunks.reduce(((e,t)=>e+(t.content||"")),"")),"");return e(S,{children:[a>0&&t("hr",{className:"mx-2 my-2"}),e(Ne,{onClick:()=>{i(r),l(!1)},children:[e(we,{children:[o===r.id&&t(L,{bg:"secondary",children:"当前"}),t("span",{className:"fw-bold overflow-hidden text-truncate me-auto",children:r.title||"未命名对话"}),t("span",{className:"text-body text-opacity-50 flex-shrink-0 ms-5",children:u(r.update_time).fromNow()})]}),e(ke,{children:[t("span",{className:"overflow-hidden text-truncate me-auto",children:c||" "}),t("span",{className:"ms-3",children:o!==r.id&&t(s,{tooltip:"删除",children:t(p,{as:"a",confirm:"确定要删除吗?",onRequest:()=>n({url:`/conversation/${r.id}`,method:"DELETE"}),onSuccess:()=>{d((e=>{const t=e.findIndex((e=>e.id===r.id));-1!==t&&e.splice(t,1)}))},children:t("i",{className:"bi bi-trash3"})})})})]})]})]},r.id)})):t("div",{className:"text-muted text-center py-5",children:"暂无对话记录"})}})})})]})}const ye=n.div`
|
|
120
120
|
padding: 0;
|
|
121
121
|
overflow: hidden;
|
|
122
|
-
`,
|
|
122
|
+
`,ke=n.div`
|
|
123
123
|
color: var(--bs-gray-600);
|
|
124
124
|
font-weight: 400;
|
|
125
125
|
line-height: 22px;
|
|
@@ -129,11 +129,11 @@ import{jsxs as e,jsx as t,Fragment as r}from"react/jsx-runtime";import{styled as
|
|
|
129
129
|
& :last-child {
|
|
130
130
|
display: none;
|
|
131
131
|
}
|
|
132
|
-
`,
|
|
132
|
+
`,we=n.div`
|
|
133
133
|
display: flex;
|
|
134
134
|
align-items: center;
|
|
135
135
|
gap: .25rem;
|
|
136
|
-
`,
|
|
136
|
+
`,Ne=n.div`
|
|
137
137
|
gap: .5rem;
|
|
138
138
|
display: flex;
|
|
139
139
|
flex-direction: column;
|
|
@@ -146,34 +146,34 @@ import{jsxs as e,jsx as t,Fragment as r}from"react/jsx-runtime";import{styled as
|
|
|
146
146
|
|
|
147
147
|
|
|
148
148
|
&:hover {
|
|
149
|
-
${
|
|
149
|
+
${ke} :last-child {
|
|
150
150
|
display: initial;
|
|
151
151
|
}
|
|
152
152
|
}
|
|
153
153
|
}
|
|
154
|
-
`,
|
|
154
|
+
`,Ee=n(h)`
|
|
155
155
|
display: flex;
|
|
156
156
|
flex-direction: column;
|
|
157
157
|
padding: .5rem;
|
|
158
|
-
`,
|
|
158
|
+
`,je=n.div`
|
|
159
159
|
height: 100%;
|
|
160
160
|
overflow-y: auto;
|
|
161
|
-
`;var
|
|
161
|
+
`;var Ce;function Me(){return Me=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},Me.apply(this,arguments)}const $e=e=>k.createElement("svg",Me({width:"1em",height:"1em",fill:"currentColor",viewBox:"0 0 256 256"},e),Ce||(Ce=k.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 qe(){const{reset:e}=ce();return t(be,{className:"text-primary",tooltip:"新会话",placement:"top",onClick:e,children:t($e,{})})}function ze(r){let{children:n}=r;return e(Re,{children:[n,e(Se,{children:[t(xe,{}),t(qe,{})]})]})}const Se=n.div`
|
|
162
162
|
display: flex;
|
|
163
163
|
gap: .25rem;
|
|
164
164
|
margin-left: auto;
|
|
165
|
-
|
|
165
|
+
`,Re=n.div`
|
|
166
166
|
margin-bottom: .5rem;
|
|
167
167
|
display: flex;
|
|
168
168
|
padding: 0 .125rem;
|
|
169
|
-
`;var
|
|
169
|
+
`;var Ae=$((function(r,n){let{suggestion:i,fileTypes:o,speech:a,scrollRef:c,variables:h,minRows:m,toolbar:u,disabled:p,autoFocus:f,placeholder:b="请输入你的问题, Enter+Shift换行, Enter发送"}=r;const v=E(null),x=E(null),y=E(null),[k,w]=M(""),[N,$]=M(""),[q,S]=g([]),[R,I]=M(!1),D=o&&o.length>0?o:ae,{messages:L,loading:T,request:P}=ce(),{send:B}=function(e){let{suggestion:t,onSuccess:r}=e;const{setMessages:n,setSuggestions:i,setLoading:o,conversationId:s,setConversationId:a,request:c}=ce(),d=E(null),h=E(s);j((()=>{h.current=s}),[s]);const m=C((async()=>{d.current=new AbortController;try{let e={method:"post",url:"/suggestion",data:{conversation:h.current},signal:d.current.signal};const t=await c(e);i(t)}catch{}finally{d.current=null}}),[c]),u=C((async function(e){if("string"==typeof e){for(var s=arguments.length,u=new Array(s>1?s-1:0),p=1;p<s;p++)u[p-1]=arguments[p];e={query:e,...u}}const{query:g,files:f=[],variables:b={},quote:v}=e;if(g||f.length>0){d.current&&d.current.abort(),o(!0),i([]),n((e=>{e.push({query:g,quote:v,files:f,variables:b,chunks:[],loading:!0})}));try{let e={method:"post",data:{query:g,quote:v,files:f,variables:b,conversation:h.current},onMessage:e=>{if(e.data)if("[DONE]"!=e.data)try{const t=JSON.parse(e.data);t.conversation?(h.current=t.conversation,a(t.conversation)):n((e=>{const r=e[e.length-1];if(r.chunks)if(t.chunks){const e=t.chunks.index;if(r.chunks[e]||(r.chunks[e]={content:"",reasoning:"",tools:[]}),t.chunks.error)r.chunks[e].error=t.chunks.error;else if(t.chunks.tools){const n=t.chunks.tools.index;"response"in t.chunks.tools?(r.chunks[e].tools[n].response=t.chunks.tools.response,r.chunks[e].tools[n].error=t.chunks.tools.error,r.chunks[e].tools[n].content=t.chunks.tools.content):r.chunks[e].tools[n]={name:t.chunks.tools.name,title:t.chunks.tools.title,arguments:t.chunks.tools.arguments}}else if(t.chunks.reasoning)r.chunks[e].reasoning+=t.chunks.reasoning;else if(t.chunks.content)if("object"==typeof t.chunks.content){Array.isArray(r.chunks[e].content)||(r.chunks[e].content=[]);const n=t.chunks.content.index,i=t.chunks.content.value;"string"==typeof i?(r.chunks[e].content[n]||(r.chunks[e].content[n]=""),r.chunks[e].content[n]+=i):r.chunks[e].content[n]=i}else r.chunks[e].content+=t.chunks.content;else t.chunks.node&&(r.chunks[e].node={...r.chunks[e].node,...t.chunks.node})}else t.stats?r.stats=t.stats:t.id&&(r.id=t.id)}))}catch(e){console.error(e)}else n((e=>{e[e.length-1].loading=!1}))}};await c(e),t&&requestAnimationFrame(m)}catch(e){let t="未知错误";l(e)&&(t=401==e.response?.status?"未授权或授权已过期,请刷新页面后重试":"string"==typeof e.errors?e.errors:Object.values(e.errors).join("\n")),n((e=>{const r=e[e.length-1];r.chunks&&(0===r.chunks.length?r.chunks=[{content:`[${t}]`,tools:[]}]:r.chunks[r.chunks.length-1].content=`[${t}]`),r.loading=!1}))}o(!1),r?.()}}),[c]);return{send:u}}({suggestion:i,onSuccess(){requestAnimationFrame((()=>{v.current?.focus()}))}}),[_,U]=M();j((()=>{const e=L.filter((e=>!!e.query));U(e.at(-1)?.variables)}),[L]),j((()=>{!o&&q.length>0&&S([])}),[o]),j((()=>{const e=c.current;if(e&&B){const t=e=>{if(e.target instanceof HTMLAnchorElement&&"#!question"===e.target.hash){e.preventDefault();const t={query:e.target.text};h&&(t.variables={..._,...h.values}),B(t)}};return e.addEventListener("click",t),()=>{e.removeEventListener("click",t)}}}),[h,_]);const H=C((e=>{let{target:t}=e;if(t.files){const e=Array.from(t.files).filter((e=>!!D.includes(F.extname(e.name))&&(!(e.size>20971520)&&e))).slice(0,6-q.length);S((t=>{t.push(...e.map((e=>({file:e}))))})),e.forEach((async e=>{try{const t=new FormData;t.set("file",e);const r=await P({method:"POST",url:"/upload",data:t});S((t=>{const n=t.find((t=>t.file===e));n&&(n.path=r.path)}))}catch(t){const r=l(t)?t.message:"unknown error";S((t=>{const n=t.find((t=>t.file===e));n&&(n.error=r)}))}}))}t.value=""}),[q,D]),J=q.flatMap((e=>{let{file:t,path:r}=e;return r?[{name:t.name,size:t.size,path:r}]:[]})),K=C((()=>{if(k||J.length>0){const e={query:k,files:J};h&&(e.variables={..._,...h.values}),N&&(e.quote=N),B(e),w(""),$(""),S([]),y.current?.stop(!0)}}),[k,J,h,_,N]);if(z(n,(()=>({setQuery:w,setQuote:$,send:B,focus(){v.current?.focus()}}))),h){const e=h.config.filter((e=>!(e.key in(h.values||{})))),r=function(t){let r=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return!!t&&e.every((e=>{const n=!e.required||t?.[e.key];return!n&&r&&d.error("请完善必填信息"),n}))};if(e.length>0&&!r(_))return t(Ie,{children:t(Fe,{children:t(he,{values:_,variables:e,onSubmit:e=>{let{formData:t}=e;if(r(t,!0))return U(t),!0}})})})}return e(Be,{children:[u&&t(ze,{children:u}),e(Pe,{$focused:R&&!T,children:[q.length>0&&t(Le,{children:q.map(((e,r)=>{let{file:n,error:i,path:o}=e;const s=void 0===i&&void 0===o;return t(De,{name:n.name,size:n.size,error:i,loading:s,onRemove:()=>{S((e=>{const t=e.findIndex((e=>e.file===n));-1!==t&&e.splice(t,1)}))}},r)}))}),!!N&&e(Te,{children:[t("i",{className:"bi bi-quote"}),t("p",{children:N}),t(O,{onClick:()=>$("")})]}),e(Oe,{children:[t(A,{disabled:T||p,ref:v,placeholder:b,minRows:m,maxRows:5,value:k,onChange:e=>w(e.target.value),onKeyDown:e=>{"Enter"!==e.key||e.shiftKey||(e.preventDefault(),K())},autoFocus:f,onFocus:()=>I(!0),onBlur:()=>I(!1)}),o&&t(s,{tooltip:"可上传不超过6个小于20MB的文件",placement:"top",children:e(me,{disabled:q.length>=6,onClick:()=>x.current?.click(),children:[t("input",{onChange:H,multiple:!0,accept:D.join(","),ref:x,type:"file",hidden:!0}),t("i",{className:"bi bi-file-earmark-arrow-up"})]})}),a&&t(ge,{ref:y,model:a.model,onResult:e=>{v.current?.focus(),w((t=>t+e+" "))}}),t(me,{className:"text-primary",disabled:!k&&0===J.length,onClick:e=>{e.preventDefault(),K()},children:t("i",{className:"bi bi-send-fill"})})]})]})]})}));const Fe=n.div`
|
|
170
170
|
border-radius: var(--bs-border-radius-lg);
|
|
171
171
|
box-shadow: var(--bs-box-shadow-sm);
|
|
172
172
|
margin: 1rem;
|
|
173
173
|
padding: 1rem;
|
|
174
174
|
width: 100%;
|
|
175
175
|
max-width: 500px;
|
|
176
|
-
`,
|
|
176
|
+
`,Ie=n.div`
|
|
177
177
|
position: absolute;
|
|
178
178
|
left: 0;
|
|
179
179
|
right: 0;
|
|
@@ -183,15 +183,15 @@ import{jsxs as e,jsx as t,Fragment as r}from"react/jsx-runtime";import{styled as
|
|
|
183
183
|
display: flex;
|
|
184
184
|
justify-content: center;
|
|
185
185
|
align-items: center;
|
|
186
|
-
`,
|
|
186
|
+
`,De=n(re)`
|
|
187
187
|
width: calc((100% - .75rem) / 2);
|
|
188
|
-
`,
|
|
188
|
+
`,Le=n.div`
|
|
189
189
|
display: flex;
|
|
190
190
|
flex-wrap: wrap;
|
|
191
191
|
padding: .75rem;
|
|
192
192
|
gap: .75rem;
|
|
193
193
|
border-bottom: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color);
|
|
194
|
-
`,
|
|
194
|
+
`,Oe=n.div`
|
|
195
195
|
display: flex;
|
|
196
196
|
padding: .5rem .5rem .5rem 1rem;
|
|
197
197
|
gap: .25rem;
|
|
@@ -229,44 +229,48 @@ import{jsxs as e,jsx as t,Fragment as r}from"react/jsx-runtime";import{styled as
|
|
|
229
229
|
-webkit-box-orient: vertical;
|
|
230
230
|
display: -webkit-box;
|
|
231
231
|
}
|
|
232
|
-
`,
|
|
232
|
+
`,Pe=n.div`
|
|
233
233
|
background: #FFF;
|
|
234
234
|
border: var(--bs-border-width) var(--bs-border-style) ${e=>e.$focused?"var(--bs-primary)":"var(--bs-border-color)"};
|
|
235
235
|
border-radius: var(--bs-border-radius-lg);
|
|
236
236
|
box-shadow: 0.125rem 0.25rem 0.5rem rgba(0, 0, 0, 0.1);
|
|
237
|
-
`,
|
|
237
|
+
`,Be=n.div`
|
|
238
238
|
margin: 0 1rem 1rem;
|
|
239
|
-
`;function
|
|
240
|
-
position: absolute;
|
|
241
|
-
right: 10px;
|
|
242
|
-
top: 1em;
|
|
239
|
+
`;function _e(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((e=>{let{content:t="",node:r,error:n,tools:i=[],reasoning:o}=e;return{content:t,reasoning:o,error:n,tools:i,node:r}})),annotation:e.annotation,stats:{usage:e.usage,latency:e.latency}})))}function Ue(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 He,Je,Ke;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)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},Qe.apply(this,arguments)}const We=e=>k.createElement("svg",Qe({xmlns:"http://www.w3.org/2000/svg",width:20,height:10,fill:"#fff",viewBox:"0 0 120 30"},e),He||(He=k.createElement("circle",{cx:15,cy:15,r:15,fill:"#3c60ff"},k.createElement("animate",{attributeName:"r",begin:"0s",calcMode:"linear",dur:"0.8s",from:15,repeatCount:"indefinite",to:15,values:"15;9;15"}),k.createElement("animate",{attributeName:"fill-opacity",begin:"0s",calcMode:"linear",dur:"0.8s",from:1,repeatCount:"indefinite",to:1,values:"1;.5;1"}))),Je||(Je=k.createElement("circle",{cx:60,cy:15,r:9,fill:"#3c60ff",fillOpacity:.3},k.createElement("animate",{attributeName:"r",begin:"0s",calcMode:"linear",dur:"0.8s",from:9,repeatCount:"indefinite",to:9,values:"9;15;9"}),k.createElement("animate",{attributeName:"fill-opacity",begin:"0s",calcMode:"linear",dur:"0.8s",from:.5,repeatCount:"indefinite",to:.5,values:".5;1;.5"}))),Ke||(Ke=k.createElement("circle",{cx:105,cy:15,r:15,fill:"#3c60ff"},k.createElement("animate",{attributeName:"r",begin:"0s",calcMode:"linear",dur:"0.8s",from:15,repeatCount:"indefinite",to:15,values:"15;9;15"}),k.createElement("animate",{attributeName:"fill-opacity",begin:"0s",calcMode:"linear",dur:"0.8s",from:1,repeatCount:"indefinite",to:1,values:"1;.5;1"})))),Xe=function(e,t,r){function n(t){return t!==V.leftSquareBracket?(e.exit("citeMarker"),e.enter("citeData"),e.enter(Y.chunkString,{contentType:"string"}),i(t)):(e.consume(t),n)}function i(n){return n===V.rightSquareBracket?(e.exit(Y.chunkString),e.exit("citeData"),e.enter("citeMarker"),function(n){if(n!==V.rightSquareBracket)return r(n);return e.consume(n),e.exit("citeMarker"),e.exit("cite"),t(n)}(n)):G(n)||n===V.eof||n>57||n<48?r(n):(e.consume(n),i)}return function(t){return t!==V.leftSquareBracket?r(t):(e.enter("cite"),e.enter("citeMarker"),n(t))}},Ve=function(){const e=this.data();e.micromarkExtensions.push({text:{[V.leftSquareBracket]:{tokenize:Xe}}}),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}}})},Ye=f.Image,Ge={pre:r=>{let{children:n,node:i}=r;const o=q((()=>{const e=i.children[0];return"element"===(t=e).type&&"code"===t.tagName&&!!e.properties?.className?.includes("language-svg");var t}),[i]),[s,a]=M(o),l=q((()=>U(i)),[i]);return e(it,{children:[e(nt,{children:[!s&&t(b,{tooltip:!1,as:rt,content:l}),o&&s&&t(rt,{onClick:()=>{const e=new Blob([l],{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:"下载"}),o&&t(rt,{onClick:()=>a(!s),children:s?"源码":"预览"})]}),o&&s?t("div",{dangerouslySetInnerHTML:{__html:l}}):t("pre",{children:n})]})},a:e=>{let{node:r,href:n,...i}=e;const o=n?.startsWith("http")?"_blank":"_self";return t("a",{...i,href:n,target:o})},img:e=>{let{node:r,...n}=e;return t(Ye,{...n})}},Ze=[[X,{singleDollarTextMath:!1}],W,Q],et=[K,[J,{detect:!1,ignoreMissing:!0}]],tt=R((e=>{let{content:r,components:n,cite:i}=e;r=r.replace(/\\\(\s(.+?)\s\\\)/g,"$$$$ $1 $$$$");const o=q((()=>{const e={...Ge,...n};return i&&(e.cite=i),e}),[n,i]),s=q((()=>i?[...Ze,Ve]:Ze),[i]);return t(ot,{remarkPlugins:s,rehypePlugins:et,components:o,children:r})}),_),rt=n.div`
|
|
243
240
|
cursor: pointer;
|
|
244
241
|
padding: 2px 10px;
|
|
245
242
|
background-color: #303030;
|
|
246
243
|
color: #fff;
|
|
247
244
|
border: 1px solid #dedede;
|
|
248
245
|
border-radius: 15px;
|
|
246
|
+
font-size: 12px;
|
|
247
|
+
font-family: initial;
|
|
248
|
+
user-select: none;
|
|
249
|
+
`,nt=n.div`
|
|
250
|
+
position: absolute;
|
|
251
|
+
right: 10px;
|
|
252
|
+
top: 1em;
|
|
249
253
|
transform: translateX(10px);
|
|
250
254
|
pointer-events: none;
|
|
251
255
|
opacity: 0;
|
|
252
256
|
transition: all ease 0.3s;
|
|
253
|
-
|
|
254
|
-
|
|
257
|
+
display: flex;
|
|
258
|
+
gap: 5px;
|
|
255
259
|
|
|
256
260
|
&:hover {
|
|
257
261
|
opacity: 1;
|
|
258
262
|
}
|
|
259
|
-
`,
|
|
263
|
+
`,it=n.div`
|
|
260
264
|
position: relative;
|
|
261
265
|
|
|
262
266
|
&:hover {
|
|
263
|
-
${
|
|
267
|
+
${nt} {
|
|
264
268
|
pointer-events: all;
|
|
265
269
|
transform: translateX(0px);
|
|
266
|
-
opacity: 0.
|
|
270
|
+
opacity: 0.7;
|
|
267
271
|
}
|
|
268
272
|
}
|
|
269
|
-
`,
|
|
273
|
+
`,ot=n(H)`
|
|
270
274
|
-ms-text-size-adjust: 100%;
|
|
271
275
|
-webkit-text-size-adjust: 100%;
|
|
272
276
|
line-height: 1.8;
|
|
@@ -536,7 +540,7 @@ import{jsxs as e,jsx as t,Fragment as r}from"react/jsx-runtime";import{styled as
|
|
|
536
540
|
.hljs-strong {
|
|
537
541
|
font-weight: 700;
|
|
538
542
|
}
|
|
539
|
-
`;var
|
|
543
|
+
`;var st=$((function(e,r){let{children:n,tooltip:i,onClick:o,disabled:a,...l}=e;a&&(o=void 0);const c=t(at,{ref:r,onClick:o,$disabled:a,...l,children:n});return i?t(s,{tooltip:i,placement:"top",children:c}):c}));const at=n.div`
|
|
540
544
|
align-items: center;
|
|
541
545
|
justify-content: center;
|
|
542
546
|
border-radius: .375rem;
|
|
@@ -569,7 +573,7 @@ import{jsxs as e,jsx as t,Fragment as r}from"react/jsx-runtime";import{styled as
|
|
|
569
573
|
`}
|
|
570
574
|
|
|
571
575
|
}
|
|
572
|
-
`,
|
|
576
|
+
`,lt=f.Image;function ct(e){let{src:r,...n}=e;const{imageResolver:i}=ce();return i&&r&&(r=i(r)),t(dt,{children:t(lt,{src:r,...n})})}const dt=n.div`
|
|
573
577
|
margin-bottom: .5rem;
|
|
574
578
|
margin-top: .5rem;
|
|
575
579
|
border: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color);
|
|
@@ -594,7 +598,7 @@ import{jsxs as e,jsx as t,Fragment as r}from"react/jsx-runtime";import{styled as
|
|
|
594
598
|
max-height: 100%;
|
|
595
599
|
max-width: 100%;
|
|
596
600
|
}
|
|
597
|
-
`;function
|
|
601
|
+
`;function ht(e){let{value:n,cite:i}=e;const o=e=>"string"==typeof e?t(tt,{content:e,cite:i}):"image"===e.type?t(ct,{src:e.image}):null;return Array.isArray(n)?t(r,{children:n.map(((e,r)=>t(S,{children:o(e)},r)))}):o(n)}const mt=R((r=>{let{reasoning:n,loading:i}=r;const[o,s]=M(i);return j((()=>{i||s(!1)}),[i]),t(S,{children:t("div",{className:"mb-2",children:e("div",o||i?{className:"shadow-sm rounded bg-white fs-7",children:[e("div",{onClick:()=>s(i),role:"button",className:"d-flex align-items-center p-1 px-2 gap-2",children:[i?t(D,{animation:"border",variant:"primary",size:"sm"}):t("i",{className:"bi bi-check-circle-fill text-success"}),t("span",{className:"text-muted",children:i?"思考中":"已思考"}),t("i",{className:"bi bi-caret-up-fill text-muted"})]}),t("div",{className:"border-top p-2 d-flex flex-column gap-2",children:t("div",{className:"border rounded bg-light p-2",children:t(tt,{content:n})})})]}:{onClick:()=>s(!0),role:"button",className:"d-inline-flex align-items-center shadow-sm rounded bg-white p-1 px-2 fs-7 gap-2",children:[i?t(D,{animation:"border",variant:"primary",size:"sm"}):t("i",{className:"bi bi-check-circle-fill text-success"}),t("span",{className:"text-muted",children:i?"思考中":"已思考"}),t("i",{className:"bi bi-caret-down-fill text-muted"})]})})})}));class ut{#t;#o=[];#s=0;constructor(){this.#t=new B}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){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[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 pt=new Map;class gt{#r;#t;#o=[];#a=new Map;#l=!1;#s=0;#c=!1;constructor(e){this.#r=e,this.#t=new B}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(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;this.#l=!0;const t=await this.waitForAudioLoaded(this.#o[e]);this.#t.emit("playing",!0),t?(pt.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),pt.delete(this)}start(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];pt.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=pt.get(this);e&&(e.pause(),e.currentTime=0)}onPlaying(e){this.#t.on("playing",e)}onSpeaking(e){this.#t.on("speaking",e)}}function ft(e){let{text:t,loading:r,loader:n}=e;const i=E(),[o,s]=M(!1),[a,l]=M(!1),c=E(r),d=async function(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];i.current||(i.current=n?new gt(n):new ut,i.current.onSpeaking(s),i.current.onPlaying(l));let o="";"string"==typeof t?o=t:t.current&&(o=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]:[]))}(t.current),r&&o.pop()),o&&0!==o.length&&i.current.start(o,e)};return j((()=>{if(c.current&&"string"!=typeof t&&t.current){if(r){const e={childList:!0,subtree:!0},r=new MutationObserver((function(){d(!0)}));return r.observe(t.current,e),d(),()=>{r.disconnect()}}d(!0)}}),[r]),j((()=>()=>{i.current&&(i.current.stop(),i.current=void 0)}),[]),{playing:a,speaking:o,start:d,stop:()=>{i.current&&i.current.stop()}}}function bt(r){let{model:n="builtin",voice:i,loading:o,autoplay:s,contentRef:a,avatarRef:l}=r;const{request:c}=ce(),d=q((()=>{if("builtin"!==n)return async e=>(await c({url:"/speech",method:"post",data:{model:n,voice:i,input:e}})).audio}),[n,i]),{playing:h,speaking:m,start:u,stop:p}=ft({loader:d,text:a,loading:s&&o});let g=null;return l.current&&(m&&(g=Z(t(vt,{children:t(D,{size:"sm",variant:"light"})}),l.current)),h&&(g=Z(t(vt,{children:t(xt,{className:"bi bi-volume-down-fill text-light"})}),l.current))),e(st,{disabled:o&&!h,onClick:()=>{h?p():u()},children:[h?t(xt,{className:"bi bi-volume-down-fill"}):m?t(D,{size:"sm",variant:"primary"}):t(xt,{className:"bi bi-volume-down"}),g]})}const vt=n.div`
|
|
598
602
|
position: absolute;
|
|
599
603
|
top: 0;
|
|
600
604
|
left: 0;
|
|
@@ -604,20 +608,20 @@ import{jsxs as e,jsx as t,Fragment as r}from"react/jsx-runtime";import{styled as
|
|
|
604
608
|
align-items: center;
|
|
605
609
|
justify-content: center;
|
|
606
610
|
background-color: rgba(0, 0, 0, .3);
|
|
607
|
-
`,
|
|
611
|
+
`,xt=n.i`
|
|
608
612
|
|
|
609
613
|
&::before {
|
|
610
614
|
transform: scale(1.4)
|
|
611
615
|
}
|
|
612
|
-
`;function
|
|
616
|
+
`;function yt(r){let{tool:n}=r;const[i,o]=M(!1),{logLevel:s="none"}=ce(),a="response"in n;return e(S,{children:["stats"==s&&t("div",{className:"mb-2",children:e("div",{role:"button",className:"d-inline-flex align-items-center shadow-sm rounded bg-white p-1 px-2 fs-7 gap-2",children:[a?n.error?t("i",{className:"bi bi-x-circle-fill text-danger"}):t("i",{className:"bi bi-check-circle-fill text-success"}):t(D,{animation:"border",variant:"primary",size:"sm"}),t("span",{className:"text-muted",children:a?"已使用":"正在使用"}),t("span",{children:n.title})]})}),"all"==s&&t("div",{className:"mb-2",children:e("div",i&&a?{className:"shadow-sm rounded bg-white fs-7",children:[e("div",{onClick:()=>o(!1),role:"button",className:"d-flex align-items-center p-1 px-2 gap-2",children:[n.error?t("i",{className:"bi bi-x-circle-fill text-danger"}):t("i",{className:"bi bi-check-circle-fill text-success"}),t("span",{className:"text-muted",children:"已使用"}),t("span",{children:n.title}),t("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",children:[t("div",{className:"d-flex align-items-center p-1 px-2 fs-7 gap-2",children:t("span",{className:"text-muted",children:"参数"})}),t("div",{className:"border-top p-2 overflow-hidden",children:n.arguments})]}),e("div",{className:"border rounded bg-light",children:[t("div",{className:"d-flex align-items-center p-1 px-2 fs-7 gap-2",children:t("span",{className:"text-muted",children:"响应"})}),t(kt,{className:"border-top p-2 overflow-hidden",children:n.response||"None"})]})]})]}:{onClick:()=>o(a),role:"button",className:"d-inline-flex align-items-center shadow-sm rounded bg-white p-1 px-2 fs-7 gap-2",children:[a?n.error?t("i",{className:"bi bi-x-circle-fill text-danger"}):t("i",{className:"bi bi-check-circle-fill text-success"}):t(D,{animation:"border",variant:"primary",size:"sm"}),t("span",{className:"text-muted",children:a?"已使用":"正在使用"}),t("span",{children:n.title}),a&&t("i",{className:"bi bi-caret-down-fill text-muted"})]})}),n.content&&t(ht,{value:n.content})]})}const kt=n.div`
|
|
613
617
|
white-space: pre-wrap;
|
|
614
|
-
`;function
|
|
618
|
+
`;function wt(r){let{node:n}=r;const[i,o]=M(!1),{nodeIconResolver:s}=ce(),a=!("latency"in n),l=a?t(D,{animation:"border",variant:"primary",size:"sm"}):n.error?t("i",{className:"bi bi-x-circle-fill text-danger"}):t("i",{className:"bi bi-check-circle-fill text-success"});return e("div",{className:"shadow-sm rounded bg-white fs-7",children:[e(Et,{onClick:()=>o((e=>!e)),role:"button",className:"d-flex align-items-center p-1 px-2 gap-1",children:[t("i",{className:"bi bi-chevron-down text-muted"}),s?.(n.type),t(jt,{className:"me-2 text-truncate",children:n.title}),t("span",{className:"me-auto"}),!a&&t("span",{className:"text-nowrap text-muted",children:Nt(n.latency)}),t("span",{children:l})]}),i&&e("div",{className:"border-top p-2 d-flex flex-column gap-2",children:[e("div",{className:"border rounded bg-light",children:[t("div",{className:"d-flex align-items-center p-1 px-2 fs-7 gap-2",children:t("span",{className:"text-muted",children:"输入"})}),t("div",{className:"border-top p-2 overflow-hidden text-pre-wrap",children:n.input?JSON.stringify(n.input,null,4):"None"})]}),e("div",{className:"border rounded bg-light",children:[t("div",{className:"d-flex align-items-center p-1 px-2 fs-7 gap-2",children:t("span",{className:"text-muted",children:"输出"})}),t("div",{className:"border-top p-2 overflow-hidden text-pre-wrap",children:n.output?JSON.stringify(n.output,null,4):"None"})]})]})]})}const Nt=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`,Et=n.div`
|
|
615
619
|
svg {
|
|
616
620
|
flex-shrink: 0;
|
|
617
621
|
}
|
|
618
|
-
`,
|
|
622
|
+
`,jt=n.span`
|
|
619
623
|
display: inline-block;
|
|
620
|
-
`;function
|
|
624
|
+
`;function Ct(r){let{nodes:n,loading:i}=r;const[o,s]=M(!1),a=n.some((e=>"error"in e)),l=i?t(D,{animation:"border",variant:"primary",size:"sm"}):t("i",a?{className:"bi bi-x-circle-fill text-danger"}:{className:"bi bi-check-circle-fill text-success"});return t("div",{className:"mb-2",children:e("div",o?{className:"shadow-sm rounded bg-white fs-7",children:[e("div",{onClick:()=>s(!1),role:"button",className:"d-flex align-items-center p-1 px-2 gap-2",children:[l,t("span",{children:"工作流"}),t("i",{className:"bi bi-caret-up-fill text-muted"})]}),t("div",{className:"border-top p-2 d-flex flex-column gap-1 bg-light bg-opacity-50",children:n.map(((e,r)=>t(wt,{node:e},r)))})]}:{onClick:()=>s(!0),role:"button",className:"d-inline-flex align-items-center shadow-sm rounded bg-white p-1 px-2 fs-7 gap-2",children:[l,t("span",{children:"工作流"}),t("i",{className:"bi bi-caret-down-fill text-muted"})]})})}const Mt=R((n=>{let{message:i,actions:o,setMessage:s,cite:a,speech:l}=n;const{query:c,quote:d,files:h=[],chunks:m,annotation:u,loading:p}=i,{user:g,bot:f,logLevel:y="none",messages:k}=ce(),w=q((()=>m?m.reduce((function(e,t){return e+t.content+"\n"+t.tools.reduce(((e,t)=>{if(t.content){if("string"==typeof t.content)return e+t.content+"\n";if("image"===t.content.type){return e+`})\n`}}return e}),"")}),""):""),[m]),N=E(null),j=E(null),C=E(null),M=q((()=>m?.flatMap((e=>e.node?[e.node]:[]))||[]),[m]);return e(r,{children:[(c||h.length>0)&&e(Ot,{$reverse:!0,children:[g&&t(It,{children:t("img",{src:g.avatar})}),t(Dt,{}),e(Lt,{ref:N,children:[c&&t(tt,{content:c}),d&&t(T,{trigger:"click",container:N,rootClose:!0,placement:"bottom",overlay:t($t,{body:!0,children:d}),children:t(zt,{children:t(qt,{children:d})})}),h.length>0&&h.map(((e,r)=>{let{name:n,size:i,path:o}=e;return x(o)?t(ct,{src:`/uploads/${o}`},r):t(Rt,{children:t(re,{name:n,size:i})},r)}))]})]}),m&&e(Ot,{children:[t(It,{ref:j,children:t("img",{src:f.avatar})}),t(Dt,{}),e(Lt,{children:[(c||h.length>0)&&!1!==o&&e(At,{children:[t(b,{placement:"top",content:w,as:st,tooltip:!0}),l&&t(bt,{loading:i.loading,avatarRef:j,contentRef:C,...l}),o?.({Component:st,message:i,content:w,setMessage:s,messages:k})]}),t(Ft,{children:["stats","all"].includes(y)&&i.stats&&e(r,{children:[e("span",{children:["耗时 ",i.stats.latency/1e3," 秒"]}),e("span",{children:["花费 Token ",i.stats.usage]})]})}),e(St,{ref:C,$deleted:!!u,children:["all"===y&&M.length>0&&t(Ct,{loading:p,nodes:M}),m.length>0&&m.map(((r,n)=>e(S,{children:[r.reasoning&&["stats","all"].includes(y)&&t(mt,{reasoning:r.reasoning,loading:!r.content}),r.content&&t(ht,{cite:a,value:r.content}),r.tools.map(((e,r)=>t(yt,{tool:e},r))),r.error&&t(tt,{content:`[${r.error}]`})]},n)))]}),u&&e("div",{children:[e("div",{className:"d-flex align-items-center",children:[t("span",{className:"fs-7 text-secondary me-2",children:"标注的答案"}),t("hr",{className:"flex-fill"})]}),t(tt,{content:u.answer})]}),i.loading&&t(We,{})]})]})]})})),$t=n(P)`
|
|
621
625
|
max-width: calc(100% - .875rem * 2);
|
|
622
626
|
width: calc(100% - .875rem * 2);
|
|
623
627
|
font-size: 1rem;
|
|
@@ -626,25 +630,25 @@ import{jsxs as e,jsx as t,Fragment as r}from"react/jsx-runtime";import{styled as
|
|
|
626
630
|
.popover-body {
|
|
627
631
|
padding: .5rem .75rem;
|
|
628
632
|
}
|
|
629
|
-
`,
|
|
633
|
+
`,qt=n.div`
|
|
630
634
|
overflow: hidden;
|
|
631
635
|
text-overflow: ellipsis;
|
|
632
636
|
word-break: break-all;
|
|
633
637
|
-webkit-line-clamp: 2;
|
|
634
638
|
-webkit-box-orient: vertical;
|
|
635
639
|
display: -webkit-box;
|
|
636
|
-
`,
|
|
640
|
+
`,zt=n.div`
|
|
637
641
|
padding: .5rem .75rem;
|
|
638
642
|
color: var(--bs-secondary);
|
|
639
643
|
border-radius: var(--bs-border-radius-lg);
|
|
640
644
|
background: #FFFFFF;
|
|
641
645
|
cursor: pointer;
|
|
642
|
-
`,
|
|
646
|
+
`,St=n.div`
|
|
643
647
|
${e=>e.$deleted&&i`
|
|
644
648
|
text-decoration-line: line-through;
|
|
645
649
|
color: var(--bs-secondary);
|
|
646
650
|
`}
|
|
647
|
-
`,
|
|
651
|
+
`,Rt=n.div`
|
|
648
652
|
width: 100%;
|
|
649
653
|
margin-bottom: .5rem;
|
|
650
654
|
margin-top: .5rem;
|
|
@@ -656,7 +660,7 @@ import{jsxs as e,jsx as t,Fragment as r}from"react/jsx-runtime";import{styled as
|
|
|
656
660
|
&:last-child {
|
|
657
661
|
margin-bottom: 0;
|
|
658
662
|
}
|
|
659
|
-
|
|
663
|
+
`,At=n.div`
|
|
660
664
|
position: absolute;
|
|
661
665
|
top: -1.1rem;
|
|
662
666
|
right: 0;
|
|
@@ -664,7 +668,7 @@ import{jsxs as e,jsx as t,Fragment as r}from"react/jsx-runtime";import{styled as
|
|
|
664
668
|
gap: .5rem;
|
|
665
669
|
opacity: 0;
|
|
666
670
|
z-index: 1;
|
|
667
|
-
`,
|
|
671
|
+
`,Ft=n.div`
|
|
668
672
|
position: absolute;
|
|
669
673
|
bottom: -1.4rem;
|
|
670
674
|
left: 0;
|
|
@@ -677,7 +681,7 @@ import{jsxs as e,jsx as t,Fragment as r}from"react/jsx-runtime";import{styled as
|
|
|
677
681
|
display: flex;
|
|
678
682
|
opacity: 0;
|
|
679
683
|
z-index: 1;
|
|
680
|
-
`,
|
|
684
|
+
`,It=n.div`
|
|
681
685
|
width: 35px;
|
|
682
686
|
height: 35px;
|
|
683
687
|
border-radius: 50%;
|
|
@@ -688,14 +692,14 @@ import{jsxs as e,jsx as t,Fragment as r}from"react/jsx-runtime";import{styled as
|
|
|
688
692
|
width: 100%;
|
|
689
693
|
height: 100%;
|
|
690
694
|
}
|
|
691
|
-
`,
|
|
695
|
+
`,Dt=n.div`
|
|
692
696
|
width: 0;
|
|
693
697
|
height: 0;
|
|
694
698
|
content: "";
|
|
695
699
|
border: 5px solid transparent;
|
|
696
700
|
border-right-color: #f3f3f3;
|
|
697
701
|
transform: translateY(10px);
|
|
698
|
-
`,
|
|
702
|
+
`,Lt=n.div`
|
|
699
703
|
padding: .875rem;
|
|
700
704
|
background-color: rgb(243, 243, 243);
|
|
701
705
|
border-radius: var(--bs-border-radius-lg);
|
|
@@ -703,31 +707,31 @@ import{jsxs as e,jsx as t,Fragment as r}from"react/jsx-runtime";import{styled as
|
|
|
703
707
|
position: relative;
|
|
704
708
|
|
|
705
709
|
&:hover {
|
|
706
|
-
${
|
|
710
|
+
${Ft}, ${At} {
|
|
707
711
|
opacity: 1;
|
|
708
712
|
}
|
|
709
713
|
}
|
|
710
|
-
`,
|
|
714
|
+
`,Ot=n.div`
|
|
711
715
|
display: flex;
|
|
712
716
|
justify-content: flex-start;
|
|
713
717
|
padding: 1rem 0 1rem 0;
|
|
714
718
|
${e=>e.$reverse&&i`
|
|
715
719
|
flex-direction: row-reverse;
|
|
716
720
|
|
|
717
|
-
${
|
|
721
|
+
${Dt} {
|
|
718
722
|
border-left-color: rgba(var(--bs-primary-rgb), 0.1);
|
|
719
723
|
border-right-color: transparent;
|
|
720
724
|
}
|
|
721
725
|
|
|
722
|
-
${
|
|
726
|
+
${Lt} {
|
|
723
727
|
background: rgba(var(--bs-primary-rgb), 0.1);
|
|
724
728
|
}
|
|
725
729
|
`};
|
|
726
|
-
`;function
|
|
730
|
+
`;function Tt(r){const{placeholder:n,actions:i,cite:o,speech:s,renderItem:a,scrollRef:l}=r,{messages:c,setMessages:d,loading:h,suggestions:m,conversationId:u}=ce(),p=E(r.loaded),g=C((()=>{const e=l.current;e&&requestAnimationFrame((()=>{e.scrollTo({top:e.scrollHeight})}))}),[]),f=E(null),{height:b}=ee({ref:f});return j((()=>{(h||!p.current)&&c.length>0&&(h&&(p.current=!0),g())}),[b,h,p,c]),j((()=>{m.length>0&&g()}),[m]),j((()=>{p.current=r.loaded}),[u]),j((()=>{const e=f.current;if(e){const t=()=>{p.current=!0};return e.addEventListener("click",t),()=>{e.removeEventListener("click",t)}}}),[f]),e(Pt,{ref:f,children:[0===c.length&&n,c.slice(-30).map(((e,r)=>{const n={actions:i,cite:o,speech:s,message:e,setMessage:t=>{d((r=>{const n=r.findIndex((t=>t.id===e.id));-1!==n&&t(r[n])}))}};return a?a({Component:Mt,props:n},r):t(Mt,{...n},r)})),m.length>0&&t(Bt,{children:m.map(((e,r)=>t("a",{href:"#!question",children:e},r)))})]})}const Pt=n.div`
|
|
727
731
|
display: flex;
|
|
728
732
|
flex-direction: column;
|
|
729
733
|
flex: 1;
|
|
730
|
-
`,
|
|
734
|
+
`,Bt=n.div`
|
|
731
735
|
display: flex;
|
|
732
736
|
flex-direction: column;
|
|
733
737
|
align-items: flex-start;
|
|
@@ -744,16 +748,16 @@ import{jsxs as e,jsx as t,Fragment as r}from"react/jsx-runtime";import{styled as
|
|
|
744
748
|
background: var(--bs-secondary-bg-subtle);
|
|
745
749
|
}
|
|
746
750
|
}
|
|
747
|
-
`,
|
|
751
|
+
`,_t=R($(((r,n)=>{let{className:i,bot:o,user:s,input:a,logLevel:l,imageResolver:c,nodeIconResolver:d,placeholder:h,actions:m,onboarding:u,conversation:p,cite:b,speech:v,renderItem:x,messages:k,request:w}=r;const N=C((e=>{const t=[];if(u&&!1!==u.enable){const e=Ue(u.questions||[]);t.push({chunks:[{content:[u.prologue,...e.map((e=>`[${e}](#!question)`))].join("\n"),tools:[]}],loading:u.loading})}return e?t.concat(_e(e.messages||[])):k?t.concat(_e(k)):t}),[u]),[$,S]=M(p?.id),[R,A]=g([]);j((()=>{A(N(p))}),[u]);const[F,I]=M(!1),D=E(null),[L,O]=M([]),T=C((e=>{F||(S(e?.id),A(N(e)),O([]))}),[F,N]);return z(n,(()=>({reset:T})),[T]),t(de,{request:q((()=>w?"string"==typeof w?y.create({baseURL:w}):w:y),[w]),bot:o,user:s,logLevel:l,imageResolver:c,nodeIconResolver:d,conversationId:$,setConversationId:S,messages:R,setMessages:A,suggestions:L,setSuggestions:O,loading:F,setLoading:I,reset:T,children:t(Ht,{className:i,children:e(f,{children:[t(Ut,{ref:D,children:t(Tt,{placeholder:h,cite:b,actions:m,loaded:!a,speech:v,renderItem:x,scrollRef:D})}),a&&t(Ae,{...a,scrollRef:D})]})})})})),_),Ut=n.div`
|
|
748
752
|
display: flex;
|
|
749
753
|
flex-direction: column;
|
|
750
754
|
flex: 1;
|
|
751
755
|
overflow-y: auto;
|
|
752
756
|
padding: 0 1rem;
|
|
753
757
|
margin-bottom: .5rem;
|
|
754
|
-
`,
|
|
758
|
+
`,Ht=n.div`
|
|
755
759
|
display: flex;
|
|
756
760
|
flex-direction: column;
|
|
757
761
|
height: 100%;
|
|
758
762
|
position: relative;
|
|
759
|
-
`;export{
|
|
763
|
+
`;export{be as ActionButton,tt as Markdown,_t as MessageBox,he as VariableForm,Ue as pickQuestions,ft as useSynthesis};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@topthink/chat",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.25",
|
|
4
4
|
"scripts": {
|
|
5
5
|
"prebuild": "rimraf es types",
|
|
6
6
|
"build": "rollup -c --environment NODE_ENV:production",
|
|
@@ -18,9 +18,11 @@
|
|
|
18
18
|
"dependencies": {
|
|
19
19
|
"@babel/runtime": "^7.11.2",
|
|
20
20
|
"@breezystack/lamejs": "^1.2.7",
|
|
21
|
-
"@topthink/components": "^1.1.
|
|
21
|
+
"@topthink/components": "^1.1.18",
|
|
22
|
+
"@types/hast": "^2.0.0",
|
|
22
23
|
"@types/mdast": "^4.0.4",
|
|
23
24
|
"eventemitter3": "^5.0.1",
|
|
25
|
+
"hast-util-to-string": "^2.0.0",
|
|
24
26
|
"katex": "^0.16.9",
|
|
25
27
|
"mdast-util-from-markdown": "^2.0.1",
|
|
26
28
|
"micromark-util-character": "^2.1.0",
|
|
@@ -65,5 +67,5 @@
|
|
|
65
67
|
},
|
|
66
68
|
"author": "yunwuxin <tzzhangyajun@qq.com> (https://github.com/yunwuxin)",
|
|
67
69
|
"license": "MIT",
|
|
68
|
-
"gitHead": "
|
|
70
|
+
"gitHead": "a38b9428ac0f1e9df5e3306232c1263f2b09c545"
|
|
69
71
|
}
|