@topthink/chat 1.1.34 → 1.1.35
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 +176 -50
- package/package.json +3 -3
- package/types/components/message-box/chunk-provider.d.ts +10 -0
- package/types/components/message-box/context.d.ts +9 -2
- package/types/components/message-box/input-box/use-chat.d.ts +5 -7
- package/types/components/message-box/message-item.d.ts +2 -1
- package/types/components/message-box/suspend/context.d.ts +9 -0
- package/types/components/message-box/suspend/form.d.ts +7 -0
- package/types/components/message-box/suspend/select.d.ts +6 -0
- package/types/components/message-box/suspend-item.d.ts +6 -0
- package/types/types.d.ts +39 -9
- package/types/utils/get-content-text.d.ts +2 -0
package/es/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{jsxs as e,jsx as
|
|
1
|
+
import{jsxs as e,jsx as r,Fragment as t}from"react/jsx-runtime";import{styled as n,css as i,formatSize as o,Tooltip as a,useAsync as s,isRequestError as l,Form as c,Toast as d,InfiniteScroller as h,Offcanvas as u,dayjs as m,RequestButton as p,useImmer as g,getAbsoluteUrl as b,Lightbox as f,Clipboard as v,isImageUrl as x,request as y}from"@topthink/components";import*as k from"react";import{createContext as w,useContext as E,useEffect as $,useState as N,useRef as j,useCallback as C,forwardRef as M,useMemo as F,useImperativeHandle as z,Fragment as q,memo as S}from"react";import R from"react-textarea-autosize";import*as A from"path";import I from"path";import{Spinner as L,Badge as D,CloseButton as P,OverlayTrigger as O,Popover as T}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 re=function(e){let{ext:t}=e;const{result:n}=s((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(r,t){("function"==typeof queueMicrotask?queueMicrotask:setTimeout)(t.bind(null,new Error("Unknown variable dynamic import: "+e)))}))}}(`../../images/file/${e}.svg`)).default),[t]);return n?r("img",{width:30,height:30,src:n}):null};function te(t){let{className:n,name:i,size:s,loading:l,error:c,onRemove:d}=t;const h=I.extname(i).substring(1),u=e(ae,{className:n,$error:!!c,children:[e(oe,{children:[r(re,{ext:h}),l&&r(L,{variant:"primary"})]}),e(ie,{children:[r("h4",{children:i}),r("p",{children:o(s,1)})]}),d&&r(ne,{onClick:e=>{e.preventDefault(),d()},children:r("i",{className:"bi bi-trash3"})})]});return c?r(a,{placement:"top",tooltip:c,children:u}):u}const ne=n.div`
|
|
2
2
|
width: 1.75rem;
|
|
3
3
|
height: 1.75rem;
|
|
4
4
|
align-items: center;
|
|
@@ -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
|
+
`,ae=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
|
+
`,se=[".txt",".md",".pdf",".docx",".xlsx",".pptx",".png",".jpg"],le=w(null);function ce(e){const r=E(le);if(!r)throw new Error("useContext must be used within a Provider");const{setHandles:t}=r;return $((()=>{if(e)return t(e),()=>{t({})}}),[]),r}function de(e){let{children:t,...n}=e;const[i,o]=N({});return r(le.Provider,{value:{...n,handles:i,setHandles:o},children:t})}function he(){const{setMessages:e,setSuggestions:r,setLoading:t,conversationId:n,setConversationId:i,request:o,handles:a}=ce(),s=j(null),c=j(n);$((()=>{c.current=n}),[n]);const{onSuccess:d,onComplete:h}=a,u=C((r=>{if(r.data)if("[DONE]"!=r.data)try{const t=JSON.parse(r.data);t.conversation?(c.current=t.conversation,i(t.conversation)):e((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){r.chunks[e].tools||(r.chunks[e].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 e((e=>{e[e.length-1].loading=!1}))}),[]),m=C((r=>{let t="未知错误";l(r)&&(t=401==r.response?.status?"未授权或授权已过期,请刷新页面后重试":"string"==typeof r.errors?r.errors:Object.values(r.errors).join("\n")),e((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}))}),[]),p=C((async function(n){if("string"==typeof n){for(var i=arguments.length,a=new Array(i>1?i-1:0),l=1;l<i;l++)a[l-1]=arguments[l];n={query:n,...a}}const{query:p,files:g=[],variables:b={},quote:f}=n;if(p||g.length>0){s.current&&s.current.abort(),t(!0),r([]),e((e=>{e.push({query:p,quote:f,files:g,variables:b,chunks:[],loading:!0})}));try{let e={method:"post",data:{query:p,quote:f,files:g,variables:b,conversation:c.current},onMessage:u};await o(e),d?.()}catch(e){m(e)}t(!1),h?.()}}),[o,a]);return{send:p,resume:C((async r=>{try{t(!0),e((e=>{e[e.length-1].loading=!0}));let n={url:"resume",method:"post",data:{conversation:c.current,chunk:r.chunk,payload:r.payload},onMessage:u};await o(n),d?.()}catch(e){m(e)}t(!1),h?.()}),[o,a]),suggest:C((async()=>{s.current=new AbortController;try{let e={method:"post",url:"/suggestion",data:{conversation:c.current},signal:s.current.signal};const t=await o(e);r(t)}catch{}finally{s.current=null}}),[o])}}function ue(e){let{variables:t,values:n,onSubmit:i,onChange:o,children:a}=e;const s={},l=[],d={};return t.forEach((e=>{s[e.key]={type:"string",title:e.label},"textarea"===e.type?d[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&&l.push(e.key)})),r(c,{schema:{type:"object",properties:s,required:l},formData:n,omitExtraData:!0,uiSchema:d,submitText:"开始对话",onSubmit:i,onChange:o,children:a})}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 pe=class{#e;#r;constructor(){this.#r=new B}onResult(e){this.#r.on("result",e)}onRecording(e){this.#r.on("recording",e)}onTranscribing(e){this.#r.on("transcribing",e)}start(){if(!this.#e){const e=window.SpeechRecognition||window.webkitSpeechRecognition;if(!e)return void d.error("浏览器不支持语音识别");const r=new e;r.continuous=!0,r.lang=navigator.language,r.onresult=e=>{const r=Array.from(e.results).at(-1)?.item(0).transcript;r&&this.#r.emit("result",r)},r.onspeechend=()=>{this.#r.emit("recording",!1)},r.onerror=e=>{this.#r.emit("recording",!1),d.error(e.error)},this.#e=r}this.#r.emit("recording",!0),this.#e.start()}stop(){this.#e?.stop(),this.#r.emit("recording",!1)}},ge=class{#r;#t;#n;#i;constructor(e){this.#t=e,this.#r=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 r=[],t=0;const n=.01,i=1;e.onaudioprocess=e=>{const o=e.playbackTime,a=e.inputBuffer.getChannelData(0);let s=!0;for(let e=0;e<a.length;e++)if(Math.abs(a[e])>n){s=!1;break}if(s){const e=o-t;e>i&&(r.length>1&&(this.save(r),r=[]),e>10&&this.stop())}else r.push(new Float32Array(a)),t=o},this.#r.emit("recording",!0)}catch(e){d.error(e.message)}}convertBuffer(e){const r=new Float32Array(e),t=new Int16Array(e.length);for(let e=0;e<r.length;e++){const n=Math.max(-1,Math.min(1,r[e]));t[e]=n<0?32768*n:32767*n}return t}async encodeMP3(e){const{Mp3Encoder:r}=await import("@breezystack/lamejs"),t=new r(1,44100,128),n=[];for(const r of e){const e=this.convertBuffer(r),i=1152;let o=e.length;for(let r=0;o>=0;r+=i){const a=e.subarray(r,r+i),s=t.encodeBuffer(a);n.push(new Int8Array(s)),o-=i}}return n.push(t.flush()),new Blob(n,{type:"audio/mp3"})}async save(e){const r=await this.encodeMP3(e);try{this.#r.emit("transcribing",!0);const e=await this.#t(r);e&&this.#r.emit("result",e)}catch(e){}finally{this.#r.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.#r.emit("recording",!1)}onResult(e){this.#r.on("result",e)}onRecording(e){this.#r.on("recording",e)}onTranscribing(e){this.#r.on("transcribing",e)}};const be=M(((t,n)=>{let{onResult:i,model:o="builtin"}=t;const{request:s}=ce(),l=F((()=>{if("builtin"!==o)return async e=>{const r=new FormData;r.append("file",e,"audio.mp3"),r.append("model",o);return(await s({url:"/transcriptions",method:"post",data:r})).text}}),[o]),{start:c,stop:d,recording:h,transcribing:u}=function(e){let{onResult:r,loader:t}=e;const n=j(),[i,o]=N(!1),[a,s]=N(!1);return $((()=>()=>{n.current&&(n.current.stop(),n.current=void 0)}),[]),{recording:i,transcribing:a,start:async()=>{n.current||(n.current=t?new ge(t):new pe,n.current.onRecording(o),n.current.onTranscribing(s),n.current.onResult(r)),n.current.start()},stop:()=>{n.current&&n.current.stop()}}}({onResult:i,loader:l});return z(n,(()=>({start:c,stop:d})),[c,d]),r(a,{tooltip:h?"停止":"语音输入",placement:"top",children:e(me,{onMouseDown:e=>{e.preventDefault(),h?d():c()},children:[u&&r(fe,{animation:"border",variant:"primary",size:"sm"}),r("i",h?{className:"bi bi-mic-fill text-danger"}:{className:"bi bi-mic"})]})})})),fe=n(L)`
|
|
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
|
+
`,ve=M(((e,t)=>{let{className:n,children:i,size:o,tooltip:s,placement:l,onClick:c,onMouseDown:d}=e;const h=r(xe,{ref:t,className:n,onClick:c,onMouseDown:d,$size:o,children:i});return s?r(a,{tooltip:s,placement:l,children:h}):h})),xe=n.div`
|
|
96
96
|
width: 2rem;
|
|
97
97
|
height: 2rem;
|
|
98
98
|
align-items: center;
|
|
@@ -107,7 +107,7 @@ import{jsxs as e,jsx as t,Fragment as r}from"react/jsx-runtime";import{styled as
|
|
|
107
107
|
font-size: 1.5rem;
|
|
108
108
|
}
|
|
109
109
|
|
|
110
|
-
${e=>{let{$size:
|
|
110
|
+
${e=>{let{$size:r}=e;return"sm"===r&&i`
|
|
111
111
|
width: 1.5rem;
|
|
112
112
|
height: 1.5rem;
|
|
113
113
|
font-size: 1rem;
|
|
@@ -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 ye(){const{request:n,reset:i,conversationId:o}=ce(),[s,l]=N(!1);return e(t,{children:[r(ve,{tooltip:"历史记录",placement:"top",onClick:()=>l(!0),children:r("i",{className:"bi bi-clock-history"})}),r(u,{show:s,onHide:()=>{l(!1)},placement:"end",header:"聊天历史记录",bodyAs:ke,children:s&&r(je,{children:r(Ne,{useWindow:!1,source:e=>n({url:"/conversation",params:e}),render:t=>{let{data:s,loading:c,setData:d}=t;return s.length||c?s.map(((t,s)=>{const c=t.messages?.reduce(((e,r)=>e+r.chunks.reduce(((e,r)=>e+(r.content||"")),"")),"");return e(q,{children:[s>0&&r("hr",{className:"mx-2 my-2"}),e($e,{onClick:()=>{i(t),l(!1)},children:[e(Ee,{children:[o===t.id&&r(D,{bg:"secondary",children:"当前"}),r("span",{className:"fw-bold overflow-hidden text-truncate me-auto",children:t.title||"未命名对话"}),r("span",{className:"text-body text-opacity-50 flex-shrink-0 ms-5",children:m(t.update_time).fromNow()})]}),e(we,{children:[r("span",{className:"overflow-hidden text-truncate me-auto",children:c||" "}),r("span",{className:"ms-3",children:o!==t.id&&r(a,{tooltip:"删除",children:r(p,{as:"a",confirm:"确定要删除吗?",onRequest:()=>n({url:`/conversation/${t.id}`,method:"DELETE"}),onSuccess:()=>{d((e=>{const r=e.findIndex((e=>e.id===t.id));-1!==r&&e.splice(r,1)}))},children:r("i",{className:"bi bi-trash3"})})})})]})]})]},t.id)})):r("div",{className:"text-muted text-center py-5",children:"暂无对话记录"})}})})})]})}const ke=n.div`
|
|
120
120
|
padding: 0;
|
|
121
121
|
overflow: hidden;
|
|
122
|
-
`,
|
|
122
|
+
`,we=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
|
+
`,Ee=n.div`
|
|
133
133
|
display: flex;
|
|
134
134
|
align-items: center;
|
|
135
135
|
gap: .25rem;
|
|
136
|
-
|
|
136
|
+
`,$e=n.div`
|
|
137
137
|
gap: .5rem;
|
|
138
138
|
display: flex;
|
|
139
139
|
flex-direction: column;
|
|
@@ -146,19 +146,19 @@ 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
|
+
${we} :last-child {
|
|
150
150
|
display: initial;
|
|
151
151
|
}
|
|
152
152
|
}
|
|
153
153
|
}
|
|
154
|
-
`,
|
|
154
|
+
`,Ne=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 Ce;function Me(){return Me=Object.assign?Object.assign.bind():function(e){for(var
|
|
161
|
+
`;var Ce;function Me(){return Me=Object.assign?Object.assign.bind():function(e){for(var r=1;r<arguments.length;r++){var t=arguments[r];for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])}return e},Me.apply(this,arguments)}const Fe=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 ze(){const{reset:e}=ce();return r(ve,{className:"text-primary",tooltip:"新会话",placement:"top",onClick:e,children:r(Fe,{})})}function qe(t){let{children:n}=t;return e(Re,{children:[n,e(Se,{children:[r(ye,{}),r(ze,{})]})]})}const Se=n.div`
|
|
162
162
|
display: flex;
|
|
163
163
|
gap: .25rem;
|
|
164
164
|
margin-left: auto;
|
|
@@ -166,14 +166,14 @@ import{jsxs as e,jsx as t,Fragment as r}from"react/jsx-runtime";import{styled as
|
|
|
166
166
|
margin-bottom: .5rem;
|
|
167
167
|
display: flex;
|
|
168
168
|
padding: 0 .125rem;
|
|
169
|
-
`;var Ae
|
|
169
|
+
`;var Ae=M((function(t,n){let{suggestion:i,fileTypes:o,speech:s,scrollRef:c,variables:h,minRows:u,toolbar:m,disabled:p,autoFocus:b,placeholder:f="请输入你的问题, Enter+Shift换行, Enter发送"}=t;const v=j(null),x=j(null),y=j(null),[k,w]=N(""),[E,M]=N(""),[F,q]=g([]),[S,I]=N(!1),L=o&&o.length>0?o:se,{send:D,resume:O,suggest:T}=he(),{messages:B,loading:_,request:U}=ce({onSuccess(){i&&T()},onComplete(){requestAnimationFrame((()=>{v.current?.focus()}))}}),[H,J]=N();$((()=>{const e=B.filter((e=>!!e.query));J(e.at(-1)?.variables)}),[B]),$((()=>{!o&&F.length>0&&q([])}),[o]),$((()=>{const e=c.current;if(e&&D){const r=e=>{if(e.target instanceof HTMLAnchorElement&&"#!question"===e.target.hash){e.preventDefault();const r={query:e.target.text};h&&(r.variables={...H,...h.values}),D(r)}};return e.addEventListener("click",r),()=>{e.removeEventListener("click",r)}}}),[h,H]);const K=C((e=>{let{target:r}=e;if(r.files){const e=Array.from(r.files).filter((e=>!!L.includes(A.extname(e.name))&&(!(e.size>20971520)&&e))).slice(0,6-F.length);q((r=>{r.push(...e.map((e=>({file:e}))))})),e.forEach((async e=>{try{const r=new FormData;r.set("file",e);const t=await U({method:"POST",url:"/upload",data:r});q((r=>{const n=r.find((r=>r.file===e));n&&(n.path=t.path)}))}catch(r){const t=l(r)?r.message:"unknown error";q((r=>{const n=r.find((r=>r.file===e));n&&(n.error=t)}))}}))}r.value=""}),[F,L]),Q=F.flatMap((e=>{let{file:r,path:t}=e;return t?[{name:r.name,size:r.size,path:t}]:[]})),W=C((()=>{if(k||Q.length>0){const e={query:k,files:Q};h&&(e.variables={...H,...h.values}),E&&(e.quote=E),D(e),w(""),M(""),q([]),y.current?.stop(!0)}}),[k,Q,h,H,E]);if(z(n,(()=>({setQuery:w,setQuote:M,send:D,resume:O,focus(){v.current?.focus()}}))),h){const e=h.config.filter((e=>!(e.key in(h.values||{})))),t=function(r){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return!!r&&e.every((e=>{const n=!e.required||r?.[e.key];return!n&&t&&d.error("请完善必填信息"),n}))};if(e.length>0&&!t(H))return r(Le,{children:r(Ie,{children:r(ue,{values:H,variables:e,onSubmit:e=>{let{formData:r}=e;if(t(r,!0))return J(r),!0}})})})}return e(_e,{children:[m&&r(qe,{children:m}),e(Be,{$focused:S&&!_,children:[F.length>0&&r(Pe,{children:F.map(((e,t)=>{let{file:n,error:i,path:o}=e;const a=void 0===i&&void 0===o;return r(De,{name:n.name,size:n.size,error:i,loading:a,onRemove:()=>{q((e=>{const r=e.findIndex((e=>e.file===n));-1!==r&&e.splice(r,1)}))}},t)}))}),!!E&&e(Te,{children:[r("i",{className:"bi bi-quote"}),r("p",{children:E}),r(P,{onClick:()=>M("")})]}),e(Oe,{children:[r(R,{disabled:_||p,ref:v,placeholder:f,minRows:u,maxRows:5,value:k,onChange:e=>w(e.target.value),onKeyDown:e=>{"Enter"!==e.key||e.shiftKey||(e.preventDefault(),W())},autoFocus:b,onFocus:()=>I(!0),onBlur:()=>I(!1)}),o&&r(a,{tooltip:"可上传不超过6个小于20MB的文件",placement:"top",children:e(me,{disabled:F.length>=6,onClick:()=>x.current?.click(),children:[r("input",{onChange:K,multiple:!0,accept:L.join(","),ref:x,type:"file",hidden:!0}),r("i",{className:"bi bi-file-earmark-arrow-up"})]})}),s&&r(be,{ref:y,model:s.model,onResult:e=>{v.current?.focus(),w((r=>r+e+" "))}}),r(me,{className:"text-primary",disabled:!k&&0===Q.length,onClick:e=>{e.preventDefault(),W()},children:r("i",{className:"bi bi-send-fill"})})]})]})]})}));const Ie=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
|
+
`,Le=n.div`
|
|
177
177
|
position: absolute;
|
|
178
178
|
left: 0;
|
|
179
179
|
right: 0;
|
|
@@ -183,9 +183,9 @@ 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
|
-
`,De=n(
|
|
186
|
+
`,De=n(te)`
|
|
187
187
|
width: calc((100% - .75rem) / 2);
|
|
188
|
-
`,
|
|
188
|
+
`,Pe=n.div`
|
|
189
189
|
display: flex;
|
|
190
190
|
flex-wrap: wrap;
|
|
191
191
|
padding: .75rem;
|
|
@@ -229,14 +229,14 @@ 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
|
+
`,Be=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
|
+
`,_e=n.div`
|
|
238
238
|
margin: 0 1rem 1rem;
|
|
239
|
-
`;function
|
|
239
|
+
`;function Ue(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:r="",node:t,error:n,tools:i=[],reasoning:o}=e;return{content:r,reasoning:o,error:n,tools:i,node:t}})),annotation:e.annotation,stats:{usage:e.usage,latency:e.latency}})))}function He(e){if((e=e.filter((e=>!!e.trim()))).length>3){const r=[...e];let t=e.length-3;for(;t--;){let e=Math.floor(Math.random()*r.length);r.splice(e,1)}e=r}return e}var Je,Ke,Qe;function We(){return We=Object.assign?Object.assign.bind():function(e){for(var r=1;r<arguments.length;r++){var t=arguments[r];for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])}return e},We.apply(this,arguments)}const Xe=e=>k.createElement("svg",We({xmlns:"http://www.w3.org/2000/svg",width:20,height:10,fill:"#fff",viewBox:"0 0 120 30"},e),Je||(Je=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"}))),Ke||(Ke=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"}))),Qe||(Qe=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"}))));function Ve(e){if(!e)return"";if("string"==typeof e)return e;if("image"===e.type){return`})`}return""}const Ye=function(e,r,t){function n(r){return r!==V.leftSquareBracket?(e.exit("citeMarker"),e.enter("citeData"),e.enter(Y.chunkString,{contentType:"string"}),i(r)):(e.consume(r),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 t(n);return e.consume(n),e.exit("citeMarker"),e.exit("cite"),r(n)}(n)):G(n)||n===V.eof||n>57||n<48?t(n):(e.consume(n),i)}return function(r){return r!==V.leftSquareBracket?t(r):(e.enter("cite"),e.enter("citeMarker"),n(r))}},Ge=function(){const e=this.data();e.micromarkExtensions.push({text:{[V.leftSquareBracket]:{tokenize:Ye}}}),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}}})},Ze=f.Image,er={pre:t=>{let{children:n,node:i}=t;const[o,a]=N(!1),s=F((()=>{const e=i.children[0];return"element"===(r=e).type&&"code"===r.tagName&&!!e.properties?.className?.includes("language-svg");var r}),[i]);$((()=>{s&&a(s)}),[s]);const l=F((()=>U(i)),[i]);return e(ar,{children:[e(or,{children:[!o&&r(v,{tooltip:!1,as:ir,content:l}),s&&o&&r(ir,{onClick:()=>{const e=new Blob([l],{type:"image/svg+xml"}),r=URL.createObjectURL(e),t=document.createElement("a");t.href=r,t.download="image.svg",t.click(),URL.revokeObjectURL(r)},children:"下载"}),s&&r(ir,{onClick:()=>a(!o),children:o?"源码":"预览"})]}),s&&o?r("div",{dangerouslySetInnerHTML:{__html:l}}):r("pre",{children:n})]})},a:e=>{let{node:t,href:n,...i}=e;const o=n?.startsWith("http")?"_blank":"_self";return r("a",{...i,href:n,target:o})},img:e=>{let{node:t,...n}=e;return r(Ze,{...n})}},rr=[[X,{singleDollarTextMath:!1}],W,Q],tr=[K,[J,{detect:!1,ignoreMissing:!0}]],nr=S((e=>{let{content:t,components:n,cite:i}=e;t=t.replace(/\\\(\s(.+?)\s\\\)/g,"$$$$ $1 $$$$");const o=F((()=>{const e={...er,...n};return i&&(e.cite=i),e}),[n,i]),a=F((()=>i?[...rr,Ge]:rr),[i]);return r(sr,{remarkPlugins:a,rehypePlugins:tr,components:o,children:t})}),_),ir=n.div`
|
|
240
240
|
cursor: pointer;
|
|
241
241
|
padding: 2px 10px;
|
|
242
242
|
background-color: #303030;
|
|
@@ -246,7 +246,7 @@ import{jsxs as e,jsx as t,Fragment as r}from"react/jsx-runtime";import{styled as
|
|
|
246
246
|
font-size: 12px;
|
|
247
247
|
font-family: initial;
|
|
248
248
|
user-select: none;
|
|
249
|
-
`,
|
|
249
|
+
`,or=n.div`
|
|
250
250
|
position: absolute;
|
|
251
251
|
right: 10px;
|
|
252
252
|
top: 1em;
|
|
@@ -260,17 +260,17 @@ import{jsxs as e,jsx as t,Fragment as r}from"react/jsx-runtime";import{styled as
|
|
|
260
260
|
&:hover {
|
|
261
261
|
opacity: 1;
|
|
262
262
|
}
|
|
263
|
-
`,
|
|
263
|
+
`,ar=n.div`
|
|
264
264
|
position: relative;
|
|
265
265
|
|
|
266
266
|
&:hover {
|
|
267
|
-
${
|
|
267
|
+
${or} {
|
|
268
268
|
pointer-events: all;
|
|
269
269
|
transform: translateX(0px);
|
|
270
270
|
opacity: 0.7;
|
|
271
271
|
}
|
|
272
272
|
}
|
|
273
|
-
`,
|
|
273
|
+
`,sr=n(H)`
|
|
274
274
|
-ms-text-size-adjust: 100%;
|
|
275
275
|
-webkit-text-size-adjust: 100%;
|
|
276
276
|
line-height: 1.8;
|
|
@@ -540,7 +540,7 @@ import{jsxs as e,jsx as t,Fragment as r}from"react/jsx-runtime";import{styled as
|
|
|
540
540
|
.hljs-strong {
|
|
541
541
|
font-weight: 700;
|
|
542
542
|
}
|
|
543
|
-
`;var
|
|
543
|
+
`;var lr=M((function(e,t){let{children:n,tooltip:i,onClick:o,disabled:s,...l}=e;s&&(o=void 0);const c=r(cr,{ref:t,onClick:o,$disabled:s,...l,children:n});return i?r(a,{tooltip:i,placement:"top",children:c}):c}));const cr=n.div`
|
|
544
544
|
align-items: center;
|
|
545
545
|
justify-content: center;
|
|
546
546
|
border-radius: .375rem;
|
|
@@ -573,7 +573,7 @@ import{jsxs as e,jsx as t,Fragment as r}from"react/jsx-runtime";import{styled as
|
|
|
573
573
|
`}
|
|
574
574
|
|
|
575
575
|
}
|
|
576
|
-
`,
|
|
576
|
+
`,dr=w(null);var hr=dr.Provider;const ur=f.Image;function mr(e){let{src:t,...n}=e;const{imageResolver:i}=ce();return i&&t&&(t=i(t)),r(pr,{children:r(ur,{src:t,...n})})}const pr=n.div`
|
|
577
577
|
margin-bottom: .5rem;
|
|
578
578
|
margin-top: .5rem;
|
|
579
579
|
border: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color);
|
|
@@ -598,7 +598,133 @@ import{jsxs as e,jsx as t,Fragment as r}from"react/jsx-runtime";import{styled as
|
|
|
598
598
|
max-height: 100%;
|
|
599
599
|
max-width: 100%;
|
|
600
600
|
}
|
|
601
|
-
|
|
601
|
+
`,gr=w(null);function br(){const e=E(gr);if(!e)throw new Error("useContext must be used within a Provider");return e}function fr(e){let{children:t,...n}=e;return r(gr.Provider,{value:n,children:t})}function vr(t){let{description:n,options:i}=t;const{resume:o,disabled:a,output:s}=br(),[l,c]=N(s?.result),d=a||void 0!==l;return e(xr,{children:[n&&r(yr,{children:n}),i.map(((e,t)=>r(kr,{$selected:l===e,$disabled:d,onClick:()=>(e=>{d||(c(e),o(e))})(e),children:e},t)))]})}const xr=n.div`
|
|
602
|
+
display: flex;
|
|
603
|
+
flex-direction: column;
|
|
604
|
+
gap: 0.25rem;
|
|
605
|
+
margin: 0.5rem 0;
|
|
606
|
+
|
|
607
|
+
&:first-child {
|
|
608
|
+
margin-top: 0;
|
|
609
|
+
}
|
|
610
|
+
|
|
611
|
+
&:last-child {
|
|
612
|
+
margin-bottom: 0;
|
|
613
|
+
}
|
|
614
|
+
`,yr=n.div`
|
|
615
|
+
color: var(--bs-secondary);
|
|
616
|
+
font-size: 0.9rem;
|
|
617
|
+
line-height: 1.5;
|
|
618
|
+
`,kr=n.div`
|
|
619
|
+
padding: 0.25rem .75rem;
|
|
620
|
+
background-color: ${e=>e.$selected?"rgba(var(--bs-primary-rgb), 0.1)":"#FFFFFF"};
|
|
621
|
+
border: 1px solid ${e=>e.$selected?"rgba(var(--bs-primary-rgb), 0.3)":"var(--bs-border-color)"};
|
|
622
|
+
border-radius: var(--bs-border-radius-lg);
|
|
623
|
+
cursor: ${e=>e.$disabled?"not-allowed":"pointer"};
|
|
624
|
+
transition: all 0.2s ease;
|
|
625
|
+
color: ${e=>e.$selected?"var(--bs-primary)":"inherit"};
|
|
626
|
+
font-weight: ${e=>e.$selected?"500":"normal"};
|
|
627
|
+
opacity: ${e=>e.$disabled&&!e.$selected?.5:1};
|
|
628
|
+
|
|
629
|
+
&:hover {
|
|
630
|
+
background-color: ${e=>e.$disabled?e.$selected?"rgba(var(--bs-primary-rgb), 0.1)":"#FFFFFF":e.$selected?"rgba(var(--bs-primary-rgb), 0.15)":"rgba(var(--bs-gray-rgb), 0.05)"};
|
|
631
|
+
border-color: ${e=>e.$disabled?e.$selected?"rgba(var(--bs-primary-rgb), 0.3)":"var(--bs-border-color)":e.$selected?"rgba(var(--bs-primary-rgb), 0.4)":"var(--bs-gray-400)"};
|
|
632
|
+
}
|
|
633
|
+
|
|
634
|
+
&:active {
|
|
635
|
+
transform: ${e=>e.$disabled?"none":"scale(0.98)"};
|
|
636
|
+
}
|
|
637
|
+
`;function wr(t){let{description:n,fields:i}=t;const{resume:o,disabled:a,output:s}=br(),[l,c]=N(s||{}),[d,h]=N({}),u=void 0!==s,m=a||u,p=(e,r)=>{m||(c((t=>({...t,[e]:r}))),d[e]&&h((r=>{const t={...r};return delete t[e],t})))};return e(Er,{children:[n&&r($r,{children:n}),r(Nr,{children:i.map((t=>{const n=l[t.name]||"",i=d[t.name];return e(jr,{children:[e(Cr,{children:[t.label,t.required&&r(Mr,{children:"*"})]}),"textarea"===t.type?r(qr,{value:n,onChange:e=>p(t.name,e.target.value),placeholder:t.placeholder,disabled:m,$hasError:!!i}):"select"===t.type?e(Sr,{value:n,onChange:e=>p(t.name,e.target.value),disabled:m,$hasError:!!i,children:[r("option",{value:"",children:t.placeholder||"请选择"}),t.options?.map(((e,t)=>r("option",{value:e,children:e},t)))]}):r(zr,{type:t.type,value:n,onChange:e=>p(t.name,e.target.value),placeholder:t.placeholder,disabled:m,$hasError:!!i}),i&&r(Rr,{children:i})]},t.name)}))}),r(Ar,{onClick:()=>{if(!m&&(()=>{const e={};for(const r of i){const t=l[r.name];if(!r.required||t&&""!==t.toString().trim()){if(t&&t.toString().trim())switch(r.type){case"email":/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(t)||(e[r.name]="请输入有效的邮箱地址");break;case"tel":/^[0-9\-\+\(\)\s]+$/.test(t)||(e[r.name]="请输入有效的电话号码");break;case"number":isNaN(Number(t))&&(e[r.name]="请输入有效的数字")}}else e[r.name]=`${r.label}为必填项`}return h(e),0===Object.keys(e).length})()){const e={...l};for(const r of i)"number"===r.type&&e[r.name]&&(e[r.name]=Number(e[r.name]));c(e),o(e)}},disabled:m,$submitted:u,children:u?"已提交":"提交"})]})}const Er=n.div`
|
|
638
|
+
display: flex;
|
|
639
|
+
flex-direction: column;
|
|
640
|
+
gap: 0.5rem;
|
|
641
|
+
margin: 0.5rem 0;
|
|
642
|
+
|
|
643
|
+
&:first-child {
|
|
644
|
+
margin-top: 0;
|
|
645
|
+
}
|
|
646
|
+
|
|
647
|
+
&:last-child {
|
|
648
|
+
margin-bottom: 0;
|
|
649
|
+
}
|
|
650
|
+
`,$r=n.div`
|
|
651
|
+
color: var(--bs-secondary);
|
|
652
|
+
font-size: 0.9rem;
|
|
653
|
+
line-height: 1.5;
|
|
654
|
+
`,Nr=n.div`
|
|
655
|
+
display: flex;
|
|
656
|
+
flex-direction: column;
|
|
657
|
+
gap: 0.5rem;
|
|
658
|
+
`,jr=n.div`
|
|
659
|
+
display: flex;
|
|
660
|
+
flex-direction: column;
|
|
661
|
+
gap: 0.375rem;
|
|
662
|
+
`,Cr=n.label`
|
|
663
|
+
font-size: 0.875rem;
|
|
664
|
+
font-weight: 500;
|
|
665
|
+
color: var(--bs-body-color);
|
|
666
|
+
display: flex;
|
|
667
|
+
align-items: center;
|
|
668
|
+
gap: 0.25rem;
|
|
669
|
+
`,Mr=n.span`
|
|
670
|
+
color: var(--bs-danger);
|
|
671
|
+
`,Fr="\n padding: 0.5rem 0.75rem;\n border: 1px solid var(--bs-border-color);\n border-radius: var(--bs-border-radius);\n font-size: 0.875rem;\n color: var(--bs-body-color);\n background-color: #FFFFFF;\n transition: all 0.2s ease;\n outline: none;\n\n &::placeholder {\n color: var(--bs-secondary);\n opacity: 0.6;\n }\n\n &:focus {\n border-color: var(--bs-primary);\n box-shadow: 0 0 0 0.2rem rgba(var(--bs-primary-rgb), 0.15);\n }\n\n &:disabled {\n background-color: var(--bs-secondary-bg);\n opacity: 0.65;\n cursor: not-allowed;\n }\n",zr=n.input`
|
|
672
|
+
${Fr};
|
|
673
|
+
border-color: ${e=>e.$hasError?"var(--bs-danger)":"var(--bs-border-color)"};
|
|
674
|
+
|
|
675
|
+
&:focus {
|
|
676
|
+
border-color: ${e=>e.$hasError?"var(--bs-danger)":"var(--bs-primary)"};
|
|
677
|
+
box-shadow: 0 0 0 0.2rem ${e=>e.$hasError?"rgba(var(--bs-danger-rgb), 0.15)":"rgba(var(--bs-primary-rgb), 0.15)"};
|
|
678
|
+
}
|
|
679
|
+
`,qr=n.textarea`
|
|
680
|
+
${Fr};
|
|
681
|
+
min-height: 5rem;
|
|
682
|
+
resize: vertical;
|
|
683
|
+
border-color: ${e=>e.$hasError?"var(--bs-danger)":"var(--bs-border-color)"};
|
|
684
|
+
|
|
685
|
+
&:focus {
|
|
686
|
+
border-color: ${e=>e.$hasError?"var(--bs-danger)":"var(--bs-primary)"};
|
|
687
|
+
box-shadow: 0 0 0 0.2rem ${e=>e.$hasError?"rgba(var(--bs-danger-rgb), 0.15)":"rgba(var(--bs-primary-rgb), 0.15)"};
|
|
688
|
+
}
|
|
689
|
+
`,Sr=n.select`
|
|
690
|
+
${Fr};
|
|
691
|
+
border-color: ${e=>e.$hasError?"var(--bs-danger)":"var(--bs-border-color)"};
|
|
692
|
+
cursor: pointer;
|
|
693
|
+
|
|
694
|
+
&:focus {
|
|
695
|
+
border-color: ${e=>e.$hasError?"var(--bs-danger)":"var(--bs-primary)"};
|
|
696
|
+
box-shadow: 0 0 0 0.2rem ${e=>e.$hasError?"rgba(var(--bs-danger-rgb), 0.15)":"rgba(var(--bs-primary-rgb), 0.15)"};
|
|
697
|
+
}
|
|
698
|
+
|
|
699
|
+
&:disabled {
|
|
700
|
+
cursor: not-allowed;
|
|
701
|
+
}
|
|
702
|
+
`,Rr=n.div`
|
|
703
|
+
font-size: 0.75rem;
|
|
704
|
+
color: var(--bs-danger);
|
|
705
|
+
margin-top: -0.125rem;
|
|
706
|
+
`,Ar=n.button`
|
|
707
|
+
padding: 0.5rem 1rem;
|
|
708
|
+
background-color: ${e=>e.$submitted?"rgba(var(--bs-success-rgb), 0.1)":"var(--bs-primary)"};
|
|
709
|
+
color: ${e=>e.$submitted?"var(--bs-success)":"#FFFFFF"};
|
|
710
|
+
border: 1px solid ${e=>e.$submitted?"rgba(var(--bs-success-rgb), 0.3)":"var(--bs-primary)"};
|
|
711
|
+
border-radius: var(--bs-border-radius-lg);
|
|
712
|
+
font-size: 0.875rem;
|
|
713
|
+
font-weight: 500;
|
|
714
|
+
cursor: ${e=>e.disabled?"not-allowed":"pointer"};
|
|
715
|
+
transition: all 0.2s ease;
|
|
716
|
+
opacity: ${e=>e.disabled&&!e.$submitted?.65:1};
|
|
717
|
+
|
|
718
|
+
&:hover {
|
|
719
|
+
background-color: ${e=>e.disabled?e.$submitted?"rgba(var(--bs-success-rgb), 0.1)":"var(--bs-primary)":e.$submitted?"rgba(var(--bs-success-rgb), 0.15)":"var(--bs-primary-hover, var(--bs-primary))"};
|
|
720
|
+
border-color: ${e=>e.disabled?e.$submitted?"rgba(var(--bs-success-rgb), 0.3)":"var(--bs-primary)":e.$submitted?"rgba(var(--bs-success-rgb), 0.4)":"var(--bs-primary-hover, var(--bs-primary))"};
|
|
721
|
+
filter: ${e=>e.disabled?"none":"brightness(0.95)"};
|
|
722
|
+
}
|
|
723
|
+
|
|
724
|
+
&:active {
|
|
725
|
+
transform: ${e=>e.disabled?"none":"scale(0.98)"};
|
|
726
|
+
}
|
|
727
|
+
`;function Ir(e){let{suspend:t}=e;const{readonly:n}=ce(),{index:i,chunk:o,isLastMessage:a}=function(){const e=E(dr);if(!e)throw new Error("useContext must be used within a Provider");return e}(),{resume:s}=he(),l=C((e=>{s({chunk:i,payload:e})}),[]);let c=null;switch(t.type){case"select":c=r(vr,{...t.select});break;case"form":c=r(wr,{...t.form})}return r(fr,{resume:l,disabled:n||!!o.error||!a,output:o.node?.output,children:c})}function Lr(e){let{value:n,cite:i}=e;const o=e=>"string"==typeof e?r(nr,{content:e,cite:i}):"image"===e.type?r(mr,{src:e.image}):"suspend"===e.type?r(Ir,{suspend:e.suspend}):null;return Array.isArray(n)?r(t,{children:n.map(((e,t)=>r(q,{children:o(e)},t)))}):o(n)}const Dr=S((t=>{let{reasoning:n,loading:i}=t;const[o,a]=N(i);return $((()=>{i||a(!1)}),[i]),r(q,{children:r("div",{className:"mb-2",children:e("div",o||i?{className:"shadow-sm rounded bg-white fs-7",children:[e("div",{onClick:()=>a(i),role:"button",className:"d-flex align-items-center p-1 px-2 gap-2",children:[i?r(L,{animation:"border",variant:"primary",size:"sm"}):r("i",{className:"bi bi-check-circle-fill text-success"}),r("span",{className:"text-muted",children:i?"思考中":"已思考"}),r("i",{className:"bi bi-caret-up-fill text-muted"})]}),r("div",{className:"border-top p-2 d-flex flex-column gap-2",children:r("div",{className:"border rounded bg-light p-2",children:r(nr,{content:n})})})]}:{onClick:()=>a(!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?r(L,{animation:"border",variant:"primary",size:"sm"}):r("i",{className:"bi bi-check-circle-fill text-success"}),r("span",{className:"text-muted",children:i?"思考中":"已思考"}),r("i",{className:"bi bi-caret-down-fill text-muted"})]})})})}));class Pr{#r;#o=[];#a=0;constructor(){this.#r=new B}speak(){for(this.#r.emit("playing",!0);this.#a<this.#o.length;){const e=this.#o[this.#a],r=new SpeechSynthesisUtterance(e),t=++this.#a;r.onend=()=>{t>=this.#o.length&&this.clear()},r.onerror=()=>{this.clear()},window.speechSynthesis.speak(r)}}clear(){this.#r.emit("playing",!1)}start(e){let r=arguments.length>1&&void 0!==arguments[1]&&arguments[1];this.#o=Array.isArray(e)?e:[e],r||(window.speechSynthesis.cancel(),this.#a=0),this.speak()}stop(){window.speechSynthesis.cancel(),this.clear()}onPlaying(e){this.#r.on("playing",e)}onSpeaking(e){this.#r.on("speaking",e)}}const Or=new Map;class Tr{#t;#r;#o=[];#s=new Map;#l=!1;#a=0;#c=!1;constructor(e){this.#t=e,this.#r=new B}createLoader(e){const r=new Promise((async r=>{try{const{type:t,data:n}=await this.#t(e),i=new Audio(`data:${t};base64,${n}`);this.#s.set(e,i),r(i)}catch{this.#s.delete(e),r(void 0)}}));return this.#s.set(e,r),r}async loadAudioData(){this.#c=!0,this.#r.emit("speaking",!0);let e=0;for(;e<this.#o.length;){const r=this.#o[e];!this.#s.has(r)&&this.#c&&await this.createLoader(r),e++}this.#r.emit("speaking",!1),this.#c=!1}waitForAudioLoaded(e){const r=this.#s.get(e);return r instanceof Promise?r:Promise.resolve(r)}async playAudio(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;this.#l=!0;const r=await this.waitForAudioLoaded(this.#o[e]);this.#r.emit("playing",!0),r?(Or.set(this,r),r.onpause=async()=>{r.ended?(this.#a++,this.#a<this.#o.length?await this.playAudio(this.#a):this.clear()):this.clear()},await r.play()):this.clear()}clear(){this.#l=!1,this.#c=!1,this.#r.emit("playing",!1),this.#r.emit("speaking",!1),Or.delete(this)}start(e){let r=arguments.length>1&&void 0!==arguments[1]&&arguments[1];Or.forEach(((e,r)=>{r!==this&&(e.pause(),e.currentTime=0)})),this.#o=Array.isArray(e)?e:[e],r||(this.#a=0),this.#c||this.loadAudioData(),this.#l||this.playAudio()}update(e){this.#o=Array.isArray(e)?e:[e]}stop(){const e=Or.get(this);e&&(e.pause(),e.currentTime=0)}onPlaying(e){this.#r.on("playing",e)}onSpeaking(e){this.#r.on("speaking",e)}}function Br(e){let{text:r,loading:t,loader:n}=e;const i=j(),[o,a]=N(!1),[s,l]=N(!1),c=j(t),d=async function(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];i.current||(i.current=n?new Tr(n):new Pr,i.current.onSpeaking(a),i.current.onPlaying(l));let o="";"string"==typeof r?o=r:r.current&&(o=function(e){const r=e.querySelectorAll("p, h1, h2, h3, h4, h5, h6, li:not(:has(p,h1, h2, h3, h4, h5, h6))");return Array.from(r).flatMap((e=>e.textContent?[e.textContent]:[]))}(r.current),t&&o.pop()),o&&0!==o.length&&i.current.start(o,e)};return $((()=>{if(c.current&&"string"!=typeof r&&r.current){if(t){const e={childList:!0,subtree:!0},t=new MutationObserver((function(){d(!0)}));return t.observe(r.current,e),d(),()=>{t.disconnect()}}d(!0)}}),[t]),$((()=>()=>{i.current&&(i.current.stop(),i.current=void 0)}),[]),{playing:s,speaking:o,start:d,stop:()=>{i.current&&i.current.stop()}}}function _r(t){let{model:n="builtin",voice:i,loading:o,autoplay:a,contentRef:s,avatarRef:l}=t;const{request:c}=ce(),d=F((()=>{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:u,start:m,stop:p}=Br({loader:d,text:s,loading:a&&o});let g=null;return l.current&&(u&&(g=Z(r(Ur,{children:r(L,{size:"sm",variant:"light"})}),l.current)),h&&(g=Z(r(Ur,{children:r(Hr,{className:"bi bi-volume-down-fill text-light"})}),l.current))),e(lr,{disabled:o&&!h,onClick:()=>{h?p():m()},children:[h?r(Hr,{className:"bi bi-volume-down-fill"}):u?r(L,{size:"sm",variant:"primary"}):r(Hr,{className:"bi bi-volume-down"}),g]})}const Ur=n.div`
|
|
602
728
|
position: absolute;
|
|
603
729
|
top: 0;
|
|
604
730
|
left: 0;
|
|
@@ -608,20 +734,20 @@ import{jsxs as e,jsx as t,Fragment as r}from"react/jsx-runtime";import{styled as
|
|
|
608
734
|
align-items: center;
|
|
609
735
|
justify-content: center;
|
|
610
736
|
background-color: rgba(0, 0, 0, .3);
|
|
611
|
-
`,
|
|
737
|
+
`,Hr=n.i`
|
|
612
738
|
|
|
613
739
|
&::before {
|
|
614
740
|
transform: scale(1.4)
|
|
615
741
|
}
|
|
616
|
-
`;function
|
|
742
|
+
`;function Jr(t){let{tool:n,loading:i}=t;const[o,a]=N(!1),{logLevel:s="none"}=ce(),l="response"in n,c=!l&&!i;return e(q,{children:["stats"==s&&r("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:[c?r("i",{className:"bi bi-dash-circle-fill text-muted"}):l?n.error?r("i",{className:"bi bi-x-circle-fill text-danger"}):r("i",{className:"bi bi-check-circle-fill text-success"}):r(L,{animation:"border",variant:"primary",size:"sm"}),r("span",{className:"text-muted",children:c?"已取消":l?"已使用":"正在使用"}),r("span",{children:n.title})]})}),"all"==s&&r("div",{className:"mb-2",children:e("div",o&&l?{className:"shadow-sm rounded bg-white fs-7",children:[e("div",{onClick:()=>a(!1),role:"button",className:"d-flex align-items-center p-1 px-2 gap-2",children:[n.error?r("i",{className:"bi bi-x-circle-fill text-danger"}):r("i",{className:"bi bi-check-circle-fill text-success"}),r("span",{className:"text-muted",children:"已使用"}),r("span",{children:n.title}),r("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:[r("div",{className:"d-flex align-items-center p-1 px-2 fs-7 gap-2",children:r("span",{className:"text-muted",children:"参数"})}),r("div",{className:"border-top p-2 overflow-hidden",children:n.arguments})]}),e("div",{className:"border rounded bg-light",children:[r("div",{className:"d-flex align-items-center p-1 px-2 fs-7 gap-2",children:r("span",{className:"text-muted",children:"响应"})}),r(Kr,{className:"border-top p-2 overflow-hidden",children:n.response||"None"})]})]})]}:{onClick:()=>a(l),role:"button",className:"d-inline-flex align-items-center shadow-sm rounded bg-white p-1 px-2 fs-7 gap-2",children:[c?r("i",{className:"bi bi-dash-circle-fill text-muted"}):l?n.error?r("i",{className:"bi bi-x-circle-fill text-danger"}):r("i",{className:"bi bi-check-circle-fill text-success"}):r(L,{animation:"border",variant:"primary",size:"sm"}),r("span",{className:"text-muted",children:c?"已取消":l?"已使用":"正在使用"}),r("span",{children:n.title}),l&&r("i",{className:"bi bi-caret-down-fill text-muted"})]})}),n.content&&r(Lr,{value:n.content})]})}const Kr=n.div`
|
|
617
743
|
white-space: pre-wrap;
|
|
618
|
-
`;function
|
|
744
|
+
`;function Qr(t){let{node:n}=t;const[i,o]=N(!1),{nodeIconResolver:a}=ce(),s=!("latency"in n),l=s?r(L,{animation:"border",variant:"primary",size:"sm"}):n.error?r("i",{className:"bi bi-x-circle-fill text-danger"}):r("i",{className:"bi bi-check-circle-fill text-success"});return e("div",{className:"shadow-sm rounded bg-white fs-7",children:[e(Xr,{onClick:()=>o((e=>!e)),role:"button",className:"d-flex align-items-center p-1 px-2 gap-1",children:[r("i",{className:"bi bi-chevron-down text-muted"}),a?.(n.type),r(Vr,{className:"me-2 text-truncate",children:n.title}),r("span",{className:"me-auto"}),!s&&r("span",{className:"text-nowrap text-muted",children:Wr(n.latency)}),r("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:[r("div",{className:"d-flex align-items-center p-1 px-2 fs-7 gap-2",children:r("span",{className:"text-muted",children:"输入"})}),r("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:[r("div",{className:"d-flex align-items-center p-1 px-2 fs-7 gap-2",children:r("span",{className:"text-muted",children:"输出"})}),r("div",{className:"border-top p-2 overflow-hidden text-pre-wrap",children:n.output?JSON.stringify(n.output,null,4):"None"})]})]})]})}const Wr=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`,Xr=n.div`
|
|
619
745
|
svg {
|
|
620
746
|
flex-shrink: 0;
|
|
621
747
|
}
|
|
622
|
-
`,
|
|
748
|
+
`,Vr=n.span`
|
|
623
749
|
display: inline-block;
|
|
624
|
-
`;function
|
|
750
|
+
`;function Yr(t){let{nodes:n,loading:i}=t;const[o,a]=N(!1),s=n.some((e=>"error"in e)),l=i?r(L,{animation:"border",variant:"primary",size:"sm"}):r("i",s?{className:"bi bi-x-circle-fill text-danger"}:{className:"bi bi-check-circle-fill text-success"});return r("div",{className:"mb-2",children:e("div",o?{className:"shadow-sm rounded bg-white fs-7",children:[e("div",{onClick:()=>a(!1),role:"button",className:"d-flex align-items-center p-1 px-2 gap-2",children:[l,r("span",{children:"工作流"}),r("i",{className:"bi bi-caret-up-fill text-muted"})]}),r("div",{className:"border-top p-2 d-flex flex-column gap-1 bg-light bg-opacity-50",children:n.map(((e,t)=>r(Qr,{node:e},t)))})]}:{onClick:()=>a(!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,r("span",{children:"工作流"}),r("i",{className:"bi bi-caret-down-fill text-muted"})]})})}const Gr=S((n=>{let{message:i,actions:o,setMessage:a,cite:s,speech:l,isLast:c}=n;const{query:d,quote:h,files:u=[],chunks:m,annotation:p,loading:g}=i,{user:b,bot:f,logLevel:y="none",messages:k}=ce(),w=F((()=>m?m.reduce((function(e,r){const t=Array.isArray(r.content)?r.content.reduce(((e,r)=>{const t=Ve(r);return t?e+t+"\n":e}),""):Ve(r.content);return e+t+"\n"+(r.tools||[]).reduce(((e,r)=>{if(r.content){const t=Ve(r.content);if(t)return e+t+"\n"}return e}),"")}),""):""),[m]),E=j(null),$=j(null),N=j(null),C=F((()=>m?.flatMap((e=>e.node?[e.node]:[]))||[]),[m]),M=d||u.length>0;return e(t,{children:[M&&e(ct,{$reverse:!0,children:[b&&r(at,{children:r("img",{src:b.avatar})}),r(st,{}),e(lt,{ref:E,children:[d&&r(nr,{content:d}),h&&r(O,{trigger:"click",container:E,rootClose:!0,placement:"bottom",overlay:r(Zr,{body:!0,children:h}),children:r(rt,{children:r(et,{children:h})})}),u.length>0&&u.map(((e,t)=>{let{name:n,size:i,path:o}=e;return x(o)?r(mr,{src:`/uploads/${o}`},t):r(nt,{children:r(te,{name:n,size:i})},t)}))]})]}),m&&e(ct,{children:[f&&r(at,{ref:$,children:r("img",{src:f.avatar})}),r(st,{}),e(lt,{children:[M&&!1!==o&&e(it,{children:[r(v,{placement:"top",content:w,as:lr,tooltip:!0}),l&&r(_r,{loading:i.loading,avatarRef:$,contentRef:N,...l}),o?.({Component:lr,message:i,content:w,setMessage:a,messages:k})]}),r(ot,{children:["stats","all"].includes(y)&&i.stats&&e(t,{children:[e("span",{children:["耗时 ",i.stats.latency/1e3," 秒"]}),e("span",{children:["花费 Token ",i.stats.usage]})]})}),e(tt,{ref:N,$deleted:!!p,children:["all"===y&&C.length>0&&r(Yr,{loading:g,nodes:C}),m.map(((t,n)=>e(hr,{value:{index:n,chunk:t,isLastMessage:c},children:[t.reasoning&&["stats","all"].includes(y)&&r(Dr,{reasoning:t.reasoning,loading:!t.content&&0===(t.tools||[]).length}),t.content&&r(Lr,{cite:s,value:t.content}),(t.tools||[]).map(((e,t)=>r(Jr,{tool:e,loading:g},t))),t.error&&r(nr,{content:`[${t.error}]`})]},n)))]}),p&&e("div",{children:[e("div",{className:"d-flex align-items-center",children:[r("span",{className:"fs-7 text-secondary me-2",children:"标注的答案"}),r("hr",{className:"flex-fill"})]}),r(nr,{content:p.answer})]}),i.loading&&r(Xe,{})]})]})]})})),Zr=n(T)`
|
|
625
751
|
max-width: calc(100% - .875rem * 2);
|
|
626
752
|
width: calc(100% - .875rem * 2);
|
|
627
753
|
font-size: 1rem;
|
|
@@ -630,25 +756,25 @@ import{jsxs as e,jsx as t,Fragment as r}from"react/jsx-runtime";import{styled as
|
|
|
630
756
|
.popover-body {
|
|
631
757
|
padding: .5rem .75rem;
|
|
632
758
|
}
|
|
633
|
-
`,
|
|
759
|
+
`,et=n.div`
|
|
634
760
|
overflow: hidden;
|
|
635
761
|
text-overflow: ellipsis;
|
|
636
762
|
word-break: break-all;
|
|
637
763
|
-webkit-line-clamp: 2;
|
|
638
764
|
-webkit-box-orient: vertical;
|
|
639
765
|
display: -webkit-box;
|
|
640
|
-
`,
|
|
766
|
+
`,rt=n.div`
|
|
641
767
|
padding: .5rem .75rem;
|
|
642
768
|
color: var(--bs-secondary);
|
|
643
769
|
border-radius: var(--bs-border-radius-lg);
|
|
644
770
|
background: #FFFFFF;
|
|
645
771
|
cursor: pointer;
|
|
646
|
-
`,
|
|
772
|
+
`,tt=n.div`
|
|
647
773
|
${e=>e.$deleted&&i`
|
|
648
774
|
text-decoration-line: line-through;
|
|
649
775
|
color: var(--bs-secondary);
|
|
650
776
|
`}
|
|
651
|
-
`,
|
|
777
|
+
`,nt=n.div`
|
|
652
778
|
width: 100%;
|
|
653
779
|
margin-bottom: .5rem;
|
|
654
780
|
margin-top: .5rem;
|
|
@@ -660,7 +786,7 @@ import{jsxs as e,jsx as t,Fragment as r}from"react/jsx-runtime";import{styled as
|
|
|
660
786
|
&:last-child {
|
|
661
787
|
margin-bottom: 0;
|
|
662
788
|
}
|
|
663
|
-
`,
|
|
789
|
+
`,it=n.div`
|
|
664
790
|
position: absolute;
|
|
665
791
|
top: -1.1rem;
|
|
666
792
|
right: 0;
|
|
@@ -668,7 +794,7 @@ import{jsxs as e,jsx as t,Fragment as r}from"react/jsx-runtime";import{styled as
|
|
|
668
794
|
gap: .5rem;
|
|
669
795
|
opacity: 0;
|
|
670
796
|
z-index: 1;
|
|
671
|
-
`,
|
|
797
|
+
`,ot=n.div`
|
|
672
798
|
position: absolute;
|
|
673
799
|
bottom: -1.4rem;
|
|
674
800
|
left: 0;
|
|
@@ -681,7 +807,7 @@ import{jsxs as e,jsx as t,Fragment as r}from"react/jsx-runtime";import{styled as
|
|
|
681
807
|
display: flex;
|
|
682
808
|
opacity: 0;
|
|
683
809
|
z-index: 1;
|
|
684
|
-
`,
|
|
810
|
+
`,at=n.div`
|
|
685
811
|
width: 35px;
|
|
686
812
|
height: 35px;
|
|
687
813
|
border-radius: 50%;
|
|
@@ -692,14 +818,14 @@ import{jsxs as e,jsx as t,Fragment as r}from"react/jsx-runtime";import{styled as
|
|
|
692
818
|
width: 100%;
|
|
693
819
|
height: 100%;
|
|
694
820
|
}
|
|
695
|
-
`,
|
|
821
|
+
`,st=n.div`
|
|
696
822
|
width: 0;
|
|
697
823
|
height: 0;
|
|
698
824
|
content: "";
|
|
699
825
|
border: 5px solid transparent;
|
|
700
826
|
border-right-color: #f3f3f3;
|
|
701
827
|
transform: translateY(10px);
|
|
702
|
-
`,
|
|
828
|
+
`,lt=n.div`
|
|
703
829
|
padding: .875rem;
|
|
704
830
|
background-color: rgb(243, 243, 243);
|
|
705
831
|
border-radius: var(--bs-border-radius-lg);
|
|
@@ -707,31 +833,31 @@ import{jsxs as e,jsx as t,Fragment as r}from"react/jsx-runtime";import{styled as
|
|
|
707
833
|
position: relative;
|
|
708
834
|
|
|
709
835
|
&:hover {
|
|
710
|
-
${
|
|
836
|
+
${ot}, ${it} {
|
|
711
837
|
opacity: 1;
|
|
712
838
|
}
|
|
713
839
|
}
|
|
714
|
-
`,
|
|
840
|
+
`,ct=n.div`
|
|
715
841
|
display: flex;
|
|
716
842
|
justify-content: flex-start;
|
|
717
843
|
padding: 1rem 0 1rem 0;
|
|
718
844
|
${e=>e.$reverse&&i`
|
|
719
845
|
flex-direction: row-reverse;
|
|
720
846
|
|
|
721
|
-
${
|
|
847
|
+
${st} {
|
|
722
848
|
border-left-color: rgba(var(--bs-primary-rgb), 0.1);
|
|
723
849
|
border-right-color: transparent;
|
|
724
850
|
}
|
|
725
851
|
|
|
726
|
-
${
|
|
852
|
+
${lt} {
|
|
727
853
|
background: rgba(var(--bs-primary-rgb), 0.1);
|
|
728
854
|
}
|
|
729
855
|
`};
|
|
730
|
-
`;function
|
|
856
|
+
`;function dt(t){const{placeholder:n,actions:i,cite:o,speech:a,renderItem:s,scrollRef:l}=t,{messages:c,setMessages:d,loading:h,suggestions:u,conversationId:m}=ce(),p=j(t.loaded),g=C((()=>{const e=l.current;e&&requestAnimationFrame((()=>{e.scrollTo({top:e.scrollHeight})}))}),[]),b=j(null),{height:f}=ee({ref:b});$((()=>{(h||!p.current)&&c.length>0&&(h&&(p.current=!0),g())}),[f,h,p,c]),$((()=>{u.length>0&&g()}),[u]),$((()=>{p.current=t.loaded}),[m]),$((()=>{const e=b.current;if(e){const r=()=>{p.current=!0};return e.addEventListener("click",r),()=>{e.removeEventListener("click",r)}}}),[b]);const v=c.slice(-30);return e(ht,{ref:b,children:[0===v.length&&n,v.map(((e,t)=>{const n={actions:i,cite:o,speech:a,message:e,setMessage:r=>{d((t=>{const n=t.findIndex((r=>r.id===e.id));-1!==n&&r(t[n])}))},isLast:t===v.length-1};return s?s({Component:Gr,props:n},t):r(Gr,{...n},t)})),u.length>0&&r(ut,{children:u.map(((e,t)=>r("a",{href:"#!question",children:e},t)))})]})}const ht=n.div`
|
|
731
857
|
display: flex;
|
|
732
858
|
flex-direction: column;
|
|
733
859
|
flex: 1;
|
|
734
|
-
`,
|
|
860
|
+
`,ut=n.div`
|
|
735
861
|
display: flex;
|
|
736
862
|
flex-direction: column;
|
|
737
863
|
align-items: flex-start;
|
|
@@ -748,16 +874,16 @@ import{jsxs as e,jsx as t,Fragment as r}from"react/jsx-runtime";import{styled as
|
|
|
748
874
|
background: var(--bs-secondary-bg-subtle);
|
|
749
875
|
}
|
|
750
876
|
}
|
|
751
|
-
`,
|
|
877
|
+
`,mt=S(M(((t,n)=>{let{className:i,bot:o,user:a,input:s,logLevel:l,imageResolver:c,nodeIconResolver:d,placeholder:h,actions:u,onboarding:m,conversation:p,cite:b,speech:v,renderItem:x,messages:k,request:w,transformMessages:E=Ue}=t;const M=C((e=>{const r=[];if(m&&!1!==m.enable){const e=He(m.questions||[]);r.push({chunks:[{content:[m.prologue,...e.map((e=>`[${e}](#!question)`))].join("\n"),tools:[]}],loading:m.loading})}return e?r.concat(E(e.messages||[])):k?r.concat(E(k)):r}),[m]),[q,S]=N(p?.id),[R,A]=g([]);$((()=>{A(M(p))}),[m]);const[I,L]=N(!1),D=j(null),[P,O]=N([]),T=C((e=>{I||(S(e?.id),A(M(e)),O([]))}),[I,M]);return z(n,(()=>({reset:T})),[T]),r(de,{request:F((()=>w?"string"==typeof w?y.create({baseURL:w}):w:y),[w]),bot:o,user:a,logLevel:l,imageResolver:c,nodeIconResolver:d,conversationId:q,setConversationId:S,messages:R,setMessages:A,suggestions:P,setSuggestions:O,loading:I,setLoading:L,reset:T,readonly:!s,children:r(gt,{className:i,children:e(f,{children:[r(pt,{ref:D,children:r(dt,{placeholder:h,cite:b,actions:u,loaded:!s,speech:v,renderItem:x,scrollRef:D})}),s&&r(Ae,{...s,scrollRef:D})]})})})})),_),pt=n.div`
|
|
752
878
|
display: flex;
|
|
753
879
|
flex-direction: column;
|
|
754
880
|
flex: 1;
|
|
755
881
|
overflow-y: auto;
|
|
756
882
|
padding: 0 1rem;
|
|
757
883
|
margin-bottom: .5rem;
|
|
758
|
-
`,
|
|
884
|
+
`,gt=n.div`
|
|
759
885
|
display: flex;
|
|
760
886
|
flex-direction: column;
|
|
761
887
|
height: 100%;
|
|
762
888
|
position: relative;
|
|
763
|
-
`;export{
|
|
889
|
+
`;export{ve as ActionButton,nr as Markdown,mt as MessageBox,ue as VariableForm,He as pickQuestions,Br 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.35",
|
|
4
4
|
"scripts": {
|
|
5
5
|
"prebuild": "rimraf es types",
|
|
6
6
|
"build": "rollup -c --environment NODE_ENV:production",
|
|
@@ -18,7 +18,7 @@
|
|
|
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.22",
|
|
22
22
|
"@types/hast": "^2.0.0",
|
|
23
23
|
"@types/mdast": "^4.0.4",
|
|
24
24
|
"eventemitter3": "^5.0.1",
|
|
@@ -67,5 +67,5 @@
|
|
|
67
67
|
},
|
|
68
68
|
"author": "yunwuxin <tzzhangyajun@qq.com> (https://github.com/yunwuxin)",
|
|
69
69
|
"license": "MIT",
|
|
70
|
-
"gitHead": "
|
|
70
|
+
"gitHead": "2f395c5b2c8b954dbfd2d88fb6f8bfae261f99d9"
|
|
71
71
|
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { Chunk } from '../../types';
|
|
3
|
+
interface ContextType {
|
|
4
|
+
index: number;
|
|
5
|
+
chunk: Chunk;
|
|
6
|
+
isLastMessage: boolean;
|
|
7
|
+
}
|
|
8
|
+
declare const _default: import("react").Provider<ContextType | null>;
|
|
9
|
+
export default _default;
|
|
10
|
+
export declare function useChunk(): ContextType;
|
|
@@ -2,6 +2,10 @@ import { Dispatch, PropsWithChildren, ReactNode, SetStateAction } from 'react';
|
|
|
2
2
|
import { Conversation, LogLevel, Message } from '../../types';
|
|
3
3
|
import { Updater } from '@topthink/components/types/hooks/use-immer';
|
|
4
4
|
import { RequestInstance } from '@topthink/components';
|
|
5
|
+
interface Handles {
|
|
6
|
+
onSuccess?: () => void;
|
|
7
|
+
onComplete?: () => void;
|
|
8
|
+
}
|
|
5
9
|
interface ContextType {
|
|
6
10
|
bot?: {
|
|
7
11
|
name: string;
|
|
@@ -24,7 +28,10 @@ interface ContextType {
|
|
|
24
28
|
loading: boolean;
|
|
25
29
|
setLoading: Dispatch<SetStateAction<boolean>>;
|
|
26
30
|
reset: (conversation?: Conversation) => void;
|
|
31
|
+
readonly: boolean;
|
|
32
|
+
handles: Handles;
|
|
33
|
+
setHandles: Dispatch<SetStateAction<Handles>>;
|
|
27
34
|
}
|
|
28
|
-
export declare function useContext(): ContextType;
|
|
29
|
-
export declare function Provider({ children, ...props }: PropsWithChildren<ContextType
|
|
35
|
+
export declare function useContext(handles?: Handles): ContextType;
|
|
36
|
+
export declare function Provider({ children, ...props }: PropsWithChildren<Omit<ContextType, 'handles' | 'setHandles'>>): import("react/jsx-runtime").JSX.Element;
|
|
30
37
|
export {};
|
|
@@ -1,11 +1,9 @@
|
|
|
1
|
-
export
|
|
2
|
-
|
|
3
|
-
onSuccess?: () => void;
|
|
4
|
-
}
|
|
5
|
-
export default function useChat({ suggestion, onSuccess, }: ChatOptions): {
|
|
6
|
-
send: (params: string | import("../../../types").ChatParams, files?: {
|
|
1
|
+
export default function useChat(): {
|
|
2
|
+
send: (params: string | import("../../../types").SendParams, files?: {
|
|
7
3
|
path: string;
|
|
8
4
|
name: string;
|
|
9
5
|
size: number;
|
|
10
|
-
}[] | undefined, variables?: Record<string, string> | undefined) => void
|
|
6
|
+
}[] | undefined, variables?: Record<string, string> | undefined) => Promise<void>;
|
|
7
|
+
resume: (params: import("../../../types").ResumeParams) => Promise<void>;
|
|
8
|
+
suggest: () => Promise<void>;
|
|
11
9
|
};
|
|
@@ -19,6 +19,7 @@ export interface MessageItemProps {
|
|
|
19
19
|
voice?: string;
|
|
20
20
|
autoplay?: boolean;
|
|
21
21
|
};
|
|
22
|
+
isLast: boolean;
|
|
22
23
|
}
|
|
23
|
-
declare const MessageItem: import("react").MemoExoticComponent<({ message, actions, setMessage, cite, speech }: MessageItemProps) => import("react/jsx-runtime").JSX.Element>;
|
|
24
|
+
declare const MessageItem: import("react").MemoExoticComponent<({ message, actions, setMessage, cite, speech, isLast }: MessageItemProps) => import("react/jsx-runtime").JSX.Element>;
|
|
24
25
|
export default MessageItem;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { PropsWithChildren } from 'react';
|
|
2
|
+
interface ContextType {
|
|
3
|
+
resume: (payload: any) => void;
|
|
4
|
+
disabled: boolean;
|
|
5
|
+
output: any;
|
|
6
|
+
}
|
|
7
|
+
export declare function useSuspend(): ContextType;
|
|
8
|
+
export declare function Provider({ children, ...props }: PropsWithChildren<ContextType>): import("react/jsx-runtime").JSX.Element;
|
|
9
|
+
export {};
|
package/types/types.d.ts
CHANGED
|
@@ -1,9 +1,33 @@
|
|
|
1
|
+
export interface FormField {
|
|
2
|
+
name: string;
|
|
3
|
+
label: string;
|
|
4
|
+
type: 'text' | 'textarea' | 'number' | 'email' | 'tel' | 'date' | 'select';
|
|
5
|
+
required: boolean;
|
|
6
|
+
placeholder?: string;
|
|
7
|
+
options?: string[];
|
|
8
|
+
}
|
|
9
|
+
export type SuspendType = {
|
|
10
|
+
type: 'select';
|
|
11
|
+
select: {
|
|
12
|
+
description: string;
|
|
13
|
+
options: string[];
|
|
14
|
+
};
|
|
15
|
+
} | {
|
|
16
|
+
type: 'form';
|
|
17
|
+
form: {
|
|
18
|
+
description: string;
|
|
19
|
+
fields: FormField[];
|
|
20
|
+
};
|
|
21
|
+
};
|
|
1
22
|
export type ContentType = string | {
|
|
2
23
|
type: 'image';
|
|
3
24
|
image: string;
|
|
4
25
|
} | {
|
|
5
26
|
type: 'chart';
|
|
6
27
|
chart: string;
|
|
28
|
+
} | {
|
|
29
|
+
type: 'suspend';
|
|
30
|
+
suspend: SuspendType;
|
|
7
31
|
};
|
|
8
32
|
export interface ToolMessage {
|
|
9
33
|
name: string;
|
|
@@ -22,6 +46,13 @@ export interface Node {
|
|
|
22
46
|
output?: object;
|
|
23
47
|
error?: string;
|
|
24
48
|
}
|
|
49
|
+
export interface Chunk {
|
|
50
|
+
content?: ContentType | ContentType[];
|
|
51
|
+
reasoning?: string;
|
|
52
|
+
tools?: ToolMessage[];
|
|
53
|
+
error?: string;
|
|
54
|
+
node?: Node;
|
|
55
|
+
}
|
|
25
56
|
export interface Message {
|
|
26
57
|
id?: string;
|
|
27
58
|
query?: string;
|
|
@@ -32,13 +63,7 @@ export interface Message {
|
|
|
32
63
|
size: number;
|
|
33
64
|
}[];
|
|
34
65
|
variables?: Record<string, string>;
|
|
35
|
-
chunks?:
|
|
36
|
-
content: string | ContentType[];
|
|
37
|
-
reasoning?: string;
|
|
38
|
-
tools?: ToolMessage[];
|
|
39
|
-
error?: string;
|
|
40
|
-
node?: Node;
|
|
41
|
-
}[];
|
|
66
|
+
chunks?: Chunk[];
|
|
42
67
|
stats?: {
|
|
43
68
|
usage: number;
|
|
44
69
|
latency: number;
|
|
@@ -84,14 +109,19 @@ export interface ConversationMessage {
|
|
|
84
109
|
};
|
|
85
110
|
[key: string]: any;
|
|
86
111
|
}
|
|
87
|
-
export interface
|
|
112
|
+
export interface SendParams {
|
|
88
113
|
query: string;
|
|
89
114
|
quote?: string;
|
|
90
115
|
files?: Message['files'];
|
|
91
116
|
variables?: Record<string, string>;
|
|
92
117
|
}
|
|
118
|
+
export interface ResumeParams {
|
|
119
|
+
chunk: number;
|
|
120
|
+
payload: any;
|
|
121
|
+
}
|
|
93
122
|
export interface Chat {
|
|
94
|
-
send(params: string |
|
|
123
|
+
send(params: string | SendParams, files?: Message['files'], variables?: Message['variables']): Promise<void>;
|
|
124
|
+
resume(params: ResumeParams): Promise<void>;
|
|
95
125
|
}
|
|
96
126
|
export interface MessageBoxType {
|
|
97
127
|
reset(conversation?: Conversation): void;
|