teodor-new-chat-ui 1.5.17 → 1.5.18
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/dist/index.esm.js +10 -10
- package/dist/index.umd.js +1 -1
- package/package.json +1 -1
package/dist/index.esm.js
CHANGED
|
@@ -1924,28 +1924,28 @@ class Eo {
|
|
|
1924
1924
|
}
|
|
1925
1925
|
// ---- Thread Management ----
|
|
1926
1926
|
async listThreads() {
|
|
1927
|
-
const t = await lt("/threads"), n = Ne(t);
|
|
1927
|
+
const t = await lt("/chat/threads"), n = Ne(t);
|
|
1928
1928
|
return (n == null ? void 0 : n.items) ?? (t == null ? void 0 : t.items) ?? [];
|
|
1929
1929
|
}
|
|
1930
1930
|
async createThread(t) {
|
|
1931
|
-
const r = await jt("/threads", t ? { title: t } : void 0);
|
|
1931
|
+
const r = await jt("/chat/threads", t ? { title: t } : void 0);
|
|
1932
1932
|
return Ne(r);
|
|
1933
1933
|
}
|
|
1934
1934
|
async updateThread(t, n) {
|
|
1935
|
-
const r = await Hf(`/threads/${t}`, { title: n });
|
|
1935
|
+
const r = await Hf(`/chat/threads/${t}`, { title: n });
|
|
1936
1936
|
return Ne(r);
|
|
1937
1937
|
}
|
|
1938
1938
|
async deleteThread(t) {
|
|
1939
|
-
const n = await Wf(`/threads/${t}`);
|
|
1939
|
+
const n = await Wf(`/chat/threads/${t}`);
|
|
1940
1940
|
return Ne(n);
|
|
1941
1941
|
}
|
|
1942
1942
|
async threadInfo(t) {
|
|
1943
|
-
const n = await lt(`/threads/${t}/info`);
|
|
1943
|
+
const n = await lt(`/chat/threads/${t}/info`);
|
|
1944
1944
|
return Ne(n);
|
|
1945
1945
|
}
|
|
1946
1946
|
// ---- Messages & State ----
|
|
1947
1947
|
async getMessages(t) {
|
|
1948
|
-
const n = await lt("/messages", {
|
|
1948
|
+
const n = await lt("/chat/messages", {
|
|
1949
1949
|
params: {
|
|
1950
1950
|
thread_id: t.threadId,
|
|
1951
1951
|
checkpoint_id: t.checkpointId,
|
|
@@ -1955,7 +1955,7 @@ class Eo {
|
|
|
1955
1955
|
return Ne(n);
|
|
1956
1956
|
}
|
|
1957
1957
|
async getState(t) {
|
|
1958
|
-
const n = await lt("/state", {
|
|
1958
|
+
const n = await lt("/chat/state", {
|
|
1959
1959
|
params: {
|
|
1960
1960
|
thread_id: t.threadId,
|
|
1961
1961
|
checkpoint_id: t.checkpointId,
|
|
@@ -1965,7 +1965,7 @@ class Eo {
|
|
|
1965
1965
|
return Ne(n);
|
|
1966
1966
|
}
|
|
1967
1967
|
async getStateHistory(t) {
|
|
1968
|
-
const n = await lt("/state/history", {
|
|
1968
|
+
const n = await lt("/chat/state/history", {
|
|
1969
1969
|
params: {
|
|
1970
1970
|
thread_id: t.threadId,
|
|
1971
1971
|
checkpoint_id: t.checkpointId,
|
|
@@ -1976,7 +1976,7 @@ class Eo {
|
|
|
1976
1976
|
}
|
|
1977
1977
|
// ---- Checkpoints ----
|
|
1978
1978
|
async listCheckpoints(t) {
|
|
1979
|
-
const n = await lt("/checkpoints", {
|
|
1979
|
+
const n = await lt("/chat/checkpoints", {
|
|
1980
1980
|
params: { thread_id: t }
|
|
1981
1981
|
});
|
|
1982
1982
|
return Ne(n);
|
|
@@ -2002,7 +2002,7 @@ class Eo {
|
|
|
2002
2002
|
async streamChat(t, n, r) {
|
|
2003
2003
|
var o;
|
|
2004
2004
|
try {
|
|
2005
|
-
await Vf("/stream", {
|
|
2005
|
+
await Vf("/chat/stream", {
|
|
2006
2006
|
method: "POST",
|
|
2007
2007
|
body: t,
|
|
2008
2008
|
onChunk: (s) => {
|
package/dist/index.umd.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
`)}getSetCookie(){return this.get("set-cookie")||[]}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(t){return t instanceof this?t:new this(t)}static concat(t,...n){const r=new this(t);return n.forEach(o=>r.set(o)),r}static accessor(t){const r=(this[xs]=this[xs]={accessors:{}}).accessors,o=this.prototype;function s(a){const c=Wt(a);r[c]||(Du(o,a),r[c]=!0)}return S.isArray(t)?t.forEach(s):s(t),this}};Ee.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]),S.reduceDescriptors(Ee.prototype,({value:e},t)=>{let n=t[0].toUpperCase()+t.slice(1);return{get:()=>e,set(r){this[n]=r}}}),S.freezeMethods(Ee);function _r(e,t){const n=this||Ht,r=t||n,o=Ee.from(r.headers);let s=r.data;return S.forEach(e,function(c){s=c.call(n,s,o.normalize(),t?t.status:void 0)}),o.normalize(),s}function Ss(e){return!!(e&&e.__CANCEL__)}function yt(e,t,n){ne.call(this,e??"canceled",ne.ERR_CANCELED,t,n),this.name="CanceledError"}S.inherits(yt,ne,{__CANCEL__:!0});function Cs(e,t,n){const r=n.config.validateStatus;!n.status||!r||r(n.status)?e(n):t(new ne("Request failed with status code "+n.status,[ne.ERR_BAD_REQUEST,ne.ERR_BAD_RESPONSE][Math.floor(n.status/100)-4],n.config,n.request,n))}function Lu(e){const t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||""}function Fu(e,t){e=e||10;const n=new Array(e),r=new Array(e);let o=0,s=0,a;return t=t!==void 0?t:1e3,function(d){const f=Date.now(),u=r[s];a||(a=f),n[o]=d,r[o]=f;let p=s,g=0;for(;p!==o;)g+=n[p++],p=p%e;if(o=(o+1)%e,o===s&&(s=(s+1)%e),f-a<t)return;const v=u&&f-u;return v?Math.round(g*1e3/v):void 0}}function $u(e,t){let n=0,r=1e3/t,o,s;const a=(f,u=Date.now())=>{n=u,o=null,s&&(clearTimeout(s),s=null),e(...f)};return[(...f)=>{const u=Date.now(),p=u-n;p>=r?a(f,u):(o=f,s||(s=setTimeout(()=>{s=null,a(o)},r-p)))},()=>o&&a(o)]}const vn=(e,t,n=3)=>{let r=0;const o=Fu(50,250);return $u(s=>{const a=s.loaded,c=s.lengthComputable?s.total:void 0,d=a-r,f=o(d),u=a<=c;r=a;const p={loaded:a,total:c,progress:c?a/c:void 0,bytes:d,rate:f||void 0,estimated:f&&c&&u?(c-a)/f:void 0,event:s,lengthComputable:c!=null,[t?"download":"upload"]:!0};e(p)},n)},Es=(e,t)=>{const n=e!=null;return[r=>t[0]({lengthComputable:n,total:e,loaded:r}),t[1]]},Ns=e=>(...t)=>S.asap(()=>e(...t)),Bu=ye.hasStandardBrowserEnv?((e,t)=>n=>(n=new URL(n,ye.origin),e.protocol===n.protocol&&e.host===n.host&&(t||e.port===n.port)))(new URL(ye.origin),ye.navigator&&/(msie|trident)/i.test(ye.navigator.userAgent)):()=>!0,Uu=ye.hasStandardBrowserEnv?{write(e,t,n,r,o,s){const a=[e+"="+encodeURIComponent(t)];S.isNumber(n)&&a.push("expires="+new Date(n).toGMTString()),S.isString(r)&&a.push("path="+r),S.isString(o)&&a.push("domain="+o),s===!0&&a.push("secure"),document.cookie=a.join("; ")},read(e){const t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove(e){this.write(e,"",Date.now()-864e5)}}:{write(){},read(){return null},remove(){}};function zu(e){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(e)}function Hu(e,t){return t?e.replace(/\/?\/$/,"")+"/"+t.replace(/^\/+/,""):e}function Ts(e,t,n){let r=!zu(t);return e&&(r||n==!1)?Hu(e,t):t}const As=e=>e instanceof Ee?{...e}:e;function ct(e,t){t=t||{};const n={};function r(f,u,p,g){return S.isPlainObject(f)&&S.isPlainObject(u)?S.merge.call({caseless:g},f,u):S.isPlainObject(u)?S.merge({},u):S.isArray(u)?u.slice():u}function o(f,u,p,g){if(S.isUndefined(u)){if(!S.isUndefined(f))return r(void 0,f,p,g)}else return r(f,u,p,g)}function s(f,u){if(!S.isUndefined(u))return r(void 0,u)}function a(f,u){if(S.isUndefined(u)){if(!S.isUndefined(f))return r(void 0,f)}else return r(void 0,u)}function c(f,u,p){if(p in t)return r(f,u);if(p in e)return r(void 0,f)}const d={url:s,method:s,data:s,baseURL:a,transformRequest:a,transformResponse:a,paramsSerializer:a,timeout:a,timeoutMessage:a,withCredentials:a,withXSRFToken:a,adapter:a,responseType:a,xsrfCookieName:a,xsrfHeaderName:a,onUploadProgress:a,onDownloadProgress:a,decompress:a,maxContentLength:a,maxBodyLength:a,beforeRedirect:a,transport:a,httpAgent:a,httpsAgent:a,cancelToken:a,socketPath:a,responseEncoding:a,validateStatus:c,headers:(f,u,p)=>o(As(f),As(u),p,!0)};return S.forEach(Object.keys({...e,...t}),function(u){const p=d[u]||o,g=p(e[u],t[u],u);S.isUndefined(g)&&p!==c||(n[u]=g)}),n}const Ps=e=>{const t=ct({},e);let{data:n,withXSRFToken:r,xsrfHeaderName:o,xsrfCookieName:s,headers:a,auth:c}=t;if(t.headers=a=Ee.from(a),t.url=bs(Ts(t.baseURL,t.url,t.allowAbsoluteUrls),e.params,e.paramsSerializer),c&&a.set("Authorization","Basic "+btoa((c.username||"")+":"+(c.password?unescape(encodeURIComponent(c.password)):""))),S.isFormData(n)){if(ye.hasStandardBrowserEnv||ye.hasStandardBrowserWebWorkerEnv)a.setContentType(void 0);else if(S.isFunction(n.getHeaders)){const d=n.getHeaders(),f=["content-type","content-length"];Object.entries(d).forEach(([u,p])=>{f.includes(u.toLowerCase())&&a.set(u,p)})}}if(ye.hasStandardBrowserEnv&&(r&&S.isFunction(r)&&(r=r(t)),r||r!==!1&&Bu(t.url))){const d=o&&s&&Uu.read(s);d&&a.set(o,d)}return t},Wu=typeof XMLHttpRequest<"u"&&function(e){return new Promise(function(n,r){const o=Ps(e);let s=o.data;const a=Ee.from(o.headers).normalize();let{responseType:c,onUploadProgress:d,onDownloadProgress:f}=o,u,p,g,v,h;function m(){v&&v(),h&&h(),o.cancelToken&&o.cancelToken.unsubscribe(u),o.signal&&o.signal.removeEventListener("abort",u)}let b=new XMLHttpRequest;b.open(o.method.toUpperCase(),o.url,!0),b.timeout=o.timeout;function w(){if(!b)return;const x=Ee.from("getAllResponseHeaders"in b&&b.getAllResponseHeaders()),C={data:!c||c==="text"||c==="json"?b.responseText:b.response,status:b.status,statusText:b.statusText,headers:x,config:e,request:b};Cs(function(N){n(N),m()},function(N){r(N),m()},C),b=null}"onloadend"in b?b.onloadend=w:b.onreadystatechange=function(){!b||b.readyState!==4||b.status===0&&!(b.responseURL&&b.responseURL.indexOf("file:")===0)||setTimeout(w)},b.onabort=function(){b&&(r(new ne("Request aborted",ne.ECONNABORTED,e,b)),b=null)},b.onerror=function(E){const C=E&&E.message?E.message:"Network Error",O=new ne(C,ne.ERR_NETWORK,e,b);O.event=E||null,r(O),b=null},b.ontimeout=function(){let E=o.timeout?"timeout of "+o.timeout+"ms exceeded":"timeout exceeded";const C=o.transitional||ws;o.timeoutErrorMessage&&(E=o.timeoutErrorMessage),r(new ne(E,C.clarifyTimeoutError?ne.ETIMEDOUT:ne.ECONNABORTED,e,b)),b=null},s===void 0&&a.setContentType(null),"setRequestHeader"in b&&S.forEach(a.toJSON(),function(E,C){b.setRequestHeader(C,E)}),S.isUndefined(o.withCredentials)||(b.withCredentials=!!o.withCredentials),c&&c!=="json"&&(b.responseType=o.responseType),f&&([g,h]=vn(f,!0),b.addEventListener("progress",g)),d&&b.upload&&([p,v]=vn(d),b.upload.addEventListener("progress",p),b.upload.addEventListener("loadend",v)),(o.cancelToken||o.signal)&&(u=x=>{b&&(r(!x||x.type?new yt(null,e,b):x),b.abort(),b=null)},o.cancelToken&&o.cancelToken.subscribe(u),o.signal&&(o.signal.aborted?u():o.signal.addEventListener("abort",u)));const y=Lu(o.url);if(y&&ye.protocols.indexOf(y)===-1){r(new ne("Unsupported protocol "+y+":",ne.ERR_BAD_REQUEST,e));return}b.send(s||null)})},Vu=(e,t)=>{const{length:n}=e=e?e.filter(Boolean):[];if(t||n){let r=new AbortController,o;const s=function(f){if(!o){o=!0,c();const u=f instanceof Error?f:this.reason;r.abort(u instanceof ne?u:new yt(u instanceof Error?u.message:u))}};let a=t&&setTimeout(()=>{a=null,s(new ne(`timeout ${t} of ms exceeded`,ne.ETIMEDOUT))},t);const c=()=>{e&&(a&&clearTimeout(a),a=null,e.forEach(f=>{f.unsubscribe?f.unsubscribe(s):f.removeEventListener("abort",s)}),e=null)};e.forEach(f=>f.addEventListener("abort",s));const{signal:d}=r;return d.unsubscribe=()=>S.asap(c),d}},Ru=function*(e,t){let n=e.byteLength;if(n<t){yield e;return}let r=0,o;for(;r<n;)o=r+t,yield e.slice(r,o),r=o},ju=async function*(e,t){for await(const n of Ku(e))yield*Ru(n,t)},Ku=async function*(e){if(e[Symbol.asyncIterator]){yield*e;return}const t=e.getReader();try{for(;;){const{done:n,value:r}=await t.read();if(n)break;yield r}}finally{await t.cancel()}},_s=(e,t,n,r)=>{const o=ju(e,t);let s=0,a,c=d=>{a||(a=!0,r&&r(d))};return new ReadableStream({async pull(d){try{const{done:f,value:u}=await o.next();if(f){c(),d.close();return}let p=u.byteLength;if(n){let g=s+=p;n(g)}d.enqueue(new Uint8Array(u))}catch(f){throw c(f),f}},cancel(d){return c(d),o.return()}},{highWaterMark:2})},Is=64*1024,{isFunction:wn}=S,Gu=(({Request:e,Response:t})=>({Request:e,Response:t}))(S.global),{ReadableStream:Os,TextEncoder:ks}=S.global,Ms=(e,...t)=>{try{return!!e(...t)}catch{return!1}},qu=e=>{e=S.merge.call({skipUndefined:!0},Gu,e);const{fetch:t,Request:n,Response:r}=e,o=t?wn(t):typeof fetch=="function",s=wn(n),a=wn(r);if(!o)return!1;const c=o&&wn(Os),d=o&&(typeof ks=="function"?(h=>m=>h.encode(m))(new ks):async h=>new Uint8Array(await new n(h).arrayBuffer())),f=s&&c&&Ms(()=>{let h=!1;const m=new n(ye.origin,{body:new Os,method:"POST",get duplex(){return h=!0,"half"}}).headers.has("Content-Type");return h&&!m}),u=a&&c&&Ms(()=>S.isReadableStream(new r("").body)),p={stream:u&&(h=>h.body)};o&&["text","arrayBuffer","blob","formData","stream"].forEach(h=>{!p[h]&&(p[h]=(m,b)=>{let w=m&&m[h];if(w)return w.call(m);throw new ne(`Response type '${h}' is not supported`,ne.ERR_NOT_SUPPORT,b)})});const g=async h=>{if(h==null)return 0;if(S.isBlob(h))return h.size;if(S.isSpecCompliantForm(h))return(await new n(ye.origin,{method:"POST",body:h}).arrayBuffer()).byteLength;if(S.isArrayBufferView(h)||S.isArrayBuffer(h))return h.byteLength;if(S.isURLSearchParams(h)&&(h=h+""),S.isString(h))return(await d(h)).byteLength},v=async(h,m)=>{const b=S.toFiniteNumber(h.getContentLength());return b??g(m)};return async h=>{let{url:m,method:b,data:w,signal:y,cancelToken:x,timeout:E,onDownloadProgress:C,onUploadProgress:O,responseType:N,headers:L,withCredentials:M="same-origin",fetchOptions:D}=Ps(h),j=t||fetch;N=N?(N+"").toLowerCase():"text";let G=Vu([y,x&&x.toAbortSignal()],E),V=null;const z=G&&G.unsubscribe&&(()=>{G.unsubscribe()});let X;try{if(O&&f&&b!=="get"&&b!=="head"&&(X=await v(L,w))!==0){let k=new n(m,{method:"POST",body:w,duplex:"half"}),Y;if(S.isFormData(w)&&(Y=k.headers.get("content-type"))&&L.setContentType(Y),k.body){const[B,H]=Es(X,vn(Ns(O)));w=_s(k.body,Is,B,H)}}S.isString(M)||(M=M?"include":"omit");const F=s&&"credentials"in n.prototype,q={...D,signal:G,method:b.toUpperCase(),headers:L.normalize().toJSON(),body:w,duplex:"half",credentials:F?M:void 0};V=s&&new n(m,q);let T=await(s?j(V,D):j(m,q));const _=u&&(N==="stream"||N==="response");if(u&&(C||_&&z)){const k={};["status","statusText","headers"].forEach(de=>{k[de]=T[de]});const Y=S.toFiniteNumber(T.headers.get("content-length")),[B,H]=C&&Es(Y,vn(Ns(C),!0))||[];T=new r(_s(T.body,Is,B,()=>{H&&H(),z&&z()}),k)}N=N||"text";let I=await p[S.findKey(p,N)||"text"](T,h);return!_&&z&&z(),await new Promise((k,Y)=>{Cs(k,Y,{data:I,headers:Ee.from(T.headers),status:T.status,statusText:T.statusText,config:h,request:V})})}catch(F){throw z&&z(),F&&F.name==="TypeError"&&/Load failed|fetch/i.test(F.message)?Object.assign(new ne("Network Error",ne.ERR_NETWORK,h,V),{cause:F.cause||F}):ne.from(F,F&&F.code,h,V)}}},Xu=new Map,Ds=e=>{let t=e?e.env:{};const{fetch:n,Request:r,Response:o}=t,s=[r,o,n];let a=s.length,c=a,d,f,u=Xu;for(;c--;)d=s[c],f=u.get(d),f===void 0&&u.set(d,f=c?new Map:qu(t)),u=f;return f};Ds();const Ir={http:bu,xhr:Wu,fetch:{get:Ds}};S.forEach(Ir,(e,t)=>{if(e){try{Object.defineProperty(e,"name",{value:t})}catch{}Object.defineProperty(e,"adapterName",{value:t})}});const Ls=e=>`- ${e}`,Yu=e=>S.isFunction(e)||e===null||e===!1,Fs={getAdapter:(e,t)=>{e=S.isArray(e)?e:[e];const{length:n}=e;let r,o;const s={};for(let a=0;a<n;a++){r=e[a];let c;if(o=r,!Yu(r)&&(o=Ir[(c=String(r)).toLowerCase()],o===void 0))throw new ne(`Unknown adapter '${c}'`);if(o&&(S.isFunction(o)||(o=o.get(t))))break;s[c||"#"+a]=o}if(!o){const a=Object.entries(s).map(([d,f])=>`adapter ${d} `+(f===!1?"is not supported by the environment":"is not available in the build"));let c=n?a.length>1?`since :
|
|
4
4
|
`+a.map(Ls).join(`
|
|
5
5
|
`):" "+Ls(a[0]):"as no adapter specified";throw new ne("There is no suitable adapter to dispatch the request "+c,"ERR_NOT_SUPPORT")}return o},adapters:Ir};function Or(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new yt(null,e)}function $s(e){return Or(e),e.headers=Ee.from(e.headers),e.data=_r.call(e,e.transformRequest),["post","put","patch"].indexOf(e.method)!==-1&&e.headers.setContentType("application/x-www-form-urlencoded",!1),Fs.getAdapter(e.adapter||Ht.adapter,e)(e).then(function(r){return Or(e),r.data=_r.call(e,e.transformResponse,r),r.headers=Ee.from(r.headers),r},function(r){return Ss(r)||(Or(e),r&&r.response&&(r.response.data=_r.call(e,e.transformResponse,r.response),r.response.headers=Ee.from(r.response.headers))),Promise.reject(r)})}const Bs="1.12.2",yn={};["object","boolean","number","function","string","symbol"].forEach((e,t)=>{yn[e]=function(r){return typeof r===e||"a"+(t<1?"n ":" ")+e}});const Us={};yn.transitional=function(t,n,r){function o(s,a){return"[Axios v"+Bs+"] Transitional option '"+s+"'"+a+(r?". "+r:"")}return(s,a,c)=>{if(t===!1)throw new ne(o(a," has been removed"+(n?" in "+n:"")),ne.ERR_DEPRECATED);return n&&!Us[a]&&(Us[a]=!0,console.warn(o(a," has been deprecated since v"+n+" and will be removed in the near future"))),t?t(s,a,c):!0}},yn.spelling=function(t){return(n,r)=>(console.warn(`${r} is likely a misspelling of ${t}`),!0)};function Ju(e,t,n){if(typeof e!="object")throw new ne("options must be an object",ne.ERR_BAD_OPTION_VALUE);const r=Object.keys(e);let o=r.length;for(;o-- >0;){const s=r[o],a=t[s];if(a){const c=e[s],d=c===void 0||a(c,s,e);if(d!==!0)throw new ne("option "+s+" must be "+d,ne.ERR_BAD_OPTION_VALUE);continue}if(n!==!0)throw new ne("Unknown option "+s,ne.ERR_BAD_OPTION)}}const xn={assertOptions:Ju,validators:yn},Ve=xn.validators;let lt=class{constructor(t){this.defaults=t||{},this.interceptors={request:new vs,response:new vs}}async request(t,n){try{return await this._request(t,n)}catch(r){if(r instanceof Error){let o={};Error.captureStackTrace?Error.captureStackTrace(o):o=new Error;const s=o.stack?o.stack.replace(/^.+\n/,""):"";try{r.stack?s&&!String(r.stack).endsWith(s.replace(/^.+\n.+\n/,""))&&(r.stack+=`
|
|
6
|
-
`+s):r.stack=s}catch{}}throw r}}_request(t,n){typeof t=="string"?(n=n||{},n.url=t):n=t||{},n=ct(this.defaults,n);const{transitional:r,paramsSerializer:o,headers:s}=n;r!==void 0&&xn.assertOptions(r,{silentJSONParsing:Ve.transitional(Ve.boolean),forcedJSONParsing:Ve.transitional(Ve.boolean),clarifyTimeoutError:Ve.transitional(Ve.boolean)},!1),o!=null&&(S.isFunction(o)?n.paramsSerializer={serialize:o}:xn.assertOptions(o,{encode:Ve.function,serialize:Ve.function},!0)),n.allowAbsoluteUrls!==void 0||(this.defaults.allowAbsoluteUrls!==void 0?n.allowAbsoluteUrls=this.defaults.allowAbsoluteUrls:n.allowAbsoluteUrls=!0),xn.assertOptions(n,{baseUrl:Ve.spelling("baseURL"),withXsrfToken:Ve.spelling("withXSRFToken")},!0),n.method=(n.method||this.defaults.method||"get").toLowerCase();let a=s&&S.merge(s.common,s[n.method]);s&&S.forEach(["delete","get","head","post","put","patch","common"],h=>{delete s[h]}),n.headers=Ee.concat(a,s);const c=[];let d=!0;this.interceptors.request.forEach(function(m){typeof m.runWhen=="function"&&m.runWhen(n)===!1||(d=d&&m.synchronous,c.unshift(m.fulfilled,m.rejected))});const f=[];this.interceptors.response.forEach(function(m){f.push(m.fulfilled,m.rejected)});let u,p=0,g;if(!d){const h=[$s.bind(this),void 0];for(h.unshift(...c),h.push(...f),g=h.length,u=Promise.resolve(n);p<g;)u=u.then(h[p++],h[p++]);return u}g=c.length;let v=n;for(;p<g;){const h=c[p++],m=c[p++];try{v=h(v)}catch(b){m.call(this,b);break}}try{u=$s.call(this,v)}catch(h){return Promise.reject(h)}for(p=0,g=f.length;p<g;)u=u.then(f[p++],f[p++]);return u}getUri(t){t=ct(this.defaults,t);const n=Ts(t.baseURL,t.url,t.allowAbsoluteUrls);return bs(n,t.params,t.paramsSerializer)}};S.forEach(["delete","get","head","options"],function(t){lt.prototype[t]=function(n,r){return this.request(ct(r||{},{method:t,url:n,data:(r||{}).data}))}}),S.forEach(["post","put","patch"],function(t){function n(r){return function(s,a,c){return this.request(ct(c||{},{method:t,headers:r?{"Content-Type":"multipart/form-data"}:{},url:s,data:a}))}}lt.prototype[t]=n(),lt.prototype[t+"Form"]=n(!0)});let Zu=class Pd{constructor(t){if(typeof t!="function")throw new TypeError("executor must be a function.");let n;this.promise=new Promise(function(s){n=s});const r=this;this.promise.then(o=>{if(!r._listeners)return;let s=r._listeners.length;for(;s-- >0;)r._listeners[s](o);r._listeners=null}),this.promise.then=o=>{let s;const a=new Promise(c=>{r.subscribe(c),s=c}).then(o);return a.cancel=function(){r.unsubscribe(s)},a},t(function(s,a,c){r.reason||(r.reason=new yt(s,a,c),n(r.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(t){if(this.reason){t(this.reason);return}this._listeners?this._listeners.push(t):this._listeners=[t]}unsubscribe(t){if(!this._listeners)return;const n=this._listeners.indexOf(t);n!==-1&&this._listeners.splice(n,1)}toAbortSignal(){const t=new AbortController,n=r=>{t.abort(r)};return this.subscribe(n),t.signal.unsubscribe=()=>this.unsubscribe(n),t.signal}static source(){let t;return{token:new Pd(function(o){t=o}),cancel:t}}};function Qu(e){return function(n){return e.apply(null,n)}}function ef(e){return S.isObject(e)&&e.isAxiosError===!0}const kr={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(kr).forEach(([e,t])=>{kr[t]=e});function zs(e){const t=new lt(e),n=ns(lt.prototype.request,t);return S.extend(n,lt.prototype,t,{allOwnKeys:!0}),S.extend(n,t,null,{allOwnKeys:!0}),n.create=function(o){return zs(ct(e,o))},n}const ge=zs(Ht);ge.Axios=lt,ge.CanceledError=yt,ge.CancelToken=Zu,ge.isCancel=Ss,ge.VERSION=Bs,ge.toFormData=mn,ge.AxiosError=ne,ge.Cancel=ge.CanceledError,ge.all=function(t){return Promise.all(t)},ge.spread=Qu,ge.isAxiosError=ef,ge.mergeConfig=ct,ge.AxiosHeaders=Ee,ge.formToJSON=e=>ys(S.isHTMLForm(e)?new FormData(e):e),ge.getAdapter=Fs.getAdapter,ge.HttpStatusCode=kr,ge.default=ge;const{Axios:mw,AxiosError:bw,CanceledError:vw,isCancel:ww,CancelToken:yw,VERSION:xw,all:Sw,Cancel:Cw,isAxiosError:Ew,spread:Nw,toFormData:Tw,AxiosHeaders:Aw,HttpStatusCode:Pw,formToJSON:_w,getAdapter:Iw,mergeConfig:Ow}=ge,xt={};function dt(){var e;try{return typeof window<"u"&&((e=window.localStorage)==null?void 0:e.getItem("chat-debug"))==="1"}catch{return!1}}const Mr=xt==null?void 0:xt.VITE_API_BASE_URL,Hs=xt==null?void 0:xt.VITE_AUTH_TOKEN;!Mr&&typeof window<"u"&&console.warn("VITE_API_BASE_URL is not set. The API client will need to be configured via apiConfig prop.");const Dr="auth_token";let Sn=(()=>{try{return(typeof localStorage<"u"?localStorage.getItem(Dr):null)||Hs||null}catch{return Hs||null}})();const Lr=new Set;function Fr(){return Sn}function Cn(e){Sn=e;try{typeof localStorage<"u"&&(e?localStorage.setItem(Dr,e):localStorage.removeItem(Dr))}catch{}Lr.forEach(t=>t(e))}function Ws(e){return Lr.add(e),()=>Lr.delete(e)}const ke=ge.create({baseURL:Mr||"http://localhost:8000",timeout:3e4,withCredentials:!0});ke.interceptors.request.use(e=>(Sn&&(e.headers.Authorization=`Bearer ${Sn}`),e));let $r=!1,Vt=[];async function tf(){if($r)return new Promise(e=>Vt.push(e));$r=!0;try{const{data:e}=await ge.post(`${Mr||ke.defaults.baseURL}/auth/refresh`,{},{withCredentials:!0,timeout:3e4}),t=(e==null?void 0:e.accessToken)??null;return Cn(t),Vt.forEach(n=>n(t)),Vt=[],t}catch{return Cn(null),Vt.forEach(t=>t(null)),Vt=[],null}finally{$r=!1}}ke.interceptors.response.use(e=>e,async e=>{var n;const t=e.config;if(((n=e.response)==null?void 0:n.status)===401&&!(t!=null&&t._retry)){t._retry=!0;const r=await tf();if(r&&t)return t.headers.Authorization=`Bearer ${r}`,ke(t)}return Promise.reject(e)});async function Ze(e,t){return(await ke.get(e,t)).data}async function St(e,t,n){return(await ke.post(e,t,n)).data}async function Vs(e,t,n){return(await ke.put(e,t,n)).data}async function Rs(e,t){return(await ke.delete(e,t)).data}async function js(e,t){var p;const{method:n="POST",body:r,headers:o={},onChunk:s,signal:a}=t,c=Fr();if(dt()){let g=r;try{const v=JSON.parse(JSON.stringify(r));(p=v==null?void 0:v.payload)!=null&&p.files_info&&Array.isArray(v.payload.files_info)&&(v.payload.files_info=v.payload.files_info.map(h=>({...h,data:h!=null&&h.data?`<base64 ${String(h.data).length} chars>`:h==null?void 0:h.data}))),g=v}catch{}console.debug("[api.stream]",n,`${ke.defaults.baseURL}${e}`,g)}const d=await fetch(`${ke.defaults.baseURL}${e.startsWith("/")?"":"/"}${e}`,{method:n,headers:{"Content-Type":"application/json",...c?{Authorization:`Bearer ${c}`}:{},...o},body:r!==void 0?JSON.stringify(r):void 0,credentials:"include",signal:a});if(!d.ok||!d.body){const g=await d.text().catch(()=>"");throw dt()&&console.debug("[api.stream] non-OK",d.status,g==null?void 0:g.slice(0,500)),new Error(`Stream failed: ${d.status} ${d.statusText}${g?": "+g:""}`)}const f=d.body.getReader(),u=new TextDecoder;for(;;){const{done:g,value:v}=await f.read();if(g)break;const h=u.decode(v,{stream:!0});dt()&&console.debug("[api.stream] chunk",h.slice(0,200)),s(h)}}function Ne(e){return e&&typeof e=="object"&&"data"in e?e.data:e}class En{get baseUrl(){return ke.defaults.baseURL||""}updateConfig(t){t.baseUrl&&(ke.defaults.baseURL=t.baseUrl),t.authToken!==void 0&&this.setAuthToken(t.authToken)}getAuthToken(){return Fr()}setAuthToken(t){Cn(t)}onTokenChange(t){return Ws(t)}setTokenProvider(t){this.setAuthToken(t)}async login(t){const n=await St("/auth/login",t);return Ne(n)}async logout(t){const n=await St("/auth/logout",t?{refresh_token:t}:{});Ne(n)}async devLogin(t){const r=await St("/auth/dev-login",t?{email:t}:{});return Ne(r)}async getProfile(){const t=await Ze("/auth/me");return Ne(t)}async listThreads(){const t=await Ze("/threads"),n=Ne(t);return(n==null?void 0:n.items)??(t==null?void 0:t.items)??[]}async createThread(t){const r=await St("/threads",t?{title:t}:void 0);return Ne(r)}async updateThread(t,n){const r=await Vs(`/threads/${t}`,{title:n});return Ne(r)}async deleteThread(t){const n=await Rs(`/threads/${t}`);return Ne(n)}async threadInfo(t){const n=await Ze(`/threads/${t}/info`);return Ne(n)}async getMessages(t){const n=await Ze("/messages",{params:{thread_id:t.threadId,checkpoint_id:t.checkpointId,checkpoint_ns:t.checkpointNs}});return Ne(n)}async getState(t){const n=await Ze("/state",{params:{thread_id:t.threadId,checkpoint_id:t.checkpointId,checkpoint_ns:t.checkpointNs}});return Ne(n)}async getStateHistory(t){const n=await Ze("/state/history",{params:{thread_id:t.threadId,checkpoint_id:t.checkpointId,checkpoint_ns:t.checkpointNs}});return Ne(n)}async listCheckpoints(t){const n=await Ze("/checkpoints",{params:{thread_id:t}});return Ne(n)}async uploadImage(t,n="/upload"){const r=new FormData;r.append("file",t,t.name),dt()&&console.debug("[api.uploadImage] ->",n,{name:t.name,type:t.type,size:t.size});const o=await St(n,r,{headers:{Accept:"application/json"},maxBodyLength:1/0}),s=Ne(o);if(dt()&&console.debug("[api.uploadImage] <-",s),!(s!=null&&s.url))throw new Error("Invalid upload response: missing url");return{url:s.url,mimeType:s.mimeType??t.type,name:s.name??t.name,size:s.size??t.size}}async streamChat(t,n,r){var o;try{await js("/stream",{method:"POST",body:t,onChunk:s=>{const a=s.split(`
|
|
6
|
+
`+s):r.stack=s}catch{}}throw r}}_request(t,n){typeof t=="string"?(n=n||{},n.url=t):n=t||{},n=ct(this.defaults,n);const{transitional:r,paramsSerializer:o,headers:s}=n;r!==void 0&&xn.assertOptions(r,{silentJSONParsing:Ve.transitional(Ve.boolean),forcedJSONParsing:Ve.transitional(Ve.boolean),clarifyTimeoutError:Ve.transitional(Ve.boolean)},!1),o!=null&&(S.isFunction(o)?n.paramsSerializer={serialize:o}:xn.assertOptions(o,{encode:Ve.function,serialize:Ve.function},!0)),n.allowAbsoluteUrls!==void 0||(this.defaults.allowAbsoluteUrls!==void 0?n.allowAbsoluteUrls=this.defaults.allowAbsoluteUrls:n.allowAbsoluteUrls=!0),xn.assertOptions(n,{baseUrl:Ve.spelling("baseURL"),withXsrfToken:Ve.spelling("withXSRFToken")},!0),n.method=(n.method||this.defaults.method||"get").toLowerCase();let a=s&&S.merge(s.common,s[n.method]);s&&S.forEach(["delete","get","head","post","put","patch","common"],h=>{delete s[h]}),n.headers=Ee.concat(a,s);const c=[];let d=!0;this.interceptors.request.forEach(function(m){typeof m.runWhen=="function"&&m.runWhen(n)===!1||(d=d&&m.synchronous,c.unshift(m.fulfilled,m.rejected))});const f=[];this.interceptors.response.forEach(function(m){f.push(m.fulfilled,m.rejected)});let u,p=0,g;if(!d){const h=[$s.bind(this),void 0];for(h.unshift(...c),h.push(...f),g=h.length,u=Promise.resolve(n);p<g;)u=u.then(h[p++],h[p++]);return u}g=c.length;let v=n;for(;p<g;){const h=c[p++],m=c[p++];try{v=h(v)}catch(b){m.call(this,b);break}}try{u=$s.call(this,v)}catch(h){return Promise.reject(h)}for(p=0,g=f.length;p<g;)u=u.then(f[p++],f[p++]);return u}getUri(t){t=ct(this.defaults,t);const n=Ts(t.baseURL,t.url,t.allowAbsoluteUrls);return bs(n,t.params,t.paramsSerializer)}};S.forEach(["delete","get","head","options"],function(t){lt.prototype[t]=function(n,r){return this.request(ct(r||{},{method:t,url:n,data:(r||{}).data}))}}),S.forEach(["post","put","patch"],function(t){function n(r){return function(s,a,c){return this.request(ct(c||{},{method:t,headers:r?{"Content-Type":"multipart/form-data"}:{},url:s,data:a}))}}lt.prototype[t]=n(),lt.prototype[t+"Form"]=n(!0)});let Zu=class Pd{constructor(t){if(typeof t!="function")throw new TypeError("executor must be a function.");let n;this.promise=new Promise(function(s){n=s});const r=this;this.promise.then(o=>{if(!r._listeners)return;let s=r._listeners.length;for(;s-- >0;)r._listeners[s](o);r._listeners=null}),this.promise.then=o=>{let s;const a=new Promise(c=>{r.subscribe(c),s=c}).then(o);return a.cancel=function(){r.unsubscribe(s)},a},t(function(s,a,c){r.reason||(r.reason=new yt(s,a,c),n(r.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(t){if(this.reason){t(this.reason);return}this._listeners?this._listeners.push(t):this._listeners=[t]}unsubscribe(t){if(!this._listeners)return;const n=this._listeners.indexOf(t);n!==-1&&this._listeners.splice(n,1)}toAbortSignal(){const t=new AbortController,n=r=>{t.abort(r)};return this.subscribe(n),t.signal.unsubscribe=()=>this.unsubscribe(n),t.signal}static source(){let t;return{token:new Pd(function(o){t=o}),cancel:t}}};function Qu(e){return function(n){return e.apply(null,n)}}function ef(e){return S.isObject(e)&&e.isAxiosError===!0}const kr={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(kr).forEach(([e,t])=>{kr[t]=e});function zs(e){const t=new lt(e),n=ns(lt.prototype.request,t);return S.extend(n,lt.prototype,t,{allOwnKeys:!0}),S.extend(n,t,null,{allOwnKeys:!0}),n.create=function(o){return zs(ct(e,o))},n}const ge=zs(Ht);ge.Axios=lt,ge.CanceledError=yt,ge.CancelToken=Zu,ge.isCancel=Ss,ge.VERSION=Bs,ge.toFormData=mn,ge.AxiosError=ne,ge.Cancel=ge.CanceledError,ge.all=function(t){return Promise.all(t)},ge.spread=Qu,ge.isAxiosError=ef,ge.mergeConfig=ct,ge.AxiosHeaders=Ee,ge.formToJSON=e=>ys(S.isHTMLForm(e)?new FormData(e):e),ge.getAdapter=Fs.getAdapter,ge.HttpStatusCode=kr,ge.default=ge;const{Axios:mw,AxiosError:bw,CanceledError:vw,isCancel:ww,CancelToken:yw,VERSION:xw,all:Sw,Cancel:Cw,isAxiosError:Ew,spread:Nw,toFormData:Tw,AxiosHeaders:Aw,HttpStatusCode:Pw,formToJSON:_w,getAdapter:Iw,mergeConfig:Ow}=ge,xt={};function dt(){var e;try{return typeof window<"u"&&((e=window.localStorage)==null?void 0:e.getItem("chat-debug"))==="1"}catch{return!1}}const Mr=xt==null?void 0:xt.VITE_API_BASE_URL,Hs=xt==null?void 0:xt.VITE_AUTH_TOKEN;!Mr&&typeof window<"u"&&console.warn("VITE_API_BASE_URL is not set. The API client will need to be configured via apiConfig prop.");const Dr="auth_token";let Sn=(()=>{try{return(typeof localStorage<"u"?localStorage.getItem(Dr):null)||Hs||null}catch{return Hs||null}})();const Lr=new Set;function Fr(){return Sn}function Cn(e){Sn=e;try{typeof localStorage<"u"&&(e?localStorage.setItem(Dr,e):localStorage.removeItem(Dr))}catch{}Lr.forEach(t=>t(e))}function Ws(e){return Lr.add(e),()=>Lr.delete(e)}const ke=ge.create({baseURL:Mr||"http://localhost:8000",timeout:3e4,withCredentials:!0});ke.interceptors.request.use(e=>(Sn&&(e.headers.Authorization=`Bearer ${Sn}`),e));let $r=!1,Vt=[];async function tf(){if($r)return new Promise(e=>Vt.push(e));$r=!0;try{const{data:e}=await ge.post(`${Mr||ke.defaults.baseURL}/auth/refresh`,{},{withCredentials:!0,timeout:3e4}),t=(e==null?void 0:e.accessToken)??null;return Cn(t),Vt.forEach(n=>n(t)),Vt=[],t}catch{return Cn(null),Vt.forEach(t=>t(null)),Vt=[],null}finally{$r=!1}}ke.interceptors.response.use(e=>e,async e=>{var n;const t=e.config;if(((n=e.response)==null?void 0:n.status)===401&&!(t!=null&&t._retry)){t._retry=!0;const r=await tf();if(r&&t)return t.headers.Authorization=`Bearer ${r}`,ke(t)}return Promise.reject(e)});async function Ze(e,t){return(await ke.get(e,t)).data}async function St(e,t,n){return(await ke.post(e,t,n)).data}async function Vs(e,t,n){return(await ke.put(e,t,n)).data}async function Rs(e,t){return(await ke.delete(e,t)).data}async function js(e,t){var p;const{method:n="POST",body:r,headers:o={},onChunk:s,signal:a}=t,c=Fr();if(dt()){let g=r;try{const v=JSON.parse(JSON.stringify(r));(p=v==null?void 0:v.payload)!=null&&p.files_info&&Array.isArray(v.payload.files_info)&&(v.payload.files_info=v.payload.files_info.map(h=>({...h,data:h!=null&&h.data?`<base64 ${String(h.data).length} chars>`:h==null?void 0:h.data}))),g=v}catch{}console.debug("[api.stream]",n,`${ke.defaults.baseURL}${e}`,g)}const d=await fetch(`${ke.defaults.baseURL}${e.startsWith("/")?"":"/"}${e}`,{method:n,headers:{"Content-Type":"application/json",...c?{Authorization:`Bearer ${c}`}:{},...o},body:r!==void 0?JSON.stringify(r):void 0,credentials:"include",signal:a});if(!d.ok||!d.body){const g=await d.text().catch(()=>"");throw dt()&&console.debug("[api.stream] non-OK",d.status,g==null?void 0:g.slice(0,500)),new Error(`Stream failed: ${d.status} ${d.statusText}${g?": "+g:""}`)}const f=d.body.getReader(),u=new TextDecoder;for(;;){const{done:g,value:v}=await f.read();if(g)break;const h=u.decode(v,{stream:!0});dt()&&console.debug("[api.stream] chunk",h.slice(0,200)),s(h)}}function Ne(e){return e&&typeof e=="object"&&"data"in e?e.data:e}class En{get baseUrl(){return ke.defaults.baseURL||""}updateConfig(t){t.baseUrl&&(ke.defaults.baseURL=t.baseUrl),t.authToken!==void 0&&this.setAuthToken(t.authToken)}getAuthToken(){return Fr()}setAuthToken(t){Cn(t)}onTokenChange(t){return Ws(t)}setTokenProvider(t){this.setAuthToken(t)}async login(t){const n=await St("/auth/login",t);return Ne(n)}async logout(t){const n=await St("/auth/logout",t?{refresh_token:t}:{});Ne(n)}async devLogin(t){const r=await St("/auth/dev-login",t?{email:t}:{});return Ne(r)}async getProfile(){const t=await Ze("/auth/me");return Ne(t)}async listThreads(){const t=await Ze("/chat/threads"),n=Ne(t);return(n==null?void 0:n.items)??(t==null?void 0:t.items)??[]}async createThread(t){const r=await St("/chat/threads",t?{title:t}:void 0);return Ne(r)}async updateThread(t,n){const r=await Vs(`/chat/threads/${t}`,{title:n});return Ne(r)}async deleteThread(t){const n=await Rs(`/chat/threads/${t}`);return Ne(n)}async threadInfo(t){const n=await Ze(`/chat/threads/${t}/info`);return Ne(n)}async getMessages(t){const n=await Ze("/chat/messages",{params:{thread_id:t.threadId,checkpoint_id:t.checkpointId,checkpoint_ns:t.checkpointNs}});return Ne(n)}async getState(t){const n=await Ze("/chat/state",{params:{thread_id:t.threadId,checkpoint_id:t.checkpointId,checkpoint_ns:t.checkpointNs}});return Ne(n)}async getStateHistory(t){const n=await Ze("/chat/state/history",{params:{thread_id:t.threadId,checkpoint_id:t.checkpointId,checkpoint_ns:t.checkpointNs}});return Ne(n)}async listCheckpoints(t){const n=await Ze("/chat/checkpoints",{params:{thread_id:t}});return Ne(n)}async uploadImage(t,n="/upload"){const r=new FormData;r.append("file",t,t.name),dt()&&console.debug("[api.uploadImage] ->",n,{name:t.name,type:t.type,size:t.size});const o=await St(n,r,{headers:{Accept:"application/json"},maxBodyLength:1/0}),s=Ne(o);if(dt()&&console.debug("[api.uploadImage] <-",s),!(s!=null&&s.url))throw new Error("Invalid upload response: missing url");return{url:s.url,mimeType:s.mimeType??t.type,name:s.name??t.name,size:s.size??t.size}}async streamChat(t,n,r){var o;try{await js("/chat/stream",{method:"POST",body:t,onChunk:s=>{const a=s.split(`
|
|
7
7
|
`);for(const c of a)if(c.startsWith("data: "))try{const d=c.slice(6);if(d==="[DONE]")return;const f=JSON.parse(d);dt()&&console.debug("[api.streamChat] event",f==null?void 0:f.type,f),n(f)}catch(d){dt()&&console.debug("[api.streamChat] parse error",c,d)}},signal:r==null?void 0:r.signal})}catch(s){throw(o=r==null?void 0:r.onError)==null||o.call(r,s),s}}}const Qe=new En,nf=En,rf=En;function Ks(e={}){const t=e.baseUrl??"/api",n=e.streamPath??"/stream",[r,o]=P.useState(e.token??null),s=P.useRef(e.headers??{}),[a,c]=P.useState(!1),[d,f]=P.useState(null),[u,p]=P.useState(""),[g,v]=P.useState(null),h=P.useRef(null),m=P.useCallback(x=>{o(x)},[]),b=P.useCallback(()=>{var x;(x=h.current)==null||x.abort(),h.current=null,c(!1)},[]),w=P.useCallback(()=>{p(""),v(null),f(null)},[]),y=P.useCallback((x,E,C)=>{h.current&&(h.current.abort(),h.current=null),c(!0),f(null),e.autoAppendAssistant!==!1&&p("");const O=new AbortController;return h.current=O,(async()=>{var M,D,j,G;const N=(()=>{var V;try{return typeof window<"u"&&((V=window.localStorage)==null?void 0:V.getItem("chat-debug"))==="1"}catch{return!1}})(),L=V=>{var z;try{const X=JSON.parse(JSON.stringify(V));return(z=X==null?void 0:X.payload)!=null&&z.files_info&&Array.isArray(X.payload.files_info)&&(X.payload.files_info=X.payload.files_info.map(F=>({...F,data:F!=null&&F.data?`<base64 ${String(F.data).length} chars>`:F==null?void 0:F.data}))),X}catch{return V}};try{let V={};try{if(r)V={Authorization:`Bearer ${r}`};else if(typeof window<"u"){const _=window.__AUTH_TOKEN__,I=((M=window.localStorage)==null?void 0:M.getItem("authToken"))||null;let k=null;try{const B=(D=window.localStorage)==null?void 0:D.getItem("chat-settings");B&&(k=((j=JSON.parse(B))==null?void 0:j.apiKey)||null)}catch{}const Y=_||I||k||null;Y&&(V={Authorization:`Bearer ${Y}`})}}catch{}N&&console.debug("[use-chat] POST",t+n,L(x));const z=await fetch(t+n,{method:"POST",headers:{"Content-Type":"application/json",Accept:"text/event-stream",...V,...s.current},body:JSON.stringify(x),signal:O.signal});if(!z.ok||!z.body){const T=await z.text().catch(()=>"");throw N&&console.debug("[use-chat] non-OK response",z.status,T==null?void 0:T.slice(0,500)),new Error(`stream ${z.status}${T?": "+T:""}`)}const X=z.body.getReader(),F=new TextDecoder;let q="";for(;;){const{value:T,done:_}=await X.read();if(_)break;q+=F.decode(T,{stream:!0});let I;for(;(I=q.indexOf(`
|
|
8
8
|
|
|
9
9
|
`))>=0;){const k=q.slice(0,I);q=q.slice(I+2);const Y=sf(k);if(!Y)continue;let B;try{B=JSON.parse(Y)}catch{N&&console.debug("[use-chat] skip malformed SSE data:",Y==null?void 0:Y.slice(0,200));continue}const H=of(B)?B.data:B;if(N&&console.debug("[use-chat] event:",H==null?void 0:H.type,H),E==null||E(H),H.type==="token")e.autoAppendAssistant!==!1&&p(de=>de+H.content);else if(H.type==="message_delta"){const de=H.delta.filter(ie=>ie.type==="text").map(ie=>ie.text).join("");de&&e.autoAppendAssistant!==!1&&p(ie=>ie+de)}else H.type==="checkpoint"?v(H.checkpointId):H.type==="error"&&f(H.message)}}}catch(V){if((V==null?void 0:V.name)==="AbortError")return;const z=(V==null?void 0:V.message)||String(V);N&&console.debug("[use-chat] error:",z),f(z),(G=C==null?void 0:C.onError)==null||G.call(C,z)}finally{c(!1),h.current=null}})(),{close:()=>O.abort()}},[t,r,e.autoAppendAssistant]);return P.useEffect(()=>()=>{var x;return(x=h.current)==null?void 0:x.abort()},[]),{isStreaming:a,error:d,assistantText:u,lastCheckpointId:g,stream:y,stop:b,clear:w,setToken:m}}function of(e){return!!e&&typeof e=="object"&&e.protocolVersion==="v1"&&"data"in e}function sf(e){const t=e.split(/\r?\n/),n=[];for(const r of t)if(r&&!r.startsWith(":")&&r.startsWith("data:")){const o=r.slice(5);n.push(o.startsWith(" ")?o.slice(1):o)}return n.length===0?null:n.join(`
|
package/package.json
CHANGED