UNPKG

@adaline/gateway

Version:
11 lines (10 loc) 52.1 kB
import { Config, Message, Tool, EmbeddingRequests, ChatResponse, EmbeddingResponse, ToolResponseContent, PartialChatResponse, GatewayBaseError } from '@adaline/types'; import { trace, metrics, context, SpanStatusCode } from '@opentelemetry/api'; import { v4 } from 'uuid'; import { z } from 'zod'; import { ATTR_HTTP_REQUEST_METHOD, ATTR_URL_FULL } from '@opentelemetry/semantic-conventions'; import fe from 'axios'; import Dt from 'crypto-js/sha256.js'; import { LRUCache } from 'lru-cache'; import De from 'os'; var Ht=Object.defineProperty,St=Object.defineProperties;var Pt=Object.getOwnPropertyDescriptors;var Se=Object.getOwnPropertySymbols;var At=Object.prototype.hasOwnProperty,Mt=Object.prototype.propertyIsEnumerable;var se=(r,t)=>(t=Symbol[r])?t:Symbol.for("Symbol."+r),Ot=r=>{throw TypeError(r)};var Pe=(r,t,o)=>t in r?Ht(r,t,{enumerable:!0,configurable:!0,writable:!0,value:o}):r[t]=o,E=(r,t)=>{for(var o in t||(t={}))At.call(t,o)&&Pe(r,o,t[o]);if(Se)for(var o of Se(t))Mt.call(t,o)&&Pe(r,o,t[o]);return r},L=(r,t)=>St(r,Pt(t));var Lt=(r=>typeof require!="undefined"?require:typeof Proxy!="undefined"?new Proxy(r,{get:(t,o)=>(typeof require!="undefined"?require:t)[o]}):r)(function(r){if(typeof require!="undefined")return require.apply(this,arguments);throw Error('Dynamic require of "'+r+'" is not supported')});var m=(r,t,o)=>new Promise((e,d)=>{var s=p=>{try{i(o.next(p));}catch(n){d(n);}},a=p=>{try{i(o.throw(p));}catch(n){d(n);}},i=p=>p.done?e(p.value):Promise.resolve(p.value).then(s,a);i((o=o.apply(r,t)).next());}),w=function(r,t){this[0]=r,this[1]=t;},V=(r,t,o)=>{var e=(a,i,p,n)=>{try{var c=o[a](i),l=(i=c.value)instanceof w,h=c.done;Promise.resolve(l?i[0]:i).then(C=>l?e(a==="return"?a:"next",i[1]?{done:C.done,value:C.value}:C,p,n):p({value:C,done:h})).catch(C=>e("throw",C,p,n));}catch(C){n(C);}},d=a=>s[a]=i=>new Promise((p,n)=>e(a,i,p,n)),s={};return o=o.apply(r,t),s[se("asyncIterator")]=()=>s,d("next"),d("throw"),d("return"),s},_=r=>{var t=r[se("asyncIterator")],o=!1,e,d={};return t==null?(t=r[se("iterator")](),e=s=>d[s]=a=>t[s](a)):(t=t.call(r),e=s=>d[s]=a=>{if(o){if(o=!1,s==="throw")throw a;return a}return o=!0,{done:!1,value:new w(new Promise(i=>{var p=t[s](a);p instanceof Object||Ot("Object expected"),i(p);}),1)}}),d[se("iterator")]=()=>d,e("next"),"throw"in t?e("throw"):d.throw=s=>{throw s},"return"in t&&e("return"),d},X=(r,t,o)=>(t=r[se("asyncIterator")])?t.call(r):(r=r[se("iterator")](),t={},o=(e,d)=>(d=r[e])&&(t[e]=s=>new Promise((a,i,p)=>(s=d.call(r,s),p=s.done,Promise.resolve(s.value).then(n=>a({value:n,done:p}),i)))),o("next"),o("return"),t);var R=class r extends Error{constructor(t,o=500,e){super(t),this.name="GatewayError",this.status=o,this.data=e,Error.captureStackTrace&&Error.captureStackTrace(this,r);}},Qt="GatewayTelemetryError",Ae=class r extends GatewayBaseError{constructor({info:t,cause:o}){super({info:t,cause:o},Qt),this.info=t,this.cause=o,Object.setPrototypeOf(this,new.target.prototype);}static isGatewayTelemetryError(t){return t instanceof r}};var $t="HttpClientError",ee=class r extends GatewayBaseError{constructor({info:t,cause:o}){super({info:t,cause:o},$t),this.info=t,this.cause=o,Object.setPrototypeOf(this,new.target.prototype);}static isHttpClientError(t){return t instanceof r}},It="HttpRequestError",k=class r extends GatewayBaseError{constructor(t,o=500,e,d){super({info:t,cause:{status:o,headers:e,data:d}},It),this.info=t,this.cause={status:o,headers:e,data:d},Object.setPrototypeOf(this,new.target.prototype);}static isHttpRequestError(t){return t instanceof r}};var g=class{static setTracer(t){this.tracer||(this.tracer=t||trace.getTracer(this.DEFAULT_TRACER_KEY));}static getTracer(){return this.tracer||trace.getTracer(this.DEFAULT_TRACER_KEY)}static setMeter(t){this.meter||(this.meter=t||metrics.getMeter(this.DEFAULT_METER_KEY));}static getMeter(){return this.meter||metrics.getMeter(this.DEFAULT_METER_KEY)}};g.DEFAULT_TRACER_KEY="gateway",g.DEFAULT_METER_KEY="gateway",g.tracer=void 0,g.meter=void 0;var ie=r=>{let t={};return r&&(typeof r=="object"||r instanceof Headers)&&Object.entries(r).forEach(([o,e])=>{Array.isArray(e)?t[o]=e.join(", "):typeof e=="string"?t[o]=e:t[o]="";}),t},Ie=r=>{var s,a,i;let t=(r==null?void 0:r.message)||"An unexpected error occurred",o=((s=r==null?void 0:r.response)==null?void 0:s.status)||500,e=ie((a=r==null?void 0:r.response)==null?void 0:a.headers)||{},d=((i=r==null?void 0:r.response)==null?void 0:i.data)||{};return new k(t,o,e,d)},de=class{constructor(t){this.isNodeEnvironment=()=>typeof process!="undefined"&&process.versions!=null&&process.versions.node!=null;let{axiosInstance:o,timeoutInMilliseconds:e,enableProxyAgent:d}=t;this.client=o||fe.create();let s=z.number().int().positive().optional();if(this.defaultTimeout=s.parse(e),this.client.defaults.timeout=this.defaultTimeout,this.enableProxyAgent=d!=null?d:!0,this.enableProxyAgent){let i=Lt("proxy-agent");this.httpProxyAgent=new i.ProxyAgent,this.httpsProxyAgent=new i.ProxyAgent({rejectUnauthorized:!1});}let a=f.getLogger();a==null||a.debug(`IsomorphicHttpClient initialized with defaultTimeout: ${this.defaultTimeout}`);}makeRequest(i,p,n){return m(this,arguments,function*(t,o,e,d={},s,a){let c=f.getLogger(),l=h=>m(this,null,function*(){let C=()=>m(this,null,function*(){try{let G=E(L(E(E({},t==="get"||t==="delete"?{params:e}:{data:e}),d),{timeout:this.defaultTimeout}),this.enableProxyAgent?{httpAgent:this.httpProxyAgent,httpsAgent:this.httpsProxyAgent}:{});if(t==="get"||t==="delete"){let T=yield this.client[t](o,G),y={data:T.data,headers:ie(T.headers),status:{code:T.status,text:T.statusText}};return c==null||c.debug("IsomorphicHttpClient.makeRequest response: ",y),y}else {let T=yield this.client[t](o,G.data,L(E({},G),{params:G.params})),y={data:T.data,headers:ie(T.headers),status:{code:T.status,text:T.statusText}};return c==null||c.debug("IsomorphicHttpClient.makeRequest response: ",y),y}}catch(G){throw c==null||c.warn("IsomorphicHttpClient.makeRequest error: ",G),fe.isAxiosError(G)?Ie(G):new ee({info:"An unexpected error occurred",cause:G})}});try{if(!(s!=null&&s.retry)){let y=yield C();return h==null||h.setStatus({code:SpanStatusCode.OK,message:"request successful"}),y}let G=s.retry,T;for(let y=1;y<=G.maxAttempts;y++)try{let A=yield C();return h==null||h.setStatus({code:SpanStatusCode.OK,message:"request successful"}),A}catch(A){if(T=A,c==null||c.warn(`IsomorphicHttpClient.makeRequest attempt ${y} failed: `,A),y===G.maxAttempts)break;let b=G.initialDelay*Math.pow(G.exponentialFactor,y-1);c==null||c.debug(`IsomorphicHttpClient.makeRequest retrying after ${b}ms (attempt ${y}/${G.maxAttempts})`),yield new Promise(v=>setTimeout(v,b));}throw h==null||h.setStatus({code:SpanStatusCode.ERROR,message:"request failed after all retry attempts"}),T}catch(G){throw h==null||h.setStatus({code:SpanStatusCode.ERROR,message:"request failed"}),G}finally{h==null||h.end();}});return a?yield context.with(a,()=>m(this,null,function*(){return yield g.getTracer().startActiveSpan("http.request",C=>m(this,null,function*(){return C.setAttribute(ATTR_HTTP_REQUEST_METHOD,t.toUpperCase()),C.setAttribute(ATTR_URL_FULL,o),yield l(C)}))})):l()})}stream(t,o,e,d,s,a){return V(this,null,function*(){let i=f.getLogger();i==null||i.debug(`IsomorphicHttpClient.STREAM request to ${t}`,{data:e,headers:d});let p=function(n){return V(this,null,function*(){let c=Date.now(),l=!1;try{if(this.isNodeEnvironment()){i==null||i.debug("IsomorphicHttpClient.stream in node environment");let y=yield new w(this.client.request({method:o,url:t,headers:d,data:e,responseType:"stream",signal:s==null?void 0:s.abortSignal}));try{for(var h=X(y.data),C,G,T;C=!(G=yield new w(h.next())).done;C=!1){let A=G.value;if(!l){let v=Date.now()-c;n==null||n.setAttribute("time-to-first-token",v),l=!0;}n==null||n.addEvent("stream.chunk",{message:"stream chunk received"});let b=A.toString();i==null||i.debug("IsomorphicHttpClient.stream chunk: ",b),yield b;}}catch(G){T=[G];}finally{try{C&&(G=h.return)&&(yield new w(G.call(h)));}finally{if(T)throw T[0]}}n==null||n.setStatus({code:SpanStatusCode.OK,message:"stream successful"});}else {i==null||i.debug("IsomorphicHttpClient.stream in browser environment");let y={method:o,headers:new Headers(E({},d)),body:o!=="get"?JSON.stringify(e):void 0,signal:s==null?void 0:s.abortSignal},A=yield new w(fetch(t,y));if(!A.ok){i==null||i.warn("IsomorphicHttpClient.stream response not ok: ",A),n==null||n.setStatus({code:SpanStatusCode.ERROR,message:"stream failed"});let b=yield new w(A.json());throw new k(`Request failed with status ${A.status}`,A.status,ie(A.headers),b)}if(A.body){let b=A.body.getReader();for(;;){let{done:v,value:S}=yield new w(b.read());if(v){if(!l&&S){let K=Date.now()-c;n==null||n.setAttribute("time-to-first-token",K),l=!0;}n==null||n.addEvent("stream.chunk",{message:"stream chunk received"});let q=new TextDecoder().decode(S,{stream:!0});i==null||i.debug("IsomorphicHttpClient.stream chunk: ",q),yield q;break}if(!l){let q=Date.now()-c;n==null||n.setAttribute("time-to-first-token",q),l=!0;}n==null||n.addEvent("stream.chunk",{message:"stream chunk received"});let x=new TextDecoder().decode(S,{stream:!0});i==null||i.debug("IsomorphicHttpClient.stream chunk: ",x),yield x;}n==null||n.setStatus({code:SpanStatusCode.OK,message:"stream successful"});}else throw i==null||i.warn("IsomorphicHttpClient.stream response has no body"),n==null||n.setStatus({code:SpanStatusCode.ERROR,message:"stream failed"}),new k("Cannot stream the body of the response.",500,{},A)}}catch(y){throw i==null||i.warn("IsomorphicHttpClient.stream error: ",y),n==null||n.setStatus({code:SpanStatusCode.ERROR,message:"stream failed"}),k.isHttpRequestError(y)?y:(y==null?void 0:y.name)==="AbortError"?new k("AbortError",408,{},{}):(y==null?void 0:y.name)==="CanceledError"?new k("AbortError",408,{},{}):fe.isAxiosError(y)?Ie(y):new ee({info:"An unexpected error occurred",cause:y})}finally{n==null||n.end();}})}.bind(this);return a?yield*_(yield new w(context.with(a,()=>m(this,null,function*(){return yield g.getTracer().startActiveSpan("http.stream",c=>m(this,null,function*(){return c.setAttribute(ATTR_HTTP_REQUEST_METHOD,o.toUpperCase()),c.setAttribute(ATTR_URL_FULL,t),yield p(c)}))})))):yield*_(p())})}get(t,o,e,d,s){return m(this,null,function*(){let a=f.getLogger();return a==null||a.debug(`IsomorphicHttpClient.GET request to ${t}`,{params:o,headers:e}),this.makeRequest("get",t,o||{},{headers:e},d,s)})}post(t,o,e,d,s){return m(this,null,function*(){let a=f.getLogger();return a==null||a.debug(`IsomorphicHttpClient.POST request to ${t}`,{data:o,headers:e}),this.makeRequest("post",t,o||{},{headers:e},d,s)})}put(t,o,e,d,s){return m(this,null,function*(){let a=f.getLogger();return a==null||a.debug(`IsomorphicHttpClient.PUT request to ${t}`,{data:o,headers:e}),this.makeRequest("put",t,o||{},{headers:e},d,s)})}delete(t,o,e,d,s){return m(this,null,function*(){let a=f.getLogger();return a==null||a.debug(`IsomorphicHttpClient.DELETE request to ${t}`,{params:o,headers:e}),this.makeRequest("delete",t,o||{},{headers:e},d,s)})}patch(t,o,e,d,s){return m(this,null,function*(){let a=f.getLogger();return a==null||a.debug(`IsomorphicHttpClient.PATCH request to ${t}`,{data:o,headers:e}),this.makeRequest("patch",t,o||{},{headers:e},d,s)})}};var zt="QueueTaskTimeoutError",ce=class r extends GatewayBaseError{constructor({info:t,cause:o}){super({info:t,cause:o},zt),this.info=t,this.cause=o,Object.setPrototypeOf(this,new.target.prototype);}static isQueueTaskTimeoutError(t){return t instanceof r}};var Fe=z.object({maxConcurrentTasks:z.number().int().positive(),retryCount:z.number().int().positive(),timeout:z.number().int().positive(),retry:z.object({initialDelay:z.number().int().positive(),exponentialFactor:z.number().int().positive()})});var pe=(r,t)=>Dt(r+JSON.stringify(t)).toString(),j=r=>r instanceof R?r:ee.isHttpClientError(r)?new R(r.message):k.isHttpRequestError(r)?new R(r.message,r.cause.status,r.cause.data):r instanceof Error?new R(r.message):new R(r),M=()=>typeof window!="undefined"&&typeof window.document!="undefined"&&typeof navigator!="undefined";var Nt={error:"color: red",warn:"color: yellow",info:"color: green"},Vt=(r,t,...o)=>{if(M())M()&&console.log(`%c[${r.toUpperCase()}] [${t}]`,Nt[r],...o);else switch(r){case"error":console.error(...o);break;case"warn":console.warn(...o);break;default:console.log(...o);}},_t=(r,t,...o)=>{var e;M()||((e=process==null?void 0:process.env)==null?void 0:e.DEBUG)==="true"&&Vt(r,t,...o);},P=(r,t,...o)=>m(void 0,null,function*(){let e=[];r.forEach(d=>{let s=d[t];if(typeof s=="function")try{let a=s(...o);a instanceof Promise&&e.push(a);}catch(a){_t("error",`SAFELY_INVOKE_CALLBACKS:${String(t)}:`,a);}}),yield Promise.allSettled(e);}),je=r=>new Promise(t=>setTimeout(t,r));var f=class{static setLogger(t){this.logger=t;}static getLogger(){return this.logger}};var ze=class{debug(t,...o){console.debug(t,...o);}info(t,...o){console.info(t,...o);}warn(t,...o){M()?console.warn(`%WARN: %c${t}`,"color: yellow; font-weight: bold;","",...o):console.warn(`\x1B[33mWARN:\x1B[0m ${t}`,...o);}error(t,...o){M()?console.error(`%ERROR: %c${t}`,"color: lightcoral; font-weight: bold;","",...o):console.error(`\x1B[91mERROR:\x1B[0m ${t}`,...o);}critical(t,...o){M()?console.error(`%cCRITICAL: %c${t}`,"color: red; font-weight: bold;","",...o):console.error(`\x1B[31;1mCRITICAL:\x1B[0m ${t}`,...o);}};var oe=class{constructor(t){this.activeTasks=0;this.queue=[];this.options=t;}enqueue(t){let o=f.getLogger();o==null||o.debug(`SimpleQueue.enqueue invoked, id: ${t.id}`),context.with(t.telemetryContext,()=>m(this,null,function*(){return g.getTracer().startActiveSpan("queue.task.pickup-wait",d=>m(this,null,function*(){d.setAttribute("id",t.id),this.queue.push({task:t,taskSpan:d}),o==null||o.debug(`SimpleQueue.enqueue task enqueued, id: ${t.id}`);}))})),this.processQueue();}executeWithTimeout(t,o){let e=f.getLogger();return e==null||e.debug(`SimpleQueue.executeWithTimeout invoked with timeout: ${this.options.timeout}, id: ${t.id}`),new Promise((d,s)=>{let a=setTimeout(()=>{e==null||e.warn(`SimpleQueue.executeWithTimeout timed out, id: ${t.id}`),s(new ce({info:"Queue task timeout",cause:new Error("Queue task timeout")}));},this.options.timeout);e==null||e.debug(`SimpleQueue.executeWithTimeout task executing, id: ${t.id}`),t.execute(t.request,o).then(i=>{e==null||e.debug(`SimpleQueue.executeWithTimeout task completed, id: ${t.id}`),clearTimeout(a),d(i);}).catch(i=>{e==null||e.warn(`SimpleQueue.executeWithTimeout task errored, id: ${t.id}`),clearTimeout(a),s(i);});})}executeWithRetry(t,o){return m(this,null,function*(){let e=f.getLogger();return yield context.with(t.telemetryContext,()=>m(this,null,function*(){let d=g.getTracer();return yield d.startActiveSpan("queue.task.execute",s=>m(this,null,function*(){e==null||e.debug(`SimpleQueue.executeWithRetry invoked, attempt: ${this.options.retryCount-o}, id: ${t.id}`),s.setAttribute("attempt",this.options.retryCount-o);try{let a=context.active(),i=yield this.executeWithTimeout(t,a);return s.setStatus({code:SpanStatusCode.OK}),s.end(),i}catch(a){if(o===0)throw e==null||e.warn(`SimpleQueue.executeWithRetry retry count reached, id: ${t.id}`),s.end(),a;let i=!0,p=this.options.retry.initialDelay*Math.pow(this.options.retry.exponentialFactor,this.options.retryCount-o);if(k.isHttpRequestError(a)){if(a.cause.status===429){e==null||e.warn(`SimpleQueue.executeWithRetry rate limiting error, id: ${t.id}`);let n=ne.safeParse(t.request);if(n.success){let c=n.data.model.getRetryDelay(a.cause.headers);i=c.shouldRetry,c.delayMs>0&&(p=c.delayMs);}}a.cause.status>=500&&a.cause.status<600&&(e==null||e.warn(`SimpleQueue.executeWithRetry ${a.cause.status} error, id: ${t.id}`));}else e==null||e.warn(`SimpleQueue.executeWithRetry non http-request error, id: ${t.id}`,{error:a});if(i)return yield d.startActiveSpan("queue.task.retry-wait",n=>m(this,null,function*(){return e==null||e.debug(`SimpleQueue.executeWithRetry retry wait: ${p}ms, id: ${t.id}`),yield je(p),n.end(),s.end(),this.executeWithRetry(t,o-1)}));throw e==null||e.warn(`SimpleQueue.executeWithRetry model returned should not retry, id: ${t.id}`),s.end(),a}finally{}}))}))})}processQueue(){return m(this,null,function*(){var s;let t=f.getLogger();if(this.activeTasks>=this.options.maxConcurrentTasks){t==null||t.debug("SimpleQueue.processQueue max concurrent tasks reached");return}let o=this.queue.shift();if(!o){t==null||t.debug("SimpleQueue.processQueue no item to process");return}let{task:e,taskSpan:d}=o;d&&d.end(),this.activeTasks+=1,t==null||t.debug(`SimpleQueue.processQueue active tasks: ${this.activeTasks}`),t==null||t.debug(`SimpleQueue.processQueue processing task, id: ${e.id}`);try{let a=yield this.executeWithRetry(e,this.options.retryCount);t==null||t.debug(`SimpleQueue.processQueue task completed, id: ${e.id}`),e.resolve(a);}catch(a){t==null||t.warn(`SimpleQueue.processQueue task errored, id: ${e.id}`),e.reject(a);}finally{this.activeTasks-=1,t==null||t.debug(`SimpleQueue.processQueue active tasks: ${this.activeTasks}`),(s=trace.getSpan(e.telemetryContext))==null||s.end(),this.processQueue();}})}};var re=class{constructor(t=1e3){this.cache=new LRUCache({max:t,allowStale:!1,updateAgeOnGet:!1});let o=f.getLogger();o==null||o.debug(`LRUCache initialized with maxEntries: ${t}`);}get(t){return m(this,null,function*(){let o=f.getLogger();return o==null||o.debug(`LRUCache.get invoked, key: ${t}`),new Promise(e=>{let d=this.cache.get(t);o==null||o.debug("LRUCache.get completed, value: ",d),e(d);})})}set(t,o){return m(this,null,function*(){let e=f.getLogger();return e==null||e.debug(`LRUCache.set invoked, key: ${t}, value: `,o),new Promise(d=>{this.cache.set(t,o),e==null||e.debug("LRUCache.set completed"),d();})})}delete(t){return m(this,null,function*(){let o=f.getLogger();return o==null||o.debug(`LRUCache.delete invoked, key: ${t}`),new Promise(e=>{this.cache.delete(t),o==null||o.debug("LRUCache.delete completed"),e();})})}clear(){return m(this,null,function*(){let t=f.getLogger();return t==null||t.debug("LRUCache.clear invoked"),new Promise(o=>{this.cache.clear(),t==null||t.debug("LRUCache.clear completed"),o();})})}};var le=class{record(t,o,e){}stopRecorder(){}};var Ne=()=>({node:{version:process.version,platform:De.platform(),architecture:De.arch()}}),Ve=()=>({browser:{version:navigator.userAgent,userAgent:navigator.userAgent}});var me=class{constructor(){this.eventVersion="0.1";this.gatewayVersion="1.8.0";this.flushInterval=1e4;this.batchSize=1;this.maxAttempts=3;this.environment=M()?Ve():Ne();this.analyticsEndpointUrl="https://j954t34pkh.execute-api.us-east-1.amazonaws.com/v0/analytics";this.events=[];}startFlushTimer(){M()?this.flushTimer=window.setInterval(()=>this.flushEvents(),this.flushInterval):this.flushTimer=setInterval(()=>this.flushEvents(),this.flushInterval);}stopFlushTimer(){M()?window.clearInterval(this.flushTimer):clearInterval(this.flushTimer);}record(t,o,e){let d={event:t,status:o,dimensions:e,timestamp:new Date().toISOString(),eventVersion:this.eventVersion,gatewayVersion:this.gatewayVersion,environment:this.environment};this.events.push({event:d,attempt:0}),this.events.length>=this.batchSize&&this.flushEvents();}flushEvents(){return m(this,null,function*(){if(this.events.length===0)return;let t=[...this.events];this.events=[],(yield this.sendEvents(t.map(e=>e.event)))||this.events.push(...t.filter(e=>e.attempt<this.maxAttempts).map(e=>({event:e.event,attempt:e.attempt+1})));})}sendEvents(t){return m(this,null,function*(){try{return (yield fe.post(this.analyticsEndpointUrl,{events:t},{headers:{"Content-Type":"application/json"}})).status===200}catch(o){return !1}})}stopRecorder(){this.stopFlushTimer(),this.flushEvents();}};var ue=class{static getAnalyticsRecorder(t){return this.analytics!==void 0?this.analytics:(this.analytics=t?new me:new le,this.analytics)}};var _e=z.object({queueOptions:z.lazy(()=>Fe.partial()).optional(),dangerouslyAllowBrowser:z.boolean().optional(),httpClient:z.custom().optional(),completeChatCache:z.custom().optional(),completeChatCallbacks:z.array(z.custom()).nonempty().optional(),getEmbeddingsCache:z.custom().optional(),getEmbeddingsCallbacks:z.array(z.custom()).nonempty().optional(),getToolResponsesCache:z.custom().optional(),getToolResponsesCallbacks:z.array(z.custom()).nonempty().optional(),streamChatCallbacks:z.array(z.custom()).nonempty().optional(),logger:z.custom().optional(),telemetry:z.object({tracer:z.custom().optional(),meter:z.custom().optional()}).optional(),enableAnalytics:z.boolean().optional(),enableProxyAgent:z.boolean().optional()}),Xt=z.object({enableCache:z.boolean().optional().default(!0),customHeaders:z.record(z.string()).optional(),metadataForCallbacks:z.any().optional()}),ne=z.object({model:z.custom(),config:Config(),messages:z.array(Message()),tools:z.array(Tool()).optional(),options:Xt.optional()}),Zt=z.object({customHeaders:z.record(z.string()).optional(),metadataForCallbacks:z.any().optional()}),Ke=z.object({model:z.custom(),config:Config(),messages:z.array(Message()),tools:z.array(Tool()).optional(),options:Zt.optional(),abortSignal:z.instanceof(AbortSignal).optional()}),eo=z.object({enableCache:z.boolean().optional().default(!0),customHeaders:z.record(z.string()).optional(),metadataForCallbacks:z.any().optional()}),we=z.object({model:z.custom(),config:Config(),embeddingRequests:EmbeddingRequests(),options:eo.optional()}),xe=z.object({model:z.custom(),data:z.any(),headers:z.record(z.string()),query:z.record(z.string()).optional()}),Be=z.object({model:z.custom(),data:z.any(),headers:z.record(z.string()),query:z.record(z.string()).optional()}),Ee=z.object({model:z.custom(),data:z.any(),headers:z.record(z.string()),query:z.record(z.string()).optional()}),We=z.object({chatUsage:z.custom(),chatModelPrice:z.custom().optional(),model:z.custom().optional()}).refine(r=>r.chatModelPrice!==void 0!=(r.model!==void 0),{message:"Exactly one of chatModelPrice or model must be provided, not both.",path:["chatModelPrice","model"]}),to=z.object({customHeaders:z.record(z.string()).optional(),metadataForCallbacks:z.any().optional()}),Ye=z.object({tools:z.array(Tool()),messages:z.array(Message()),options:to.optional(),abortSignal:z.instanceof(AbortSignal).optional()});var et=z.object({cache:z.custom(),model:z.custom(),config:Config(),messages:z.array(Message()),tools:z.array(Tool()).optional(),enableCache:z.boolean(),customHeaders:z.record(z.string()).optional(),callbacks:z.array(z.custom()).nonempty().optional(),metadataForCallbacks:z.any().optional()}),La=z.object({request:z.object({config:Config(),messages:z.array(Message()),tools:z.array(Tool()).optional()}),response:ChatResponse,cached:z.boolean(),latencyInMs:z.number().int().positive(),metadataForCallbacks:z.any().optional(),provider:z.object({request:z.any(),response:z.any()})});function at(r,t,o){return m(this,null,function*(){let e=f.getLogger(),d=s=>m(this,null,function*(){e==null||e.debug("handleCompleteChat invoked"),e==null||e.debug("handleCompleteChat request: ",{request:r});let a=et.parse(r),i=r.callbacks||[],p=context.active();try{P(i,"onChatStart",r.metadataForCallbacks);let n={config:a.config,messages:a.messages,tools:a.tools},c={url:yield a.model.getCompleteChatUrl(a.config,a.messages,a.tools),headers:yield a.model.getCompleteChatHeaders(a.config,a.messages,a.tools),data:yield a.model.getCompleteChatData(a.config,a.messages,a.tools)};M()||(c.headers=L(E({},c.headers),{source:"adaline.ai"})),a.customHeaders&&(c.headers=E(E({},c.headers),a.customHeaders)),e==null||e.debug("handleCompleteChat providerRequest: ",{providerRequest:c});let l=pe(`complete-chat:${c.url}:${a.model.modelSchema.name}`,n);if(a.enableCache){e==null||e.debug("handleCompleteChat checking cache");let y=yield r.cache.get(l);if(y)return y.cached=!0,e==null||e.debug("handleCompleteChat cached hit"),s==null||s.setAttribute("cached",!0),s==null||s.setStatus({code:SpanStatusCode.OK}),P(i,"onChatCached",r.metadataForCallbacks,y),e==null||e.debug("handleCompleteChat cached response: ",{cachedResponse:y}),y}e==null||e.debug("handleCompleteChat cache miss");let h=Date.now(),C=yield t.post(c.url,c.data,c.headers,void 0,p),G=Date.now()-h;e==null||e.debug("handleCompleteChat providerResponse: ",{providerResponse:C});let T={request:n,response:a.model.transformCompleteChatResponse(C.data),cached:!1,latencyInMs:G,metadataForCallbacks:r.metadataForCallbacks,provider:{request:c,response:C}};return e==null||e.debug("handleCompleteChat response: ",{response:T}),a.enableCache&&(yield r.cache.set(l,T),e==null||e.debug("handleCompleteChat response cached")),s==null||s.setAttribute("cached",!1),s==null||s.setStatus({code:SpanStatusCode.OK}),P(i,"onChatComplete",r.metadataForCallbacks,T),T}catch(n){e==null||e.warn("handleCompleteChat error: ",{error:n});let c;throw k.isHttpRequestError(n)||n instanceof R?c=n:c=j(n),P(i,"onChatError",r.metadataForCallbacks,c),c}finally{s==null||s.end();}});return o?yield context.with(o,()=>m(this,null,function*(){return yield g.getTracer().startActiveSpan("complete-chat.handler",a=>m(this,null,function*(){return yield d(a)}))})):yield d()})}function st(r){let{promptTokens:t,completionTokens:o}=r.chatUsage,e;if(r.chatModelPrice)e=r.chatModelPrice;else if(r.model)e=r.model.getModelPricing();else throw new R("No chatModelPrice or model provided");function d(c,l){var G,T;let h=e.tokenRanges.find(y=>c>=y.minTokens&&(y.maxTokens===null||y.maxTokens===void 0||c<y.maxTokens));if(!h)throw new R("Unable to find a pricing tier for the given token count. Please check your model pricing configuration.");let C=(T=(G=h.prices)==null?void 0:G.base)==null?void 0:T[l];if(C===void 0)throw new R("Unable to find a pricing rate for the given token count. Please check your model pricing configuration.");return C}let s=d(t,"inputPricePerMillion"),a=d(t,"outputPricePerMillion"),i=Number((t/1e6*s).toFixed(6)),p=Number((o/1e6*a).toFixed(6));return {cost:i+p,currency:e.currency||"USD",pricingModel:e,usageTokens:r.chatUsage}}var it=z.object({cache:z.custom(),model:z.custom(),config:Config(),embeddingRequests:EmbeddingRequests(),enableCache:z.boolean(),customHeaders:z.record(z.string()).optional(),callbacks:z.array(z.custom()).nonempty().optional(),metadataForCallbacks:z.any().optional()}),es=z.object({request:z.object({config:Config(),embeddingRequests:EmbeddingRequests()}),response:EmbeddingResponse,cached:z.boolean(),latencyInMs:z.number().int().positive(),metadataForCallbacks:z.any().optional(),provider:z.object({request:z.any(),response:z.any()})});function pt(r,t,o){return m(this,null,function*(){let e=f.getLogger(),d=s=>m(this,null,function*(){e==null||e.debug("handleGetEmbeddings invoked"),e==null||e.debug("handleGetEmbeddings request: ",{request:r});let a=it.parse(r),i=r.callbacks||[],p=context.active();try{P(i,"onGetEmbeddingsStart",r.metadataForCallbacks);let n={config:a.config,embeddingRequests:a.embeddingRequests},c={url:yield a.model.getGetEmbeddingsUrl(a.config,a.embeddingRequests),headers:yield a.model.getGetEmbeddingsHeaders(a.config,a.embeddingRequests),data:yield a.model.getGetEmbeddingsData(a.config,a.embeddingRequests)};M()||(c.headers=L(E({},c.headers),{source:"adaline.ai"})),a.customHeaders&&(c.headers=E(E({},c.headers),a.customHeaders)),e==null||e.debug("handleGetEmbeddings providerRequest: ",{providerRequest:c});let l=pe(`get-embeddings:${c.url}:${a.model.modelSchema.name}`,n);if(a.enableCache){e==null||e.debug("handleGetEmbeddings checking cache");let y=yield r.cache.get(l);if(y)return y.cached=!0,e==null||e.debug("handleGetEmbeddings cached hit"),s==null||s.setAttribute("cached",!0),s==null||s.setStatus({code:SpanStatusCode.OK}),P(i,"onGetEmbeddingsCached",r.metadataForCallbacks,y),e==null||e.debug("handleGetEmbeddings cached response: ",{cachedResponse:y}),y}e==null||e.debug("handleGetEmbeddings cache miss");let h=Date.now(),C=yield t.post(c.url,c.data,c.headers,void 0,p),G=Date.now()-h;e==null||e.debug("handleGetEmbeddings providerResponse: ",{providerResponse:C});let T={request:n,response:a.model.transformGetEmbeddingsResponse(C.data),cached:!1,latencyInMs:G,metadataForCallbacks:r.metadataForCallbacks,provider:{request:c,response:C}};return e==null||e.debug("handleGetEmbeddings response: ",{response:T}),a.enableCache&&(yield r.cache.set(l,T),e==null||e.debug("handleGetEmbeddings response cached")),s==null||s.setAttribute("cached",!1),s==null||s.setStatus({code:SpanStatusCode.OK}),P(i,"onGetEmbeddingsComplete",r.metadataForCallbacks,T),T}catch(n){e==null||e.warn("handleGetEmbeddings error: ",{error:n});let c;throw k.isHttpRequestError(n)||n instanceof R?c=n:c=j(n),P(i,"onGetEmbeddingsError",r.metadataForCallbacks,c),c}finally{s==null||s.end();}});return o?yield context.with(o,()=>m(this,null,function*(){return yield g.getTracer().startActiveSpan("get-embeddings.handler",a=>m(this,null,function*(){return yield d(a)}))})):yield d()})}var lt=z.object({messages:z.array(Message()),tools:z.array(Tool()),customHeaders:z.record(z.string()).optional(),callbacks:z.array(z.custom()).nonempty().optional(),metadataForCallbacks:z.any().optional(),abortSignal:z.instanceof(AbortSignal).optional()}),bs=z.object({toolResponses:z.record(z.string(),ToolResponseContent()),cached:z.boolean(),latencyInMs:z.number().int().positive(),metadataForCallbacks:z.any().optional()});function mt(r,t,o){return m(this,null,function*(){let e=f.getLogger(),d=s=>m(this,null,function*(){e==null||e.debug("handleGetToolResponses invoked"),e==null||e.debug("handleGetToolResponses request: ",{request:r});let a=lt.parse(r),i=a.tools,n=a.messages.reduce((h,C)=>{let G=C.content.reduce((T,y)=>(y.modality==="tool-call"&&T.push(y),T),[]);return [...h,...G]},[]),c=r.callbacks||[],l=context.active();try{let h=Date.now(),C=n.map(b=>m(this,null,function*(){let v=i.find(K=>K.definition.schema.name===b.name);if(!(v!=null&&v.request)||v.request.type!=="http")return null;let S=v.request,x=S.method.toLowerCase(),q=S.retry||{maxAttempts:3,initialDelay:1e3,exponentialFactor:2};return yield context.with(l,()=>m(this,null,function*(){return yield g.getTracer().startActiveSpan(`tool-call.${b.name}`,F=>m(this,null,function*(){try{F.setAttribute("tool.name",b.name),F.setAttribute("tool.id",b.id),c&&(yield P(c,"onGetToolResponseStart",b,r.metadataForCallbacks));let D,N;try{let ae=JSON.parse(b.arguments);x==="get"?D=ae:N=ae;}catch(ae){let qt=`executeToolCalls: Error parsing arguments for tool call: ${b.name}, arguments: ${b.arguments}, error: ${ae instanceof Error?ae.message:String(ae)}`;e==null||e.warn(qt);}let B,Z=S.url,Ce=L(E({},S.headers),{"Content-Type":"application/json"});if(S.proxyUrl)B=yield t.post(S.proxyUrl,E(E({method:x,url:Z,headers:Ce},x==="get"?{query:D}:{}),x==="post"?{body:N}:{}),S.proxyHeaders,{retry:q},l);else if(x==="get")B=yield t.get(Z,D,Ce,{retry:q},l);else if(x==="post")B=yield t.post(Z,N,Ce,{retry:q},l);else throw new R(`Unsupported HTTP method: ${S.method}`,400);F.setStatus({code:SpanStatusCode.OK});let He={modality:"tool-response",index:b.index,id:b.id,name:b.name,data:JSON.stringify(B.data),apiResponse:{statusCode:B.status.code}};return c&&(yield P(c,"onGetToolResponseComplete",b,He,r.metadataForCallbacks)),He}catch(D){let N=j(D);c&&(yield P(c,"onGetToolResponseError",b,r.metadataForCallbacks,N)),F.setStatus({code:SpanStatusCode.ERROR,message:N.message}),e==null||e.warn(`Tool call ${b.name} failed:`,D);let B={modality:"tool-response",index:b.index,id:b.id,name:b.name,data:N.message,apiResponse:{statusCode:N.status}};return c&&(yield P(c,"onGetToolResponseError",b,B,r.metadataForCallbacks,N)),B}finally{F.end();}}))}))})),T=(yield Promise.all(C)).filter(b=>b!==null).reduce((b,v)=>(b[v.id]=v,b),{}),y=Date.now()-h;e==null||e.debug("handleGetToolResponses toolResponses: ",{toolResponses:T});let A={toolResponses:T,cached:!1,latencyInMs:y,metadataForCallbacks:r.metadataForCallbacks};return e==null||e.debug("handleGetToolResponses response: ",{response:A}),s==null||s.setStatus({code:SpanStatusCode.OK}),A}catch(h){e==null||e.warn("handleGetToolResponses error: ",{error:h});let C;throw k.isHttpRequestError(h)||h instanceof R?C=h:C=j(h),s==null||s.setStatus({code:SpanStatusCode.ERROR,message:C.message}),C}finally{s==null||s.end();}});return o?yield context.with(o,()=>m(this,null,function*(){return yield g.getTracer().startActiveSpan("get-tool-responses.handler",a=>m(this,null,function*(){return yield d(a)}))})):yield d()})}var ut=z.object({model:z.custom(),data:z.any(),headers:z.record(z.string()),query:z.record(z.string()).optional()}),Ls=z.object({request:z.any(),providerRequest:z.object({url:z.string().url(),headers:z.record(z.string()),data:z.any()}),providerResponse:z.any(),transformedResponse:z.optional(ChatResponse)});function ht(r,t,o){return m(this,null,function*(){let e=f.getLogger(),d=s=>m(this,null,function*(){e==null||e.debug("handleProxyCompleteChat invoked"),e==null||e.debug("handleProxyCompleteChat request: ",{request:r});let a=ut.parse(r),i=context.active();try{a.headers=L(E({},a.headers),{source:"adaline.ai"});let p={url:yield a.model.getProxyCompleteChatUrl(a.data,a.headers,a.query),headers:yield a.model.getProxyCompleteChatHeaders(a.data,a.headers,a.query),data:a.data};e==null||e.debug("handleProxyCompleteChat providerRequest: ",{providerRequest:p});let n=yield t.post(p.url,p.data,p.headers,void 0,i);e==null||e.debug("handleProxyCompleteChat providerResponse: ",{providerResponse:n});let c;try{c=a.model.transformCompleteChatResponse(n.data);}catch(h){e==null||e.warn("handleProxyCompleteChat transformation error: ",{transformationError:h});}let l={request:{header:a.headers,data:a.data,query:a.query},providerRequest:p,providerResponse:n,transformedResponse:c};return e==null||e.debug("handleProxyCompleteChat response: ",{response:l}),s==null||s.setStatus({code:SpanStatusCode.OK}),l}catch(p){e==null||e.warn("handleProxyCompleteChat error: ",{error:p});let n;throw k.isHttpRequestError(p)||p instanceof R?n=p:n=j(p),n}finally{s==null||s.end();}});return o?yield context.with(o,()=>m(this,null,function*(){return yield g.getTracer().startActiveSpan("proxy-complete-chat.handler",a=>m(this,null,function*(){return yield d(a)}))})):yield d()})}var Ct=z.object({model:z.custom(),data:z.any(),headers:z.record(z.string()),query:z.record(z.string()).optional()}),Ws=z.object({request:z.any(),providerRequest:z.object({url:z.string().url(),headers:z.record(z.string()),data:z.any()}),providerResponse:z.any(),transformedResponse:z.optional(EmbeddingResponse)});function Rt(r,t,o){return m(this,null,function*(){let e=f.getLogger(),d=s=>m(this,null,function*(){e==null||e.debug("handleProxyGetEmbeddings invoked"),e==null||e.debug("handleProxyGetEmbeddings request: ",{request:r});let a=Ct.parse(r),i=context.active();try{let p={url:yield a.model.getGetEmbeddingsUrl(),headers:a.headers,data:a.data};p.headers=L(E({},p.headers),{source:"adaline.ai"});let n=E({},p);delete n.headers.host,delete n.headers["content-length"],e==null||e.debug("handleProxyGetEmbeddings providerRequest: ",{providerRequest:p});let c=yield t.post(n.url,n.data,n.headers,void 0,i);e==null||e.debug("handleProxyGetEmbeddings providerResponse: ",{providerResponse:c});let l;try{l=a.model.transformGetEmbeddingsResponse(c.data);}catch(C){e==null||e.warn("handleProxyGetEmbeddings transformation error: ",{transformationError:C});}let h={request:p,providerRequest:n,providerResponse:c,transformedResponse:l};return e==null||e.debug("handleProxyGetEmbeddings response: ",{response:h}),s==null||s.setStatus({code:SpanStatusCode.OK}),h}catch(p){e==null||e.warn("handleProxyGetEmbeddings error: ",{error:p});let n;throw k.isHttpRequestError(p)||p instanceof R?n=p:n=j(p),n}finally{s==null||s.end();}});return o?yield context.with(o,()=>m(this,null,function*(){return yield g.getTracer().startActiveSpan("proxy-get-embeddings.handler",a=>m(this,null,function*(){return yield d(a)}))})):yield d()})}var bt=z.object({model:z.custom(),data:z.any(),headers:z.record(z.string()),query:z.record(z.string()).optional()}),cr=z.object({request:z.any(),providerRequest:z.object({url:z.string().url(),headers:z.record(z.string()),data:z.any()}),providerResponse:z.any(),transformedResponse:z.array(PartialChatResponse).optional()});function Tt(r,t,o){return V(this,null,function*(){let e=f.getLogger(),d=function(s){return V(this,null,function*(){var p,n,c;e==null||e.debug("handleProxyStreamChat invoked"),e==null||e.debug("handleProxyStreamChat request: ",{request:r});let a=context.active(),i=bt.parse(r);try{i.headers=L(E({},i.headers),{source:"adaline.ai"});let v={url:yield new w(i.model.getProxyStreamChatUrl(i.data,i.headers,i.query)),headers:yield new w(i.model.getProxyStreamChatHeaders(i.data,i.headers,i.query)),data:i.data};e==null||e.debug("handleProxyStreamChat providerRequest: ",{providerRequest:v});let S="";try{for(var T=X(t.stream(v.url,"post",v.data,v.headers,void 0,a)),y,A,b;y=!(A=yield new w(T.next())).done;y=!1){let x=A.value;let q=[];try{try{for(var l=X(i.model.transformProxyStreamChatResponseChunk(x,S,i.data,i.headers,i.query)),h,C,G;h=!(C=yield new w(l.next())).done;h=!1){let F=C.value;S=F.buffer;let D=((n=(p=F.partialResponse)==null?void 0:p.partialMessages)==null?void 0:n.length)>0,N=((c=F.partialResponse)==null?void 0:c.usage)!=null;(D||N)&&q.push(F.partialResponse);}}catch(C){G=[C];}finally{try{h&&(C=l.return)&&(yield new w(C.call(l)));}finally{if(G)throw G[0]}}}catch(F){e==null||e.warn("handleProxyStreamChat transformation error",{transformationError:F}),q=void 0;}let K={request:{header:i.headers,data:i.data,query:i.query},providerRequest:v,providerResponse:x,transformedResponse:q};e==null||e.debug("handleProxyStreamChat streamResponse: ",{streamResponse:K}),yield K;}}catch(A){b=[A];}finally{try{y&&(A=T.return)&&(yield new w(A.call(T)));}finally{if(b)throw b[0]}}s==null||s.setStatus({code:SpanStatusCode.OK});}catch(v){e==null||e.warn("handleProxyStreamChat error: ",{error:v});let S;throw k.isHttpRequestError(v)||v instanceof R?S=v:S=j(v),S}finally{s==null||s.end();}})};return o?yield*_(yield new w(context.with(o,()=>m(this,null,function*(){return yield g.getTracer().startActiveSpan("proxy-stream-chat.handler",a=>m(this,null,function*(){return yield d(a)}))})))):yield*_(d())})}var Gt=z.object({model:z.custom(),config:Config(),messages:z.array(Message()),tools:z.array(Tool()).optional(),customHeaders:z.record(z.string()).optional(),callbacks:z.array(z.custom()).nonempty().optional(),metadataForCallbacks:z.any().optional(),abortSignal:z.instanceof(AbortSignal).optional()}),xr=z.object({request:z.object({config:Config(),messages:z.array(Message()),tools:z.array(Tool()).optional()}),response:PartialChatResponse,metadataForCallbacks:z.any().optional(),provider:z.object({request:z.any(),response:z.any()})});function kt(r,t,o){return V(this,null,function*(){let e=f.getLogger(),d=function(s){return V(this,null,function*(){var c,l,h;e==null||e.debug("handleStreamChat invoked"),e==null||e.debug("handleStreamChat request: ",{request:r});let a=Gt.parse(r),i=r.callbacks||[],p=context.active(),n={config:a.config,messages:a.messages,tools:a.tools};try{P(i,"onStreamStart",r.metadataForCallbacks);let x={url:yield new w(a.model.getStreamChatUrl(a.config,a.messages,a.tools)),headers:yield new w(a.model.getStreamChatHeaders(a.config,a.messages,a.tools)),data:yield new w(a.model.getStreamChatData(a.config,a.messages,a.tools))};M()||(x.headers=L(E({},x.headers),{source:"adaline.ai"})),a.customHeaders&&(x.headers=E(E({},x.headers),a.customHeaders)),e==null||e.debug("handleStreamChat providerRequest: ",{providerRequest:x});let q="",K=!0;try{for(var A=X(t.stream(x.url,"post",x.data,x.headers,{abortSignal:r.abortSignal},p)),b,v,S;b=!(v=yield new w(A.next())).done;b=!1){let F=v.value;try{for(var C=X(a.model.transformStreamChatResponseChunk(F,q)),G,T,y;G=!(T=yield new w(C.next())).done;G=!1){let D=T.value;q=D.buffer;let N=((l=(c=D.partialResponse)==null?void 0:c.partialMessages)==null?void 0:l.length)>0,B=((h=D.partialResponse)==null?void 0:h.usage)!=null;if(N||B){let Z={request:n,response:D.partialResponse,metadataForCallbacks:r.metadataForCallbacks,provider:{request:x,response:F}};P(i,K?"onStreamFirstResponse":"onStreamNewResponse",r.metadataForCallbacks,Z),K&&(K=!1),e==null||e.debug("handleStreamChat streamResponse: ",{streamResponse:Z}),yield Z;}}}catch(T){y=[T];}finally{try{G&&(T=C.return)&&(yield new w(T.call(C)));}finally{if(y)throw y[0]}}}}catch(v){S=[v];}finally{try{b&&(v=A.return)&&(yield new w(v.call(A)));}finally{if(S)throw S[0]}}s==null||s.setStatus({code:SpanStatusCode.OK}),P(i,"onStreamEnd",r.metadataForCallbacks);}catch(x){e==null||e.warn("handleStreamChat error: ",{error:x});let q;throw k.isHttpRequestError(x)||x instanceof R?q=x:q=j(x),P(i,"onStreamError",r.metadataForCallbacks,q),q}finally{s==null||s.end();}})};return o?yield*_(yield new w(context.with(o,()=>m(this,null,function*(){return yield g.getTracer().startActiveSpan("stream-chat.handler",a=>m(this,null,function*(){return yield d(a)}))})))):yield*_(d())})}var qe=class{constructor(t={}){var e,d,s,a,i,p,n;if(!t.dangerouslyAllowBrowser&&M())throw new R("It looks like you're running in a browser-like environment. This is disabled by default, as it risks exposing your provider secrets to attackers. If you understand the risks and have appropriate mitigation in place, you can set the `dangerouslyAllowBrowser` option to `true`.");this.options=_e.parse(t),f.setLogger(t.logger),this.logger=t.logger,this.analytics=ue.getAnalyticsRecorder(this.options.enableAnalytics===void 0?!0:this.options.enableAnalytics),g.setTracer((e=t.telemetry)==null?void 0:e.tracer),this.tracer=g.getTracer(),g.setMeter((d=t.telemetry)==null?void 0:d.meter),this.meter=g.getMeter();let o={maxConcurrentTasks:((s=this.options.queueOptions)==null?void 0:s.maxConcurrentTasks)||4,retryCount:((a=this.options.queueOptions)==null?void 0:a.retryCount)||3,retry:((i=this.options.queueOptions)==null?void 0:i.retry)||{initialDelay:1e3,exponentialFactor:2},timeout:((p=this.options.queueOptions)==null?void 0:p.timeout)||12e4};this.queues={completeChat:new oe(o),getEmbeddings:new oe(o),proxyCompleteChat:new oe(o),proxyGetEmbeddings:new oe(o)},this.options.enableProxyAgent=this.options.enableProxyAgent===void 0?!0:this.options.enableProxyAgent,this.httpClient=t.httpClient||new de({timeoutInMilliseconds:o.timeout*.9,enableProxyAgent:this.options.enableProxyAgent}),this.caches={completeChat:t.completeChatCache||new re,getEmbeddings:t.getEmbeddingsCache||new re,getToolResponses:t.getToolResponsesCache||new re},(n=this.logger)==null||n.debug("gateway initialized");}completeChat(t){return m(this,null,function*(){var d,s;(d=this.logger)==null||d.info("gateway.completeChat invoked"),(s=this.logger)==null||s.debug("request: ",{request:t});let o=ne.parse(t),e=o.model.modelSchema.name;return yield this.tracer.startActiveSpan("complete-chat",a=>m(this,null,function*(){return a.setAttribute("modelName",e),new Promise((i,p)=>{var c;let n={id:v4(),request:o,cache:this.caches.completeChat,resolve:l=>{this.analytics.record("completeChat","success",{modelName:e,usage:l.response.usage||{}}),i(l);},reject:l=>{console.log("completeChat error",l),this.analytics.record("completeChat","error",{modelName:e}),p(l);},execute:this.executeCompleteChat.bind(this),telemetryContext:context.active()};this.queues.completeChat.enqueue(n),(c=this.logger)==null||c.debug(`gateway.completeChat task enqueued, id: ${n.id}`);})}))})}executeCompleteChat(t,o){return m(this,null,function*(){var d,s,a,i;(d=this.logger)==null||d.debug("gateway.executeCompleteChat invoked");let e=ne.parse(t);return at({cache:this.caches.completeChat,model:e.model,config:e.config,messages:e.messages,tools:e.tools,enableCache:(a=(s=e.options)==null?void 0:s.enableCache)!=null?a:!0,callbacks:this.options.completeChatCallbacks,metadataForCallbacks:(i=e.options)==null?void 0:i.metadataForCallbacks},this.httpClient,o)})}streamChat(t){return V(this,null,function*(){var i,p,n,c;(i=this.logger)==null||i.info("gateway.streamChat invoked"),(p=this.logger)==null||p.debug("request: ",{request:t});let o=Ke.parse(t),e=o.model.modelSchema.name,d="success",s=this.tracer.startSpan("stream-chat"),a=trace.setSpan(context.active(),s);try{return s.setAttribute("modelName",e),yield*_(yield new w(context.with(a,()=>m(this,null,function*(){var l;return kt({model:o.model,config:o.config,messages:o.messages,tools:o.tools,callbacks:this.options.streamChatCallbacks,metadataForCallbacks:(l=o.options)==null?void 0:l.metadataForCallbacks,abortSignal:o.abortSignal},this.httpClient,a)}))))}catch(l){throw d="error",s.setStatus({code:SpanStatusCode.ERROR,message:"stream failed"}),(n=this.logger)==null||n.error("gateway.streamChat error: ",{error:l}),l instanceof R?l:new R(l==null?void 0:l.message,500,(c=l==null?void 0:l.response)==null?void 0:c.data)}finally{this.analytics.record("streamChat",d,{modelName:e}),s.end();}})}getEmbeddings(t){return m(this,null,function*(){var d,s;(d=this.logger)==null||d.info("gateway.getEmbeddings invoked"),(s=this.logger)==null||s.debug("request: ",{request:t});let o=we.parse(t),e=o.model.modelSchema.name;return yield this.tracer.startActiveSpan("get-embeddings",a=>m(this,null,function*(){return a.setAttribute("modelName",e),new Promise((i,p)=>{var c;let n={id:v4(),request:o,cache:this.caches.getEmbeddings,resolve:l=>{this.analytics.record("getEmbeddings","success",{modelName:e,usage:l.response.usage||{}}),i(l);},reject:l=>{this.analytics.record("getEmbeddings","error",{modelName:e}),p(l);},execute:this.executeGetEmbeddings.bind(this),telemetryContext:context.active()};this.queues.getEmbeddings.enqueue(n),(c=this.logger)==null||c.debug(`gateway.getEmbeddings task enqueued, id: ${n.id}`);})}))})}executeGetEmbeddings(t,o){return m(this,null,function*(){var d,s,a,i;(d=this.logger)==null||d.debug("gateway.executeGetEmbeddings invoked");let e=we.parse(t);return pt({cache:this.caches.getEmbeddings,model:e.model,config:e.config,embeddingRequests:e.embeddingRequests,enableCache:(a=(s=e.options)==null?void 0:s.enableCache)!=null?a:!0,callbacks:this.options.getEmbeddingsCallbacks,metadataForCallbacks:(i=e.options)==null?void 0:i.metadataForCallbacks},this.httpClient,o)})}proxyCompleteChat(t){return m(this,null,function*(){var d,s;(d=this.logger)==null||d.info("gateway.proxyCompleteChat invoked"),(s=this.logger)==null||s.debug("request: ",{request:t});let o=xe.parse(t),e=o.model.modelSchema.name;return yield this.tracer.startActiveSpan("proxy-complete-chat",a=>m(this,null,function*(){return a.setAttribute("modelName",e),new Promise((i,p)=>{var c;let n={id:v4(),request:o,resolve:l=>{var h;this.analytics.record("proxyCompleteChat","success",{modelName:e,usage:((h=l.transformedResponse)==null?void 0:h.usage)||{}}),i(l);},reject:l=>{console.log("proxyCompleteChat error",l),this.analytics.record("proxyCompleteChat","error",{modelName:e}),p(l);},execute:this.executeProxyCompleteChat.bind(this),telemetryContext:context.active()};this.queues.proxyCompleteChat.enqueue(n),(c=this.logger)==null||c.debug(`gateway.proxyCompleteChat task enqueued, id: ${n.id}`);})}))})}executeProxyCompleteChat(t,o){return m(this,null,function*(){var d;(d=this.logger)==null||d.debug("gateway.executeCompleteChat invoked");let e=xe.parse(t);return ht({model:e.model,data:e.data,headers:e.headers,query:e.query},this.httpClient,o)})}proxyStreamChat(t){return V(this,null,function*(){var i,p,n,c;(i=this.logger)==null||i.info("gateway.proxyStreamChat invoked"),(p=this.logger)==null||p.debug("proxyStreamChat request: ",{request:t});let o=Be.parse(t),e=o.model.modelSchema.name,d="success",s=this.tracer.startSpan("proxy-stream-chat"),a=trace.setSpan(context.active(),s);try{return s.setAttribute("modelName",e),yield*_(yield new w(context.with(a,()=>m(this,null,function*(){return Tt({model:o.model,data:o.data,headers:o.headers,query:o.query},this.httpClient,a)}))))}catch(l){throw d="error",s.setStatus({code:SpanStatusCode.ERROR,message:"proxy stream failed"}),(n=this.logger)==null||n.error("gateway.proxyStreamChat error: ",{error:l}),l instanceof R?l:new R(l==null?void 0:l.message,500,(c=l==null?void 0:l.response)==null?void 0:c.data)}finally{this.analytics.record("proxyStreamChat",d,{modelName:e}),s.end();}})}proxyGetEmbeddings(t){return m(this,null,function*(){var d,s;(d=this.logger)==null||d.info("gateway.proxyGetEmbeddings invoked"),(s=this.logger)==null||s.debug("request: ",{request:t});let o=Ee.parse(t),e=o.model.modelSchema.name;return yield this.tracer.startActiveSpan("proxy-get-embeddings",a=>m(this,null,function*(){return a.setAttribute("modelName",e),new Promise((i,p)=>{var c;let n={id:v4(),request:o,resolve:l=>{var h;this.analytics.record("proxyGetEmbeddings","success",{modelName:e,usage:((h=l.transformedResponse)==null?void 0:h.usage)||{}}),i(l);},reject:l=>{this.analytics.record("proxyGetEmbeddings","error",{modelName:e}),p(l);},execute:this.executeProxyGetEmbeddings.bind(this),telemetryContext:context.active()};this.queues.proxyGetEmbeddings.enqueue(n),(c=this.logger)==null||c.debug(`gateway.proxyGetEmbeddings task enqueued, id: ${n.id}`);})}))})}executeProxyGetEmbeddings(t,o){return m(this,null,function*(){var d;(d=this.logger)==null||d.debug("gateway.executeProxyGetEmbeddings invoked");let e=Ee.parse(t);return Rt({model:e.model,headers:e.headers,data:e.data,query:e.query},this.httpClient,o)})}getToolResponses(t){return m(this,null,function*(){var a,i,p,n;(a=this.logger)==null||a.info("gateway.getToolResponses invoked"),(i=this.logger)==null||i.debug("request: ",{request:t});let o=Ye.parse(t),e="success",d=this.tracer.startSpan("get-tool-responses"),s=trace.setSpan(context.active(),d);try{return yield context.with(s,()=>m(this,null,function*(){var c,l;return mt({tools:o.tools,messages:o.messages,customHeaders:(c=o.options)==null?void 0:c.customHeaders,callbacks:this.options.getToolResponsesCallbacks,metadataForCallbacks:(l=o.options)==null?void 0:l.metadataForCallbacks,abortSignal:o.abortSignal},this.httpClient,s)}))}catch(c){throw e="err