{"version":3,"sources":["../src/openai.ts","../src/openai/streaming.ts","../src/openai/mergeChunks.ts","../src/codegen/core/BaseHttpRequest.ts","../src/codegen/core/request.ts","../src/codegen/core/ApiError.ts","../src/codegen/core/CancelablePromise.ts","../src/codegen/core/NodeHttpRequest.ts","../src/codegen/services/DefaultService.ts","../src/codegen/OPClient.ts","../src/shared.ts","../package.json","../src/client.ts","../src/openaiBeta.ts"],"sourcesContent":["import * as openai from \"openai\";\nimport * as Core from \"openai/core\";\nimport { readEnv } from \"openai/core\";\nimport type {\n  ChatCompletion,\n  ChatCompletionChunk,\n  ChatCompletionCreateParams,\n  ChatCompletionCreateParamsBase,\n  ChatCompletionCreateParamsNonStreaming,\n  ChatCompletionCreateParamsStreaming,\n} from \"openai/resources/chat/completions\";\n\nimport { WrappedStream } from \"./openai/streaming\";\nimport { ApiError, DefaultService } from \"./codegen\";\nimport type { Stream } from \"openai/streaming\";\nimport {\n  OpenPipeArgs,\n  OpenPipeMeta,\n  type OpenPipeConfig,\n  getTags,\n  OpenPipeChatCompletion,\n} from \"./shared\";\nimport OpenPipe from \"./client\";\nimport { OpenAIError } from \"openai\";\nimport { WrappedBeta } from \"./openaiBeta\";\n\nconst MISSING_OPENAI_API_KEY = \"MISSING_OPENAI_API_KEY\";\n\nexport type ClientOptions = openai.ClientOptions & { openpipe?: OpenPipeConfig | OpenPipe };\n\nexport default class OpenAI extends openai.OpenAI {\n  constructor({ openpipe, ...options }: ClientOptions = {}) {\n    super({\n      ...options,\n      apiKey: options.apiKey || readEnv(\"OPENAI_API_KEY\") || MISSING_OPENAI_API_KEY,\n    });\n    const openpipeClient = openpipe instanceof OpenPipe ? openpipe : new OpenPipe(openpipe);\n    const openPipeApiKey = openpipeClient.baseClient.request.config.TOKEN;\n    const fallbackClient =\n      openpipe && \"fallbackClient\" in openpipe && openpipe.fallbackClient instanceof openai.OpenAI\n        ? openpipe.fallbackClient\n        : new openai.OpenAI({ ...options, apiKey: this.apiKey });\n\n    if (typeof openPipeApiKey === \"string\" && openPipeApiKey.length > 0) {\n      this.chat.setClients(\n        openpipeClient,\n        new openai.OpenAI({\n          ...options,\n          baseURL: openpipeClient.baseClient.request.config.BASE,\n          apiKey: openPipeApiKey,\n        }),\n        fallbackClient,\n      );\n    } else {\n      console.warn(\n        \"You're using the OpenPipe client without an API key. No completion requests will be logged.\",\n      );\n    }\n  }\n  chat: WrappedChat = new WrappedChat(this);\n  beta: WrappedBeta = new WrappedBeta(this);\n}\n\nclass WrappedChat extends openai.OpenAI.Chat {\n  completions: WrappedCompletions = new WrappedCompletions(this._client);\n\n  setClients(opClient: OpenPipe, opCompletionClient: openai.OpenAI, fallbackClient: openai.OpenAI) {\n    this.completions.opClient = opClient;\n    this.completions.opCompletionClient = opCompletionClient;\n    this.completions.fallbackClient = fallbackClient;\n  }\n}\n\nclass WrappedCompletions extends openai.OpenAI.Chat.Completions {\n  // keep a reference to the original client so we can read options from it\n  openaiClient: openai.OpenAI;\n  opClient?: OpenPipe;\n  opCompletionClient?: openai.OpenAI;\n  fallbackClient: openai.OpenAI;\n\n  constructor(client: openai.OpenAI) {\n    super(client);\n    this.openaiClient = client;\n    this.fallbackClient = client;\n  }\n\n  async _report(args: Parameters<DefaultService[\"report\"]>[0]) {\n    try {\n      this.opClient ? await this.opClient.report(args) : Promise.resolve();\n    } catch (e) {\n      // Ignore errors with reporting\n    }\n  }\n\n  async _handleResponse(\n    response: ChatCompletion | Stream<ChatCompletionChunk>,\n    usedBody: ChatCompletionCreateParams,\n    openpipeArgs: OpenPipeArgs,\n    requestedAt: number,\n  ) {\n    let reportingFinished: OpenPipeMeta[\"reportingFinished\"] = Promise.resolve();\n    if (usedBody.stream) {\n      try {\n        return new WrappedStream(response as Stream<ChatCompletionChunk>, (response) => {\n          if (!openpipeArgs.openpipe?.logRequest) return Promise.resolve();\n          return this._report({\n            requestedAt,\n            receivedAt: Date.now(),\n            reqPayload: usedBody,\n            respPayload: response,\n            statusCode: 200,\n            tags: getTags(openpipeArgs.openpipe),\n          });\n        });\n      } catch (e) {\n        console.error(\"OpenPipe: error creating wrapped stream\");\n        console.error(e);\n        throw e;\n      }\n    } else {\n      reportingFinished = openpipeArgs.openpipe?.logRequest\n        ? this._report({\n            requestedAt,\n            receivedAt: Date.now(),\n            reqPayload: usedBody,\n            respPayload: response,\n            statusCode: 200,\n            tags: getTags(openpipeArgs.openpipe),\n          })\n        : Promise.resolve();\n      return {\n        ...(response as ChatCompletion),\n        openpipe: {\n          reportingFinished,\n        },\n      };\n    }\n  }\n\n  async _handleResponseError(\n    error: unknown,\n    usedBody: ChatCompletionCreateParams,\n    openpipeArgs: OpenPipeArgs,\n    requestedAt: number,\n  ) {\n    let reportingFinished: OpenPipeMeta[\"reportingFinished\"] = Promise.resolve();\n\n    if (error instanceof openai.APIError || error instanceof ApiError) {\n      const rawMessage =\n        error instanceof openai.APIError\n          ? (error.message as string | string[])\n          : error.body.message;\n      const message = Array.isArray(rawMessage) ? rawMessage.join(\", \") : rawMessage;\n\n      reportingFinished = this._report({\n        requestedAt,\n        receivedAt: Date.now(),\n        reqPayload: usedBody,\n        respPayload: error instanceof openai.APIError ? error.error : error.body,\n        statusCode: error.status,\n        errorMessage: message,\n        tags: getTags(openpipeArgs.openpipe),\n      });\n    }\n\n    if (error !== null) {\n      (error as { openpipe?: any }).openpipe = {\n        reportingFinished,\n      };\n    }\n\n    return error;\n  }\n  // @ts-expect-error It doesn't like the fact that I added a `Promise<>`\n  // wrapper but I actually think the types are correct here.\n  create(\n    body: ChatCompletionCreateParamsNonStreaming & OpenPipeArgs,\n    options?: Core.RequestOptions,\n  ): Core.APIPromise<OpenPipeChatCompletion & { openpipe?: OpenPipeMeta }>;\n  create(\n    body: ChatCompletionCreateParamsStreaming & OpenPipeArgs,\n    options?: Core.RequestOptions,\n  ): Core.APIPromise<Stream<ChatCompletionChunk> & { openpipe?: OpenPipeMeta }>;\n  create(\n    body: ChatCompletionCreateParamsBase & OpenPipeArgs,\n    options?: Core.RequestOptions,\n  ): Core.APIPromise<Stream<ChatCompletionChunk> | OpenPipeChatCompletion>;\n  async create(\n    { openpipe: rawOpenpipe, ...body }: ChatCompletionCreateParams & OpenPipeArgs,\n    options?: Core.RequestOptions,\n  ): Promise<\n    Core.APIPromise<\n      | (OpenPipeChatCompletion & { openpipe?: OpenPipeMeta })\n      | (Stream<ChatCompletionChunk> & { openpipe?: OpenPipeMeta })\n    >\n  > {\n    const openpipe = { logRequest: true, ...rawOpenpipe };\n    const requestedAt = Date.now();\n\n    if (\n      body.model.startsWith(\"openpipe:\") ||\n      body.model.startsWith(\"openai:\") ||\n      body.model.startsWith(\"anthropic:\") ||\n      body.model.startsWith(\"gemini:\") ||\n      openpipe?.cache\n    ) {\n      if (!this.opCompletionClient) throw new Error(\"OpenPipe client not set\");\n      try {\n        const response = await this.opCompletionClient.chat.completions.create(body, {\n          ...options,\n          headers: {\n            \"op-log-request\": openpipe.logRequest ? \"true\" : \"false\",\n            \"op-cache\": openpipe?.cache,\n            \"op-tags\": JSON.stringify(getTags(openpipe)),\n            \"op-criteria\": JSON.stringify(openpipe.criteria),\n            ...options?.headers,\n          },\n        });\n        return response;\n      } catch (e) {\n        if (openpipe.fallback?.model) {\n          const fallbackBody = { ...body, model: openpipe.fallback.model };\n          try {\n            const response = await this.fallbackClient.chat.completions.create(fallbackBody, {\n              ...options,\n              timeout: openpipe.fallback.timeout ?? options?.timeout ?? 10 * 60 * 1000,\n            });\n\n            return this._handleResponse(response, fallbackBody, { openpipe }, requestedAt);\n          } catch (fallbackError) {\n            throw await this._handleResponseError(\n              fallbackError,\n              fallbackBody,\n              { openpipe },\n              requestedAt,\n            );\n          }\n        } else {\n          throw e;\n        }\n      }\n    }\n\n    try {\n      if (this.openaiClient.apiKey === MISSING_OPENAI_API_KEY) {\n        throw new OpenAIError(\n          \"The OPENAI_API_KEY environment variable is missing or empty; either provide it, or instantiate the OpenAI client with an apiKey option, like new OpenAI({ apiKey: 'My API Key' }).\",\n        );\n      }\n\n      // OpenAI does not accept metadata if store is false\n      const openAICompatibleBody =\n        body.metadata && !body.store ? { ...body, metadata: undefined } : body;\n\n      const response = await super.create(openAICompatibleBody, options);\n      return this._handleResponse(response, body, { openpipe }, requestedAt);\n    } catch (e: unknown) {\n      throw await this._handleResponseError(e, body, { openpipe }, requestedAt);\n    }\n  }\n}\n","import type { ChatCompletion, ChatCompletionChunk } from \"openai/resources/chat\";\nimport { Stream } from \"openai/streaming\";\n\nimport { OpenPipeMeta } from \"../shared\";\nimport mergeChunks from \"./mergeChunks\";\n\nexport class WrappedStream extends Stream<ChatCompletionChunk> {\n  openpipe: OpenPipeMeta;\n\n  private resolveReportingFinished: () => void = () => {};\n  private report: (response: unknown) => Promise<void>;\n\n  constructor(stream: Stream<ChatCompletionChunk>, report: (response: unknown) => Promise<void>) {\n    // @ts-expect-error - This is a private property but we need to access it\n    super(stream.iterator, stream.controller);\n    this.report = report;\n\n    const reportingFinished = new Promise<void>((resolve) => {\n      this.resolveReportingFinished = resolve;\n    });\n\n    this.openpipe = {\n      reportingFinished,\n    };\n  }\n\n  async *[Symbol.asyncIterator](): AsyncIterator<ChatCompletionChunk, any, undefined> {\n    const iterator = super[Symbol.asyncIterator]();\n\n    let combinedResponse: ChatCompletion | null = null;\n    while (true) {\n      const result = await iterator.next();\n      if (result.done) break;\n      combinedResponse = mergeChunks(combinedResponse, result.value);\n\n      yield result.value;\n    }\n\n    await this.report(combinedResponse);\n\n    // Resolve the promise here\n    this.resolveReportingFinished();\n  }\n}\n","import type { ChatCompletion, ChatCompletionChunk } from \"openai/resources/chat\";\nimport { CompletionUsage } from \"openai/resources/completions\";\n\nconst omit = <T extends Record<string, unknown>, K extends keyof T>(\n  obj: T,\n  ...keys: K[]\n): Omit<T, K> => {\n  const ret = { ...obj };\n  for (const key of keys) {\n    delete ret[key];\n  }\n  return ret;\n};\n\nexport default function mergeChunks(\n  base: ChatCompletion | null,\n  chunk: ChatCompletionChunk,\n): ChatCompletion {\n  if (base === null) {\n    return mergeChunks(\n      { ...chunk, object: \"chat.completion\", choices: [], usage: chunk.usage ?? undefined },\n      // Prevent function call and tool call arguments from being double-merged\n      {\n        ...chunk,\n        choices: chunk.choices.map((c) => ({\n          ...c,\n          delta: {\n            ...c.delta,\n            function_call: c.delta.function_call\n              ? {\n                  ...c.delta.function_call,\n                }\n              : undefined,\n            tool_calls: c.delta.tool_calls?.map((tc) => ({\n              ...tc,\n              function: {\n                ...tc.function,\n              },\n            })),\n          },\n        })),\n      },\n    );\n  }\n\n  const choices = [...base.choices];\n  for (const choice of chunk.choices) {\n    const baseChoice = choices.find((c) => c.index === choice.index);\n    if (baseChoice) {\n      baseChoice.finish_reason = choice.finish_reason ?? baseChoice.finish_reason;\n      baseChoice.message = { ...baseChoice.message, refusal: null };\n\n      if (choice.delta?.content)\n        baseChoice.message.content =\n          (baseChoice.message.content ?? \"\") + (choice.delta.content ?? \"\");\n      if (choice.delta?.function_call) {\n        const fnCall = baseChoice.message.function_call ?? {\n          name: \"\",\n          arguments: \"\",\n        };\n        fnCall.name = fnCall.name + (choice.delta.function_call.name ?? \"\");\n        fnCall.arguments = fnCall.arguments + (choice.delta.function_call.arguments ?? \"\");\n      }\n      if (choice.delta?.tool_calls) {\n        const toolCalls = baseChoice.message.tool_calls ?? [];\n        const toolCallDelta = { ...choice.delta.tool_calls[0] };\n        if (toolCallDelta?.function?.name) {\n          toolCalls.push({\n            id: toolCallDelta.id as string,\n            type: \"function\",\n            function: {\n              name: toolCallDelta.function.name ?? \"\",\n              arguments: toolCallDelta.function.arguments ?? \"\",\n            },\n          });\n        } else if (toolCalls[toolCalls.length - 1] && toolCallDelta) {\n          toolCalls[toolCalls.length - 1]!.function.arguments +=\n            toolCallDelta.function?.arguments ?? \"\";\n        }\n        baseChoice.message.tool_calls = toolCalls;\n      }\n    } else {\n      // @ts-expect-error the types are correctly telling us that finish_reason\n      // could be null, but don't want to fix it right now.\n      choices.push({ ...omit(choice, \"delta\"), message: { role: \"assistant\", ...choice.delta } });\n    }\n  }\n\n  const merged: ChatCompletion = {\n    ...base,\n    choices,\n    usage: chunk.usage ?? undefined,\n  };\n\n  return merged;\n}\n","/* generated using openapi-typescript-codegen -- do no edit */\n/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\nimport type { ApiRequestOptions } from './ApiRequestOptions';\nimport type { CancelablePromise } from './CancelablePromise';\nimport type { OpenAPIConfig } from './OpenAPI';\n\nexport abstract class BaseHttpRequest {\n\n    constructor(public readonly config: OpenAPIConfig) {}\n\n    public abstract request<T>(options: ApiRequestOptions): CancelablePromise<T>;\n}\n","/* generated using openapi-typescript-codegen -- do no edit */\n/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\nimport FormData from 'form-data';\nimport fetch, { Headers } from 'node-fetch';\nimport type { RequestInit, Response } from 'node-fetch';\nimport type { AbortSignal } from 'node-fetch/externals';\n\nimport { ApiError } from './ApiError';\nimport type { ApiRequestOptions } from './ApiRequestOptions';\nimport type { ApiResult } from './ApiResult';\nimport { CancelablePromise } from './CancelablePromise';\nimport type { OnCancel } from './CancelablePromise';\nimport type { OpenAPIConfig } from './OpenAPI';\n\nexport const isDefined = <T>(value: T | null | undefined): value is Exclude<T, null | undefined> => {\n    return value !== undefined && value !== null;\n};\n\nexport const isString = (value: any): value is string => {\n    return typeof value === 'string';\n};\n\nexport const isStringWithValue = (value: any): value is string => {\n    return isString(value) && value !== '';\n};\n\nexport const isBlob = (value: any): value is Blob => {\n    return (\n        typeof value === 'object' &&\n        typeof value.type === 'string' &&\n        typeof value.stream === 'function' &&\n        typeof value.arrayBuffer === 'function' &&\n        typeof value.constructor === 'function' &&\n        typeof value.constructor.name === 'string' &&\n        /^(Blob|File)$/.test(value.constructor.name) &&\n        /^(Blob|File)$/.test(value[Symbol.toStringTag])\n    );\n};\n\nexport const isFormData = (value: any): value is FormData => {\n    return value instanceof FormData;\n};\n\nexport const base64 = (str: string): string => {\n    try {\n        return btoa(str);\n    } catch (err) {\n        // @ts-ignore\n        return Buffer.from(str).toString('base64');\n    }\n};\n\nexport const getQueryString = (params: Record<string, any>): string => {\n    const qs: string[] = [];\n\n    const append = (key: string, value: any) => {\n        qs.push(`${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`);\n    };\n\n    const process = (key: string, value: any) => {\n        if (isDefined(value)) {\n            if (Array.isArray(value)) {\n                value.forEach(v => {\n                    process(key, v);\n                });\n            } else if (typeof value === 'object') {\n                Object.entries(value).forEach(([k, v]) => {\n                    process(`${key}[${k}]`, v);\n                });\n            } else {\n                append(key, value);\n            }\n        }\n    };\n\n    Object.entries(params).forEach(([key, value]) => {\n        process(key, value);\n    });\n\n    if (qs.length > 0) {\n        return `?${qs.join('&')}`;\n    }\n\n    return '';\n};\n\nconst getUrl = (config: OpenAPIConfig, options: ApiRequestOptions): string => {\n    const encoder = config.ENCODE_PATH || encodeURI;\n\n    const path = options.url\n        .replace('{api-version}', config.VERSION)\n        .replace(/{(.*?)}/g, (substring: string, group: string) => {\n            if (options.path?.hasOwnProperty(group)) {\n                return encoder(String(options.path[group]));\n            }\n            return substring;\n        });\n\n    const url = `${config.BASE}${path}`;\n    if (options.query) {\n        return `${url}${getQueryString(options.query)}`;\n    }\n    return url;\n};\n\nexport const getFormData = (options: ApiRequestOptions): FormData | undefined => {\n    if (options.formData) {\n        const formData = new FormData();\n\n        const process = (key: string, value: any) => {\n            if (isString(value) || isBlob(value)) {\n                formData.append(key, value);\n            } else {\n                formData.append(key, JSON.stringify(value));\n            }\n        };\n\n        Object.entries(options.formData)\n            .filter(([_, value]) => isDefined(value))\n            .forEach(([key, value]) => {\n                if (Array.isArray(value)) {\n                    value.forEach(v => process(key, v));\n                } else {\n                    process(key, value);\n                }\n            });\n\n        return formData;\n    }\n    return undefined;\n};\n\ntype Resolver<T> = (options: ApiRequestOptions) => Promise<T>;\n\nexport const resolve = async <T>(options: ApiRequestOptions, resolver?: T | Resolver<T>): Promise<T | undefined> => {\n    if (typeof resolver === 'function') {\n        return (resolver as Resolver<T>)(options);\n    }\n    return resolver;\n};\n\nexport const getHeaders = async (config: OpenAPIConfig, options: ApiRequestOptions): Promise<Headers> => {\n    const token = await resolve(options, config.TOKEN);\n    const username = await resolve(options, config.USERNAME);\n    const password = await resolve(options, config.PASSWORD);\n    const additionalHeaders = await resolve(options, config.HEADERS);\n\n    const headers = Object.entries({\n        Accept: 'application/json',\n        ...additionalHeaders,\n        ...options.headers,\n    })\n        .filter(([_, value]) => isDefined(value))\n        .reduce((headers, [key, value]) => ({\n            ...headers,\n            [key]: String(value),\n        }), {} as Record<string, string>);\n\n    if (isStringWithValue(token)) {\n        headers['Authorization'] = `Bearer ${token}`;\n    }\n\n    if (isStringWithValue(username) && isStringWithValue(password)) {\n        const credentials = base64(`${username}:${password}`);\n        headers['Authorization'] = `Basic ${credentials}`;\n    }\n\n    if (options.body) {\n        if (options.mediaType) {\n            headers['Content-Type'] = options.mediaType;\n        } else if (isBlob(options.body)) {\n            headers['Content-Type'] = 'application/octet-stream';\n        } else if (isString(options.body)) {\n            headers['Content-Type'] = 'text/plain';\n        } else if (!isFormData(options.body)) {\n            headers['Content-Type'] = 'application/json';\n        }\n    }\n\n    return new Headers(headers);\n};\n\nexport const getRequestBody = (options: ApiRequestOptions): any => {\n    if (options.body !== undefined) {\n        if (options.mediaType?.includes('/json')) {\n            return JSON.stringify(options.body)\n        } else if (isString(options.body) || isBlob(options.body) || isFormData(options.body)) {\n            return options.body as any;\n        } else {\n            return JSON.stringify(options.body);\n        }\n    }\n    return undefined;\n};\n\nexport const sendRequest = async (\n    options: ApiRequestOptions,\n    url: string,\n    body: any,\n    formData: FormData | undefined,\n    headers: Headers,\n    onCancel: OnCancel\n): Promise<Response> => {\n    const controller = new AbortController();\n\n    const request: RequestInit = {\n        headers,\n        method: options.method,\n        body: body ?? formData,\n        signal: controller.signal as AbortSignal,\n    };\n\n    onCancel(() => controller.abort());\n\n    return await fetch(url, request);\n};\n\nexport const getResponseHeader = (response: Response, responseHeader?: string): string | undefined => {\n    if (responseHeader) {\n        const content = response.headers.get(responseHeader);\n        if (isString(content)) {\n            return content;\n        }\n    }\n    return undefined;\n};\n\nexport const getResponseBody = async (response: Response): Promise<any> => {\n    if (response.status !== 204) {\n        try {\n            const contentType = response.headers.get('Content-Type');\n            if (contentType) {\n                const jsonTypes = ['application/json', 'application/problem+json']\n                const isJSON = jsonTypes.some(type => contentType.toLowerCase().startsWith(type));\n                if (isJSON) {\n                    return await response.json();\n                } else {\n                    return await response.text();\n                }\n            }\n        } catch (error) {\n            console.error(error);\n        }\n    }\n    return undefined;\n};\n\nexport const catchErrorCodes = (options: ApiRequestOptions, result: ApiResult): void => {\n    const errors: Record<number, string> = {\n        400: 'Bad Request',\n        401: 'Unauthorized',\n        403: 'Forbidden',\n        404: 'Not Found',\n        500: 'Internal Server Error',\n        502: 'Bad Gateway',\n        503: 'Service Unavailable',\n        ...options.errors,\n    }\n\n    const error = errors[result.status];\n    if (error) {\n        throw new ApiError(options, result, error);\n    }\n\n    if (!result.ok) {\n        const errorStatus = result.status ?? 'unknown';\n        const errorStatusText = result.statusText ?? 'unknown';\n        const errorBody = (() => {\n            try {\n                return JSON.stringify(result.body, null, 2);\n            } catch (e) {\n                return undefined;\n            }\n        })();\n\n        throw new ApiError(options, result,\n            `Generic Error: status: ${errorStatus}; status text: ${errorStatusText}; body: ${errorBody}`\n        );\n    }\n};\n\n/**\n * Request method\n * @param config The OpenAPI configuration object\n * @param options The request options from the service\n * @returns CancelablePromise<T>\n * @throws ApiError\n */\nexport const request = <T>(config: OpenAPIConfig, options: ApiRequestOptions): CancelablePromise<T> => {\n    return new CancelablePromise(async (resolve, reject, onCancel) => {\n        try {\n            const url = getUrl(config, options);\n            const formData = getFormData(options);\n            const body = getRequestBody(options);\n            const headers = await getHeaders(config, options);\n\n            if (!onCancel.isCancelled) {\n                const response = await sendRequest(options, url, body, formData, headers, onCancel);\n                const responseBody = await getResponseBody(response);\n                const responseHeader = getResponseHeader(response, options.responseHeader);\n\n                const result: ApiResult = {\n                    url,\n                    ok: response.ok,\n                    status: response.status,\n                    statusText: response.statusText,\n                    body: responseHeader ?? responseBody,\n                };\n\n                catchErrorCodes(options, result);\n\n                resolve(result.body);\n            }\n        } catch (error) {\n            reject(error);\n        }\n    });\n};\n","/* generated using openapi-typescript-codegen -- do no edit */\n/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\nimport type { ApiRequestOptions } from './ApiRequestOptions';\nimport type { ApiResult } from './ApiResult';\n\nexport class ApiError extends Error {\n    public readonly url: string;\n    public readonly status: number;\n    public readonly statusText: string;\n    public readonly body: any;\n    public readonly request: ApiRequestOptions;\n\n    constructor(request: ApiRequestOptions, response: ApiResult, message: string) {\n        super(message);\n\n        this.name = 'ApiError';\n        this.url = response.url;\n        this.status = response.status;\n        this.statusText = response.statusText;\n        this.body = response.body;\n        this.request = request;\n    }\n}\n","/* generated using openapi-typescript-codegen -- do no edit */\n/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\nexport class CancelError extends Error {\n\n    constructor(message: string) {\n        super(message);\n        this.name = 'CancelError';\n    }\n\n    public get isCancelled(): boolean {\n        return true;\n    }\n}\n\nexport interface OnCancel {\n    readonly isResolved: boolean;\n    readonly isRejected: boolean;\n    readonly isCancelled: boolean;\n\n    (cancelHandler: () => void): void;\n}\n\nexport class CancelablePromise<T> implements Promise<T> {\n    #isResolved: boolean;\n    #isRejected: boolean;\n    #isCancelled: boolean;\n    readonly #cancelHandlers: (() => void)[];\n    readonly #promise: Promise<T>;\n    #resolve?: (value: T | PromiseLike<T>) => void;\n    #reject?: (reason?: any) => void;\n\n    constructor(\n        executor: (\n            resolve: (value: T | PromiseLike<T>) => void,\n            reject: (reason?: any) => void,\n            onCancel: OnCancel\n        ) => void\n    ) {\n        this.#isResolved = false;\n        this.#isRejected = false;\n        this.#isCancelled = false;\n        this.#cancelHandlers = [];\n        this.#promise = new Promise<T>((resolve, reject) => {\n            this.#resolve = resolve;\n            this.#reject = reject;\n\n            const onResolve = (value: T | PromiseLike<T>): void => {\n                if (this.#isResolved || this.#isRejected || this.#isCancelled) {\n                    return;\n                }\n                this.#isResolved = true;\n                if (this.#resolve) this.#resolve(value);\n            };\n\n            const onReject = (reason?: any): void => {\n                if (this.#isResolved || this.#isRejected || this.#isCancelled) {\n                    return;\n                }\n                this.#isRejected = true;\n                if (this.#reject) this.#reject(reason);\n            };\n\n            const onCancel = (cancelHandler: () => void): void => {\n                if (this.#isResolved || this.#isRejected || this.#isCancelled) {\n                    return;\n                }\n                this.#cancelHandlers.push(cancelHandler);\n            };\n\n            Object.defineProperty(onCancel, 'isResolved', {\n                get: (): boolean => this.#isResolved,\n            });\n\n            Object.defineProperty(onCancel, 'isRejected', {\n                get: (): boolean => this.#isRejected,\n            });\n\n            Object.defineProperty(onCancel, 'isCancelled', {\n                get: (): boolean => this.#isCancelled,\n            });\n\n            return executor(onResolve, onReject, onCancel as OnCancel);\n        });\n    }\n\n     get [Symbol.toStringTag]() {\n            return \"Cancellable Promise\";\n     }\n\n    public then<TResult1 = T, TResult2 = never>(\n        onFulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | null,\n        onRejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | null\n    ): Promise<TResult1 | TResult2> {\n        return this.#promise.then(onFulfilled, onRejected);\n    }\n\n    public catch<TResult = never>(\n        onRejected?: ((reason: any) => TResult | PromiseLike<TResult>) | null\n    ): Promise<T | TResult> {\n        return this.#promise.catch(onRejected);\n    }\n\n    public finally(onFinally?: (() => void) | null): Promise<T> {\n        return this.#promise.finally(onFinally);\n    }\n\n    public cancel(): void {\n        if (this.#isResolved || this.#isRejected || this.#isCancelled) {\n            return;\n        }\n        this.#isCancelled = true;\n        if (this.#cancelHandlers.length) {\n            try {\n                for (const cancelHandler of this.#cancelHandlers) {\n                    cancelHandler();\n                }\n            } catch (error) {\n                console.warn('Cancellation threw an error', error);\n                return;\n            }\n        }\n        this.#cancelHandlers.length = 0;\n        if (this.#reject) this.#reject(new CancelError('Request aborted'));\n    }\n\n    public get isCancelled(): boolean {\n        return this.#isCancelled;\n    }\n}\n","/* generated using openapi-typescript-codegen -- do no edit */\n/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\nimport type { ApiRequestOptions } from './ApiRequestOptions';\nimport { BaseHttpRequest } from './BaseHttpRequest';\nimport type { CancelablePromise } from './CancelablePromise';\nimport type { OpenAPIConfig } from './OpenAPI';\nimport { request as __request } from './request';\n\nexport class NodeHttpRequest extends BaseHttpRequest {\n\n    constructor(config: OpenAPIConfig) {\n        super(config);\n    }\n\n    /**\n     * Request method\n     * @param options The request options from the service\n     * @returns CancelablePromise<T>\n     * @throws ApiError\n     */\n    public override request<T>(options: ApiRequestOptions): CancelablePromise<T> {\n        return __request(this.config, options);\n    }\n}\n","/* generated using openapi-typescript-codegen -- do no edit */\n/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\nimport type { CancelablePromise } from '../core/CancelablePromise';\nimport type { BaseHttpRequest } from '../core/BaseHttpRequest';\nexport class DefaultService {\n    constructor(public readonly httpRequest: BaseHttpRequest) {}\n    /**\n     * @deprecated\n     * DEPRECATED: we no longer support prompt caching.\n     * @param requestBody\n     * @returns any Successful response\n     * @throws ApiError\n     */\n    public checkCache(\n        requestBody: {\n            /**\n             * Unix timestamp in milliseconds\n             */\n            requestedAt: number;\n            /**\n             * JSON-encoded request payload\n             */\n            reqPayload?: any;\n            /**\n             * Extra tags to attach to the call for filtering. Eg { \"userId\": \"123\", \"prompt_id\": \"populate-title\" }\n             */\n            tags?: Record<string, string>;\n        },\n    ): CancelablePromise<{\n        /**\n         * JSON-encoded response payload\n         */\n        respPayload?: any;\n    }> {\n        return this.httpRequest.request({\n            method: 'POST',\n            url: '/check-cache',\n            body: requestBody,\n            mediaType: 'application/json',\n        });\n    }\n    /**\n     * OpenAI-compatible route for generating inference and optionally logging the request.\n     * @param requestBody\n     * @returns any Successful response\n     * @throws ApiError\n     */\n    public createChatCompletion(\n        requestBody: Record<string, any>,\n    ): CancelablePromise<{\n        id: string;\n        object: 'chat.completion';\n        created: number;\n        model: string;\n        choices: Array<{\n            finish_reason: ('length' | 'function_call' | 'tool_calls' | 'stop' | 'content_filter');\n            index: number;\n            message: {\n                reasoning_content?: string | null;\n                content?: string | null;\n                refusal?: string | null;\n                role: 'assistant';\n                function_call?: {\n                    name?: string;\n                    arguments?: string;\n                } | null;\n                tool_calls?: Array<{\n                    id: string;\n                    function: {\n                        name: string;\n                        arguments: string;\n                    };\n                    type: 'function';\n                }> | null;\n            };\n            logprobs?: {\n                content?: Array<{\n                    token: string;\n                    bytes: Array<number> | null;\n                    logprob: number;\n                    top_logprobs: Array<{\n                        token: string;\n                        bytes: Array<number> | null;\n                        logprob: number;\n                    }>;\n                }> | null;\n                refusal?: Array<{\n                    token: string;\n                    bytes: Array<number> | null;\n                    logprob: number;\n                    top_logprobs: Array<{\n                        token: string;\n                        bytes: Array<number> | null;\n                        logprob: number;\n                    }>;\n                }> | null;\n            } | null;\n            content_filter_results?: Record<string, any>;\n            criteria_results?: Record<string, ({\n                status: 'success';\n                score: number;\n                explanation?: string;\n                errorCode?: number;\n                errorMessage?: string;\n            } | {\n                status: 'error';\n                score?: number;\n                explanation?: string;\n                errorCode: number;\n                errorMessage: string;\n            })>;\n        }>;\n        usage?: {\n            prompt_tokens: number;\n            completion_tokens: number;\n            total_tokens: number;\n            prompt_cache_hit_tokens?: number;\n            prompt_cache_miss_tokens?: number;\n            completion_tokens_details?: {\n                reasoning_tokens?: number | null;\n                audio_tokens?: number | null;\n                text_tokens?: number | null;\n                accepted_prediction_tokens?: number | null;\n                rejected_prediction_tokens?: number | null;\n            } | null;\n            prompt_tokens_details?: {\n                cached_tokens?: number | null;\n                audio_tokens?: number | null;\n            } | null;\n            criteria?: Record<string, {\n                /**\n                 * The total number of tokens used to generate the criterion judgement. Only returned for OpenPipe-trained reward models currently.\n                 */\n                total_tokens: number;\n            }>;\n        };\n    } | null> {\n        return this.httpRequest.request({\n            method: 'POST',\n            url: '/chat/completions',\n            body: requestBody,\n            mediaType: 'application/json',\n        });\n    }\n    /**\n     * Record request logs from OpenAI models\n     * @param requestBody\n     * @returns any Successful response\n     * @throws ApiError\n     */\n    public report(\n        requestBody: {\n            /**\n             * Unix timestamp in milliseconds\n             */\n            requestedAt?: number;\n            /**\n             * Unix timestamp in milliseconds\n             */\n            receivedAt?: number;\n            /**\n             * JSON-encoded request payload\n             */\n            reqPayload?: any;\n            /**\n             * JSON-encoded response payload\n             */\n            respPayload?: any;\n            /**\n             * HTTP status code of response\n             */\n            statusCode?: number;\n            /**\n             * User-friendly error message\n             */\n            errorMessage?: string;\n            /**\n             * DEPRECATED: use \"reqPayload.metadata\" to attach extra metadata tags to the call for filtering. Eg { \"userId\": \"123\", \"prompt_id\": \"populate-title\" }\n             */\n            tags?: Record<string, (string | number | boolean | 'null' | null)>;\n        },\n    ): CancelablePromise<{\n        status: ('ok' | 'error');\n    }> {\n        return this.httpRequest.request({\n            method: 'POST',\n            url: '/report',\n            body: requestBody,\n            mediaType: 'application/json',\n        });\n    }\n    /**\n     * Record request logs from Anthropic models\n     * @param requestBody\n     * @returns any Successful response\n     * @throws ApiError\n     */\n    public reportAnthropic(\n        requestBody: {\n            /**\n             * Unix timestamp in milliseconds\n             */\n            requestedAt?: number;\n            /**\n             * Unix timestamp in milliseconds\n             */\n            receivedAt?: number;\n            /**\n             * JSON-encoded request payload\n             */\n            reqPayload?: Record<string, any>;\n            /**\n             * JSON-encoded response payload\n             */\n            respPayload?: {\n                id: string;\n                content: Array<({\n                    text: string;\n                    type: 'text';\n                } | {\n                    id: string;\n                    input?: any;\n                    name: string;\n                    type: 'tool_use';\n                })>;\n                model: string;\n                role: 'assistant';\n                stop_reason: ('end_turn' | 'max_tokens' | 'stop_sequence' | 'tool_use' | 'null' | null);\n                stop_sequence: (string | 'null' | null);\n                type: 'message';\n                usage: {\n                    input_tokens: number;\n                    output_tokens: number;\n                };\n            };\n            /**\n             * HTTP status code of response\n             */\n            statusCode?: number;\n            /**\n             * User-friendly error message\n             */\n            errorMessage?: string;\n            /**\n             * Extra metadata tags to attach to the call for filtering. Eg { \"userId\": \"123\", \"prompt_id\": \"populate-title\" }\n             */\n            metadata?: Record<string, string>;\n            /**\n             * Deprecated: use \"metadata\" instead\n             */\n            tags?: Record<string, (string | number | boolean | 'null' | null)>;\n        },\n    ): CancelablePromise<{\n        status: ('ok' | 'error');\n    }> {\n        return this.httpRequest.request({\n            method: 'POST',\n            url: '/report-anthropic',\n            body: requestBody,\n            mediaType: 'application/json',\n        });\n    }\n    /**\n     * @deprecated\n     * DEPRECATED: use \"/logs/update-metadata\" instead\n     * @param requestBody\n     * @returns any Successful response\n     * @throws ApiError\n     */\n    public updateLogTags(\n        requestBody: {\n            filters: Array<{\n                /**\n                 * The field to filter on. Possible fields include: `model`, `completionId`, and `tags.your_tag_name`.\n                 */\n                field: string;\n                equals: (string | number | boolean);\n            }>;\n            /**\n             * Extra tags to attach to the call for filtering. Eg { \"userId\": \"123\", \"prompt_id\": \"populate-title\" }\n             */\n            tags: Record<string, (string | number | boolean | 'null' | null)>;\n        },\n    ): CancelablePromise<{\n        matchedLogs: number;\n    }> {\n        return this.httpRequest.request({\n            method: 'POST',\n            url: '/logs/update-tags',\n            body: requestBody,\n            mediaType: 'application/json',\n        });\n    }\n    /**\n     * Update tags metadata for logged calls matching the provided filters.\n     * @param requestBody\n     * @returns any Successful response\n     * @throws ApiError\n     */\n    public updateLogMetadata(\n        requestBody: {\n            filters: Array<{\n                /**\n                 * The field to filter on. Possible fields include: `model`, `completionId`, and `metadata.your_tag_name`.\n                 */\n                field: string;\n                equals: (string | number | boolean);\n            }>;\n            /**\n             * Extra metadata to attach to the call for filtering. Eg { \"userId\": \"123\", \"prompt_id\": \"populate-title\" }\n             */\n            metadata: Record<string, (string | 'null' | null)>;\n        },\n    ): CancelablePromise<{\n        matchedLogs: number;\n    }> {\n        return this.httpRequest.request({\n            method: 'POST',\n            url: '/logs/update-metadata',\n            body: requestBody,\n            mediaType: 'application/json',\n        });\n    }\n    /**\n     * Get the latest logged call (only for local testing)\n     * @returns any Successful response\n     * @throws ApiError\n     */\n    public localTestingOnlyGetLatestLoggedCall(): CancelablePromise<{\n        createdAt: string;\n        cacheHit: boolean;\n        statusCode: number | null;\n        errorMessage: string | null;\n        reqPayload?: any;\n        respPayload?: any;\n        tags: Record<string, string | null>;\n        metadata: Record<string, string | null>;\n    } | null> {\n        return this.httpRequest.request({\n            method: 'GET',\n            url: '/local-testing-only-get-latest-logged-call',\n        });\n    }\n    /**\n     * Get a judgement of a completion against the specified criterion\n     * @param requestBody\n     * @returns any Successful response\n     * @throws ApiError\n     */\n    public getCriterionJudgement(\n        requestBody: {\n            /**\n             * The ID of the criterion to judge.\n             */\n            criterion_id: string;\n            input?: {\n                /**\n                 * All messages sent to the model when generating the output.\n                 */\n                messages?: Array<({\n                    role: 'system';\n                    content?: (string | Array<{\n                        type: 'text';\n                        text: string;\n                    }>);\n                    name?: string;\n                } | {\n                    role: 'user';\n                    content?: (string | Array<({\n                        type: 'text';\n                        text: string;\n                    } | {\n                        type: 'image_url';\n                        image_url: {\n                            detail?: ('auto' | 'low' | 'high');\n                            url: string;\n                        };\n                    } | {\n                        type: 'input_audio';\n                        input_audio: {\n                            data: string;\n                            format: 'wav' | 'mp3';\n                        };\n                    })>);\n                    name?: string;\n                } | {\n                    role: 'assistant';\n                    audio?: {\n                        id: string;\n                    } | null;\n                    content?: (string | Array<({\n                        type: 'text';\n                        text: string;\n                    } | {\n                        type: 'refusal';\n                        refusal: string;\n                    })> | 'null' | null);\n                    function_call?: {\n                        name?: string;\n                        arguments?: string;\n                    } | null;\n                    tool_calls?: Array<{\n                        id: string;\n                        function: {\n                            name: string;\n                            arguments: string;\n                        };\n                        type: 'function';\n                    }> | null;\n                    name?: string;\n                    refusal?: string | null;\n                } | {\n                    role: 'developer';\n                    content?: (string | Array<{\n                        type: 'text';\n                        text: string;\n                    }>);\n                    name?: string;\n                } | {\n                    role: 'tool';\n                    content?: (string | Array<{\n                        type: 'text';\n                        text: string;\n                    }>);\n                    tool_call_id: string;\n                } | {\n                    role: 'function';\n                    name: string;\n                    content: (string | 'null' | null);\n                })>;\n                /**\n                 * The tool choice to use when generating the output, if any.\n                 */\n                tool_choice?: ('none' | 'auto' | 'required' | {\n                    type?: 'function';\n                    function?: {\n                        name: string;\n                    };\n                });\n                /**\n                 * The tools available to the model when generating the output, if any.\n                 */\n                tools?: Array<{\n                    function: {\n                        name: string;\n                        parameters?: Record<string, any>;\n                        description?: string;\n                        strict?: boolean | null;\n                    };\n                    type: 'function';\n                }>;\n            };\n            /**\n             * The completion message of the model.\n             */\n            output: {\n                reasoning_content?: string | null;\n                content?: string | null;\n                refusal?: string | null;\n                role: 'assistant';\n                function_call?: {\n                    name?: string;\n                    arguments?: string;\n                } | null;\n                tool_calls?: Array<{\n                    id: string;\n                    function: {\n                        name: string;\n                        arguments: string;\n                    };\n                    type: 'function';\n                }> | null;\n            };\n        },\n    ): CancelablePromise<{\n        /**\n         * A score of 0 means the output failed this completion, and a score of 1 means it passed. A criteria may also return a decimal scores between 0 and 1, indicating the model's confidence or 'likelihood' that the criteria passed.\n         */\n        score: number;\n        /**\n         * An explanation of the score including the model's reasoning, if applicable.\n         */\n        explanation?: string;\n        usage?: {\n            /**\n             * The total number of tokens used to generate the criterion judgement. Only returned for OpenPipe-trained reward models currently.\n             */\n            total_tokens: number;\n        };\n    }> {\n        return this.httpRequest.request({\n            method: 'POST',\n            url: '/criteria/judge',\n            body: requestBody,\n            mediaType: 'application/json',\n        });\n    }\n    /**\n     * Create a new dataset.\n     * @param requestBody\n     * @returns any Successful response\n     * @throws ApiError\n     */\n    public createDataset(\n        requestBody: {\n            name: string;\n        },\n    ): CancelablePromise<{\n        object: 'dataset';\n        id: string;\n        name: string;\n        created: string;\n        updated: string;\n        dataset_entry_count: number;\n        fine_tune_count: number;\n    }> {\n        return this.httpRequest.request({\n            method: 'POST',\n            url: '/datasets',\n            body: requestBody,\n            mediaType: 'application/json',\n        });\n    }\n    /**\n     * List datasets for a project.\n     * @returns any Successful response\n     * @throws ApiError\n     */\n    public listDatasets(): CancelablePromise<{\n        object: 'list';\n        data: Array<{\n            object: 'dataset';\n            id: string;\n            name: string;\n            created: string;\n            updated: string;\n            dataset_entry_count: number;\n            fine_tune_count: number;\n        }>;\n    }> {\n        return this.httpRequest.request({\n            method: 'GET',\n            url: '/datasets',\n        });\n    }\n    /**\n     * Delete a dataset.\n     * @param datasetId\n     * @returns any Successful response\n     * @throws ApiError\n     */\n    public deleteDataset(\n        datasetId: string,\n    ): CancelablePromise<{\n        id: string;\n        object: 'dataset';\n        deleted: boolean;\n    }> {\n        return this.httpRequest.request({\n            method: 'DELETE',\n            url: '/datasets/{datasetId}',\n            path: {\n                'datasetId': datasetId,\n            },\n        });\n    }\n    /**\n     * Add new dataset entries.\n     * @param datasetId\n     * @param requestBody\n     * @returns any Successful response\n     * @throws ApiError\n     */\n    public createDatasetEntries(\n        datasetId: string,\n        requestBody: {\n            entries: Array<{\n                messages: Array<({\n                    role: 'system';\n                    content?: (string | Array<{\n                        type: 'text';\n                        text: string;\n                    }>);\n                    name?: string;\n                } | {\n                    role: 'user';\n                    content?: (string | Array<({\n                        type: 'text';\n                        text: string;\n                    } | {\n                        type: 'image_url';\n                        image_url: {\n                            detail?: ('auto' | 'low' | 'high');\n                            url: string;\n                        };\n                    } | {\n                        type: 'input_audio';\n                        input_audio: {\n                            data: string;\n                            format: 'wav' | 'mp3';\n                        };\n                    })>);\n                    name?: string;\n                } | {\n                    role: 'assistant';\n                    audio?: {\n                        id: string;\n                    } | null;\n                    content?: (string | Array<({\n                        type: 'text';\n                        text: string;\n                    } | {\n                        type: 'refusal';\n                        refusal: string;\n                    })> | 'null' | null);\n                    function_call?: {\n                        name?: string;\n                        arguments?: string;\n                    } | null;\n                    tool_calls?: Array<{\n                        id: string;\n                        function: {\n                            name: string;\n                            arguments: string;\n                        };\n                        type: 'function';\n                    }> | null;\n                    name?: string;\n                    refusal?: string | null;\n                } | {\n                    role: 'developer';\n                    content?: (string | Array<{\n                        type: 'text';\n                        text: string;\n                    }>);\n                    name?: string;\n                } | {\n                    role: 'tool';\n                    content?: (string | Array<{\n                        type: 'text';\n                        text: string;\n                    }>);\n                    tool_call_id: string;\n                } | {\n                    role: 'function';\n                    name: string;\n                    content: (string | 'null' | null);\n                })>;\n                rejected_message?: {\n                    reasoning_content?: string | null;\n                    content?: string | null;\n                    refusal?: string | null;\n                    role: 'assistant';\n                    function_call?: {\n                        name?: string;\n                        arguments?: string;\n                    } | null;\n                    tool_calls?: Array<{\n                        id: string;\n                        function: {\n                            name: string;\n                            arguments: string;\n                        };\n                        type: 'function';\n                    }> | null;\n                };\n                tool_choice?: ('none' | 'auto' | 'required' | {\n                    type?: 'function';\n                    function?: {\n                        name: string;\n                    };\n                });\n                tools?: Array<{\n                    function: {\n                        name: string;\n                        parameters?: Record<string, any>;\n                        description?: string;\n                        strict?: boolean | null;\n                    };\n                    type: 'function';\n                }>;\n                response_format?: ({\n                    type: 'text';\n                } | {\n                    type: 'json_object';\n                } | {\n                    type: 'json_schema';\n                    json_schema: {\n                        name: string;\n                        description?: string;\n                        schema?: Record<string, any>;\n                        strict?: boolean | null;\n                    };\n                });\n                split?: 'TRAIN' | 'TEST';\n                metadata?: Record<string, string>;\n            }>;\n        },\n    ): CancelablePromise<{\n        object: 'dataset.entries.creation';\n        entries_created: number;\n        errors: {\n            object: 'list';\n            data: Array<{\n                object: 'dataset.entries.creation.error';\n                entry_index: number;\n                message: string;\n            }>;\n        };\n    }> {\n        return this.httpRequest.request({\n            method: 'POST',\n            url: '/datasets/{datasetId}/entries',\n            path: {\n                'datasetId': datasetId,\n            },\n            body: requestBody,\n            mediaType: 'application/json',\n        });\n    }\n    /**\n     * Train a new model.\n     * @param requestBody\n     * @returns any Successful response\n     * @throws ApiError\n     */\n    public createModel(\n        requestBody: {\n            datasetId: string;\n            slug: string;\n            pruningRuleIds?: Array<string>;\n            trainingConfig: ({\n                provider: 'openpipe';\n                /**\n                 * The base model to train from. This could be a base model name or the slug of a previously trained model. Supported base models include: `meta-llama/Meta-Llama-3.1-8B-Instruct`, `meta-llama/Meta-Llama-3.1-70B-Instruct`, `meta-llama/Llama-3.3-70B-Instruct`, `meta-llama/Llama-3.1-8B`, `meta-llama/Llama-3.1-70B`, `Qwen/Qwen2.5-72B-Instruct`, `Qwen/Qwen2.5-Coder-32B-Instruct`, `Qwen/Qwen2.5-1.5B-Instruct`, `Qwen/Qwen2.5-7B-Instruct`, `Qwen/Qwen2-VL-7B-Instruct`, `mistralai/Mistral-Nemo-Base-2407`, `mistralai/Mistral-Small-24B-Base-2501`, `meta-llama/Llama-3.2-1B-Instruct`, `meta-llama/Llama-3.2-3B-Instruct`\n                 */\n                baseModel: string;\n                /**\n                 * Whether to enable SFT training. If true, the model will be trained using SFT. Can be used in conjunction with DPO training.\n                 */\n                enable_sft?: boolean;\n                /**\n                 * Whether to enable DPO training. If true, the model will be trained using DPO. Can be used in conjunction with SFT training.\n                 */\n                enable_preference_tuning?: boolean;\n                /**\n                 * Hyperparameters for SFT training job. Ensure `enable_sft` is true. If no SFT hyperparameters are provided, default values will be used.\n                 */\n                sft_hyperparameters?: {\n                    batch_size?: ('auto' | number);\n                    learning_rate_multiplier?: number;\n                    num_epochs?: number;\n                };\n                /**\n                 * Hyperparameters for DPO training job. Ensure `enable_preference_tuning` is true. If no preference hyperparameters are provided, default values will be used.\n                 */\n                preference_hyperparameters?: {\n                    variant?: ('DPO' | 'APO Zero');\n                    learning_rate_multiplier?: number;\n                    num_epochs?: number;\n                    training_beta?: number;\n                    adapter_weight?: number;\n                };\n                /**\n                 * DEPRECATED: Use the `sft_hyperparameters` and `preference_hyperparameters` fields instead.\n                 */\n                hyperparameters?: {\n                    is_sft_enabled?: boolean;\n                    batch_size?: ('auto' | number);\n                    learning_rate_multiplier?: number;\n                    num_epochs?: number;\n                    is_preference_tuning_enabled?: boolean;\n                    preference_tuning_variant?: ('DPO' | 'APO Zero');\n                    preference_tuning_learning_rate_multiplier?: number;\n                    preference_tuning_num_epochs?: number;\n                    preference_tuning_training_beta?: number;\n                    preference_tuning_adapter_weight?: number;\n                };\n            } | {\n                provider: 'openai';\n                baseModel: 'gpt-4o-mini-2024-07-18' | 'gpt-4o-2024-08-06' | 'gpt-3.5-turbo-0125';\n                /**\n                 * Whether to enable SFT training. If true, the model will be trained using SFT. Can be used in conjunction with DPO training.\n                 */\n                enable_sft?: boolean;\n                /**\n                 * Whether to enable DPO training. If true, the model will be trained using DPO. Can be used in conjunction with SFT training.\n                 */\n                enable_preference_tuning?: boolean;\n                /**\n                 * Hyperparameters for SFT training job. Ensure `enable_sft` is true. If no SFT hyperparameters are provided, default values will be used.\n                 */\n                sft_hyperparameters?: {\n                    batch_size?: number;\n                    learning_rate_multiplier?: number;\n                    n_epochs?: number;\n                };\n                /**\n                 * Hyperparameters for DPO training job. Ensure `enable_preference_tuning` is true. If no preference hyperparameters are provided, default values will be used.\n                 */\n                preference_hyperparameters?: {\n                    beta?: number;\n                    batch_size?: number;\n                    learning_rate_multiplier?: number;\n                    n_epochs?: number;\n                };\n                /**\n                 * DEPRECATED: Use the `sft_hyperparameters` and `preference_hyperparameters` fields instead.\n                 */\n                hyperparameters?: {\n                    is_sft_enabled?: boolean;\n                    batch_size?: number;\n                    learning_rate_multiplier?: number;\n                    n_epochs?: number;\n                    is_preference_tuning_enabled?: boolean;\n                    preference_tuning_beta?: number;\n                    preference_tuning_batch_size?: number;\n                    preference_tuning_learning_rate_multiplier?: number;\n                    preference_tuning_n_epochs?: number;\n                };\n            } | {\n                provider: 'gemini';\n                baseModel: 'models/gemini-1.0-pro-001' | 'models/gemini-1.5-flash-001-tuning';\n                /**\n                 * Hyperparameters for SFT training job. If no SFT hyperparameters are provided, default values will be used.\n                 */\n                sft_hyperparameters?: {\n                    epochs?: number;\n                    batch_size?: number;\n                    learning_rate?: number;\n                    learning_rate_multiplier?: number;\n                };\n                /**\n                 * DEPRECATED: Use the `sft_hyperparameters` field instead.\n                 */\n                hyperparameters?: {\n                    epochs?: number;\n                    batch_size?: number;\n                    learning_rate?: number;\n                    learning_rate_multiplier?: number;\n                };\n            });\n            defaultTemperature?: number;\n        },\n    ): CancelablePromise<{\n        id: string;\n        name: string;\n        object: 'model';\n        description: string | null;\n        created: string;\n        updated: string;\n        openpipe: {\n            baseModel: string;\n            hyperparameters: Record<string, any> | null;\n            status: 'PENDING' | 'TRAINING' | 'DEPLOYED' | 'ERROR' | 'DEPRECATED' | 'PENDING_DEPRECATION' | 'QUEUED' | 'PROVISIONING';\n            datasetId: string;\n            errorMessage: string | null;\n        };\n        contextWindow: number;\n        maxCompletionTokens: number;\n        capabilities: Array<'chat' | 'tools' | 'json'>;\n        pricing: {\n            /**\n             * $/million tokens\n             */\n            chatIn: number;\n            /**\n             * $/million tokens\n             */\n            chatOut: number;\n        };\n        owned_by: string;\n    }> {\n        return this.httpRequest.request({\n            method: 'POST',\n            url: '/models',\n            body: requestBody,\n            mediaType: 'application/json',\n        });\n    }\n    /**\n     * List all models for a project.\n     * @returns any Successful response\n     * @throws ApiError\n     */\n    public listModels(): CancelablePromise<{\n        object: 'list';\n        data: Array<{\n            id: string;\n            name: string;\n            object: 'model';\n            description: string | null;\n            created: string;\n            updated: string;\n            openpipe: {\n                baseModel: string;\n                hyperparameters: Record<string, any> | null;\n                status: 'PENDING' | 'TRAINING' | 'DEPLOYED' | 'ERROR' | 'DEPRECATED' | 'PENDING_DEPRECATION' | 'QUEUED' | 'PROVISIONING';\n                datasetId: string;\n                errorMessage: string | null;\n            };\n            contextWindow: number;\n            maxCompletionTokens: number;\n            capabilities: Array<'chat' | 'tools' | 'json'>;\n            pricing: {\n                /**\n                 * $/million tokens\n                 */\n                chatIn: number;\n                /**\n                 * $/million tokens\n                 */\n                chatOut: number;\n            };\n            owned_by: string;\n        }>;\n    }> {\n        return this.httpRequest.request({\n            method: 'GET',\n            url: '/models',\n        });\n    }\n    /**\n     * Get a model by ID.\n     * @param modelSlug\n     * @returns any Successful response\n     * @throws ApiError\n     */\n    public getModel(\n        modelSlug: string,\n    ): CancelablePromise<{\n        id: string;\n        name: string;\n        object: 'model';\n        description: string | null;\n        created: string;\n        updated: string;\n        openpipe: {\n            baseModel: string;\n            hyperparameters: Record<string, any> | null;\n            status: 'PENDING' | 'TRAINING' | 'DEPLOYED' | 'ERROR' | 'DEPRECATED' | 'PENDING_DEPRECATION' | 'QUEUED' | 'PROVISIONING';\n            datasetId: string;\n            errorMessage: string | null;\n        };\n        contextWindow: number;\n        maxCompletionTokens: number;\n        capabilities: Array<'chat' | 'tools' | 'json'>;\n        pricing: {\n            /**\n             * $/million tokens\n             */\n            chatIn: number;\n            /**\n             * $/million tokens\n             */\n            chatOut: number;\n        };\n        owned_by: string;\n    }> {\n        return this.httpRequest.request({\n            method: 'GET',\n            url: '/models/{modelSlug}',\n            path: {\n                'modelSlug': modelSlug,\n            },\n        });\n    }\n    /**\n     * Delete an existing model.\n     * @param modelSlug\n     * @returns any Successful response\n     * @throws ApiError\n     */\n    public deleteModel(\n        modelSlug: string,\n    ): CancelablePromise<{\n        id: string;\n        object: 'model';\n        deleted: boolean;\n    }> {\n        return this.httpRequest.request({\n            method: 'DELETE',\n            url: '/models/{modelSlug}',\n            path: {\n                'modelSlug': modelSlug,\n            },\n        });\n    }\n    /**\n     * @deprecated\n     * DEPRECATED: use the `/datasets` endpoint instead\n     * @param requestBody\n     * @returns any Successful response\n     * @throws ApiError\n     */\n    public unstableDatasetCreate(\n        requestBody: {\n            name: string;\n        },\n    ): CancelablePromise<{\n        datasetId: string;\n    }> {\n        return this.httpRequest.request({\n            method: 'POST',\n            url: '/unstable/dataset/create',\n            body: requestBody,\n            mediaType: 'application/json',\n        });\n    }\n    /**\n     * @deprecated\n     * DEPRECATED: use the `/datasets/{dataset}` endpoint instead\n     * @param requestBody\n     * @returns any Successful response\n     * @throws ApiError\n     */\n    public unstableDatasetDelete(\n        requestBody: {\n            datasetId: string;\n        },\n    ): CancelablePromise<{\n        datasetId: string;\n    }> {\n        return this.httpRequest.request({\n            method: 'POST',\n            url: '/unstable/dataset/delete',\n            body: requestBody,\n            mediaType: 'application/json',\n        });\n    }\n    /**\n     * @deprecated\n     * DEPRECATED: use the `/datasets` endpoint instead\n     * @returns any Successful response\n     * @throws ApiError\n     */\n    public unstableDatasetList(): CancelablePromise<Array<{\n        id: string;\n        name: string;\n        createdAt: string;\n        updatedAt: string;\n        datasetEntryCount: number;\n        fineTuneCount: number;\n    }>> {\n        return this.httpRequest.request({\n            method: 'GET',\n            url: '/unstable/dataset/list',\n        });\n    }\n    /**\n     * @deprecated\n     * DEPRECATED: use the `/datasets/{dataset}/entries` endpoint instead\n     * @param requestBody\n     * @returns any Successful response\n     * @throws ApiError\n     */\n    public unstableDatasetEntryCreate(\n        requestBody: {\n            datasetId: string;\n            entries: Array<{\n                messages: Array<({\n                    role: 'system';\n                    content?: (string | Array<{\n                        type: 'text';\n                        text: string;\n                    }>);\n                    name?: string;\n                } | {\n                    role: 'user';\n                    content?: (string | Array<({\n                        type: 'text';\n                        text: string;\n                    } | {\n                        type: 'image_url';\n                        image_url: {\n                            detail?: ('auto' | 'low' | 'high');\n                            url: string;\n                        };\n                    } | {\n                        type: 'input_audio';\n                        input_audio: {\n                            data: string;\n                            format: 'wav' | 'mp3';\n                        };\n                    })>);\n                    name?: string;\n                } | {\n                    role: 'assistant';\n                    audio?: {\n                        id: string;\n                    } | null;\n                    content?: (string | Array<({\n                        type: 'text';\n                        text: string;\n                    } | {\n                        type: 'refusal';\n                        refusal: string;\n                    })> | 'null' | null);\n                    function_call?: {\n                        name?: string;\n                        arguments?: string;\n                    } | null;\n                    tool_calls?: Array<{\n                        id: string;\n                        function: {\n                            name: string;\n                            arguments: string;\n                        };\n                        type: 'function';\n                    }> | null;\n                    name?: string;\n                    refusal?: string | null;\n                } | {\n                    role: 'developer';\n                    content?: (string | Array<{\n                        type: 'text';\n                        text: string;\n                    }>);\n                    name?: string;\n                } | {\n                    role: 'tool';\n                    content?: (string | Array<{\n                        type: 'text';\n                        text: string;\n                    }>);\n                    tool_call_id: string;\n                } | {\n                    role: 'function';\n                    name: string;\n                    content: (string | 'null' | null);\n                })>;\n                rejected_message?: {\n                    reasoning_content?: string | null;\n                    content?: string | null;\n                    refusal?: string | null;\n                    role: 'assistant';\n                    function_call?: {\n                        name?: string;\n                        arguments?: string;\n                    } | null;\n                    tool_calls?: Array<{\n                        id: string;\n                        function: {\n                            name: string;\n                            arguments: string;\n                        };\n                        type: 'function';\n                    }> | null;\n                };\n                function_call?: ('none' | 'auto' | {\n                    name: string;\n                });\n                functions?: Array<{\n                    name: string;\n                    parameters?: Record<string, any>;\n                    description?: string;\n                    strict?: boolean | null;\n                }>;\n                tool_choice?: ('none' | 'auto' | 'required' | {\n                    type?: 'function';\n                    function?: {\n                        name: string;\n                    };\n                });\n                tools?: Array<{\n                    function: {\n                        name: string;\n                        parameters?: Record<string, any>;\n                        description?: string;\n                        strict?: boolean | null;\n                    };\n                    type: 'function';\n                }>;\n                response_format?: ({\n                    type: 'text';\n                } | {\n                    type: 'json_object';\n                } | {\n                    type: 'json_schema';\n                    json_schema: {\n                        name: string;\n                        description?: string;\n                        schema?: Record<string, any>;\n                        strict?: boolean | null;\n                    };\n                });\n                split?: 'TRAIN' | 'TEST';\n                judgement?: 'PASS' | 'FAIL';\n                metadata?: Record<string, string>;\n            }>;\n        },\n    ): CancelablePromise<{\n        createdEntries: number;\n        errors: Array<{\n            index: number;\n            message: string;\n        }>;\n    }> {\n        return this.httpRequest.request({\n            method: 'POST',\n            url: '/unstable/dataset-entry/create',\n            body: requestBody,\n            mediaType: 'application/json',\n        });\n    }\n    /**\n     * @deprecated\n     * DEPRECATED\n     * @param requestBody\n     * @returns any Successful response\n     * @throws ApiError\n     */\n    public unstableFinetuneCreate(\n        requestBody: {\n            datasetId: string;\n            slug: string;\n            /**\n             * The base model to fine-tune from. Supported models include: meta-llama/Meta-Llama-3.1-8B-Instruct, meta-llama/Meta-Llama-3.1-70B-Instruct\n             */\n            baseModel: string;\n            overrides?: {\n                is_sft_enabled?: boolean;\n                batch_size?: ('auto' | number);\n                learning_rate_multiplier?: number;\n                num_epochs?: number;\n                is_preference_tuning_enabled?: boolean;\n                preference_tuning_variant?: ('DPO' | 'APO Zero');\n                preference_tuning_learning_rate_multiplier?: number;\n                preference_tuning_num_epochs?: number;\n                preference_tuning_training_beta?: number;\n                preference_tuning_adapter_weight?: number;\n            };\n        },\n    ): CancelablePromise<{\n        id: string;\n    }> {\n        return this.httpRequest.request({\n            method: 'POST',\n            url: '/unstable/finetune/create',\n            body: requestBody,\n            mediaType: 'application/json',\n        });\n    }\n    /**\n     * @deprecated\n     * DEPRECATED: use the `/models/{model}` endpoint instead\n     * @param id\n     * @param slug\n     * @returns any Successful response\n     * @throws ApiError\n     */\n    public unstableFinetuneGet(\n        id?: string,\n        slug?: string,\n    ): CancelablePromise<{\n        id: string;\n        status: ('PENDING' | 'STARTED' | 'TRANSFERRING_TRAINING_DATA' | 'TRAINING' | 'DEPLOYING' | 'DEPLOYED' | 'ERROR' | 'DEPRECATED' | 'PENDING_DEPRECATION' | 'QUEUED' | 'PROVISIONING');\n        slug: string;\n        baseModel: string;\n        errorMessage: string | null;\n        datasetId: string;\n        createdAt: string;\n    }> {\n        return this.httpRequest.request({\n            method: 'GET',\n            url: '/unstable/finetune/get',\n            query: {\n                'id': id,\n                'slug': slug,\n            },\n        });\n    }\n    /**\n     * @deprecated\n     * DEPRECATED: use the `/models/{model}` endpoint instead\n     * @param requestBody\n     * @returns any Successful response\n     * @throws ApiError\n     */\n    public unstableFinetuneDelete(\n        requestBody: {\n            id?: string;\n            slug?: string;\n        },\n    ): CancelablePromise<{\n        deleted: string;\n    }> {\n        return this.httpRequest.request({\n            method: 'POST',\n            url: '/unstable/finetune/delete',\n            body: requestBody,\n            mediaType: 'application/json',\n        });\n    }\n}\n","/* generated using openapi-typescript-codegen -- do no edit */\n/* istanbul ignore file */\n/* tslint:disable */\n/* eslint-disable */\nimport type { BaseHttpRequest } from './core/BaseHttpRequest';\nimport type { OpenAPIConfig } from './core/OpenAPI';\nimport { NodeHttpRequest } from './core/NodeHttpRequest';\nimport { DefaultService } from './services/DefaultService';\ntype HttpRequestConstructor = new (config: OpenAPIConfig) => BaseHttpRequest;\nexport class OPClient {\n    public readonly default: DefaultService;\n    public readonly request: BaseHttpRequest;\n    constructor(config?: Partial<OpenAPIConfig>, HttpRequest: HttpRequestConstructor = NodeHttpRequest) {\n        this.request = new HttpRequest({\n            BASE: config?.BASE ?? 'https://api.openpipe.ai/api/v1',\n            VERSION: config?.VERSION ?? '0.1.1',\n            WITH_CREDENTIALS: config?.WITH_CREDENTIALS ?? false,\n            CREDENTIALS: config?.CREDENTIALS ?? 'include',\n            TOKEN: config?.TOKEN,\n            USERNAME: config?.USERNAME,\n            PASSWORD: config?.PASSWORD,\n            HEADERS: config?.HEADERS,\n            ENCODE_PATH: config?.ENCODE_PATH,\n        });\n        this.default = new DefaultService(this.request);\n    }\n}\n\n","import * as openai from \"openai\";\nimport { APIConnectionTimeoutError } from \"openai/error\";\nimport { ChatCompletion } from \"openai/resources\";\nimport { inspect } from \"util\";\n\nimport pkg from \"../package.json\";\nimport { DefaultService } from \"./codegen\";\n\nexport type OpenPipeConfig = {\n  apiKey?: string;\n  baseUrl?: string;\n  fallbackClient?: openai.OpenAI;\n};\n\nexport type CacheSetting = \"readWrite\" | \"readOnly\" | \"writeOnly\";\n\nexport type OpenPipeArgs = {\n  openpipe?: {\n    logRequest?: boolean;\n    cache?: CacheSetting;\n    tags?: Record<string, string | number | boolean | null>;\n    fallback?: { model: string; timeout?: number };\n    criteria?: string[];\n  };\n};\n\nexport type OpenPipeMeta = {\n  // We report your call to OpenPipe asynchronously in the background. If you\n  // need to wait until the report is sent to take further action, you can await\n  // this promise.\n  reportingFinished: Promise<void>;\n};\n\nexport type ReportFn = (...args: Parameters<DefaultService[\"report\"]>) => Promise<void>;\n\n// Used by the server to identify and remove the SDK tags during node entry import\nexport enum DefaultSdkTags {\n  SDK = \"$sdk\",\n  SDK_VERSION = \"$sdk.version\",\n}\n\nconst defaultSdkTags: string[] = Object.values(DefaultSdkTags);\n\nexport const getTags = (\n  args: OpenPipeArgs[\"openpipe\"],\n): Record<string, string | number | boolean | null> => ({\n  ...args?.tags,\n  [DefaultSdkTags.SDK]: \"typescript\",\n  [DefaultSdkTags.SDK_VERSION]: pkg.version,\n});\n\nexport const withTimeout = <T>(\n  promise: Promise<T>,\n  timeout: number,\n  onTimedOut?: () => void,\n): Promise<T> => {\n  return new Promise((resolve, reject) => {\n    // Set up the timeout\n    const timeoutId = setTimeout(() => {\n      onTimedOut?.();\n      reject(new APIConnectionTimeoutError({ message: \"Request timed out\" }));\n    }, timeout);\n\n    promise\n      .then((result) => {\n        clearTimeout(timeoutId);\n        resolve(result);\n      })\n      .catch((e) => {\n        clearTimeout(timeoutId);\n        reject(e);\n      });\n  });\n};\n\nexport const inspectObject = (obj: any) => {\n  console.log(inspect(obj, { colors: true, depth: null }));\n};\n\ntype CriteriaResultsType = NonNullable<\n  Awaited<ReturnType<DefaultService[\"createChatCompletion\"]>>\n>[\"choices\"][number][\"criteria_results\"];\n\nexport type OpenPipeChatCompletion = ChatCompletion & {\n  choices: (ChatCompletion[\"choices\"][number] & {\n    criteria_results?: CriteriaResultsType;\n  })[];\n};\n","{\n  \"name\": \"openpipe-dev\",\n  \"version\": \"0.46.0\",\n  \"type\": \"module\",\n  \"description\": \"OpenPipe TypeScript SDK: Fine-Tuning, Inference, and Metrics for Production Apps\",\n  \"scripts\": {\n    \"build\": \"./build.sh\",\n    \"build-update\": \"./build.sh && ./update-app.sh\",\n    \"test\": \"vitest --no-file-parallelism\",\n    \"test:fast\": \"vitest --no-file-parallelism -t '^(?!.*\\\\[slow\\\\]).*$'\"\n  },\n  \"main\": \"./src/index.ts\",\n  \"publishConfig\": {\n    \"name\": \"openpipe\",\n    \"access\": \"public\",\n    \"main\": \"./index.cjs\",\n    \"module\": \"./index.js\",\n    \"types\": \"./index.d.ts\",\n    \"exports\": {\n      \".\": {\n        \"import\": \"./index.js\",\n        \"require\": \"./index.cjs\"\n      },\n      \"./client\": {\n        \"import\": \"./client.js\",\n        \"require\": \"./client.cjs\"\n      },\n      \"./openai\": {\n        \"import\": \"./openai.js\",\n        \"require\": \"./openai.cjs\"\n      },\n      \"./openai/mergeChunks\": {\n        \"import\": \"./openai/mergeChunks.js\",\n        \"require\": \"./openai/mergeChunks.cjs\"\n      }\n    }\n  },\n  \"keywords\": [\n    \"OpenPipe\",\n    \"LLM\",\n    \"Fine-tuning\",\n    \"AI\"\n  ],\n  \"author\": \"\",\n  \"license\": \"Apache-2.0\",\n  \"dependencies\": {\n    \"@anthropic-ai/sdk\": \"^0.36.3\",\n    \"encoding\": \"0.1.13\",\n    \"form-data\": \"4.0.1\",\n    \"node-fetch\": \"2.7.0\",\n    \"openai\": \"^4.81.0\"\n  },\n  \"devDependencies\": {\n    \"@rollup/plugin-json\": \"^6.1.0\",\n    \"@rollup/plugin-node-resolve\": \"^15.3.0\",\n    \"@types/node\": \"^22.7.8\",\n    \"@types/node-fetch\": \"^2.6.11\",\n    \"dotenv\": \"^16.4.5\",\n    \"rollup\": \"^4.24.0\",\n    \"rollup-plugin-typescript2\": \"^0.36.0\",\n    \"tslib\": \"^2.8.0\",\n    \"tsup\": \"^8.3.0\",\n    \"tsx\": \"^4.19.1\",\n    \"typescript\": \"^5.6.3\",\n    \"vitest\": \"^3.0.4\",\n    \"yalc\": \"1.0.0-pre.53\",\n    \"zod\": \"^3.23.8\"\n  }\n}\n","import { readEnv } from \"openai/core\";\n\nimport { OPClient } from \"./codegen\";\nimport { OpenPipeConfig } from \"./shared\";\n\nexport default class OpenPipe {\n  baseClient: OPClient;\n\n  constructor(config: OpenPipeConfig = {}) {\n    const openPipeApiKey = config?.apiKey ?? readEnv(\"OPENPIPE_API_KEY\");\n    const openpipeBaseUrl = config?.baseUrl ?? readEnv(\"OPENPIPE_BASE_URL\");\n\n    this.baseClient = new OPClient({\n      BASE: openpipeBaseUrl,\n      TOKEN: openPipeApiKey,\n    });\n  }\n\n  updateLogTags(...params: Parameters<OPClient[\"default\"][\"updateLogTags\"]>) {\n    return this.baseClient.default.updateLogTags(...params);\n  }\n\n  updateLogMetadata(...params: Parameters<OPClient[\"default\"][\"updateLogMetadata\"]>) {\n    return this.baseClient.default.updateLogMetadata(...params);\n  }\n\n  report(...params: Parameters<OPClient[\"default\"][\"report\"]>) {\n    return this.baseClient.default.report(...params);\n  }\n\n  getCriterionJudgement(...params: Parameters<OPClient[\"default\"][\"getCriterionJudgement\"]>) {\n    return this.baseClient.default.getCriterionJudgement(...params);\n  }\n\n  reportAnthropic(...params: Parameters<OPClient[\"default\"][\"reportAnthropic\"]>) {\n    return this.baseClient.default.reportAnthropic(...params);\n  }\n\n  createDataset(...params: Parameters<OPClient[\"default\"][\"createDataset\"]>) {\n    return this.baseClient.default.createDataset(...params);\n  }\n  unstableDatasetCreate(...params: Parameters<OPClient[\"default\"][\"unstableDatasetCreate\"]>) {\n    return this.baseClient.default.unstableDatasetCreate(...params);\n  }\n\n  listDatasets(...params: Parameters<OPClient[\"default\"][\"listDatasets\"]>) {\n    return this.baseClient.default.listDatasets(...params);\n  }\n\n  deleteDataset(...params: Parameters<OPClient[\"default\"][\"deleteDataset\"]>) {\n    return this.baseClient.default.deleteDataset(...params);\n  }\n  unstableDatasetDelete(...params: Parameters<OPClient[\"default\"][\"unstableDatasetDelete\"]>) {\n    return this.baseClient.default.unstableDatasetDelete(...params);\n  }\n\n  createDatasetEntries(...params: Parameters<OPClient[\"default\"][\"createDatasetEntries\"]>) {\n    return this.baseClient.default.createDatasetEntries(...params);\n  }\n  unstableDatasetEntryCreate(\n    ...params: Parameters<OPClient[\"default\"][\"unstableDatasetEntryCreate\"]>\n  ) {\n    return this.baseClient.default.unstableDatasetEntryCreate(...params);\n  }\n\n  createModel(...params: Parameters<OPClient[\"default\"][\"createModel\"]>) {\n    return this.baseClient.default.createModel(...params);\n  }\n  unstableFinetuneCreate(...params: Parameters<OPClient[\"default\"][\"unstableFinetuneCreate\"]>) {\n    return this.baseClient.default.unstableFinetuneCreate(...params);\n  }\n\n  getModel(...params: Parameters<OPClient[\"default\"][\"getModel\"]>) {\n    return this.baseClient.default.getModel(...params);\n  }\n  unstableFinetuneGet(...params: Parameters<OPClient[\"default\"][\"unstableFinetuneGet\"]>) {\n    return this.baseClient.default.unstableFinetuneGet(...params);\n  }\n\n  listModels(...params: Parameters<OPClient[\"default\"][\"listModels\"]>) {\n    return this.baseClient.default.listModels(...params);\n  }\n\n  deleteModel(...params: Parameters<OPClient[\"default\"][\"deleteModel\"]>) {\n    return this.baseClient.default.deleteModel(...params);\n  }\n  unstableFinetuneDelete(...params: Parameters<OPClient[\"default\"][\"unstableFinetuneDelete\"]>) {\n    return this.baseClient.default.unstableFinetuneDelete(...params);\n  }\n}\n","import * as openai from \"openai\";\nimport * as Core from \"openai/core\";\nimport { Beta } from \"openai/resources/beta/beta\";\n\nimport { OpenPipeMeta } from \"./shared\";\nimport {\n  ChatCompletionParseParams,\n  Completions,\n  ParsedChatCompletion,\n} from \"openai/resources/beta/chat/completions\";\nimport {\n  ExtractParsedContentFromParams,\n  parseChatCompletion,\n  validateInputTools,\n} from \"openai/lib/parser\";\nimport { Chat } from \"openai/resources/beta/chat/chat\";\nimport { ContentFilterFinishReasonError, LengthFinishReasonError } from \"openai/error\";\n\nexport class WrappedBeta extends Beta {\n  constructor(client: openai.OpenAI) {\n    super(client);\n    this.chat = new WrappedBetaChat(client);\n  }\n\n  chat: WrappedBetaChat;\n}\n\nexport class WrappedBetaChat extends Chat {\n  constructor(client: openai.OpenAI) {\n    super(client);\n    this.completions = new WrappedBetaCompletions(client);\n  }\n\n  completions: WrappedBetaCompletions;\n}\n\nexport class WrappedBetaCompletions extends Completions {\n  constructor(client: openai.OpenAI) {\n    super(client);\n  }\n  parse<Params extends ChatCompletionParseParams, ParsedT = ExtractParsedContentFromParams<Params>>(\n    body: Params,\n    options?: Core.RequestOptions,\n  ): Core.APIPromise<ParsedChatCompletion<ParsedT> & { openpipe?: OpenPipeMeta }> {\n    validateInputTools(body.tools);\n    const errorMessage = `OpenPipe cannot guarantee json schema for ${body.model}. Use the \"chat.completions.create()\" API instead.`;\n\n    return this._client.chat.completions\n      .create(body, {\n        ...options,\n        headers: {\n          ...options?.headers,\n          \"X-Stainless-Helper-Method\": \"beta.chat.completions.parse\",\n        },\n      })\n      .then((response) => {\n        // We can only guarantee json schema for OpenAI models. But we do not know if we are calling an OpenAI ft model, and any other model.\n        // Therefore, we either disable this feature for all openpipe models, including OpenAI models, or we throw errors during the runtime.\n        if (body.model.startsWith(\"anthropic:\") || body.model.startsWith(\"gemini:\")) {\n          throw new Error(errorMessage);\n        }\n        for (const choice of response.choices) {\n          // If the model stops generating tokens due to length or content filter, we throw the same errors as parseChatCompletion\n          if (choice.finish_reason === \"length\") {\n            throw new LengthFinishReasonError();\n          }\n          if (choice.finish_reason === \"content_filter\") {\n            throw new ContentFilterFinishReasonError();\n          }\n\n          if (choice.message.content) {\n            try {\n              JSON.parse(choice.message.content);\n            } catch (e) {\n              throw new Error(errorMessage);\n            }\n          }\n        }\n        try {\n          return parseChatCompletion(response, body);\n        } catch (e) {\n          throw new Error(errorMessage);\n        }\n      }) as Core.APIPromise<ParsedChatCompletion<ParsedT> & { openpipe?: OpenPipeMeta }>;\n  }\n}\n"],"mappings":"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","names":["OpenAI","import_core","resolve","request","resolve","FormData","headers","request","fetch","resolve","DefaultSdkTags","import_error","OpenAI","response"]}