{"version":3,"file":"portkey.cjs","names":["env: string","default_val?: string","options: PortkeyOptions","_Portkey","defaultPortkeySession: {\n  session: PortkeySession;\n  options: PortkeyOptions;\n}[]","session","_","BaseLLM","init?: Partial<Portkey>","prompts: string[]","options: this[\"ParsedCallOptions\"]","_?: CallbackManagerForLLMRun","input: string","runManager?: CallbackManagerForLLMRun","GenerationChunk"],"sources":["../../src/llms/portkey.ts"],"sourcesContent":["import _ from \"lodash\";\nimport { LLMOptions, Portkey as _Portkey } from \"portkey-ai\";\nimport { CallbackManagerForLLMRun } from \"@langchain/core/callbacks/manager\";\nimport { GenerationChunk, LLMResult } from \"@langchain/core/outputs\";\nimport { getEnvironmentVariable } from \"@langchain/core/utils/env\";\nimport { BaseLLM } from \"@langchain/core/language_models/llms\";\n\ninterface PortkeyOptions {\n  apiKey?: string;\n  baseURL?: string;\n  mode?: string;\n  llms?: [LLMOptions] | null;\n}\n\nconst readEnv = (env: string, default_val?: string): string | undefined =>\n  getEnvironmentVariable(env) ?? default_val;\n\nexport class PortkeySession {\n  portkey: _Portkey;\n\n  constructor(options: PortkeyOptions = {}) {\n    if (!options.apiKey) {\n      options.apiKey = readEnv(\"PORTKEY_API_KEY\");\n    }\n\n    if (!options.baseURL) {\n      options.baseURL = readEnv(\"PORTKEY_BASE_URL\", \"https://api.portkey.ai\");\n    }\n\n    this.portkey = new _Portkey({});\n    this.portkey.llms = [{}];\n    if (!options.apiKey) {\n      throw new Error(\"Set Portkey ApiKey in PORTKEY_API_KEY env variable\");\n    }\n\n    this.portkey = new _Portkey(options);\n  }\n}\n\nconst defaultPortkeySession: {\n  session: PortkeySession;\n  options: PortkeyOptions;\n}[] = [];\n\n/**\n * Get a session for the Portkey API. If one already exists with the same options,\n * it will be returned. Otherwise, a new session will be created.\n * @param options\n * @returns\n */\nexport function getPortkeySession(options: PortkeyOptions = {}) {\n  let session = defaultPortkeySession.find((session) =>\n    _.isEqual(session.options, options)\n  )?.session;\n\n  if (!session) {\n    session = new PortkeySession(options);\n    defaultPortkeySession.push({ session, options });\n  }\n  return session;\n}\n\n/**\n * @example\n * ```typescript\n * const model = new Portkey({\n *   mode: \"single\",\n *   llms: [\n *     {\n *       provider: \"openai\",\n *       virtual_key: \"open-ai-key-1234\",\n *       model: \"gpt-3.5-turbo-instruct\",\n *       max_tokens: 2000,\n *     },\n *   ],\n * });\n *\n * // Stream the output of the model and process it\n * const res = await model.stream(\n *   \"Question: Write a story about a king\\nAnswer:\"\n * );\n * for await (const i of res) {\n *   process.stdout.write(i);\n * }\n * ```\n */\nexport class Portkey extends BaseLLM {\n  apiKey?: string = undefined;\n\n  baseURL?: string = undefined;\n\n  mode?: string = undefined;\n\n  llms?: [LLMOptions] | null = undefined;\n\n  session: PortkeySession;\n\n  constructor(init?: Partial<Portkey>) {\n    super(init ?? {});\n    this.apiKey = init?.apiKey;\n\n    this.baseURL = init?.baseURL;\n\n    this.mode = init?.mode;\n\n    this.llms = init?.llms;\n\n    this.session = getPortkeySession({\n      apiKey: this.apiKey,\n      baseURL: this.baseURL,\n      llms: this.llms,\n      mode: this.mode,\n    });\n  }\n\n  _llmType() {\n    return \"portkey\";\n  }\n\n  async _generate(\n    prompts: string[],\n    options: this[\"ParsedCallOptions\"],\n    _?: CallbackManagerForLLMRun\n  ): Promise<LLMResult> {\n    const choices = [];\n    for (let i = 0; i < prompts.length; i += 1) {\n      const response = await this.session.portkey.completions.create({\n        prompt: prompts[i],\n        ...options,\n        stream: false,\n      });\n      choices.push(response.choices);\n    }\n    const generations = choices.map((promptChoices) =>\n      promptChoices.map((choice) => ({\n        text: choice.text ?? \"\",\n        generationInfo: {\n          finishReason: choice.finish_reason,\n          logprobs: choice.logprobs,\n        },\n      }))\n    );\n\n    return {\n      generations,\n    };\n  }\n\n  async *_streamResponseChunks(\n    input: string,\n    options: this[\"ParsedCallOptions\"],\n    runManager?: CallbackManagerForLLMRun\n  ): AsyncGenerator<GenerationChunk> {\n    const response = await this.session.portkey.completions.create({\n      prompt: input,\n      ...options,\n      stream: true,\n    });\n    for await (const data of response) {\n      const choice = data?.choices[0];\n      if (!choice) {\n        continue;\n      }\n      const chunk = new GenerationChunk({\n        text: choice.text ?? \"\",\n        generationInfo: {\n          finishReason: choice.finish_reason,\n        },\n      });\n      yield chunk;\n      // eslint-disable-next-line no-void\n      void runManager?.handleLLMNewToken(chunk.text ?? \"\");\n    }\n    if (options.signal?.aborted) {\n      throw new Error(\"AbortError\");\n    }\n  }\n}\n"],"mappings":";;;;;;;;;;;;;;AAcA,MAAM,UAAU,CAACA,KAAaC,uEACL,IAAI,IAAI;AAEjC,IAAa,iBAAb,MAA4B;CAC1B;CAEA,YAAYC,UAA0B,CAAE,GAAE;AACxC,MAAI,CAAC,QAAQ,QACX,QAAQ,SAAS,QAAQ,kBAAkB;AAG7C,MAAI,CAAC,QAAQ,SACX,QAAQ,UAAU,QAAQ,oBAAoB,yBAAyB;EAGzE,KAAK,UAAU,IAAIC,mBAAS,CAAE;EAC9B,KAAK,QAAQ,OAAO,CAAC,CAAE,CAAC;AACxB,MAAI,CAAC,QAAQ,OACX,OAAM,IAAI,MAAM;EAGlB,KAAK,UAAU,IAAIA,mBAAS;CAC7B;AACF;AAED,MAAMC,wBAGA,CAAE;;;;;;;AAQR,SAAgB,kBAAkBF,UAA0B,CAAE,GAAE;CAC9D,IAAI,UAAU,sBAAsB,KAAK,CAACG,cACxCC,eAAE,QAAQD,UAAQ,SAAS,QAAQ,CACpC,EAAE;AAEH,KAAI,CAAC,SAAS;EACZ,UAAU,IAAI,eAAe;EAC7B,sBAAsB,KAAK;GAAE;GAAS;EAAS,EAAC;CACjD;AACD,QAAO;AACR;;;;;;;;;;;;;;;;;;;;;;;;;AA0BD,IAAa,UAAb,cAA6BE,8CAAQ;CACnC,SAAkB;CAElB,UAAmB;CAEnB,OAAgB;CAEhB,OAA6B;CAE7B;CAEA,YAAYC,MAAyB;EACnC,MAAM,QAAQ,CAAE,EAAC;EACjB,KAAK,SAAS,MAAM;EAEpB,KAAK,UAAU,MAAM;EAErB,KAAK,OAAO,MAAM;EAElB,KAAK,OAAO,MAAM;EAElB,KAAK,UAAU,kBAAkB;GAC/B,QAAQ,KAAK;GACb,SAAS,KAAK;GACd,MAAM,KAAK;GACX,MAAM,KAAK;EACZ,EAAC;CACH;CAED,WAAW;AACT,SAAO;CACR;CAED,MAAM,UACJC,SACAC,SACAC,KACoB;EACpB,MAAM,UAAU,CAAE;AAClB,OAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK,GAAG;GAC1C,MAAM,WAAW,MAAM,KAAK,QAAQ,QAAQ,YAAY,OAAO;IAC7D,QAAQ,QAAQ;IAChB,GAAG;IACH,QAAQ;GACT,EAAC;GACF,QAAQ,KAAK,SAAS,QAAQ;EAC/B;EACD,MAAM,cAAc,QAAQ,IAAI,CAAC,kBAC/B,cAAc,IAAI,CAAC,YAAY;GAC7B,MAAM,OAAO,QAAQ;GACrB,gBAAgB;IACd,cAAc,OAAO;IACrB,UAAU,OAAO;GAClB;EACF,GAAE,CACJ;AAED,SAAO,EACL,YACD;CACF;CAED,OAAO,sBACLC,OACAF,SACAG,YACiC;EACjC,MAAM,WAAW,MAAM,KAAK,QAAQ,QAAQ,YAAY,OAAO;GAC7D,QAAQ;GACR,GAAG;GACH,QAAQ;EACT,EAAC;AACF,aAAW,MAAM,QAAQ,UAAU;GACjC,MAAM,SAAS,MAAM,QAAQ;AAC7B,OAAI,CAAC,OACH;GAEF,MAAM,QAAQ,IAAIC,yCAAgB;IAChC,MAAM,OAAO,QAAQ;IACrB,gBAAgB,EACd,cAAc,OAAO,cACtB;GACF;GACD,MAAM;GAED,YAAY,kBAAkB,MAAM,QAAQ,GAAG;EACrD;AACD,MAAI,QAAQ,QAAQ,QAClB,OAAM,IAAI,MAAM;CAEnB;AACF"}