{"version":3,"file":"llms.cjs","names":["LLM"],"sources":["../src/llms.ts"],"sourcesContent":["import { getEnvironmentVariable } from \"@langchain/core/utils/env\";\nimport { LLM, type BaseLLMParams } from \"@langchain/core/language_models/llms\";\n\nconst apiUrl =\n  \"https://llm.api.cloud.yandex.net/foundationModels/v1/completion\";\n\nexport interface YandexGPTInputs extends BaseLLMParams {\n  /**\n   * What sampling temperature to use.\n   * Should be a double number between 0 (inclusive) and 1 (inclusive).\n   */\n  temperature?: number;\n\n  /**\n   * Maximum limit on the total number of tokens\n   * used for both the input prompt and the generated response.\n   */\n  maxTokens?: number;\n\n  /** Model name to use. */\n  model?: string;\n\n  /** Model version to use. */\n  modelVersion?: string;\n\n  /** Model URI to use. */\n  modelURI?: string;\n\n  /**\n   * Yandex Cloud Folder ID\n   */\n  folderID?: string;\n\n  /**\n   * Yandex Cloud Api Key for service account\n   * with the `ai.languageModels.user` role.\n   */\n  apiKey?: string;\n\n  /**\n   * Yandex Cloud IAM token for service or user account\n   * with the `ai.languageModels.user` role.\n   */\n  iamToken?: string;\n}\n\nexport class YandexGPT extends LLM implements YandexGPTInputs {\n  lc_serializable = true;\n\n  static lc_name() {\n    return \"YandexGPT\";\n  }\n\n  get lc_secrets(): { [key: string]: string } | undefined {\n    return {\n      apiKey: \"YC_API_KEY\",\n      iamToken: \"YC_IAM_TOKEN\",\n      folderID: \"YC_FOLDER_ID\",\n    };\n  }\n\n  temperature = 0.6;\n\n  maxTokens = 1700;\n\n  model = \"yandexgpt-lite\";\n\n  modelVersion = \"latest\";\n\n  modelURI?: string;\n\n  apiKey?: string;\n\n  iamToken?: string;\n\n  folderID?: string;\n\n  constructor(fields?: YandexGPTInputs) {\n    super(fields ?? {});\n    this._addVersion(\"@langchain/yandex\", __PKG_VERSION__);\n    const apiKey = fields?.apiKey ?? getEnvironmentVariable(\"YC_API_KEY\");\n\n    const iamToken = fields?.iamToken ?? getEnvironmentVariable(\"YC_IAM_TOKEN\");\n\n    const folderID = fields?.folderID ?? getEnvironmentVariable(\"YC_FOLDER_ID\");\n\n    if (apiKey === undefined && iamToken === undefined) {\n      throw new Error(\n        \"Please set the YC_API_KEY or YC_IAM_TOKEN environment variable or pass it to the constructor as the apiKey or iamToken field.\"\n      );\n    }\n\n    this.modelURI = fields?.modelURI;\n    this.apiKey = apiKey;\n    this.iamToken = iamToken;\n    this.folderID = folderID;\n    this.maxTokens = fields?.maxTokens ?? this.maxTokens;\n    this.temperature = fields?.temperature ?? this.temperature;\n    this.model = fields?.model ?? this.model;\n    this.modelVersion = fields?.modelVersion ?? this.modelVersion;\n\n    if (this.modelURI === undefined && folderID === undefined) {\n      throw new Error(\n        \"Please set the YC_FOLDER_ID environment variable or pass Yandex GPT model URI to the constructor as the modelURI field.\"\n      );\n    }\n\n    if (!this.modelURI) {\n      this.modelURI = `gpt://${this.folderID}/${this.model}/${this.modelVersion}`;\n    }\n  }\n\n  _llmType() {\n    return \"yandexgpt\";\n  }\n\n  /** @ignore */\n  async _call(\n    prompt: string,\n    options: this[\"ParsedCallOptions\"]\n  ): Promise<string> {\n    // Hit the `generate` endpoint on the `large` model\n    return this.caller.callWithOptions({ signal: options.signal }, async () => {\n      const headers = {\n        \"Content-Type\": \"application/json\",\n        Authorization: \"\",\n        \"x-folder-id\": \"\",\n      };\n      if (this.apiKey !== undefined) {\n        headers.Authorization = `Api-Key ${this.apiKey}`;\n      } else {\n        headers.Authorization = `Bearer ${this.iamToken}`;\n        if (this.folderID !== undefined) {\n          headers[\"x-folder-id\"] = this.folderID;\n        }\n      }\n      const bodyData = {\n        modelUri: this.modelURI,\n        completionOptions: {\n          temperature: this.temperature,\n          maxTokens: this.maxTokens,\n        },\n\n        messages: [{ role: \"user\", text: prompt }],\n      };\n\n      try {\n        const response = await fetch(apiUrl, {\n          method: \"POST\",\n          headers,\n          body: JSON.stringify(bodyData),\n        });\n        if (!response.ok) {\n          throw new Error(\n            `Failed to fetch ${apiUrl} from YandexGPT: ${response.status}`\n          );\n        }\n\n        const responseData = await response.json();\n        return responseData.result.alternatives[0].message.text;\n      } catch (error) {\n        throw new Error(`Failed to fetch ${apiUrl} from YandexGPT ${error}`);\n      }\n    });\n  }\n}\n"],"mappings":";;;;;AAGA,MAAM,SACJ;AA0CF,IAAa,YAAb,cAA+BA,yCAA+B;CAC5D,kBAAkB;CAElB,OAAO,UAAU;AACf,SAAO;;CAGT,IAAI,aAAoD;AACtD,SAAO;GACL,QAAQ;GACR,UAAU;GACV,UAAU;GACX;;CAGH,cAAc;CAEd,YAAY;CAEZ,QAAQ;CAER,eAAe;CAEf;CAEA;CAEA;CAEA;CAEA,YAAY,QAA0B;AACpC,QAAM,UAAU,EAAE,CAAC;AACnB,OAAK,YAAY,6BAAqC;EACtD,MAAM,SAAS,QAAQ,gEAAiC,aAAa;EAErE,MAAM,WAAW,QAAQ,kEAAmC,eAAe;EAE3E,MAAM,WAAW,QAAQ,kEAAmC,eAAe;AAE3E,MAAI,WAAW,UAAa,aAAa,OACvC,OAAM,IAAI,MACR,gIACD;AAGH,OAAK,WAAW,QAAQ;AACxB,OAAK,SAAS;AACd,OAAK,WAAW;AAChB,OAAK,WAAW;AAChB,OAAK,YAAY,QAAQ,aAAa,KAAK;AAC3C,OAAK,cAAc,QAAQ,eAAe,KAAK;AAC/C,OAAK,QAAQ,QAAQ,SAAS,KAAK;AACnC,OAAK,eAAe,QAAQ,gBAAgB,KAAK;AAEjD,MAAI,KAAK,aAAa,UAAa,aAAa,OAC9C,OAAM,IAAI,MACR,0HACD;AAGH,MAAI,CAAC,KAAK,SACR,MAAK,WAAW,SAAS,KAAK,SAAS,GAAG,KAAK,MAAM,GAAG,KAAK;;CAIjE,WAAW;AACT,SAAO;;;CAIT,MAAM,MACJ,QACA,SACiB;AAEjB,SAAO,KAAK,OAAO,gBAAgB,EAAE,QAAQ,QAAQ,QAAQ,EAAE,YAAY;GACzE,MAAM,UAAU;IACd,gBAAgB;IAChB,eAAe;IACf,eAAe;IAChB;AACD,OAAI,KAAK,WAAW,OAClB,SAAQ,gBAAgB,WAAW,KAAK;QACnC;AACL,YAAQ,gBAAgB,UAAU,KAAK;AACvC,QAAI,KAAK,aAAa,OACpB,SAAQ,iBAAiB,KAAK;;GAGlC,MAAM,WAAW;IACf,UAAU,KAAK;IACf,mBAAmB;KACjB,aAAa,KAAK;KAClB,WAAW,KAAK;KACjB;IAED,UAAU,CAAC;KAAE,MAAM;KAAQ,MAAM;KAAQ,CAAC;IAC3C;AAED,OAAI;IACF,MAAM,WAAW,MAAM,MAAM,QAAQ;KACnC,QAAQ;KACR;KACA,MAAM,KAAK,UAAU,SAAS;KAC/B,CAAC;AACF,QAAI,CAAC,SAAS,GACZ,OAAM,IAAI,MACR,mBAAmB,OAAO,mBAAmB,SAAS,SACvD;AAIH,YADqB,MAAM,SAAS,MAAM,EACtB,OAAO,aAAa,GAAG,QAAQ;YAC5C,OAAO;AACd,UAAM,IAAI,MAAM,mBAAmB,OAAO,kBAAkB,QAAQ;;IAEtE"}