orbitchat 2.12.1 → 2.13.1
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/README.md +2 -1
- package/dist/assets/_baseUniq-BRKsqoH--BnZ8jILn.js +1 -0
- package/dist/assets/api-C90fNFdj.js +2 -0
- package/dist/assets/api-Dg2si9TY.js +2 -0
- package/dist/assets/arc-pab_su9s-DFq3JYvb.js +1 -0
- package/dist/assets/{architectureDiagram-VXUJARFQ-BiqZtsDe-DEqYIsMJ.js → architectureDiagram-VXUJARFQ-DqQ8r_6g-ejnypLyO.js} +3 -3
- package/dist/assets/{blockDiagram-VD42YOAC-zcRIdFTD-COzt4CrQ.js → blockDiagram-VD42YOAC-B-dKfcH3-Bgo8FU6J.js} +5 -5
- package/dist/assets/{c4Diagram-YG6GDRKO-DYXNcDX4-DEfH_pWV.js → c4Diagram-YG6GDRKO-DMUPaBEl-CX9lx-UK.js} +4 -4
- package/dist/assets/channel-HKsfPa5q-i-PY3wcB.js +1 -0
- package/dist/assets/{chunk-4BX2VUAB-DAh9ktmY-DZD2PcPU.js → chunk-4BX2VUAB-CX67kh_B-Dm2c-Lyy.js} +1 -1
- package/dist/assets/{chunk-55IACEB6-Cza7pcpr-D7bYvLOe.js → chunk-55IACEB6-BocSyyvr-lclbFu9j.js} +1 -1
- package/dist/assets/{chunk-B4BG7PRW-BTUSpeKy-DZ4MZ_E6.js → chunk-B4BG7PRW-CO8QAyfE-CvvrZ063.js} +4 -4
- package/dist/assets/{chunk-DI55MBZ5-DKt4WII7-CRJMRJL2.js → chunk-DI55MBZ5-Dw1L6Eos-BuD2OREa.js} +3 -3
- package/dist/assets/{chunk-FMBD7UC4-DdcCR8w3-BdR2euO8.js → chunk-FMBD7UC4-dPK7Boav-D0ZlDI-s.js} +1 -1
- package/dist/assets/chunk-QN33PNHL-vP2PqfVG-DqaIoebO.js +1 -0
- package/dist/assets/{chunk-QZHKN3VN-DVJOrqBZ-C9ZYfK0u.js → chunk-QZHKN3VN-Bcidzu63-DG8agfQA.js} +1 -1
- package/dist/assets/{chunk-TZMSLE5B-G2jJHqli-DkiaNM8K.js → chunk-TZMSLE5B-BtljMjlg-B6xEnbcW.js} +1 -1
- package/dist/assets/classDiagram-2ON5EDUG-C7cYN9hv-Dd-YCt5Q.js +1 -0
- package/dist/assets/classDiagram-v2-WZHVMYZB-C7cYN9hv-Dd-YCt5Q.js +1 -0
- package/dist/assets/clone-DoPb9X13-DxnBl06F.js +1 -0
- package/dist/assets/{cose-bilkent-S5V4N54A-BRr2Y6dg-BnmYaVJO.js → cose-bilkent-S5V4N54A-BGzO4EsH-BMVWyh_a.js} +1 -1
- package/dist/assets/{dagre-6UL2VRFP-DX8gNHmJ-CAKfI7ue.js → dagre-6UL2VRFP-TzNvXCds-CbmhexaH.js} +2 -2
- package/dist/assets/{diagram-PSM6KHXK-DNX818To-BVRku9GT.js → diagram-PSM6KHXK-BqY4RpUg-BqmtaKLy.js} +1 -1
- package/dist/assets/{diagram-QEK2KX5R-BDO6hKtm-Do05QIIv.js → diagram-QEK2KX5R-CTjgBsne-Dbl2BvQJ.js} +2 -2
- package/dist/assets/diagram-S2PKOQOG-BqrhTIpA-DnNkr8UG.js +24 -0
- package/dist/assets/{erDiagram-Q2GNP2WA-DbLpN8Jp-D20O9tro.js → erDiagram-Q2GNP2WA-B2hsi_Tl-r9lLCSiy.js} +4 -4
- package/dist/assets/{flowDiagram-NV44I4VS-pJlHae8Y-lUaSqWx3.js → flowDiagram-NV44I4VS-C03vtt_F-Bj1MoEwx.js} +6 -6
- package/dist/assets/{ganttDiagram-JELNMOA3-J0Tkq5TR-YEip1L2N.js → ganttDiagram-JELNMOA3-B3hAg964-CCnbkzn3.js} +3 -3
- package/dist/assets/{gitGraphDiagram-NY62KEGX-DgYonpsZ-DT4KwRyD.js → gitGraphDiagram-NY62KEGX-ByhMH0yZ-YRu-SLHD.js} +10 -10
- package/dist/assets/{graph-BpcfrHXY-DYpG7xUC.js → graph-BmNkcFEM-dUEThWgx.js} +1 -1
- package/dist/assets/{index-Cw6P01hg.js → index-BTk6gbYa.js} +372 -349
- package/dist/assets/index-BXexqYFc-6FZAvmAF.js +134 -0
- package/dist/assets/index-BjgS88qB.css +1 -0
- package/dist/assets/infoDiagram-WHAUD3N6-is6Ho4-T-BLBpQ0kq.js +2 -0
- package/dist/assets/{journeyDiagram-XKPGCS4Q-CfjB2Qdf-C_qkhWdK.js → journeyDiagram-XKPGCS4Q-CRTOL26C-BslRBPzU.js} +5 -5
- package/dist/assets/{kanban-definition-3W4ZIXB7-CrW8yVmd-B6fYzGBV.js → kanban-definition-3W4ZIXB7-CNnO_t6O-C2MPRjuS.js} +8 -8
- package/dist/assets/{layout-bsfAhWjc-C1rzXVdU.js → layout-C0kZPebx-DBUyCsod.js} +1 -1
- package/dist/assets/min-7Gb0pNxh-9FduVVTw.js +1 -0
- package/dist/assets/{mindmap-definition-VGOIOE7T-Dj37RkY_-B-MSOG_W.js → mindmap-definition-VGOIOE7T-CJZ2wTTa-DP1XV6kP.js} +5 -5
- package/dist/assets/pieDiagram-ADFJNKIX-C9OSknjr-BdkTw8nn.js +30 -0
- package/dist/assets/{quadrantDiagram-AYHSOK5B-D4b-YFzI-BpKtsd64.js → quadrantDiagram-AYHSOK5B-CW8yuAqv-BcCv0sYD.js} +5 -5
- package/dist/assets/{requirementDiagram-UZGBJVZJ-km07nlVd-C0Saflm6.js → requirementDiagram-UZGBJVZJ-nGPhruO1-CZD7Xw4s.js} +4 -4
- package/dist/assets/{sankeyDiagram-TZEHDZUN-LfuSRRbf-3o7pZAx1.js → sankeyDiagram-TZEHDZUN-CmL90u-m-BicoH15o.js} +5 -5
- package/dist/assets/{sequenceDiagram-WL72ISMW-CQ4J-0_7-C5Oigyo8.js → sequenceDiagram-WL72ISMW-B02VRcnM-CvY3TSCC.js} +7 -7
- package/dist/assets/{stateDiagram-FKZM4ZOC-JtogJwt6-DviZJ6bb.js → stateDiagram-FKZM4ZOC-DjoyLUdz-Cy3GdNKr.js} +1 -1
- package/dist/assets/stateDiagram-v2-4FDKWEC3-Bq76BTB7-BTj88h18.js +1 -0
- package/dist/assets/{timeline-definition-IT6M3QCI-Cs3NnF2M-ryO-tulk.js → timeline-definition-IT6M3QCI-CTn0Gm3T-BPnEK60y.js} +6 -6
- package/dist/assets/{treemap-KMMF4GRG-CkW25-tn-m5M8hNY7.js → treemap-KMMF4GRG-BjgLKKyi-Dpn6IoCt.js} +22 -22
- package/dist/assets/{xychartDiagram-PRI3JC2R-JzAaXa5z-CuQ82mrU.js → xychartDiagram-PRI3JC2R-Cgg6Uija-B3NNTn5p.js} +5 -5
- package/dist/index.html +2 -2
- package/package.json +8 -8
- package/dist/assets/_baseUniq-BPMphbq5-BsZUreLv.js +0 -1
- package/dist/assets/api-BHF9IxKN.js +0 -1
- package/dist/assets/api-CC5Fa9iw.js +0 -2
- package/dist/assets/arc-D9rhTKV0-DLiAsvqE.js +0 -1
- package/dist/assets/channel-CUIutAfm-BdnLPaGJ.js +0 -1
- package/dist/assets/chunk-QN33PNHL-v6AkzOl1-DSTLtLnU.js +0 -1
- package/dist/assets/classDiagram-2ON5EDUG-CxmgTanh-DtNyPKo-.js +0 -1
- package/dist/assets/classDiagram-v2-WZHVMYZB-CxmgTanh-DtNyPKo-.js +0 -1
- package/dist/assets/clone-CsNB4mMi-BhAiEJbG.js +0 -1
- package/dist/assets/diagram-S2PKOQOG-IEqaDwzi-BT3WtzNq.js +0 -24
- package/dist/assets/index-Cox333Kd.css +0 -1
- package/dist/assets/index-DvNpGWs7-CcXCVSGr.js +0 -134
- package/dist/assets/infoDiagram-WHAUD3N6-C3JLOAnb-J4AwmRbq.js +0 -2
- package/dist/assets/min-C2aDz5ZK-D52L_GQq.js +0 -1
- package/dist/assets/pieDiagram-ADFJNKIX-BiQvDx8I-DGCRxIx5.js +0 -30
- package/dist/assets/stateDiagram-v2-4FDKWEC3-DuQ7UaeU-Cwqub320.js +0 -1
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# ORBIT Chat App
|
|
2
2
|
|
|
3
|
-
A standalone chat application for ORBIT that can be installed as an npm package and run as a CLI tool. Integrates with the `@schmitech/chatbot-api` package for real-time streaming chat responses and
|
|
3
|
+
A standalone chat application for ORBIT that can be installed as an npm package and run as a CLI tool. Integrates with the `@schmitech/chatbot-api` package for real-time streaming chat responses and uses the open-source [`@schmitech/markdown-renderer`](https://github.com/schmitech/markdown-renderer) for rich content display including math and charts.
|
|
4
4
|
|
|
5
5
|
## Installation
|
|
6
6
|
|
|
@@ -316,6 +316,7 @@ Files are processed through the following pipeline:
|
|
|
316
316
|
The integration uses:
|
|
317
317
|
- **Zustand** for state management (replacing React Context)
|
|
318
318
|
- **@schmitech/chatbot-api** for streaming chat functionality and file operations
|
|
319
|
+
- **@schmitech/markdown-renderer** ([GitHub](https://github.com/schmitech/markdown-renderer) | [NPM](https://www.npmjs.com/package/@schmitech/markdown-renderer)) for rich markdown rendering
|
|
319
320
|
- **localStorage** for persistent session and conversation storage
|
|
320
321
|
- **TypeScript** for type safety throughout the integration
|
|
321
322
|
- **File Upload Service** for handling file uploads with progress tracking
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{aT as H,bI as cr,bJ as ir,aL as h,aM as U,bK as L,bL as lr,aP as sr,bz as k,bs as P,bM as vr,bN as br,aQ as hr,bO as V,bo as N,bp as T,bP as gr,bx as _,aH as pr,bQ as E,bR as yr,aU as dr}from"./index-BTk6gbYa.js";var jr="[object Symbol]";function z(r){return typeof r=="symbol"||k(r)&&vr(r)==jr}function _r(r,t){for(var e=-1,n=r==null?0:r.length,a=Array(n);++e<n;)a[e]=t(r[e],e,r);return a}var I=_?_.prototype:void 0,J=I?I.toString:void 0;function W(r){if(typeof r=="string")return r;if(h(r))return _r(r,W)+"";if(z(r))return J?J.call(r):"";var t=r+"";return t=="0"&&1/r==-1/0?"-0":t}function mr(){}function wr(r,t){for(var e=-1,n=r==null?0:r.length;++e<n&&t(r[e],e,r)!==!1;);return r}function Or(r,t,e,n){for(var a=r.length,u=e+-1;++u<a;)if(t(r[u],u,r))return u;return-1}function Sr(r){return r!==r}function Pr(r,t,e){for(var n=e-1,a=r.length;++n<a;)if(r[n]===t)return n;return-1}function Ar(r,t,e){return t===t?Pr(r,t,e):Or(r,Sr,e)}function Lr(r,t){var e=r==null?0:r.length;return!!e&&Ar(r,t,0)>-1}function B(r){return H(r)?cr(r):ir(r)}var $r=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,kr=/^\w*$/;function C(r,t){if(h(r))return!1;var e=typeof r;return e=="number"||e=="symbol"||e=="boolean"||r==null||z(r)?!0:kr.test(r)||!$r.test(r)||t!=null&&r in Object(t)}var zr=500;function Br(r){var t=yr(r,function(n){return e.size===zr&&e.clear(),n}),e=t.cache;return t}var Cr=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Mr=/\\(\\)?/g,xr=Br(function(r){var t=[];return r.charCodeAt(0)===46&&t.push(""),r.replace(Cr,function(e,n,a,u){t.push(a?u.replace(Mr,"$1"):n||e)}),t});function Dr(r){return r==null?"":W(r)}function X(r,t){return h(r)?r:C(r,t)?[r]:xr(Dr(r))}function A(r){if(typeof r=="string"||z(r))return r;var t=r+"";return t=="0"&&1/r==-1/0?"-0":t}function rr(r,t){t=X(t,r);for(var e=0,n=t.length;r!=null&&e<n;)r=r[A(t[e++])];return e&&e==n?r:void 0}function Fr(r,t,e){var n=r==null?void 0:rr(r,t);return n===void 0?e:n}function tr(r,t){for(var e=-1,n=t.length,a=r.length;++e<n;)r[a+e]=t[e];return r}var K=_?_.isConcatSpreadable:void 0;function Nr(r){return h(r)||V(r)||!!(K&&r&&r[K])}function Jt(r,t,e,n,a){var u=-1,o=r.length;for(e||(e=Nr),a||(a=[]);++u<o;){var f=r[u];e(f)?tr(a,f):n||(a[a.length]=f)}return a}function Tr(r,t,e,n){var a=-1,u=r==null?0:r.length;for(n&&u&&(e=r[++a]);++a<u;)e=t(e,r[a],a,r);return e}function er(r,t){for(var e=-1,n=r==null?0:r.length,a=0,u=[];++e<n;){var o=r[e];t(o,e,r)&&(u[a++]=o)}return u}function Er(){return[]}var Ir=Object.prototype,Jr=Ir.propertyIsEnumerable,R=Object.getOwnPropertySymbols,Kr=R?function(r){return r==null?[]:(r=Object(r),er(R(r),function(t){return Jr.call(r,t)}))}:Er;function Rr(r,t,e){var n=t(r);return h(r)?n:tr(n,e(r))}function q(r){return Rr(r,B,Kr)}var qr="__lodash_hash_undefined__";function Gr(r){return this.__data__.set(r,qr),this}function Qr(r){return this.__data__.has(r)}function m(r){var t=-1,e=r==null?0:r.length;for(this.__data__=new lr;++t<e;)this.add(r[t])}m.prototype.add=m.prototype.push=Gr;m.prototype.has=Qr;function Yr(r,t){for(var e=-1,n=r==null?0:r.length;++e<n;)if(t(r[e],e,r))return!0;return!1}function nr(r,t){return r.has(t)}var Zr=1,Hr=2;function ur(r,t,e,n,a,u){var o=e&Zr,f=r.length,c=t.length;if(f!=c&&!(o&&c>f))return!1;var v=u.get(r),l=u.get(t);if(v&&l)return v==t&&l==r;var i=-1,s=!0,p=e&Hr?new m:void 0;for(u.set(r,t),u.set(t,r);++i<f;){var b=r[i],g=t[i];if(n)var y=o?n(g,b,i,t,r,u):n(b,g,i,r,t,u);if(y!==void 0){if(y)continue;s=!1;break}if(p){if(!Yr(t,function(d,j){if(!nr(p,j)&&(b===d||a(b,d,e,n,u)))return p.push(j)})){s=!1;break}}else if(!(b===g||a(b,g,e,n,u))){s=!1;break}}return u.delete(r),u.delete(t),s}function Ur(r){var t=-1,e=Array(r.size);return r.forEach(function(n,a){e[++t]=[a,n]}),e}function M(r){var t=-1,e=Array(r.size);return r.forEach(function(n){e[++t]=n}),e}var Vr=1,Wr=2,Xr="[object Boolean]",rt="[object Date]",tt="[object Error]",et="[object Map]",nt="[object Number]",ut="[object RegExp]",at="[object Set]",ot="[object String]",ft="[object Symbol]",ct="[object ArrayBuffer]",it="[object DataView]",G=_?_.prototype:void 0,$=G?G.valueOf:void 0;function lt(r,t,e,n,a,u,o){switch(e){case it:if(r.byteLength!=t.byteLength||r.byteOffset!=t.byteOffset)return!1;r=r.buffer,t=t.buffer;case ct:return!(r.byteLength!=t.byteLength||!u(new E(r),new E(t)));case Xr:case rt:case nt:return pr(+r,+t);case tt:return r.name==t.name&&r.message==t.message;case ut:case ot:return r==t+"";case et:var f=Ur;case at:var c=n&Vr;if(f||(f=M),r.size!=t.size&&!c)return!1;var v=o.get(r);if(v)return v==t;n|=Wr,o.set(r,t);var l=ur(f(r),f(t),n,a,u,o);return o.delete(r),l;case ft:if($)return $.call(r)==$.call(t)}return!1}var st=1,vt=Object.prototype,bt=vt.hasOwnProperty;function ht(r,t,e,n,a,u){var o=e&st,f=q(r),c=f.length,v=q(t),l=v.length;if(c!=l&&!o)return!1;for(var i=c;i--;){var s=f[i];if(!(o?s in t:bt.call(t,s)))return!1}var p=u.get(r),b=u.get(t);if(p&&b)return p==t&&b==r;var g=!0;u.set(r,t),u.set(t,r);for(var y=o;++i<c;){s=f[i];var d=r[s],j=t[s];if(n)var F=o?n(j,d,s,t,r,u):n(d,j,s,r,t,u);if(!(F===void 0?d===j||a(d,j,e,n,u):F)){g=!1;break}y||(y=s=="constructor")}if(g&&!y){var w=r.constructor,O=t.constructor;w!=O&&"constructor"in r&&"constructor"in t&&!(typeof w=="function"&&w instanceof w&&typeof O=="function"&&O instanceof O)&&(g=!1)}return u.delete(r),u.delete(t),g}var gt=1,Q="[object Arguments]",Y="[object Array]",S="[object Object]",pt=Object.prototype,Z=pt.hasOwnProperty;function yt(r,t,e,n,a,u){var o=h(r),f=h(t),c=o?Y:N(r),v=f?Y:N(t);c=c==Q?S:c,v=v==Q?S:v;var l=c==S,i=v==S,s=c==v;if(s&&T(r)){if(!T(t))return!1;o=!0,l=!1}if(s&&!l)return u||(u=new P),o||gr(r)?ur(r,t,e,n,a,u):lt(r,t,c,e,n,a,u);if(!(e>)){var p=l&&Z.call(r,"__wrapped__"),b=i&&Z.call(t,"__wrapped__");if(p||b){var g=p?r.value():r,y=b?t.value():t;return u||(u=new P),a(g,y,e,n,u)}}return s?(u||(u=new P),ht(r,t,e,n,a,u)):!1}function x(r,t,e,n,a){return r===t?!0:r==null||t==null||!k(r)&&!k(t)?r!==r&&t!==t:yt(r,t,e,n,x,a)}var dt=1,jt=2;function _t(r,t,e,n){var a=e.length,u=a;if(r==null)return!u;for(r=Object(r);a--;){var o=e[a];if(o[2]?o[1]!==r[o[0]]:!(o[0]in r))return!1}for(;++a<u;){o=e[a];var f=o[0],c=r[f],v=o[1];if(o[2]){if(c===void 0&&!(f in r))return!1}else{var l=new P,i;if(!(i===void 0?x(v,c,dt|jt,n,l):i))return!1}}return!0}function ar(r){return r===r&&!sr(r)}function mt(r){for(var t=B(r),e=t.length;e--;){var n=t[e],a=r[n];t[e]=[n,a,ar(a)]}return t}function or(r,t){return function(e){return e==null?!1:e[r]===t&&(t!==void 0||r in Object(e))}}function wt(r){var t=mt(r);return t.length==1&&t[0][2]?or(t[0][0],t[0][1]):function(e){return e===r||_t(e,r,t)}}function Ot(r,t){return r!=null&&t in Object(r)}function St(r,t,e){t=X(t,r);for(var n=-1,a=t.length,u=!1;++n<a;){var o=A(t[n]);if(!(u=r!=null&&e(r,o)))break;r=r[o]}return u||++n!=a?u:(a=r==null?0:r.length,!!a&&br(a)&&hr(o,a)&&(h(r)||V(r)))}function Pt(r,t){return r!=null&&St(r,t,Ot)}var At=1,Lt=2;function $t(r,t){return C(r)&&ar(t)?or(A(r),t):function(e){var n=Fr(e,r);return n===void 0&&n===t?Pt(e,r):x(t,n,At|Lt)}}function kt(r){return function(t){return t==null?void 0:t[r]}}function zt(r){return function(t){return rr(t,r)}}function Bt(r){return C(r)?kt(A(r)):zt(r)}function fr(r){return typeof r=="function"?r:r==null?U:typeof r=="object"?h(r)?$t(r[0],r[1]):wt(r):Bt(r)}function Ct(r,t){return r&&dr(r,t,B)}function Mt(r,t){return function(e,n){if(e==null)return e;if(!H(e))return r(e,n);for(var a=e.length,u=-1,o=Object(e);++u<a&&n(o[u],u,o)!==!1;);return e}}var D=Mt(Ct);function xt(r){return typeof r=="function"?r:U}function Kt(r,t){var e=h(r)?wr:D;return e(r,xt(t))}function Dt(r,t){var e=[];return D(r,function(n,a,u){t(n,a,u)&&e.push(n)}),e}function Rt(r,t){var e=h(r)?er:Dt;return e(r,fr(t))}function Ft(r,t,e,n,a){return a(r,function(u,o,f){e=n?(n=!1,u):t(e,u,o,f)}),e}function qt(r,t,e){var n=h(r)?Tr:Ft,a=arguments.length<3;return n(r,fr(t),e,a,D)}var Nt=1/0,Tt=L&&1/M(new L([,-0]))[1]==Nt?function(r){return new L(r)}:mr,Et=200;function Gt(r,t,e){var n=-1,a=Lr,u=r.length,o=!0,f=[],c=f;if(u>=Et){var v=t?null:Tt(r);if(v)return M(v);o=!1,a=nr,c=new m}else c=t?[]:f;r:for(;++n<u;){var l=r[n],i=t?t(l):l;if(l=l!==0?l:0,o&&i===i){for(var s=c.length;s--;)if(c[s]===i)continue r;t&&c.push(i),f.push(l)}else a(c,i,e)||(c!==f&&c.push(i),f.push(l))}return f}export{Ct as $,Jt as B,wr as E,xt as F,Dr as G,A as I,Gt as J,Er as K,B as M,St as T,qt as Y,Rt as Z,fr as a,Pt as b,Or as c,Kr as d,q as e,Rr as f,D as g,X as j,rr as n,Kt as q,tr as r,_r as v,z as x};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{_ as S}from"./index-BTk6gbYa.js";var D=Object.defineProperty,J=(n,e,t)=>e in n?D(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t,m=(n,e,t)=>J(n,typeof e!="symbol"?e+"":e,t);let q=null,F=null;typeof window>"u"&&Promise.all([S(()=>import("./__vite-browser-external-BIHI7g3E.js"),[]).catch(()=>null),S(()=>import("./__vite-browser-external-BIHI7g3E.js"),[]).catch(()=>null)]).then(([n,e])=>{var t,i;(t=n==null?void 0:n.default)!=null&&t.Agent?q=new n.default.Agent({keepAlive:!0}):n!=null&&n.Agent&&(q=new n.Agent({keepAlive:!0})),(i=e==null?void 0:e.default)!=null&&i.Agent?F=new e.default.Agent({keepAlive:!0}):e!=null&&e.Agent&&(F=new e.Agent({keepAlive:!0}))}).catch(n=>{console.warn("Failed to initialize HTTP agents:",n.message)});const I="Could not connect to the server. Please check if the server is running.",j=6e4,L=1e6,X=5e5;class B{constructor(e){if(m(this,"apiUrl"),m(this,"apiKey"),m(this,"adapterName"),m(this,"middlewareBaseUrl"),m(this,"middlewareMode"),m(this,"sessionId"),!e.apiUrl||typeof e.apiUrl!="string")throw new Error("API URL must be a valid string");if(e.apiKey!==void 0&&e.apiKey!==null&&typeof e.apiKey!="string")throw new Error("API key must be a valid string or null");if(e.sessionId!==void 0&&e.sessionId!==null&&typeof e.sessionId!="string")throw new Error("Session ID must be a valid string or null");if(e.adapterName!==void 0&&e.adapterName!==null&&typeof e.adapterName!="string")throw new Error("Adapter name must be a valid string or null");if(e.middlewareBaseUrl!==void 0&&e.middlewareBaseUrl!==null&&typeof e.middlewareBaseUrl!="string")throw new Error("Middleware base URL must be a valid string or null");this.apiUrl=e.apiUrl,this.apiKey=e.apiKey??null,this.sessionId=e.sessionId??null;const t=typeof e.adapterName=="string"?e.adapterName.trim():"";this.adapterName=t&&t.length>0?t:null;const i=typeof e.middlewareBaseUrl=="string"?e.middlewareBaseUrl.trim():"";this.middlewareBaseUrl=i.endsWith("/")?i.slice(0,-1):i;const s=e.useMiddleware??(!this.apiKey&&!!this.adapterName);this.middlewareMode=!!(this.adapterName&&s)}setSessionId(e){if(e!==null&&typeof e!="string")throw new Error("Session ID must be a valid string or null");this.sessionId=e}getSessionId(){return this.sessionId}hasFailedToFetch(e){var t;return(e==null?void 0:e.name)==="TypeError"&&((t=e==null?void 0:e.message)==null?void 0:t.includes("Failed to fetch"))}rethrowNetworkError(e){if(this.hasFailedToFetch(e))throw new Error(I)}async fetchWithNetworkErrorHandling(e,t){try{return await fetch(e,t)}catch(i){throw this.rethrowNetworkError(i),i}}async requestJsonOrThrow(e,t,i){try{const s=await fetch(e,{...this.getFetchOptions(t)});if(!s.ok){const r=await s.text();throw new Error(`${i}: ${s.status} ${r}`)}return await s.json()}catch(s){throw this.rethrowNetworkError(s),s}}getRequiredApiKey(e){if(!this.apiKey)throw new Error(e);return this.apiKey}async validateApiKey(){const e=this.getRequiredApiKey("API key is required for validation");try{const t=await this.fetchWithNetworkErrorHandling(`${this.apiUrl}/admin/api-keys/${e}/status`,{...this.getFetchOptions({method:"GET"})});if(!t.ok){let s="";try{s=await t.text()}catch{s=`HTTP ${t.status}`}let r,a;try{const l=JSON.parse(s);r=l.detail||l.message||s}catch{r=s||`HTTP ${t.status}`}switch(t.status){case 401:a="API key is invalid or expired";break;case 403:a="Access denied: API key does not have required permissions";break;case 404:a="API key not found";break;case 503:a="API key management is not available in inference-only mode";break;default:a=`Failed to validate API key: ${r}`;break}throw new Error(a)}const i=await t.json();if(!i.exists){const s="API key does not exist";throw new Error(s)}if(!i.active){const s="API key is inactive";throw new Error(s)}return i}catch(t){let i;throw t instanceof Error&&t.message?t.message.includes("API key")||t.message.includes("Access denied")||t.message.includes("invalid")||t.message.includes("expired")||t.message.includes("inactive")||t.message.includes("not found")||t.message.includes("Could not connect")?i=t.message:i=`API key validation failed: ${t.message}`:this.hasFailedToFetch(t)?i=I:i="API key validation failed. Please check your API key and try again.",console.warn(`[ApiClient] ${i}`),new Error(i)}}async getAdapterInfo(){this.getRequiredApiKey("API key is required to get adapter information");try{const e=await this.fetchWithNetworkErrorHandling(`${this.apiUrl}/admin/adapters/info`,{...this.getFetchOptions({method:"GET"})});if(!e.ok){let t="";try{t=await e.text()}catch{t=`HTTP ${e.status}`}let i,s;try{const r=JSON.parse(t);i=r.detail||r.message||t}catch{i=t||`HTTP ${e.status}`}switch(e.status){case 401:s="API key is invalid, disabled, or has no associated adapter";break;case 404:s="Adapter configuration not found";break;case 503:s="Service is not available";break;default:s=`Failed to get adapter info: ${i}`;break}throw new Error(s)}return await e.json()}catch(e){let t;throw e instanceof Error&&e.message?e.message.includes("API key")||e.message.includes("Adapter")||e.message.includes("invalid")||e.message.includes("disabled")||e.message.includes("not found")||e.message.includes("Could not connect")?t=e.message:t=`Failed to get adapter info: ${e.message}`:this.hasFailedToFetch(e)?t=I:t="Failed to get adapter information. Please try again.",console.warn(`[ApiClient] ${t}`),new Error(t)}}async getAutocompleteSuggestions(e,t=5){if(e.length<3)return{suggestions:[],query:e};const i=this.middlewareMode&&!!this.adapterName;if(!i&&!this.apiKey)return{suggestions:[],query:e};try{const s=new URLSearchParams;s.set("q",e),s.set("limit",String(t));let r,a;if(i){if(!this.middlewareBaseUrl&&typeof window>"u")throw new Error("middlewareBaseUrl must be set when using middleware outside the browser environment.");r=`${this.middlewareBaseUrl?this.middlewareBaseUrl:""}/api/v1/autocomplete?${s.toString()}`;const d={"X-Adapter-Name":this.adapterName,"X-Request-ID":Date.now().toString(36)+Math.random().toString(36).substring(2)};this.sessionId&&(d["X-Session-ID"]=this.sessionId),a={method:"GET",headers:d}}else{const d=new URL(`${this.apiUrl}/v1/autocomplete`);d.searchParams.set("q",e),d.searchParams.set("limit",String(t)),r=d.toString(),a={...this.getFetchOptions({method:"GET"})}}const l=await fetch(r,a);return l.ok?await l.json():(console.warn("[ApiClient] Autocomplete request failed:",l.status),{suggestions:[],query:e})}catch(s){return console.warn("[ApiClient] Autocomplete error:",s.message),{suggestions:[],query:e}}}getFetchOptions(e={}){const t={};if(typeof window>"u"){const s=this.apiUrl.startsWith("https:")?F:q;s&&(t.agent=s)}else t.headers={Connection:"keep-alive"};const i={"X-Request-ID":Date.now().toString(36)+Math.random().toString(36).substring(2)};if(t.headers&&Object.assign(i,t.headers),e.headers){const s=e.headers;for(const[r,a]of Object.entries(s))(r.toLowerCase()!=="x-api-key"||!this.apiKey)&&(i[r]=a)}return this.apiKey&&(i["X-API-Key"]=this.apiKey),this.sessionId&&(i["X-Session-ID"]=this.sessionId),{...e,...t,headers:i}}createChatRequest(e,t=!0,i,s,r,a,l,d,y,w,f){const h={messages:[{role:"user",content:e}],stream:t};return i&&i.length>0&&(h.file_ids=i),s&&(h.thread_id=s),r&&(h.audio_input=r),a&&(h.audio_format=a),l&&(h.language=l),d!==void 0&&(h.return_audio=d),y&&(h.tts_voice=y),w&&(h.source_language=w),f&&(h.target_language=f),h}async*streamChat(e,t=!0,i,s,r,a,l,d,y,w,f,h){var $,U,O;try{const g=new AbortController,K=setTimeout(()=>g.abort(),j);h&&h.addEventListener("abort",()=>g.abort());const A=await fetch(`${this.apiUrl}/v1/chat`,{...this.getFetchOptions({method:"POST",headers:{"Content-Type":"application/json",Accept:t?"text/event-stream":"application/json"},body:JSON.stringify(this.createChatRequest(e,t,i,s,r,a,l,d,y,w,f))}),signal:g.signal});if(clearTimeout(K),!A.ok){const p=await A.text();throw new Error(`Network response was not ok: ${A.status} ${p}`)}if(!t){const p=await A.json();p.response&&(yield{text:p.response,done:!0,audio:p.audio,audioFormat:p.audio_format});return}const T=($=A.body)==null?void 0:$.getReader();if(!T)throw new Error("No reader available");const N=new TextDecoder;let c="",P=!1;try{for(;;){const{done:p,value:x}=await T.read();if(p)break;const R=N.decode(x,{stream:!0});c+=R;let E=0,b;for(;(b=c.indexOf(`
|
|
2
|
+
`,E))!==-1;){const v=c.slice(E,b).trim();if(E=b+1,v&&v.startsWith("data: ")){const u=v.slice(6).trim();if(!u||u==="[DONE]"){yield{text:"",done:!0};return}try{const o=JSON.parse(u);if(o.error){const C=`Server error: ${((U=o.error)==null?void 0:U.message)||o.error||"Unknown server error"}`;throw console.warn(`[ApiClient] ${C}`),new Error(C)}if(o.request_id&&!o.response&&!o.done){yield{text:"",done:!1,request_id:o.request_id};continue}if(o.done===!0){P=!0,yield{text:"",done:!0,audio:o.audio,audioFormat:o.audio_format||o.audioFormat,threading:o.threading};return}const _=o.response||"";o.audio_chunk!==void 0&&(yield{text:"",done:!1,audio_chunk:o.audio_chunk,audioFormat:o.audioFormat||o.audio_format||"opus",chunk_index:o.chunk_index??0}),(_||o.audio)&&(P=!0,yield{text:_,done:o.done||!1,audio:o.audio,audioFormat:o.audio_format||o.audioFormat,threading:o.threading})}catch(o){if((O=o==null?void 0:o.message)!=null&&O.startsWith("Server error:"))throw o;console.warn("[ApiClient] Unable to parse server response. This may be a temporary issue."),console.warn("[ApiClient] Parse error details:",o==null?void 0:o.message),console.warn("[ApiClient] JSON text length:",u==null?void 0:u.length),console.warn("[ApiClient] JSON text preview (first 200 chars):",u==null?void 0:u.substring(0,200)),console.warn("[ApiClient] JSON text preview (last 200 chars):",u==null?void 0:u.substring(u.length-200))}}else v&&(P=!0,yield{text:v,done:!1})}c=c.slice(E),c.length>L&&(console.warn("[ApiClient] Buffer too large, truncating..."),c=c.slice(-X))}P&&(yield{text:"",done:!0})}finally{T.releaseLock()}}catch(g){throw g.name==="AbortError"?h!=null&&h.aborted?new Error("Stream cancelled by user"):new Error("Connection timed out. Please check if the server is running."):this.hasFailedToFetch(g)?new Error(I):g}}async stopChat(e,t){try{const i=await fetch(`${this.apiUrl}/v1/chat/stop`,{...this.getFetchOptions({method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({session_id:e,request_id:t})})});return i.ok?(await i.json()).status==="cancelled":(console.warn("[ApiClient] Failed to stop stream:",i.status),!1)}catch(i){return console.error("[ApiClient] Error stopping stream:",i),!1}}async getConversationHistory(e,t){const i=e||this.sessionId;if(!i)throw new Error("No session ID provided and no current session available");const s={};this.apiKey&&(s["X-API-Key"]=this.apiKey);const r=new URL(`${this.apiUrl}/admin/chat-history/${i}`);typeof t=="number"&&Number.isFinite(t)&&t>0&&r.searchParams.set("limit",String(Math.floor(t)));const a=await this.requestJsonOrThrow(r.toString(),{method:"GET",headers:s},"Failed to fetch conversation history"),l=Array.isArray(a==null?void 0:a.messages)?a.messages:[],d=typeof(a==null?void 0:a.count)=="number"?a.count:l.length;return{session_id:(a==null?void 0:a.session_id)||i,messages:l,count:d}}async clearConversationHistory(e){const t=e||this.sessionId;if(!t)throw new Error("No session ID provided and no current session available");const i=this.getRequiredApiKey("API key is required for clearing conversation history"),s={"Content-Type":"application/json","X-Session-ID":t,"X-API-Key":i};return await this.requestJsonOrThrow(`${this.apiUrl}/admin/chat-history/${t}`,{method:"DELETE",headers:s},"Failed to clear conversation history")}async deleteConversationWithFiles(e,t){const i=e||this.sessionId;if(!i)throw new Error("No session ID provided and no current session available");const s=this.getRequiredApiKey("API key is required for deleting conversation"),r={"Content-Type":"application/json","X-Session-ID":i,"X-API-Key":s},a=t&&t.length>0?`?file_ids=${t.join(",")}`:"",l=`${this.apiUrl}/admin/conversations/${i}${a}`;return await this.requestJsonOrThrow(l,{method:"DELETE",headers:r},"Failed to delete conversation")}async createThread(e,t){const i={"Content-Type":"application/json","X-API-Key":this.getRequiredApiKey("API key is required for creating threads")};return await this.requestJsonOrThrow(`${this.apiUrl}/api/threads`,{method:"POST",headers:i,body:JSON.stringify({message_id:e,session_id:t})},"Failed to create thread")}async getThreadInfo(e){const t={"X-API-Key":this.getRequiredApiKey("API key is required for getting thread info")};return await this.requestJsonOrThrow(`${this.apiUrl}/api/threads/${e}`,{method:"GET",headers:t},"Failed to get thread info")}async deleteThread(e){const t={"X-API-Key":this.getRequiredApiKey("API key is required for deleting threads")};return await this.requestJsonOrThrow(`${this.apiUrl}/api/threads/${e}`,{method:"DELETE",headers:t},"Failed to delete thread")}async uploadFile(e){this.getRequiredApiKey("API key is required for file upload");const t=new FormData;return t.append("file",e),await this.requestJsonOrThrow(`${this.apiUrl}/api/files/upload`,{method:"POST",body:t},"Failed to upload file")}async listFiles(){return this.getRequiredApiKey("API key is required for listing files"),await this.requestJsonOrThrow(`${this.apiUrl}/api/files`,{method:"GET"},"Failed to list files")}async getFileInfo(e){return this.getRequiredApiKey("API key is required for getting file info"),await this.requestJsonOrThrow(`${this.apiUrl}/api/files/${e}`,{method:"GET"},"Failed to get file info")}async queryFile(e,t,i=10){return this.getRequiredApiKey("API key is required for querying files"),await this.requestJsonOrThrow(`${this.apiUrl}/api/files/${e}/query`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({query:t,max_results:i})},"Failed to query file")}async deleteFile(e){this.getRequiredApiKey("API key is required for deleting files");const t=`${this.apiUrl}/api/files/${e}`,i=this.getFetchOptions({method:"DELETE"});try{const s=await fetch(t,i);if(!s.ok){const r=await s.text();let a;try{const l=JSON.parse(r);a=l.detail||l.message||`Failed to delete file (HTTP ${s.status})`}catch{a=`Failed to delete file (HTTP ${s.status})`}throw console.warn(`[ApiClient] ${a}`),new Error(a)}return await s.json()}catch(s){let r;throw this.hasFailedToFetch(s)?r=I:s.message&&!s.message.includes("Failed to delete file")?r=s.message:r="Failed to delete file. Please try again.",console.warn(`[ApiClient] ${r}`),new Error(r)}}}let k=null;const G=(n,e=null,t=null)=>{k=new B({apiUrl:n,apiKey:e,sessionId:t})};async function*M(n,e=!0,t,i,s,r,a,l,d,y,w,f){if(!k)throw new Error("API not configured. Please call configureApi() with your server URL before using any API functions.");yield*k.streamChat(n,e,t,i,s,r,a,l,d,y,w,f)}async function W(n,e){if(!k)throw new Error("API not configured. Please call configureApi() with your server URL before using any API functions.");return k.stopChat(n,e)}export{B as ApiClient,G as configureApi,W as stopChat,M as streamChat};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{_ as S}from"./index-BTk6gbYa.js";var D=Object.defineProperty,J=(n,e,t)=>e in n?D(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t,m=(n,e,t)=>J(n,typeof e!="symbol"?e+"":e,t);let q=null,F=null;typeof window>"u"&&Promise.all([S(()=>import("./__vite-browser-external-BIHI7g3E.js"),[]).catch(()=>null),S(()=>import("./__vite-browser-external-BIHI7g3E.js"),[]).catch(()=>null)]).then(([n,e])=>{var t,i;(t=n==null?void 0:n.default)!=null&&t.Agent?q=new n.default.Agent({keepAlive:!0}):n!=null&&n.Agent&&(q=new n.Agent({keepAlive:!0})),(i=e==null?void 0:e.default)!=null&&i.Agent?F=new e.default.Agent({keepAlive:!0}):e!=null&&e.Agent&&(F=new e.Agent({keepAlive:!0}))}).catch(n=>{console.warn("Failed to initialize HTTP agents:",n.message)});const I="Could not connect to the server. Please check if the server is running.",j=6e4,L=1e6,X=5e5;class B{constructor(e){if(m(this,"apiUrl"),m(this,"apiKey"),m(this,"adapterName"),m(this,"middlewareBaseUrl"),m(this,"middlewareMode"),m(this,"sessionId"),!e.apiUrl||typeof e.apiUrl!="string")throw new Error("API URL must be a valid string");if(e.apiKey!==void 0&&e.apiKey!==null&&typeof e.apiKey!="string")throw new Error("API key must be a valid string or null");if(e.sessionId!==void 0&&e.sessionId!==null&&typeof e.sessionId!="string")throw new Error("Session ID must be a valid string or null");if(e.adapterName!==void 0&&e.adapterName!==null&&typeof e.adapterName!="string")throw new Error("Adapter name must be a valid string or null");if(e.middlewareBaseUrl!==void 0&&e.middlewareBaseUrl!==null&&typeof e.middlewareBaseUrl!="string")throw new Error("Middleware base URL must be a valid string or null");this.apiUrl=e.apiUrl,this.apiKey=e.apiKey??null,this.sessionId=e.sessionId??null;const t=typeof e.adapterName=="string"?e.adapterName.trim():"";this.adapterName=t&&t.length>0?t:null;const i=typeof e.middlewareBaseUrl=="string"?e.middlewareBaseUrl.trim():"";this.middlewareBaseUrl=i.endsWith("/")?i.slice(0,-1):i;const s=e.useMiddleware??(!this.apiKey&&!!this.adapterName);this.middlewareMode=!!(this.adapterName&&s)}setSessionId(e){if(e!==null&&typeof e!="string")throw new Error("Session ID must be a valid string or null");this.sessionId=e}getSessionId(){return this.sessionId}hasFailedToFetch(e){var t;return(e==null?void 0:e.name)==="TypeError"&&((t=e==null?void 0:e.message)==null?void 0:t.includes("Failed to fetch"))}rethrowNetworkError(e){if(this.hasFailedToFetch(e))throw new Error(I)}async fetchWithNetworkErrorHandling(e,t){try{return await fetch(e,t)}catch(i){throw this.rethrowNetworkError(i),i}}async requestJsonOrThrow(e,t,i){try{const s=await fetch(e,{...this.getFetchOptions(t)});if(!s.ok){const r=await s.text();throw new Error(`${i}: ${s.status} ${r}`)}return await s.json()}catch(s){throw this.rethrowNetworkError(s),s}}getRequiredApiKey(e){if(!this.apiKey)throw new Error(e);return this.apiKey}async validateApiKey(){const e=this.getRequiredApiKey("API key is required for validation");try{const t=await this.fetchWithNetworkErrorHandling(`${this.apiUrl}/admin/api-keys/${e}/status`,{...this.getFetchOptions({method:"GET"})});if(!t.ok){let s="";try{s=await t.text()}catch{s=`HTTP ${t.status}`}let r,a;try{const l=JSON.parse(s);r=l.detail||l.message||s}catch{r=s||`HTTP ${t.status}`}switch(t.status){case 401:a="API key is invalid or expired";break;case 403:a="Access denied: API key does not have required permissions";break;case 404:a="API key not found";break;case 503:a="API key management is not available in inference-only mode";break;default:a=`Failed to validate API key: ${r}`;break}throw new Error(a)}const i=await t.json();if(!i.exists){const s="API key does not exist";throw new Error(s)}if(!i.active){const s="API key is inactive";throw new Error(s)}return i}catch(t){let i;throw t instanceof Error&&t.message?t.message.includes("API key")||t.message.includes("Access denied")||t.message.includes("invalid")||t.message.includes("expired")||t.message.includes("inactive")||t.message.includes("not found")||t.message.includes("Could not connect")?i=t.message:i=`API key validation failed: ${t.message}`:this.hasFailedToFetch(t)?i=I:i="API key validation failed. Please check your API key and try again.",console.warn(`[ApiClient] ${i}`),new Error(i)}}async getAdapterInfo(){this.getRequiredApiKey("API key is required to get adapter information");try{const e=await this.fetchWithNetworkErrorHandling(`${this.apiUrl}/admin/adapters/info`,{...this.getFetchOptions({method:"GET"})});if(!e.ok){let t="";try{t=await e.text()}catch{t=`HTTP ${e.status}`}let i,s;try{const r=JSON.parse(t);i=r.detail||r.message||t}catch{i=t||`HTTP ${e.status}`}switch(e.status){case 401:s="API key is invalid, disabled, or has no associated adapter";break;case 404:s="Adapter configuration not found";break;case 503:s="Service is not available";break;default:s=`Failed to get adapter info: ${i}`;break}throw new Error(s)}return await e.json()}catch(e){let t;throw e instanceof Error&&e.message?e.message.includes("API key")||e.message.includes("Adapter")||e.message.includes("invalid")||e.message.includes("disabled")||e.message.includes("not found")||e.message.includes("Could not connect")?t=e.message:t=`Failed to get adapter info: ${e.message}`:this.hasFailedToFetch(e)?t=I:t="Failed to get adapter information. Please try again.",console.warn(`[ApiClient] ${t}`),new Error(t)}}async getAutocompleteSuggestions(e,t=5){if(e.length<3)return{suggestions:[],query:e};const i=this.middlewareMode&&!!this.adapterName;if(!i&&!this.apiKey)return{suggestions:[],query:e};try{const s=new URLSearchParams;s.set("q",e),s.set("limit",String(t));let r,a;if(i){if(!this.middlewareBaseUrl&&typeof window>"u")throw new Error("middlewareBaseUrl must be set when using middleware outside the browser environment.");r=`${this.middlewareBaseUrl?this.middlewareBaseUrl:""}/api/v1/autocomplete?${s.toString()}`;const d={"X-Adapter-Name":this.adapterName,"X-Request-ID":Date.now().toString(36)+Math.random().toString(36).substring(2)};this.sessionId&&(d["X-Session-ID"]=this.sessionId),a={method:"GET",headers:d}}else{const d=new URL(`${this.apiUrl}/v1/autocomplete`);d.searchParams.set("q",e),d.searchParams.set("limit",String(t)),r=d.toString(),a={...this.getFetchOptions({method:"GET"})}}const l=await fetch(r,a);return l.ok?await l.json():(console.warn("[ApiClient] Autocomplete request failed:",l.status),{suggestions:[],query:e})}catch(s){return console.warn("[ApiClient] Autocomplete error:",s.message),{suggestions:[],query:e}}}getFetchOptions(e={}){const t={};if(typeof window>"u"){const s=this.apiUrl.startsWith("https:")?F:q;s&&(t.agent=s)}else t.headers={Connection:"keep-alive"};const i={"X-Request-ID":Date.now().toString(36)+Math.random().toString(36).substring(2)};if(t.headers&&Object.assign(i,t.headers),e.headers){const s=e.headers;for(const[r,a]of Object.entries(s))(r.toLowerCase()!=="x-api-key"||!this.apiKey)&&(i[r]=a)}return this.apiKey&&(i["X-API-Key"]=this.apiKey),this.sessionId&&(i["X-Session-ID"]=this.sessionId),{...e,...t,headers:i}}createChatRequest(e,t=!0,i,s,r,a,l,d,y,w,f){const h={messages:[{role:"user",content:e}],stream:t};return i&&i.length>0&&(h.file_ids=i),s&&(h.thread_id=s),r&&(h.audio_input=r),a&&(h.audio_format=a),l&&(h.language=l),d!==void 0&&(h.return_audio=d),y&&(h.tts_voice=y),w&&(h.source_language=w),f&&(h.target_language=f),h}async*streamChat(e,t=!0,i,s,r,a,l,d,y,w,f,h){var $,U,O;try{const g=new AbortController,K=setTimeout(()=>g.abort(),j);h&&h.addEventListener("abort",()=>g.abort());const A=await fetch(`${this.apiUrl}/v1/chat`,{...this.getFetchOptions({method:"POST",headers:{"Content-Type":"application/json",Accept:t?"text/event-stream":"application/json"},body:JSON.stringify(this.createChatRequest(e,t,i,s,r,a,l,d,y,w,f))}),signal:g.signal});if(clearTimeout(K),!A.ok){const p=await A.text();throw new Error(`Network response was not ok: ${A.status} ${p}`)}if(!t){const p=await A.json();p.response&&(yield{text:p.response,done:!0,audio:p.audio,audioFormat:p.audio_format});return}const T=($=A.body)==null?void 0:$.getReader();if(!T)throw new Error("No reader available");const N=new TextDecoder;let c="",P=!1;try{for(;;){const{done:p,value:x}=await T.read();if(p)break;const R=N.decode(x,{stream:!0});c+=R;let E=0,b;for(;(b=c.indexOf(`
|
|
2
|
+
`,E))!==-1;){const v=c.slice(E,b).trim();if(E=b+1,v&&v.startsWith("data: ")){const u=v.slice(6).trim();if(!u||u==="[DONE]"){yield{text:"",done:!0};return}try{const o=JSON.parse(u);if(o.error){const C=`Server error: ${((U=o.error)==null?void 0:U.message)||o.error||"Unknown server error"}`;throw console.warn(`[ApiClient] ${C}`),new Error(C)}if(o.request_id&&!o.response&&!o.done){yield{text:"",done:!1,request_id:o.request_id};continue}if(o.done===!0){P=!0,yield{text:"",done:!0,audio:o.audio,audioFormat:o.audio_format||o.audioFormat,threading:o.threading};return}const _=o.response||"";o.audio_chunk!==void 0&&(yield{text:"",done:!1,audio_chunk:o.audio_chunk,audioFormat:o.audioFormat||o.audio_format||"opus",chunk_index:o.chunk_index??0}),(_||o.audio)&&(P=!0,yield{text:_,done:o.done||!1,audio:o.audio,audioFormat:o.audio_format||o.audioFormat,threading:o.threading})}catch(o){if((O=o==null?void 0:o.message)!=null&&O.startsWith("Server error:"))throw o;console.warn("[ApiClient] Unable to parse server response. This may be a temporary issue."),console.warn("[ApiClient] Parse error details:",o==null?void 0:o.message),console.warn("[ApiClient] JSON text length:",u==null?void 0:u.length),console.warn("[ApiClient] JSON text preview (first 200 chars):",u==null?void 0:u.substring(0,200)),console.warn("[ApiClient] JSON text preview (last 200 chars):",u==null?void 0:u.substring(u.length-200))}}else v&&(P=!0,yield{text:v,done:!1})}c=c.slice(E),c.length>L&&(console.warn("[ApiClient] Buffer too large, truncating..."),c=c.slice(-X))}P&&(yield{text:"",done:!0})}finally{T.releaseLock()}}catch(g){throw g.name==="AbortError"?h!=null&&h.aborted?new Error("Stream cancelled by user"):new Error("Connection timed out. Please check if the server is running."):this.hasFailedToFetch(g)?new Error(I):g}}async stopChat(e,t){try{const i=await fetch(`${this.apiUrl}/v1/chat/stop`,{...this.getFetchOptions({method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({session_id:e,request_id:t})})});return i.ok?(await i.json()).status==="cancelled":(console.warn("[ApiClient] Failed to stop stream:",i.status),!1)}catch(i){return console.error("[ApiClient] Error stopping stream:",i),!1}}async getConversationHistory(e,t){const i=e||this.sessionId;if(!i)throw new Error("No session ID provided and no current session available");const s={};this.apiKey&&(s["X-API-Key"]=this.apiKey);const r=new URL(`${this.apiUrl}/admin/chat-history/${i}`);typeof t=="number"&&Number.isFinite(t)&&t>0&&r.searchParams.set("limit",String(Math.floor(t)));const a=await this.requestJsonOrThrow(r.toString(),{method:"GET",headers:s},"Failed to fetch conversation history"),l=Array.isArray(a==null?void 0:a.messages)?a.messages:[],d=typeof(a==null?void 0:a.count)=="number"?a.count:l.length;return{session_id:(a==null?void 0:a.session_id)||i,messages:l,count:d}}async clearConversationHistory(e){const t=e||this.sessionId;if(!t)throw new Error("No session ID provided and no current session available");const i=this.getRequiredApiKey("API key is required for clearing conversation history"),s={"Content-Type":"application/json","X-Session-ID":t,"X-API-Key":i};return await this.requestJsonOrThrow(`${this.apiUrl}/admin/chat-history/${t}`,{method:"DELETE",headers:s},"Failed to clear conversation history")}async deleteConversationWithFiles(e,t){const i=e||this.sessionId;if(!i)throw new Error("No session ID provided and no current session available");const s=this.getRequiredApiKey("API key is required for deleting conversation"),r={"Content-Type":"application/json","X-Session-ID":i,"X-API-Key":s},a=t&&t.length>0?`?file_ids=${t.join(",")}`:"",l=`${this.apiUrl}/admin/conversations/${i}${a}`;return await this.requestJsonOrThrow(l,{method:"DELETE",headers:r},"Failed to delete conversation")}async createThread(e,t){const i={"Content-Type":"application/json","X-API-Key":this.getRequiredApiKey("API key is required for creating threads")};return await this.requestJsonOrThrow(`${this.apiUrl}/api/threads`,{method:"POST",headers:i,body:JSON.stringify({message_id:e,session_id:t})},"Failed to create thread")}async getThreadInfo(e){const t={"X-API-Key":this.getRequiredApiKey("API key is required for getting thread info")};return await this.requestJsonOrThrow(`${this.apiUrl}/api/threads/${e}`,{method:"GET",headers:t},"Failed to get thread info")}async deleteThread(e){const t={"X-API-Key":this.getRequiredApiKey("API key is required for deleting threads")};return await this.requestJsonOrThrow(`${this.apiUrl}/api/threads/${e}`,{method:"DELETE",headers:t},"Failed to delete thread")}async uploadFile(e){this.getRequiredApiKey("API key is required for file upload");const t=new FormData;return t.append("file",e),await this.requestJsonOrThrow(`${this.apiUrl}/api/files/upload`,{method:"POST",body:t},"Failed to upload file")}async listFiles(){return this.getRequiredApiKey("API key is required for listing files"),await this.requestJsonOrThrow(`${this.apiUrl}/api/files`,{method:"GET"},"Failed to list files")}async getFileInfo(e){return this.getRequiredApiKey("API key is required for getting file info"),await this.requestJsonOrThrow(`${this.apiUrl}/api/files/${e}`,{method:"GET"},"Failed to get file info")}async queryFile(e,t,i=10){return this.getRequiredApiKey("API key is required for querying files"),await this.requestJsonOrThrow(`${this.apiUrl}/api/files/${e}/query`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({query:t,max_results:i})},"Failed to query file")}async deleteFile(e){this.getRequiredApiKey("API key is required for deleting files");const t=`${this.apiUrl}/api/files/${e}`,i=this.getFetchOptions({method:"DELETE"});try{const s=await fetch(t,i);if(!s.ok){const r=await s.text();let a;try{const l=JSON.parse(r);a=l.detail||l.message||`Failed to delete file (HTTP ${s.status})`}catch{a=`Failed to delete file (HTTP ${s.status})`}throw console.warn(`[ApiClient] ${a}`),new Error(a)}return await s.json()}catch(s){let r;throw this.hasFailedToFetch(s)?r=I:s.message&&!s.message.includes("Failed to delete file")?r=s.message:r="Failed to delete file. Please try again.",console.warn(`[ApiClient] ${r}`),new Error(r)}}}let k=null;const G=(n,e=null,t=null)=>{k=new B({apiUrl:n,apiKey:e,sessionId:t})};async function*M(n,e=!0,t,i,s,r,a,l,d,y,w,f){if(!k)throw new Error("API not configured. Please call configureApi() with your server URL before using any API functions.");yield*k.streamChat(n,e,t,i,s,r,a,l,d,y,w,f)}async function W(n,e){if(!k)throw new Error("API not configured. Please call configureApi() with your server URL before using any API functions.");return k.stopChat(n,e)}export{B as ApiClient,G as configureApi,W as stopChat,M as streamChat};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{b0 as sn,b1 as an,b2 as l,as as on,b3 as j,b4 as F,b5 as E,b6 as un,b7 as cn,b8 as Y,b9 as e,aq as G,ba as en,bb as rn,bc as yn}from"./index-BTk6gbYa.js";function fn(i){return i.innerRadius}function ln(i){return i.outerRadius}function gn(i){return i.startAngle}function pn(i){return i.endAngle}function xn(i){return i&&i.padAngle}function mn(i,d,B,W,v,b,H,a){var C=B-i,r=W-d,n=H-v,p=a-b,u=p*C-n*r;if(!(u*u<l))return u=(n*(d-b)-p*(i-v))/u,[i+u*C,d+u*r]}function M(i,d,B,W,v,b,H){var a=i-B,C=d-W,r=(H?b:-b)/Y(a*a+C*C),n=r*C,p=-r*a,u=i+n,s=d+p,y=B+n,f=W+p,P=(u+y)/2,o=(s+f)/2,x=y-u,g=f-s,O=x*x+g*g,T=v-b,A=u*f-y*s,I=(g<0?-1:1)*Y(en(0,T*T*O-A*A)),L=(A*g-x*I)/O,D=(-A*x-g*I)/O,R=(A*g+x*I)/O,m=(-A*x+g*I)/O,h=L-P,t=D-o,c=R-P,_=m-o;return h*h+t*t>c*c+_*_&&(L=R,D=m),{cx:L,cy:D,x01:-n,y01:-p,x11:L*(v/T-1),y11:D*(v/T-1)}}function dn(){var i=fn,d=ln,B=G(0),W=null,v=gn,b=pn,H=xn,a=null,C=sn(r);function r(){var n,p,u=+i.apply(this,arguments),s=+d.apply(this,arguments),y=v.apply(this,arguments)-an,f=b.apply(this,arguments)-an,P=un(f-y),o=f>y;if(a||(a=n=C()),s<u&&(p=s,s=u,u=p),!(s>l))a.moveTo(0,0);else if(P>on-l)a.moveTo(s*j(y),s*F(y)),a.arc(0,0,s,y,f,!o),u>l&&(a.moveTo(u*j(f),u*F(f)),a.arc(0,0,u,f,y,o));else{var x=y,g=f,O=y,T=f,A=P,I=P,L=H.apply(this,arguments)/2,D=L>l&&(W?+W.apply(this,arguments):Y(u*u+s*s)),R=E(un(s-u)/2,+B.apply(this,arguments)),m=R,h=R,t,c;if(D>l){var _=rn(D/u*F(L)),k=rn(D/s*F(L));(A-=_*2)>l?(_*=o?1:-1,O+=_,T-=_):(A=0,O=T=(y+f)/2),(I-=k*2)>l?(k*=o?1:-1,x+=k,g-=k):(I=0,x=g=(y+f)/2)}var z=s*j(x),S=s*F(x),N=u*j(T),X=u*F(T);if(R>l){var Z=s*j(g),$=s*F(g),Q=u*j(O),U=u*F(O),q;if(P<cn)if(q=mn(z,S,Q,U,Z,$,N,X)){var V=z-q[0],w=S-q[1],J=Z-q[0],K=$-q[1],nn=1/F(yn((V*J+w*K)/(Y(V*V+w*w)*Y(J*J+K*K)))/2),tn=Y(q[0]*q[0]+q[1]*q[1]);m=E(R,(u-tn)/(nn-1)),h=E(R,(s-tn)/(nn+1))}else m=h=0}I>l?h>l?(t=M(Q,U,z,S,s,h,o),c=M(Z,$,N,X,s,h,o),a.moveTo(t.cx+t.x01,t.cy+t.y01),h<R?a.arc(t.cx,t.cy,h,e(t.y01,t.x01),e(c.y01,c.x01),!o):(a.arc(t.cx,t.cy,h,e(t.y01,t.x01),e(t.y11,t.x11),!o),a.arc(0,0,s,e(t.cy+t.y11,t.cx+t.x11),e(c.cy+c.y11,c.cx+c.x11),!o),a.arc(c.cx,c.cy,h,e(c.y11,c.x11),e(c.y01,c.x01),!o))):(a.moveTo(z,S),a.arc(0,0,s,x,g,!o)):a.moveTo(z,S),!(u>l)||!(A>l)?a.lineTo(N,X):m>l?(t=M(N,X,Z,$,u,-m,o),c=M(z,S,Q,U,u,-m,o),a.lineTo(t.cx+t.x01,t.cy+t.y01),m<R?a.arc(t.cx,t.cy,m,e(t.y01,t.x01),e(c.y01,c.x01),!o):(a.arc(t.cx,t.cy,m,e(t.y01,t.x01),e(t.y11,t.x11),!o),a.arc(0,0,u,e(t.cy+t.y11,t.cx+t.x11),e(c.cy+c.y11,c.cx+c.x11),o),a.arc(c.cx,c.cy,m,e(c.y11,c.x11),e(c.y01,c.x01),!o))):a.arc(0,0,u,T,O,o)}if(a.closePath(),n)return a=null,n+""||null}return r.centroid=function(){var n=(+i.apply(this,arguments)+ +d.apply(this,arguments))/2,p=(+v.apply(this,arguments)+ +b.apply(this,arguments))/2-cn/2;return[j(p)*n,F(p)*n]},r.innerRadius=function(n){return arguments.length?(i=typeof n=="function"?n:G(+n),r):i},r.outerRadius=function(n){return arguments.length?(d=typeof n=="function"?n:G(+n),r):d},r.cornerRadius=function(n){return arguments.length?(B=typeof n=="function"?n:G(+n),r):B},r.padRadius=function(n){return arguments.length?(W=n==null?null:typeof n=="function"?n:G(+n),r):W},r.startAngle=function(n){return arguments.length?(v=typeof n=="function"?n:G(+n),r):v},r.endAngle=function(n){return arguments.length?(b=typeof n=="function"?n:G(+n),r):b},r.padAngle=function(n){return arguments.length?(H=typeof n=="function"?n:G(+n),r):H},r.context=function(n){return arguments.length?(a=n??null,r):a},r}export{dn as h};
|