@adaline/gateway 0.4.0 → 0.6.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
@@ -3,37 +3,41 @@
3
3
  var zod = require('zod');
4
4
  var types = require('@adaline/types');
5
5
  var Ge = require('crypto-js/sha256.js');
6
- var B = require('axios');
6
+ var V = require('axios');
7
7
 
8
8
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
9
9
 
10
10
  var Ge__default = /*#__PURE__*/_interopDefault(Ge);
11
- var B__default = /*#__PURE__*/_interopDefault(B);
11
+ var V__default = /*#__PURE__*/_interopDefault(V);
12
12
 
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(`
13
+ var fe=Object.defineProperty,he=Object.defineProperties;var be=Object.getOwnPropertyDescriptors;var N=Object.getOwnPropertySymbols;var ge=Object.prototype.hasOwnProperty,Re=Object.prototype.propertyIsEnumerable;var A=(a,t)=>(t=Symbol[a])?t:Symbol.for("Symbol."+a);var U=(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)&&U(a,e,t[e]);if(N)for(var e of N(t))Re.call(t,e)&&U(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());}),C=function(a,t){this[0]=a,this[1]=t;},H=(a,t,e)=>{var o=(r,p,i,m)=>{try{var l=e[r](p),b=(p=l.value)instanceof C,S=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:S})).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[A("asyncIterator")]=()=>s,n("next"),n("throw"),n("return"),s};var q=(a,t,e)=>(t=a[A("asyncIterator")])?t.call(a):(a=a[A("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 $=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()}),j=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()}),Y=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()}),D=zod.z.object({model:zod.z.custom(),config:types.Config(),embeddingRequests:types.EmbeddingRequests(),options:Ee.optional()});var W=a=>a.status===429;var z=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);}},Se=(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){Se("error",`SAFELY_INVOKE_CALLBACKS:${String(t)}:`,r);}}),yield Promise.allSettled(o);}),Q=a=>new Promise(t=>setTimeout(t,a)),X=(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},Z=a=>a===408||a===409||a>=500;var ae=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()}),Ke=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()})});var v={};function xe(a){let t=JSON.stringify(a);return new Blob([t]).size}function Me(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 oe(a,t){return u(this,null,function*(){let e=ae.parse(a),o=a.callbacks||[],n={config:e.config,messages:e.messages,tools:e.tools},s=z(n);if(v[s])return g(o,"onChatCached",a.metadataForCallbacks,v[s].data),v[s].data;xe(v)>200*1024*1024&&(v=Me(v));try{g(o,"onChatStart",a.metadataForCallbacks);let r={url:e.model.getCompleteChatUrl(e.config,e.messages,e.tools),headers:yield e.model.getCompleteChatHeaders(e.config,e.messages,e.tools),data:e.model.getCompleteChatData(e.config,e.messages,e.tools)};console.log(`PROVIDER REQUEST:
14
+ `,JSON.stringify(r,null,2));let 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=z(n);return v[b]={data:l,time:Date.now()},l}catch(r){console.log(`ERROR:
15
+ `,JSON.stringify(r,null,2));let p;throw r instanceof d?p=r:p=E(r),g(o,"onChatError",a.metadataForCallbacks,p),p}})}var re=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()}),nt=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 ie(a,t){return u(this,null,function*(){let e=re.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 de=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()}),ht=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 ce(a,t){return H(this,null,function*(){let e=de.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:yield new C(e.model.getStreamChatHeaders(e.config,e.messages,e.tools)),data:e.model.getStreamChatData(e.config,e.messages,e.tools)};console.log(`PROVIDER REQUEST:
16
+ `,JSON.stringify(y,null,2));let w="",O=!0;try{for(var m=q(t.stream(y.url,"post",y.data,y.headers)),l,b,S;l=!(b=yield new C(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 C(s.next())).done;r=!1){let Ce=p.value;let B={request:n,response:Ce.partialResponse,metadataForCallbacks:a.metadataForCallbacks,provider:{request:y,response:I}};g(o,O?"onStreamFirstResponse":"onStreamNewResponse",a.metadataForCallbacks,B),O&&(O=!1),yield B;}}catch(p){i=[p];}finally{try{r&&(p=s.return)&&(yield new C(p.call(s)));}finally{if(i)throw i[0]}}}}catch(b){S=[b];}finally{try{l&&(b=m.return)&&(yield new C(b.call(m)));}finally{if(S)throw S[0]}}g(o,"onStreamEnd",a.metadataForCallbacks);}catch(y){console.log(`ERROR:
17
+ `,JSON.stringify(y,null,2));let w;throw y instanceof d?w=y:w=E(y),g(o,"onStreamError",a.metadataForCallbacks,w),w}})}var T=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);}},ue=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},ye=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 T(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||V__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:ue(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:ue(l.headers),status:{code:l.status,text:l.statusText}}}}catch(m){throw V__default.default.isAxiosError(m)?ye(m):new T(m instanceof Error?m.message:"An unexpected error occurred.",500)}})}stream(t,e,o,n,s){return H(this,null,function*(){try{if(this.isNodeEnvironment()){let l=yield new C(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 C(r.next())).done;p=!1){let b=i.value;yield b.toString();}}catch(i){m=[i];}finally{try{p&&(i=r.return)&&(yield new C(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 C(fetch(t,l));if(!b.ok){let S=yield new C(b.json());throw new T(`Request failed with status ${b.status}`,b.status,S)}if(b.body){let S=b.body.getReader();for(;;){let{done:y,value:w}=yield new C(S.read());if(y){yield new TextDecoder().decode(w,{stream:!0});break}yield new TextDecoder().decode(w,{stream:!0});}}else throw new T("Cannot stream the body of the response.",500,b)}}catch(l){throw l instanceof T?l:(l==null?void 0:l.name)==="AbortError"?new T("AbortError",408):(l==null?void 0:l.name)==="CanceledError"?new T("AbortError",408):V__default.default.isAxiosError(l)?ye(l):new T(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=T;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=Z;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||X(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
18
 
15
19
  `),console.log("Error",p),console.log(`
16
20
 
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.
21
+ `);let i=E(p);W(i)&&r-s.attemptTime<e?(yield Q(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 Q(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 L=class{constructor(t){if(!t.dangerouslyAllowBrowser&&x())throw new d(`It looks like you're running in a browser-like environment.
18
22
 
19
23
  This is disabled by default, as it risks exposing your provider secrets to attackers.
20
24
  If you understand the risks and have appropriate mitigation in place,
21
25
  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;
26
+ `);this.options=$.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=j.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=j.parse(t.data),s=yield oe({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 H(this,null,function*(){var e,p;try{let i=Y.parse(t);try{for(var o=q(ce({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 C(o.next())).done;n=!1){let m=s.value;yield m;}}catch(s){r=[s];}finally{try{n&&(s=o.return)&&(yield new C(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=D.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=D.parse(t.data),n=yield ie({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)}})}};L.GatewayError=d;
23
27
 
24
- exports.CompleteChatHandlerRequest = oe;
25
- exports.CompleteChatHandlerResponse = Ue;
26
- exports.Gateway = N;
28
+ exports.CompleteChatHandlerRequest = ae;
29
+ exports.CompleteChatHandlerResponse = Ke;
30
+ exports.Gateway = L;
27
31
  exports.GatewayError = d;
28
- exports.GetEmbeddingsHandlerRequest = ie;
29
- exports.GetEmbeddingsHandlerResponse = st;
32
+ exports.GetEmbeddingsHandlerRequest = re;
33
+ exports.GetEmbeddingsHandlerResponse = nt;
30
34
  exports.IsomorphicHttpClient = M;
31
- exports.IsomorphicHttpClientError = R;
35
+ exports.IsomorphicHttpClientError = T;
32
36
  exports.SimpleQueue = P;
33
- exports.StreamChatHandlerRequest = ce;
34
- exports.StreamChatHandlerResponse = ft;
35
- exports.handleCompleteChat = se;
36
- exports.handleGetEmbeddings = le;
37
- exports.handleStreamChat = ue;
37
+ exports.StreamChatHandlerRequest = de;
38
+ exports.StreamChatHandlerResponse = ht;
39
+ exports.handleCompleteChat = oe;
40
+ exports.handleGetEmbeddings = ie;
41
+ exports.handleStreamChat = ce;
38
42
  //# sourceMappingURL=index.js.map
39
43
  //# 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/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","ChatResponse","cache","calculateCacheSize","cacheString","purgeOldCacheEntries","sortedEntries","a","b","newCache","key","value","handleCompleteChat","request","client","stable","hash","providerRequest","now","providerResponse","latencyInMs","response","safeError","GetEmbeddingsHandlerRequest","GetEmbeddingsHandlerResponse","EmbeddingResponse","handleGetEmbeddings","StreamChatHandlerRequest","StreamChatHandlerResponse","PartialChatResponse","handleStreamChat","__asyncGenerator","__await","buffer","isFirstResponse","iter","__forAwait","more","temp","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, ChatResponse } 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: ChatResponse,\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: await data.model.getCompleteChatHeaders(data.config, data.messages, data.tools),\n data: data.model.getCompleteChatData(data.config, data.messages, data.tools),\n };\n\n // TODO: remove logging\n console.log(\"PROVIDER REQUEST: \\n\", JSON.stringify(providerRequest, null, 2));\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 // TODO: remove logging\n console.log(\"ERROR: \\n\", JSON.stringify(error, null, 2));\n\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, EmbeddingResponse } 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: 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 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, 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 // 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: await data.model.getStreamChatHeaders(data.config, data.messages, data.tools),\n data: data.model.getStreamChatData(data.config, data.messages, data.tools),\n };\n\n // TODO: remove logging\n console.log(\"PROVIDER REQUEST: \\n\", JSON.stringify(providerRequest, null, 2));\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 // TODO: remove logging\n console.log(\"ERROR: \\n\", JSON.stringify(error, null, 2));\n\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"]}