@adaline/gateway 0.22.0 → 0.23.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.map +1 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +5 -5
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/errors/errors.ts","../src/plugins/http-client/http-client.error.ts","../src/plugins/telemetry/telemetry.manager.ts","../src/plugins/http-client/isomorphic.http-client.ts","../src/plugins/queue/queue.error.ts","../src/plugins/queue/queue.interface.ts","../src/utils/utils.ts","../src/plugins/logger/logger.manager.ts","../src/plugins/logger/console.logger.ts","../src/plugins/queue/simple.queue.ts","../src/plugins/cache/lru.cache.ts","../src/plugins/analytics/no-op.analytics.ts","../src/plugins/analytics/analytics.utils.ts","../src/plugins/analytics/post.analytics.ts","../src/plugins/analytics/analytics.manager.ts","../src/gateway.types.ts","../src/handlers/complete-chat/complete-chat.handler.ts","../src/handlers/complete-chat/complete-chat.types.ts","../src/handlers/get-embeddings/get-embeddings.handler.ts","../src/handlers/get-embeddings/get-embeddings.types.ts","../src/handlers/stream-chat/stream-chat.types.ts","../src/handlers/stream-chat/stream-chat.handler.ts","../src/gateway.ts"],"names":["GatewayError","_GatewayError","message","status","data","GatewayTelemetryErrorLiteral","GatewayTelemetryError","_GatewayTelemetryError","GatewayBaseError","info","cause","error","HttpClientErrorLiteral","HttpClientError","_HttpClientError","HttpRequestErrorLiteral","HttpRequestError","_HttpRequestError","headers","TelemetryManager","tracer","trace","meter","metrics","convertHeadersToRecord","headerRecord","key","value","axiosToHttpRequestError","_a","_b","_c","IsomorphicHttpClient","config","axiosInstance","timeoutInMilliseconds","axios","Timeout","z","ProxyAgent","logger","LoggerManager","_0","_1","_2","__async","method","url","dataOrParams","additionalConfig","telemetryContext","_makeRequest","span","__spreadProps","__spreadValues","resp","SpanStatusCode","response","context","ATTR_HTTP_REQUEST_METHOD","ATTR_URL_FULL","options","__asyncGenerator","_stream","__await","iter","__forAwait","more","temp","chunk","decodedChunk","fetchConfig","text","reader","done","decodedValue","__yieldStar","params","QueueTaskTimeoutErrorLiteral","QueueTaskTimeoutError","_QueueTaskTimeoutError","QueueOptions","getCacheKeyHash","prefix","object","sha256","castToError","err","isRunningInBrowser","logColors","verbose","level","action","args","debug","safelyInvokeCallbacks","callbacks","name","promises","callback","func","result","delay","ms","resolve","ConsoleLogger","SimpleQueue","task","taskSpan","taskTelemetryContext","reject","timeout","retryRemaining","shouldRetry","delayMs","taskRequest","GatewayCompleteChatRequest","retryDelay","retrySpan","item","LRUCache","maxEntries","LRU","NoOpAnalytics","event","dimensions","getNodeDetails","os","getBrowserDetails","getGatewayVersion","packageJsonPath","join","readFileSync","PostAnalytics","analyticsEvent","eventsToSend","events","AnalyticsManager","analyticsEnabled","GatewayOptions","GatewayCompleteChatRequestOptions","Config","Message","Tool","GatewayStreamChatRequestOptions","GatewayStreamChatRequest","GatewayGetEmbeddingsRequestOptions","GatewayGetEmbeddingsRequest","EmbeddingRequests","CompleteChatHandlerRequest","CompleteChatHandlerResponse","ChatResponse","handleCompleteChat","request","client","_handleCompleteChat","handlerTelemetryContext","providerData","providerRequest","cacheKey","cachedResponse","now","providerResponse","latencyInMs","safeError","GetEmbeddingsHandlerRequest","GetEmbeddingsHandlerResponse","EmbeddingResponse","handleGetEmbeddings","_handleGetEmbeddings","StreamChatHandlerRequest","StreamChatHandlerResponse","PartialChatResponse","handleStreamChat","_handleStreamChat","stable","buffer","isFirstResponse","transformed","streamResponse","Gateway","_d","_e","_f","_g","queueOptions","modelName","uuidv4","activeContext"],"mappings":"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","file":"index.js","sourcesContent":["import { GatewayBaseError } from \"@adaline/types\";\n\nclass 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\nconst GatewayTelemetryErrorLiteral = \"GatewayTelemetryError\" as const;\nclass GatewayTelemetryError extends GatewayBaseError {\n readonly info: string;\n readonly cause: unknown;\n\n constructor({ info, cause }: { info: string; cause: unknown }) {\n super({ info, cause }, GatewayTelemetryErrorLiteral);\n this.info = info;\n this.cause = cause;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n\n static isGatewayTelemetryError(error: unknown): error is GatewayTelemetryError {\n return error instanceof GatewayTelemetryError;\n }\n}\n\nexport { GatewayError, GatewayTelemetryError };\n","import { GatewayBaseError } from \"@adaline/types\";\n\nconst HttpClientErrorLiteral = \"HttpClientError\" as const;\nclass HttpClientError extends GatewayBaseError {\n readonly info: string;\n readonly cause: unknown;\n\n constructor({ info, cause }: { info: string; cause: unknown }) {\n super({ info, cause }, HttpClientErrorLiteral);\n this.info = info;\n this.cause = cause;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n\n static isHttpClientError(error: unknown): error is HttpClientError {\n return error instanceof HttpClientError;\n }\n}\n\nconst HttpRequestErrorLiteral = \"HttpRequestError\" as const;\nclass HttpRequestError extends GatewayBaseError {\n readonly info: string;\n readonly cause: {\n status: number;\n headers: Record<string, string>;\n data: unknown;\n };\n\n constructor(message: string, status: number = 500, headers: Record<string, string>, data: unknown) {\n super({ info: message, cause: { status, headers, data } }, HttpRequestErrorLiteral);\n this.info = message;\n this.cause = { status, headers, data };\n Object.setPrototypeOf(this, new.target.prototype);\n }\n\n static isHttpRequestError(error: unknown): error is HttpRequestError {\n return error instanceof HttpRequestError;\n }\n}\n\nexport { HttpClientError, HttpRequestError };\n","import { Meter, metrics, trace, Tracer } from \"@opentelemetry/api\";\n\nclass TelemetryManager {\n static DEFAULT_TRACER_KEY = \"gateway\";\n static DEFAULT_METER_KEY = \"gateway\";\n\n private static tracer: Tracer | undefined = undefined;\n private static meter: Meter | undefined = undefined;\n\n static setTracer(tracer: Tracer | undefined): void {\n if (!this.tracer) {\n this.tracer = tracer || trace.getTracer(this.DEFAULT_TRACER_KEY);\n }\n }\n\n static getTracer(): Tracer {\n return this.tracer || trace.getTracer(this.DEFAULT_TRACER_KEY);\n }\n\n static setMeter(meter: Meter | undefined): void {\n if (!this.meter) {\n this.meter = meter || metrics.getMeter(this.DEFAULT_METER_KEY);\n }\n }\n\n static getMeter(): Meter {\n return this.meter || metrics.getMeter(this.DEFAULT_METER_KEY);\n }\n}\n\nexport { TelemetryManager };\n","import { Context, context, Span, SpanStatusCode, Tracer } from \"@opentelemetry/api\";\nimport { ATTR_HTTP_REQUEST_METHOD, ATTR_URL_FULL } from \"@opentelemetry/semantic-conventions\";\nimport axios, { AxiosError, AxiosInstance, AxiosRequestConfig } from \"axios\";\nimport { ProxyAgent } from \"proxy-agent\";\nimport { z } from \"zod\";\n\nimport { LoggerManager } from \"../../plugins\";\nimport { TelemetryManager } from \"../../plugins/telemetry\";\nimport { HttpClientError, HttpRequestError } from \"./http-client.error\";\nimport { HttpClient, HttpClientResponse } from \"./http-client.interface\";\n\nconst convertHeadersToRecord = (headers: any): Record<string, string> => {\n const headerRecord: Record<string, string> = {};\n if (headers && (typeof headers === \"object\" || headers instanceof Headers)) {\n Object.entries(headers).forEach(([key, value]) => {\n if (Array.isArray(value)) {\n headerRecord[key] = value.join(\", \");\n } else if (typeof value === \"string\") {\n headerRecord[key] = value;\n } else {\n headerRecord[key] = \"\";\n }\n });\n }\n\n return headerRecord;\n};\n\nconst axiosToHttpRequestError = (error: AxiosError): HttpRequestError => {\n const message = error?.message || \"An unexpected error occurred\";\n const status = error?.response?.status || 500;\n const headers = convertHeadersToRecord(error?.response?.headers) || {};\n const data = error?.response?.data || {};\n return new HttpRequestError(message, status, headers, data);\n};\n\ninterface IsomorphicHttpClientConfig {\n timeoutInMilliseconds?: number;\n axiosInstance?: AxiosInstance;\n telemetryTracer?: Tracer;\n}\n\nclass IsomorphicHttpClient implements HttpClient {\n private defaultTimeout?: number;\n private client: AxiosInstance;\n private httpProxyAgent?: ProxyAgent;\n private httpsProxyAgent?: ProxyAgent;\n\n constructor(config: IsomorphicHttpClientConfig) {\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 this.httpProxyAgent = new ProxyAgent();\n this.httpsProxyAgent = new ProxyAgent({\n rejectUnauthorized: false, // Don't check SSL cert\n });\n const logger = LoggerManager.getLogger();\n logger?.debug(`IsomorphicHttpClient initialized with defaultTimeout: ${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 telemetryContext?: Context\n ): Promise<HttpClientResponse<T>> {\n const logger = LoggerManager.getLogger();\n const _makeRequest = async <T>(span?: Span): Promise<HttpClientResponse<T>> => {\n try {\n const config: AxiosRequestConfig = {\n ...(method === \"get\" || method === \"delete\" ? { params: dataOrParams } : { data: dataOrParams }),\n ...additionalConfig,\n timeout: this.defaultTimeout,\n httpAgent: this.httpProxyAgent,\n httpsAgent: this.httpsProxyAgent,\n };\n\n if (method === \"get\" || method === \"delete\") {\n const resp = await this.client[method]<T>(url, config);\n span?.setStatus({ code: SpanStatusCode.OK, message: \"request successful\" });\n const response = {\n data: resp.data,\n headers: convertHeadersToRecord(resp.headers),\n status: {\n code: resp.status,\n text: resp.statusText,\n },\n };\n logger?.debug(\"IsomorphicHttpClient.makeRequest response: \", response);\n return response;\n } else {\n const resp = await this.client[method]<T>(url, config.data, {\n ...config,\n params: config.params,\n });\n span?.setStatus({ code: SpanStatusCode.OK, message: \"request successful\" });\n const response = {\n data: resp.data,\n headers: convertHeadersToRecord(resp.headers),\n status: {\n code: resp.status,\n text: resp.statusText,\n },\n };\n logger?.debug(\"IsomorphicHttpClient.makeRequest response: \", response);\n return response;\n }\n } catch (error) {\n logger?.warn(\"IsomorphicHttpClient.makeRequest error: \", error);\n span?.setStatus({ code: SpanStatusCode.ERROR, message: \"request failed\" });\n if (axios.isAxiosError(error)) throw axiosToHttpRequestError(error);\n throw new HttpClientError({ info: \"An unexpected error occurred\", cause: error });\n } finally {\n span?.end();\n }\n };\n\n if (!telemetryContext) {\n return _makeRequest<T>();\n }\n\n return await context.with(telemetryContext, async () => {\n const tracer = TelemetryManager.getTracer();\n return await tracer.startActiveSpan(\"http.request\", async (span: Span) => {\n span.setAttribute(ATTR_HTTP_REQUEST_METHOD, method.toUpperCase());\n span.setAttribute(ATTR_URL_FULL, url);\n return await _makeRequest<T>(span);\n });\n });\n }\n\n // TODO: needs testing for with context and without context\n async *stream<T>(\n url: string,\n method: \"get\" | \"post\",\n data?: Record<string, unknown>,\n headers?: Record<string, string>,\n options?: {\n abortSignal?: AbortSignal;\n },\n telemetryContext?: Context\n ): AsyncGenerator<T, void, unknown> {\n const logger = LoggerManager.getLogger();\n logger?.debug(`IsomorphicHttpClient.STREAM request to ${url}`, { data, headers });\n const _stream = async function* (this: IsomorphicHttpClient, span?: Span): AsyncGenerator<T, void, unknown> {\n try {\n if (this.isNodeEnvironment()) {\n logger?.debug(\"IsomorphicHttpClient.stream in node environment\");\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 span?.addEvent(\"stream.chunk\", { message: \"stream chunk received\" });\n const decodedChunk = chunk.toString();\n logger?.debug(\"IsomorphicHttpClient.stream chunk: \", decodedChunk);\n yield decodedChunk as unknown as T;\n }\n span?.setStatus({ code: SpanStatusCode.OK, message: \"stream successful\" });\n } else {\n logger?.debug(\"IsomorphicHttpClient.stream in browser environment\");\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 logger?.warn(\"IsomorphicHttpClient.stream response not ok: \", response);\n span?.setStatus({ code: SpanStatusCode.ERROR, message: \"stream failed\" });\n const text: any = await response.json();\n throw new HttpRequestError(\n `Request failed with status ${response.status}`,\n response.status,\n convertHeadersToRecord(response.headers),\n text\n );\n }\n\n if (response.body) {\n const reader = response.body.getReader();\n while (true) {\n const { done, value } = await reader.read();\n if (done) {\n span?.addEvent(\"stream.chunk\", { message: \"stream chunk received\" });\n const decodedValue = new TextDecoder().decode(value, { stream: true });\n logger?.debug(\"IsomorphicHttpClient.stream chunk: \", decodedValue);\n yield decodedValue as unknown as T;\n break;\n }\n\n span?.addEvent(\"stream.chunk\", { message: \"stream chunk received\" });\n const decodedValue = new TextDecoder().decode(value, { stream: true });\n logger?.debug(\"IsomorphicHttpClient.stream chunk: \", decodedValue);\n yield decodedValue as unknown as T;\n }\n span?.setStatus({ code: SpanStatusCode.OK, message: \"stream successful\" });\n } else {\n logger?.warn(\"IsomorphicHttpClient.stream response has no body\");\n span?.setStatus({ code: SpanStatusCode.ERROR, message: \"stream failed\" });\n throw new HttpRequestError(\"Cannot stream the body of the response.\", 500, {}, response);\n }\n }\n } catch (error: any) {\n logger?.warn(\"IsomorphicHttpClient.stream error: \", error);\n span?.setStatus({ code: SpanStatusCode.ERROR, message: \"stream failed\" });\n if (HttpRequestError.isHttpRequestError(error)) throw error;\n if (error?.name === \"AbortError\") throw new HttpRequestError(\"AbortError\", 408, {}, {});\n if (error?.name === \"CanceledError\") throw new HttpRequestError(\"AbortError\", 408, {}, {});\n // TODO: how to convert non-axios errors to HttpRequestError for fetch aka browser environment\n if (axios.isAxiosError(error)) throw axiosToHttpRequestError(error);\n throw new HttpClientError({ info: \"An unexpected error occurred\", cause: error });\n } finally {\n span?.end();\n }\n }.bind(this);\n\n if (!telemetryContext) {\n return yield* _stream();\n }\n\n return yield* await context.with(telemetryContext, async () => {\n const tracer = TelemetryManager.getTracer();\n return await tracer.startActiveSpan(\"http.stream\", async (span: Span) => {\n span.setAttribute(ATTR_HTTP_REQUEST_METHOD, method.toUpperCase());\n span.setAttribute(ATTR_URL_FULL, url);\n return await _stream(span);\n });\n });\n }\n\n async get<T>(\n url: string,\n params?: Record<string, unknown>,\n headers?: Record<string, string | undefined>,\n telemetryContext?: Context\n ): Promise<HttpClientResponse<T>> {\n const logger = LoggerManager.getLogger();\n logger?.debug(`IsomorphicHttpClient.GET request to ${url}`, { params, headers });\n return this.makeRequest<T>(\"get\", url, params || {}, { headers }, telemetryContext);\n }\n\n async post<T>(\n url: string,\n data?: Record<string, unknown>,\n headers?: Record<string, string | undefined>,\n telemetryContext?: Context\n ): Promise<HttpClientResponse<T>> {\n const logger = LoggerManager.getLogger();\n logger?.debug(`IsomorphicHttpClient.POST request to ${url}`, { data, headers });\n return this.makeRequest<T>(\"post\", url, data || {}, { headers }, telemetryContext);\n }\n\n async put<T>(\n url: string,\n data?: Record<string, unknown>,\n headers?: Record<string, string | undefined>,\n telemetryContext?: Context\n ): Promise<HttpClientResponse<T>> {\n const logger = LoggerManager.getLogger();\n logger?.debug(`IsomorphicHttpClient.PUT request to ${url}`, { data, headers });\n return this.makeRequest<T>(\"put\", url, data || {}, { headers }, telemetryContext);\n }\n\n async delete<T>(\n url: string,\n params?: Record<string, unknown>,\n headers?: Record<string, string | undefined>,\n telemetryContext?: Context\n ): Promise<HttpClientResponse<T>> {\n const logger = LoggerManager.getLogger();\n logger?.debug(`IsomorphicHttpClient.DELETE request to ${url}`, { params, headers });\n return this.makeRequest<T>(\"delete\", url, params || {}, { headers }, telemetryContext);\n }\n\n async patch<T>(\n url: string,\n data?: Record<string, unknown>,\n headers?: Record<string, string | undefined>,\n telemetryContext?: Context\n ): Promise<HttpClientResponse<T>> {\n const logger = LoggerManager.getLogger();\n logger?.debug(`IsomorphicHttpClient.PATCH request to ${url}`, { data, headers });\n return this.makeRequest<T>(\"patch\", url, data || {}, { headers }, telemetryContext);\n }\n}\n\nexport { IsomorphicHttpClient };\n","import { GatewayBaseError } from \"@adaline/types\";\n\nconst QueueTaskTimeoutErrorLiteral = \"QueueTaskTimeoutError\" as const;\nclass QueueTaskTimeoutError extends GatewayBaseError {\n readonly info: string;\n readonly cause: unknown;\n\n constructor({ info, cause }: { info: string; cause: unknown }) {\n super({ info, cause }, QueueTaskTimeoutErrorLiteral);\n this.info = info;\n this.cause = cause;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n\n static isQueueTaskTimeoutError(error: unknown): error is QueueTaskTimeoutError {\n return error instanceof QueueTaskTimeoutError;\n }\n}\n\nexport { QueueTaskTimeoutError };\n","import { Context } from \"@opentelemetry/api\";\nimport { z } from \"zod\";\n\nimport { type Cache } from \"../cache\";\n\ntype QueueTask<Request, Response> = {\n id: string;\n request: Request;\n cache: Cache<Response>;\n resolve: (value: Response) => void;\n reject: (error: any) => void;\n execute: (request: Request, context: Context) => Promise<Response>;\n telemetryContext: Context;\n};\n\ninterface Queue<Request, Response> {\n enqueue(task: QueueTask<Request, Response>): void;\n}\n\nconst QueueOptions = z.object({\n maxConcurrentTasks: z.number().int().positive(),\n retryCount: z.number().int().positive(),\n timeout: z.number().int().positive(),\n retry: z.object({\n initialDelay: z.number().int().positive(),\n exponentialFactor: z.number().int().positive(),\n }),\n});\ntype QueueOptionsType = z.infer<typeof QueueOptions>;\n\nexport { QueueOptions, type Queue, type QueueOptionsType, type QueueTask };\n","import sha256 from \"crypto-js/sha256.js\";\n\nimport { GatewayError } from \"../errors/errors\";\nimport { HttpClientError } from \"../plugins/http-client/http-client.error\";\n\nconst getCacheKeyHash = (prefix: string, object: object): string => {\n return sha256(prefix + JSON.stringify(object)).toString();\n};\n\nconst castToError = (err: any): GatewayError => {\n if (err instanceof GatewayError) return err;\n if (HttpClientError.isHttpClientError(err)) return new GatewayError(err.message as string);\n if (err instanceof Error) return new GatewayError(err.message as string);\n return new GatewayError(err);\n};\n\nconst isRunningInBrowser = () => {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n return typeof window !== \"undefined\" && typeof window.document !== \"undefined\" && typeof navigator !== \"undefined\";\n};\n\nconst logLevels = {\n error: 0,\n warn: 1,\n info: 2,\n};\n\nconst logColors = {\n error: \"color: red\",\n warn: \"color: yellow\",\n info: \"color: green\",\n};\n\nconst verbose = (level: keyof typeof logLevels, action: string, ...args: any[]) => {\n if (!isRunningInBrowser()) {\n // Node.js environment\n switch (level) {\n case \"error\":\n console.error(...args);\n break;\n case \"warn\":\n console.warn(...args);\n break;\n default:\n console.log(...args);\n }\n } else if (isRunningInBrowser()) {\n // Browser environment\n console.log(`%c[${level.toUpperCase()}] [${action}]`, logColors[level], ...args);\n }\n};\n\nconst debug = (level: keyof typeof logLevels, action: string, ...args: any[]) => {\n if (isRunningInBrowser()) return;\n // eslint-disable-next-line turbo/no-undeclared-env-vars\n if (process?.env?.DEBUG !== \"true\") return;\n verbose(level, action, ...args);\n};\n\ntype Prettify<T> = {\n [K in keyof T]: T[K];\n} & unknown;\n\ninterface BaseCallback {\n [key: string]: (...args: any[]) => void | Promise<void>;\n}\n\ntype ArgumentsType<T> = T extends (...args: infer A) => any ? A : never;\n\nconst safelyInvokeCallbacks = async <T extends BaseCallback, K extends keyof T>(\n callbacks: T[],\n name: keyof T,\n ...args: ArgumentsType<T[K]>\n): Promise<void> => {\n const promises: Promise<void>[] = [];\n\n callbacks.forEach((callback) => {\n const func = callback[name];\n if (typeof func === \"function\") {\n try {\n const result = func(...args);\n if (result instanceof Promise) {\n promises.push(result);\n }\n } catch (error) {\n debug(\"error\", `SAFELY_INVOKE_CALLBACKS:${String(name)}:`, error);\n }\n }\n });\n\n await Promise.allSettled(promises);\n};\n\nconst delay = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms));\n\nconst calcRateLimitRetryTimeout = (\n maxRetries: number,\n backOffInitialDelay: number,\n backOffMultiplier: number,\n executionTimePerAttempt: number\n): number => {\n let totalDelayTime = 0;\n const totalExecutionTime = maxRetries * executionTimePerAttempt;\n\n for (let i = 0; i < maxRetries; i++) {\n totalDelayTime += backOffInitialDelay * Math.pow(backOffMultiplier, i);\n }\n\n return totalDelayTime + totalExecutionTime;\n};\n\nconst defaultShouldRetry = (status: number) => {\n // Rate limit errors are handled separately.\n\n // Retry on request timeouts.\n if (status === 408) return true;\n // Retry on lock timeouts.\n if (status === 409) return true;\n // Retry internal errors.\n if (status >= 500) return true;\n\n return false;\n};\n\nexport {\n calcRateLimitRetryTimeout,\n castToError,\n debug,\n defaultShouldRetry,\n delay,\n getCacheKeyHash,\n isRunningInBrowser,\n safelyInvokeCallbacks,\n type Prettify,\n};\n","import { Logger } from \"./logger.interface\";\n\nclass LoggerManager {\n private static logger: Logger | undefined;\n\n static setLogger(logger: Logger | undefined): void {\n this.logger = logger;\n }\n\n static getLogger(): Logger | undefined {\n return this.logger;\n }\n}\n\nexport { LoggerManager };\n","import { isRunningInBrowser } from \"../../utils/utils\";\nimport { Logger } from \"./logger.interface\";\n\nexport class ConsoleLogger implements Logger {\n debug(message: string, ...params: any[]): void {\n console.debug(message, ...params);\n }\n\n info(message: string, ...params: any[]): void {\n console.info(message, ...params);\n }\n\n warn(message: string, ...params: any[]): void {\n if (isRunningInBrowser()) {\n console.warn(`%WARN: %c${message}`, \"color: yellow; font-weight: bold;\", \"\", ...params);\n } else {\n const yellow = \"\\x1b[33m\";\n const reset = \"\\x1b[0m\";\n console.warn(`${yellow}WARN:${reset} ${message}`, ...params);\n }\n }\n\n error(message: string, ...params: any[]): void {\n if (isRunningInBrowser()) {\n console.error(`%ERROR: %c${message}`, \"color: lightcoral; font-weight: bold;\", \"\", ...params);\n } else {\n const red = \"\\x1b[91m\";\n const reset = \"\\x1b[0m\";\n console.error(`${red}ERROR:${reset} ${message}`, ...params);\n }\n }\n\n critical(message: string, ...params: any[]): void {\n if (isRunningInBrowser()) {\n console.error(`%cCRITICAL: %c${message}`, \"color: red; font-weight: bold;\", \"\", ...params);\n } else {\n const redBold = \"\\x1b[31;1m\";\n const reset = \"\\x1b[0m\";\n console.error(`${redBold}CRITICAL:${reset} ${message}`, ...params);\n }\n }\n}\n","import { Context, context, Span, SpanStatusCode, trace } from \"@opentelemetry/api\";\n\nimport { GatewayCompleteChatRequest } from \"../../gateway.types\";\nimport { delay } from \"../../utils\";\nimport { HttpRequestError } from \"./../http-client\";\nimport { LoggerManager } from \"./../logger\";\nimport { TelemetryManager } from \"./../telemetry\";\nimport { QueueTaskTimeoutError } from \"./queue.error\";\nimport { Queue, QueueOptionsType, QueueTask } from \"./queue.interface\";\n\nclass SimpleQueue<Request, Response> implements Queue<Request, Response> {\n private options: QueueOptionsType;\n private activeTasks = 0;\n private queue: { task: QueueTask<Request, Response>; taskSpan: Span }[] = [];\n\n constructor(options: QueueOptionsType) {\n this.options = options;\n }\n\n public enqueue(task: QueueTask<Request, Response>): void {\n const logger = LoggerManager.getLogger();\n logger?.debug(`SimpleQueue.enqueue invoked, id: ${task.id}`);\n context.with(task.telemetryContext, async () => {\n const tracer = TelemetryManager.getTracer();\n return tracer.startActiveSpan(\"queue.task.pickup-wait\", async (taskSpan: Span) => {\n taskSpan.setAttribute(\"id\", task.id);\n this.queue.push({ task, taskSpan });\n logger?.debug(`SimpleQueue.enqueue task enqueued, id: ${task.id}`);\n });\n });\n this.processQueue();\n }\n\n private executeWithTimeout(task: QueueTask<Request, Response>, taskTelemetryContext: Context): Promise<Response> {\n const logger = LoggerManager.getLogger();\n logger?.debug(`SimpleQueue.executeWithTimeout invoked with timeout: ${this.options.timeout}, id: ${task.id}`);\n return new Promise((resolve, reject) => {\n const timeout = setTimeout(() => {\n logger?.warn(`SimpleQueue.executeWithTimeout timed out, id: ${task.id}`);\n reject(\n new QueueTaskTimeoutError({\n info: \"Queue task timeout\",\n cause: new Error(\"Queue task timeout\"),\n })\n );\n }, this.options.timeout);\n\n logger?.debug(`SimpleQueue.executeWithTimeout task executing, id: ${task.id}`);\n task\n .execute(task.request, taskTelemetryContext)\n .then((result) => {\n logger?.debug(`SimpleQueue.executeWithTimeout task completed, id: ${task.id}`);\n clearTimeout(timeout);\n resolve(result);\n })\n .catch((error) => {\n logger?.warn(`SimpleQueue.executeWithTimeout task errored, id: ${task.id}`);\n clearTimeout(timeout);\n reject(error);\n });\n });\n }\n\n private async executeWithRetry(task: QueueTask<Request, Response>, retryRemaining: number): Promise<Response> {\n const logger = LoggerManager.getLogger();\n return await context.with(task.telemetryContext, async () => {\n const tracer = TelemetryManager.getTracer();\n return await tracer.startActiveSpan(\"queue.task.execute\", async (span: Span) => {\n logger?.debug(`SimpleQueue.executeWithRetry invoked, attempt: ${this.options.retryCount - retryRemaining}, id: ${task.id}`);\n span.setAttribute(\"attempt\", this.options.retryCount - retryRemaining);\n try {\n const taskTelemetryContext = context.active();\n const response = await this.executeWithTimeout(task, taskTelemetryContext);\n span.setStatus({ code: SpanStatusCode.OK });\n span.end();\n return response;\n } catch (error) {\n if (retryRemaining === 0) {\n logger?.warn(`SimpleQueue.executeWithRetry retry count reached, id: ${task.id}`);\n // span.setStatus({ code: SpanStatusCode.ERROR });\n span.end();\n throw error;\n }\n\n let shouldRetry = true;\n let delayMs =\n this.options.retry.initialDelay * Math.pow(this.options.retry.exponentialFactor, this.options.retryCount - retryRemaining);\n if (HttpRequestError.isHttpRequestError(error)) {\n // rate limiting error\n if (error.cause.status === 429) {\n logger?.warn(`SimpleQueue.executeWithRetry rate limiting error, id: ${task.id}`);\n const taskRequest = GatewayCompleteChatRequest.safeParse(task.request);\n if (taskRequest.success) {\n const retryDelay = taskRequest.data.model.getRetryDelay(error.cause.headers);\n shouldRetry = retryDelay.shouldRetry;\n // valid delayMs is returned from model\n if (retryDelay.delayMs > 0) {\n delayMs = retryDelay.delayMs;\n }\n }\n }\n\n if (error.cause.status >= 500 && error.cause.status < 600) {\n logger?.warn(`SimpleQueue.executeWithRetry ${error.cause.status} error, id: ${task.id}`);\n // implement retry logic for 500 errors\n // else defaults to exponential backoff\n }\n } else {\n logger?.warn(`SimpleQueue.executeWithRetry non http-request error, id: ${task.id}`, { error });\n // implement retry logic for non http-request errors\n // else defaults to exponential backoff\n }\n\n if (!shouldRetry) {\n // span.setStatus({ code: SpanStatusCode.ERROR });\n logger?.warn(`SimpleQueue.executeWithRetry model returned should not retry, id: ${task.id}`);\n span.end();\n throw error;\n } else {\n // span.setStatus({ code: SpanStatusCode.ERROR });\n return await tracer.startActiveSpan(\"queue.task.retry-wait\", async (retrySpan: Span) => {\n logger?.debug(`SimpleQueue.executeWithRetry retry wait: ${delayMs}ms, id: ${task.id}`);\n await delay(delayMs);\n retrySpan.end();\n span.end();\n return this.executeWithRetry(task, retryRemaining - 1);\n });\n }\n } finally {\n // span.end();\n }\n });\n });\n }\n\n private async processQueue() {\n const logger = LoggerManager.getLogger();\n if (this.activeTasks >= this.options.maxConcurrentTasks) {\n logger?.debug(\"SimpleQueue.processQueue max concurrent tasks reached\");\n return;\n }\n\n const item = this.queue.shift();\n if (!item) {\n logger?.debug(\"SimpleQueue.processQueue no item to process\");\n return;\n }\n\n const { task, taskSpan } = item;\n if (taskSpan) {\n taskSpan.end();\n }\n\n this.activeTasks += 1;\n logger?.debug(`SimpleQueue.processQueue active tasks: ${this.activeTasks}`);\n logger?.debug(`SimpleQueue.processQueue processing task, id: ${task.id}`);\n\n try {\n const response: Response = await this.executeWithRetry(task, this.options.retryCount);\n logger?.debug(`SimpleQueue.processQueue task completed, id: ${task.id}`);\n task.resolve(response);\n } catch (error) {\n logger?.warn(`SimpleQueue.processQueue task errored, id: ${task.id}`);\n task.reject(error);\n } finally {\n this.activeTasks -= 1;\n logger?.debug(`SimpleQueue.processQueue active tasks: ${this.activeTasks}`);\n trace.getSpan(task.telemetryContext)?.end();\n this.processQueue();\n }\n }\n}\n\nexport { SimpleQueue };\n","import { LRUCache as LRU } from \"lru-cache\";\n\nimport { LoggerManager } from \"./../logger\";\nimport { type Cache } from \"./cache.interface\";\n\nclass LRUCache<T extends object> implements Cache<T> {\n private cache: LRU<string, T>;\n\n constructor(maxEntries: number = 1000) {\n this.cache = new LRU<string, T>({\n max: maxEntries,\n allowStale: false,\n updateAgeOnGet: false,\n });\n const logger = LoggerManager.getLogger();\n logger?.debug(`LRUCache initialized with maxEntries: ${maxEntries}`);\n }\n\n async get(key: string): Promise<T | undefined> {\n const logger = LoggerManager.getLogger();\n logger?.debug(`LRUCache.get invoked, key: ${key}`);\n return new Promise((resolve) => {\n const value = this.cache.get(key);\n logger?.debug(\"LRUCache.get completed, value: \", value);\n resolve(value);\n });\n }\n\n async set(key: string, value: T): Promise<void> {\n const logger = LoggerManager.getLogger();\n logger?.debug(`LRUCache.set invoked, key: ${key}, value: `, value);\n return new Promise((resolve) => {\n this.cache.set(key, value);\n logger?.debug(\"LRUCache.set completed\");\n resolve();\n });\n }\n\n async delete(key: string): Promise<void> {\n const logger = LoggerManager.getLogger();\n logger?.debug(`LRUCache.delete invoked, key: ${key}`);\n return new Promise((resolve) => {\n this.cache.delete(key);\n logger?.debug(\"LRUCache.delete completed\");\n resolve();\n });\n }\n\n async clear(): Promise<void> {\n const logger = LoggerManager.getLogger();\n logger?.debug(\"LRUCache.clear invoked\");\n return new Promise((resolve) => {\n this.cache.clear();\n logger?.debug(\"LRUCache.clear completed\");\n resolve();\n });\n }\n}\n\nexport { LRUCache, type Cache };\n","import { AnalyticsEvent, AnalyticsRecorder } from \"./analytics.interface\";\n\nclass NoOpAnalytics implements AnalyticsRecorder {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n record(event: AnalyticsEvent[\"event\"], status: AnalyticsEvent[\"status\"], dimensions: AnalyticsEvent[\"dimensions\"]): void {\n // Do nothing\n }\n\n stopRecorder(): void {\n // Do nothing\n }\n}\n\nexport { NoOpAnalytics };\n","// TODO: make this file isomorphic\nimport { readFileSync } from \"fs\";\nimport os from \"os\";\nimport { join } from \"path\";\n\nimport { AnalyticsBrowserEnvironment, AnalyticsNodeEnvironment } from \"./analytics.interface\";\n\n// const isGatewayAnalyticsEnabled = (): boolean => {\n// return process.env.ADX_ANALYTICS_ENABLED === \"true\" || process.env.ADX_ANALYTICS_ENABLED === undefined;\n// }\n\nconst getGatewayEnvironment = (): string => {\n return process.env.ADX_NODE_ENV || \"unknown\";\n};\n\nconst getNodeDetails = (): AnalyticsNodeEnvironment => {\n return {\n node: {\n version: process.version,\n platform: os.platform(),\n architecture: os.arch(),\n },\n };\n};\n\nconst getBrowserDetails = (): AnalyticsBrowserEnvironment => {\n return {\n browser: {\n version: navigator.userAgent,\n userAgent: navigator.userAgent,\n },\n };\n};\n\nconst getGatewayVersion = (): string => {\n try {\n const packageJsonPath = join(__dirname, \"../package.json\");\n const packageJson = JSON.parse(readFileSync(packageJsonPath, \"utf-8\"));\n return packageJson.version;\n } catch (error) {\n return \"unknown\";\n }\n};\n\nexport { getGatewayEnvironment, getNodeDetails, getBrowserDetails, getGatewayVersion };\n","import axios from \"axios\";\n\nimport { isRunningInBrowser } from \"./../../utils\";\nimport { AnalyticsBrowserEnvironment, AnalyticsEvent, AnalyticsNodeEnvironment, AnalyticsRecorder } from \"./analytics.interface\";\nimport { getBrowserDetails, getGatewayVersion, getNodeDetails } from \"./analytics.utils\";\n\nclass PostAnalytics implements AnalyticsRecorder {\n private readonly eventVersion = \"0.1\";\n private readonly gatewayVersion = getGatewayVersion();\n\n private flushTimer: any;\n private flushInterval: number = 10000;\n private batchSize: number = 1;\n private maxAttempts: number = 3;\n private environment: AnalyticsNodeEnvironment | AnalyticsBrowserEnvironment = isRunningInBrowser()\n ? getBrowserDetails()\n : getNodeDetails();\n private analyticsEndpointUrl: string = \"https://j954t34pkh.execute-api.us-east-1.amazonaws.com/v0/analytics\";\n\n private events: { event: AnalyticsEvent; attempt: number }[] = [];\n\n constructor() {\n // this.startFlushTimer();\n }\n\n private startFlushTimer() {\n if (isRunningInBrowser()) {\n this.flushTimer = window.setInterval(() => this.flushEvents(), this.flushInterval);\n } else {\n this.flushTimer = setInterval(() => this.flushEvents(), this.flushInterval);\n }\n }\n\n private stopFlushTimer() {\n if (isRunningInBrowser()) {\n window.clearInterval(this.flushTimer);\n } else {\n clearInterval(this.flushTimer);\n }\n }\n\n record(event: AnalyticsEvent[\"event\"], status: AnalyticsEvent[\"status\"], dimensions: AnalyticsEvent[\"dimensions\"]): void {\n const analyticsEvent: AnalyticsEvent = {\n event,\n status,\n dimensions,\n timestamp: new Date().toISOString(),\n eventVersion: this.eventVersion,\n gatewayVersion: this.gatewayVersion,\n environment: this.environment,\n };\n this.events.push({ event: analyticsEvent, attempt: 0 });\n\n if (this.events.length >= this.batchSize) {\n this.flushEvents();\n }\n }\n\n private async flushEvents(): Promise<void> {\n if (this.events.length === 0) return;\n\n const eventsToSend = [...this.events];\n this.events = [];\n\n const success = await this.sendEvents(eventsToSend.map((e) => e.event));\n if (!success) {\n this.events.push(\n ...eventsToSend.filter((e) => e.attempt < this.maxAttempts).map((e) => ({ event: e.event, attempt: e.attempt + 1 }))\n );\n }\n }\n\n private async sendEvents(events: AnalyticsEvent[]): Promise<boolean> {\n try {\n const response = await axios.post(\n this.analyticsEndpointUrl,\n { events },\n {\n headers: {\n \"Content-Type\": \"application/json\",\n },\n }\n );\n return response.status === 200;\n } catch (error) {\n return false;\n }\n }\n\n public stopRecorder() {\n this.stopFlushTimer();\n this.flushEvents();\n }\n}\n\nexport { PostAnalytics };\n","import { AnalyticsRecorder } from \"./analytics.interface\";\nimport { NoOpAnalytics } from \"./no-op.analytics\";\nimport { PostAnalytics } from \"./post.analytics\";\n\nclass AnalyticsManager {\n private static analytics: AnalyticsRecorder | undefined;\n\n static getAnalyticsRecorder(analyticsEnabled: boolean): AnalyticsRecorder {\n if (this.analytics !== undefined) {\n return this.analytics;\n } else {\n this.analytics = analyticsEnabled ? new PostAnalytics() : new NoOpAnalytics();\n return this.analytics;\n }\n }\n}\n\nexport { AnalyticsManager };\n","import { Meter, Tracer } from \"@opentelemetry/api\";\nimport { z } from \"zod\";\n\nimport { ChatModelV1, EmbeddingModelV1 } from \"@adaline/provider\";\nimport { Config, EmbeddingRequests, Message, Tool } from \"@adaline/types\";\n\nimport {\n CompleteChatCallbackType,\n CompleteChatHandlerResponseType,\n GetEmbeddingsCallbackType,\n GetEmbeddingsHandlerResponseType,\n StreamChatCallbackType,\n} from \"./handlers\";\nimport { Cache, HttpClient, Logger, QueueOptions } from \"./plugins\";\n\nconst GatewayOptions = z.object({\n queueOptions: z.lazy(() => QueueOptions.partial()).optional(),\n dangerouslyAllowBrowser: z.boolean().optional(),\n httpClient: z.custom<HttpClient>().optional(),\n completeChatCache: z.custom<Cache<CompleteChatHandlerResponseType>>().optional(),\n completeChatCallbacks: z.array(z.custom<CompleteChatCallbackType>()).nonempty().optional(),\n getEmbeddingsCache: z.custom<Cache<GetEmbeddingsHandlerResponseType>>().optional(),\n getEmbeddingsCallbacks: z.array(z.custom<GetEmbeddingsCallbackType>()).nonempty().optional(),\n streamChatCallbacks: z.array(z.custom<StreamChatCallbackType>()).nonempty().optional(),\n logger: z.custom<Logger>().optional(),\n telemetry: z\n .object({\n tracer: z.custom<Tracer>().optional(),\n meter: z.custom<Meter>().optional(),\n })\n .optional(),\n analyticsEnabled: z.boolean().optional(),\n});\ntype GatewayOptionsType = z.infer<typeof GatewayOptions>;\n\nconst GatewayCompleteChatRequestOptions = z.object({\n enableCache: z.boolean().optional().default(true),\n customHeaders: z.record(z.string()).optional(),\n metadataForCallbacks: z.any().optional(),\n});\ntype GatewayCompleteChatRequestOptionsType = z.infer<typeof GatewayCompleteChatRequestOptions>;\n\nconst GatewayCompleteChatRequest = z.object({\n model: z.custom<ChatModelV1>(),\n config: Config(),\n messages: z.array(Message()),\n tools: z.array(Tool()).optional(),\n options: GatewayCompleteChatRequestOptions.optional(),\n});\ntype GatewayCompleteChatRequestType = z.infer<typeof GatewayCompleteChatRequest>;\n\nconst GatewayStreamChatRequestOptions = z.object({\n customHeaders: z.record(z.string()).optional(),\n metadataForCallbacks: z.any().optional(),\n});\ntype GatewayStreamChatRequestOptionsType = z.infer<typeof GatewayStreamChatRequestOptions>;\n\nconst GatewayStreamChatRequest = z.object({\n model: z.custom<ChatModelV1>(),\n config: Config(),\n messages: z.array(Message()),\n tools: z.array(Tool()).optional(),\n options: GatewayStreamChatRequestOptions.optional(),\n});\ntype GatewayStreamChatRequestType = z.infer<typeof GatewayStreamChatRequest>;\n\nconst GatewayGetEmbeddingsRequestOptions = z.object({\n enableCache: z.boolean().optional().default(true),\n customHeaders: z.record(z.string()).optional(),\n metadataForCallbacks: z.any().optional(),\n});\ntype GatewayGetEmbeddingsRequestOptionsType = z.infer<typeof GatewayGetEmbeddingsRequestOptions>;\n\nconst GatewayGetEmbeddingsRequest = z.object({\n model: z.custom<EmbeddingModelV1>(),\n config: Config(),\n embeddingRequests: EmbeddingRequests(),\n options: GatewayGetEmbeddingsRequestOptions.optional(),\n});\ntype GatewayGetEmbeddingsRequestType = z.infer<typeof GatewayGetEmbeddingsRequest>;\n\nexport {\n GatewayCompleteChatRequest,\n GatewayCompleteChatRequestOptions,\n GatewayGetEmbeddingsRequest,\n GatewayGetEmbeddingsRequestOptions,\n GatewayOptions,\n GatewayStreamChatRequest,\n GatewayStreamChatRequestOptions,\n type GatewayCompleteChatRequestOptionsType,\n type GatewayCompleteChatRequestType,\n type GatewayGetEmbeddingsRequestOptionsType,\n type GatewayGetEmbeddingsRequestType,\n type GatewayOptionsType,\n type GatewayStreamChatRequestOptionsType,\n type GatewayStreamChatRequestType,\n};\n","import { Context, context, Span, SpanStatusCode } from \"@opentelemetry/api\";\n\nimport { GatewayError } from \"../../errors/errors\";\nimport { HttpClient, HttpRequestError, LoggerManager, TelemetryManager } from \"../../plugins\";\nimport { castToError, getCacheKeyHash, safelyInvokeCallbacks } from \"../../utils\";\nimport {\n CompleteChatCallbackType,\n CompleteChatHandlerRequest,\n CompleteChatHandlerRequestType,\n CompleteChatHandlerResponseType,\n} from \"./complete-chat.types\";\n\nasync function handleCompleteChat(\n request: CompleteChatHandlerRequestType,\n client: HttpClient,\n telemetryContext?: Context\n): Promise<CompleteChatHandlerResponseType> {\n const logger = LoggerManager.getLogger();\n const _handleCompleteChat = async (span?: Span) => {\n logger?.debug(\"handleCompleteChat invoked\");\n logger?.debug(\"handleCompleteChat request: \", { request });\n const data = CompleteChatHandlerRequest.parse(request);\n const callbacks = request.callbacks || [];\n const handlerTelemetryContext = context.active();\n\n try {\n safelyInvokeCallbacks<CompleteChatCallbackType, keyof CompleteChatCallbackType>(\n callbacks,\n \"onChatStart\",\n request.metadataForCallbacks\n );\n\n const providerData = {\n config: data.config,\n messages: data.messages,\n tools: data.tools,\n };\n\n const providerRequest = {\n url: await data.model.getCompleteChatUrl(data.config, data.messages, data.tools),\n headers: await data.model.getCompleteChatHeaders(data.config, data.messages, data.tools),\n data: await data.model.getCompleteChatData(data.config, data.messages, data.tools),\n };\n\n providerRequest.headers = {\n ...providerRequest.headers,\n source: \"adaline.ai\",\n };\n\n if (data.customHeaders) {\n providerRequest.headers = {\n ...providerRequest.headers,\n ...data.customHeaders,\n };\n }\n \n logger?.debug(\"handleCompleteChat providerRequest: \", { providerRequest });\n const cacheKey = getCacheKeyHash(`complete-chat:${providerRequest.url}:${data.model.modelSchema.name}`, providerData);\n if (data.enableCache) {\n logger?.debug(\"handleCompleteChat checking cache\");\n const cachedResponse = await request.cache.get(cacheKey);\n if (cachedResponse) {\n cachedResponse.cached = true;\n logger?.debug(\"handleCompleteChat cached hit\");\n span?.setAttribute(\"cached\", true);\n span?.setStatus({ code: SpanStatusCode.OK });\n safelyInvokeCallbacks<CompleteChatCallbackType, keyof CompleteChatCallbackType>(\n callbacks,\n \"onChatCached\",\n request.metadataForCallbacks,\n cachedResponse\n );\n logger?.debug(\"handleCompleteChat cached response: \", { cachedResponse });\n return cachedResponse;\n }\n }\n\n logger?.debug(\"handleCompleteChat cache miss\");\n const now = Date.now();\n const providerResponse = await client.post(\n providerRequest.url,\n providerRequest.data,\n providerRequest.headers,\n handlerTelemetryContext\n );\n const latencyInMs = Date.now() - now;\n logger?.debug(\"handleCompleteChat providerResponse: \", { providerResponse });\n\n const response: CompleteChatHandlerResponseType = {\n request: providerData,\n response: data.model.transformCompleteChatResponse(providerResponse.data),\n cached: false,\n latencyInMs,\n metadataForCallbacks: request.metadataForCallbacks,\n provider: {\n request: providerRequest,\n response: providerResponse,\n },\n };\n\n logger?.debug(\"handleCompleteChat response: \", { response });\n if (data.enableCache) {\n await request.cache.set(cacheKey, response);\n logger?.debug(\"handleCompleteChat response cached\");\n }\n\n span?.setAttribute(\"cached\", false);\n span?.setStatus({ code: SpanStatusCode.OK });\n safelyInvokeCallbacks<CompleteChatCallbackType, keyof CompleteChatCallbackType>(\n callbacks,\n \"onChatComplete\",\n request.metadataForCallbacks,\n response\n );\n\n return response;\n } catch (error) {\n logger?.warn(\"handleCompleteChat error: \", { error });\n let safeError: GatewayError | HttpRequestError;\n\n if (HttpRequestError.isHttpRequestError(error)) {\n safeError = error;\n } else if (error instanceof GatewayError) {\n safeError = error;\n } else {\n safeError = castToError(error);\n }\n\n // TODO: maybe only set if it's non HTTP Error ?\n // span?.setStatus({ code: SpanStatusCode.ERROR, message: safeError.message });\n safelyInvokeCallbacks<CompleteChatCallbackType, keyof CompleteChatCallbackType>(\n callbacks,\n \"onChatError\",\n request.metadataForCallbacks,\n safeError\n );\n\n throw safeError;\n } finally {\n span?.end();\n }\n };\n\n if (!telemetryContext) {\n return await _handleCompleteChat();\n }\n\n return await context.with(telemetryContext, async () => {\n const tracer = TelemetryManager.getTracer();\n return await tracer.startActiveSpan(\"complete-chat.handler\", async (span: Span) => {\n return await _handleCompleteChat(span);\n });\n });\n}\n\nexport { handleCompleteChat };\n","import { z } from \"zod\";\n\nimport { ChatModelV1 } from \"@adaline/provider\";\nimport { ChatResponse, Config, Message, Tool } from \"@adaline/types\";\n\nimport { GatewayError } from \"../../errors\";\nimport { Cache, HttpRequestError } from \"../../plugins\";\n\nconst CompleteChatHandlerRequest = z.object({\n cache: z.custom<Cache<CompleteChatHandlerResponseType>>(),\n model: z.custom<ChatModelV1>(),\n config: Config(),\n messages: z.array(Message()),\n tools: z.array(Tool()).optional(),\n enableCache: z.boolean(),\n customHeaders: z.record(z.string()).optional(),\n callbacks: z.array(z.custom<CompleteChatCallbackType>()).nonempty().optional(),\n metadataForCallbacks: z.any().optional(),\n});\ntype CompleteChatHandlerRequestType = z.infer<typeof CompleteChatHandlerRequest>;\n\nconst CompleteChatHandlerResponse = z.object({\n request: z.object({\n config: Config(),\n messages: z.array(Message()),\n tools: z.array(Tool()).optional(),\n }),\n response: ChatResponse,\n cached: z.boolean(),\n latencyInMs: z.number().int().positive(),\n metadataForCallbacks: z.any().optional(),\n provider: z.object({\n request: z.any(),\n response: z.any(),\n }),\n});\ntype CompleteChatHandlerResponseType = z.infer<typeof CompleteChatHandlerResponse>;\n\ntype CompleteChatCallbackType<M = any> = {\n onChatStart?: (metadata?: M) => Promise<void> | void;\n onChatCached?: (metadata?: M, response?: CompleteChatHandlerResponseType) => Promise<void> | void;\n onChatComplete?: (metadata?: M, response?: CompleteChatHandlerResponseType) => Promise<void> | void;\n onChatError?: (metadata?: M, error?: GatewayError | HttpRequestError) => Promise<void> | void;\n};\n\nexport {\n CompleteChatHandlerRequest,\n CompleteChatHandlerResponse,\n type CompleteChatCallbackType,\n type CompleteChatHandlerRequestType,\n type CompleteChatHandlerResponseType,\n};\n","import { Context, context, Span, SpanStatusCode } from \"@opentelemetry/api\";\n\nimport { GatewayError } from \"../../errors/errors\";\nimport { HttpClient, HttpRequestError, LoggerManager, TelemetryManager } from \"../../plugins\";\nimport { castToError, getCacheKeyHash, safelyInvokeCallbacks } from \"../../utils\";\nimport {\n GetEmbeddingsCallbackType,\n GetEmbeddingsHandlerRequest,\n GetEmbeddingsHandlerRequestType,\n GetEmbeddingsHandlerResponseType,\n} from \"./get-embeddings.types\";\n\nasync function handleGetEmbeddings(\n request: GetEmbeddingsHandlerRequestType,\n client: HttpClient,\n telemetryContext?: Context\n): Promise<GetEmbeddingsHandlerResponseType> {\n const logger = LoggerManager.getLogger();\n const _handleGetEmbeddings = async (span?: Span) => {\n logger?.debug(\"handleGetEmbeddings invoked\");\n logger?.debug(\"handleGetEmbeddings request: \", { request });\n const data = GetEmbeddingsHandlerRequest.parse(request);\n const callbacks = request.callbacks || [];\n const handlerTelemetryContext = context.active();\n\n try {\n safelyInvokeCallbacks<GetEmbeddingsCallbackType, keyof GetEmbeddingsCallbackType>(\n callbacks,\n \"onGetEmbeddingsStart\",\n request.metadataForCallbacks\n );\n\n const providerData = {\n config: data.config,\n embeddingRequests: data.embeddingRequests,\n };\n\n const providerRequest = {\n url: await data.model.getGetEmbeddingsUrl(data.config, data.embeddingRequests),\n headers: await data.model.getGetEmbeddingsHeaders(data.config, data.embeddingRequests),\n data: await data.model.getGetEmbeddingsData(data.config, data.embeddingRequests),\n };\n\n providerRequest.headers = {\n ...providerRequest.headers,\n source: \"adaline.ai\",\n };\n \n if (data.customHeaders) {\n providerRequest.headers = {\n ...providerRequest.headers,\n ...data.customHeaders,\n };\n }\n\n logger?.debug(\"handleGetEmbeddings providerRequest: \", { providerRequest });\n const cacheKey = getCacheKeyHash(`get-embeddings:${providerRequest.url}:${data.model.modelSchema.name}`, providerData);\n if (data.enableCache) {\n logger?.debug(\"handleGetEmbeddings checking cache\");\n const cachedResponse = await request.cache.get(cacheKey);\n if (cachedResponse) {\n cachedResponse.cached = true;\n logger?.debug(\"handleGetEmbeddings cached hit\");\n span?.setAttribute(\"cached\", true);\n span?.setStatus({ code: SpanStatusCode.OK });\n safelyInvokeCallbacks<GetEmbeddingsCallbackType, keyof GetEmbeddingsCallbackType>(\n callbacks,\n \"onGetEmbeddingsCached\",\n request.metadataForCallbacks,\n cachedResponse\n );\n logger?.debug(\"handleGetEmbeddings cached response: \", { cachedResponse });\n return cachedResponse;\n }\n }\n\n logger?.debug(\"handleGetEmbeddings cache miss\");\n const now = Date.now();\n const providerResponse = await client.post(\n providerRequest.url,\n providerRequest.data,\n providerRequest.headers,\n handlerTelemetryContext\n );\n const latencyInMs = Date.now() - now;\n logger?.debug(\"handleGetEmbeddings providerResponse: \", { providerResponse });\n\n const response: GetEmbeddingsHandlerResponseType = {\n request: providerData,\n response: data.model.transformGetEmbeddingsResponse(providerResponse.data),\n cached: false,\n latencyInMs,\n metadataForCallbacks: request.metadataForCallbacks,\n provider: {\n request: providerRequest,\n response: providerResponse,\n },\n };\n\n logger?.debug(\"handleGetEmbeddings response: \", { response });\n if (data.enableCache) {\n await request.cache.set(cacheKey, response);\n logger?.debug(\"handleGetEmbeddings response cached\");\n }\n\n span?.setAttribute(\"cached\", false);\n span?.setStatus({ code: SpanStatusCode.OK });\n safelyInvokeCallbacks<GetEmbeddingsCallbackType, keyof GetEmbeddingsCallbackType>(\n callbacks,\n \"onGetEmbeddingsComplete\",\n request.metadataForCallbacks,\n response\n );\n\n return response;\n } catch (error) {\n logger?.warn(\"handleGetEmbeddings error: \", { error });\n let safeError: GatewayError | HttpRequestError;\n\n if (HttpRequestError.isHttpRequestError(error)) {\n safeError = error;\n } else if (error instanceof GatewayError) {\n safeError = error;\n } else {\n safeError = castToError(error);\n }\n\n // TODO: maybe only set if it's non HTTP Error ?\n // span?.setStatus({ code: SpanStatusCode.ERROR, message: safeError.message });\n\n safelyInvokeCallbacks<GetEmbeddingsCallbackType, keyof GetEmbeddingsCallbackType>(\n callbacks,\n \"onGetEmbeddingsError\",\n request.metadataForCallbacks,\n safeError\n );\n\n throw safeError;\n } finally {\n span?.end();\n }\n };\n\n if (!telemetryContext) {\n return await _handleGetEmbeddings();\n }\n\n return await context.with(telemetryContext, async () => {\n const tracer = TelemetryManager.getTracer();\n return await tracer.startActiveSpan(\"get-embeddings.handler\", async (span: Span) => {\n return await _handleGetEmbeddings(span);\n });\n });\n}\n\nexport { handleGetEmbeddings };\n","import { z } from \"zod\";\n\nimport { EmbeddingModelV1 } from \"@adaline/provider\";\nimport { Config, EmbeddingRequests, EmbeddingResponse } from \"@adaline/types\";\n\nimport { GatewayError } from \"../../errors\";\nimport { Cache, HttpRequestError } from \"../../plugins\";\n\nconst GetEmbeddingsHandlerRequest = z.object({\n cache: z.custom<Cache<GetEmbeddingsHandlerResponseType>>(),\n model: z.custom<EmbeddingModelV1>(),\n config: Config(),\n embeddingRequests: EmbeddingRequests(),\n enableCache: z.boolean(),\n customHeaders: z.record(z.string()).optional(),\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 cached: z.boolean(),\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 | HttpRequestError) => Promise<void> | void;\n};\n\nexport {\n GetEmbeddingsHandlerRequest,\n GetEmbeddingsHandlerResponse,\n type GetEmbeddingsHandlerRequestType,\n type GetEmbeddingsHandlerResponseType,\n type GetEmbeddingsCallbackType,\n};\n","import { z } from \"zod\";\n\nimport { ChatModelV1 } from \"@adaline/provider\";\nimport { Config, Message, PartialChatResponse, Tool } from \"@adaline/types\";\n\nimport { GatewayError } from \"../../errors\";\nimport { HttpRequestError } from \"../../plugins\";\n\nconst StreamChatHandlerRequest = z.object({\n model: z.custom<ChatModelV1>(),\n config: Config(),\n messages: z.array(Message()),\n tools: z.array(Tool()).optional(),\n customHeaders: z.record(z.string()).optional(),\n callbacks: z.array(z.custom<StreamChatCallbackType>()).nonempty().optional(),\n metadataForCallbacks: z.any().optional(),\n});\ntype StreamChatHandlerRequestType = z.infer<typeof StreamChatHandlerRequest>;\n\nconst StreamChatHandlerResponse = z.object({\n request: z.object({\n config: Config(),\n messages: z.array(Message()),\n tools: z.array(Tool()).optional(),\n }),\n response: PartialChatResponse,\n metadataForCallbacks: z.any().optional(),\n provider: z.object({\n request: z.any(),\n response: z.any(),\n }),\n});\ntype StreamChatHandlerResponseType = z.infer<typeof StreamChatHandlerResponse>;\n\ntype StreamChatCallbackType<M = any> = {\n onStreamStart?: (metadata?: M) => Promise<void> | void;\n onStreamFirstResponse?: (metadata?: M, response?: StreamChatHandlerResponseType, chunk?: unknown) => Promise<void> | void;\n onStreamNewResponse?: (metadata?: M, response?: StreamChatHandlerResponseType, chunk?: unknown) => Promise<void> | void;\n onStreamEnd?: (metadata?: M, response?: StreamChatHandlerResponseType) => Promise<void> | void;\n onStreamError?: (metadata?: M, error?: GatewayError | HttpRequestError) => Promise<void> | void;\n};\n\nexport {\n StreamChatHandlerRequest,\n StreamChatHandlerResponse,\n type StreamChatCallbackType,\n type StreamChatHandlerRequestType,\n type StreamChatHandlerResponseType,\n};\n","import { Context, context, Span, SpanStatusCode } from \"@opentelemetry/api\";\n\nimport { GatewayError } from \"../../errors/errors\";\nimport { HttpClient, HttpRequestError, LoggerManager, TelemetryManager } 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 telemetryContext?: Context\n): AsyncGenerator<StreamChatHandlerResponseType, void, unknown> {\n const logger = LoggerManager.getLogger();\n const _handleStreamChat = async function* (span?: Span): AsyncGenerator<StreamChatHandlerResponseType, void, unknown> {\n logger?.debug(\"handleStreamChat invoked\");\n logger?.debug(\"handleStreamChat request: \", { request });\n const data = StreamChatHandlerRequest.parse(request);\n const callbacks = request.callbacks || [];\n\n const stable = {\n config: data.config,\n messages: data.messages,\n tools: data.tools,\n };\n\n try {\n safelyInvokeCallbacks<StreamChatCallbackType, keyof StreamChatCallbackType>(callbacks, \"onStreamStart\", request.metadataForCallbacks);\n\n const providerRequest = {\n url: await data.model.getStreamChatUrl(data.config, data.messages, data.tools),\n headers: await data.model.getStreamChatHeaders(data.config, data.messages, data.tools),\n data: await data.model.getStreamChatData(data.config, data.messages, data.tools),\n };\n\n providerRequest.headers = {\n ...providerRequest.headers,\n source: \"adaline.ai\",\n };\n \n if (data.customHeaders) {\n providerRequest.headers = {\n ...providerRequest.headers,\n ...data.customHeaders,\n };\n }\n logger?.debug(\"handleStreamChat providerRequest: \", { providerRequest });\n\n let buffer = \"\";\n let isFirstResponse = true;\n for await (const chunk of client.stream(providerRequest.url, \"post\", providerRequest.data, providerRequest.headers)) {\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 logger?.debug(\"handleStreamChat streamResponse: \", { streamResponse });\n yield streamResponse;\n } else {\n buffer = transformed.buffer;\n }\n }\n }\n\n span?.setStatus({ code: SpanStatusCode.OK });\n safelyInvokeCallbacks<StreamChatCallbackType<M>, keyof StreamChatCallbackType<M>>(\n callbacks,\n \"onStreamEnd\",\n request.metadataForCallbacks\n );\n } catch (error) {\n logger?.warn(\"handleStreamChat error: \", { error });\n let safeError: GatewayError | HttpRequestError;\n\n if (HttpRequestError.isHttpRequestError(error)) {\n safeError = error;\n } else if (error instanceof GatewayError) {\n safeError = error;\n } else {\n safeError = castToError(error);\n }\n\n // TODO: maybe only set if it's non HTTP Error ?\n // span?.setStatus({ code: SpanStatusCode.ERROR, message: safeError.message });\n safelyInvokeCallbacks<StreamChatCallbackType<M>, keyof StreamChatCallbackType<M>>(\n callbacks,\n \"onStreamError\",\n request.metadataForCallbacks,\n safeError\n );\n\n throw safeError;\n } finally {\n span?.end();\n }\n };\n\n if (!telemetryContext) {\n return yield* _handleStreamChat();\n }\n\n return yield* await context.with(telemetryContext, async () => {\n const tracer = TelemetryManager.getTracer();\n return await tracer.startActiveSpan(\"stream-chat.handler\", async (span: Span) => {\n return await _handleStreamChat(span);\n });\n });\n}\n\nexport { handleStreamChat };\n","import { Context, context, Meter, Span, SpanStatusCode, trace, Tracer } from \"@opentelemetry/api\";\nimport { v4 as uuidv4 } from \"uuid\";\n\nimport { GatewayError } from \"./errors\";\nimport {\n GatewayCompleteChatRequest,\n GatewayCompleteChatRequestType,\n GatewayGetEmbeddingsRequest,\n GatewayGetEmbeddingsRequestType,\n GatewayOptions,\n GatewayOptionsType,\n GatewayStreamChatRequest,\n GatewayStreamChatRequestType,\n} from \"./gateway.types\";\nimport { CompleteChatHandlerResponseType, GetEmbeddingsHandlerResponseType, StreamChatHandlerResponseType } from \"./handlers\";\nimport { handleCompleteChat } from \"./handlers/complete-chat/complete-chat.handler\";\nimport { handleGetEmbeddings } from \"./handlers/get-embeddings/get-embeddings.handler\";\nimport { handleStreamChat } from \"./handlers/stream-chat/stream-chat.handler\";\nimport { Cache, HttpClient, IsomorphicHttpClient, LRUCache, Queue, QueueTask, SimpleQueue } from \"./plugins\";\nimport { AnalyticsManager, AnalyticsRecorder } from \"./plugins/analytics\";\nimport { Logger, LoggerManager } from \"./plugins/logger\";\nimport { TelemetryManager } from \"./plugins/telemetry\";\nimport { isRunningInBrowser } from \"./utils\";\n\nclass Gateway {\n private options: GatewayOptionsType;\n\n private logger?: Logger;\n private tracer: Tracer;\n private meter: Meter;\n private analytics: AnalyticsRecorder;\n\n private httpClient: HttpClient;\n private queues: {\n completeChat: Queue<GatewayCompleteChatRequestType, CompleteChatHandlerResponseType>;\n getEmbeddings: Queue<GatewayGetEmbeddingsRequestType, GetEmbeddingsHandlerResponseType>;\n };\n private caches: {\n completeChat: Cache<CompleteChatHandlerResponseType>;\n getEmbeddings: Cache<GetEmbeddingsHandlerResponseType>;\n };\n\n constructor(options: GatewayOptionsType = {}) {\n if (!options.dangerouslyAllowBrowser && isRunningInBrowser()) {\n throw new GatewayError(\n \"It looks like you're running in a browser-like environment. \\\n This is disabled by default, as it risks exposing your provider secrets to attackers. \\\n If you understand the risks and have appropriate mitigation in place, \\\n you can set the `dangerouslyAllowBrowser` option to `true`.\"\n );\n }\n\n this.options = GatewayOptions.parse(options);\n\n LoggerManager.setLogger(options.logger);\n this.logger = options.logger;\n\n this.analytics = AnalyticsManager.getAnalyticsRecorder(\n this.options.analyticsEnabled === undefined ? true : this.options.analyticsEnabled\n );\n\n TelemetryManager.setTracer(options.telemetry?.tracer);\n this.tracer = TelemetryManager.getTracer();\n\n TelemetryManager.setMeter(options.telemetry?.meter);\n this.meter = TelemetryManager.getMeter();\n\n const queueOptions = {\n maxConcurrentTasks: this.options.queueOptions?.maxConcurrentTasks || 4,\n retryCount: this.options.queueOptions?.retryCount || 3,\n retry: this.options.queueOptions?.retry || {\n initialDelay: 1000,\n exponentialFactor: 2,\n },\n timeout: this.options.queueOptions?.timeout || 120000,\n };\n\n this.queues = {\n completeChat: new SimpleQueue(queueOptions),\n getEmbeddings: new SimpleQueue(queueOptions),\n };\n\n // httpClient timeout is 90% of queue timeout\n this.httpClient = options.httpClient || new IsomorphicHttpClient({ timeoutInMilliseconds: queueOptions.timeout * 0.9 });\n\n this.caches = {\n completeChat: options.completeChatCache || new LRUCache<CompleteChatHandlerResponseType>(),\n getEmbeddings: options.getEmbeddingsCache || new LRUCache<GetEmbeddingsHandlerResponseType>(),\n };\n this.logger?.debug(\"gateway initialized\");\n }\n\n async completeChat(request: GatewayCompleteChatRequestType): Promise<CompleteChatHandlerResponseType> {\n this.logger?.info(\"gateway.completeChat invoked\");\n this.logger?.debug(\"request: \", { request });\n const data = GatewayCompleteChatRequest.parse(request);\n const modelName = data.model.modelSchema.name;\n // const counter = this.meter.createCounter(\"completeChat.counter\");\n // counter.add(1, { modelName });\n return await this.tracer.startActiveSpan(\"complete-chat\", async (span: Span) => {\n span.setAttribute(\"modelName\", modelName);\n return new Promise<CompleteChatHandlerResponseType>((resolve, reject) => {\n const task: QueueTask<GatewayCompleteChatRequestType, CompleteChatHandlerResponseType> = {\n id: uuidv4(),\n request: data,\n cache: this.caches.completeChat,\n resolve: (response: CompleteChatHandlerResponseType) => {\n this.analytics.record(\"completeChat\", \"success\", { modelName, usage: response.response.usage || {} });\n resolve(response);\n },\n reject: (error: any) => {\n console.log(\"completeChat error\", error);\n this.analytics.record(\"completeChat\", \"error\", { modelName });\n reject(error);\n },\n execute: this.executeCompleteChat.bind(this),\n telemetryContext: context.active(),\n };\n this.queues.completeChat.enqueue(task);\n this.logger?.debug(`gateway.completeChat task enqueued, id: ${task.id}`);\n });\n });\n }\n\n private async executeCompleteChat(\n request: GatewayCompleteChatRequestType,\n telemetryContext: Context\n ): Promise<CompleteChatHandlerResponseType> {\n this.logger?.debug(\"gateway.executeCompleteChat invoked\");\n const data = GatewayCompleteChatRequest.parse(request);\n return handleCompleteChat(\n {\n cache: this.caches.completeChat,\n model: data.model,\n config: data.config,\n messages: data.messages,\n tools: data.tools,\n enableCache: data.options?.enableCache ?? true,\n callbacks: this.options.completeChatCallbacks,\n metadataForCallbacks: data.options?.metadataForCallbacks,\n },\n this.httpClient,\n telemetryContext\n );\n }\n\n async *streamChat(request: GatewayStreamChatRequestType): AsyncGenerator<StreamChatHandlerResponseType, void, unknown> {\n this.logger?.info(\"gateway.streamChat invoked\");\n this.logger?.debug(\"request: \", { request });\n const data = GatewayStreamChatRequest.parse(request);\n const modelName = data.model.modelSchema.name;\n\n let status = \"success\";\n const span = this.tracer.startSpan(\"stream-chat\");\n const activeContext = trace.setSpan(context.active(), span);\n\n try {\n span.setAttribute(\"modelName\", modelName);\n return yield* await context.with(activeContext, async () => {\n return handleStreamChat(\n {\n model: data.model,\n config: data.config,\n messages: data.messages,\n tools: data.tools,\n callbacks: this.options.streamChatCallbacks,\n metadataForCallbacks: data.options?.metadataForCallbacks,\n },\n this.httpClient,\n activeContext\n );\n });\n } catch (error) {\n status = \"error\";\n span.setStatus({ code: SpanStatusCode.ERROR, message: \"stream failed\" });\n this.logger?.error(\"gateway.streamChat error: \", { error });\n if (error instanceof GatewayError) throw error;\n else throw new GatewayError((error as any)?.message, 500, (error as any)?.response?.data);\n } finally {\n this.analytics.record(\"streamChat\", status, { modelName });\n span.end();\n }\n }\n\n async getEmbeddings(request: GatewayGetEmbeddingsRequestType): Promise<GetEmbeddingsHandlerResponseType> {\n this.logger?.info(\"gateway.getEmbeddings invoked\");\n this.logger?.debug(\"request: \", { request });\n const data = GatewayGetEmbeddingsRequest.parse(request);\n const modelName = data.model.modelSchema.name;\n return await this.tracer.startActiveSpan(\"get-embeddings\", async (span: Span) => {\n span.setAttribute(\"modelName\", modelName);\n return new Promise<GetEmbeddingsHandlerResponseType>((resolve, reject) => {\n const task: QueueTask<GatewayGetEmbeddingsRequestType, GetEmbeddingsHandlerResponseType> = {\n id: uuidv4(),\n request: data,\n cache: this.caches.getEmbeddings,\n resolve: (response: GetEmbeddingsHandlerResponseType) => {\n this.analytics.record(\"getEmbeddings\", \"success\", { modelName, usage: response.response.usage || {} });\n resolve(response);\n },\n reject: (error: any) => {\n this.analytics.record(\"getEmbeddings\", \"error\", { modelName });\n reject(error);\n },\n execute: this.executeGetEmbeddings.bind(this),\n telemetryContext: context.active(),\n };\n this.queues.getEmbeddings.enqueue(task);\n this.logger?.debug(`gateway.getEmbeddings task enqueued, id: ${task.id}`);\n });\n });\n }\n\n private async executeGetEmbeddings(\n request: GatewayGetEmbeddingsRequestType,\n telemetryContext: Context\n ): Promise<GetEmbeddingsHandlerResponseType> {\n this.logger?.debug(\"gateway.executeGetEmbeddings invoked\");\n const data = GatewayGetEmbeddingsRequest.parse(request);\n return handleGetEmbeddings(\n {\n cache: this.caches.getEmbeddings,\n model: data.model,\n config: data.config,\n embeddingRequests: data.embeddingRequests,\n enableCache: data.options?.enableCache ?? true,\n callbacks: this.options.getEmbeddingsCallbacks,\n metadataForCallbacks: data.options?.metadataForCallbacks,\n },\n this.httpClient,\n telemetryContext\n );\n }\n\n static GatewayError = GatewayError;\n}\n\nexport { Gateway, type GatewayOptionsType };\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/errors/errors.ts","../src/plugins/http-client/http-client.error.ts","../src/plugins/telemetry/telemetry.manager.ts","../src/plugins/http-client/isomorphic.http-client.ts","../src/plugins/queue/queue.error.ts","../src/plugins/queue/queue.interface.ts","../src/utils/utils.ts","../src/plugins/logger/logger.manager.ts","../src/plugins/logger/console.logger.ts","../src/plugins/queue/simple.queue.ts","../src/plugins/cache/lru.cache.ts","../src/plugins/analytics/no-op.analytics.ts","../src/plugins/analytics/analytics.utils.ts","../src/plugins/analytics/post.analytics.ts","../src/plugins/analytics/analytics.manager.ts","../src/gateway.types.ts","../src/handlers/complete-chat/complete-chat.handler.ts","../src/handlers/complete-chat/complete-chat.types.ts","../src/handlers/get-embeddings/get-embeddings.handler.ts","../src/handlers/get-embeddings/get-embeddings.types.ts","../src/handlers/stream-chat/stream-chat.types.ts","../src/handlers/stream-chat/stream-chat.handler.ts","../src/gateway.ts"],"names":["GatewayError","_GatewayError","message","status","data","GatewayTelemetryErrorLiteral","GatewayTelemetryError","_GatewayTelemetryError","GatewayBaseError","info","cause","error","HttpClientErrorLiteral","HttpClientError","_HttpClientError","HttpRequestErrorLiteral","HttpRequestError","_HttpRequestError","headers","TelemetryManager","tracer","trace","meter","metrics","convertHeadersToRecord","headerRecord","key","value","axiosToHttpRequestError","_a","_b","_c","IsomorphicHttpClient","config","axiosInstance","timeoutInMilliseconds","axios","Timeout","z","ProxyAgent","logger","LoggerManager","_0","_1","_2","__async","method","url","dataOrParams","additionalConfig","telemetryContext","_makeRequest","span","__spreadProps","__spreadValues","resp","SpanStatusCode","response","context","ATTR_HTTP_REQUEST_METHOD","ATTR_URL_FULL","options","__asyncGenerator","_stream","__await","iter","__forAwait","more","temp","chunk","decodedChunk","fetchConfig","text","reader","done","decodedValue","__yieldStar","params","QueueTaskTimeoutErrorLiteral","QueueTaskTimeoutError","_QueueTaskTimeoutError","QueueOptions","getCacheKeyHash","prefix","object","sha256","castToError","err","isRunningInBrowser","logColors","verbose","level","action","args","debug","safelyInvokeCallbacks","callbacks","name","promises","callback","func","result","delay","ms","resolve","ConsoleLogger","SimpleQueue","task","taskSpan","taskTelemetryContext","reject","timeout","retryRemaining","shouldRetry","delayMs","taskRequest","GatewayCompleteChatRequest","retryDelay","retrySpan","item","LRUCache","maxEntries","LRU","NoOpAnalytics","event","dimensions","getNodeDetails","os","getBrowserDetails","getGatewayVersion","packageJsonPath","join","readFileSync","PostAnalytics","analyticsEvent","eventsToSend","events","AnalyticsManager","analyticsEnabled","GatewayOptions","GatewayCompleteChatRequestOptions","Config","Message","Tool","GatewayStreamChatRequestOptions","GatewayStreamChatRequest","GatewayGetEmbeddingsRequestOptions","GatewayGetEmbeddingsRequest","EmbeddingRequests","CompleteChatHandlerRequest","CompleteChatHandlerResponse","ChatResponse","handleCompleteChat","request","client","_handleCompleteChat","handlerTelemetryContext","providerData","providerRequest","cacheKey","cachedResponse","now","providerResponse","latencyInMs","safeError","GetEmbeddingsHandlerRequest","GetEmbeddingsHandlerResponse","EmbeddingResponse","handleGetEmbeddings","_handleGetEmbeddings","StreamChatHandlerRequest","StreamChatHandlerResponse","PartialChatResponse","handleStreamChat","_handleStreamChat","stable","buffer","isFirstResponse","transformed","streamResponse","Gateway","_d","_e","_f","_g","queueOptions","modelName","uuidv4","activeContext"],"mappings":"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","file":"index.js","sourcesContent":["import { GatewayBaseError } from \"@adaline/types\";\n\nclass 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\nconst GatewayTelemetryErrorLiteral = \"GatewayTelemetryError\" as const;\nclass GatewayTelemetryError extends GatewayBaseError {\n readonly info: string;\n readonly cause: unknown;\n\n constructor({ info, cause }: { info: string; cause: unknown }) {\n super({ info, cause }, GatewayTelemetryErrorLiteral);\n this.info = info;\n this.cause = cause;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n\n static isGatewayTelemetryError(error: unknown): error is GatewayTelemetryError {\n return error instanceof GatewayTelemetryError;\n }\n}\n\nexport { GatewayError, GatewayTelemetryError };\n","import { GatewayBaseError } from \"@adaline/types\";\n\nconst HttpClientErrorLiteral = \"HttpClientError\" as const;\nclass HttpClientError extends GatewayBaseError {\n readonly info: string;\n readonly cause: unknown;\n\n constructor({ info, cause }: { info: string; cause: unknown }) {\n super({ info, cause }, HttpClientErrorLiteral);\n this.info = info;\n this.cause = cause;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n\n static isHttpClientError(error: unknown): error is HttpClientError {\n return error instanceof HttpClientError;\n }\n}\n\nconst HttpRequestErrorLiteral = \"HttpRequestError\" as const;\nclass HttpRequestError extends GatewayBaseError {\n readonly info: string;\n readonly cause: {\n status: number;\n headers: Record<string, string>;\n data: unknown;\n };\n\n constructor(message: string, status: number = 500, headers: Record<string, string>, data: unknown) {\n super({ info: message, cause: { status, headers, data } }, HttpRequestErrorLiteral);\n this.info = message;\n this.cause = { status, headers, data };\n Object.setPrototypeOf(this, new.target.prototype);\n }\n\n static isHttpRequestError(error: unknown): error is HttpRequestError {\n return error instanceof HttpRequestError;\n }\n}\n\nexport { HttpClientError, HttpRequestError };\n","import { Meter, metrics, trace, Tracer } from \"@opentelemetry/api\";\n\nclass TelemetryManager {\n static DEFAULT_TRACER_KEY = \"gateway\";\n static DEFAULT_METER_KEY = \"gateway\";\n\n private static tracer: Tracer | undefined = undefined;\n private static meter: Meter | undefined = undefined;\n\n static setTracer(tracer: Tracer | undefined): void {\n if (!this.tracer) {\n this.tracer = tracer || trace.getTracer(this.DEFAULT_TRACER_KEY);\n }\n }\n\n static getTracer(): Tracer {\n return this.tracer || trace.getTracer(this.DEFAULT_TRACER_KEY);\n }\n\n static setMeter(meter: Meter | undefined): void {\n if (!this.meter) {\n this.meter = meter || metrics.getMeter(this.DEFAULT_METER_KEY);\n }\n }\n\n static getMeter(): Meter {\n return this.meter || metrics.getMeter(this.DEFAULT_METER_KEY);\n }\n}\n\nexport { TelemetryManager };\n","import { Context, context, Span, SpanStatusCode, Tracer } from \"@opentelemetry/api\";\nimport { ATTR_HTTP_REQUEST_METHOD, ATTR_URL_FULL } from \"@opentelemetry/semantic-conventions\";\nimport axios, { AxiosError, AxiosInstance, AxiosRequestConfig } from \"axios\";\nimport { ProxyAgent } from \"proxy-agent\";\nimport { z } from \"zod\";\n\nimport { LoggerManager } from \"../../plugins\";\nimport { TelemetryManager } from \"../../plugins/telemetry\";\nimport { HttpClientError, HttpRequestError } from \"./http-client.error\";\nimport { HttpClient, HttpClientResponse } from \"./http-client.interface\";\n\nconst convertHeadersToRecord = (headers: any): Record<string, string> => {\n const headerRecord: Record<string, string> = {};\n if (headers && (typeof headers === \"object\" || headers instanceof Headers)) {\n Object.entries(headers).forEach(([key, value]) => {\n if (Array.isArray(value)) {\n headerRecord[key] = value.join(\", \");\n } else if (typeof value === \"string\") {\n headerRecord[key] = value;\n } else {\n headerRecord[key] = \"\";\n }\n });\n }\n\n return headerRecord;\n};\n\nconst axiosToHttpRequestError = (error: AxiosError): HttpRequestError => {\n const message = error?.message || \"An unexpected error occurred\";\n const status = error?.response?.status || 500;\n const headers = convertHeadersToRecord(error?.response?.headers) || {};\n const data = error?.response?.data || {};\n return new HttpRequestError(message, status, headers, data);\n};\n\ninterface IsomorphicHttpClientConfig {\n timeoutInMilliseconds?: number;\n axiosInstance?: AxiosInstance;\n telemetryTracer?: Tracer;\n}\n\nclass IsomorphicHttpClient implements HttpClient {\n private defaultTimeout?: number;\n private client: AxiosInstance;\n private httpProxyAgent?: ProxyAgent;\n private httpsProxyAgent?: ProxyAgent;\n\n constructor(config: IsomorphicHttpClientConfig) {\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 this.httpProxyAgent = new ProxyAgent();\n this.httpsProxyAgent = new ProxyAgent({\n rejectUnauthorized: false, // Don't check SSL cert\n });\n const logger = LoggerManager.getLogger();\n logger?.debug(`IsomorphicHttpClient initialized with defaultTimeout: ${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 telemetryContext?: Context\n ): Promise<HttpClientResponse<T>> {\n const logger = LoggerManager.getLogger();\n const _makeRequest = async <T>(span?: Span): Promise<HttpClientResponse<T>> => {\n try {\n const config: AxiosRequestConfig = {\n ...(method === \"get\" || method === \"delete\" ? { params: dataOrParams } : { data: dataOrParams }),\n ...additionalConfig,\n timeout: this.defaultTimeout,\n httpAgent: this.httpProxyAgent,\n httpsAgent: this.httpsProxyAgent,\n };\n\n if (method === \"get\" || method === \"delete\") {\n const resp = await this.client[method]<T>(url, config);\n span?.setStatus({ code: SpanStatusCode.OK, message: \"request successful\" });\n const response = {\n data: resp.data,\n headers: convertHeadersToRecord(resp.headers),\n status: {\n code: resp.status,\n text: resp.statusText,\n },\n };\n logger?.debug(\"IsomorphicHttpClient.makeRequest response: \", response);\n return response;\n } else {\n const resp = await this.client[method]<T>(url, config.data, {\n ...config,\n params: config.params,\n });\n span?.setStatus({ code: SpanStatusCode.OK, message: \"request successful\" });\n const response = {\n data: resp.data,\n headers: convertHeadersToRecord(resp.headers),\n status: {\n code: resp.status,\n text: resp.statusText,\n },\n };\n logger?.debug(\"IsomorphicHttpClient.makeRequest response: \", response);\n return response;\n }\n } catch (error) {\n logger?.warn(\"IsomorphicHttpClient.makeRequest error: \", error);\n span?.setStatus({ code: SpanStatusCode.ERROR, message: \"request failed\" });\n if (axios.isAxiosError(error)) throw axiosToHttpRequestError(error);\n throw new HttpClientError({ info: \"An unexpected error occurred\", cause: error });\n } finally {\n span?.end();\n }\n };\n\n if (!telemetryContext) {\n return _makeRequest<T>();\n }\n\n return await context.with(telemetryContext, async () => {\n const tracer = TelemetryManager.getTracer();\n return await tracer.startActiveSpan(\"http.request\", async (span: Span) => {\n span.setAttribute(ATTR_HTTP_REQUEST_METHOD, method.toUpperCase());\n span.setAttribute(ATTR_URL_FULL, url);\n return await _makeRequest<T>(span);\n });\n });\n }\n\n // TODO: needs testing for with context and without context\n async *stream<T>(\n url: string,\n method: \"get\" | \"post\",\n data?: Record<string, unknown>,\n headers?: Record<string, string>,\n options?: {\n abortSignal?: AbortSignal;\n },\n telemetryContext?: Context\n ): AsyncGenerator<T, void, unknown> {\n const logger = LoggerManager.getLogger();\n logger?.debug(`IsomorphicHttpClient.STREAM request to ${url}`, { data, headers });\n const _stream = async function* (this: IsomorphicHttpClient, span?: Span): AsyncGenerator<T, void, unknown> {\n try {\n if (this.isNodeEnvironment()) {\n logger?.debug(\"IsomorphicHttpClient.stream in node environment\");\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 span?.addEvent(\"stream.chunk\", { message: \"stream chunk received\" });\n const decodedChunk = chunk.toString();\n logger?.debug(\"IsomorphicHttpClient.stream chunk: \", decodedChunk);\n yield decodedChunk as unknown as T;\n }\n span?.setStatus({ code: SpanStatusCode.OK, message: \"stream successful\" });\n } else {\n logger?.debug(\"IsomorphicHttpClient.stream in browser environment\");\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 logger?.warn(\"IsomorphicHttpClient.stream response not ok: \", response);\n span?.setStatus({ code: SpanStatusCode.ERROR, message: \"stream failed\" });\n const text: any = await response.json();\n throw new HttpRequestError(\n `Request failed with status ${response.status}`,\n response.status,\n convertHeadersToRecord(response.headers),\n text\n );\n }\n\n if (response.body) {\n const reader = response.body.getReader();\n while (true) {\n const { done, value } = await reader.read();\n if (done) {\n span?.addEvent(\"stream.chunk\", { message: \"stream chunk received\" });\n const decodedValue = new TextDecoder().decode(value, { stream: true });\n logger?.debug(\"IsomorphicHttpClient.stream chunk: \", decodedValue);\n yield decodedValue as unknown as T;\n break;\n }\n\n span?.addEvent(\"stream.chunk\", { message: \"stream chunk received\" });\n const decodedValue = new TextDecoder().decode(value, { stream: true });\n logger?.debug(\"IsomorphicHttpClient.stream chunk: \", decodedValue);\n yield decodedValue as unknown as T;\n }\n span?.setStatus({ code: SpanStatusCode.OK, message: \"stream successful\" });\n } else {\n logger?.warn(\"IsomorphicHttpClient.stream response has no body\");\n span?.setStatus({ code: SpanStatusCode.ERROR, message: \"stream failed\" });\n throw new HttpRequestError(\"Cannot stream the body of the response.\", 500, {}, response);\n }\n }\n } catch (error: any) {\n logger?.warn(\"IsomorphicHttpClient.stream error: \", error);\n span?.setStatus({ code: SpanStatusCode.ERROR, message: \"stream failed\" });\n if (HttpRequestError.isHttpRequestError(error)) throw error;\n if (error?.name === \"AbortError\") throw new HttpRequestError(\"AbortError\", 408, {}, {});\n if (error?.name === \"CanceledError\") throw new HttpRequestError(\"AbortError\", 408, {}, {});\n // TODO: how to convert non-axios errors to HttpRequestError for fetch aka browser environment\n if (axios.isAxiosError(error)) throw axiosToHttpRequestError(error);\n throw new HttpClientError({ info: \"An unexpected error occurred\", cause: error });\n } finally {\n span?.end();\n }\n }.bind(this);\n\n if (!telemetryContext) {\n return yield* _stream();\n }\n\n return yield* await context.with(telemetryContext, async () => {\n const tracer = TelemetryManager.getTracer();\n return await tracer.startActiveSpan(\"http.stream\", async (span: Span) => {\n span.setAttribute(ATTR_HTTP_REQUEST_METHOD, method.toUpperCase());\n span.setAttribute(ATTR_URL_FULL, url);\n return await _stream(span);\n });\n });\n }\n\n async get<T>(\n url: string,\n params?: Record<string, unknown>,\n headers?: Record<string, string | undefined>,\n telemetryContext?: Context\n ): Promise<HttpClientResponse<T>> {\n const logger = LoggerManager.getLogger();\n logger?.debug(`IsomorphicHttpClient.GET request to ${url}`, { params, headers });\n return this.makeRequest<T>(\"get\", url, params || {}, { headers }, telemetryContext);\n }\n\n async post<T>(\n url: string,\n data?: Record<string, unknown>,\n headers?: Record<string, string | undefined>,\n telemetryContext?: Context\n ): Promise<HttpClientResponse<T>> {\n const logger = LoggerManager.getLogger();\n logger?.debug(`IsomorphicHttpClient.POST request to ${url}`, { data, headers });\n return this.makeRequest<T>(\"post\", url, data || {}, { headers }, telemetryContext);\n }\n\n async put<T>(\n url: string,\n data?: Record<string, unknown>,\n headers?: Record<string, string | undefined>,\n telemetryContext?: Context\n ): Promise<HttpClientResponse<T>> {\n const logger = LoggerManager.getLogger();\n logger?.debug(`IsomorphicHttpClient.PUT request to ${url}`, { data, headers });\n return this.makeRequest<T>(\"put\", url, data || {}, { headers }, telemetryContext);\n }\n\n async delete<T>(\n url: string,\n params?: Record<string, unknown>,\n headers?: Record<string, string | undefined>,\n telemetryContext?: Context\n ): Promise<HttpClientResponse<T>> {\n const logger = LoggerManager.getLogger();\n logger?.debug(`IsomorphicHttpClient.DELETE request to ${url}`, { params, headers });\n return this.makeRequest<T>(\"delete\", url, params || {}, { headers }, telemetryContext);\n }\n\n async patch<T>(\n url: string,\n data?: Record<string, unknown>,\n headers?: Record<string, string | undefined>,\n telemetryContext?: Context\n ): Promise<HttpClientResponse<T>> {\n const logger = LoggerManager.getLogger();\n logger?.debug(`IsomorphicHttpClient.PATCH request to ${url}`, { data, headers });\n return this.makeRequest<T>(\"patch\", url, data || {}, { headers }, telemetryContext);\n }\n}\n\nexport { IsomorphicHttpClient };\n","import { GatewayBaseError } from \"@adaline/types\";\n\nconst QueueTaskTimeoutErrorLiteral = \"QueueTaskTimeoutError\" as const;\nclass QueueTaskTimeoutError extends GatewayBaseError {\n readonly info: string;\n readonly cause: unknown;\n\n constructor({ info, cause }: { info: string; cause: unknown }) {\n super({ info, cause }, QueueTaskTimeoutErrorLiteral);\n this.info = info;\n this.cause = cause;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n\n static isQueueTaskTimeoutError(error: unknown): error is QueueTaskTimeoutError {\n return error instanceof QueueTaskTimeoutError;\n }\n}\n\nexport { QueueTaskTimeoutError };\n","import { Context } from \"@opentelemetry/api\";\nimport { z } from \"zod\";\n\nimport { type Cache } from \"../cache\";\n\ntype QueueTask<Request, Response> = {\n id: string;\n request: Request;\n cache: Cache<Response>;\n resolve: (value: Response) => void;\n reject: (error: any) => void;\n execute: (request: Request, context: Context) => Promise<Response>;\n telemetryContext: Context;\n};\n\ninterface Queue<Request, Response> {\n enqueue(task: QueueTask<Request, Response>): void;\n}\n\nconst QueueOptions = z.object({\n maxConcurrentTasks: z.number().int().positive(),\n retryCount: z.number().int().positive(),\n timeout: z.number().int().positive(),\n retry: z.object({\n initialDelay: z.number().int().positive(),\n exponentialFactor: z.number().int().positive(),\n }),\n});\ntype QueueOptionsType = z.infer<typeof QueueOptions>;\n\nexport { QueueOptions, type Queue, type QueueOptionsType, type QueueTask };\n","import sha256 from \"crypto-js/sha256.js\";\n\nimport { GatewayError } from \"../errors/errors\";\nimport { HttpClientError } from \"../plugins/http-client/http-client.error\";\n\nconst getCacheKeyHash = (prefix: string, object: object): string => {\n return sha256(prefix + JSON.stringify(object)).toString();\n};\n\nconst castToError = (err: any): GatewayError => {\n if (err instanceof GatewayError) return err;\n if (HttpClientError.isHttpClientError(err)) return new GatewayError(err.message as string);\n if (err instanceof Error) return new GatewayError(err.message as string);\n return new GatewayError(err);\n};\n\nconst isRunningInBrowser = () => {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n return typeof window !== \"undefined\" && typeof window.document !== \"undefined\" && typeof navigator !== \"undefined\";\n};\n\nconst logLevels = {\n error: 0,\n warn: 1,\n info: 2,\n};\n\nconst logColors = {\n error: \"color: red\",\n warn: \"color: yellow\",\n info: \"color: green\",\n};\n\nconst verbose = (level: keyof typeof logLevels, action: string, ...args: any[]) => {\n if (!isRunningInBrowser()) {\n // Node.js environment\n switch (level) {\n case \"error\":\n console.error(...args);\n break;\n case \"warn\":\n console.warn(...args);\n break;\n default:\n console.log(...args);\n }\n } else if (isRunningInBrowser()) {\n // Browser environment\n console.log(`%c[${level.toUpperCase()}] [${action}]`, logColors[level], ...args);\n }\n};\n\nconst debug = (level: keyof typeof logLevels, action: string, ...args: any[]) => {\n if (isRunningInBrowser()) return;\n // eslint-disable-next-line turbo/no-undeclared-env-vars\n if (process?.env?.DEBUG !== \"true\") return;\n verbose(level, action, ...args);\n};\n\ntype Prettify<T> = {\n [K in keyof T]: T[K];\n} & unknown;\n\ninterface BaseCallback {\n [key: string]: (...args: any[]) => void | Promise<void>;\n}\n\ntype ArgumentsType<T> = T extends (...args: infer A) => any ? A : never;\n\nconst safelyInvokeCallbacks = async <T extends BaseCallback, K extends keyof T>(\n callbacks: T[],\n name: keyof T,\n ...args: ArgumentsType<T[K]>\n): Promise<void> => {\n const promises: Promise<void>[] = [];\n\n callbacks.forEach((callback) => {\n const func = callback[name];\n if (typeof func === \"function\") {\n try {\n const result = func(...args);\n if (result instanceof Promise) {\n promises.push(result);\n }\n } catch (error) {\n debug(\"error\", `SAFELY_INVOKE_CALLBACKS:${String(name)}:`, error);\n }\n }\n });\n\n await Promise.allSettled(promises);\n};\n\nconst delay = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms));\n\nconst calcRateLimitRetryTimeout = (\n maxRetries: number,\n backOffInitialDelay: number,\n backOffMultiplier: number,\n executionTimePerAttempt: number\n): number => {\n let totalDelayTime = 0;\n const totalExecutionTime = maxRetries * executionTimePerAttempt;\n\n for (let i = 0; i < maxRetries; i++) {\n totalDelayTime += backOffInitialDelay * Math.pow(backOffMultiplier, i);\n }\n\n return totalDelayTime + totalExecutionTime;\n};\n\nconst defaultShouldRetry = (status: number) => {\n // Rate limit errors are handled separately.\n\n // Retry on request timeouts.\n if (status === 408) return true;\n // Retry on lock timeouts.\n if (status === 409) return true;\n // Retry internal errors.\n if (status >= 500) return true;\n\n return false;\n};\n\nexport {\n calcRateLimitRetryTimeout,\n castToError,\n debug,\n defaultShouldRetry,\n delay,\n getCacheKeyHash,\n isRunningInBrowser,\n safelyInvokeCallbacks,\n type Prettify,\n};\n","import { Logger } from \"./logger.interface\";\n\nclass LoggerManager {\n private static logger: Logger | undefined;\n\n static setLogger(logger: Logger | undefined): void {\n this.logger = logger;\n }\n\n static getLogger(): Logger | undefined {\n return this.logger;\n }\n}\n\nexport { LoggerManager };\n","import { isRunningInBrowser } from \"../../utils/utils\";\nimport { Logger } from \"./logger.interface\";\n\nexport class ConsoleLogger implements Logger {\n debug(message: string, ...params: any[]): void {\n console.debug(message, ...params);\n }\n\n info(message: string, ...params: any[]): void {\n console.info(message, ...params);\n }\n\n warn(message: string, ...params: any[]): void {\n if (isRunningInBrowser()) {\n console.warn(`%WARN: %c${message}`, \"color: yellow; font-weight: bold;\", \"\", ...params);\n } else {\n const yellow = \"\\x1b[33m\";\n const reset = \"\\x1b[0m\";\n console.warn(`${yellow}WARN:${reset} ${message}`, ...params);\n }\n }\n\n error(message: string, ...params: any[]): void {\n if (isRunningInBrowser()) {\n console.error(`%ERROR: %c${message}`, \"color: lightcoral; font-weight: bold;\", \"\", ...params);\n } else {\n const red = \"\\x1b[91m\";\n const reset = \"\\x1b[0m\";\n console.error(`${red}ERROR:${reset} ${message}`, ...params);\n }\n }\n\n critical(message: string, ...params: any[]): void {\n if (isRunningInBrowser()) {\n console.error(`%cCRITICAL: %c${message}`, \"color: red; font-weight: bold;\", \"\", ...params);\n } else {\n const redBold = \"\\x1b[31;1m\";\n const reset = \"\\x1b[0m\";\n console.error(`${redBold}CRITICAL:${reset} ${message}`, ...params);\n }\n }\n}\n","import { Context, context, Span, SpanStatusCode, trace } from \"@opentelemetry/api\";\n\nimport { GatewayCompleteChatRequest } from \"../../gateway.types\";\nimport { delay } from \"../../utils\";\nimport { HttpRequestError } from \"./../http-client\";\nimport { LoggerManager } from \"./../logger\";\nimport { TelemetryManager } from \"./../telemetry\";\nimport { QueueTaskTimeoutError } from \"./queue.error\";\nimport { Queue, QueueOptionsType, QueueTask } from \"./queue.interface\";\n\nclass SimpleQueue<Request, Response> implements Queue<Request, Response> {\n private options: QueueOptionsType;\n private activeTasks = 0;\n private queue: { task: QueueTask<Request, Response>; taskSpan: Span }[] = [];\n\n constructor(options: QueueOptionsType) {\n this.options = options;\n }\n\n public enqueue(task: QueueTask<Request, Response>): void {\n const logger = LoggerManager.getLogger();\n logger?.debug(`SimpleQueue.enqueue invoked, id: ${task.id}`);\n context.with(task.telemetryContext, async () => {\n const tracer = TelemetryManager.getTracer();\n return tracer.startActiveSpan(\"queue.task.pickup-wait\", async (taskSpan: Span) => {\n taskSpan.setAttribute(\"id\", task.id);\n this.queue.push({ task, taskSpan });\n logger?.debug(`SimpleQueue.enqueue task enqueued, id: ${task.id}`);\n });\n });\n this.processQueue();\n }\n\n private executeWithTimeout(task: QueueTask<Request, Response>, taskTelemetryContext: Context): Promise<Response> {\n const logger = LoggerManager.getLogger();\n logger?.debug(`SimpleQueue.executeWithTimeout invoked with timeout: ${this.options.timeout}, id: ${task.id}`);\n return new Promise((resolve, reject) => {\n const timeout = setTimeout(() => {\n logger?.warn(`SimpleQueue.executeWithTimeout timed out, id: ${task.id}`);\n reject(\n new QueueTaskTimeoutError({\n info: \"Queue task timeout\",\n cause: new Error(\"Queue task timeout\"),\n })\n );\n }, this.options.timeout);\n\n logger?.debug(`SimpleQueue.executeWithTimeout task executing, id: ${task.id}`);\n task\n .execute(task.request, taskTelemetryContext)\n .then((result) => {\n logger?.debug(`SimpleQueue.executeWithTimeout task completed, id: ${task.id}`);\n clearTimeout(timeout);\n resolve(result);\n })\n .catch((error) => {\n logger?.warn(`SimpleQueue.executeWithTimeout task errored, id: ${task.id}`);\n clearTimeout(timeout);\n reject(error);\n });\n });\n }\n\n private async executeWithRetry(task: QueueTask<Request, Response>, retryRemaining: number): Promise<Response> {\n const logger = LoggerManager.getLogger();\n return await context.with(task.telemetryContext, async () => {\n const tracer = TelemetryManager.getTracer();\n return await tracer.startActiveSpan(\"queue.task.execute\", async (span: Span) => {\n logger?.debug(`SimpleQueue.executeWithRetry invoked, attempt: ${this.options.retryCount - retryRemaining}, id: ${task.id}`);\n span.setAttribute(\"attempt\", this.options.retryCount - retryRemaining);\n try {\n const taskTelemetryContext = context.active();\n const response = await this.executeWithTimeout(task, taskTelemetryContext);\n span.setStatus({ code: SpanStatusCode.OK });\n span.end();\n return response;\n } catch (error) {\n if (retryRemaining === 0) {\n logger?.warn(`SimpleQueue.executeWithRetry retry count reached, id: ${task.id}`);\n // span.setStatus({ code: SpanStatusCode.ERROR });\n span.end();\n throw error;\n }\n\n let shouldRetry = true;\n let delayMs =\n this.options.retry.initialDelay * Math.pow(this.options.retry.exponentialFactor, this.options.retryCount - retryRemaining);\n if (HttpRequestError.isHttpRequestError(error)) {\n // rate limiting error\n if (error.cause.status === 429) {\n logger?.warn(`SimpleQueue.executeWithRetry rate limiting error, id: ${task.id}`);\n const taskRequest = GatewayCompleteChatRequest.safeParse(task.request);\n if (taskRequest.success) {\n const retryDelay = taskRequest.data.model.getRetryDelay(error.cause.headers);\n shouldRetry = retryDelay.shouldRetry;\n // valid delayMs is returned from model\n if (retryDelay.delayMs > 0) {\n delayMs = retryDelay.delayMs;\n }\n }\n }\n\n if (error.cause.status >= 500 && error.cause.status < 600) {\n logger?.warn(`SimpleQueue.executeWithRetry ${error.cause.status} error, id: ${task.id}`);\n // implement retry logic for 500 errors\n // else defaults to exponential backoff\n }\n } else {\n logger?.warn(`SimpleQueue.executeWithRetry non http-request error, id: ${task.id}`, { error });\n // implement retry logic for non http-request errors\n // else defaults to exponential backoff\n }\n\n if (!shouldRetry) {\n // span.setStatus({ code: SpanStatusCode.ERROR });\n logger?.warn(`SimpleQueue.executeWithRetry model returned should not retry, id: ${task.id}`);\n span.end();\n throw error;\n } else {\n // span.setStatus({ code: SpanStatusCode.ERROR });\n return await tracer.startActiveSpan(\"queue.task.retry-wait\", async (retrySpan: Span) => {\n logger?.debug(`SimpleQueue.executeWithRetry retry wait: ${delayMs}ms, id: ${task.id}`);\n await delay(delayMs);\n retrySpan.end();\n span.end();\n return this.executeWithRetry(task, retryRemaining - 1);\n });\n }\n } finally {\n // span.end();\n }\n });\n });\n }\n\n private async processQueue() {\n const logger = LoggerManager.getLogger();\n if (this.activeTasks >= this.options.maxConcurrentTasks) {\n logger?.debug(\"SimpleQueue.processQueue max concurrent tasks reached\");\n return;\n }\n\n const item = this.queue.shift();\n if (!item) {\n logger?.debug(\"SimpleQueue.processQueue no item to process\");\n return;\n }\n\n const { task, taskSpan } = item;\n if (taskSpan) {\n taskSpan.end();\n }\n\n this.activeTasks += 1;\n logger?.debug(`SimpleQueue.processQueue active tasks: ${this.activeTasks}`);\n logger?.debug(`SimpleQueue.processQueue processing task, id: ${task.id}`);\n\n try {\n const response: Response = await this.executeWithRetry(task, this.options.retryCount);\n logger?.debug(`SimpleQueue.processQueue task completed, id: ${task.id}`);\n task.resolve(response);\n } catch (error) {\n logger?.warn(`SimpleQueue.processQueue task errored, id: ${task.id}`);\n task.reject(error);\n } finally {\n this.activeTasks -= 1;\n logger?.debug(`SimpleQueue.processQueue active tasks: ${this.activeTasks}`);\n trace.getSpan(task.telemetryContext)?.end();\n this.processQueue();\n }\n }\n}\n\nexport { SimpleQueue };\n","import { LRUCache as LRU } from \"lru-cache\";\n\nimport { LoggerManager } from \"./../logger\";\nimport { type Cache } from \"./cache.interface\";\n\nclass LRUCache<T extends object> implements Cache<T> {\n private cache: LRU<string, T>;\n\n constructor(maxEntries: number = 1000) {\n this.cache = new LRU<string, T>({\n max: maxEntries,\n allowStale: false,\n updateAgeOnGet: false,\n });\n const logger = LoggerManager.getLogger();\n logger?.debug(`LRUCache initialized with maxEntries: ${maxEntries}`);\n }\n\n async get(key: string): Promise<T | undefined> {\n const logger = LoggerManager.getLogger();\n logger?.debug(`LRUCache.get invoked, key: ${key}`);\n return new Promise((resolve) => {\n const value = this.cache.get(key);\n logger?.debug(\"LRUCache.get completed, value: \", value);\n resolve(value);\n });\n }\n\n async set(key: string, value: T): Promise<void> {\n const logger = LoggerManager.getLogger();\n logger?.debug(`LRUCache.set invoked, key: ${key}, value: `, value);\n return new Promise((resolve) => {\n this.cache.set(key, value);\n logger?.debug(\"LRUCache.set completed\");\n resolve();\n });\n }\n\n async delete(key: string): Promise<void> {\n const logger = LoggerManager.getLogger();\n logger?.debug(`LRUCache.delete invoked, key: ${key}`);\n return new Promise((resolve) => {\n this.cache.delete(key);\n logger?.debug(\"LRUCache.delete completed\");\n resolve();\n });\n }\n\n async clear(): Promise<void> {\n const logger = LoggerManager.getLogger();\n logger?.debug(\"LRUCache.clear invoked\");\n return new Promise((resolve) => {\n this.cache.clear();\n logger?.debug(\"LRUCache.clear completed\");\n resolve();\n });\n }\n}\n\nexport { LRUCache, type Cache };\n","import { AnalyticsEvent, AnalyticsRecorder } from \"./analytics.interface\";\n\nclass NoOpAnalytics implements AnalyticsRecorder {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n record(event: AnalyticsEvent[\"event\"], status: AnalyticsEvent[\"status\"], dimensions: AnalyticsEvent[\"dimensions\"]): void {\n // Do nothing\n }\n\n stopRecorder(): void {\n // Do nothing\n }\n}\n\nexport { NoOpAnalytics };\n","// TODO: test if this file is isomorphic\nimport { readFileSync } from \"fs\";\nimport os from \"os\";\nimport { join } from \"path\";\n\nimport { AnalyticsBrowserEnvironment, AnalyticsNodeEnvironment } from \"./analytics.interface\";\n\n// const isGatewayAnalyticsEnabled = (): boolean => {\n// return process.env.ADX_ANALYTICS_ENABLED === \"true\" || process.env.ADX_ANALYTICS_ENABLED === undefined;\n// }\n\nconst getGatewayEnvironment = (): string => {\n return process.env.ADX_NODE_ENV || \"unknown\";\n};\n\nconst getNodeDetails = (): AnalyticsNodeEnvironment => {\n return {\n node: {\n version: process.version,\n platform: os.platform(),\n architecture: os.arch(),\n },\n };\n};\n\nconst getBrowserDetails = (): AnalyticsBrowserEnvironment => {\n return {\n browser: {\n version: navigator.userAgent,\n userAgent: navigator.userAgent,\n },\n };\n};\n\nconst getGatewayVersion = (): string => {\n try {\n const packageJsonPath = join(__dirname, \"../package.json\");\n const packageJson = JSON.parse(readFileSync(packageJsonPath, \"utf-8\"));\n return packageJson.version;\n } catch (error) {\n return \"unknown\";\n }\n};\n\nexport { getGatewayEnvironment, getNodeDetails, getBrowserDetails, getGatewayVersion };\n","import axios from \"axios\";\n\nimport { isRunningInBrowser } from \"./../../utils\";\nimport { AnalyticsBrowserEnvironment, AnalyticsEvent, AnalyticsNodeEnvironment, AnalyticsRecorder } from \"./analytics.interface\";\nimport { getBrowserDetails, getGatewayVersion, getNodeDetails } from \"./analytics.utils\";\n\nclass PostAnalytics implements AnalyticsRecorder {\n private readonly eventVersion = \"0.1\";\n private readonly gatewayVersion = getGatewayVersion();\n\n private flushTimer: any;\n private flushInterval: number = 10000;\n private batchSize: number = 1;\n private maxAttempts: number = 3;\n private environment: AnalyticsNodeEnvironment | AnalyticsBrowserEnvironment = isRunningInBrowser()\n ? getBrowserDetails()\n : getNodeDetails();\n private analyticsEndpointUrl: string = \"https://j954t34pkh.execute-api.us-east-1.amazonaws.com/v0/analytics\";\n\n private events: { event: AnalyticsEvent; attempt: number }[] = [];\n\n constructor() {\n // this.startFlushTimer();\n }\n\n private startFlushTimer() {\n if (isRunningInBrowser()) {\n this.flushTimer = window.setInterval(() => this.flushEvents(), this.flushInterval);\n } else {\n this.flushTimer = setInterval(() => this.flushEvents(), this.flushInterval);\n }\n }\n\n private stopFlushTimer() {\n if (isRunningInBrowser()) {\n window.clearInterval(this.flushTimer);\n } else {\n clearInterval(this.flushTimer);\n }\n }\n\n record(event: AnalyticsEvent[\"event\"], status: AnalyticsEvent[\"status\"], dimensions: AnalyticsEvent[\"dimensions\"]): void {\n const analyticsEvent: AnalyticsEvent = {\n event,\n status,\n dimensions,\n timestamp: new Date().toISOString(),\n eventVersion: this.eventVersion,\n gatewayVersion: this.gatewayVersion,\n environment: this.environment,\n };\n this.events.push({ event: analyticsEvent, attempt: 0 });\n\n if (this.events.length >= this.batchSize) {\n this.flushEvents();\n }\n }\n\n private async flushEvents(): Promise<void> {\n if (this.events.length === 0) return;\n\n const eventsToSend = [...this.events];\n this.events = [];\n\n const success = await this.sendEvents(eventsToSend.map((e) => e.event));\n if (!success) {\n this.events.push(\n ...eventsToSend.filter((e) => e.attempt < this.maxAttempts).map((e) => ({ event: e.event, attempt: e.attempt + 1 }))\n );\n }\n }\n\n private async sendEvents(events: AnalyticsEvent[]): Promise<boolean> {\n try {\n const response = await axios.post(\n this.analyticsEndpointUrl,\n { events },\n {\n headers: {\n \"Content-Type\": \"application/json\",\n },\n }\n );\n return response.status === 200;\n } catch (error) {\n return false;\n }\n }\n\n public stopRecorder() {\n this.stopFlushTimer();\n this.flushEvents();\n }\n}\n\nexport { PostAnalytics };\n","import { AnalyticsRecorder } from \"./analytics.interface\";\nimport { NoOpAnalytics } from \"./no-op.analytics\";\nimport { PostAnalytics } from \"./post.analytics\";\n\nclass AnalyticsManager {\n private static analytics: AnalyticsRecorder | undefined;\n\n static getAnalyticsRecorder(analyticsEnabled: boolean): AnalyticsRecorder {\n if (this.analytics !== undefined) {\n return this.analytics;\n } else {\n this.analytics = analyticsEnabled ? new PostAnalytics() : new NoOpAnalytics();\n return this.analytics;\n }\n }\n}\n\nexport { AnalyticsManager };\n","import { Meter, Tracer } from \"@opentelemetry/api\";\nimport { z } from \"zod\";\n\nimport { ChatModelV1, EmbeddingModelV1 } from \"@adaline/provider\";\nimport { Config, EmbeddingRequests, Message, Tool } from \"@adaline/types\";\n\nimport {\n CompleteChatCallbackType,\n CompleteChatHandlerResponseType,\n GetEmbeddingsCallbackType,\n GetEmbeddingsHandlerResponseType,\n StreamChatCallbackType,\n} from \"./handlers\";\nimport { Cache, HttpClient, Logger, QueueOptions } from \"./plugins\";\n\nconst GatewayOptions = z.object({\n queueOptions: z.lazy(() => QueueOptions.partial()).optional(),\n dangerouslyAllowBrowser: z.boolean().optional(),\n httpClient: z.custom<HttpClient>().optional(),\n completeChatCache: z.custom<Cache<CompleteChatHandlerResponseType>>().optional(),\n completeChatCallbacks: z.array(z.custom<CompleteChatCallbackType>()).nonempty().optional(),\n getEmbeddingsCache: z.custom<Cache<GetEmbeddingsHandlerResponseType>>().optional(),\n getEmbeddingsCallbacks: z.array(z.custom<GetEmbeddingsCallbackType>()).nonempty().optional(),\n streamChatCallbacks: z.array(z.custom<StreamChatCallbackType>()).nonempty().optional(),\n logger: z.custom<Logger>().optional(),\n telemetry: z\n .object({\n tracer: z.custom<Tracer>().optional(),\n meter: z.custom<Meter>().optional(),\n })\n .optional(),\n analyticsEnabled: z.boolean().optional(),\n});\ntype GatewayOptionsType = z.infer<typeof GatewayOptions>;\n\nconst GatewayCompleteChatRequestOptions = z.object({\n enableCache: z.boolean().optional().default(true),\n customHeaders: z.record(z.string()).optional(),\n metadataForCallbacks: z.any().optional(),\n});\ntype GatewayCompleteChatRequestOptionsType = z.infer<typeof GatewayCompleteChatRequestOptions>;\n\nconst GatewayCompleteChatRequest = z.object({\n model: z.custom<ChatModelV1>(),\n config: Config(),\n messages: z.array(Message()),\n tools: z.array(Tool()).optional(),\n options: GatewayCompleteChatRequestOptions.optional(),\n});\ntype GatewayCompleteChatRequestType = z.infer<typeof GatewayCompleteChatRequest>;\n\nconst GatewayStreamChatRequestOptions = z.object({\n customHeaders: z.record(z.string()).optional(),\n metadataForCallbacks: z.any().optional(),\n});\ntype GatewayStreamChatRequestOptionsType = z.infer<typeof GatewayStreamChatRequestOptions>;\n\nconst GatewayStreamChatRequest = z.object({\n model: z.custom<ChatModelV1>(),\n config: Config(),\n messages: z.array(Message()),\n tools: z.array(Tool()).optional(),\n options: GatewayStreamChatRequestOptions.optional(),\n});\ntype GatewayStreamChatRequestType = z.infer<typeof GatewayStreamChatRequest>;\n\nconst GatewayGetEmbeddingsRequestOptions = z.object({\n enableCache: z.boolean().optional().default(true),\n customHeaders: z.record(z.string()).optional(),\n metadataForCallbacks: z.any().optional(),\n});\ntype GatewayGetEmbeddingsRequestOptionsType = z.infer<typeof GatewayGetEmbeddingsRequestOptions>;\n\nconst GatewayGetEmbeddingsRequest = z.object({\n model: z.custom<EmbeddingModelV1>(),\n config: Config(),\n embeddingRequests: EmbeddingRequests(),\n options: GatewayGetEmbeddingsRequestOptions.optional(),\n});\ntype GatewayGetEmbeddingsRequestType = z.infer<typeof GatewayGetEmbeddingsRequest>;\n\nexport {\n GatewayCompleteChatRequest,\n GatewayCompleteChatRequestOptions,\n GatewayGetEmbeddingsRequest,\n GatewayGetEmbeddingsRequestOptions,\n GatewayOptions,\n GatewayStreamChatRequest,\n GatewayStreamChatRequestOptions,\n type GatewayCompleteChatRequestOptionsType,\n type GatewayCompleteChatRequestType,\n type GatewayGetEmbeddingsRequestOptionsType,\n type GatewayGetEmbeddingsRequestType,\n type GatewayOptionsType,\n type GatewayStreamChatRequestOptionsType,\n type GatewayStreamChatRequestType,\n};\n","import { Context, context, Span, SpanStatusCode } from \"@opentelemetry/api\";\n\nimport { GatewayError } from \"../../errors/errors\";\nimport { HttpClient, HttpRequestError, LoggerManager, TelemetryManager } from \"../../plugins\";\nimport { castToError, getCacheKeyHash, safelyInvokeCallbacks } from \"../../utils\";\nimport {\n CompleteChatCallbackType,\n CompleteChatHandlerRequest,\n CompleteChatHandlerRequestType,\n CompleteChatHandlerResponseType,\n} from \"./complete-chat.types\";\n\nasync function handleCompleteChat(\n request: CompleteChatHandlerRequestType,\n client: HttpClient,\n telemetryContext?: Context\n): Promise<CompleteChatHandlerResponseType> {\n const logger = LoggerManager.getLogger();\n const _handleCompleteChat = async (span?: Span) => {\n logger?.debug(\"handleCompleteChat invoked\");\n logger?.debug(\"handleCompleteChat request: \", { request });\n const data = CompleteChatHandlerRequest.parse(request);\n const callbacks = request.callbacks || [];\n const handlerTelemetryContext = context.active();\n\n try {\n safelyInvokeCallbacks<CompleteChatCallbackType, keyof CompleteChatCallbackType>(\n callbacks,\n \"onChatStart\",\n request.metadataForCallbacks\n );\n\n const providerData = {\n config: data.config,\n messages: data.messages,\n tools: data.tools,\n };\n\n const providerRequest = {\n url: await data.model.getCompleteChatUrl(data.config, data.messages, data.tools),\n headers: await data.model.getCompleteChatHeaders(data.config, data.messages, data.tools),\n data: await data.model.getCompleteChatData(data.config, data.messages, data.tools),\n };\n\n providerRequest.headers = {\n ...providerRequest.headers,\n source: \"adaline.ai\",\n };\n\n if (data.customHeaders) {\n providerRequest.headers = {\n ...providerRequest.headers,\n ...data.customHeaders,\n };\n }\n \n logger?.debug(\"handleCompleteChat providerRequest: \", { providerRequest });\n const cacheKey = getCacheKeyHash(`complete-chat:${providerRequest.url}:${data.model.modelSchema.name}`, providerData);\n if (data.enableCache) {\n logger?.debug(\"handleCompleteChat checking cache\");\n const cachedResponse = await request.cache.get(cacheKey);\n if (cachedResponse) {\n cachedResponse.cached = true;\n logger?.debug(\"handleCompleteChat cached hit\");\n span?.setAttribute(\"cached\", true);\n span?.setStatus({ code: SpanStatusCode.OK });\n safelyInvokeCallbacks<CompleteChatCallbackType, keyof CompleteChatCallbackType>(\n callbacks,\n \"onChatCached\",\n request.metadataForCallbacks,\n cachedResponse\n );\n logger?.debug(\"handleCompleteChat cached response: \", { cachedResponse });\n return cachedResponse;\n }\n }\n\n logger?.debug(\"handleCompleteChat cache miss\");\n const now = Date.now();\n const providerResponse = await client.post(\n providerRequest.url,\n providerRequest.data,\n providerRequest.headers,\n handlerTelemetryContext\n );\n const latencyInMs = Date.now() - now;\n logger?.debug(\"handleCompleteChat providerResponse: \", { providerResponse });\n\n const response: CompleteChatHandlerResponseType = {\n request: providerData,\n response: data.model.transformCompleteChatResponse(providerResponse.data),\n cached: false,\n latencyInMs,\n metadataForCallbacks: request.metadataForCallbacks,\n provider: {\n request: providerRequest,\n response: providerResponse,\n },\n };\n\n logger?.debug(\"handleCompleteChat response: \", { response });\n if (data.enableCache) {\n await request.cache.set(cacheKey, response);\n logger?.debug(\"handleCompleteChat response cached\");\n }\n\n span?.setAttribute(\"cached\", false);\n span?.setStatus({ code: SpanStatusCode.OK });\n safelyInvokeCallbacks<CompleteChatCallbackType, keyof CompleteChatCallbackType>(\n callbacks,\n \"onChatComplete\",\n request.metadataForCallbacks,\n response\n );\n\n return response;\n } catch (error) {\n logger?.warn(\"handleCompleteChat error: \", { error });\n let safeError: GatewayError | HttpRequestError;\n\n if (HttpRequestError.isHttpRequestError(error)) {\n safeError = error;\n } else if (error instanceof GatewayError) {\n safeError = error;\n } else {\n safeError = castToError(error);\n }\n\n // TODO: maybe only set if it's non HTTP Error ?\n // span?.setStatus({ code: SpanStatusCode.ERROR, message: safeError.message });\n safelyInvokeCallbacks<CompleteChatCallbackType, keyof CompleteChatCallbackType>(\n callbacks,\n \"onChatError\",\n request.metadataForCallbacks,\n safeError\n );\n\n throw safeError;\n } finally {\n span?.end();\n }\n };\n\n if (!telemetryContext) {\n return await _handleCompleteChat();\n }\n\n return await context.with(telemetryContext, async () => {\n const tracer = TelemetryManager.getTracer();\n return await tracer.startActiveSpan(\"complete-chat.handler\", async (span: Span) => {\n return await _handleCompleteChat(span);\n });\n });\n}\n\nexport { handleCompleteChat };\n","import { z } from \"zod\";\n\nimport { ChatModelV1 } from \"@adaline/provider\";\nimport { ChatResponse, Config, Message, Tool } from \"@adaline/types\";\n\nimport { GatewayError } from \"../../errors\";\nimport { Cache, HttpRequestError } from \"../../plugins\";\n\nconst CompleteChatHandlerRequest = z.object({\n cache: z.custom<Cache<CompleteChatHandlerResponseType>>(),\n model: z.custom<ChatModelV1>(),\n config: Config(),\n messages: z.array(Message()),\n tools: z.array(Tool()).optional(),\n enableCache: z.boolean(),\n customHeaders: z.record(z.string()).optional(),\n callbacks: z.array(z.custom<CompleteChatCallbackType>()).nonempty().optional(),\n metadataForCallbacks: z.any().optional(),\n});\ntype CompleteChatHandlerRequestType = z.infer<typeof CompleteChatHandlerRequest>;\n\nconst CompleteChatHandlerResponse = z.object({\n request: z.object({\n config: Config(),\n messages: z.array(Message()),\n tools: z.array(Tool()).optional(),\n }),\n response: ChatResponse,\n cached: z.boolean(),\n latencyInMs: z.number().int().positive(),\n metadataForCallbacks: z.any().optional(),\n provider: z.object({\n request: z.any(),\n response: z.any(),\n }),\n});\ntype CompleteChatHandlerResponseType = z.infer<typeof CompleteChatHandlerResponse>;\n\ntype CompleteChatCallbackType<M = any> = {\n onChatStart?: (metadata?: M) => Promise<void> | void;\n onChatCached?: (metadata?: M, response?: CompleteChatHandlerResponseType) => Promise<void> | void;\n onChatComplete?: (metadata?: M, response?: CompleteChatHandlerResponseType) => Promise<void> | void;\n onChatError?: (metadata?: M, error?: GatewayError | HttpRequestError) => Promise<void> | void;\n};\n\nexport {\n CompleteChatHandlerRequest,\n CompleteChatHandlerResponse,\n type CompleteChatCallbackType,\n type CompleteChatHandlerRequestType,\n type CompleteChatHandlerResponseType,\n};\n","import { Context, context, Span, SpanStatusCode } from \"@opentelemetry/api\";\n\nimport { GatewayError } from \"../../errors/errors\";\nimport { HttpClient, HttpRequestError, LoggerManager, TelemetryManager } from \"../../plugins\";\nimport { castToError, getCacheKeyHash, safelyInvokeCallbacks } from \"../../utils\";\nimport {\n GetEmbeddingsCallbackType,\n GetEmbeddingsHandlerRequest,\n GetEmbeddingsHandlerRequestType,\n GetEmbeddingsHandlerResponseType,\n} from \"./get-embeddings.types\";\n\nasync function handleGetEmbeddings(\n request: GetEmbeddingsHandlerRequestType,\n client: HttpClient,\n telemetryContext?: Context\n): Promise<GetEmbeddingsHandlerResponseType> {\n const logger = LoggerManager.getLogger();\n const _handleGetEmbeddings = async (span?: Span) => {\n logger?.debug(\"handleGetEmbeddings invoked\");\n logger?.debug(\"handleGetEmbeddings request: \", { request });\n const data = GetEmbeddingsHandlerRequest.parse(request);\n const callbacks = request.callbacks || [];\n const handlerTelemetryContext = context.active();\n\n try {\n safelyInvokeCallbacks<GetEmbeddingsCallbackType, keyof GetEmbeddingsCallbackType>(\n callbacks,\n \"onGetEmbeddingsStart\",\n request.metadataForCallbacks\n );\n\n const providerData = {\n config: data.config,\n embeddingRequests: data.embeddingRequests,\n };\n\n const providerRequest = {\n url: await data.model.getGetEmbeddingsUrl(data.config, data.embeddingRequests),\n headers: await data.model.getGetEmbeddingsHeaders(data.config, data.embeddingRequests),\n data: await data.model.getGetEmbeddingsData(data.config, data.embeddingRequests),\n };\n\n providerRequest.headers = {\n ...providerRequest.headers,\n source: \"adaline.ai\",\n };\n \n if (data.customHeaders) {\n providerRequest.headers = {\n ...providerRequest.headers,\n ...data.customHeaders,\n };\n }\n\n logger?.debug(\"handleGetEmbeddings providerRequest: \", { providerRequest });\n const cacheKey = getCacheKeyHash(`get-embeddings:${providerRequest.url}:${data.model.modelSchema.name}`, providerData);\n if (data.enableCache) {\n logger?.debug(\"handleGetEmbeddings checking cache\");\n const cachedResponse = await request.cache.get(cacheKey);\n if (cachedResponse) {\n cachedResponse.cached = true;\n logger?.debug(\"handleGetEmbeddings cached hit\");\n span?.setAttribute(\"cached\", true);\n span?.setStatus({ code: SpanStatusCode.OK });\n safelyInvokeCallbacks<GetEmbeddingsCallbackType, keyof GetEmbeddingsCallbackType>(\n callbacks,\n \"onGetEmbeddingsCached\",\n request.metadataForCallbacks,\n cachedResponse\n );\n logger?.debug(\"handleGetEmbeddings cached response: \", { cachedResponse });\n return cachedResponse;\n }\n }\n\n logger?.debug(\"handleGetEmbeddings cache miss\");\n const now = Date.now();\n const providerResponse = await client.post(\n providerRequest.url,\n providerRequest.data,\n providerRequest.headers,\n handlerTelemetryContext\n );\n const latencyInMs = Date.now() - now;\n logger?.debug(\"handleGetEmbeddings providerResponse: \", { providerResponse });\n\n const response: GetEmbeddingsHandlerResponseType = {\n request: providerData,\n response: data.model.transformGetEmbeddingsResponse(providerResponse.data),\n cached: false,\n latencyInMs,\n metadataForCallbacks: request.metadataForCallbacks,\n provider: {\n request: providerRequest,\n response: providerResponse,\n },\n };\n\n logger?.debug(\"handleGetEmbeddings response: \", { response });\n if (data.enableCache) {\n await request.cache.set(cacheKey, response);\n logger?.debug(\"handleGetEmbeddings response cached\");\n }\n\n span?.setAttribute(\"cached\", false);\n span?.setStatus({ code: SpanStatusCode.OK });\n safelyInvokeCallbacks<GetEmbeddingsCallbackType, keyof GetEmbeddingsCallbackType>(\n callbacks,\n \"onGetEmbeddingsComplete\",\n request.metadataForCallbacks,\n response\n );\n\n return response;\n } catch (error) {\n logger?.warn(\"handleGetEmbeddings error: \", { error });\n let safeError: GatewayError | HttpRequestError;\n\n if (HttpRequestError.isHttpRequestError(error)) {\n safeError = error;\n } else if (error instanceof GatewayError) {\n safeError = error;\n } else {\n safeError = castToError(error);\n }\n\n // span?.setStatus({ code: SpanStatusCode.ERROR, message: safeError.message });\n safelyInvokeCallbacks<GetEmbeddingsCallbackType, keyof GetEmbeddingsCallbackType>(\n callbacks,\n \"onGetEmbeddingsError\",\n request.metadataForCallbacks,\n safeError\n );\n\n throw safeError;\n } finally {\n span?.end();\n }\n };\n\n if (!telemetryContext) {\n return await _handleGetEmbeddings();\n }\n\n return await context.with(telemetryContext, async () => {\n const tracer = TelemetryManager.getTracer();\n return await tracer.startActiveSpan(\"get-embeddings.handler\", async (span: Span) => {\n return await _handleGetEmbeddings(span);\n });\n });\n}\n\nexport { handleGetEmbeddings };\n","import { z } from \"zod\";\n\nimport { EmbeddingModelV1 } from \"@adaline/provider\";\nimport { Config, EmbeddingRequests, EmbeddingResponse } from \"@adaline/types\";\n\nimport { GatewayError } from \"../../errors\";\nimport { Cache, HttpRequestError } from \"../../plugins\";\n\nconst GetEmbeddingsHandlerRequest = z.object({\n cache: z.custom<Cache<GetEmbeddingsHandlerResponseType>>(),\n model: z.custom<EmbeddingModelV1>(),\n config: Config(),\n embeddingRequests: EmbeddingRequests(),\n enableCache: z.boolean(),\n customHeaders: z.record(z.string()).optional(),\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 cached: z.boolean(),\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 | HttpRequestError) => Promise<void> | void;\n};\n\nexport {\n GetEmbeddingsHandlerRequest,\n GetEmbeddingsHandlerResponse,\n type GetEmbeddingsHandlerRequestType,\n type GetEmbeddingsHandlerResponseType,\n type GetEmbeddingsCallbackType,\n};\n","import { z } from \"zod\";\n\nimport { ChatModelV1 } from \"@adaline/provider\";\nimport { Config, Message, PartialChatResponse, Tool } from \"@adaline/types\";\n\nimport { GatewayError } from \"../../errors\";\nimport { HttpRequestError } from \"../../plugins\";\n\nconst StreamChatHandlerRequest = z.object({\n model: z.custom<ChatModelV1>(),\n config: Config(),\n messages: z.array(Message()),\n tools: z.array(Tool()).optional(),\n customHeaders: z.record(z.string()).optional(),\n callbacks: z.array(z.custom<StreamChatCallbackType>()).nonempty().optional(),\n metadataForCallbacks: z.any().optional(),\n});\ntype StreamChatHandlerRequestType = z.infer<typeof StreamChatHandlerRequest>;\n\nconst StreamChatHandlerResponse = z.object({\n request: z.object({\n config: Config(),\n messages: z.array(Message()),\n tools: z.array(Tool()).optional(),\n }),\n response: PartialChatResponse,\n metadataForCallbacks: z.any().optional(),\n provider: z.object({\n request: z.any(),\n response: z.any(),\n }),\n});\ntype StreamChatHandlerResponseType = z.infer<typeof StreamChatHandlerResponse>;\n\ntype StreamChatCallbackType<M = any> = {\n onStreamStart?: (metadata?: M) => Promise<void> | void;\n onStreamFirstResponse?: (metadata?: M, response?: StreamChatHandlerResponseType, chunk?: unknown) => Promise<void> | void;\n onStreamNewResponse?: (metadata?: M, response?: StreamChatHandlerResponseType, chunk?: unknown) => Promise<void> | void;\n onStreamEnd?: (metadata?: M, response?: StreamChatHandlerResponseType) => Promise<void> | void;\n onStreamError?: (metadata?: M, error?: GatewayError | HttpRequestError) => Promise<void> | void;\n};\n\nexport {\n StreamChatHandlerRequest,\n StreamChatHandlerResponse,\n type StreamChatCallbackType,\n type StreamChatHandlerRequestType,\n type StreamChatHandlerResponseType,\n};\n","import { Context, context, Span, SpanStatusCode } from \"@opentelemetry/api\";\n\nimport { GatewayError } from \"../../errors/errors\";\nimport { HttpClient, HttpRequestError, LoggerManager, TelemetryManager } 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 telemetryContext?: Context\n): AsyncGenerator<StreamChatHandlerResponseType, void, unknown> {\n const logger = LoggerManager.getLogger();\n const _handleStreamChat = async function* (span?: Span): AsyncGenerator<StreamChatHandlerResponseType, void, unknown> {\n logger?.debug(\"handleStreamChat invoked\");\n logger?.debug(\"handleStreamChat request: \", { request });\n const data = StreamChatHandlerRequest.parse(request);\n const callbacks = request.callbacks || [];\n\n const stable = {\n config: data.config,\n messages: data.messages,\n tools: data.tools,\n };\n\n try {\n safelyInvokeCallbacks<StreamChatCallbackType, keyof StreamChatCallbackType>(callbacks, \"onStreamStart\", request.metadataForCallbacks);\n\n const providerRequest = {\n url: await data.model.getStreamChatUrl(data.config, data.messages, data.tools),\n headers: await data.model.getStreamChatHeaders(data.config, data.messages, data.tools),\n data: await data.model.getStreamChatData(data.config, data.messages, data.tools),\n };\n\n providerRequest.headers = {\n ...providerRequest.headers,\n source: \"adaline.ai\",\n };\n \n if (data.customHeaders) {\n providerRequest.headers = {\n ...providerRequest.headers,\n ...data.customHeaders,\n };\n }\n logger?.debug(\"handleStreamChat providerRequest: \", { providerRequest });\n\n let buffer = \"\";\n let isFirstResponse = true;\n for await (const chunk of client.stream(providerRequest.url, \"post\", providerRequest.data, providerRequest.headers)) {\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 logger?.debug(\"handleStreamChat streamResponse: \", { streamResponse });\n yield streamResponse;\n } else {\n buffer = transformed.buffer;\n }\n }\n }\n\n span?.setStatus({ code: SpanStatusCode.OK });\n safelyInvokeCallbacks<StreamChatCallbackType<M>, keyof StreamChatCallbackType<M>>(\n callbacks,\n \"onStreamEnd\",\n request.metadataForCallbacks\n );\n } catch (error) {\n logger?.warn(\"handleStreamChat error: \", { error });\n let safeError: GatewayError | HttpRequestError;\n\n if (HttpRequestError.isHttpRequestError(error)) {\n safeError = error;\n } else if (error instanceof GatewayError) {\n safeError = error;\n } else {\n safeError = castToError(error);\n }\n\n // span?.setStatus({ code: SpanStatusCode.ERROR, message: safeError.message });\n safelyInvokeCallbacks<StreamChatCallbackType<M>, keyof StreamChatCallbackType<M>>(\n callbacks,\n \"onStreamError\",\n request.metadataForCallbacks,\n safeError\n );\n\n throw safeError;\n } finally {\n span?.end();\n }\n };\n\n if (!telemetryContext) {\n return yield* _handleStreamChat();\n }\n\n return yield* await context.with(telemetryContext, async () => {\n const tracer = TelemetryManager.getTracer();\n return await tracer.startActiveSpan(\"stream-chat.handler\", async (span: Span) => {\n return await _handleStreamChat(span);\n });\n });\n}\n\nexport { handleStreamChat };\n","import { Context, context, Meter, Span, SpanStatusCode, trace, Tracer } from \"@opentelemetry/api\";\nimport { v4 as uuidv4 } from \"uuid\";\n\nimport { GatewayError } from \"./errors\";\nimport {\n GatewayCompleteChatRequest,\n GatewayCompleteChatRequestType,\n GatewayGetEmbeddingsRequest,\n GatewayGetEmbeddingsRequestType,\n GatewayOptions,\n GatewayOptionsType,\n GatewayStreamChatRequest,\n GatewayStreamChatRequestType,\n} from \"./gateway.types\";\nimport { CompleteChatHandlerResponseType, GetEmbeddingsHandlerResponseType, StreamChatHandlerResponseType } from \"./handlers\";\nimport { handleCompleteChat } from \"./handlers/complete-chat/complete-chat.handler\";\nimport { handleGetEmbeddings } from \"./handlers/get-embeddings/get-embeddings.handler\";\nimport { handleStreamChat } from \"./handlers/stream-chat/stream-chat.handler\";\nimport { Cache, HttpClient, IsomorphicHttpClient, LRUCache, Queue, QueueTask, SimpleQueue } from \"./plugins\";\nimport { AnalyticsManager, AnalyticsRecorder } from \"./plugins/analytics\";\nimport { Logger, LoggerManager } from \"./plugins/logger\";\nimport { TelemetryManager } from \"./plugins/telemetry\";\nimport { isRunningInBrowser } from \"./utils\";\n\nclass Gateway {\n private options: GatewayOptionsType;\n\n private logger?: Logger;\n private tracer: Tracer;\n private meter: Meter;\n private analytics: AnalyticsRecorder;\n\n private httpClient: HttpClient;\n private queues: {\n completeChat: Queue<GatewayCompleteChatRequestType, CompleteChatHandlerResponseType>;\n getEmbeddings: Queue<GatewayGetEmbeddingsRequestType, GetEmbeddingsHandlerResponseType>;\n };\n private caches: {\n completeChat: Cache<CompleteChatHandlerResponseType>;\n getEmbeddings: Cache<GetEmbeddingsHandlerResponseType>;\n };\n\n constructor(options: GatewayOptionsType = {}) {\n if (!options.dangerouslyAllowBrowser && isRunningInBrowser()) {\n throw new GatewayError(\n \"It looks like you're running in a browser-like environment. \\\n This is disabled by default, as it risks exposing your provider secrets to attackers. \\\n If you understand the risks and have appropriate mitigation in place, \\\n you can set the `dangerouslyAllowBrowser` option to `true`.\"\n );\n }\n\n this.options = GatewayOptions.parse(options);\n\n LoggerManager.setLogger(options.logger);\n this.logger = options.logger;\n\n this.analytics = AnalyticsManager.getAnalyticsRecorder(\n this.options.analyticsEnabled === undefined ? true : this.options.analyticsEnabled\n );\n\n TelemetryManager.setTracer(options.telemetry?.tracer);\n this.tracer = TelemetryManager.getTracer();\n\n TelemetryManager.setMeter(options.telemetry?.meter);\n this.meter = TelemetryManager.getMeter();\n\n const queueOptions = {\n maxConcurrentTasks: this.options.queueOptions?.maxConcurrentTasks || 4,\n retryCount: this.options.queueOptions?.retryCount || 3,\n retry: this.options.queueOptions?.retry || {\n initialDelay: 1000,\n exponentialFactor: 2,\n },\n timeout: this.options.queueOptions?.timeout || 120000,\n };\n\n this.queues = {\n completeChat: new SimpleQueue(queueOptions),\n getEmbeddings: new SimpleQueue(queueOptions),\n };\n\n // httpClient timeout is 90% of queue timeout\n this.httpClient = options.httpClient || new IsomorphicHttpClient({ timeoutInMilliseconds: queueOptions.timeout * 0.9 });\n\n this.caches = {\n completeChat: options.completeChatCache || new LRUCache<CompleteChatHandlerResponseType>(),\n getEmbeddings: options.getEmbeddingsCache || new LRUCache<GetEmbeddingsHandlerResponseType>(),\n };\n this.logger?.debug(\"gateway initialized\");\n }\n\n async completeChat(request: GatewayCompleteChatRequestType): Promise<CompleteChatHandlerResponseType> {\n this.logger?.info(\"gateway.completeChat invoked\");\n this.logger?.debug(\"request: \", { request });\n const data = GatewayCompleteChatRequest.parse(request);\n const modelName = data.model.modelSchema.name;\n // const counter = this.meter.createCounter(\"completeChat.counter\");\n // counter.add(1, { modelName });\n return await this.tracer.startActiveSpan(\"complete-chat\", async (span: Span) => {\n span.setAttribute(\"modelName\", modelName);\n return new Promise<CompleteChatHandlerResponseType>((resolve, reject) => {\n const task: QueueTask<GatewayCompleteChatRequestType, CompleteChatHandlerResponseType> = {\n id: uuidv4(),\n request: data,\n cache: this.caches.completeChat,\n resolve: (response: CompleteChatHandlerResponseType) => {\n this.analytics.record(\"completeChat\", \"success\", { modelName, usage: response.response.usage || {} });\n resolve(response);\n },\n reject: (error: any) => {\n console.log(\"completeChat error\", error);\n this.analytics.record(\"completeChat\", \"error\", { modelName });\n reject(error);\n },\n execute: this.executeCompleteChat.bind(this),\n telemetryContext: context.active(),\n };\n this.queues.completeChat.enqueue(task);\n this.logger?.debug(`gateway.completeChat task enqueued, id: ${task.id}`);\n });\n });\n }\n\n private async executeCompleteChat(\n request: GatewayCompleteChatRequestType,\n telemetryContext: Context\n ): Promise<CompleteChatHandlerResponseType> {\n this.logger?.debug(\"gateway.executeCompleteChat invoked\");\n const data = GatewayCompleteChatRequest.parse(request);\n return handleCompleteChat(\n {\n cache: this.caches.completeChat,\n model: data.model,\n config: data.config,\n messages: data.messages,\n tools: data.tools,\n enableCache: data.options?.enableCache ?? true,\n callbacks: this.options.completeChatCallbacks,\n metadataForCallbacks: data.options?.metadataForCallbacks,\n },\n this.httpClient,\n telemetryContext\n );\n }\n\n async *streamChat(request: GatewayStreamChatRequestType): AsyncGenerator<StreamChatHandlerResponseType, void, unknown> {\n this.logger?.info(\"gateway.streamChat invoked\");\n this.logger?.debug(\"request: \", { request });\n const data = GatewayStreamChatRequest.parse(request);\n const modelName = data.model.modelSchema.name;\n\n let status = \"success\";\n const span = this.tracer.startSpan(\"stream-chat\");\n const activeContext = trace.setSpan(context.active(), span);\n\n try {\n span.setAttribute(\"modelName\", modelName);\n return yield* await context.with(activeContext, async () => {\n return handleStreamChat(\n {\n model: data.model,\n config: data.config,\n messages: data.messages,\n tools: data.tools,\n callbacks: this.options.streamChatCallbacks,\n metadataForCallbacks: data.options?.metadataForCallbacks,\n },\n this.httpClient,\n activeContext\n );\n });\n } catch (error) {\n status = \"error\";\n span.setStatus({ code: SpanStatusCode.ERROR, message: \"stream failed\" });\n this.logger?.error(\"gateway.streamChat error: \", { error });\n if (error instanceof GatewayError) throw error;\n else throw new GatewayError((error as any)?.message, 500, (error as any)?.response?.data);\n } finally {\n this.analytics.record(\"streamChat\", status, { modelName });\n span.end();\n }\n }\n\n async getEmbeddings(request: GatewayGetEmbeddingsRequestType): Promise<GetEmbeddingsHandlerResponseType> {\n this.logger?.info(\"gateway.getEmbeddings invoked\");\n this.logger?.debug(\"request: \", { request });\n const data = GatewayGetEmbeddingsRequest.parse(request);\n const modelName = data.model.modelSchema.name;\n return await this.tracer.startActiveSpan(\"get-embeddings\", async (span: Span) => {\n span.setAttribute(\"modelName\", modelName);\n return new Promise<GetEmbeddingsHandlerResponseType>((resolve, reject) => {\n const task: QueueTask<GatewayGetEmbeddingsRequestType, GetEmbeddingsHandlerResponseType> = {\n id: uuidv4(),\n request: data,\n cache: this.caches.getEmbeddings,\n resolve: (response: GetEmbeddingsHandlerResponseType) => {\n this.analytics.record(\"getEmbeddings\", \"success\", { modelName, usage: response.response.usage || {} });\n resolve(response);\n },\n reject: (error: any) => {\n this.analytics.record(\"getEmbeddings\", \"error\", { modelName });\n reject(error);\n },\n execute: this.executeGetEmbeddings.bind(this),\n telemetryContext: context.active(),\n };\n this.queues.getEmbeddings.enqueue(task);\n this.logger?.debug(`gateway.getEmbeddings task enqueued, id: ${task.id}`);\n });\n });\n }\n\n private async executeGetEmbeddings(\n request: GatewayGetEmbeddingsRequestType,\n telemetryContext: Context\n ): Promise<GetEmbeddingsHandlerResponseType> {\n this.logger?.debug(\"gateway.executeGetEmbeddings invoked\");\n const data = GatewayGetEmbeddingsRequest.parse(request);\n return handleGetEmbeddings(\n {\n cache: this.caches.getEmbeddings,\n model: data.model,\n config: data.config,\n embeddingRequests: data.embeddingRequests,\n enableCache: data.options?.enableCache ?? true,\n callbacks: this.options.getEmbeddingsCallbacks,\n metadataForCallbacks: data.options?.metadataForCallbacks,\n },\n this.httpClient,\n telemetryContext\n );\n }\n\n static GatewayError = GatewayError;\n}\n\nexport { Gateway, type GatewayOptionsType };\n"]}
|