@adaline/gateway 0.5.0 → 0.7.0

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.js CHANGED
@@ -2,38 +2,31 @@
2
2
 
3
3
  var zod = require('zod');
4
4
  var types = require('@adaline/types');
5
- var Ge = require('crypto-js/sha256.js');
6
- var B = require('axios');
5
+ var proxyAgent = require('proxy-agent');
6
+ var V = require('axios');
7
+ var xe = require('crypto-js/sha256.js');
8
+ var lruCache = require('lru-cache');
7
9
 
8
10
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
9
11
 
10
- var Ge__default = /*#__PURE__*/_interopDefault(Ge);
11
- var B__default = /*#__PURE__*/_interopDefault(B);
12
+ var V__default = /*#__PURE__*/_interopDefault(V);
13
+ var xe__default = /*#__PURE__*/_interopDefault(xe);
12
14
 
13
- var fe=Object.defineProperty,he=Object.defineProperties;var be=Object.getOwnPropertyDescriptors;var U=Object.getOwnPropertySymbols;var ge=Object.prototype.hasOwnProperty,Te=Object.prototype.propertyIsEnumerable;var F=(a,t)=>(t=Symbol[a])?t:Symbol.for("Symbol."+a);var $=(a,t,e)=>t in a?fe(a,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):a[t]=e,k=(a,t)=>{for(var e in t||(t={}))ge.call(t,e)&&$(a,e,t[e]);if(U)for(var e of U(t))Te.call(t,e)&&$(a,e,t[e]);return a},G=(a,t)=>he(a,be(t));var u=(a,t,e)=>new Promise((o,n)=>{var s=i=>{try{p(e.next(i));}catch(m){n(m);}},r=i=>{try{p(e.throw(i));}catch(m){n(m);}},p=i=>i.done?o(i.value):Promise.resolve(i.value).then(s,r);p((e=e.apply(a,t)).next());}),f=function(a,t){this[0]=a,this[1]=t;},S=(a,t,e)=>{var o=(r,p,i,m)=>{try{var l=e[r](p),b=(p=l.value)instanceof f,H=l.done;Promise.resolve(b?p[0]:p).then(y=>b?o(r==="return"?r:"next",p[1]?{done:y.done,value:y.value}:y,i,m):i({value:y,done:H})).catch(y=>o("throw",y,i,m));}catch(y){m(y);}},n=r=>s[r]=p=>new Promise((i,m)=>o(r,p,i,m)),s={};return e=e.apply(a,t),s[F("asyncIterator")]=()=>s,n("next"),n("throw"),n("return"),s};var q=(a,t,e)=>(t=a[F("asyncIterator")])?t.call(a):(a=a[F("iterator")](),t={},e=(o,n)=>(n=a[o])&&(t[o]=s=>new Promise((r,p,i)=>(s=n.call(a,s),i=s.done,Promise.resolve(s.value).then(m=>r({value:m,done:i}),p)))),e("next"),e("return"),t);var d=class a extends Error{constructor(t,e=500,o){super(t),this.name="GatewayError",this.status=e,this.data=o,Error.captureStackTrace&&Error.captureStackTrace(this,a);}};var W=zod.z.object({dangerouslyAllowBrowser:zod.z.boolean().optional(),httpClient:zod.z.custom().optional(),callbacks:zod.z.array(zod.z.custom()).nonempty().optional()}),we=zod.z.object({queuePriority:zod.z.number().int().positive().optional(),metadataForCallbacks:zod.z.any().optional()}),D=zod.z.object({model:zod.z.custom(),config:types.Config(),messages:zod.z.array(types.Message()),tools:zod.z.array(types.Tool()).optional(),options:we.optional()}),ke=zod.z.object({queuePriority:zod.z.number().int().positive().optional(),metadataForCallbacks:zod.z.any().optional()}),X=zod.z.object({model:zod.z.custom(),config:types.Config(),messages:zod.z.array(types.Message()),tools:zod.z.array(types.Tool()).optional(),options:ke.optional()}),Ee=zod.z.object({queuePriority:zod.z.number().int().positive().optional(),metadataForCallbacks:zod.z.any().optional()}),z=zod.z.object({model:zod.z.custom(),config:types.Config(),embeddingRequests:types.EmbeddingRequests(),options:Ee.optional()});var Z=a=>a.status===429;var Q=a=>Ge__default.default(JSON.stringify(a)).toString(),E=a=>a instanceof d?a:a instanceof Error?new d(a.message):new d(a),x=()=>typeof window!="undefined"&&typeof window.document!="undefined"&&typeof navigator!="undefined";var qe={error:"color: red",warn:"color: yellow",info:"color: green"},ve=(a,t,...e)=>{if(x())x()&&console.log(`%c[${a.toUpperCase()}] [${t}]`,qe[a],...e);else switch(a){case"error":console.error(...e);break;case"warn":console.warn(...e);break;default:console.log(...e);}},He=(a,t,...e)=>{var o;x()||((o=process==null?void 0:process.env)==null?void 0:o.DEBUG)==="true"&&ve(a,t,...e);},g=(a,t,...e)=>u(void 0,null,function*(){let o=[];a.forEach(n=>{let s=n[t];if(typeof s=="function")try{let r=s(...e);r instanceof Promise&&o.push(r);}catch(r){He("error",`SAFELY_INVOKE_CALLBACKS:${String(t)}:`,r);}}),yield Promise.allSettled(o);}),V=a=>new Promise(t=>setTimeout(t,a)),_=(a,t,e,o)=>{let n=0,s=a*o;for(let r=0;r<a;r++)n+=t*Math.pow(e,r);return n+s},ee=a=>a===408||a===409||a>=500;var oe=zod.z.object({model:zod.z.custom(),config:types.Config(),messages:zod.z.array(types.Message()),tools:zod.z.array(types.Tool()).optional(),callbacks:zod.z.array(zod.z.custom()).nonempty().optional(),metadataForCallbacks:zod.z.any().optional()}),Ue=zod.z.object({request:zod.z.object({config:types.Config(),messages:zod.z.array(types.Message()),tools:zod.z.array(types.Tool()).optional()}),response:zod.z.array(types.Message()),latencyInMs:zod.z.number().int().positive(),metadataForCallbacks:zod.z.any().optional(),provider:zod.z.object({request:zod.z.any(),response:zod.z.any()})});var v={};function Se(a){let t=JSON.stringify(a);return new Blob([t]).size}function xe(a){let t=Object.entries(a).sort((o,n)=>o[1].time-n[1].time).slice(Math.floor(Object.keys(a).length/2)),e={};for(let[o,n]of t)e[o]=n;return e}function se(a,t){return u(this,null,function*(){let e=oe.parse(a),o=a.callbacks||[],n={config:e.config,messages:e.messages,tools:e.tools},s=Q(n);if(v[s])return g(o,"onChatCached",a.metadataForCallbacks,v[s].data),v[s].data;Se(v)>200*1024*1024&&(v=xe(v));try{g(o,"onChatStart",a.metadataForCallbacks);let r={url:e.model.getCompleteChatUrl(e.config,e.messages,e.tools),headers:e.model.getCompleteChatHeaders(e.config,e.messages,e.tools),data:e.model.getCompleteChatData(e.config,e.messages,e.tools)},p=Date.now(),i=yield t.post(r.url,r.data,r.headers),m=Date.now()-p,l={request:n,response:e.model.transformCompleteChatResponse(i.data),latencyInMs:m,metadataForCallbacks:a.metadataForCallbacks,provider:{request:r,response:i}};g(o,"onChatComplete",a.metadataForCallbacks,l);let b=Q(n);return v[b]={data:l,time:Date.now()},l}catch(r){let p;throw r instanceof d?p=r:p=E(r),g(o,"onChatError",a.metadataForCallbacks,p),p}})}var ie=zod.z.object({model:zod.z.custom(),config:types.Config(),embeddingRequests:types.EmbeddingRequests(),callbacks:zod.z.array(zod.z.custom()).nonempty().optional(),metadataForCallbacks:zod.z.any().optional()}),st=zod.z.object({request:zod.z.object({config:types.Config(),embeddingRequests:types.EmbeddingRequests()}),response:types.Embeddings,latencyInMs:zod.z.number().int().positive(),metadataForCallbacks:zod.z.any().optional(),provider:zod.z.object({request:zod.z.any(),response:zod.z.any()})});function le(a,t){return u(this,null,function*(){let e=ie.parse(a),o=a.callbacks||[],n={config:e.config,embeddingRequests:e.embeddingRequests};try{g(o,"onGetEmbeddingsStart",a.metadataForCallbacks);let s={url:e.model.getGetEmbeddingsUrl(e.config,e.embeddingRequests),headers:e.model.getGetEmbeddingsHeaders(e.config,e.embeddingRequests),data:e.model.getGetEmbeddingsData(e.config,e.embeddingRequests)},r=Date.now(),p=yield t.post(s.url,s.data,s.headers),i=Date.now()-r,m={request:n,response:e.model.transformGetEmbeddingsResponse(p.data),latencyInMs:i,metadataForCallbacks:a.metadataForCallbacks,provider:{request:s,response:p}};return g(o,"onGetEmbeddingsComplete",a.metadataForCallbacks,m),m}catch(s){let r;throw s instanceof d?r=s:r=E(s),g(o,"onGetEmbeddingsError",a.metadataForCallbacks,r),r}})}var ce=zod.z.object({model:zod.z.custom(),config:types.Config(),messages:zod.z.array(types.Message()),tools:zod.z.array(types.Tool()).optional(),callbacks:zod.z.array(zod.z.custom()).nonempty().optional(),metadataForCallbacks:zod.z.any().optional()}),ft=zod.z.object({request:zod.z.object({config:types.Config(),messages:zod.z.array(types.Message()),tools:zod.z.array(types.Tool()).optional()}),response:zod.z.array(types.PartialMessage()),metadataForCallbacks:zod.z.any().optional(),provider:zod.z.object({request:zod.z.any(),response:zod.z.any()})});function ue(a,t){return S(this,null,function*(){let e=ce.parse(a),o=a.callbacks||[],n={config:e.config,messages:e.messages,tools:e.tools};try{g(o,"onStreamStart",a.metadataForCallbacks);let y={url:e.model.getStreamChatUrl(e.config,e.messages,e.tools),headers:e.model.getStreamChatHeaders(e.config,e.messages,e.tools),data:e.model.getStreamChatData(e.config,e.messages,e.tools)},w="",O=!0;try{for(var m=q(t.stream(y.url,"post",y.data,y.headers)),l,b,H;l=!(b=yield new f(m.next())).done;l=!1){let I=b.value;try{for(var s=q(e.model.transformStreamChatResponseChunk(I,w)),r,p,i;r=!(p=yield new f(s.next())).done;r=!1){let A=p.value;if(A.partialMessages.length>0){let K={request:n,response:A.partialMessages,metadataForCallbacks:a.metadataForCallbacks,provider:{request:y,response:I}};g(o,O?"onStreamFirstResponse":"onStreamNewResponse",a.metadataForCallbacks,K),O&&(O=!1),yield K;}else w=A.buffer;}}catch(p){i=[p];}finally{try{r&&(p=s.return)&&(yield new f(p.call(s)));}finally{if(i)throw i[0]}}}}catch(b){H=[b];}finally{try{l&&(b=m.return)&&(yield new f(b.call(m)));}finally{if(H)throw H[0]}}g(o,"onStreamEnd",a.metadataForCallbacks);}catch(y){let w;throw y instanceof d?w=y:w=E(y),g(o,"onStreamError",a.metadataForCallbacks,w),w}})}var R=class a extends Error{constructor(t,e=500,o){super(t),this.name="IsomorphicHttpClientError",this.status=e,this.data=o,Error.captureStackTrace&&Error.captureStackTrace(this,a);}},ye=a=>{let t={};return a&&typeof a=="object"&&Object.entries(a).forEach(([e,o])=>{Array.isArray(o)?t[e]=o.join(", "):typeof o=="string"?t[e]=o:t[e]="";}),t},Ce=a=>{var p,i;let t="An unexpected error occurred",o={},n=(a==null?void 0:a.message)||t,s=((p=a==null?void 0:a.response)==null?void 0:p.status)||500,r=((i=a==null?void 0:a.response)==null?void 0:i.data)||o;return new R(n,s,r)},M=class{constructor(t){this.isNodeEnvironment=()=>typeof process!="undefined"&&process.versions!=null&&process.versions.node!=null;let{axiosInstance:e,timeoutInMilliseconds:o}=t;this.client=e||B__default.default.create();let n=zod.z.number().int().positive().optional();this.defaultTimeout=n.parse(o),this.client.defaults.timeout=this.defaultTimeout;}makeRequest(r,p,i){return u(this,arguments,function*(t,e,o,n={},s){try{let m=G(k(k({},t==="get"||t==="delete"?{params:o}:{data:o}),n),{timeout:s||this.defaultTimeout});if(t==="get"||t==="delete"){let l=yield this.client[t](e,m);return {data:l.data,headers:ye(l.headers),status:{code:l.status,text:l.statusText}}}else {let l=yield this.client[t](e,m.data,G(k({},m),{params:m.params}));return {data:l.data,headers:ye(l.headers),status:{code:l.status,text:l.statusText}}}}catch(m){throw B__default.default.isAxiosError(m)?Ce(m):new R(m instanceof Error?m.message:"An unexpected error occurred.",500)}})}stream(t,e,o,n,s){return S(this,null,function*(){try{if(this.isNodeEnvironment()){let l=yield new f(this.client.request({method:e,url:t,headers:n,data:o,responseType:"stream",signal:s==null?void 0:s.abortSignal}));try{for(var r=q(l.data),p,i,m;p=!(i=yield new f(r.next())).done;p=!1){let b=i.value;yield b.toString();}}catch(i){m=[i];}finally{try{p&&(i=r.return)&&(yield new f(i.call(r)));}finally{if(m)throw m[0]}}}else {let l={method:e,headers:new Headers(k({},n)),body:e!=="get"?JSON.stringify(o):void 0,signal:s==null?void 0:s.abortSignal},b=yield new f(fetch(t,l));if(!b.ok){let H=yield new f(b.json());throw new R(`Request failed with status ${b.status}`,b.status,H)}if(b.body){let H=b.body.getReader();for(;;){let{done:y,value:w}=yield new f(H.read());if(y){yield new TextDecoder().decode(w,{stream:!0});break}yield new TextDecoder().decode(w,{stream:!0});}}else throw new R("Cannot stream the body of the response.",500,b)}}catch(l){throw l instanceof R?l:(l==null?void 0:l.name)==="AbortError"?new R("AbortError",408):(l==null?void 0:l.name)==="CanceledError"?new R("AbortError",408):B__default.default.isAxiosError(l)?Ce(l):new R(l instanceof Error?l.message:"An unexpected error occurred.",500)}})}get(t,e,o){return u(this,null,function*(){return this.makeRequest("get",t,e||{},{headers:o})})}post(t,e,o){return u(this,null,function*(){return this.makeRequest("post",t,e||{},{headers:o})})}put(t,e,o){return u(this,null,function*(){return this.makeRequest("put",t,e||{},{headers:o})})}delete(t,e,o){return u(this,null,function*(){return this.makeRequest("delete",t,e||{},{headers:o})})}patch(t,e,o){return u(this,null,function*(){return this.makeRequest("patch",t,e||{},{headers:o})})}};M.IsomorphicHttpClientError=R;var P=class{constructor(t){this.queue=[];this.isProcessing=!1;this.maxRetries=2;this.tokensPerMinute=25e5;this.timeout=6e4*55;this.backOffInitialDelay=5e3;this.backOffMultiplier=1.1;this.shouldRetry=ee;this.maxRetries=t.maxRetries||this.maxRetries,this.timeout=t.timeout||this.timeout,this.tokensPerMinute=t.tokensPerMinute||this.tokensPerMinute,this.backOffInitialDelay=t.backOffInitialDelay||this.backOffInitialDelay,this.backOffMultiplier=t.backOffMultiplier||this.backOffMultiplier,this.rateLimitRetryTimeout=t.rateLimitRetryTimeout||_(this.maxRetries,this.backOffInitialDelay,this.backOffMultiplier,1e4),this.shouldRetry=t.shouldRetry||this.shouldRetry;}enqueue(t){this.queue.push(t),this.processQueue();}calculateBackoff(t){return this.backOffInitialDelay*Math.pow(this.backOffMultiplier,t)}processQueue(){return u(this,null,function*(){if(this.isProcessing)return;this.isProcessing=!0;let t=this.timeout,e=this.rateLimitRetryTimeout;for(;this.queue.length>0;){let o=[],n=0;for(this.queue.sort((s,r)=>(s.queuePriority||0)-(r.queuePriority||0));this.queue.length>0&&n+this.queue[0].inputTokens<=this.tokensPerMinute;){let s=this.queue.shift();if(!s)break;n+=s.inputTokens,o.push(G(k({},s),{attemptTime:Date.now()}));}yield Promise.all(o.map(s=>u(this,null,function*(){let r=Date.now();if(r-s.queueTime>t){s.reject(new d("Main timeout exceeded.",408,s.request));return}return this.execute(s).catch(p=>u(this,null,function*(){console.log(`
14
-
15
- `),console.log("Error",p),console.log(`
16
-
17
- `);let i=E(p);Z(i)&&r-s.attemptTime<e?(yield V(this.calculateBackoff(s.tryCount)),this.queue.push(G(k({},s),{tryCount:s.tryCount,attemptTime:s.attemptTime}))):this.shouldRetry(i.status)&&s.tryCount<this.maxRetries?this.queue.push(G(k({},s),{tryCount:s.tryCount+1,attemptTime:r})):s.reject(i);}))}))),yield V(0);}this.isProcessing=!1;})}execute(t){return u(this,null,function*(){let e=t.execute({modelIndex:t.modelIndex,data:t.request,resolve:t.resolve,reject:t.reject});return e instanceof Promise?e:Promise.reject(new d("Unsupported task execution result type in Queue.",500,t.request))})}};var N=class{constructor(t){if(!t.dangerouslyAllowBrowser&&x())throw new d(`It looks like you're running in a browser-like environment.
15
+ var be=Object.defineProperty,Re=Object.defineProperties;var Te=Object.getOwnPropertyDescriptors;var N=Object.getOwnPropertySymbols;var we=Object.prototype.hasOwnProperty,ke=Object.prototype.propertyIsEnumerable;var D=(a,t)=>(t=Symbol[a])?t:Symbol.for("Symbol."+a);var W=(a,t,e)=>t in a?be(a,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):a[t]=e,x=(a,t)=>{for(var e in t||(t={}))we.call(t,e)&&W(a,e,t[e]);if(N)for(var e of N(t))ke.call(t,e)&&W(a,e,t[e]);return a},U=(a,t)=>Re(a,Te(t));var u=(a,t,e)=>new Promise((s,n)=>{var o=r=>{try{p(e.next(r));}catch(c){n(c);}},l=r=>{try{p(e.throw(r));}catch(c){n(c);}},p=r=>r.done?s(r.value):Promise.resolve(r.value).then(o,l);p((e=e.apply(a,t)).next());}),C=function(a,t){this[0]=a,this[1]=t;},q=(a,t,e)=>{var s=(l,p,r,c)=>{try{var i=e[l](p),m=(p=i.value)instanceof C,G=i.done;Promise.resolve(m?p[0]:p).then(y=>m?s(l==="return"?l:"next",p[1]?{done:y.done,value:y.value}:y,r,c):r({value:y,done:G})).catch(y=>s("throw",y,r,c));}catch(y){c(y);}},n=l=>o[l]=p=>new Promise((r,c)=>s(l,p,r,c)),o={};return e=e.apply(a,t),o[D("asyncIterator")]=()=>o,n("next"),n("throw"),n("return"),o};var k=(a,t,e)=>(t=a[D("asyncIterator")])?t.call(a):(a=a[D("iterator")](),t={},e=(s,n)=>(n=a[s])&&(t[s]=o=>new Promise((l,p,r)=>(o=n.call(a,o),r=o.done,Promise.resolve(o.value).then(c=>l({value:c,done:r}),p)))),e("next"),e("return"),t);var h=class a extends Error{constructor(t,e=500,s){super(t),this.name="GatewayError",this.status=e,this.data=s,Error.captureStackTrace&&Error.captureStackTrace(this,a);}};var Ee="HttpClientError",H=class a extends types.GatewayBaseError{constructor({info:t,cause:e}){super({info:t,cause:e},Ee),this.info=t,this.cause=e,Object.setPrototypeOf(this,new.target.prototype);}static isHttpClientError(t){return t instanceof a}},Ge="HttpRequestError",f=class a extends types.GatewayBaseError{constructor(t,e=500,s,n){super({info:t,cause:{status:e,headers:s,data:n}},Ge),this.info=t,this.cause={status:e,headers:s,data:n},Object.setPrototypeOf(this,new.target.prototype);}static isHttpRequestError(t){return t instanceof a}};var F=a=>{let t={};return a&&(typeof a=="object"||a instanceof Headers)&&Object.entries(a).forEach(([e,s])=>{Array.isArray(s)?t[e]=s.join(", "):typeof s=="string"?t[e]=s:t[e]="";}),t},X=a=>{var o,l,p;let t=(a==null?void 0:a.message)||"An unexpected error occurred",e=((o=a==null?void 0:a.response)==null?void 0:o.status)||500,s=F((l=a==null?void 0:a.response)==null?void 0:l.headers)||{},n=((p=a==null?void 0:a.response)==null?void 0:p.data)||{};return new f(t,e,s,n)},Q=class{constructor(t){this.isNodeEnvironment=()=>typeof process!="undefined"&&process.versions!=null&&process.versions.node!=null;let{axiosInstance:e,timeoutInMilliseconds:s}=t;this.client=e||V__default.default.create();let n=zod.z.number().int().positive().optional();if(this.defaultTimeout=n.parse(s),this.client.defaults.timeout=this.defaultTimeout,t.proxyUrl)if(t.proxyUrl.startsWith("http://"))process.env.HTTP_PROXY=t.proxyUrl,this.httpProxyAgent=new proxyAgent.ProxyAgent;else if(t.proxyUrl.startsWith("https://"))process.env.HTTPS_PROXY=t.proxyUrl,this.httpsProxyAgent=new proxyAgent.ProxyAgent({rejectUnauthorized:!1});else throw new H({info:"Invalid proxy URL, only http and https proxies are supported",cause:{proxyUrl:t.proxyUrl}})}makeRequest(l,p,r){return u(this,arguments,function*(t,e,s,n={},o){try{let c=U(x(x({},t==="get"||t==="delete"?{params:s}:{data:s}),n),{timeout:o||this.defaultTimeout});if(this.httpProxyAgent?c.httpsAgent=this.httpProxyAgent:this.httpsProxyAgent&&(c.httpsAgent=this.httpsProxyAgent),t==="get"||t==="delete"){let i=yield this.client[t](e,c);return {data:i.data,headers:F(i.headers),status:{code:i.status,text:i.statusText}}}else {let i=yield this.client[t](e,c.data,U(x({},c),{params:c.params}));return {data:i.data,headers:F(i.headers),status:{code:i.status,text:i.statusText}}}}catch(c){throw V__default.default.isAxiosError(c)?X(c):new H({info:"An unexpected error occurred",cause:c})}})}stream(t,e,s,n,o){return q(this,null,function*(){try{if(this.isNodeEnvironment()){let i=yield new C(this.client.request({method:e,url:t,headers:n,data:s,responseType:"stream",signal:o==null?void 0:o.abortSignal}));try{for(var l=k(i.data),p,r,c;p=!(r=yield new C(l.next())).done;p=!1){let m=r.value;yield m.toString();}}catch(r){c=[r];}finally{try{p&&(r=l.return)&&(yield new C(r.call(l)));}finally{if(c)throw c[0]}}}else {let i={method:e,headers:new Headers(x({},n)),body:e!=="get"?JSON.stringify(s):void 0,signal:o==null?void 0:o.abortSignal},m=yield new C(fetch(t,i));if(!m.ok){let G=yield new C(m.json());throw new f(`Request failed with status ${m.status}`,m.status,F(m.headers),G)}if(m.body){let G=m.body.getReader();for(;;){let{done:y,value:w}=yield new C(G.read());if(y){yield new TextDecoder().decode(w,{stream:!0});break}yield new TextDecoder().decode(w,{stream:!0});}}else throw new f("Cannot stream the body of the response.",500,{},m)}}catch(i){throw f.isHttpRequestError(i)?i:(i==null?void 0:i.name)==="AbortError"?new f("AbortError",408,{},{}):(i==null?void 0:i.name)==="CanceledError"?new f("AbortError",408,{},{}):V__default.default.isAxiosError(i)?X(i):new H({info:"An unexpected error occurred",cause:i})}})}get(t,e,s){return u(this,null,function*(){return this.makeRequest("get",t,e||{},{headers:s})})}post(t,e,s){return u(this,null,function*(){return this.makeRequest("post",t,e||{},{headers:s})})}put(t,e,s){return u(this,null,function*(){return this.makeRequest("put",t,e||{},{headers:s})})}delete(t,e,s){return u(this,null,function*(){return this.makeRequest("delete",t,e||{},{headers:s})})}patch(t,e,s){return u(this,null,function*(){return this.makeRequest("patch",t,e||{},{headers:s})})}};var ve="QueueTaskTimeoutError",j=class a extends types.GatewayBaseError{constructor({info:t,cause:e}){super({info:t,cause:e},ve),this.info=t,this.cause=e,Object.setPrototypeOf(this,new.target.prototype);}static isQueueTaskTimeoutError(t){return t instanceof a}};var Z=zod.z.object({maxConcurrentTasks:zod.z.number().int().positive(),retryCount:zod.z.number().int().positive(),timeout:zod.z.number().int().positive(),retry:zod.z.object({initialDelay:zod.z.number().int().positive(),exponentialFactor:zod.z.number().int().positive()})});var I=(a,t)=>xe__default.default(a+JSON.stringify(t)).toString(),v=a=>a instanceof h?a:a instanceof Error?new h(a.message):new h(a),S=()=>typeof window!="undefined"&&typeof window.document!="undefined"&&typeof navigator!="undefined";var Se={error:"color: red",warn:"color: yellow",info:"color: green"},Pe=(a,t,...e)=>{if(S())S()&&console.log(`%c[${a.toUpperCase()}] [${t}]`,Se[a],...e);else switch(a){case"error":console.error(...e);break;case"warn":console.warn(...e);break;default:console.log(...e);}},Me=(a,t,...e)=>{var s;S()||((s=process==null?void 0:process.env)==null?void 0:s.DEBUG)==="true"&&Pe(a,t,...e);},b=(a,t,...e)=>u(void 0,null,function*(){let s=[];a.forEach(n=>{let o=n[t];if(typeof o=="function")try{let l=o(...e);l instanceof Promise&&s.push(l);}catch(l){Me("error",`SAFELY_INVOKE_CALLBACKS:${String(t)}:`,l);}}),yield Promise.allSettled(s);}),_=a=>new Promise(t=>setTimeout(t,a));var P=class{constructor(t){this.activeTasks=0;this.queue=[];this.options=t;}enqueue(t){this.queue.push(t),this.processQueue();}withTimeout(t){return new Promise((e,s)=>{let n=setTimeout(()=>s(new j({info:"Queue task timeout",cause:new Error("Queue task timeout")})),this.options.timeout);t.execute(t.request).then(o=>{clearTimeout(n),e(o);}).catch(o=>{clearTimeout(n),s(o);});})}executeWithRetry(t,e){return u(this,null,function*(){try{return yield this.withTimeout(t)}catch(s){if(e===0)throw s;let n=!0,o=this.options.retry.initialDelay*Math.pow(this.options.retry.exponentialFactor,this.options.retryCount-e);if(f.isHttpRequestError(s)){if(s.cause.status===429){let l=M.safeParse(t.request);if(l.success){let p=l.data.model.getRetryDelay(s.cause.headers);n=p.shouldRetry,p.delayMs>0&&(o=p.delayMs);}}s.cause.status>=500&&s.cause.status<600;}if(n)return yield _(o),this.executeWithRetry(t,e-1);throw s}})}processQueue(){return u(this,null,function*(){if(this.activeTasks>=this.options.maxConcurrentTasks)return;let t=this.queue.shift();if(t){this.activeTasks+=1;try{let e=yield this.executeWithRetry(t,this.options.retryCount);t.resolve(e);}catch(e){t.reject(e);}finally{this.activeTasks-=1,this.processQueue();}}})}};var O=class{constructor(t=1e3){this.cache=new lruCache.LRUCache({max:t,allowStale:!1,updateAgeOnGet:!1});}get(t){return this.cache.get(t)}set(t,e){this.cache.set(t,e);}delete(t){this.cache.delete(t);}clear(){this.cache.clear();}};var ae=zod.z.object({queueOptions:Z.partial().optional(),dangerouslyAllowBrowser:zod.z.boolean().optional(),httpClient:zod.z.custom().optional(),completeChatCache:zod.z.custom().optional(),completeChatCallbacks:zod.z.array(zod.z.custom()).nonempty().optional(),getEmbeddingsCache:zod.z.custom().optional(),getEmbeddingsCallbacks:zod.z.array(zod.z.custom()).nonempty().optional(),streamChatCallbacks:zod.z.array(zod.z.custom()).nonempty().optional()}),Fe=zod.z.object({metadataForCallbacks:zod.z.any().optional()}),M=zod.z.object({model:zod.z.custom(),config:types.Config(),messages:zod.z.array(types.Message()),tools:zod.z.array(types.Tool()).optional(),options:Fe.optional()}),Qe=zod.z.object({metadataForCallbacks:zod.z.any().optional()}),se=zod.z.object({model:zod.z.custom(),config:types.Config(),messages:zod.z.array(types.Message()),tools:zod.z.array(types.Tool()).optional(),options:Qe.optional()}),je=zod.z.object({queuePriority:zod.z.number().int().positive().optional(),metadataForCallbacks:zod.z.any().optional()}),B=zod.z.object({model:zod.z.custom(),config:types.Config(),embeddingRequests:types.EmbeddingRequests(),options:je.optional()});var ie=zod.z.object({cache:zod.z.custom(),model:zod.z.custom(),config:types.Config(),messages:zod.z.array(types.Message()),tools:zod.z.array(types.Tool()).optional(),callbacks:zod.z.array(zod.z.custom()).nonempty().optional(),metadataForCallbacks:zod.z.any().optional()});zod.z.object({request:zod.z.object({config:types.Config(),messages:zod.z.array(types.Message()),tools:zod.z.array(types.Tool()).optional()}),response:types.ChatResponse,latencyInMs:zod.z.number().int().positive(),metadataForCallbacks:zod.z.any().optional(),provider:zod.z.object({request:zod.z.any(),response:zod.z.any()})});function pe(a,t){return u(this,null,function*(){let e=ie.parse(a),s=a.callbacks||[];try{b(s,"onChatStart",a.metadataForCallbacks);let n={config:e.config,messages:e.messages,tools:e.tools},o={url:yield e.model.getCompleteChatUrl(e.config,e.messages,e.tools),headers:yield e.model.getCompleteChatHeaders(e.config,e.messages,e.tools),data:yield e.model.getCompleteChatData(e.config,e.messages,e.tools)},l=I(`complete-chat:${o.url}:${e.model.modelSchema.name}`,n),p=a.cache.get(l);if(p)return b(s,"onChatCached",a.metadataForCallbacks,p),p;let r=Date.now(),c=yield t.post(o.url,o.data,o.headers),i=Date.now()-r,m={request:n,response:e.model.transformCompleteChatResponse(c.data),latencyInMs:i,metadataForCallbacks:a.metadataForCallbacks,provider:{request:o,response:c}};return a.cache.set(l,m),b(s,"onChatComplete",a.metadataForCallbacks,m),m}catch(n){let o;throw f.isHttpRequestError(n)||n instanceof h?o=n:o=v(n),b(s,"onChatError",a.metadataForCallbacks,o),o}})}var de=zod.z.object({cache:zod.z.custom(),model:zod.z.custom(),config:types.Config(),embeddingRequests:types.EmbeddingRequests(),callbacks:zod.z.array(zod.z.custom()).nonempty().optional(),metadataForCallbacks:zod.z.any().optional()});zod.z.object({request:zod.z.object({config:types.Config(),embeddingRequests:types.EmbeddingRequests()}),response:types.EmbeddingResponse,latencyInMs:zod.z.number().int().positive(),metadataForCallbacks:zod.z.any().optional(),provider:zod.z.object({request:zod.z.any(),response:zod.z.any()})});function me(a,t){return u(this,null,function*(){let e=de.parse(a),s=a.callbacks||[];try{b(s,"onGetEmbeddingsStart",a.metadataForCallbacks);let n={config:e.config,embeddingRequests:e.embeddingRequests},o={url:yield e.model.getGetEmbeddingsUrl(e.config,e.embeddingRequests),headers:yield e.model.getGetEmbeddingsHeaders(e.config,e.embeddingRequests),data:yield e.model.getGetEmbeddingsData(e.config,e.embeddingRequests)},l=I(`get-embeddings:${o.url}:${e.model.modelSchema.name}`,n),p=a.cache.get(l);if(p)return b(s,"onGetEmbeddingsCached",a.metadataForCallbacks,p),p;let r=Date.now(),c=yield t.post(o.url,o.data,o.headers),i=Date.now()-r,m={request:n,response:e.model.transformGetEmbeddingsResponse(c.data),latencyInMs:i,metadataForCallbacks:a.metadataForCallbacks,provider:{request:o,response:c}};return a.cache.set(l,m),b(s,"onGetEmbeddingsComplete",a.metadataForCallbacks,m),m}catch(n){let o;throw f.isHttpRequestError(n)||n instanceof h?o=n:o=v(n),b(s,"onGetEmbeddingsError",a.metadataForCallbacks,o),o}})}var he=zod.z.object({model:zod.z.custom(),config:types.Config(),messages:zod.z.array(types.Message()),tools:zod.z.array(types.Tool()).optional(),callbacks:zod.z.array(zod.z.custom()).nonempty().optional(),metadataForCallbacks:zod.z.any().optional()});zod.z.object({request:zod.z.object({config:types.Config(),messages:zod.z.array(types.Message()),tools:zod.z.array(types.Tool()).optional()}),response:types.PartialChatResponse,metadataForCallbacks:zod.z.any().optional(),provider:zod.z.object({request:zod.z.any(),response:zod.z.any()})});function ge(a,t){return q(this,null,function*(){let e=he.parse(a),s=a.callbacks||[],n={config:e.config,messages:e.messages,tools:e.tools};try{b(s,"onStreamStart",a.metadataForCallbacks);let y={url:yield new C(e.model.getStreamChatUrl(e.config,e.messages,e.tools)),headers:yield new C(e.model.getStreamChatHeaders(e.config,e.messages,e.tools)),data:yield new C(e.model.getStreamChatData(e.config,e.messages,e.tools))},w="",A=!0;try{for(var c=k(t.stream(y.url,"post",y.data,y.headers)),i,m,G;i=!(m=yield new C(c.next())).done;i=!1){let z=m.value;try{for(var o=k(e.model.transformStreamChatResponseChunk(z,w)),l,p,r;l=!(p=yield new C(o.next())).done;l=!1){let fe=p.value;let $={request:n,response:fe.partialResponse,metadataForCallbacks:a.metadataForCallbacks,provider:{request:y,response:z}};b(s,A?"onStreamFirstResponse":"onStreamNewResponse",a.metadataForCallbacks,$),A&&(A=!1),yield $;}}catch(p){r=[p];}finally{try{l&&(p=o.return)&&(yield new C(p.call(o)));}finally{if(r)throw r[0]}}}}catch(m){G=[m];}finally{try{i&&(m=c.return)&&(yield new C(m.call(c)));}finally{if(G)throw G[0]}}b(s,"onStreamEnd",a.metadataForCallbacks);}catch(y){let w;throw y instanceof h?w=y:w=v(y),b(s,"onStreamError",a.metadataForCallbacks,w),w}})}var K=class{constructor(t){var s,n,o,l;if(!t.dangerouslyAllowBrowser&&S())throw new h(`It looks like you're running in a browser-like environment.
18
16
 
19
17
  This is disabled by default, as it risks exposing your provider secrets to attackers.
20
18
  If you understand the risks and have appropriate mitigation in place,
21
19
  you can set the \`dangerouslyAllowBrowser\` option to \`true\`.
22
- `);this.options=W.parse(t),this.httpClient=t.httpClient||new M({timeoutInMilliseconds:6e4}),this.completeQueue=new P({}),this.embeddingQueue=new P({});}completeChat(t){return u(this,null,function*(){let e=D.parse(t);return new Promise((o,n)=>{var r;let s={tryCount:0,modelIndex:0,inputTokens:e.model.getTokenCount(e.messages),queueTime:Date.now(),attemptTime:0,request:t,queuePriority:(r=e.options)==null?void 0:r.queuePriority,resolve:o,execute:this.executeCompleteChatTask.bind(this),reject:n};this.completeQueue.enqueue(s);})})}executeCompleteChatTask(t){return u(this,null,function*(){var e,o;try{let n=D.parse(t.data),s=yield se({model:n.model,config:n.config,messages:n.messages,tools:n.tools,metadataForCallbacks:(e=n.options)==null?void 0:e.metadataForCallbacks},this.httpClient);t.resolve(s);}catch(n){throw n instanceof d?n:new d(n==null?void 0:n.message,500,(o=n==null?void 0:n.response)==null?void 0:o.data)}})}streamChat(t){return S(this,null,function*(){var e,p;try{let i=X.parse(t);try{for(var o=q(ue({model:i.model,config:i.config,messages:i.messages,tools:i.tools,metadataForCallbacks:(e=i.options)==null?void 0:e.metadataForCallbacks},this.httpClient)),n,s,r;n=!(s=yield new f(o.next())).done;n=!1){let m=s.value;yield m;}}catch(s){r=[s];}finally{try{n&&(s=o.return)&&(yield new f(s.call(o)));}finally{if(r)throw r[0]}}}catch(i){throw i instanceof d?i:new d(i==null?void 0:i.message,500,(p=i==null?void 0:i.response)==null?void 0:p.data)}})}getEmbeddings(t){return u(this,null,function*(){let e=z.parse(t);return new Promise((o,n)=>{var r;let s={tryCount:0,modelIndex:0,inputTokens:e.model.getTokenCount(e.embeddingRequests),queueTime:Date.now(),attemptTime:0,request:t,queuePriority:(r=e.options)==null?void 0:r.queuePriority,resolve:o,execute:this.executeGetEmbeddingsTask.bind(this),reject:n};this.embeddingQueue.enqueue(s);})})}executeGetEmbeddingsTask(t){return u(this,null,function*(){var e;try{let o=z.parse(t.data),n=yield le({model:o.model,config:o.config,embeddingRequests:o.embeddingRequests},this.httpClient);t.resolve(n);}catch(o){throw o instanceof d?o:new d(o==null?void 0:o.message,500,(e=o==null?void 0:o.response)==null?void 0:e.data)}})}};N.GatewayError=d;
23
-
24
- exports.CompleteChatHandlerRequest = oe;
25
- exports.CompleteChatHandlerResponse = Ue;
26
- exports.Gateway = N;
27
- exports.GatewayError = d;
28
- exports.GetEmbeddingsHandlerRequest = ie;
29
- exports.GetEmbeddingsHandlerResponse = st;
30
- exports.IsomorphicHttpClient = M;
31
- exports.IsomorphicHttpClientError = R;
20
+ `);this.options=ae.parse(t);let e={maxConcurrentTasks:((s=this.options.queueOptions)==null?void 0:s.maxConcurrentTasks)||4,retryCount:((n=this.options.queueOptions)==null?void 0:n.retryCount)||3,retry:((o=this.options.queueOptions)==null?void 0:o.retry)||{initialDelay:1e3,exponentialFactor:2},timeout:((l=this.options.queueOptions)==null?void 0:l.timeout)||9e4};this.queues={completeChat:new P(e),getEmbeddings:new P(e)},this.httpClient=t.httpClient||new Q({timeoutInMilliseconds:e.timeout*.9}),this.caches={completeChat:t.completeChatCache||new O,getEmbeddings:t.getEmbeddingsCache||new O};}completeChat(t){return u(this,null,function*(){let e=M.parse(t);return new Promise((s,n)=>{let o={request:e,cache:this.caches.completeChat,resolve:s,reject:n,execute:this.executeCompleteChat.bind(this)};this.queues.completeChat.enqueue(o);})})}executeCompleteChat(t){return u(this,null,function*(){var s;let e=M.parse(t);return pe({cache:this.caches.completeChat,model:e.model,config:e.config,messages:e.messages,tools:e.tools,callbacks:this.options.completeChatCallbacks,metadataForCallbacks:(s=e.options)==null?void 0:s.metadataForCallbacks},this.httpClient)})}streamChat(t){return q(this,null,function*(){var e,p;try{let r=se.parse(t);try{for(var s=k(ge({model:r.model,config:r.config,messages:r.messages,tools:r.tools,callbacks:this.options.streamChatCallbacks,metadataForCallbacks:(e=r.options)==null?void 0:e.metadataForCallbacks},this.httpClient)),n,o,l;n=!(o=yield new C(s.next())).done;n=!1){let c=o.value;yield c;}}catch(o){l=[o];}finally{try{n&&(o=s.return)&&(yield new C(o.call(s)));}finally{if(l)throw l[0]}}}catch(r){throw r instanceof h?r:new h(r==null?void 0:r.message,500,(p=r==null?void 0:r.response)==null?void 0:p.data)}})}getEmbeddings(t){return u(this,null,function*(){let e=B.parse(t);return new Promise((s,n)=>{let o={request:e,cache:this.caches.getEmbeddings,resolve:s,reject:n,execute:this.executeGetEmbeddingsTask.bind(this)};this.queues.getEmbeddings.enqueue(o);})})}executeGetEmbeddingsTask(t){return u(this,null,function*(){var s;let e=B.parse(t);return me({cache:this.caches.getEmbeddings,model:e.model,config:e.config,embeddingRequests:e.embeddingRequests,callbacks:this.options.getEmbeddingsCallbacks,metadataForCallbacks:(s=e.options)==null?void 0:s.metadataForCallbacks},this.httpClient)})}};K.GatewayError=h;
21
+
22
+ exports.Gateway = K;
23
+ exports.GatewayError = h;
24
+ exports.HttpClientError = H;
25
+ exports.HttpRequestError = f;
26
+ exports.IsomorphicHttpClient = Q;
27
+ exports.LRUCache = O;
28
+ exports.QueueOptions = Z;
29
+ exports.QueueTaskTimeoutError = j;
32
30
  exports.SimpleQueue = P;
33
- exports.StreamChatHandlerRequest = ce;
34
- exports.StreamChatHandlerResponse = ft;
35
- exports.handleCompleteChat = se;
36
- exports.handleGetEmbeddings = le;
37
- exports.handleStreamChat = ue;
38
31
  //# sourceMappingURL=index.js.map
39
32
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/errors/errors.ts","../src/gateway.types.ts","../src/utils/tokens.ts","../src/utils/utils.ts","../src/handlers/complete-chat/complete-chat.types.ts","../src/handlers/complete-chat/complete-chat.handler.ts","../src/handlers/get-embeddings/get-embeddings.types.ts","../src/handlers/get-embeddings/get-embeddings.handler.ts","../src/handlers/stream-chat/stream-chat.types.ts","../src/handlers/stream-chat/stream-chat.handler.ts","../src/plugins/http-client/isomorphic.http-client.ts","../src/plugins/queue/simple.queue.ts","../src/gateway.ts"],"names":["GatewayError","_GatewayError","message","status","data","GatewayOptions","z","GatewayCompleteChatRequestOptions","GatewayCompleteChatRequest","Config","Message","Tool","GatewayStreamChatRequestOptions","GatewayStreamChatRequest","GatewayGetEmbeddingsRequestOptions","GatewayGetEmbeddingsRequest","EmbeddingRequests","isRateLimited","error","generateHash","object","sha256","castToError","err","isRunningInBrowser","logColors","verbose","level","action","args","debug","_a","safelyInvokeCallbacks","callbacks","name","__async","promises","callback","func","result","delay","ms","resolve","calcRateLimitRetryTimeout","maxRetries","backOffInitialDelay","backOffMultiplier","executionTimePerAttempt","totalDelayTime","totalExecutionTime","i","defaultShouldRetry","CompleteChatHandlerRequest","CompleteChatHandlerResponse","cache","calculateCacheSize","cacheString","purgeOldCacheEntries","sortedEntries","a","b","newCache","key","value","handleCompleteChat","request","client","stable","hash","providerRequest","now","providerResponse","latencyInMs","response","safeError","GetEmbeddingsHandlerRequest","GetEmbeddingsHandlerResponse","Embeddings","handleGetEmbeddings","StreamChatHandlerRequest","StreamChatHandlerResponse","PartialMessage","handleStreamChat","__asyncGenerator","buffer","isFirstResponse","iter","__forAwait","more","temp","__await","chunk","transformed","streamResponse","IsomorphicHttpClientError","_IsomorphicHttpClientError","convertHeadersToRecord","headers","headerRecord","parseAxiosError","_b","defaultMessage","defaultData","IsomorphicHttpClient","config","axiosInstance","timeoutInMilliseconds","axios","Timeout","_0","_1","_2","method","url","dataOrParams","additionalConfig","__spreadProps","__spreadValues","resp","options","fetchConfig","text","reader","done","params","SimpleQueue","task","retryCount","mt","rt","batch","batchTokenCount","next","executionResult","Gateway","reject"],"mappings":"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","file":"index.js","sourcesContent":["class GatewayError extends Error {\n status: number;\n data: unknown;\n\n constructor(message: string, status: number = 500, data?: unknown) {\n super(message);\n this.name = \"GatewayError\";\n this.status = status;\n this.data = data;\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, GatewayError);\n }\n }\n}\n\nexport { GatewayError };\n","import { z } from \"zod\";\n\nimport { ChatModelV1, EmbeddingModelV1 } from \"@adaline/provider\";\nimport { Config, Message, Tool, EmbeddingRequests } from \"@adaline/types\";\n\nimport { CompleteChatCallbackType, StreamChatCallbackType } from \"./handlers\";\nimport { HttpClient } from \"./plugins\";\n\n// TODO: union of all callback types\ntype GatewayCallbackType<M = any> = CompleteChatCallbackType<M> | StreamChatCallbackType<M>;\n\nconst GatewayOptions = z.object({\n // timeout: z.number().int().positive().optional(), // TODO: move to queueOptions\n // tokensPerMinute: z.number().int().positive().optional(), // TODO: move to queueOptions\n dangerouslyAllowBrowser: z.boolean().optional(),\n httpClient: z.custom<HttpClient>().optional(),\n // queue: z.custom<Queue<any, any>>().optional(), // TODO: what's the use case for this?\n callbacks: z.array(z.custom<GatewayCallbackType>()).nonempty().optional(),\n});\ntype GatewayOptionsType = z.infer<typeof GatewayOptions>;\n\nconst GatewayCompleteChatRequestOptions = z.object({\n queuePriority: z.number().int().positive().optional(),\n // TODO: add callbacks, use these if provided else GatewayOptions.callbacks\n metadataForCallbacks: z.any().optional(),\n});\ntype GatewayCompleteChatRequestOptionsType = z.infer<typeof GatewayCompleteChatRequestOptions>;\n\n// TODO: add generic for config, messages, tools\nconst GatewayCompleteChatRequest = z.object({\n model: z.custom<ChatModelV1>(),\n config: Config(),\n messages: z.array(Message()),\n tools: z.array(Tool()).optional(),\n options: GatewayCompleteChatRequestOptions.optional(),\n});\ntype GatewayCompleteChatRequestType = z.infer<typeof GatewayCompleteChatRequest>;\n\nconst GatewayStreamChatRequestOptions = z.object({\n queuePriority: z.number().int().positive().optional(),\n // TODO: add callbacks, use these if provided else GatewayOptions.callbacks\n metadataForCallbacks: z.any().optional(),\n});\ntype GatewayStreamChatRequestOptionsType = z.infer<typeof GatewayStreamChatRequestOptions>;\n\n// TODO: add generic for config, messages, tools\n// TODO: add abort signal\nconst GatewayStreamChatRequest = z.object({\n model: z.custom<ChatModelV1>(),\n config: Config(),\n messages: z.array(Message()),\n tools: z.array(Tool()).optional(),\n options: GatewayStreamChatRequestOptions.optional(),\n});\ntype GatewayStreamChatRequestType = z.infer<typeof GatewayStreamChatRequest>;\n\nconst GatewayGetEmbeddingsRequestOptions = z.object({\n queuePriority: z.number().int().positive().optional(),\n // TODO: add callbacks, use these if provided else GatewayOptions.callbacks\n metadataForCallbacks: z.any().optional(),\n});\ntype GatewayGetEmbeddingsRequestOptionsType = z.infer<typeof GatewayGetEmbeddingsRequestOptions>;\n\nconst GatewayGetEmbeddingsRequest = z.object({\n model: z.custom<EmbeddingModelV1>(),\n config: Config(),\n embeddingRequests: EmbeddingRequests(),\n options: GatewayGetEmbeddingsRequestOptions.optional(),\n});\ntype GatewayGetEmbeddingsRequestType = z.infer<typeof GatewayGetEmbeddingsRequest>;\n\nexport {\n GatewayOptions,\n GatewayCompleteChatRequest,\n GatewayCompleteChatRequestOptions,\n GatewayStreamChatRequest,\n GatewayStreamChatRequestOptions,\n GatewayGetEmbeddingsRequest,\n GatewayGetEmbeddingsRequestOptions,\n type GatewayOptionsType,\n type GatewayCallbackType,\n type GatewayCompleteChatRequestType,\n type GatewayCompleteChatRequestOptionsType,\n type GatewayStreamChatRequestType,\n type GatewayStreamChatRequestOptionsType,\n type GatewayGetEmbeddingsRequestType,\n type GatewayGetEmbeddingsRequestOptionsType,\n};","import { GatewayError } from \"../errors/errors\";\n\n// const getTokens = (messages: MessageType[]): number => {\n// return messages.reduce((acc, message) => {\n// return acc + message.content.map((content) => (content.modality === \"text\" ? content.value : \"\")).join(\" \").length;\n// }, 0);\n// };\n\nconst isRateLimited = (error: GatewayError): boolean => {\n return error.status === 429;\n};\n\nexport { isRateLimited };\n","import sha256 from \"crypto-js/sha256.js\";\n\nimport { GatewayError } from \"../errors/errors\";\n\nconst generateHash = (object: object): string => {\n return sha256(JSON.stringify(object)).toString();\n};\n\nconst castToError = (err: any): GatewayError => {\n if (err instanceof GatewayError) return err;\n if (err instanceof Error) return new GatewayError(err.message as string);\n return new GatewayError(err);\n};\n\nconst isRunningInBrowser = () => {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n return typeof window !== \"undefined\" && typeof window.document !== \"undefined\" && typeof navigator !== \"undefined\";\n};\n\nconst logLevels = {\n error: 0,\n warn: 1,\n info: 2,\n};\n\nconst logColors = {\n error: \"color: red\",\n warn: \"color: yellow\",\n info: \"color: green\",\n};\n\nconst verbose = (level: keyof typeof logLevels, action: string, ...args: any[]) => {\n if (!isRunningInBrowser()) {\n // Node.js environment\n switch (level) {\n case \"error\":\n console.error(...args);\n break;\n case \"warn\":\n console.warn(...args);\n break;\n default:\n console.log(...args);\n }\n } else if (isRunningInBrowser()) {\n // Browser environment\n console.log(`%c[${level.toUpperCase()}] [${action}]`, logColors[level], ...args);\n }\n};\n\nconst debug = (level: keyof typeof logLevels, action: string, ...args: any[]) => {\n if (isRunningInBrowser()) return;\n // eslint-disable-next-line turbo/no-undeclared-env-vars\n if (process?.env?.DEBUG !== \"true\") return;\n verbose(level, action, ...args);\n};\n\ntype Prettify<T> = {\n [K in keyof T]: T[K];\n} & unknown;\n\ninterface BaseCallback {\n [key: string]: (...args: any[]) => void | Promise<void>;\n}\n\ntype ArgumentsType<T> = T extends (...args: infer A) => any ? A : never;\n\nconst safelyInvokeCallbacks = async <T extends BaseCallback, K extends keyof T>(\n callbacks: T[],\n name: keyof T,\n ...args: ArgumentsType<T[K]>\n): Promise<void> => {\n const promises: Promise<void>[] = [];\n\n callbacks.forEach((callback) => {\n const func = callback[name];\n if (typeof func === \"function\") {\n try {\n const result = func(...args);\n if (result instanceof Promise) {\n promises.push(result);\n }\n } catch (error) {\n debug(\"error\", `SAFELY_INVOKE_CALLBACKS:${String(name)}:`, error);\n }\n }\n });\n\n await Promise.allSettled(promises);\n};\n\nconst delay = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms));\n\nconst calcRateLimitRetryTimeout = (\n maxRetries: number,\n backOffInitialDelay: number,\n backOffMultiplier: number,\n executionTimePerAttempt: number\n): number => {\n let totalDelayTime = 0;\n const totalExecutionTime = maxRetries * executionTimePerAttempt;\n\n for (let i = 0; i < maxRetries; i++) {\n totalDelayTime += backOffInitialDelay * Math.pow(backOffMultiplier, i);\n }\n\n return totalDelayTime + totalExecutionTime;\n};\n\nconst defaultShouldRetry = (status: number) => {\n // Rate limit errors are handled separately.\n\n // Retry on request timeouts.\n if (status === 408) return true;\n // Retry on lock timeouts.\n if (status === 409) return true;\n // Retry internal errors.\n if (status >= 500) return true;\n\n return false;\n};\n\nexport {\n calcRateLimitRetryTimeout,\n castToError,\n debug,\n defaultShouldRetry,\n delay,\n generateHash,\n isRunningInBrowser,\n safelyInvokeCallbacks,\n type Prettify,\n};\n","import { z } from \"zod\";\n\nimport { ChatModelV1 } from \"@adaline/provider\";\nimport { Config, Message, Tool } from \"@adaline/types\";\n\nimport { GatewayError } from \"../../errors\";\n\nconst CompleteChatHandlerRequest = z.object({\n model: z.custom<ChatModelV1>(),\n config: Config(),\n messages: z.array(Message()),\n tools: z.array(Tool()).optional(),\n callbacks: z.array(z.custom<CompleteChatCallbackType>()).nonempty().optional(),\n metadataForCallbacks: z.any().optional(),\n});\ntype CompleteChatHandlerRequestType = z.infer<typeof CompleteChatHandlerRequest>;\n\nconst CompleteChatHandlerResponse = z.object({\n // TODO: why is this request object needed? caller can track their own request object\n request: z.object({\n config: Config(),\n messages: z.array(Message()),\n tools: z.array(Tool()).optional(),\n }),\n response: z.array(Message()),\n latencyInMs: z.number().int().positive(),\n metadataForCallbacks: z.any().optional(),\n // TODO: what is this and why is it needed?\n provider: z.object({\n request: z.any(),\n response: z.any(),\n }),\n});\ntype CompleteChatHandlerResponseType = z.infer<typeof CompleteChatHandlerResponse>;\n\ntype CompleteChatCallbackType<M = any> = {\n onChatStart?: (metadata?: M) => Promise<void> | void;\n onChatCached?: (metadata?: M, response?: CompleteChatHandlerResponseType) => Promise<void> | void;\n onChatComplete?: (metadata?: M, response?: CompleteChatHandlerResponseType) => Promise<void> | void;\n onChatError?: (metadata?: M, error?: GatewayError) => Promise<void> | void;\n};\n\nexport {\n CompleteChatHandlerRequest,\n CompleteChatHandlerResponse,\n type CompleteChatCallbackType,\n type CompleteChatHandlerRequestType,\n type CompleteChatHandlerResponseType,\n};\n","import { GatewayError } from \"../../errors/errors\";\nimport { HttpClient } from \"../../plugins\";\nimport { castToError, generateHash, safelyInvokeCallbacks } from \"../../utils\";\nimport {\n CompleteChatCallbackType,\n CompleteChatHandlerRequest,\n CompleteChatHandlerRequestType,\n CompleteChatHandlerResponseType,\n} from \"./complete-chat.types\";\n\ntype Cache = Record<\n string,\n {\n data: CompleteChatHandlerResponseType;\n time: number;\n }\n>;\n\nlet cache: Cache = {};\n\nfunction calculateCacheSize(cache: Cache) {\n const cacheString = JSON.stringify(cache);\n return new Blob([cacheString]).size; // Blob size in bytes\n}\n\nfunction purgeOldCacheEntries(cache: Cache) {\n // Convert cache object to an array to sort and slice\n const sortedEntries = Object.entries(cache)\n .sort((a, b) => a[1].time - b[1].time) // Sort by timestamp\n .slice(Math.floor(Object.keys(cache).length / 2)); // Remove the oldest 50%\n\n // Convert array back to object\n const newCache: Cache = {};\n for (const [key, value] of sortedEntries) {\n newCache[key] = value;\n }\n\n return newCache;\n}\n\nasync function handleCompleteChat(request: CompleteChatHandlerRequestType, client: HttpClient): Promise<CompleteChatHandlerResponseType> {\n const data = CompleteChatHandlerRequest.parse(request);\n const callbacks = request.callbacks || [];\n\n const stable = {\n config: data.config,\n messages: data.messages,\n tools: data.tools,\n };\n const hash = generateHash(stable);\n\n if (cache[hash]) {\n safelyInvokeCallbacks<CompleteChatCallbackType, keyof CompleteChatCallbackType>(\n callbacks,\n \"onChatCached\",\n request.metadataForCallbacks,\n cache[hash].data\n );\n return cache[hash].data;\n }\n\n if (calculateCacheSize(cache) > 200 * 1024 * 1024) {\n // 200 MB in bytes\n cache = purgeOldCacheEntries(cache);\n }\n\n try {\n safelyInvokeCallbacks<CompleteChatCallbackType, keyof CompleteChatCallbackType>(callbacks, \"onChatStart\", request.metadataForCallbacks);\n\n const providerRequest = {\n url: data.model.getCompleteChatUrl(data.config, data.messages, data.tools),\n headers: data.model.getCompleteChatHeaders(data.config, data.messages, data.tools),\n data: data.model.getCompleteChatData(data.config, data.messages, data.tools),\n };\n\n const now = Date.now();\n const providerResponse = await client.post(providerRequest.url, providerRequest.data, providerRequest.headers);\n const latencyInMs = Date.now() - now;\n\n const response: CompleteChatHandlerResponseType = {\n request: stable,\n response: data.model.transformCompleteChatResponse(providerResponse.data),\n latencyInMs,\n metadataForCallbacks: request.metadataForCallbacks,\n provider: {\n request: providerRequest,\n response: providerResponse,\n },\n };\n\n safelyInvokeCallbacks<CompleteChatCallbackType, keyof CompleteChatCallbackType>(\n callbacks,\n \"onChatComplete\",\n request.metadataForCallbacks,\n response\n );\n\n const hash = generateHash(stable);\n cache[hash] = {\n data: response,\n time: Date.now(),\n };\n return response;\n } catch (error) {\n let safeError: GatewayError;\n\n if (error instanceof GatewayError) {\n safeError = error;\n } else {\n safeError = castToError(error);\n }\n\n safelyInvokeCallbacks<CompleteChatCallbackType, keyof CompleteChatCallbackType>(\n callbacks,\n \"onChatError\",\n request.metadataForCallbacks,\n safeError\n );\n\n throw safeError;\n }\n}\n\nexport { handleCompleteChat };\n","import { z } from \"zod\";\n\nimport { EmbeddingModelV1 } from \"@adaline/provider\";\nimport { Config, EmbeddingRequests, Embeddings } from \"@adaline/types\";\n\nimport { GatewayError } from \"../../errors\";\n\nconst GetEmbeddingsHandlerRequest = z.object({\n model: z.custom<EmbeddingModelV1>(),\n config: Config(),\n embeddingRequests: EmbeddingRequests(),\n callbacks: z.array(z.custom<GetEmbeddingsCallbackType>()).nonempty().optional(),\n metadataForCallbacks: z.any().optional(),\n});\ntype GetEmbeddingsHandlerRequestType = z.infer<typeof GetEmbeddingsHandlerRequest>;\n\nconst GetEmbeddingsHandlerResponse = z.object({\n request: z.object({\n config: Config(),\n embeddingRequests: EmbeddingRequests(),\n }),\n response: Embeddings,\n latencyInMs: z.number().int().positive(),\n metadataForCallbacks: z.any().optional(),\n provider: z.object({\n request: z.any(),\n response: z.any(),\n }),\n});\ntype GetEmbeddingsHandlerResponseType = z.infer<typeof GetEmbeddingsHandlerResponse>;\n\ntype GetEmbeddingsCallbackType<M = any> = {\n onGetEmbeddingsStart?: (metadata?: M) => Promise<void> | void;\n onGetEmbeddingsCached?: (metadata?: M, response?: GetEmbeddingsHandlerResponseType) => Promise<void> | void;\n onGetEmbeddingsComplete?: (metadata?: M, response?: GetEmbeddingsHandlerResponseType) => Promise<void> | void;\n onGetEmbeddingsError?: (metadata?: M, error?: GatewayError) => Promise<void> | void;\n};\n\nexport {\n GetEmbeddingsHandlerRequest,\n GetEmbeddingsHandlerResponse,\n type GetEmbeddingsHandlerRequestType,\n type GetEmbeddingsHandlerResponseType,\n type GetEmbeddingsCallbackType,\n};\n","import { GatewayError } from \"../../errors/errors\";\nimport { HttpClient } from \"../../plugins\";\nimport { castToError, safelyInvokeCallbacks } from \"../../utils\";\nimport {\n GetEmbeddingsCallbackType,\n GetEmbeddingsHandlerRequest,\n GetEmbeddingsHandlerRequestType,\n GetEmbeddingsHandlerResponseType,\n} from \"./get-embeddings.types\";\n\nasync function handleGetEmbeddings(request: GetEmbeddingsHandlerRequestType, client: HttpClient): Promise<GetEmbeddingsHandlerResponseType> {\n const data = GetEmbeddingsHandlerRequest.parse(request);\n const callbacks = request.callbacks || [];\n\n const stable = {\n config: data.config,\n embeddingRequests: data.embeddingRequests,\n };\n\n try {\n safelyInvokeCallbacks<GetEmbeddingsCallbackType, keyof GetEmbeddingsCallbackType>(callbacks, \"onGetEmbeddingsStart\", request.metadataForCallbacks);\n\n const providerRequest = {\n url: data.model.getGetEmbeddingsUrl(data.config, data.embeddingRequests),\n headers: data.model.getGetEmbeddingsHeaders(data.config, data.embeddingRequests),\n data: data.model.getGetEmbeddingsData(data.config, data.embeddingRequests),\n };\n\n const now = Date.now();\n const providerResponse = await client.post(providerRequest.url, providerRequest.data, providerRequest.headers);\n const latencyInMs = Date.now() - now;\n\n const response: GetEmbeddingsHandlerResponseType = {\n request: stable,\n response: data.model.transformGetEmbeddingsResponse(providerResponse.data),\n latencyInMs,\n metadataForCallbacks: request.metadataForCallbacks,\n provider: {\n request: providerRequest,\n response: providerResponse,\n },\n };\n\n safelyInvokeCallbacks<GetEmbeddingsCallbackType, keyof GetEmbeddingsCallbackType>(\n callbacks,\n \"onGetEmbeddingsComplete\",\n request.metadataForCallbacks,\n response\n );\n\n return response;\n } catch (error) {\n let safeError: GatewayError;\n\n if (error instanceof GatewayError) {\n safeError = error;\n } else {\n safeError = castToError(error);\n }\n\n safelyInvokeCallbacks<GetEmbeddingsCallbackType, keyof GetEmbeddingsCallbackType>(\n callbacks,\n \"onGetEmbeddingsError\",\n request.metadataForCallbacks,\n safeError\n );\n\n throw safeError;\n }\n}\n\nexport { handleGetEmbeddings };\n","import { z } from \"zod\";\n\nimport { ChatModelV1 } from \"@adaline/provider\";\nimport { Config, Message, Tool, PartialMessage } from \"@adaline/types\";\n\nimport { GatewayError } from \"../../errors\";\n\n// TODO: abort signal\nconst StreamChatHandlerRequest = z.object({\n model: z.custom<ChatModelV1>(),\n config: Config(),\n messages: z.array(Message()),\n tools: z.array(Tool()).optional(),\n callbacks: z.array(z.custom<StreamChatCallbackType>()).nonempty().optional(),\n metadataForCallbacks: z.any().optional(),\n});\ntype StreamChatHandlerRequestType = z.infer<typeof StreamChatHandlerRequest>;\n\nconst StreamChatHandlerResponse = z.object({\n request: z.object({\n config: Config(),\n messages: z.array(Message()),\n tools: z.array(Tool()).optional(),\n }),\n response: z.array(PartialMessage()),\n metadataForCallbacks: z.any().optional(),\n // TODO: what is this and why is it needed?\n provider: z.object({\n request: z.any(),\n response: z.any(),\n }),\n});\ntype StreamChatHandlerResponseType = z.infer<typeof StreamChatHandlerResponse>;\n\ntype StreamChatCallbackType<M = any> = {\n onStreamStart?: (metadata?: M) => Promise<void> | void;\n onStreamFirstResponse?: (metadata?: M, response?: StreamChatHandlerResponseType, chunk?: unknown) => Promise<void> | void;\n onStreamNewResponse?: (metadata?: M, response?: StreamChatHandlerResponseType, chunk?: unknown) => Promise<void> | void;\n onStreamEnd?: (metadata?: M, response?: StreamChatHandlerResponseType) => Promise<void> | void;\n onStreamError?: (metadata?: M, error?: GatewayError) => Promise<void> | void;\n};\n\nexport { \n StreamChatHandlerRequest, \n StreamChatHandlerResponse, \n type StreamChatCallbackType, \n type StreamChatHandlerRequestType, \n type StreamChatHandlerResponseType \n};","import { GatewayError } from \"../../errors/errors\";\nimport { HttpClient } from \"../../plugins\";\nimport { castToError, safelyInvokeCallbacks } from \"../../utils\";\nimport {\n StreamChatCallbackType,\n StreamChatHandlerRequest,\n StreamChatHandlerRequestType,\n StreamChatHandlerResponseType,\n} from \"./stream-chat.types\";\n\nasync function* handleStreamChat<M>(\n request: StreamChatHandlerRequestType,\n client: HttpClient\n): AsyncGenerator<StreamChatHandlerResponseType, void, unknown> {\n const data = StreamChatHandlerRequest.parse(request);\n const callbacks = request.callbacks || [];\n\n const stable = {\n config: data.config,\n messages: data.messages,\n tools: data.tools,\n };\n\n try {\n safelyInvokeCallbacks<StreamChatCallbackType, keyof StreamChatCallbackType>(callbacks, \"onStreamStart\", request.metadataForCallbacks);\n\n const providerRequest = {\n url: data.model.getStreamChatUrl(data.config, data.messages, data.tools),\n headers: data.model.getStreamChatHeaders(data.config, data.messages, data.tools),\n data: data.model.getStreamChatData(data.config, data.messages, data.tools),\n };\n\n let buffer = \"\";\n let isFirstResponse = true;\n // TODO: fix headers type, how to handle 'undefined'\n for await (\n const chunk of client.stream(\n providerRequest.url, \n \"post\", \n providerRequest.data, \n providerRequest.headers as Record<string, string>\n )\n ) {\n for await (const transformed of data.model.transformStreamChatResponseChunk(chunk as string, buffer)) {\n if (transformed.partialMessages.length > 0) {\n const streamResponse = {\n request: stable,\n response: transformed.partialMessages,\n metadataForCallbacks: request.metadataForCallbacks,\n provider: {\n request: providerRequest,\n response: chunk,\n },\n };\n\n safelyInvokeCallbacks<StreamChatCallbackType<M>, keyof StreamChatCallbackType<M>>(\n callbacks,\n isFirstResponse ? \"onStreamFirstResponse\" : \"onStreamNewResponse\",\n request.metadataForCallbacks,\n streamResponse\n );\n\n if (isFirstResponse) {\n isFirstResponse = false;\n }\n\n yield streamResponse;\n } else {\n buffer = transformed.buffer;\n }\n }\n }\n\n safelyInvokeCallbacks<StreamChatCallbackType<M>, keyof StreamChatCallbackType<M>>(\n callbacks,\n \"onStreamEnd\",\n request.metadataForCallbacks\n );\n } catch (error) {\n let safeError: GatewayError;\n\n if (error instanceof GatewayError) {\n safeError = error;\n } else {\n safeError = castToError(error);\n }\n\n safelyInvokeCallbacks<StreamChatCallbackType<M>, keyof StreamChatCallbackType<M>>(\n callbacks,\n \"onStreamError\",\n request.metadataForCallbacks,\n safeError\n );\n\n throw safeError;\n }\n}\n\nexport { handleStreamChat };","import axios, { AxiosError, AxiosInstance, AxiosRequestConfig } from \"axios\";\nimport { z } from \"zod\";\n\nimport { HttpClient, HttpClientResponse } from \"./http-client.interface\";\n\ninterface HttpClientConfig {\n timeoutInMilliseconds?: number;\n axiosInstance?: AxiosInstance;\n}\n\nclass IsomorphicHttpClientError extends Error {\n status: number;\n data: unknown;\n\n constructor(message: string, status: number = 500, data?: unknown) {\n super(message);\n this.name = \"IsomorphicHttpClientError\";\n this.status = status;\n this.data = data;\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, IsomorphicHttpClientError);\n }\n }\n}\n\nconst convertHeadersToRecord = (headers: any): Record<string, string> => {\n const headerRecord: Record<string, string> = {};\n\n if (headers && typeof headers === \"object\") {\n Object.entries(headers).forEach(([key, value]) => {\n if (Array.isArray(value)) {\n headerRecord[key] = value.join(\", \");\n } else if (typeof value === \"string\") {\n headerRecord[key] = value;\n } else {\n headerRecord[key] = \"\";\n }\n });\n }\n\n return headerRecord;\n};\n\nconst parseAxiosError = (error: AxiosError): IsomorphicHttpClientError => {\n const defaultMessage = \"An unexpected error occurred\";\n const defaultStatus = 500;\n const defaultData = {};\n\n const message = error?.message || defaultMessage;\n const status = error?.response?.status || defaultStatus;\n const data = error?.response?.data || defaultData;\n\n return new IsomorphicHttpClientError(message, status, data);\n};\n\nclass IsomorphicHttpClient implements HttpClient {\n private defaultTimeout?: number;\n private client: AxiosInstance;\n\n constructor(config: HttpClientConfig) {\n const { axiosInstance, timeoutInMilliseconds } = config;\n this.client = axiosInstance || axios.create();\n\n const Timeout = z.number().int().positive().optional();\n this.defaultTimeout = Timeout.parse(timeoutInMilliseconds);\n\n this.client.defaults.timeout = this.defaultTimeout;\n }\n\n isNodeEnvironment = (): boolean => {\n return typeof process !== \"undefined\" && process.versions != null && process.versions.node != null;\n };\n\n private async makeRequest<T>(\n method: \"get\" | \"post\" | \"put\" | \"delete\" | \"patch\",\n url: string,\n dataOrParams: Record<string, unknown>,\n additionalConfig: AxiosRequestConfig = {},\n timeoutInMilliseconds?: number\n ): Promise<HttpClientResponse<T>> {\n try {\n const config: AxiosRequestConfig = {\n ...(method === \"get\" || method === \"delete\" ? { params: dataOrParams } : { data: dataOrParams }),\n ...additionalConfig,\n timeout: timeoutInMilliseconds || this.defaultTimeout,\n };\n if (method === \"get\" || method === \"delete\") {\n const resp = await this.client[method]<T>(url, config);\n return {\n data: resp.data,\n headers: convertHeadersToRecord(resp.headers),\n status: {\n code: resp.status,\n text: resp.statusText,\n },\n };\n } else {\n const resp = await this.client[method]<T>(url, config.data, {\n ...config,\n params: config.params,\n });\n return {\n data: resp.data,\n headers: convertHeadersToRecord(resp.headers),\n status: {\n code: resp.status,\n text: resp.statusText,\n },\n };\n }\n } catch (error) {\n if (axios.isAxiosError(error)) throw parseAxiosError(error);\n throw new IsomorphicHttpClientError(error instanceof Error ? error.message : \"An unexpected error occurred.\", 500);\n }\n }\n\n async *stream<T>(\n url: string,\n method: \"get\" | \"post\",\n data?: Record<string, unknown>,\n headers?: Record<string, string>, // TODO: remove 'undefined', fix in stream-chat.handler.ts\n options?: {\n abortSignal?: AbortSignal;\n }\n ): AsyncGenerator<T, void, unknown> {\n try {\n if (this.isNodeEnvironment()) {\n const response = await this.client.request({\n method,\n url,\n headers,\n data,\n responseType: \"stream\",\n signal: options?.abortSignal,\n });\n\n for await (const chunk of response.data) {\n const decodedChunk = chunk.toString();\n yield decodedChunk as unknown as T;\n }\n } else {\n const fetchConfig: RequestInit = {\n method,\n headers: new Headers({\n ...headers,\n }),\n body: method !== \"get\" ? JSON.stringify(data) : undefined,\n signal: options?.abortSignal,\n };\n const response = await fetch(url, fetchConfig);\n\n if (!response.ok) {\n const text: any = await response.json();\n throw new IsomorphicHttpClientError(`Request failed with status ${response.status}`, response.status, text);\n }\n\n if (response.body) {\n const reader = response.body.getReader();\n while (true) {\n const { done, value } = await reader.read();\n if (done) {\n const decodedValue = new TextDecoder().decode(value, { stream: true });\n yield decodedValue as unknown as T;\n break;\n }\n\n const decodedValue = new TextDecoder().decode(value, { stream: true });\n yield decodedValue as unknown as T;\n }\n } else {\n throw new IsomorphicHttpClientError(\"Cannot stream the body of the response.\", 500, response);\n }\n }\n } catch (error: any) {\n if (error instanceof IsomorphicHttpClientError) throw error;\n if (error?.name === \"AbortError\") throw new IsomorphicHttpClientError(\"AbortError\", 408);\n if (error?.name === \"CanceledError\") throw new IsomorphicHttpClientError(\"AbortError\", 408);\n if (axios.isAxiosError(error)) throw parseAxiosError(error);\n throw new IsomorphicHttpClientError(error instanceof Error ? error.message : \"An unexpected error occurred.\", 500);\n }\n }\n\n async get<T>(\n url: string,\n params?: Record<string, unknown>,\n headers?: Record<string, string | undefined>\n ): Promise<HttpClientResponse<T>> {\n return this.makeRequest<T>(\"get\", url, params || {}, { headers });\n }\n\n async post<T>(url: string, data?: Record<string, unknown>, headers?: Record<string, string | undefined>): Promise<HttpClientResponse<T>> {\n return this.makeRequest<T>(\"post\", url, data || {}, { headers });\n }\n\n async put<T>(url: string, data?: Record<string, unknown>, headers?: Record<string, string | undefined>): Promise<HttpClientResponse<T>> {\n return this.makeRequest<T>(\"put\", url, data || {}, { headers });\n }\n\n async delete<T>(\n url: string,\n params?: Record<string, unknown>,\n headers?: Record<string, string | undefined>\n ): Promise<HttpClientResponse<T>> {\n return this.makeRequest<T>(\"delete\", url, params || {}, { headers });\n }\n\n async patch<T>(\n url: string,\n data?: Record<string, unknown>,\n headers?: Record<string, string | undefined>\n ): Promise<HttpClientResponse<T>> {\n return this.makeRequest<T>(\"patch\", url, data || {}, { headers });\n }\n\n static IsomorphicHttpClientError = IsomorphicHttpClientError;\n}\n\nexport { IsomorphicHttpClient, IsomorphicHttpClientError };\n","// TODO: Handling streaming requests\n// TODO: Batch tokens should map to providers and not just the model array\n\nimport { GatewayError } from \"../../errors\";\nimport { calcRateLimitRetryTimeout, castToError, defaultShouldRetry, delay, isRateLimited } from \"../../utils\";\nimport { Queue, Task } from \"./queue.interface\";\n\ntype QueueOptions = {\n maxRetries?: number;\n tokensPerMinute?: number;\n timeout?: number;\n backOffInitialDelay?: number;\n backOffMultiplier?: number;\n rateLimitRetryTimeout?: number;\n shouldRetry?: (status: number) => boolean;\n};\n\nclass SimpleQueue<Req, Res> implements Queue<Req, Res> {\n private queue: Array<Task<Req, Res>> = [];\n private isProcessing: boolean = false;\n private maxRetries: number = 2;\n private tokensPerMinute: number = 2500000;\n private timeout: number = 60000 * 55; // 55 minutes\n private backOffInitialDelay: number = 5000; // 5 second\n private backOffMultiplier: number = 1.1;\n private rateLimitRetryTimeout: number;\n private shouldRetry = defaultShouldRetry;\n\n constructor(options: QueueOptions) {\n this.maxRetries = options.maxRetries || this.maxRetries;\n this.timeout = options.timeout || this.timeout;\n this.tokensPerMinute = options.tokensPerMinute || this.tokensPerMinute;\n this.backOffInitialDelay = options.backOffInitialDelay || this.backOffInitialDelay;\n this.backOffMultiplier = options.backOffMultiplier || this.backOffMultiplier;\n this.rateLimitRetryTimeout =\n options.rateLimitRetryTimeout || calcRateLimitRetryTimeout(this.maxRetries, this.backOffInitialDelay, this.backOffMultiplier, 10000);\n this.shouldRetry = options.shouldRetry || this.shouldRetry;\n }\n\n enqueue(task: Task<Req, Res>) {\n this.queue.push(task);\n this.processQueue();\n }\n\n private calculateBackoff(retryCount: number): number {\n return this.backOffInitialDelay * Math.pow(this.backOffMultiplier, retryCount);\n }\n\n private async processQueue(): Promise<void> {\n if (this.isProcessing) return;\n this.isProcessing = true;\n\n const mt = this.timeout;\n const rt = this.rateLimitRetryTimeout;\n\n while (this.queue.length > 0) {\n const batch: Array<(typeof this.queue)[number]> = [];\n let batchTokenCount = 0;\n\n this.queue.sort((a, b) => (a.queuePriority || 0) - (b.queuePriority || 0));\n\n while (this.queue.length > 0 && batchTokenCount + this.queue[0].inputTokens <= this.tokensPerMinute) {\n const next = this.queue.shift();\n if (!next) break;\n batchTokenCount += next.inputTokens;\n batch.push({\n ...next,\n attemptTime: Date.now(),\n });\n }\n\n await Promise.all(\n batch.map(async (task) => {\n const now = Date.now();\n\n if (now - task.queueTime > mt) {\n task.reject(new GatewayError(\"Main timeout exceeded.\", 408, task.request));\n return;\n }\n\n return this.execute(task).catch(async (error: any) => {\n console.log(\"\\n\\n\");\n console.log(\"Error\", error);\n console.log(\"\\n\\n\");\n const safeError = castToError(error);\n if (isRateLimited(safeError) && now - task.attemptTime < rt) {\n // For rate limit errors, retry without incrementing the try count and with a delay\n await delay(this.calculateBackoff(task.tryCount));\n this.queue.push({\n ...task,\n tryCount: task.tryCount, // Not incrementing for rate limit errors\n attemptTime: task.attemptTime, // Not updating the attempt time for rate limit errors\n });\n } else if (this.shouldRetry(safeError.status) && task.tryCount < this.maxRetries) {\n // For other errors, retry with incremented try count and the same model\n this.queue.push({\n ...task,\n tryCount: task.tryCount + 1, // Increment the try count\n attemptTime: now, // Reset the attempt time\n });\n // } else if (task.modelIndex + 1 < task.models.length) {\n // // If retries are exhausted and there are more models to fallback to, reset the try count, update the modelIndex, and re-queue\n // this.queue.push({\n // ...task,\n // tryCount: 1, // Reset the try count for the new model\n // modelIndex: task.modelIndex + 1, // Move to the next model as a fallback\n // inputTokens: getTokens(task.models[task.modelIndex + 1], task.messages), // Update the input tokens for the new model\n // attemptTime: now, // Reset the attempt time for the new model\n // });\n } else {\n // Max retries reached, reject the promise\n task.reject(safeError);\n }\n });\n })\n );\n\n // Allow the event loop to run before processing the next batch\n await delay(0);\n }\n\n this.isProcessing = false;\n }\n\n private async execute<Req, Res>(task: Task<Req, Res>): Promise<void> {\n const executionResult = task.execute({\n modelIndex: task.modelIndex,\n data: task.request,\n resolve: task.resolve,\n reject: task.reject,\n });\n\n // used for complete requests\n if (executionResult instanceof Promise) return executionResult;\n\n // TODO: handle async generator\n // will have to update the Task interface to take a callback function\n // create a queue in the *streamChat method in Router\n // const chunkQueue: StreamChatResponseType<M>[] = [];\n // let resolveChunkPromise: (value: StreamChatResponseType<M> | PromiseLike<StreamChatResponseType<M>>) => void;\n // let chunkPromise = new Promise<StreamChatResponseType<M>>(resolve => resolveChunkPromise = resolve);\n // try {\n // while (true) {\n // if (chunkQueue.length === 0) {\n // await chunkPromise;\n // }\n\n // while (chunkQueue.length > 0) {\n // const chunk = chunkQueue.shift();\n // yield chunk; // Yield the chunk from the queue.\n // }\n // }\n // } finally {\n // }\n // will have to give consideration to what happens when we retry\n // do we want to start the stream from the beginning or continue from where we left off?\n // not sure if we can even start from where we left off given the limitation of the provider\n\n return Promise.reject(new GatewayError(\"Unsupported task execution result type in Queue.\", 500, task.request));\n }\n}\n\nexport { SimpleQueue };\n","import { GatewayError } from \"./errors\";\nimport {\n GatewayCallbackType,\n GatewayCompleteChatRequest,\n GatewayCompleteChatRequestType,\n // GatewayStreamChatRequestOptions\n GatewayGetEmbeddingsRequest,\n GatewayGetEmbeddingsRequestType,\n GatewayOptions,\n GatewayOptionsType,\n // GatewayCompleteChatRequestOptions,\n GatewayStreamChatRequest,\n GatewayStreamChatRequestType,\n} from \"./gateway.types\";\nimport { CompleteChatHandlerResponseType, GetEmbeddingsHandlerResponseType, StreamChatHandlerResponseType } from \"./handlers\";\nimport { handleCompleteChat } from \"./handlers/complete-chat/complete-chat.handler\";\nimport { handleGetEmbeddings } from \"./handlers/get-embeddings/get-embeddings.handler\";\nimport { handleStreamChat } from \"./handlers/stream-chat/stream-chat.handler\";\nimport { HttpClient, IsomorphicHttpClient, Queue, SimpleQueue, Task } from \"./plugins\";\nimport { isRunningInBrowser } from \"./utils\";\n\nclass Gateway {\n private options: GatewayOptionsType;\n // private timeout: number = 1200000 * 2;\n // private tokensPerMinute: number = 60000;\n\n private httpClient: HttpClient;\n private completeQueue: Queue<GatewayCompleteChatRequestType, CompleteChatHandlerResponseType>;\n private embeddingQueue: Queue<GatewayGetEmbeddingsRequestType, GetEmbeddingsHandlerResponseType>;\n constructor(options: GatewayOptionsType) {\n if (!options.dangerouslyAllowBrowser && isRunningInBrowser()) {\n throw new GatewayError(\n \"It looks like you're running in a browser-like environment.\\n\\n\" +\n \"This is disabled by default, as it risks exposing your provider secrets to attackers.\\n\" +\n \"If you understand the risks and have appropriate mitigation in place,\\n\" +\n \"you can set the `dangerouslyAllowBrowser` option to `true`.\\n\"\n );\n }\n\n this.options = GatewayOptions.parse(options);\n\n this.httpClient = options.httpClient || new IsomorphicHttpClient({ timeoutInMilliseconds: 60000 }); // TODO: recheck, 60 seconds is arbitrary\n\n // TODO: get from queueOptions after queue can respect them\n // this.timeout = this.options.timeout || this.timeout;\n // this.tokensPerMinute = this.options.tokensPerMinute || this.tokensPerMinute;\n // TODO: pass queueOptions here if available or a whole queue instance\n this.completeQueue = new SimpleQueue({});\n this.embeddingQueue = new SimpleQueue({});\n }\n\n // TODO: Promise should return GatewayCompleteChatResponseType for consistency\n async completeChat(request: GatewayCompleteChatRequestType): Promise<CompleteChatHandlerResponseType> {\n const data = GatewayCompleteChatRequest.parse(request);\n return new Promise<CompleteChatHandlerResponseType>((resolve, reject) => {\n const task: Task<GatewayCompleteChatRequestType, CompleteChatHandlerResponseType> = {\n tryCount: 0,\n modelIndex: 0,\n inputTokens: data.model.getTokenCount(data.messages),\n queueTime: Date.now(),\n attemptTime: 0,\n request: request,\n queuePriority: data.options?.queuePriority,\n resolve,\n execute: this.executeCompleteChatTask.bind(this),\n reject,\n };\n this.completeQueue.enqueue(task);\n });\n }\n\n private async executeCompleteChatTask(request: {\n modelIndex: number;\n data: GatewayCompleteChatRequestType;\n resolve: (value: CompleteChatHandlerResponseType) => void;\n reject: (error: GatewayError) => void;\n }): Promise<void> {\n try {\n const data = GatewayCompleteChatRequest.parse(request.data);\n const response = await handleCompleteChat(\n {\n model: data.model,\n config: data.config,\n messages: data.messages,\n tools: data.tools,\n // callbacks: this.options.callbacks,\n metadataForCallbacks: data.options?.metadataForCallbacks,\n },\n this.httpClient\n );\n\n request.resolve(response);\n } catch (error) {\n if (error instanceof GatewayError) throw error;\n else throw new GatewayError((error as any)?.message, 500, (error as any)?.response?.data);\n }\n }\n\n async *streamChat(request: GatewayStreamChatRequestType): AsyncGenerator<StreamChatHandlerResponseType, void, unknown> {\n try {\n const data = GatewayStreamChatRequest.parse(request);\n\n for await (const streamResponse of handleStreamChat(\n {\n model: data.model,\n config: data.config,\n messages: data.messages,\n tools: data.tools,\n // callbacks: this.options.callbacks,\n metadataForCallbacks: data.options?.metadataForCallbacks,\n },\n this.httpClient\n )) {\n yield streamResponse as StreamChatHandlerResponseType;\n }\n } catch (error) {\n if (error instanceof GatewayError) throw error;\n else throw new GatewayError((error as any)?.message, 500, (error as any)?.response?.data);\n }\n }\n\n async getEmbeddings(request: GatewayGetEmbeddingsRequestType): Promise<GetEmbeddingsHandlerResponseType> {\n const data = GatewayGetEmbeddingsRequest.parse(request);\n return new Promise<GetEmbeddingsHandlerResponseType>((resolve, reject) => {\n const task: Task<GatewayGetEmbeddingsRequestType, GetEmbeddingsHandlerResponseType> = {\n tryCount: 0,\n modelIndex: 0,\n inputTokens: data.model.getTokenCount(data.embeddingRequests),\n queueTime: Date.now(),\n attemptTime: 0,\n request: request,\n queuePriority: data.options?.queuePriority,\n resolve,\n execute: this.executeGetEmbeddingsTask.bind(this),\n reject,\n };\n this.embeddingQueue.enqueue(task);\n });\n }\n\n private async executeGetEmbeddingsTask(request: {\n modelIndex: number;\n data: GatewayGetEmbeddingsRequestType;\n resolve: (value: GetEmbeddingsHandlerResponseType) => void;\n reject: (error: GatewayError) => void;\n }): Promise<void> {\n try {\n const data = GatewayGetEmbeddingsRequest.parse(request.data);\n const response = await handleGetEmbeddings(\n {\n model: data.model,\n config: data.config,\n embeddingRequests: data.embeddingRequests,\n },\n this.httpClient\n );\n\n request.resolve(response);\n } catch (error) {\n if (error instanceof GatewayError) throw error;\n else throw new GatewayError((error as any)?.message, 500, (error as any)?.response?.data);\n }\n }\n\n static GatewayError = GatewayError;\n}\n\nexport { Gateway, type GatewayCallbackType, type GatewayOptionsType };\n"]}
1
+ {"version":3,"sources":["../src/errors/errors.ts","../src/plugins/http-client/http-client.error.ts","../src/plugins/http-client/isomorphic.http-client.ts","../src/plugins/queue/queue.error.ts","../src/plugins/queue/queue.interface.ts","../src/utils/utils.ts","../src/plugins/queue/simple.queue.ts","../src/plugins/cache/lru.cache.ts","../src/gateway.types.ts","../src/handlers/complete-chat/complete-chat.types.ts","../src/handlers/complete-chat/complete-chat.handler.ts","../src/handlers/get-embeddings/get-embeddings.types.ts","../src/handlers/get-embeddings/get-embeddings.handler.ts","../src/handlers/stream-chat/stream-chat.types.ts","../src/handlers/stream-chat/stream-chat.handler.ts","../src/gateway.ts"],"names":["GatewayError","_GatewayError","message","status","data","HttpClientErrorLiteral","HttpClientError","_HttpClientError","GatewayBaseError","info","cause","error","HttpRequestErrorLiteral","HttpRequestError","_HttpRequestError","headers","convertHeadersToRecord","headerRecord","key","value","axiosToHttpRequestError","_a","_b","_c","IsomorphicHttpClient","config","axiosInstance","timeoutInMilliseconds","axios","Timeout","z","ProxyAgent","_0","_1","_2","__async","method","url","dataOrParams","additionalConfig","__spreadProps","__spreadValues","resp","options","__asyncGenerator","response","__await","iter","__forAwait","more","temp","chunk","fetchConfig","text","reader","done","params","QueueTaskTimeoutErrorLiteral","QueueTaskTimeoutError","_QueueTaskTimeoutError","QueueOptions","getCacheKeyHash","prefix","object","sha256","castToError","err","isRunningInBrowser","logColors","verbose","level","action","args","debug","safelyInvokeCallbacks","callbacks","name","promises","callback","func","result","delay","ms","resolve","SimpleQueue","task","reject","timeout","retryRemaining","shouldRetry","delayMs","taskRequest","GatewayCompleteChatRequest","retryDelay","LRUCache","maxEntries","LRU","GatewayOptions","GatewayCompleteChatRequestOptions","Config","Message","Tool","GatewayStreamChatRequestOptions","GatewayStreamChatRequest","GatewayGetEmbeddingsRequestOptions","GatewayGetEmbeddingsRequest","EmbeddingRequests","CompleteChatHandlerRequest","CompleteChatHandlerResponse","ChatResponse","handleCompleteChat","request","client","providerData","providerRequest","cacheKey","cachedResponse","now","providerResponse","latencyInMs","safeError","GetEmbeddingsHandlerRequest","GetEmbeddingsHandlerResponse","EmbeddingResponse","handleGetEmbeddings","StreamChatHandlerRequest","PartialChatResponse","handleStreamChat","stable","buffer","isFirstResponse","transformed","streamResponse","Gateway","_d","queueOptions"],"mappings":";;;;;;;;;;;;;;AAAA,IAAA,EAAA,CAAA,MAAA,CAAA,cAAA,CAAA,EAAA,CAAA,MAAA,CAAA,gBAAA,CAAA,IAAA,EAAA,CAAA,MAAA,CAAA,yBAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,qBAAA,CAAA,IAAA,EAAA,CAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,EAAA,CAAA,MAAA,CAAA,SAAA,CAAA,oBAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,MAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,MAAA,CAAA,GAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,IAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,UAAA,CAAA,CAAA,CAAA,CAAA,YAAA,CAAA,CAAA,CAAA,CAAA,QAAA,CAAA,CAAA,CAAA,CAAA,KAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,IAAA,IAAA,CAAA,IAAA,CAAA,GAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA,IAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,IAAA,OAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,IAAA,CAAA,CAAA,CAAA,EAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAA,CAAA,CAAA,CAAA,EAAA,CAAA,MAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAA,CAAA,CAAA,CAAA,EAAA,CAAA,MAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAA,CAAA,CAAA,OAAA,CAAA,OAAA,CAAA,CAAA,CAAA,KAAA,CAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,GAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAA,YAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAA,CAAA,OAAA,CAAA,OAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,QAAA,CAAA,CAAA,CAAA,MAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAA,CAAA,CAAA,CAAA,IAAA,CAAA,KAAA,CAAA,CAAA,CAAA,KAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAA,CAAA,CAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,KAAA,CAAA,CAAA,EAAA,CAAA,CAAA,OAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,MAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,IAAA,OAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,CAAA,CAAA,KAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,eAAA,CAAA,CAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,MAAA,CAAA,CAAA,CAAA,CAAA,OAAA,CAAA,CAAA,CAAA,CAAA,QAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,eAAA,CAAA,CAAA,EAAA,CAAA,CAAA,IAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,UAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,IAAA,OAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAA,CAAA,OAAA,CAAA,OAAA,CAAA,CAAA,CAAA,KAAA,CAAA,CAAA,IAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,KAAA,CAAA,CAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAA,CAAA,CAAA,CAAA,CAAA,QAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAMA,EAAN,MAAMC,CAAAA,SAAqB,KAAM,CAI/B,YAAYC,CAAiBC,CAAAA,CAAAA,CAAiB,GAAKC,CAAAA,CAAAA,CAAgB,CACjE,KAAMF,CAAAA,CAAO,EACb,IAAK,CAAA,IAAA,CAAO,eACZ,IAAK,CAAA,MAAA,CAASC,CACd,CAAA,IAAA,CAAK,KAAOC,CAER,CAAA,KAAA,CAAM,iBACR,EAAA,KAAA,CAAM,kBAAkB,IAAMH,CAAAA,CAAY,EAE9C,CACF,ECZMI,IAAAA,EAAAA,CAAyB,kBACzBC,CAAN,CAAA,MAAMC,UAAwBC,sBAAiB,CAI7C,YAAY,CAAE,IAAA,CAAAC,CAAM,CAAA,KAAA,CAAAC,CAAM,CAAqC,CAAA,CAC7D,KAAM,CAAA,CAAE,KAAAD,CAAM,CAAA,KAAA,CAAAC,CAAM,CAAA,CAAGL,EAAsB,CAC7C,CAAA,IAAA,CAAK,KAAOI,CACZ,CAAA,IAAA,CAAK,MAAQC,CACb,CAAA,MAAA,CAAO,cAAe,CAAA,IAAA,CAAM,WAAW,SAAS,EAClD,CAEA,OAAO,kBAAkBC,CAA0C,CAAA,CACjE,OAAOA,CAAAA,YAAiBJ,CAC1B,CACF,CAAA,CAEMK,GAA0B,kBAC1BC,CAAAA,CAAAA,CAAN,MAAMC,CAAyBN,SAAAA,sBAAiB,CAQ9C,WAAA,CAAYN,EAAiBC,CAAiB,CAAA,GAAA,CAAKY,CAAiCX,CAAAA,CAAAA,CAAe,CACjG,KAAM,CAAA,CAAE,IAAMF,CAAAA,CAAAA,CAAS,MAAO,CAAE,MAAA,CAAAC,EAAQ,OAAAY,CAAAA,CAAAA,CAAS,KAAAX,CAAK,CAAE,CAAGQ,CAAAA,EAAuB,EAClF,IAAK,CAAA,IAAA,CAAOV,CACZ,CAAA,IAAA,CAAK,MAAQ,CAAE,MAAA,CAAAC,CAAQ,CAAA,OAAA,CAAAY,EAAS,IAAAX,CAAAA,CAAK,EACrC,MAAO,CAAA,cAAA,CAAe,KAAM,GAAW,CAAA,MAAA,CAAA,SAAS,EAClD,CAEA,OAAO,kBAAmBO,CAAAA,CAAAA,CAA2C,CACnE,OAAOA,CAAAA,YAAiBG,CAC1B,CACF,ECxBME,IAAAA,CAAAA,CAA0BD,GAAyC,CACvE,IAAME,CAAuC,CAAA,GAC7C,OAAIF,CAAAA,GAAY,OAAOA,CAAAA,EAAY,UAAYA,CAAmB,YAAA,OAAA,CAAA,EAChE,OAAO,OAAQA,CAAAA,CAAO,EAAE,OAAQ,CAAA,CAAC,CAACG,CAAAA,CAAKC,CAAK,CAAM,GAAA,CAC5C,KAAM,CAAA,OAAA,CAAQA,CAAK,CACrBF,CAAAA,CAAAA,CAAaC,CAAG,CAAA,CAAIC,EAAM,IAAK,CAAA,IAAI,EAC1B,OAAOA,CAAAA,EAAU,SAC1BF,CAAaC,CAAAA,CAAG,CAAIC,CAAAA,CAAAA,CAEpBF,EAAaC,CAAG,CAAA,CAAI,GAExB,CAAC,EAGID,CACT,CAAA,CAEMG,CAA2BT,CAAAA,CAAAA,EAAwC,CA/BzE,IAAAU,CAAAA,CAAAC,EAAAC,CAgCE,CAAA,IAAMrB,GAAUS,CAAA,EAAA,IAAA,CAAA,KAAA,CAAA,CAAAA,CAAO,CAAA,OAAA,GAAW,+BAC5BR,CAASkB,CAAAA,CAAAA,CAAAA,CAAAA,CAAAV,GAAA,IAAAA,CAAAA,KAAAA,CAAAA,CAAAA,CAAAA,CAAO,WAAP,IAAAU,CAAAA,KAAAA,CAAAA,CAAAA,CAAAA,CAAiB,MAAU,GAAA,GAAA,CACpCN,EAAUC,CAAuBM,CAAAA,CAAAA,CAAAA,CAAAX,GAAA,IAAAA,CAAAA,KAAAA,CAAAA,CAAAA,CAAAA,CAAO,WAAP,IAAAW,CAAAA,KAAAA,CAAAA,CAAAA,CAAAA,CAAiB,OAAO,CAAA,EAAK,EAC9DlB,CAAAA,CAAAA,CAAAA,CAAAA,CAAOmB,CAAAZ,CAAAA,CAAAA,EAAA,YAAAA,CAAO,CAAA,QAAA,GAAP,IAAAY,CAAAA,KAAAA,CAAAA,CAAAA,CAAAA,CAAiB,OAAQ,EAAC,CACvC,OAAO,IAAIV,CAAAA,CAAiBX,EAASC,CAAQY,CAAAA,CAAAA,CAASX,CAAI,CAC5D,EAEMoB,CAAN,CAAA,KAAiD,CAM/C,WAAA,CAAYC,EAA0B,CA+BtC,IAAA,CAAA,iBAAA,CAAoB,IACX,OAAO,SAAY,WAAe,EAAA,OAAA,CAAQ,UAAY,IAAQ,EAAA,OAAA,CAAQ,SAAS,IAAQ,EAAA,IAAA,CA/B9F,GAAM,CAAE,cAAAC,CAAe,CAAA,qBAAA,CAAAC,CAAsB,CAAA,CAAIF,EACjD,IAAK,CAAA,MAAA,CAASC,CAAiBE,EAAAA,kBAAAA,CAAM,QAErC,CAAA,IAAMC,EAAUC,KAAE,CAAA,MAAA,GAAS,GAAI,EAAA,CAAE,QAAS,EAAA,CAAE,UAK5C,CAAA,GAJA,KAAK,cAAiBD,CAAAA,CAAAA,CAAQ,MAAMF,CAAqB,CAAA,CAEzD,IAAK,CAAA,MAAA,CAAO,SAAS,OAAU,CAAA,IAAA,CAAK,eAEhCF,CAAO,CAAA,QAAA,CACT,GAAIA,CAAO,CAAA,QAAA,CAAS,UAAW,CAAA,SAAS,EAGtC,OAAQ,CAAA,GAAA,CAAI,UAAaA,CAAAA,CAAAA,CAAO,SAChC,IAAK,CAAA,cAAA,CAAiB,IAAIM,qBAAAA,CAAAA,KAAAA,GACjBN,EAAO,QAAS,CAAA,UAAA,CAAW,UAAU,CAG9C,CAAA,OAAA,CAAQ,IAAI,WAAcA,CAAAA,CAAAA,CAAO,QACjC,CAAA,IAAA,CAAK,gBAAkB,IAAIM,qBAAAA,CAAW,CACpC,kBAAA,CAAoB,EACtB,CAAC,CAAA,CAAA,KAEK,MAAA,IAAIzB,EAAgB,CACxB,IAAA,CAAM,+DACN,KAAO,CAAA,CAAE,SAAUmB,CAAO,CAAA,QAAS,CACrC,CAAC,CAGP,CAMc,WAAA,CACZO,CACAC,CAAAA,CAAAA,CACAC,EAGgC,CAAAC,OAAAA,CAAAA,CAAA,IALhCC,CAAAA,SAAAA,CAAAA,UAAAA,CAAAA,CACAC,EACAC,CACAC,CAAAA,CAAAA,CAAuC,EACvCZ,CAAAA,CAAAA,CACgC,CAChC,GAAI,CACF,IAAMF,CAAAA,CAA6Be,EAAAC,CAAA,CAAA,CAAA,CAAA,EAAA,CAC7BL,IAAW,KAASA,EAAAA,CAAAA,GAAW,SAAW,CAAE,MAAA,CAAQE,CAAa,CAAA,CAAI,CAAE,IAAMA,CAAAA,CAAa,GAC3FC,CAF8B,CAAA,CAAA,CAGjC,QAASZ,CAAyB,EAAA,IAAA,CAAK,cACzC,CAAA,CAAA,CAQA,GANI,IAAK,CAAA,cAAA,CACPF,CAAO,CAAA,UAAA,CAAa,KAAK,cAChB,CAAA,IAAA,CAAK,eACdA,GAAAA,CAAAA,CAAO,WAAa,IAAK,CAAA,eAAA,CAAA,CAGvBW,IAAW,KAASA,EAAAA,CAAAA,GAAW,SAAU,CAC3C,IAAMM,CAAO,CAAA,MAAM,KAAK,MAAON,CAAAA,CAAM,CAAKC,CAAAA,CAAAA,CAAKZ,CAAM,CACrD,CAAA,OAAO,CACL,IAAA,CAAMiB,EAAK,IACX,CAAA,OAAA,CAAS1B,EAAuB0B,CAAK,CAAA,OAAO,EAC5C,MAAQ,CAAA,CACN,IAAMA,CAAAA,CAAAA,CAAK,OACX,IAAMA,CAAAA,CAAAA,CAAK,UACb,CACF,CACF,CAAO,KAAA,CACL,IAAMA,CAAAA,CAAO,MAAM,IAAK,CAAA,MAAA,CAAON,CAAM,CAAKC,CAAAA,CAAAA,CAAKZ,EAAO,IAAMe,CAAAA,CAAAA,CAAAC,CAAA,CAAA,EAAA,CACvDhB,GADuD,CAE1D,MAAA,CAAQA,EAAO,MACjB,CAAA,CAAC,EACD,OAAO,CACL,IAAMiB,CAAAA,CAAAA,CAAK,KACX,OAAS1B,CAAAA,CAAAA,CAAuB0B,EAAK,OAAO,CAAA,CAC5C,OAAQ,CACN,IAAA,CAAMA,CAAK,CAAA,MAAA,CACX,KAAMA,CAAK,CAAA,UACb,CACF,CACF,CACF,CAAS/B,MAAAA,CAAAA,CAAO,CACd,MAAIiB,mBAAM,YAAajB,CAAAA,CAAK,EAASS,CAAwBT,CAAAA,CAAK,EAG5D,IAAIL,CAAAA,CAAgB,CAAE,IAAA,CAAM,+BAAgC,KAAOK,CAAAA,CAAM,CAAC,CAClF,CACF,CAEO,CAAA,CAAA,MAAA,CACL0B,CACAD,CAAAA,CAAAA,CACAhC,EACAW,CACA4B,CAAAA,CAAAA,CAGkC,QAAAC,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,WAAA,CAClC,GAAI,CACF,GAAI,IAAK,CAAA,iBAAA,GAAqB,CAE5B,IAAMC,CAAW,CAAA,MAAA,IAAAC,EAAM,IAAK,CAAA,MAAA,CAAO,OAAQ,CAAA,CACzC,OAAAV,CACA,CAAA,GAAA,CAAAC,EACA,OAAAtB,CAAAA,CAAAA,CACA,KAAAX,CACA,CAAA,YAAA,CAAc,QACd,CAAA,MAAA,CAAQuC,GAAA,IAAAA,CAAAA,KAAAA,CAAAA,CAAAA,CAAAA,CAAS,WACnB,CAAC,CAAA,CAAA,CAED,YAAAI,CAAAC,CAAAA,CAAAA,CAA0BH,CAAS,CAAA,IAAA,CAAA,CAAnCI,EAAAC,CAAAvC,CAAAA,CAAAA,CAAAsC,EAAA,CAAAC,CAAAA,CAAAA,CAAA,UAAAJ,CAAAC,CAAAA,CAAAA,CAAA,IAAAE,EAAAA,CAAAA,EAAAA,IAAAA,CAAAA,CAAAA,CAAA,GAEE,CAFS,IAAME,CAAjBD,CAAAA,CAAAA,CAAA,MAEE,MADqBC,CAAAA,CAAM,QAAS,GAAA,CAAA,CAAA,MADtCD,EAzJR,CAyJQvC,CAAAA,CAAA,CAAAuC,CAAA,EAAA,CAAA,OAAA,CAAA,GAAA,CAAAD,IAAAC,CAAAH,CAAAA,CAAAA,CAAA,MAAAD,CAAAA,GAAAA,MAAAA,IAAAA,CAAAA,CAAAI,EAAA,IAAAH,CAAAA,CAAAA,CAAAA,CAAAA,EAAAA,CAAAA,OAAA,CAAApC,GAAAA,CAAAA,CAAA,MAAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAIF,CAAO,KAAA,CACL,IAAMyC,CAA2B,CAAA,CAC/B,OAAAhB,CACA,CAAA,OAAA,CAAS,IAAI,OAAQK,CAAAA,CAAAA,CAAA,EAChB1B,CAAAA,CAAAA,CACJ,EACD,IAAMqB,CAAAA,CAAAA,GAAW,KAAQ,CAAA,IAAA,CAAK,UAAUhC,CAAI,CAAA,CAAI,KAChD,CAAA,CAAA,MAAA,CAAQuC,GAAA,IAAAA,CAAAA,KAAAA,CAAAA,CAAAA,CAAAA,CAAS,WACnB,CACME,CAAAA,CAAAA,CAAW,UAAAC,CAAM,CAAA,KAAA,CAAMT,CAAKe,CAAAA,CAAW,GAE7C,GAAI,CAACP,EAAS,EAAI,CAAA,CAChB,IAAMQ,CAAY,CAAA,MAAA,IAAAP,CAAMD,CAAAA,CAAAA,CAAS,MACjC,CAAA,CAAA,MAAM,IAAIhC,CACR,CAAA,CAAA,2BAAA,EAA8BgC,EAAS,MAAM,CAAA,CAAA,CAC7CA,CAAS,CAAA,MAAA,CACT7B,EAAuB6B,CAAS,CAAA,OAAO,CACvCQ,CAAAA,CACF,CACF,CAEA,GAAIR,CAAS,CAAA,IAAA,CAAM,CACjB,IAAMS,CAAAA,CAAST,EAAS,IAAK,CAAA,SAAA,GAC7B,OAAa,CACX,GAAM,CAAE,KAAAU,CAAM,CAAA,KAAA,CAAApC,CAAM,CAAA,CAAI,UAAA2B,CAAMQ,CAAAA,CAAAA,CAAO,IAAK,EAAA,CAAA,CAC1C,GAAIC,CAAM,CAAA,CAER,MADqB,IAAI,WAAA,GAAc,MAAOpC,CAAAA,CAAAA,CAAO,CAAE,MAAA,CAAQ,EAAK,CAAC,CAAA,CAErE,KACF,CAGA,MADqB,IAAI,WAAA,EAAc,CAAA,MAAA,CAAOA,EAAO,CAAE,MAAA,CAAQ,EAAK,CAAC,EAEvE,CACF,CAEE,KAAA,MAAM,IAAIN,CAAAA,CAAiB,0CAA2C,GAAK,CAAA,GAAIgC,CAAQ,CAE3F,CACF,CAASlC,MAAAA,CAAAA,CAAY,CAGnB,MAAIE,EAAiB,kBAAmBF,CAAAA,CAAK,EAASA,CAClDA,CAAAA,CAAAA,CAAAA,EAAA,YAAAA,CAAO,CAAA,IAAA,IAAS,YAAoB,CAAA,IAAIE,EAAiB,YAAc,CAAA,GAAA,CAAK,EAAC,CAAG,EAAE,CAAA,CAAA,CAClFF,CAAA,EAAA,IAAA,CAAA,KAAA,CAAA,CAAAA,EAAO,IAAS,IAAA,eAAA,CAAuB,IAAIE,CAAiB,CAAA,YAAA,CAAc,IAAK,EAAC,CAAG,EAAE,EAErFe,kBAAM,CAAA,YAAA,CAAajB,CAAK,CAAA,CAASS,EAAwBT,CAAK,CAAA,CAE5D,IAAIL,CAAAA,CAAgB,CAAE,IAAM,CAAA,8BAAA,CAAgC,MAAOK,CAAM,CAAC,CAClF,CACF,CAAA,CAAA,CAEM,GACJ0B,CAAAA,CAAAA,CACAmB,EACAzC,CACgC,CAAA,CAAA,OAAAoB,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,WAAA,CAChC,OAAO,IAAK,CAAA,WAAA,CAAe,KAAOE,CAAAA,CAAAA,CAAKmB,GAAU,EAAC,CAAG,CAAE,OAAAzC,CAAAA,CAAQ,CAAC,CAClE,CAAA,CAAA,CAEM,IAAQsB,CAAAA,CAAAA,CAAajC,EAAgCW,CAA8E,CAAA,CAAA,OAAAoB,EAAA,IACvI,CAAA,IAAA,CAAA,WAAA,CAAA,OAAO,KAAK,WAAe,CAAA,MAAA,CAAQE,CAAKjC,CAAAA,CAAAA,EAAQ,EAAI,CAAA,CAAE,QAAAW,CAAQ,CAAC,CACjE,CAEM,CAAA,CAAA,GAAA,CAAOsB,CAAajC,CAAAA,CAAAA,CAAgCW,EAA8E,CAAAoB,OAAAA,CAAAA,CAAA,IACtI,CAAA,IAAA,CAAA,WAAA,CAAA,OAAO,KAAK,WAAe,CAAA,KAAA,CAAOE,CAAKjC,CAAAA,CAAAA,EAAQ,EAAI,CAAA,CAAE,QAAAW,CAAQ,CAAC,CAChE,CAEM,CAAA,CAAA,MAAA,CACJsB,CACAmB,CAAAA,CAAAA,CACAzC,EACgC,CAAAoB,OAAAA,CAAAA,CAAA,IAChC,CAAA,IAAA,CAAA,WAAA,CAAA,OAAO,KAAK,WAAe,CAAA,QAAA,CAAUE,CAAKmB,CAAAA,CAAAA,EAAU,EAAI,CAAA,CAAE,QAAAzC,CAAQ,CAAC,CACrE,CAEM,CAAA,CAAA,KAAA,CACJsB,CACAjC,CAAAA,CAAAA,CACAW,EACgC,CAAAoB,OAAAA,CAAAA,CAAA,IAChC,CAAA,IAAA,CAAA,WAAA,CAAA,OAAO,KAAK,WAAe,CAAA,OAAA,CAASE,CAAKjC,CAAAA,CAAAA,EAAQ,EAAI,CAAA,CAAE,QAAAW,CAAQ,CAAC,CAClE,CAEF,CAAA,CAAA,EC/OA,IAAM0C,GAA+B,uBAC/BC,CAAAA,CAAAA,CAAN,MAAMC,CAA8BnD,SAAAA,sBAAiB,CAInD,WAAA,CAAY,CAAE,IAAAC,CAAAA,CAAAA,CAAM,MAAAC,CAAM,CAAA,CAAqC,CAC7D,KAAM,CAAA,CAAE,IAAAD,CAAAA,CAAAA,CAAM,MAAAC,CAAM,CAAA,CAAG+C,EAA4B,CAAA,CACnD,KAAK,IAAOhD,CAAAA,CAAAA,CACZ,IAAK,CAAA,KAAA,CAAQC,EACb,MAAO,CAAA,cAAA,CAAe,KAAM,GAAW,CAAA,MAAA,CAAA,SAAS,EAClD,CAEA,OAAO,uBAAwBC,CAAAA,CAAAA,CAAgD,CAC7E,OAAOA,CAAAA,YAAiBgD,CAC1B,CACF,MCDMC,CAAe9B,CAAAA,KAAAA,CAAE,OAAO,CAC5B,kBAAA,CAAoBA,MAAE,MAAO,EAAA,CAAE,GAAI,EAAA,CAAE,UACrC,CAAA,UAAA,CAAYA,KAAE,CAAA,MAAA,GAAS,GAAI,EAAA,CAAE,QAAS,EAAA,CACtC,QAASA,KAAE,CAAA,MAAA,GAAS,GAAI,EAAA,CAAE,UAC1B,CAAA,KAAA,CAAOA,KAAE,CAAA,MAAA,CAAO,CACd,YAAcA,CAAAA,KAAAA,CAAE,QAAS,CAAA,GAAA,GAAM,QAAS,EAAA,CACxC,iBAAmBA,CAAAA,KAAAA,CAAE,QAAS,CAAA,GAAA,GAAM,QAAS,EAC/C,CAAC,CACH,CAAC,ECpBD,IAAM+B,CAAkB,CAAA,CAACC,EAAgBC,CAChCC,GAAAA,mBAAAA,CAAOF,CAAS,CAAA,IAAA,CAAK,UAAUC,CAAM,CAAC,EAAE,QAAS,EAAA,CAGpDE,EAAeC,CACfA,EAAAA,CAAAA,YAAelE,CAAqBkE,CAAAA,CAAAA,CACpCA,aAAe,KAAc,CAAA,IAAIlE,CAAakE,CAAAA,CAAAA,CAAI,OAAiB,CAChE,CAAA,IAAIlE,CAAakE,CAAAA,CAAG,EAGvBC,CAAqB,CAAA,IAGlB,OAAO,MAAW,EAAA,WAAA,EAAe,OAAO,MAAO,CAAA,QAAA,EAAa,WAAe,EAAA,OAAO,WAAc,WASzG,CAAA,IAAMC,EAAY,CAAA,CAChB,MAAO,YACP,CAAA,IAAA,CAAM,eACN,CAAA,IAAA,CAAM,cACR,CAEMC,CAAAA,EAAAA,CAAU,CAACC,CAA+BC,CAAAA,CAAAA,CAAAA,GAAmBC,IAAgB,CACjF,GAAKL,CAAmB,EAAA,CAYbA,GAET,EAAA,OAAA,CAAQ,IAAI,CAAMG,GAAAA,EAAAA,CAAAA,CAAM,aAAa,CAAA,GAAA,EAAMC,CAAM,CAAA,CAAA,CAAA,CAAKH,GAAUE,CAAK,CAAA,CAAG,GAAGE,CAAI,CAAA,CAAA,YAZvEF,CAAO,EACb,IAAK,OAAA,CACH,QAAQ,KAAM,CAAA,GAAGE,CAAI,CAAA,CACrB,MACF,IAAK,MAAA,CACH,OAAQ,CAAA,IAAA,CAAK,GAAGA,CAAI,CAAA,CACpB,MACF,QACE,OAAA,CAAQ,IAAI,GAAGA,CAAI,EACvB,CAKJ,EAEMC,EAAQ,CAAA,CAACH,CAA+BC,CAAAA,CAAAA,CAAAA,GAAmBC,IAAgB,CAnDjF,IAAAnD,CAoDM8C,CAAAA,CAAAA,MAEA9C,CAAA,CAAA,OAAA,EAAA,IAAA,CAAA,KAAA,CAAA,CAAA,OAAA,CAAS,MAAT,IAAAA,CAAAA,KAAAA,CAAAA,CAAAA,CAAAA,CAAc,SAAU,MAC5BgD,EAAAA,EAAAA,CAAQC,CAAOC,CAAAA,CAAAA,CAAQ,GAAGC,CAAI,EAChC,CAYME,CAAAA,CAAAA,CAAwB,CAC5BC,CACAC,CAAAA,CAAAA,CAAAA,GACGJ,CACerC,GAAAA,CAAAA,CAAA,wBAClB,IAAM0C,CAAAA,CAA4B,EAElCF,CAAAA,CAAAA,CAAU,QAASG,CAAa,EAAA,CAC9B,IAAMC,CAAAA,CAAOD,EAASF,CAAI,CAAA,CAC1B,GAAI,OAAOG,CAAAA,EAAS,WAClB,GAAI,CACF,IAAMC,CAAAA,CAASD,EAAK,GAAGP,CAAI,EACvBQ,CAAkB,YAAA,OAAA,EACpBH,EAAS,IAAKG,CAAAA,CAAM,EAExB,CAAA,MAASrE,EAAO,CACd8D,EAAAA,CAAM,OAAS,CAAA,CAAA,wBAAA,EAA2B,OAAOG,CAAI,CAAC,CAAKjE,CAAAA,CAAAA,CAAAA,CAAK,EAClE,CAEJ,CAAC,EAED,MAAM,OAAA,CAAQ,WAAWkE,CAAQ,EACnC,CAEMI,CAAAA,CAAAA,CAAAA,CAASC,GAAe,IAAI,OAAA,CAASC,CAAY,EAAA,UAAA,CAAWA,EAASD,CAAE,CAAC,CCtF9E,CAAA,IAAME,EAAN,KAAyE,CAKvE,YAAYzC,CAA2B,CAAA,CAHvC,KAAQ,WAAc,CAAA,CAAA,CACtB,IAAQ,CAAA,KAAA,CAAwC,EAG9C,CAAA,IAAA,CAAK,OAAUA,CAAAA,EACjB,CAEO,OAAQ0C,CAAAA,CAAAA,CAA0C,CACvD,IAAA,CAAK,MAAM,IAAKA,CAAAA,CAAI,EACpB,IAAK,CAAA,YAAA,GACP,CAEQ,WAAA,CAAYA,CAAuD,CAAA,CACzE,OAAO,IAAI,OAAA,CAAQ,CAACF,CAASG,CAAAA,CAAAA,GAAW,CACtC,IAAMC,CAAAA,CAAU,UAAW,CAAA,IAAMD,EAC/B,IAAI5B,CAAAA,CAAsB,CACxB,IAAM,CAAA,oBAAA,CACN,MAAO,IAAI,KAAA,CAAM,oBAAoB,CACrC,CAAC,CACH,CAAA,CACA,IAAK,CAAA,OAAA,CAAQ,OACf,CAEA2B,CAAAA,CAAAA,CACG,OAAQA,CAAAA,CAAAA,CAAK,OAAO,CACpB,CAAA,IAAA,CAAML,GAAW,CAChB,YAAA,CAAaO,CAAO,CACpBJ,CAAAA,CAAAA,CAAQH,CAAM,EAChB,CAAC,CACA,CAAA,KAAA,CAAOrE,CAAU,EAAA,CAChB,aAAa4E,CAAO,CAAA,CACpBD,CAAO3E,CAAAA,CAAK,EACd,CAAC,EACL,CAAC,CACH,CAEc,iBAAiB0E,CAAoCG,CAAAA,CAAAA,CAA2C,CAAArD,OAAAA,CAAAA,CAAA,sBAC5G,GAAI,CACF,OAAO,MAAM,KAAK,WAAYkD,CAAAA,CAAI,CACpC,CAAA,MAAS1E,EAAO,CACd,GAAI6E,IAAmB,CACrB,CAAA,MAAM7E,EAGR,IAAI8E,CAAAA,CAAc,CACdC,CAAAA,CAAAA,CAAAA,CACF,KAAK,OAAQ,CAAA,KAAA,CAAM,aAAe,IAAK,CAAA,GAAA,CAAI,KAAK,OAAQ,CAAA,KAAA,CAAM,iBAAmB,CAAA,IAAA,CAAK,QAAQ,UAAaF,CAAAA,CAAc,EAC3H,GAAI3E,CAAAA,CAAiB,mBAAmBF,CAAK,CAAA,CAAG,CAE9C,GAAIA,EAAM,KAAM,CAAA,MAAA,GAAW,GAAK,CAAA,CAC9B,IAAMgF,CAAcC,CAAAA,CAAAA,CAA2B,SAAUP,CAAAA,CAAAA,CAAK,OAAO,CACrE,CAAA,GAAIM,EAAY,OAAS,CAAA,CACvB,IAAME,CAAaF,CAAAA,CAAAA,CAAY,IAAK,CAAA,KAAA,CAAM,cAAchF,CAAM,CAAA,KAAA,CAAM,OAAO,CAAA,CAC3E8E,EAAcI,CAAW,CAAA,WAAA,CAErBA,CAAW,CAAA,OAAA,CAAU,IACvBH,CAAUG,CAAAA,CAAAA,CAAW,SAEzB,CACF,CAEIlF,EAAM,KAAM,CAAA,MAAA,EAAU,GAAOA,EAAAA,CAAAA,CAAM,MAAM,MAAS,CAAA,IAIxD,CAKA,GAAK8E,EAGH,OAAMR,MAAAA,CAAAA,CAAMS,CAAO,CAAA,CACZ,KAAK,gBAAiBL,CAAAA,CAAAA,CAAMG,EAAiB,CAAC,CAAA,CAHrD,MAAM7E,CAKV,CACF,CAEc,CAAA,CAAA,YAAA,EAAe,QAAAwB,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,WAAA,CAC3B,GAAI,IAAK,CAAA,WAAA,EAAe,KAAK,OAAQ,CAAA,kBAAA,CAAoB,OAEzD,IAAMkD,EAAO,IAAK,CAAA,KAAA,CAAM,OACxB,CAAA,GAAKA,EAEL,CAAK,IAAA,CAAA,WAAA,EAAe,CAEpB,CAAA,GAAI,CACF,IAAMxC,CAAAA,CAAqB,MAAM,IAAA,CAAK,iBAAiBwC,CAAM,CAAA,IAAA,CAAK,OAAQ,CAAA,UAAU,EACpFA,CAAK,CAAA,OAAA,CAAQxC,CAAQ,EACvB,CAAA,MAASlC,EAAO,CACd0E,CAAAA,CAAK,MAAO1E,CAAAA,CAAK,EACnB,CAAE,OAAA,CACA,IAAK,CAAA,WAAA,EAAe,EACpB,IAAK,CAAA,YAAA,GACP,CAAA,CACF,GACF,MCrGMmF,CAAN,CAAA,KAAqD,CAGnD,WAAA,CAAYC,EAAqB,GAAM,CAAA,CACrC,IAAK,CAAA,KAAA,CAAQ,IAAIC,iBAAe,CAAA,CAC9B,GAAKD,CAAAA,CAAAA,CACL,WAAY,CACZ,CAAA,CAAA,cAAA,CAAgB,EAClB,CAAC,EACH,CAEA,GAAI7E,CAAAA,CAAAA,CAA4B,CAC9B,OAAO,KAAK,KAAM,CAAA,GAAA,CAAIA,CAAG,CAC3B,CAEA,IAAIA,CAAaC,CAAAA,CAAAA,CAAgB,CAC/B,IAAA,CAAK,MAAM,GAAID,CAAAA,CAAAA,CAAKC,CAAK,EAC3B,CAEA,OAAOD,CAAmB,CAAA,CACxB,IAAK,CAAA,KAAA,CAAM,OAAOA,CAAG,EACvB,CAEA,KAAA,EAAc,CACZ,IAAK,CAAA,KAAA,CAAM,KAAM,GACnB,CACF,ECfA,IAAM+E,GAAiBnE,KAAE,CAAA,MAAA,CAAO,CAC9B,YAAc8B,CAAAA,CAAAA,CAAa,OAAQ,EAAA,CAAE,UACrC,CAAA,uBAAA,CAAyB9B,KAAE,CAAA,OAAA,GAAU,QAAS,EAAA,CAC9C,UAAYA,CAAAA,KAAAA,CAAE,QAAqB,CAAA,QAAA,GACnC,iBAAmBA,CAAAA,KAAAA,CAAE,QAAiD,CAAA,QAAA,EACtE,CAAA,qBAAA,CAAuBA,MAAE,KAAMA,CAAAA,KAAAA,CAAE,MAAiC,EAAC,EAAE,QAAS,EAAA,CAAE,QAAS,EAAA,CACzF,mBAAoBA,KAAE,CAAA,MAAA,GAAkD,QAAS,EAAA,CACjF,uBAAwBA,KAAE,CAAA,KAAA,CAAMA,KAAE,CAAA,MAAA,EAAmC,CAAE,CAAA,QAAA,GAAW,QAAS,EAAA,CAC3F,oBAAqBA,KAAE,CAAA,KAAA,CAAMA,KAAE,CAAA,MAAA,EAAgC,CAAE,CAAA,QAAA,GAAW,QAAS,EACvF,CAAC,CAGKoE,CAAAA,EAAAA,CAAoCpE,KAAE,CAAA,MAAA,CAAO,CACjD,oBAAsBA,CAAAA,KAAAA,CAAE,GAAI,EAAA,CAAE,UAChC,CAAC,CAGK8D,CAAAA,CAAAA,CAA6B9D,MAAE,MAAO,CAAA,CAC1C,MAAOA,KAAE,CAAA,MAAA,GACT,MAAQqE,CAAAA,YAAAA,EACR,CAAA,QAAA,CAAUrE,MAAE,KAAMsE,CAAAA,aAAAA,EAAS,CAAA,CAC3B,MAAOtE,KAAE,CAAA,KAAA,CAAMuE,UAAK,EAAC,EAAE,QAAS,EAAA,CAChC,QAASH,EAAkC,CAAA,QAAA,EAC7C,CAAC,CAAA,CAGKI,EAAkCxE,CAAAA,KAAAA,CAAE,OAAO,CAC/C,oBAAA,CAAsBA,KAAE,CAAA,GAAA,GAAM,QAAS,EACzC,CAAC,CAAA,CAGKyE,GAA2BzE,KAAE,CAAA,MAAA,CAAO,CACxC,KAAOA,CAAAA,KAAAA,CAAE,QACT,CAAA,MAAA,CAAQqE,YAAO,EAAA,CACf,SAAUrE,KAAE,CAAA,KAAA,CAAMsE,eAAS,CAAA,CAC3B,MAAOtE,KAAE,CAAA,KAAA,CAAMuE,UAAK,EAAC,EAAE,QAAS,EAAA,CAChC,QAASC,EAAgC,CAAA,QAAA,EAC3C,CAAC,CAAA,CAGKE,EAAqC1E,CAAAA,KAAAA,CAAE,OAAO,CAClD,aAAA,CAAeA,KAAE,CAAA,MAAA,GAAS,GAAI,EAAA,CAAE,QAAS,EAAA,CAAE,UAC3C,CAAA,oBAAA,CAAsBA,MAAE,GAAI,EAAA,CAAE,UAChC,CAAC,CAGK2E,CAAAA,CAAAA,CAA8B3E,MAAE,MAAO,CAAA,CAC3C,KAAOA,CAAAA,KAAAA,CAAE,QACT,CAAA,MAAA,CAAQqE,YAAO,EAAA,CACf,kBAAmBO,uBAAkB,EAAA,CACrC,QAASF,EAAmC,CAAA,QAAA,EAC9C,CAAC,CAAA,CC1DD,IAAMG,GAA6B7E,KAAE,CAAA,MAAA,CAAO,CAC1C,KAAOA,CAAAA,KAAAA,CAAE,MAA+C,EAAA,CACxD,MAAOA,KAAE,CAAA,MAAA,GACT,MAAQqE,CAAAA,YAAAA,GACR,QAAUrE,CAAAA,KAAAA,CAAE,KAAMsE,CAAAA,aAAAA,EAAS,CAC3B,CAAA,KAAA,CAAOtE,MAAE,KAAMuE,CAAAA,UAAAA,EAAM,CAAE,CAAA,QAAA,EACvB,CAAA,SAAA,CAAWvE,MAAE,KAAMA,CAAAA,KAAAA,CAAE,MAAiC,EAAC,EAAE,QAAS,EAAA,CAAE,QAAS,EAAA,CAC7E,qBAAsBA,KAAE,CAAA,GAAA,GAAM,QAAS,EACzC,CAAC,CAGK8E,CAA8B9E,KAAE,CAAA,MAAA,CAAO,CAC3C,OAASA,CAAAA,KAAAA,CAAE,MAAO,CAAA,CAChB,OAAQqE,YAAO,EAAA,CACf,QAAUrE,CAAAA,KAAAA,CAAE,MAAMsE,aAAQ,EAAC,EAC3B,KAAOtE,CAAAA,KAAAA,CAAE,MAAMuE,UAAK,EAAC,CAAE,CAAA,QAAA,EACzB,CAAC,CAAA,CACD,QAAUQ,CAAAA,kBAAAA,CACV,YAAa/E,KAAE,CAAA,MAAA,EAAS,CAAA,GAAA,GAAM,QAAS,EAAA,CACvC,qBAAsBA,KAAE,CAAA,GAAA,GAAM,QAAS,EAAA,CACvC,QAAUA,CAAAA,KAAAA,CAAE,OAAO,CACjB,OAAA,CAASA,MAAE,GAAI,EAAA,CACf,SAAUA,KAAE,CAAA,GAAA,EACd,CAAC,CACH,CAAC,ECtBD,SAAegF,EAAmBC,CAAAA,CAAAA,CAAyCC,EAA8D,CAAA7E,OAAAA,CAAAA,CAAA,IACvI,CAAA,IAAA,CAAA,WAAA,CAAA,IAAM/B,EAAOuG,EAA2B,CAAA,KAAA,CAAMI,CAAO,CAAA,CAC/CpC,EAAYoC,CAAQ,CAAA,SAAA,EAAa,EAAC,CAExC,GAAI,CACFrC,CAAAA,CACEC,EACA,aACAoC,CAAAA,CAAAA,CAAQ,oBACV,CAEA,CAAA,IAAME,CAAe,CAAA,CACnB,OAAQ7G,CAAK,CAAA,MAAA,CACb,QAAUA,CAAAA,CAAAA,CAAK,SACf,KAAOA,CAAAA,CAAAA,CAAK,KACd,CAAA,CAEM8G,EAAkB,CACtB,GAAA,CAAK,MAAM9G,CAAK,CAAA,KAAA,CAAM,mBAAmBA,CAAK,CAAA,MAAA,CAAQA,CAAK,CAAA,QAAA,CAAUA,EAAK,KAAK,CAAA,CAC/E,OAAS,CAAA,MAAMA,EAAK,KAAM,CAAA,sBAAA,CAAuBA,CAAK,CAAA,MAAA,CAAQA,EAAK,QAAUA,CAAAA,CAAAA,CAAK,KAAK,CACvF,CAAA,IAAA,CAAM,MAAMA,CAAK,CAAA,KAAA,CAAM,mBAAoBA,CAAAA,CAAAA,CAAK,OAAQA,CAAK,CAAA,QAAA,CAAUA,EAAK,KAAK,CACnF,EAEM+G,CAAWtD,CAAAA,CAAAA,CAAgB,CAAiBqD,cAAAA,EAAAA,CAAAA,CAAgB,GAAG,CAAI9G,CAAAA,EAAAA,CAAAA,CAAK,MAAM,WAAY,CAAA,IAAI,GAAI6G,CAAY,CAAA,CAC9GG,CAAiBL,CAAAA,CAAAA,CAAQ,MAAM,GAAII,CAAAA,CAAQ,CACjD,CAAA,GAAIC,EACF,OAAA1C,CAAAA,CACEC,CACA,CAAA,cAAA,CACAoC,EAAQ,oBACRK,CAAAA,CACF,EACOA,CAGT,CAAA,IAAMC,EAAM,IAAK,CAAA,GAAA,EACXC,CAAAA,CAAAA,CAAmB,MAAMN,CAAO,CAAA,IAAA,CAAKE,CAAgB,CAAA,GAAA,CAAKA,EAAgB,IAAMA,CAAAA,CAAAA,CAAgB,OAAO,CAAA,CACvGK,EAAc,IAAK,CAAA,GAAA,GAAQF,CAE3BxE,CAAAA,CAAAA,CAA4C,CAChD,OAASoE,CAAAA,CAAAA,CACT,QAAU7G,CAAAA,CAAAA,CAAK,MAAM,6BAA8BkH,CAAAA,CAAAA,CAAiB,IAAI,CAAA,CACxE,YAAAC,CACA,CAAA,oBAAA,CAAsBR,CAAQ,CAAA,oBAAA,CAC9B,SAAU,CACR,OAAA,CAASG,EACT,QAAUI,CAAAA,CACZ,CACF,CAEA,CAAA,OAAAP,CAAQ,CAAA,KAAA,CAAM,IAAII,CAAUtE,CAAAA,CAAQ,EAEpC6B,CACEC,CAAAA,CAAAA,CACA,iBACAoC,CAAQ,CAAA,oBAAA,CACRlE,CACF,CAAA,CAEOA,CACT,CAASlC,MAAAA,CAAAA,CAAO,CAEd,IAAI6G,CAAAA,CAEJ,MAAI3G,CAAiB,CAAA,kBAAA,CAAmBF,CAAK,CAAA,EAElCA,aAAiBX,CAD1BwH,CAAAA,CAAAA,CAAY7G,CAIZ6G,CAAAA,CAAAA,CAAYvD,EAAYtD,CAAK,CAAA,CAG/B+D,CACEC,CAAAA,CAAAA,CACA,cACAoC,CAAQ,CAAA,oBAAA,CACRS,CACF,CAEMA,CAAAA,CACR,CACF,CC3FA,CAAA,CAQA,IAAMC,GAA8B3F,KAAE,CAAA,MAAA,CAAO,CAC3C,KAAOA,CAAAA,KAAAA,CAAE,QACT,CAAA,KAAA,CAAOA,KAAE,CAAA,MAAA,GACT,MAAQqE,CAAAA,YAAAA,EACR,CAAA,iBAAA,CAAmBO,yBACnB,CAAA,SAAA,CAAW5E,KAAE,CAAA,KAAA,CAAMA,MAAE,MAAkC,EAAC,EAAE,QAAS,EAAA,CAAE,UACrE,CAAA,oBAAA,CAAsBA,KAAE,CAAA,GAAA,GAAM,QAAS,EACzC,CAAC,CAGK4F,CAA+B5F,MAAE,MAAO,CAAA,CAC5C,OAASA,CAAAA,KAAAA,CAAE,OAAO,CAChB,MAAA,CAAQqE,cACR,CAAA,iBAAA,CAAmBO,yBACrB,CAAC,CACD,CAAA,QAAA,CAAUiB,wBACV,WAAa7F,CAAAA,KAAAA,CAAE,MAAO,EAAA,CAAE,KAAM,CAAA,QAAA,EAC9B,CAAA,oBAAA,CAAsBA,MAAE,GAAI,EAAA,CAAE,UAC9B,CAAA,QAAA,CAAUA,MAAE,MAAO,CAAA,CACjB,OAASA,CAAAA,KAAAA,CAAE,KACX,CAAA,QAAA,CAAUA,KAAE,CAAA,GAAA,EACd,CAAC,CACH,CAAC,ECpBD,SAAe8F,EAAoBb,CAAAA,CAAAA,CAA0CC,EAA+D,CAAA7E,OAAAA,CAAAA,CAAA,sBAC1I,IAAM/B,CAAAA,CAAOqH,EAA4B,CAAA,KAAA,CAAMV,CAAO,CAChDpC,CAAAA,CAAAA,CAAYoC,CAAQ,CAAA,SAAA,EAAa,EAEvC,CAAA,GAAI,CACFrC,CAAAA,CACEC,EACA,sBACAoC,CAAAA,CAAAA,CAAQ,oBACV,CAEA,CAAA,IAAME,EAAe,CACnB,MAAA,CAAQ7G,CAAK,CAAA,MAAA,CACb,kBAAmBA,CAAK,CAAA,iBAC1B,EAEM8G,CAAkB,CAAA,CACtB,IAAK,MAAM9G,CAAAA,CAAK,KAAM,CAAA,mBAAA,CAAoBA,EAAK,MAAQA,CAAAA,CAAAA,CAAK,iBAAiB,CAC7E,CAAA,OAAA,CAAS,MAAMA,CAAK,CAAA,KAAA,CAAM,uBAAwBA,CAAAA,CAAAA,CAAK,OAAQA,CAAK,CAAA,iBAAiB,CACrF,CAAA,IAAA,CAAM,MAAMA,CAAK,CAAA,KAAA,CAAM,oBAAqBA,CAAAA,CAAAA,CAAK,OAAQA,CAAK,CAAA,iBAAiB,CACjF,CAEM+G,CAAAA,CAAAA,CAAWtD,EAAgB,CAAkBqD,eAAAA,EAAAA,CAAAA,CAAgB,GAAG,CAAA,CAAA,EAAI9G,EAAK,KAAM,CAAA,WAAA,CAAY,IAAI,CAAA,CAAA,CAAI6G,CAAY,CAC/GG,CAAAA,CAAAA,CAAiBL,CAAQ,CAAA,KAAA,CAAM,IAAII,CAAQ,CAAA,CACjD,GAAIC,CACF,CAAA,OAAA1C,EACEC,CACA,CAAA,uBAAA,CACAoC,CAAQ,CAAA,oBAAA,CACRK,CACF,CACOA,CAAAA,CAAAA,CAGT,IAAMC,CAAAA,CAAM,KAAK,GAAI,EAAA,CACfC,CAAmB,CAAA,MAAMN,EAAO,IAAKE,CAAAA,CAAAA,CAAgB,IAAKA,CAAgB,CAAA,IAAA,CAAMA,EAAgB,OAAO,CAAA,CACvGK,CAAc,CAAA,IAAA,CAAK,KAAQF,CAAAA,CAAAA,CAE3BxE,EAA6C,CACjD,OAAA,CAASoE,EACT,QAAU7G,CAAAA,CAAAA,CAAK,KAAM,CAAA,8BAAA,CAA+BkH,EAAiB,IAAI,CAAA,CACzE,YAAAC,CACA,CAAA,oBAAA,CAAsBR,EAAQ,oBAC9B,CAAA,QAAA,CAAU,CACR,OAAA,CAASG,EACT,QAAUI,CAAAA,CACZ,CACF,CAAA,CAEA,OAAAP,CAAQ,CAAA,KAAA,CAAM,GAAII,CAAAA,CAAAA,CAAUtE,CAAQ,CAEpC6B,CAAAA,CAAAA,CACEC,EACA,yBACAoC,CAAAA,CAAAA,CAAQ,qBACRlE,CACF,CAAA,CAEOA,CACT,CAAA,MAASlC,EAAO,CAEd,IAAI6G,CAEJ,CAAA,MAAI3G,EAAiB,kBAAmBF,CAAAA,CAAK,CAElCA,EAAAA,CAAAA,YAAiBX,EAD1BwH,CAAY7G,CAAAA,CAAAA,CAIZ6G,EAAYvD,CAAYtD,CAAAA,CAAK,EAG/B+D,CACEC,CAAAA,CAAAA,CACA,sBACAoC,CAAAA,CAAAA,CAAQ,qBACRS,CACF,CAAA,CAEMA,CACR,CACF,GClFA,IAAMK,GAA2B/F,KAAE,CAAA,MAAA,CAAO,CACxC,KAAOA,CAAAA,KAAAA,CAAE,QACT,CAAA,MAAA,CAAQqE,YAAO,EAAA,CACf,SAAUrE,KAAE,CAAA,KAAA,CAAMsE,eAAS,CAAA,CAC3B,MAAOtE,KAAE,CAAA,KAAA,CAAMuE,UAAK,EAAC,EAAE,QAAS,EAAA,CAChC,SAAWvE,CAAAA,KAAAA,CAAE,MAAMA,KAAE,CAAA,MAAA,EAAgC,CAAA,CAAE,UAAW,CAAA,QAAA,GAClE,oBAAsBA,CAAAA,KAAAA,CAAE,KAAM,CAAA,QAAA,EAChC,CAAC,EAGiCA,KAAAA,CAAE,MAAO,CAAA,CACzC,QAASA,KAAE,CAAA,MAAA,CAAO,CAChB,MAAA,CAAQqE,cACR,CAAA,QAAA,CAAUrE,MAAE,KAAMsE,CAAAA,aAAAA,EAAS,CAC3B,CAAA,KAAA,CAAOtE,KAAE,CAAA,KAAA,CAAMuE,YAAM,CAAA,CAAE,QAAS,EAClC,CAAC,CACD,CAAA,QAAA,CAAUyB,yBACV,CAAA,oBAAA,CAAsBhG,MAAE,GAAI,EAAA,CAAE,UAC9B,CAAA,QAAA,CAAUA,MAAE,MAAO,CAAA,CACjB,OAASA,CAAAA,KAAAA,CAAE,KACX,CAAA,QAAA,CAAUA,MAAE,GAAI,EAClB,CAAC,CACH,CAAC,ECpBD,SAAgBiG,GACdhB,CACAC,CAAAA,CAAAA,CAC8D,QAAApE,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,WAAA,CAC9D,IAAMxC,CAAOyH,CAAAA,EAAAA,CAAyB,KAAMd,CAAAA,CAAO,EAC7CpC,CAAYoC,CAAAA,CAAAA,CAAQ,SAAa,EAAA,GAEjCiB,CAAS,CAAA,CACb,MAAQ5H,CAAAA,CAAAA,CAAK,OACb,QAAUA,CAAAA,CAAAA,CAAK,SACf,KAAOA,CAAAA,CAAAA,CAAK,KACd,CAEA,CAAA,GAAI,CACFsE,CAAAA,CAA4EC,EAAW,eAAiBoC,CAAAA,CAAAA,CAAQ,oBAAoB,CAAA,CAEpI,IAAMG,CAAkB,CAAA,CACtB,GAAK,CAAA,MAAA,IAAApE,EAAM1C,CAAK,CAAA,KAAA,CAAM,iBAAiBA,CAAK,CAAA,MAAA,CAAQA,EAAK,QAAUA,CAAAA,CAAAA,CAAK,KAAK,CAAA,CAAA,CAC7E,QAAS,MAAA0C,IAAAA,CAAAA,CAAM1C,CAAK,CAAA,KAAA,CAAM,qBAAqBA,CAAK,CAAA,MAAA,CAAQA,CAAK,CAAA,QAAA,CAAUA,EAAK,KAAK,CAAA,CAAA,CACrF,KAAM,MAAA0C,IAAAA,CAAAA,CAAM1C,EAAK,KAAM,CAAA,iBAAA,CAAkBA,CAAK,CAAA,MAAA,CAAQA,EAAK,QAAUA,CAAAA,CAAAA,CAAK,KAAK,CACjF,CAAA,CAAA,CAEI6H,EAAS,EACTC,CAAAA,CAAAA,CAAkB,CACtB,CAAA,CAAA,GAAA,CAAA,IAAA,IAAAnF,EAAAC,CACiBgE,CAAAA,CAAAA,CAAO,OACpBE,CAAgB,CAAA,GAAA,CAChB,OACAA,CAAgB,CAAA,IAAA,CAChBA,CAAgB,CAAA,OAClB,GANFjE,CAAAC,CAAAA,CAAAA,CAAAvC,CAAAsC,CAAAA,CAAAA,CAAA,EAAAC,CAAA,CAAA,MAAA,IAAAJ,CAAAC,CAAAA,CAAAA,CAAA,cAAAE,CAAA,CAAA,CAAA,CAAA,CAQE,CAPA,IAAME,CAAAA,CADRD,EAAA,KAQE,CAAA,GAAA,CAAA,IAAA,IAAAH,CAAAC,CAAAA,CAAAA,CAAgC5C,EAAK,KAAM,CAAA,gCAAA,CAAiC+C,CAAiB8E,CAAAA,CAAM,GAAnGhF,CAAAC,CAAAA,CAAAA,CAAAvC,CAAAsC,CAAAA,CAAAA,CAAA,EAAAC,CAAA,CAAA,MAAA,IAAAJ,EAAAC,CAAA,CAAA,IAAA,EAAA,CAAA,EAAA,IAAA,CAAAE,EAAA,CAAsG,CAAA,CAAA,CAA3F,IAAMkF,EAAAA,CAAjBjF,EAAA,KAEI,CAAA,IAAMkF,CAAiB,CAAA,CACrB,QAASJ,CACT,CAAA,QAAA,CAAUG,EAAY,CAAA,eAAA,CACtB,qBAAsBpB,CAAQ,CAAA,oBAAA,CAC9B,SAAU,CACR,OAAA,CAASG,EACT,QAAU/D,CAAAA,CACZ,CACF,CAAA,CAEAuB,EACEC,CACAuD,CAAAA,CAAAA,CAAkB,wBAA0B,qBAC5CnB,CAAAA,CAAAA,CAAQ,qBACRqB,CACF,CAAA,CAEIF,CACFA,GAAAA,CAAAA,CAAkB,IAGpB,MAAME,EAIV,QA3BAlF,CA1CN,CAAA,CA0CMvC,EAAA,CAAAuC,CAAAA,EAAAA,CAAAA,OAAA,CAAAD,GAAAA,CAAAA,CAAAA,GAAAC,EAAAH,CAAA,CAAA,MAAA,CAAA,GAAA,MAAA,IAAAD,CAAAI,CAAAA,CAAAA,CAAA,KAAAH,CAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,GAAApC,CAAA,CAAA,MAAAA,EAAA,CARFuC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,MAAAA,CAAAA,CAlCJ,CAkCIvC,CAAA,CAAA,CAAAuC,WAAA,CAAAD,GAAAA,CAAAA,CAAAA,GAAAC,CAAAH,CAAAA,CAAAA,CAAA,oBAAAD,CAAAI,CAAAA,CAAAA,CAAA,IAAAH,CAAAA,CAAAA,CAAAA,CAAAA,EAAAA,CAAAA,OAAA,IAAApC,CAAA,CAAA,MAAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAsCA+D,EACEC,CACA,CAAA,aAAA,CACAoC,EAAQ,oBACV,EACF,OAASpG,CAAO,CAAA,CACd,IAAI6G,CAAAA,CAEJ,MAAI7G,CAAiBX,YAAAA,CAAAA,CACnBwH,CAAY7G,CAAAA,CAAAA,CAEZ6G,EAAYvD,CAAYtD,CAAAA,CAAK,CAG/B+D,CAAAA,CAAAA,CACEC,EACA,eACAoC,CAAAA,CAAAA,CAAQ,qBACRS,CACF,CAAA,CAEMA,CACR,CACF,CAAA,CAAA,CC7EMa,IAAAA,CAAAA,CAAN,KAAc,CAYZ,WAAA,CAAY1F,EAA6B,CA9B3C,IAAAtB,EAAAC,CAAAC,CAAAA,CAAAA,CAAA+G,CA+BI,CAAA,GAAI,CAAC3F,CAAQ,CAAA,uBAAA,EAA2BwB,GACtC,CAAA,MAAM,IAAInE,CACR,CAAA,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAIF,CAAA,CAGF,KAAK,OAAUiG,CAAAA,EAAAA,CAAe,MAAMtD,CAAO,CAAA,CAE3C,IAAM4F,CAAe,CAAA,CACnB,qBAAoBlH,CAAA,CAAA,IAAA,CAAK,QAAQ,YAAb,GAAA,IAAA,CAAA,KAAA,CAAA,CAAAA,EAA2B,kBAAsB,GAAA,CAAA,CACrE,aAAYC,CAAA,CAAA,IAAA,CAAK,QAAQ,YAAb,GAAA,IAAA,CAAA,KAAA,CAAA,CAAAA,EAA2B,UAAc,GAAA,CAAA,CACrD,QAAOC,CAAA,CAAA,IAAA,CAAK,QAAQ,YAAb,GAAA,IAAA,CAAA,KAAA,CAAA,CAAAA,EAA2B,KAAS,GAAA,CACzC,aAAc,GACd,CAAA,iBAAA,CAAmB,CACrB,CACA,CAAA,OAAA,CAAA,CAAA,CAAS+G,CAAA,CAAA,IAAA,CAAK,OAAQ,CAAA,YAAA,GAAb,YAAAA,CAA2B,CAAA,OAAA,GAAW,GACjD,CAGA,CAAA,IAAA,CAAK,OAAS,CACZ,YAAA,CAAc,IAAIlD,CAAYmD,CAAAA,CAAY,EAC1C,aAAe,CAAA,IAAInD,EAAYmD,CAAY,CAC7C,EAIA,IAAK,CAAA,UAAA,CAAa5F,CAAQ,CAAA,UAAA,EAAc,IAAInB,CAAAA,CAAqB,CAAE,qBAAwB+G,CAAAA,CAAAA,CAAa,QAAU,EAAM,CAAC,EAEzH,IAAK,CAAA,MAAA,CAAS,CACZ,YAAc5F,CAAAA,CAAAA,CAAQ,mBAAqB,IAAImD,CAAAA,CAC/C,cAAenD,CAAQ,CAAA,kBAAA,EAAsB,IAAImD,CACnD,EACF,CAkDM,YAAA,CAAaiB,CAAmF,CAAA,CAAA,OAAA5E,EAAA,IACpG,CAAA,IAAA,CAAA,WAAA,CAAA,IAAM/B,EAAOwF,CAA2B,CAAA,KAAA,CAAMmB,CAAO,CACrD,CAAA,OAAO,IAAI,OAAyC,CAAA,CAAC5B,EAASG,CAAW,GAAA,CACvE,IAAMD,CAAmF,CAAA,CACvF,QAASjF,CACT,CAAA,KAAA,CAAO,IAAK,CAAA,MAAA,CAAO,YACnB,CAAA,OAAA,CAAA+E,EACA,MAAAG,CAAAA,CAAAA,CACA,QAAS,IAAK,CAAA,mBAAA,CAAoB,KAAK,IAAI,CAC7C,EACA,IAAK,CAAA,MAAA,CAAO,aAAa,OAAQD,CAAAA,CAAI,EACvC,CAAC,CACH,GAEc,mBAAoB0B,CAAAA,CAAAA,CAAmF,CAAA5E,OAAAA,CAAAA,CAAA,IAlIvH,CAAA,IAAA,CAAA,WAAA,CAAA,IAAAd,EAmII,IAAMjB,CAAAA,CAAOwF,EAA2B,KAAMmB,CAAAA,CAAO,EACrD,OAAOD,EAAAA,CACL,CACE,KAAO,CAAA,IAAA,CAAK,OAAO,YACnB,CAAA,KAAA,CAAO1G,EAAK,KACZ,CAAA,MAAA,CAAQA,EAAK,MACb,CAAA,QAAA,CAAUA,CAAK,CAAA,QAAA,CACf,KAAOA,CAAAA,CAAAA,CAAK,MACZ,SAAW,CAAA,IAAA,CAAK,QAAQ,qBACxB,CAAA,oBAAA,CAAA,CAAsBiB,EAAAjB,CAAK,CAAA,OAAA,GAAL,YAAAiB,CAAc,CAAA,oBACtC,EACA,IAAK,CAAA,UACP,CACF,CAEO,CAAA,CAAA,UAAA,CAAW0F,EAAqG,CAAAnE,OAAAA,CAAAA,CAAA,IAlJzH,CAAA,IAAA,CAAA,WAAA,CAAA,IAAAvB,CAAAC,CAAAA,CAAAA,CAmJI,GAAI,CACF,IAAMlB,EAAOmG,EAAyB,CAAA,KAAA,CAAMQ,CAAO,CAEnD,CAAA,GAAA,CAAA,IAAA,IAAAhE,EAAAC,CAAmC+E,CAAAA,EAAAA,CACjC,CACE,KAAO3H,CAAAA,CAAAA,CAAK,MACZ,MAAQA,CAAAA,CAAAA,CAAK,OACb,QAAUA,CAAAA,CAAAA,CAAK,SACf,KAAOA,CAAAA,CAAAA,CAAK,MACZ,SAAW,CAAA,IAAA,CAAK,QAAQ,mBACxB,CAAA,oBAAA,CAAA,CAAsBiB,EAAAjB,CAAK,CAAA,OAAA,GAAL,YAAAiB,CAAc,CAAA,oBACtC,EACA,IAAK,CAAA,UACP,GAVA4B,CAAAC,CAAAA,CAAAA,CAAAvC,EAAAsC,CAAA,CAAA,CAAA,CAAAC,CAAA,CAAA,MAAA,IAAAJ,CAAAC,CAAAA,CAAAA,CAAA,cAAAE,CAAA,CAAA,CAAA,CAAA,CAWE,CAXS,IAAMmF,CAAAA,CAAjBlF,EAAA,KAWE,CAAA,MAAMkF,UAXRlF,CAtJN,CAAA,CAsJMvC,EAAA,CAAAuC,CAAAA,EAAAA,CAAAA,OAAA,KAAAD,CAAAC,GAAAA,CAAAA,CAAAH,EAAA,MAAAD,CAAAA,GAAAA,MAAAA,IAAAA,CAAAA,CAAAI,CAAA,CAAA,IAAA,CAAAH,CAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,GAAApC,EAAA,MAAAA,CAAAA,CAAA,IAaF,CAASA,MAAAA,CAAAA,CAAO,CACd,MAAIA,CAAAA,YAAiBX,EAAoBW,CAC9B,CAAA,IAAIX,EAAcW,CAAA,EAAA,IAAA,CAAA,KAAA,CAAA,CAAAA,EAAe,OAAS,CAAA,GAAA,CAAA,CAAMW,EAAAX,CAAA,EAAA,IAAA,CAAA,KAAA,CAAA,CAAAA,CAAe,CAAA,QAAA,GAAf,IAAAW,CAAAA,KAAAA,CAAAA,CAAAA,CAAAA,CAAyB,IAAI,CAC1F,CACF,GA6CM,aAAcyF,CAAAA,CAAAA,CAAqF,QAAA5E,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,WAAA,CACvG,IAAM/B,CAAOqG,CAAAA,CAAAA,CAA4B,MAAMM,CAAO,CAAA,CACtD,OAAO,IAAI,OAAA,CAA0C,CAAC5B,CAASG,CAAAA,CAAAA,GAAW,CACxE,IAAMD,CAAqF,CAAA,CACzF,QAASjF,CACT,CAAA,KAAA,CAAO,KAAK,MAAO,CAAA,aAAA,CACnB,QAAA+E,CACA,CAAA,MAAA,CAAAG,EACA,OAAS,CAAA,IAAA,CAAK,yBAAyB,IAAK,CAAA,IAAI,CAClD,CACA,CAAA,IAAA,CAAK,OAAO,aAAc,CAAA,OAAA,CAAQD,CAAI,EACxC,CAAC,CACH,GAEc,wBAAyB0B,CAAAA,CAAAA,CAAqF,QAAA5E,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,WAAA,CAlO9H,IAAAd,CAmOI,CAAA,IAAMjB,EAAOqG,CAA4B,CAAA,KAAA,CAAMM,CAAO,CACtD,CAAA,OAAOa,GACL,CACE,KAAA,CAAO,KAAK,MAAO,CAAA,aAAA,CACnB,KAAOxH,CAAAA,CAAAA,CAAK,KACZ,CAAA,MAAA,CAAQA,EAAK,MACb,CAAA,iBAAA,CAAmBA,EAAK,iBACxB,CAAA,SAAA,CAAW,KAAK,OAAQ,CAAA,sBAAA,CACxB,sBAAsBiB,CAAAjB,CAAAA,CAAAA,CAAK,UAAL,IAAAiB,CAAAA,KAAAA,CAAAA,CAAAA,CAAAA,CAAc,oBACtC,CACA,CAAA,IAAA,CAAK,UACP,CACF,CAAA,CAAA,CAGF,EAhOMgH,CAAAA,CA+NG,YAAerI,CAAAA,CAAAA","file":"index.js","sourcesContent":["class GatewayError extends Error {\n status: number;\n data: unknown;\n\n constructor(message: string, status: number = 500, data?: unknown) {\n super(message);\n this.name = \"GatewayError\";\n this.status = status;\n this.data = data;\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, GatewayError);\n }\n }\n}\n\nexport { GatewayError };\n","import { GatewayBaseError } from \"@adaline/types\";\n\nconst HttpClientErrorLiteral = \"HttpClientError\" as const;\nclass HttpClientError extends GatewayBaseError {\n readonly info: string;\n readonly cause: unknown;\n\n constructor({ info, cause }: { info: string; cause: unknown }) {\n super({ info, cause }, HttpClientErrorLiteral);\n this.info = info;\n this.cause = cause;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n\n static isHttpClientError(error: unknown): error is HttpClientError {\n return error instanceof HttpClientError;\n }\n}\n\nconst HttpRequestErrorLiteral = \"HttpRequestError\" as const;\nclass HttpRequestError extends GatewayBaseError {\n readonly info: string;\n readonly cause: { \n status: number;\n headers: Record<string, string>;\n data: unknown;\n };\n\n constructor(message: string, status: number = 500, headers: Record<string, string>, data: unknown) {\n super({ info: message, cause: { status, headers, data } }, HttpRequestErrorLiteral);\n this.info = message;\n this.cause = { status, headers, data } ;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n\n static isHttpRequestError(error: unknown): error is HttpRequestError {\n return error instanceof HttpRequestError;\n }\n}\n\nexport { HttpClientError, HttpRequestError };","import { HttpClientError, HttpRequestError } from \"./http-client.error\";\n\nimport { z } from \"zod\";\nimport { ProxyAgent } from \"proxy-agent\";\nimport axios, { AxiosError, AxiosInstance, AxiosRequestConfig } from \"axios\";\n\nimport { HttpClient, HttpClientResponse } from \"./http-client.interface\";\n\ninterface HttpClientConfig {\n timeoutInMilliseconds?: number;\n axiosInstance?: AxiosInstance;\n proxyUrl?: string;\n}\n\nconst convertHeadersToRecord = (headers: any): Record<string, string> => {\n const headerRecord: Record<string, string> = {};\n if (headers && (typeof headers === \"object\" || headers instanceof Headers)) {\n Object.entries(headers).forEach(([key, value]) => {\n if (Array.isArray(value)) {\n headerRecord[key] = value.join(\", \");\n } else if (typeof value === \"string\") {\n headerRecord[key] = value;\n } else {\n headerRecord[key] = \"\";\n }\n });\n }\n\n return headerRecord;\n};\n\nconst axiosToHttpRequestError = (error: AxiosError): HttpRequestError => {\n const message = error?.message || \"An unexpected error occurred\";\n const status = error?.response?.status || 500;\n const headers = convertHeadersToRecord(error?.response?.headers) || {};\n const data = error?.response?.data || {};\n return new HttpRequestError(message, status, headers, data);\n};\n\nclass IsomorphicHttpClient implements HttpClient {\n private defaultTimeout?: number;\n private client: AxiosInstance;\n private httpProxyAgent?: ProxyAgent;\n private httpsProxyAgent?: ProxyAgent;\n\n constructor(config: HttpClientConfig) {\n const { axiosInstance, timeoutInMilliseconds } = config;\n this.client = axiosInstance || axios.create();\n\n const Timeout = z.number().int().positive().optional();\n this.defaultTimeout = Timeout.parse(timeoutInMilliseconds);\n\n this.client.defaults.timeout = this.defaultTimeout;\n\n if (config.proxyUrl) {\n if (config.proxyUrl.startsWith(\"http://\")) {\n // TODO: check how to properly set this\n // eslint-disable-next-line turbo/no-undeclared-env-vars\n process.env.HTTP_PROXY = config.proxyUrl;\n this.httpProxyAgent = new ProxyAgent();\n } else if (config.proxyUrl.startsWith(\"https://\")) {\n // TODO: check how to properly set this\n // eslint-disable-next-line turbo/no-undeclared-env-vars\n process.env.HTTPS_PROXY = config.proxyUrl;\n this.httpsProxyAgent = new ProxyAgent({\n rejectUnauthorized: false, // Don't check SSL cert\n });\n } else {\n throw new HttpClientError({ \n info: \"Invalid proxy URL, only http and https proxies are supported\", \n cause: { proxyUrl: config.proxyUrl } \n });\n }\n }\n }\n\n isNodeEnvironment = (): boolean => {\n return typeof process !== \"undefined\" && process.versions != null && process.versions.node != null;\n };\n\n private async makeRequest<T>(\n method: \"get\" | \"post\" | \"put\" | \"delete\" | \"patch\",\n url: string,\n dataOrParams: Record<string, unknown>,\n additionalConfig: AxiosRequestConfig = {},\n timeoutInMilliseconds?: number\n ): Promise<HttpClientResponse<T>> {\n try {\n const config: AxiosRequestConfig = {\n ...(method === \"get\" || method === \"delete\" ? { params: dataOrParams } : { data: dataOrParams }),\n ...additionalConfig,\n timeout: timeoutInMilliseconds || this.defaultTimeout,\n };\n\n if (this.httpProxyAgent) {\n config.httpsAgent = this.httpProxyAgent;\n } else if (this.httpsProxyAgent) {\n config.httpsAgent = this.httpsProxyAgent;\n }\n\n if (method === \"get\" || method === \"delete\") {\n const resp = await this.client[method]<T>(url, config);\n return {\n data: resp.data,\n headers: convertHeadersToRecord(resp.headers),\n status: {\n code: resp.status,\n text: resp.statusText,\n },\n };\n } else {\n const resp = await this.client[method]<T>(url, config.data, {\n ...config,\n params: config.params,\n });\n return {\n data: resp.data,\n headers: convertHeadersToRecord(resp.headers),\n status: {\n code: resp.status,\n text: resp.statusText,\n },\n };\n }\n } catch (error) {\n if (axios.isAxiosError(error)) throw axiosToHttpRequestError(error);\n // \n // TODO: change error info to be more specific\n throw new HttpClientError({ info: \"An unexpected error occurred\", cause: error });\n }\n }\n\n async *stream<T>(\n url: string,\n method: \"get\" | \"post\",\n data?: Record<string, unknown>,\n headers?: Record<string, string>, // TODO: remove 'undefined', fix in stream-chat.handler.ts\n options?: {\n abortSignal?: AbortSignal;\n }\n ): AsyncGenerator<T, void, unknown> {\n try {\n if (this.isNodeEnvironment()) {\n // TODO: should streaming need proxy-agent?\n const response = await this.client.request({\n method,\n url,\n headers,\n data,\n responseType: \"stream\",\n signal: options?.abortSignal,\n });\n\n for await (const chunk of response.data) {\n const decodedChunk = chunk.toString();\n yield decodedChunk as unknown as T;\n }\n } else {\n const fetchConfig: RequestInit = {\n method,\n headers: new Headers({\n ...headers,\n }),\n body: method !== \"get\" ? JSON.stringify(data) : undefined,\n signal: options?.abortSignal,\n };\n const response = await fetch(url, fetchConfig);\n\n if (!response.ok) {\n const text: any = await response.json();\n throw new HttpRequestError(\n `Request failed with status ${response.status}`,\n response.status,\n convertHeadersToRecord(response.headers),\n text\n );\n }\n\n if (response.body) {\n const reader = response.body.getReader();\n while (true) {\n const { done, value } = await reader.read();\n if (done) {\n const decodedValue = new TextDecoder().decode(value, { stream: true });\n yield decodedValue as unknown as T;\n break;\n }\n\n const decodedValue = new TextDecoder().decode(value, { stream: true });\n yield decodedValue as unknown as T;\n }\n } else {\n // TODO: are there available headers in response? most likely not but check once\n throw new HttpRequestError(\"Cannot stream the body of the response.\", 500, {}, response);\n }\n }\n } catch (error: any) {\n // TODO: make errors in parity with complete-chat\n // TODO: fix errors for 400 bad requests -- can happen in various ways but actual HTTP error is not being thrown, some self reference problem\n if (HttpRequestError.isHttpRequestError(error)) throw error;\n if (error?.name === \"AbortError\") throw new HttpRequestError(\"AbortError\", 408, {}, {}); // TODO: need for headers, data?\n if (error?.name === \"CanceledError\") throw new HttpRequestError(\"AbortError\", 408, {}, {}); // TODO: need for headers, data?\n // TODO: how to convert non-axios errors to HttpRequestError for fetch aka browser environment\n if (axios.isAxiosError(error)) throw axiosToHttpRequestError(error);\n // TODO: change error info to be more specific\n throw new HttpClientError({ info: \"An unexpected error occurred\", cause: error });\n }\n }\n\n async get<T>(\n url: string,\n params?: Record<string, unknown>,\n headers?: Record<string, string | undefined>\n ): Promise<HttpClientResponse<T>> {\n return this.makeRequest<T>(\"get\", url, params || {}, { headers });\n }\n\n async post<T>(url: string, data?: Record<string, unknown>, headers?: Record<string, string | undefined>): Promise<HttpClientResponse<T>> {\n return this.makeRequest<T>(\"post\", url, data || {}, { headers });\n }\n\n async put<T>(url: string, data?: Record<string, unknown>, headers?: Record<string, string | undefined>): Promise<HttpClientResponse<T>> {\n return this.makeRequest<T>(\"put\", url, data || {}, { headers });\n }\n\n async delete<T>(\n url: string,\n params?: Record<string, unknown>,\n headers?: Record<string, string | undefined>\n ): Promise<HttpClientResponse<T>> {\n return this.makeRequest<T>(\"delete\", url, params || {}, { headers });\n }\n\n async patch<T>(\n url: string,\n data?: Record<string, unknown>,\n headers?: Record<string, string | undefined>\n ): Promise<HttpClientResponse<T>> {\n return this.makeRequest<T>(\"patch\", url, data || {}, { headers });\n }\n\n}\n\nexport { IsomorphicHttpClient };\n","import { GatewayBaseError } from \"@adaline/types\";\n\nconst QueueTaskTimeoutErrorLiteral = \"QueueTaskTimeoutError\" as const;\nclass QueueTaskTimeoutError extends GatewayBaseError {\n readonly info: string;\n readonly cause: unknown;\n\n constructor({ info, cause }: { info: string; cause: unknown }) {\n super({ info, cause }, QueueTaskTimeoutErrorLiteral);\n this.info = info;\n this.cause = cause;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n\n static isQueueTaskTimeoutError(error: unknown): error is QueueTaskTimeoutError {\n return error instanceof QueueTaskTimeoutError;\n }\n}\n\nexport { QueueTaskTimeoutError };\n","import { z } from \"zod\";\n\nimport { type Cache } from \"../cache\";\n\ntype QueueTask<Request, Response> = {\n request: Request;\n cache: Cache<Response>;\n resolve: (value: Response) => void;\n reject: (error: any) => void;\n execute: (request: Request) => Promise<Response>;\n};\n\ninterface Queue<Request, Response> {\n enqueue(task: QueueTask<Request, Response>): void;\n}\n\nconst QueueOptions = z.object({\n maxConcurrentTasks: z.number().int().positive(),\n retryCount: z.number().int().positive(),\n timeout: z.number().int().positive(),\n retry: z.object({\n initialDelay: z.number().int().positive(),\n exponentialFactor: z.number().int().positive(),\n }),\n});\ntype QueueOptionsType = z.infer<typeof QueueOptions>;\n\nexport { \n QueueOptions,\n type Queue, \n type QueueOptionsType, \n type QueueTask \n};\n","import sha256 from \"crypto-js/sha256.js\";\n\nimport { GatewayError } from \"../errors/errors\";\n\nconst getCacheKeyHash = (prefix: string, object: object): string => {\n return sha256(prefix + JSON.stringify(object)).toString();\n};\n\nconst castToError = (err: any): GatewayError => {\n if (err instanceof GatewayError) return err;\n if (err instanceof Error) return new GatewayError(err.message as string);\n return new GatewayError(err);\n};\n\nconst isRunningInBrowser = () => {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n return typeof window !== \"undefined\" && typeof window.document !== \"undefined\" && typeof navigator !== \"undefined\";\n};\n\nconst logLevels = {\n error: 0,\n warn: 1,\n info: 2,\n};\n\nconst logColors = {\n error: \"color: red\",\n warn: \"color: yellow\",\n info: \"color: green\",\n};\n\nconst verbose = (level: keyof typeof logLevels, action: string, ...args: any[]) => {\n if (!isRunningInBrowser()) {\n // Node.js environment\n switch (level) {\n case \"error\":\n console.error(...args);\n break;\n case \"warn\":\n console.warn(...args);\n break;\n default:\n console.log(...args);\n }\n } else if (isRunningInBrowser()) {\n // Browser environment\n console.log(`%c[${level.toUpperCase()}] [${action}]`, logColors[level], ...args);\n }\n};\n\nconst debug = (level: keyof typeof logLevels, action: string, ...args: any[]) => {\n if (isRunningInBrowser()) return;\n // eslint-disable-next-line turbo/no-undeclared-env-vars\n if (process?.env?.DEBUG !== \"true\") return;\n verbose(level, action, ...args);\n};\n\ntype Prettify<T> = {\n [K in keyof T]: T[K];\n} & unknown;\n\ninterface BaseCallback {\n [key: string]: (...args: any[]) => void | Promise<void>;\n}\n\ntype ArgumentsType<T> = T extends (...args: infer A) => any ? A : never;\n\nconst safelyInvokeCallbacks = async <T extends BaseCallback, K extends keyof T>(\n callbacks: T[],\n name: keyof T,\n ...args: ArgumentsType<T[K]>\n): Promise<void> => {\n const promises: Promise<void>[] = [];\n\n callbacks.forEach((callback) => {\n const func = callback[name];\n if (typeof func === \"function\") {\n try {\n const result = func(...args);\n if (result instanceof Promise) {\n promises.push(result);\n }\n } catch (error) {\n debug(\"error\", `SAFELY_INVOKE_CALLBACKS:${String(name)}:`, error);\n }\n }\n });\n\n await Promise.allSettled(promises);\n};\n\nconst delay = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms));\n\nconst calcRateLimitRetryTimeout = (\n maxRetries: number,\n backOffInitialDelay: number,\n backOffMultiplier: number,\n executionTimePerAttempt: number\n): number => {\n let totalDelayTime = 0;\n const totalExecutionTime = maxRetries * executionTimePerAttempt;\n\n for (let i = 0; i < maxRetries; i++) {\n totalDelayTime += backOffInitialDelay * Math.pow(backOffMultiplier, i);\n }\n\n return totalDelayTime + totalExecutionTime;\n};\n\nconst defaultShouldRetry = (status: number) => {\n // Rate limit errors are handled separately.\n\n // Retry on request timeouts.\n if (status === 408) return true;\n // Retry on lock timeouts.\n if (status === 409) return true;\n // Retry internal errors.\n if (status >= 500) return true;\n\n return false;\n};\n\nexport {\n calcRateLimitRetryTimeout,\n castToError,\n debug,\n defaultShouldRetry,\n delay,\n getCacheKeyHash,\n isRunningInBrowser,\n safelyInvokeCallbacks,\n type Prettify,\n};\n","import { Queue, QueueOptionsType, QueueTask } from \"./queue.interface\";\nimport { QueueTaskTimeoutError } from \"./queue.error\";\nimport { GatewayCompleteChatRequest } from \"../../gateway.types\";\nimport { HttpRequestError } from \"./../http-client\";\nimport { delay } from \"../../utils\";\n\nclass SimpleQueue<Request, Response> implements Queue<Request, Response> {\n private options: QueueOptionsType;\n private activeTasks = 0;\n private queue: QueueTask<Request, Response>[] = [];\n\n constructor(options: QueueOptionsType) {\n this.options = options;\n }\n\n public enqueue(task: QueueTask<Request, Response>): void {\n this.queue.push(task);\n this.processQueue();\n }\n\n private withTimeout(task: QueueTask<Request, Response>): Promise<Response> {\n return new Promise((resolve, reject) => {\n const timeout = setTimeout(() => reject(\n new QueueTaskTimeoutError({ \n info: \"Queue task timeout\", \n cause: new Error(\"Queue task timeout\")\n })\n ),\n this.options.timeout\n );\n\n task\n .execute(task.request)\n .then((result) => {\n clearTimeout(timeout);\n resolve(result);\n })\n .catch((error) => {\n clearTimeout(timeout);\n reject(error);\n });\n });\n }\n\n private async executeWithRetry(task: QueueTask<Request, Response>, retryRemaining: number): Promise<Response> {\n try {\n return await this.withTimeout(task);\n } catch (error) {\n if (retryRemaining === 0) {\n throw error;\n }\n\n let shouldRetry = true;\n let delayMs =\n this.options.retry.initialDelay * Math.pow(this.options.retry.exponentialFactor, this.options.retryCount - retryRemaining);\n if (HttpRequestError.isHttpRequestError(error)) {\n // rate limiting error\n if (error.cause.status === 429) {\n const taskRequest = GatewayCompleteChatRequest.safeParse(task.request);\n if (taskRequest.success) {\n const retryDelay = taskRequest.data.model.getRetryDelay(error.cause.headers);\n shouldRetry = retryDelay.shouldRetry;\n // valid delayMs is returned from model\n if (retryDelay.delayMs > 0) {\n delayMs = retryDelay.delayMs;\n }\n }\n }\n\n if (error.cause.status >= 500 && error.cause.status < 600) {\n // implement retry logic for 500 errors\n // else defaults to exponential backoff\n }\n } else {\n // implement retry logic for non http-request errors\n // else defaults to exponential backoff\n }\n\n if (!shouldRetry) {\n throw error;\n } else {\n await delay(delayMs);\n return this.executeWithRetry(task, retryRemaining - 1);\n }\n }\n }\n\n private async processQueue() {\n if (this.activeTasks >= this.options.maxConcurrentTasks) return;\n\n const task = this.queue.shift();\n if (!task) return;\n\n this.activeTasks += 1;\n\n try {\n const response: Response = await this.executeWithRetry(task, this.options.retryCount);\n task.resolve(response);\n } catch (error) {\n task.reject(error);\n } finally {\n this.activeTasks -= 1;\n this.processQueue();\n }\n }\n}\n\nexport { SimpleQueue };\n","import { LRUCache as LRU } from \"lru-cache\";\n\nimport { type Cache } from \"./cache.interface\";\n\nclass LRUCache<T extends object> implements Cache<T> {\n private cache: LRU<string, T>;\n\n constructor(maxEntries: number = 1000) {\n this.cache = new LRU<string, T>({ \n max: maxEntries,\n allowStale: false,\n updateAgeOnGet: false,\n });\n }\n\n get(key: string): T | undefined {\n return this.cache.get(key);\n }\n\n set(key: string, value: T): void {\n this.cache.set(key, value);\n }\n\n delete(key: string): void {\n this.cache.delete(key);\n }\n\n clear(): void {\n this.cache.clear();\n }\n}\n\nexport { LRUCache, type Cache };","import { z } from \"zod\";\n\nimport { ChatModelV1, EmbeddingModelV1 } from \"@adaline/provider\";\nimport { Config, Message, Tool, EmbeddingRequests } from \"@adaline/types\";\n\nimport { HttpClient, Cache, QueueOptions } from \"./plugins\";\nimport { \n CompleteChatHandlerResponseType, \n GetEmbeddingsHandlerResponseType, \n CompleteChatCallbackType, \n StreamChatCallbackType,\n GetEmbeddingsCallbackType,\n} from \"./handlers\";\n\n// TODO: add caller provided queue(s)\nconst GatewayOptions = z.object({\n queueOptions: QueueOptions.partial().optional(),\n dangerouslyAllowBrowser: z.boolean().optional(),\n httpClient: z.custom<HttpClient>().optional(),\n completeChatCache: z.custom<Cache<CompleteChatHandlerResponseType>>().optional(),\n completeChatCallbacks: z.array(z.custom<CompleteChatCallbackType>()).nonempty().optional(),\n getEmbeddingsCache: z.custom<Cache<GetEmbeddingsHandlerResponseType>>().optional(),\n getEmbeddingsCallbacks: z.array(z.custom<GetEmbeddingsCallbackType>()).nonempty().optional(),\n streamChatCallbacks: z.array(z.custom<StreamChatCallbackType>()).nonempty().optional(),\n});\ntype GatewayOptionsType = z.infer<typeof GatewayOptions>;\n\nconst GatewayCompleteChatRequestOptions = z.object({\n metadataForCallbacks: z.any().optional(),\n});\ntype GatewayCompleteChatRequestOptionsType = z.infer<typeof GatewayCompleteChatRequestOptions>;\n\nconst GatewayCompleteChatRequest = z.object({\n model: z.custom<ChatModelV1>(),\n config: Config(),\n messages: z.array(Message()),\n tools: z.array(Tool()).optional(),\n options: GatewayCompleteChatRequestOptions.optional(),\n});\ntype GatewayCompleteChatRequestType = z.infer<typeof GatewayCompleteChatRequest>;\n\nconst GatewayStreamChatRequestOptions = z.object({\n metadataForCallbacks: z.any().optional(),\n});\ntype GatewayStreamChatRequestOptionsType = z.infer<typeof GatewayStreamChatRequestOptions>;\n\nconst GatewayStreamChatRequest = z.object({\n model: z.custom<ChatModelV1>(),\n config: Config(),\n messages: z.array(Message()),\n tools: z.array(Tool()).optional(),\n options: GatewayStreamChatRequestOptions.optional(),\n});\ntype GatewayStreamChatRequestType = z.infer<typeof GatewayStreamChatRequest>;\n\nconst GatewayGetEmbeddingsRequestOptions = z.object({\n queuePriority: z.number().int().positive().optional(),\n metadataForCallbacks: z.any().optional(),\n});\ntype GatewayGetEmbeddingsRequestOptionsType = z.infer<typeof GatewayGetEmbeddingsRequestOptions>;\n\nconst GatewayGetEmbeddingsRequest = z.object({\n model: z.custom<EmbeddingModelV1>(),\n config: Config(),\n embeddingRequests: EmbeddingRequests(),\n options: GatewayGetEmbeddingsRequestOptions.optional(),\n});\ntype GatewayGetEmbeddingsRequestType = z.infer<typeof GatewayGetEmbeddingsRequest>;\n\nexport {\n GatewayOptions,\n GatewayCompleteChatRequest,\n GatewayCompleteChatRequestOptions,\n GatewayStreamChatRequest,\n GatewayStreamChatRequestOptions,\n GatewayGetEmbeddingsRequest,\n GatewayGetEmbeddingsRequestOptions,\n type GatewayOptionsType,\n type GatewayCompleteChatRequestType,\n type GatewayCompleteChatRequestOptionsType,\n type GatewayStreamChatRequestType,\n type GatewayStreamChatRequestOptionsType,\n type GatewayGetEmbeddingsRequestType,\n type GatewayGetEmbeddingsRequestOptionsType,\n};","import { z } from \"zod\";\n\nimport { ChatModelV1 } from \"@adaline/provider\";\nimport { Config, Message, Tool, ChatResponse } from \"@adaline/types\";\n\nimport { GatewayError } from \"../../errors\";\nimport { HttpRequestError, Cache } from \"../../plugins\";\n\nconst CompleteChatHandlerRequest = z.object({\n cache: z.custom<Cache<CompleteChatHandlerResponseType>>(),\n model: z.custom<ChatModelV1>(),\n config: Config(),\n messages: z.array(Message()),\n tools: z.array(Tool()).optional(),\n callbacks: z.array(z.custom<CompleteChatCallbackType>()).nonempty().optional(),\n metadataForCallbacks: z.any().optional(),\n});\ntype CompleteChatHandlerRequestType = z.infer<typeof CompleteChatHandlerRequest>;\n\nconst CompleteChatHandlerResponse = z.object({\n request: z.object({\n config: Config(),\n messages: z.array(Message()),\n tools: z.array(Tool()).optional(),\n }),\n response: ChatResponse,\n latencyInMs: z.number().int().positive(),\n metadataForCallbacks: z.any().optional(),\n provider: z.object({\n request: z.any(),\n response: z.any(),\n }),\n});\ntype CompleteChatHandlerResponseType = z.infer<typeof CompleteChatHandlerResponse>;\n\ntype CompleteChatCallbackType<M = any> = {\n onChatStart?: (metadata?: M) => Promise<void> | void;\n onChatCached?: (metadata?: M, response?: CompleteChatHandlerResponseType) => Promise<void> | void;\n onChatComplete?: (metadata?: M, response?: CompleteChatHandlerResponseType) => Promise<void> | void;\n // TODO: which other errors should we handle?\n onChatError?: (metadata?: M, error?: GatewayError | HttpRequestError) => Promise<void> | void;\n};\n\nexport {\n CompleteChatHandlerRequest,\n CompleteChatHandlerResponse,\n type CompleteChatCallbackType,\n type CompleteChatHandlerRequestType,\n type CompleteChatHandlerResponseType,\n};\n","import { GatewayError } from \"../../errors/errors\";\nimport { HttpClient, HttpRequestError } from \"../../plugins\";\nimport { castToError, getCacheKeyHash, safelyInvokeCallbacks } from \"../../utils\";\nimport {\n CompleteChatCallbackType,\n CompleteChatHandlerRequest,\n CompleteChatHandlerRequestType,\n CompleteChatHandlerResponseType,\n} from \"./complete-chat.types\";\n\nasync function handleCompleteChat(request: CompleteChatHandlerRequestType, client: HttpClient): Promise<CompleteChatHandlerResponseType> {\n const data = CompleteChatHandlerRequest.parse(request);\n const callbacks = request.callbacks || [];\n\n try {\n safelyInvokeCallbacks<CompleteChatCallbackType, keyof CompleteChatCallbackType>(\n callbacks,\n \"onChatStart\",\n request.metadataForCallbacks\n );\n\n const providerData = {\n config: data.config,\n messages: data.messages,\n tools: data.tools,\n };\n\n const providerRequest = {\n url: await data.model.getCompleteChatUrl(data.config, data.messages, data.tools),\n headers: await data.model.getCompleteChatHeaders(data.config, data.messages, data.tools),\n data: await data.model.getCompleteChatData(data.config, data.messages, data.tools),\n };\n\n const cacheKey = getCacheKeyHash(`complete-chat:${providerRequest.url}:${data.model.modelSchema.name}`, providerData);\n const cachedResponse = request.cache.get(cacheKey);\n if (cachedResponse) {\n safelyInvokeCallbacks<CompleteChatCallbackType, keyof CompleteChatCallbackType>(\n callbacks,\n \"onChatCached\",\n request.metadataForCallbacks,\n cachedResponse\n );\n return cachedResponse;\n }\n\n const now = Date.now();\n const providerResponse = await client.post(providerRequest.url, providerRequest.data, providerRequest.headers);\n const latencyInMs = Date.now() - now;\n\n const response: CompleteChatHandlerResponseType = {\n request: providerData,\n response: data.model.transformCompleteChatResponse(providerResponse.data),\n latencyInMs,\n metadataForCallbacks: request.metadataForCallbacks,\n provider: {\n request: providerRequest,\n response: providerResponse,\n },\n };\n\n request.cache.set(cacheKey, response);\n \n safelyInvokeCallbacks<CompleteChatCallbackType, keyof CompleteChatCallbackType>(\n callbacks,\n \"onChatComplete\",\n request.metadataForCallbacks,\n response\n );\n\n return response;\n } catch (error) {\n // TODO: maybe handle other types of errors from model object ?\n let safeError: GatewayError | HttpRequestError;\n\n if (HttpRequestError.isHttpRequestError(error)) {\n safeError = error;\n } else if (error instanceof GatewayError) {\n safeError = error;\n } else {\n safeError = castToError(error);\n }\n\n safelyInvokeCallbacks<CompleteChatCallbackType, keyof CompleteChatCallbackType>(\n callbacks,\n \"onChatError\",\n request.metadataForCallbacks,\n safeError\n );\n\n throw safeError;\n }\n}\n\nexport { handleCompleteChat };\n","import { z } from \"zod\";\n\nimport { EmbeddingModelV1 } from \"@adaline/provider\";\nimport { Config, EmbeddingRequests, EmbeddingResponse } from \"@adaline/types\";\n\nimport { GatewayError } from \"../../errors\";\nimport { HttpRequestError, Cache } from \"../../plugins\";\n\nconst GetEmbeddingsHandlerRequest = z.object({\n cache: z.custom<Cache<GetEmbeddingsHandlerResponseType>>(),\n model: z.custom<EmbeddingModelV1>(),\n config: Config(),\n embeddingRequests: EmbeddingRequests(),\n callbacks: z.array(z.custom<GetEmbeddingsCallbackType>()).nonempty().optional(),\n metadataForCallbacks: z.any().optional(),\n});\ntype GetEmbeddingsHandlerRequestType = z.infer<typeof GetEmbeddingsHandlerRequest>;\n\nconst GetEmbeddingsHandlerResponse = z.object({\n request: z.object({\n config: Config(),\n embeddingRequests: EmbeddingRequests(),\n }),\n response: EmbeddingResponse,\n latencyInMs: z.number().int().positive(),\n metadataForCallbacks: z.any().optional(),\n provider: z.object({\n request: z.any(),\n response: z.any(),\n }),\n});\ntype GetEmbeddingsHandlerResponseType = z.infer<typeof GetEmbeddingsHandlerResponse>;\n\ntype GetEmbeddingsCallbackType<M = any> = {\n onGetEmbeddingsStart?: (metadata?: M) => Promise<void> | void;\n onGetEmbeddingsCached?: (metadata?: M, response?: GetEmbeddingsHandlerResponseType) => Promise<void> | void;\n onGetEmbeddingsComplete?: (metadata?: M, response?: GetEmbeddingsHandlerResponseType) => Promise<void> | void;\n // TODO: which other errors should we handle?\n onGetEmbeddingsError?: (metadata?: M, error?: GatewayError | HttpRequestError) => Promise<void> | void;\n};\n\nexport {\n GetEmbeddingsHandlerRequest,\n GetEmbeddingsHandlerResponse,\n type GetEmbeddingsHandlerRequestType,\n type GetEmbeddingsHandlerResponseType,\n type GetEmbeddingsCallbackType,\n};\n","import { GatewayError } from \"../../errors/errors\";\nimport { HttpClient, HttpRequestError } from \"../../plugins\";\nimport { castToError, getCacheKeyHash, safelyInvokeCallbacks } from \"../../utils\";\nimport {\n GetEmbeddingsCallbackType,\n GetEmbeddingsHandlerRequest,\n GetEmbeddingsHandlerRequestType,\n GetEmbeddingsHandlerResponseType,\n} from \"./get-embeddings.types\";\n\nasync function handleGetEmbeddings(request: GetEmbeddingsHandlerRequestType, client: HttpClient): Promise<GetEmbeddingsHandlerResponseType> {\n const data = GetEmbeddingsHandlerRequest.parse(request);\n const callbacks = request.callbacks || [];\n\n try {\n safelyInvokeCallbacks<GetEmbeddingsCallbackType, keyof GetEmbeddingsCallbackType>(\n callbacks,\n \"onGetEmbeddingsStart\",\n request.metadataForCallbacks\n );\n\n const providerData = {\n config: data.config,\n embeddingRequests: data.embeddingRequests,\n };\n\n const providerRequest = {\n url: await data.model.getGetEmbeddingsUrl(data.config, data.embeddingRequests),\n headers: await data.model.getGetEmbeddingsHeaders(data.config, data.embeddingRequests),\n data: await data.model.getGetEmbeddingsData(data.config, data.embeddingRequests),\n };\n\n const cacheKey = getCacheKeyHash(`get-embeddings:${providerRequest.url}:${data.model.modelSchema.name}`, providerData);\n const cachedResponse = request.cache.get(cacheKey);\n if (cachedResponse) {\n safelyInvokeCallbacks<GetEmbeddingsCallbackType, keyof GetEmbeddingsCallbackType>(\n callbacks,\n \"onGetEmbeddingsCached\",\n request.metadataForCallbacks,\n cachedResponse\n );\n return cachedResponse;\n }\n\n const now = Date.now();\n const providerResponse = await client.post(providerRequest.url, providerRequest.data, providerRequest.headers);\n const latencyInMs = Date.now() - now;\n\n const response: GetEmbeddingsHandlerResponseType = {\n request: providerData,\n response: data.model.transformGetEmbeddingsResponse(providerResponse.data),\n latencyInMs,\n metadataForCallbacks: request.metadataForCallbacks,\n provider: {\n request: providerRequest,\n response: providerResponse,\n },\n };\n\n request.cache.set(cacheKey, response);\n\n safelyInvokeCallbacks<GetEmbeddingsCallbackType, keyof GetEmbeddingsCallbackType>(\n callbacks,\n \"onGetEmbeddingsComplete\",\n request.metadataForCallbacks,\n response\n );\n\n return response;\n } catch (error) {\n // TODO: maybe handle other types of errors from model object ?\n let safeError: GatewayError | HttpRequestError;\n\n if (HttpRequestError.isHttpRequestError(error)) {\n safeError = error;\n } else if (error instanceof GatewayError) {\n safeError = error;\n } else {\n safeError = castToError(error);\n }\n\n safelyInvokeCallbacks<GetEmbeddingsCallbackType, keyof GetEmbeddingsCallbackType>(\n callbacks,\n \"onGetEmbeddingsError\",\n request.metadataForCallbacks,\n safeError\n );\n\n throw safeError;\n }\n}\n\nexport { handleGetEmbeddings };\n","import { z } from \"zod\";\n\nimport { ChatModelV1 } from \"@adaline/provider\";\nimport { Config, Message, Tool, PartialChatResponse } from \"@adaline/types\";\n\nimport { GatewayError } from \"../../errors\";\n\n// TODO: abort signal\nconst StreamChatHandlerRequest = z.object({\n model: z.custom<ChatModelV1>(),\n config: Config(),\n messages: z.array(Message()),\n tools: z.array(Tool()).optional(),\n callbacks: z.array(z.custom<StreamChatCallbackType>()).nonempty().optional(),\n metadataForCallbacks: z.any().optional(),\n});\ntype StreamChatHandlerRequestType = z.infer<typeof StreamChatHandlerRequest>;\n\nconst StreamChatHandlerResponse = z.object({\n request: z.object({\n config: Config(),\n messages: z.array(Message()),\n tools: z.array(Tool()).optional(),\n }),\n response: PartialChatResponse,\n metadataForCallbacks: z.any().optional(),\n provider: z.object({\n request: z.any(),\n response: z.any(),\n }),\n});\ntype StreamChatHandlerResponseType = z.infer<typeof StreamChatHandlerResponse>;\n\ntype StreamChatCallbackType<M = any> = {\n onStreamStart?: (metadata?: M) => Promise<void> | void;\n onStreamFirstResponse?: (metadata?: M, response?: StreamChatHandlerResponseType, chunk?: unknown) => Promise<void> | void;\n onStreamNewResponse?: (metadata?: M, response?: StreamChatHandlerResponseType, chunk?: unknown) => Promise<void> | void;\n onStreamEnd?: (metadata?: M, response?: StreamChatHandlerResponseType) => Promise<void> | void;\n onStreamError?: (metadata?: M, error?: GatewayError) => Promise<void> | void;\n};\n\nexport { \n StreamChatHandlerRequest, \n StreamChatHandlerResponse, \n type StreamChatCallbackType, \n type StreamChatHandlerRequestType, \n type StreamChatHandlerResponseType \n};","import { GatewayError } from \"../../errors/errors\";\nimport { HttpClient } from \"../../plugins\";\nimport { castToError, safelyInvokeCallbacks } from \"../../utils\";\nimport {\n StreamChatCallbackType,\n StreamChatHandlerRequest,\n StreamChatHandlerRequestType,\n StreamChatHandlerResponseType,\n} from \"./stream-chat.types\";\n\nasync function* handleStreamChat<M>(\n request: StreamChatHandlerRequestType,\n client: HttpClient\n): AsyncGenerator<StreamChatHandlerResponseType, void, unknown> {\n const data = StreamChatHandlerRequest.parse(request);\n const callbacks = request.callbacks || [];\n\n const stable = {\n config: data.config,\n messages: data.messages,\n tools: data.tools,\n };\n\n try {\n safelyInvokeCallbacks<StreamChatCallbackType, keyof StreamChatCallbackType>(callbacks, \"onStreamStart\", request.metadataForCallbacks);\n\n const providerRequest = {\n url: await data.model.getStreamChatUrl(data.config, data.messages, data.tools),\n headers: await data.model.getStreamChatHeaders(data.config, data.messages, data.tools),\n data: await data.model.getStreamChatData(data.config, data.messages, data.tools),\n };\n\n let buffer = \"\";\n let isFirstResponse = true;\n for await (\n const chunk of client.stream(\n providerRequest.url, \n \"post\", \n providerRequest.data, \n providerRequest.headers\n )\n ) {\n for await (const transformed of data.model.transformStreamChatResponseChunk(chunk as string, buffer)) {\n // if (transformed.partialResponse.partialMessages.length > 0) {\n const streamResponse = {\n request: stable,\n response: transformed.partialResponse,\n metadataForCallbacks: request.metadataForCallbacks,\n provider: {\n request: providerRequest,\n response: chunk,\n },\n };\n\n safelyInvokeCallbacks<StreamChatCallbackType<M>, keyof StreamChatCallbackType<M>>(\n callbacks,\n isFirstResponse ? \"onStreamFirstResponse\" : \"onStreamNewResponse\",\n request.metadataForCallbacks,\n streamResponse\n );\n\n if (isFirstResponse) {\n isFirstResponse = false;\n }\n\n yield streamResponse;\n // } else {\n // buffer = transformed.buffer;\n // }\n }\n }\n\n safelyInvokeCallbacks<StreamChatCallbackType<M>, keyof StreamChatCallbackType<M>>(\n callbacks,\n \"onStreamEnd\",\n request.metadataForCallbacks\n );\n } catch (error) {\n let safeError: GatewayError;\n\n if (error instanceof GatewayError) {\n safeError = error;\n } else {\n safeError = castToError(error);\n }\n\n safelyInvokeCallbacks<StreamChatCallbackType<M>, keyof StreamChatCallbackType<M>>(\n callbacks,\n \"onStreamError\",\n request.metadataForCallbacks,\n safeError\n );\n\n throw safeError;\n }\n}\n\nexport { handleStreamChat };","import { GatewayError } from \"./errors\";\nimport {\n GatewayCompleteChatRequest,\n GatewayCompleteChatRequestType,\n GatewayGetEmbeddingsRequest,\n GatewayGetEmbeddingsRequestType,\n GatewayOptions,\n GatewayOptionsType,\n GatewayStreamChatRequest,\n GatewayStreamChatRequestType,\n} from \"./gateway.types\";\nimport { CompleteChatHandlerResponseType, GetEmbeddingsHandlerResponseType, StreamChatHandlerResponseType } from \"./handlers\";\nimport { handleCompleteChat } from \"./handlers/complete-chat/complete-chat.handler\";\nimport { handleGetEmbeddings } from \"./handlers/get-embeddings/get-embeddings.handler\";\nimport { handleStreamChat } from \"./handlers/stream-chat/stream-chat.handler\";\nimport { HttpClient, IsomorphicHttpClient, Cache, LRUCache, Queue, QueueTask, SimpleQueue } from \"./plugins\";\nimport { isRunningInBrowser } from \"./utils\";\n\nclass Gateway {\n private options: GatewayOptionsType;\n private httpClient: HttpClient;\n private queues: {\n completeChat: Queue<GatewayCompleteChatRequestType, CompleteChatHandlerResponseType>;\n getEmbeddings: Queue<GatewayGetEmbeddingsRequestType, GetEmbeddingsHandlerResponseType>;\n };\n private caches: {\n completeChat: Cache<CompleteChatHandlerResponseType>;\n getEmbeddings: Cache<GetEmbeddingsHandlerResponseType>;\n };\n\n constructor(options: GatewayOptionsType) {\n if (!options.dangerouslyAllowBrowser && isRunningInBrowser()) {\n throw new GatewayError(\n \"It looks like you're running in a browser-like environment.\\n\\n\" +\n \"This is disabled by default, as it risks exposing your provider secrets to attackers.\\n\" +\n \"If you understand the risks and have appropriate mitigation in place,\\n\" +\n \"you can set the `dangerouslyAllowBrowser` option to `true`.\\n\"\n );\n }\n\n this.options = GatewayOptions.parse(options);\n\n const queueOptions = {\n maxConcurrentTasks: this.options.queueOptions?.maxConcurrentTasks || 4,\n retryCount: this.options.queueOptions?.retryCount || 3,\n retry: this.options.queueOptions?.retry || {\n initialDelay: 1000,\n exponentialFactor: 2,\n },\n timeout: this.options.queueOptions?.timeout || 90000,\n };\n\n // TODO: different queueOptions for each queue ?\n this.queues = {\n completeChat: new SimpleQueue(queueOptions),\n getEmbeddings: new SimpleQueue(queueOptions),\n };\n\n // TODO: current implementation is that httpClient timeout is 90% of queue timeout, make it configurable ?\n // TODO: different httpClient for each queue ?\n this.httpClient = options.httpClient || new IsomorphicHttpClient({ timeoutInMilliseconds: (queueOptions.timeout * 0.90) });\n\n this.caches = {\n completeChat: options.completeChatCache || new LRUCache<CompleteChatHandlerResponseType>(),\n getEmbeddings: options.getEmbeddingsCache || new LRUCache<GetEmbeddingsHandlerResponseType>(),\n };\n }\n\n // // TODO: Promise should return GatewayCompleteChatResponseType for consistency\n // async completeChat(request: GatewayCompleteChatRequestType): Promise<CompleteChatHandlerResponseType> {\n // const data = GatewayCompleteChatRequest.parse(request);\n // return new Promise<CompleteChatHandlerResponseType>((resolve, reject) => {\n // const task: Task<GatewayCompleteChatRequestType, CompleteChatHandlerResponseType> = {\n // tryCount: 0,\n // modelIndex: 0,\n // inputTokens: data.model.getTokenCount(data.messages),\n // queueTime: Date.now(),\n // attemptTime: 0,\n // request: request,\n // queuePriority: data.options?.queuePriority,\n // resolve,\n // execute: this.executeCompleteChatTask.bind(this),\n // reject,\n // };\n // this.completeQueue.enqueue(task);\n // });\n // }\n\n // private async executeCompleteChatTask(request: {\n // modelIndex: number;\n // data: GatewayCompleteChatRequestType;\n // resolve: (value: CompleteChatHandlerResponseType) => void;\n // reject: (error: GatewayError) => void;\n // }): Promise<void> {\n // try {\n // const data = GatewayCompleteChatRequest.parse(request.data);\n // const response = await handleCompleteChat(\n // {\n // cache: this.caches.completeChat,\n // model: data.model,\n // config: data.config,\n // messages: data.messages,\n // tools: data.tools,\n // // callbacks: this.options.callbacks,\n // metadataForCallbacks: data.options?.metadataForCallbacks,\n // },\n // this.httpClient\n // );\n\n // request.resolve(response);\n // } catch (error) {\n // if (error instanceof GatewayError) throw error;\n // else throw new GatewayError((error as any)?.message, 500, (error as any)?.response?.data);\n // }\n // }\n\n async completeChat(request: GatewayCompleteChatRequestType): Promise<CompleteChatHandlerResponseType> {\n const data = GatewayCompleteChatRequest.parse(request);\n return new Promise<CompleteChatHandlerResponseType>((resolve, reject) => {\n const task: QueueTask<GatewayCompleteChatRequestType, CompleteChatHandlerResponseType> = {\n request: data,\n cache: this.caches.completeChat,\n resolve,\n reject,\n execute: this.executeCompleteChat.bind(this),\n };\n this.queues.completeChat.enqueue(task);\n });\n }\n\n private async executeCompleteChat(request: GatewayCompleteChatRequestType): Promise<CompleteChatHandlerResponseType> {\n const data = GatewayCompleteChatRequest.parse(request);\n return handleCompleteChat(\n {\n cache: this.caches.completeChat,\n model: data.model,\n config: data.config,\n messages: data.messages,\n tools: data.tools,\n callbacks: this.options.completeChatCallbacks,\n metadataForCallbacks: data.options?.metadataForCallbacks,\n },\n this.httpClient\n );\n }\n \n async *streamChat(request: GatewayStreamChatRequestType): AsyncGenerator<StreamChatHandlerResponseType, void, unknown> {\n try {\n const data = GatewayStreamChatRequest.parse(request);\n\n for await (const streamResponse of handleStreamChat(\n {\n model: data.model,\n config: data.config,\n messages: data.messages,\n tools: data.tools,\n callbacks: this.options.streamChatCallbacks,\n metadataForCallbacks: data.options?.metadataForCallbacks,\n },\n this.httpClient\n )) {\n yield streamResponse as StreamChatHandlerResponseType;\n }\n } catch (error) {\n if (error instanceof GatewayError) throw error;\n else throw new GatewayError((error as any)?.message, 500, (error as any)?.response?.data);\n }\n }\n\n // async getEmbeddings(request: GatewayGetEmbeddingsRequestType): Promise<GetEmbeddingsHandlerResponseType> {\n // const data = GatewayGetEmbeddingsRequest.parse(request);\n // return new Promise<GetEmbeddingsHandlerResponseType>((resolve, reject) => {\n // const task: Task<GatewayGetEmbeddingsRequestType, GetEmbeddingsHandlerResponseType> = {\n // tryCount: 0,\n // modelIndex: 0,\n // inputTokens: data.model.getTokenCount(data.embeddingRequests),\n // queueTime: Date.now(),\n // attemptTime: 0,\n // request: request,\n // queuePriority: data.options?.queuePriority,\n // resolve,\n // execute: this.executeGetEmbeddingsTask.bind(this),\n // reject,\n // };\n // this.embeddingQueue.enqueue(task);\n // });\n // }\n\n // private async executeGetEmbeddingsTask(request: {\n // modelIndex: number;\n // data: GatewayGetEmbeddingsRequestType;\n // resolve: (value: GetEmbeddingsHandlerResponseType) => void;\n // reject: (error: GatewayError) => void;\n // }): Promise<void> {\n // try {\n // const data = GatewayGetEmbeddingsRequest.parse(request.data);\n // const response = await handleGetEmbeddings(\n // {\n // model: data.model,\n // config: data.config,\n // embeddingRequests: data.embeddingRequests,\n // },\n // this.httpClient\n // );\n\n // request.resolve(response);\n // } catch (error) {\n // if (error instanceof GatewayError) throw error;\n // else throw new GatewayError((error as any)?.message, 500, (error as any)?.response?.data);\n // }\n // }\n\n async getEmbeddings(request: GatewayGetEmbeddingsRequestType): Promise<GetEmbeddingsHandlerResponseType> {\n const data = GatewayGetEmbeddingsRequest.parse(request);\n return new Promise<GetEmbeddingsHandlerResponseType>((resolve, reject) => {\n const task: QueueTask<GatewayGetEmbeddingsRequestType, GetEmbeddingsHandlerResponseType> = {\n request: data,\n cache: this.caches.getEmbeddings,\n resolve,\n reject,\n execute: this.executeGetEmbeddingsTask.bind(this),\n };\n this.queues.getEmbeddings.enqueue(task);\n });\n }\n\n private async executeGetEmbeddingsTask(request: GatewayGetEmbeddingsRequestType): Promise<GetEmbeddingsHandlerResponseType> {\n const data = GatewayGetEmbeddingsRequest.parse(request);\n return handleGetEmbeddings(\n {\n cache: this.caches.getEmbeddings,\n model: data.model,\n config: data.config,\n embeddingRequests: data.embeddingRequests,\n callbacks: this.options.getEmbeddingsCallbacks,\n metadataForCallbacks: data.options?.metadataForCallbacks,\n },\n this.httpClient\n );\n }\n\n static GatewayError = GatewayError;\n}\n\nexport { Gateway, type GatewayOptionsType };\n"]}