{"version":3,"sources":["../src/instructor.ts","../src/lib/index.ts","../src/constants/providers.ts","../src/index.ts"],"names":["OpenAI","Stream","ZodError","ZodStream","OAIResponseParser","OAIStream","withResponseModel","fromZodError","omit","keys","obj","result","key","iterableTee","iterable","n","buffers","resolvers","iterator","done","reader","index","resolve","item","buffer","_","i","thinkingJsonParser","ZMODE","MODE","MODE_TO_RESPONSE_PARSER","PROVIDERS","PROVIDER_SUPPORTED_MODES","NON_OAI_PROVIDER_URLS","PROVIDER_PARAMS_TRANSFORMERS","params","tool","PROVIDER_SUPPORTED_MODES_BY_MODEL","MAX_RETRIES_DEFAULT","Instructor","client","mode","debug","logger","retryAllErrors","requestOptions","isGenericClient","provider","isModeSupported","level","args","timestamp","max_retries","response_model","attempts","validationIssues","lastMessage","paramsTransformer","completionParams","makeCompletionCall","resolvedParams","completion","error","parsedCompletion","responseJson","makeCompletionCallWithRetries","data","validation","streamClient","checkForUsage","chunk","streamUsage","structuredStream","completion1","completion2","createInstructor","instructor","target","prop","receiver","src_default"],"mappings":"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","sourcesContent":["import {\n  ChatCompletionCreateParamsWithModel,\n  ClientTypeChatCompletionRequestOptions,\n  GenericChatCompletion,\n  GenericClient,\n  InstructorConfig,\n  LogLevel,\n  OpenAILikeClient,\n  ReturnTypeBasedOnParams\n} from \"@/types\"\nimport OpenAI from \"openai\"\nimport { Stream } from \"openai/streaming\"\nimport { z, ZodError } from \"zod\"\nimport ZodStream, { OAIResponseParser, OAIStream, withResponseModel } from \"zod-stream\"\nimport { fromZodError } from \"zod-validation-error\"\n\nimport {\n  MODE_TO_RESPONSE_PARSER,\n  NON_OAI_PROVIDER_URLS,\n  Provider,\n  PROVIDER_PARAMS_TRANSFORMERS,\n  PROVIDER_SUPPORTED_MODES,\n  PROVIDERS\n} from \"./constants/providers\"\nimport { iterableTee } from \"./lib\"\nimport { ClientTypeChatCompletionParams, CompletionMeta, Mode } from \"./types\"\n\nconst MAX_RETRIES_DEFAULT = 0\n\nclass Instructor<C> {\n  readonly client: OpenAILikeClient<C>\n  readonly mode: Mode\n  readonly provider: Provider\n  readonly debug: boolean = false\n  readonly retryAllErrors: boolean = false\n  readonly logger?: <T extends unknown[]>(level: LogLevel, ...args: T) => void\n\n  /**\n   * Creates an instance of the `Instructor` class.\n   * @param {OpenAILikeClient} client - An OpenAI-like client.\n   * @param {string} mode - The mode of operation.\n   */\n  constructor({\n    client,\n    mode,\n    debug = false,\n    logger = undefined,\n    retryAllErrors = false\n  }: InstructorConfig<C>) {\n    if (!isGenericClient(client) && !(client instanceof OpenAI)) {\n      throw new Error(\"Client does not match the required structure\")\n    }\n\n    if (client instanceof OpenAI) {\n      this.client = client as OpenAI\n    } else {\n      this.client = client as C & GenericClient\n    }\n\n    // this.client = client\n    this.mode = mode\n    this.debug = debug\n    this.retryAllErrors = retryAllErrors\n    this.logger = logger ?? undefined\n\n    const provider =\n      typeof this.client?.baseURL === \"string\" ?\n        this.client?.baseURL.includes(NON_OAI_PROVIDER_URLS.ANYSCALE) ? PROVIDERS.ANYSCALE\n        : this.client?.baseURL.includes(NON_OAI_PROVIDER_URLS.TOGETHER) ? PROVIDERS.TOGETHER\n        : this.client?.baseURL.includes(NON_OAI_PROVIDER_URLS.OAI) ? PROVIDERS.OAI\n        : this.client?.baseURL.includes(NON_OAI_PROVIDER_URLS.ANTHROPIC) ? PROVIDERS.ANTHROPIC\n        : this.client?.baseURL.includes(NON_OAI_PROVIDER_URLS.GROQ) ? PROVIDERS.GROQ\n        : PROVIDERS.OTHER\n      : PROVIDERS.OTHER\n\n    this.provider = provider\n\n    this.validateOptions()\n  }\n\n  private validateOptions() {\n    const isModeSupported = PROVIDER_SUPPORTED_MODES[this.provider].includes(this.mode)\n\n    if (this.provider === PROVIDERS.OTHER) {\n      this.log(\"debug\", \"Unknown provider - cant validate options.\")\n    }\n\n    if (!isModeSupported) {\n      this.log(\"warn\", `Mode ${this.mode} may not be supported by provider ${this.provider}`)\n    }\n  }\n\n  private log<T extends unknown[]>(level: LogLevel, ...args: T) {\n    if (this.logger) {\n      this.logger(level, ...args)\n    }\n\n    if (!this.debug && level === \"debug\") {\n      return\n    }\n\n    const timestamp = new Date().toISOString()\n    switch (level) {\n      case \"debug\":\n        console.debug(`[Instructor:DEBUG] ${timestamp}:`, ...args)\n        break\n      case \"info\":\n        console.info(`[Instructor:INFO] ${timestamp}:`, ...args)\n        break\n      case \"warn\":\n        console.warn(`[Instructor:WARN] ${timestamp}:`, ...args)\n        break\n      case \"error\":\n        console.error(`[Instructor:ERROR] ${timestamp}:`, ...args)\n        break\n    }\n  }\n\n  private async chatCompletionStandard<T extends z.AnyZodObject>(\n    {\n      max_retries = MAX_RETRIES_DEFAULT,\n      response_model,\n      ...params\n    }: ChatCompletionCreateParamsWithModel<T>,\n    requestOptions?: ClientTypeChatCompletionRequestOptions<C>\n  ): Promise<z.infer<T>> {\n    let attempts = 0\n    let validationIssues = \"\"\n    let lastMessage: OpenAI.ChatCompletionMessageParam | null = null\n\n    const paramsTransformer = PROVIDER_PARAMS_TRANSFORMERS?.[this.provider]?.[this.mode]\n\n    let completionParams = withResponseModel({\n      params: {\n        ...params,\n        stream: params.stream ?? false\n      } as OpenAI.ChatCompletionCreateParams,\n      mode: this.mode,\n      response_model\n    })\n\n    if (!!paramsTransformer) {\n      completionParams = paramsTransformer(completionParams)\n    }\n\n    const makeCompletionCall = async () => {\n      let resolvedParams = completionParams\n\n      if (validationIssues?.length > 0) {\n        resolvedParams = {\n          ...completionParams,\n          messages: [\n            ...completionParams.messages,\n            ...(lastMessage ? [lastMessage] : []),\n            {\n              role: \"user\",\n              content: `Please correct the function call; errors encountered:\\n ${validationIssues}`\n            }\n          ]\n        }\n      }\n\n      let completion\n\n      try {\n        if (this.client.chat?.completions?.create) {\n          const result = await this.client.chat.completions.create(\n            {\n              ...resolvedParams,\n              stream: false\n            },\n            requestOptions\n          )\n\n          completion = result as GenericChatCompletion<typeof result>\n        } else {\n          throw new Error(\"Unsupported client type -- no completion method found.\")\n        }\n        this.log(\"debug\", \"raw standard completion response: \", completion)\n      } catch (error) {\n        this.log(\n          \"error\",\n          `Error making completion call - mode: ${this.mode} | Client base URL: ${this.client.baseURL} | with params:`,\n          resolvedParams,\n          `raw error`,\n          error\n        )\n\n        throw error\n      }\n\n      const responseParser = MODE_TO_RESPONSE_PARSER?.[this.mode] ?? OAIResponseParser\n      const parsedCompletion = responseParser(completion as OpenAI.Chat.Completions.ChatCompletion)\n\n      try {\n        const responseJson = parsedCompletion.json ?? parsedCompletion\n        const data = JSON.parse(responseJson) as z.infer<T> & {\n          _meta?: CompletionMeta\n          thinking?: string\n        }\n        return {\n          ...data,\n          _meta: {\n            usage: completion?.usage ?? undefined,\n            thinking: parsedCompletion?.thinking ?? undefined\n          }\n        }\n      } catch (error) {\n        this.log(\n          \"error\",\n          \"failed to parse completion\",\n          parsedCompletion,\n          this.mode,\n          \"attempt: \",\n          attempts,\n          \"max attempts: \",\n          max_retries\n        )\n\n        throw error\n      }\n    }\n\n    const makeCompletionCallWithRetries = async () => {\n      try {\n        const data = await makeCompletionCall()\n\n        const validation = await response_model.schema.safeParseAsync(data)\n        this.log(\"debug\", response_model.name, \"Completion validation: \", validation)\n\n        if (!validation.success) {\n          if (\"error\" in validation) {\n            lastMessage = {\n              role: \"assistant\",\n              content: JSON.stringify(data)\n            }\n\n            validationIssues = fromZodError(validation.error)?.message\n\n            throw validation.error\n          } else {\n            throw new Error(\"Validation failed.\")\n          }\n        }\n\n        return { ...validation.data, _meta: data?._meta ?? {} }\n      } catch (error) {\n        if (!this.retryAllErrors && !(error instanceof ZodError)) {\n          throw error\n        }\n\n        if (attempts < max_retries) {\n          this.log(\n            \"debug\",\n            `response model: ${response_model.name} - Retrying, attempt: `,\n            attempts\n          )\n\n          this.log(\n            \"warn\",\n            `response model: ${response_model.name} - Validation issues: `,\n            validationIssues,\n            \" - Attempt: \",\n            attempts,\n            \" - Max attempts: \",\n            max_retries\n          )\n\n          attempts++\n          return await makeCompletionCallWithRetries()\n        } else {\n          this.log(\n            \"debug\",\n            `response model: ${response_model.name} - Max attempts reached: ${attempts}`\n          )\n\n          this.log(\n            \"error\",\n            `response model: ${response_model.name} - Validation issues: `,\n            validationIssues\n          )\n\n          throw error\n        }\n      }\n    }\n\n    return makeCompletionCallWithRetries()\n  }\n\n  private async *chatCompletionStream<T extends z.AnyZodObject>(\n    { max_retries, response_model, ...params }: ChatCompletionCreateParamsWithModel<T>,\n    requestOptions?: ClientTypeChatCompletionRequestOptions<C>\n  ): AsyncGenerator<Partial<T> & { _meta?: CompletionMeta }, void, unknown> {\n    if (max_retries) {\n      this.log(\"warn\", \"max_retries is not supported for streaming completions\")\n    }\n\n    const paramsTransformer = PROVIDER_PARAMS_TRANSFORMERS?.[this.provider]?.[this.mode]\n\n    let completionParams = withResponseModel({\n      params: {\n        ...params,\n        stream: true\n      } as OpenAI.ChatCompletionCreateParams,\n      response_model,\n      mode: this.mode\n    })\n\n    if (paramsTransformer) {\n      completionParams = paramsTransformer(completionParams)\n    }\n\n    const streamClient = new ZodStream({\n      debug: this.debug ?? false\n    })\n\n    async function checkForUsage(\n      reader: Stream<OpenAI.ChatCompletionChunk> | AsyncIterable<OpenAI.ChatCompletionChunk>\n    ) {\n      for await (const chunk of reader) {\n        if (\"usage\" in chunk) {\n          streamUsage = chunk.usage as CompletionMeta[\"usage\"]\n        }\n      }\n    }\n\n    let streamUsage: CompletionMeta[\"usage\"] | undefined\n    const structuredStream = await streamClient.create({\n      completionPromise: async () => {\n        if (this.client.chat?.completions?.create) {\n          const completion = await this.client.chat.completions.create(\n            {\n              ...completionParams,\n              stream: true\n            },\n            requestOptions\n          )\n\n          this.log(\"debug\", \"raw stream completion response: \", completion)\n\n          if (\n            this.provider === \"OAI\" &&\n            completionParams?.stream &&\n            \"stream_options\" in completionParams &&\n            completion instanceof Stream\n          ) {\n            const [completion1, completion2] = completion.tee()\n\n            checkForUsage(completion1)\n\n            return OAIStream({\n              res: completion2\n            })\n          }\n\n          //check if async iterator\n          if (\n            this.provider !== \"OAI\" &&\n            completionParams?.stream &&\n            completion?.[Symbol.asyncIterator]\n          ) {\n            const [completion1, completion2] = await iterableTee(\n              completion as AsyncIterable<OpenAI.ChatCompletionChunk>,\n              2\n            )\n\n            checkForUsage(completion1)\n\n            return OAIStream({\n              res: completion2\n            })\n          }\n\n          return OAIStream({\n            res: completion as unknown as AsyncIterable<OpenAI.ChatCompletionChunk>\n          })\n        } else {\n          throw new Error(\"Unsupported client type\")\n        }\n      },\n      response_model\n    })\n\n    for await (const chunk of structuredStream) {\n      yield {\n        ...chunk,\n        _meta: {\n          usage: streamUsage ?? undefined,\n          ...(chunk?._meta ?? {})\n        }\n      }\n    }\n  }\n\n  private isChatCompletionCreateParamsWithModel<T extends z.AnyZodObject>(\n    params: ChatCompletionCreateParamsWithModel<T>\n  ): params is ChatCompletionCreateParamsWithModel<T> {\n    return \"response_model\" in params\n  }\n\n  private isStandardStream(\n    params: OpenAI.ChatCompletionCreateParams\n  ): params is OpenAI.ChatCompletionCreateParams {\n    return \"stream\" in params && params.stream === true\n  }\n\n  public chat = {\n    completions: {\n      create: async <\n        T extends z.AnyZodObject,\n        P extends T extends z.AnyZodObject ? ChatCompletionCreateParamsWithModel<T>\n        : ClientTypeChatCompletionParams<OpenAILikeClient<C>> & { response_model: never }\n      >(\n        params: P,\n        requestOptions?: ClientTypeChatCompletionRequestOptions<C>\n      ): Promise<ReturnTypeBasedOnParams<typeof this.client, P>> => {\n        if (this.isChatCompletionCreateParamsWithModel(params)) {\n          if (params.stream) {\n            return this.chatCompletionStream(params, requestOptions) as ReturnTypeBasedOnParams<\n              typeof this.client,\n              P & { stream: true }\n            >\n          } else {\n            return this.chatCompletionStandard(params, requestOptions) as ReturnTypeBasedOnParams<\n              typeof this.client,\n              P\n            >\n          }\n        } else {\n          if (this.client.chat?.completions?.create) {\n            const result =\n              this.isStandardStream(params) ?\n                await this.client.chat.completions.create(params, requestOptions)\n              : await this.client.chat.completions.create(params, requestOptions)\n\n            return result as unknown as ReturnTypeBasedOnParams<OpenAILikeClient<C>, P>\n          } else {\n            throw new Error(\"Completion method is undefined\")\n          }\n        }\n      }\n    }\n  }\n}\n\nexport type InstructorClient<C> = Instructor<C> & OpenAILikeClient<C>\n\n/**\n * Creates an instance of the `Instructor` class.\n * @param {OpenAILikeClient} client - The OpenAI client.\n * @param {string} mode - The mode of operation.\n * @param {boolean} debug - Whether to log debug messages.\n * @returns {InstructorClient} The extended OpenAI client.\n *\n * @example\n * import createInstructor from \"@instructor-ai/instructor\"\n * import OpenAI from \"openai\n *\n * const OAI = new OpenAi({})\n *\n * const client = createInstructor({\n *  client: OAI,\n *  mode: \"TOOLS\",\n * })\n *\n * @param args\n * @returns\n */\nexport default function createInstructor<C>(args: InstructorConfig<C>): InstructorClient<C> {\n  const instructor = new Instructor<C>(args)\n  const instructorWithProxy = new Proxy(instructor, {\n    get: (target, prop, receiver) => {\n      if (prop in target) {\n        return Reflect.get(target, prop, receiver)\n      }\n\n      return Reflect.get(target.client, prop, receiver)\n    }\n  })\n\n  return instructorWithProxy as InstructorClient<C>\n}\n//eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction isGenericClient(client: any): client is GenericClient {\n  return (\n    typeof client === \"object\" &&\n    client !== null &&\n    \"chat\" in client &&\n    typeof client.chat === \"object\" &&\n    \"completions\" in client.chat &&\n    typeof client.chat.completions === \"object\" &&\n    \"create\" in client.chat.completions &&\n    typeof client.chat.completions.create === \"function\"\n  )\n}\n","export function omit<T extends object, K extends keyof T>(keys: K[], obj: T): Omit<T, K> {\n  const result = {} as Omit<T, K>\n  for (const key in obj) {\n    if (obj.hasOwnProperty(key) && !keys.includes(key as unknown as K)) {\n      result[key as unknown as Exclude<keyof T, K>] = obj[key] as unknown as T[Exclude<keyof T, K>]\n    }\n  }\n  return result\n}\n\nexport async function iterableTee<T>(\n  iterable: AsyncIterable<T>,\n  n: number\n): Promise<AsyncGenerator<T>[]> {\n  const buffers: T[][] = Array.from({ length: n }, () => [])\n  const resolvers: (() => void)[] = []\n  const iterator = iterable[Symbol.asyncIterator]()\n  let done = false\n\n  async function* reader(index: number) {\n    while (true) {\n      if (buffers[index].length > 0) {\n        yield buffers[index].shift()!\n      } else if (done) {\n        break\n      } else {\n        await new Promise<void>(resolve => resolvers.push(resolve))\n      }\n    }\n  }\n\n  ;(async () => {\n    for await (const item of {\n      [Symbol.asyncIterator]: () => iterator\n    }) {\n      for (const buffer of buffers) {\n        buffer.push(item)\n      }\n\n      while (resolvers.length > 0) {\n        resolvers.shift()!()\n      }\n    }\n    done = true\n    while (resolvers.length > 0) {\n      resolvers.shift()!()\n    }\n  })()\n\n  return Array.from({ length: n }, (_, i) => reader(i))\n}\n","import { omit } from \"@/lib\"\nimport OpenAI from \"openai\"\nimport { z } from \"zod\"\nimport { thinkingJsonParser, withResponseModel, MODE as ZMODE } from \"zod-stream\"\n\nimport { Mode } from \"../types\"\n\nexport const MODE: typeof ZMODE = ZMODE\n\nexport const MODE_TO_RESPONSE_PARSER = {\n  [MODE.THINKING_MD_JSON]: thinkingJsonParser\n}\n\nexport const PROVIDERS = {\n  OAI: \"OAI\",\n  ANYSCALE: \"ANYSCALE\",\n  TOGETHER: \"TOGETHER\",\n  ANTHROPIC: \"ANTHROPIC\",\n  GROQ: \"GROQ\",\n  OTHER: \"OTHER\"\n} as const\n\nexport type Provider = keyof typeof PROVIDERS\n\nexport const PROVIDER_SUPPORTED_MODES: {\n  [key in Provider]: Mode[]\n} = {\n  [PROVIDERS.OTHER]: [MODE.FUNCTIONS, MODE.TOOLS, MODE.JSON, MODE.JSON_SCHEMA, MODE.MD_JSON],\n  [PROVIDERS.OAI]: [MODE.FUNCTIONS, MODE.TOOLS, MODE.JSON, MODE.MD_JSON],\n  [PROVIDERS.ANYSCALE]: [MODE.TOOLS, MODE.JSON, MODE.JSON_SCHEMA, MODE.MD_JSON],\n  [PROVIDERS.TOGETHER]: [MODE.TOOLS, MODE.JSON, MODE.JSON_SCHEMA, MODE.MD_JSON],\n  [PROVIDERS.ANTHROPIC]: [MODE.MD_JSON, MODE.TOOLS],\n  [PROVIDERS.GROQ]: [MODE.TOOLS, MODE.FUNCTIONS, MODE.MD_JSON]\n} as const\n\nexport const NON_OAI_PROVIDER_URLS = {\n  [PROVIDERS.ANYSCALE]: \"api.endpoints.anyscale\",\n  [PROVIDERS.TOGETHER]: \"api.together.xyz\",\n  [PROVIDERS.OAI]: \"api.openai.com\",\n  [PROVIDERS.ANTHROPIC]: \"api.anthropic.com\",\n  [PROVIDERS.GROQ]: \"api.groq.com\"\n} as const\n\nexport const PROVIDER_PARAMS_TRANSFORMERS = {\n  [PROVIDERS.GROQ]: {\n    [MODE.TOOLS]: function groqToolsParamsTransformer<\n      T extends z.AnyZodObject,\n      P extends OpenAI.ChatCompletionCreateParams\n    >(params: ReturnType<typeof withResponseModel<T, \"TOOLS\", P>>) {\n      if (params.tools.some(tool => tool) && params.stream) {\n        console.warn(\"Streaming may not be supported when using tools in Groq, try MD_JSON instead\")\n        return params\n      }\n\n      return params\n    }\n  },\n  [PROVIDERS.ANYSCALE]: {\n    [MODE.JSON_SCHEMA]: function removeAdditionalPropertiesKeyJSONSchema<\n      T extends z.AnyZodObject,\n      P extends OpenAI.ChatCompletionCreateParams\n    >(params: ReturnType<typeof withResponseModel<T, \"JSON_SCHEMA\", P>>) {\n      if (\"additionalProperties\" in params.response_format.schema) {\n        return {\n          ...params,\n          response_format: {\n            ...params.response_format,\n            schema: omit([\"additionalProperties\"], params.response_format.schema)\n          }\n        }\n      }\n\n      return params\n    },\n    [MODE.TOOLS]: function removeAdditionalPropertiesKeyTools<\n      T extends z.AnyZodObject,\n      P extends OpenAI.ChatCompletionCreateParams\n    >(params: ReturnType<typeof withResponseModel<T, \"TOOLS\", P>>) {\n      if (params.tools.some(tool => tool.function?.parameters)) {\n        return {\n          ...params,\n          tools: params.tools.map(tool => {\n            if (tool.function?.parameters) {\n              return {\n                ...tool,\n                function: {\n                  ...tool.function,\n                  parameters: omit([\"additionalProperties\"], tool.function.parameters)\n                }\n              }\n            }\n\n            return tool\n          })\n        }\n      }\n\n      return params\n    }\n  }\n} as const\n\nexport const PROVIDER_SUPPORTED_MODES_BY_MODEL = {\n  [PROVIDERS.OTHER]: {\n    [MODE.FUNCTIONS]: [\"*\"],\n    [MODE.TOOLS]: [\"*\"],\n    [MODE.JSON]: [\"*\"],\n    [MODE.MD_JSON]: [\"*\"],\n    [MODE.JSON_SCHEMA]: [\"*\"],\n    [MODE.THINKING_MD_JSON]: [\"*\"]\n  },\n  [PROVIDERS.OAI]: {\n    [MODE.FUNCTIONS]: [\"*\"],\n    [MODE.TOOLS]: [\"*\"],\n    [MODE.JSON]: [\"*\"],\n    [MODE.MD_JSON]: [\"*\"]\n  },\n  [PROVIDERS.TOGETHER]: {\n    [MODE.MD_JSON]: [\"*\"]\n    // [MODE.JSON_SCHEMA]: [\"*\"]\n    // [MODE.TOOLS]: [\"*\"]\n  },\n  [PROVIDERS.ANYSCALE]: {\n    [MODE.MD_JSON]: [\"*\"]\n    // [MODE.JSON_SCHEMA]: [\"*\"]\n    // [MODE.TOOLS]: [\"*\"]\n  },\n  [PROVIDERS.ANTHROPIC]: {\n    [MODE.MD_JSON]: [\"*\"],\n    [MODE.TOOLS]: [\"*\"]\n  },\n  [PROVIDERS.GROQ]: {\n    [MODE.TOOLS]: [\"*\"],\n    [MODE.MD_JSON]: [\"*\"],\n    [MODE.THINKING_MD_JSON]: [\"deepseek-r1-distill-llama-70b\"]\n  }\n}\n","import Instructor, { InstructorClient } from \"./instructor\"\n\nexport { type InstructorClient }\nexport * from \"./types\"\n\nexport default Instructor\n"]}