@langchain/community
Version:
Third-party integrations for LangChain.js
1 lines • 7.74 kB
Source Map (JSON)
{"version":3,"file":"ai21.cjs","names":["LLM"],"sources":["../../src/llms/ai21.ts"],"sourcesContent":["import { LLM, type BaseLLMParams } from \"@langchain/core/language_models/llms\";\nimport { getEnvironmentVariable } from \"@langchain/core/utils/env\";\n\n/**\n * Type definition for AI21 penalty data.\n */\nexport type AI21PenaltyData = {\n scale: number;\n applyToWhitespaces: boolean;\n applyToPunctuations: boolean;\n applyToNumbers: boolean;\n applyToStopwords: boolean;\n applyToEmojis: boolean;\n};\n\n/**\n * Interface for AI21 input parameters.\n */\nexport interface AI21Input extends BaseLLMParams {\n ai21ApiKey?: string;\n model?: string;\n temperature?: number;\n minTokens?: number;\n maxTokens?: number;\n topP?: number;\n presencePenalty?: AI21PenaltyData;\n countPenalty?: AI21PenaltyData;\n frequencyPenalty?: AI21PenaltyData;\n numResults?: number;\n logitBias?: Record<string, number>;\n stop?: string[];\n baseUrl?: string;\n}\n\n/**\n * Class representing the AI21 language model. It extends the LLM (Large\n * Language Model) class, providing a standard interface for interacting\n * with the AI21 language model.\n */\nexport class AI21 extends LLM implements AI21Input {\n lc_serializable = true;\n\n model = \"j2-jumbo-instruct\";\n\n temperature = 0.7;\n\n maxTokens = 1024;\n\n minTokens = 0;\n\n topP = 1;\n\n presencePenalty = AI21.getDefaultAI21PenaltyData();\n\n countPenalty = AI21.getDefaultAI21PenaltyData();\n\n frequencyPenalty = AI21.getDefaultAI21PenaltyData();\n\n numResults = 1;\n\n logitBias?: Record<string, number>;\n\n ai21ApiKey?: string;\n\n stop?: string[];\n\n baseUrl?: string;\n\n constructor(fields?: AI21Input) {\n super(fields ?? {});\n\n this.model = fields?.model ?? this.model;\n this.temperature = fields?.temperature ?? this.temperature;\n this.maxTokens = fields?.maxTokens ?? this.maxTokens;\n this.minTokens = fields?.minTokens ?? this.minTokens;\n this.topP = fields?.topP ?? this.topP;\n this.presencePenalty = fields?.presencePenalty ?? this.presencePenalty;\n this.countPenalty = fields?.countPenalty ?? this.countPenalty;\n this.frequencyPenalty = fields?.frequencyPenalty ?? this.frequencyPenalty;\n this.numResults = fields?.numResults ?? this.numResults;\n this.logitBias = fields?.logitBias;\n this.ai21ApiKey =\n fields?.ai21ApiKey ?? getEnvironmentVariable(\"AI21_API_KEY\");\n this.stop = fields?.stop;\n this.baseUrl = fields?.baseUrl;\n }\n\n /**\n * Method to validate the environment. It checks if the AI21 API key is\n * set. If not, it throws an error.\n */\n validateEnvironment() {\n if (!this.ai21ApiKey) {\n throw new Error(\n `No AI21 API key found. Please set it as \"AI21_API_KEY\" in your environment variables.`\n );\n }\n }\n\n /**\n * Static method to get the default penalty data for AI21.\n * @returns AI21PenaltyData\n */\n static getDefaultAI21PenaltyData(): AI21PenaltyData {\n return {\n scale: 0,\n applyToWhitespaces: true,\n applyToPunctuations: true,\n applyToNumbers: true,\n applyToStopwords: true,\n applyToEmojis: true,\n };\n }\n\n /** Get the type of LLM. */\n _llmType() {\n return \"ai21\";\n }\n\n /** Get the default parameters for calling AI21 API. */\n get defaultParams() {\n return {\n temperature: this.temperature,\n maxTokens: this.maxTokens,\n minTokens: this.minTokens,\n topP: this.topP,\n presencePenalty: this.presencePenalty,\n countPenalty: this.countPenalty,\n frequencyPenalty: this.frequencyPenalty,\n numResults: this.numResults,\n logitBias: this.logitBias,\n };\n }\n\n /** Get the identifying parameters for this LLM. */\n get identifyingParams() {\n return { ...this.defaultParams, model: this.model };\n }\n\n /** Call out to AI21's complete endpoint.\n Args:\n prompt: The prompt to pass into the model.\n stop: Optional list of stop words to use when generating.\n\n Returns:\n The string generated by the model.\n\n Example:\n let response = ai21._call(\"Tell me a joke.\");\n */\n async _call(\n prompt: string,\n options: this[\"ParsedCallOptions\"]\n ): Promise<string> {\n let stop = options?.stop;\n this.validateEnvironment();\n if (this.stop && stop && this.stop.length > 0 && stop.length > 0) {\n throw new Error(\"`stop` found in both the input and default params.\");\n }\n stop = this.stop ?? stop ?? [];\n\n const baseUrl =\n (this.baseUrl ?? this.model === \"j1-grande-instruct\")\n ? \"https://api.ai21.com/studio/v1/experimental\"\n : \"https://api.ai21.com/studio/v1\";\n\n const url = `${baseUrl}/${this.model}/complete`;\n const headers = {\n Authorization: `Bearer ${this.ai21ApiKey}`,\n \"Content-Type\": \"application/json\",\n };\n const data = { prompt, stopSequences: stop, ...this.defaultParams };\n const responseData = await this.caller.callWithOptions({}, async () => {\n const response = await fetch(url, {\n method: \"POST\",\n headers,\n body: JSON.stringify(data),\n signal: options.signal,\n });\n if (!response.ok) {\n const error = new Error(\n `AI21 call failed with status code ${response.status}`\n );\n // oxlint-disable-next-line typescript/no-explicit-any\n (error as any).response = response;\n throw error;\n }\n return response.json();\n });\n\n if (\n !responseData.completions ||\n responseData.completions.length === 0 ||\n !responseData.completions[0].data\n ) {\n throw new Error(\"No completions found in response\");\n }\n\n return responseData.completions[0].data.text ?? \"\";\n }\n}\n"],"mappings":";;;;;;;;;;;AAuCA,IAAa,OAAb,MAAa,aAAaA,qCAAAA,IAAyB;CACjD,kBAAkB;CAElB,QAAQ;CAER,cAAc;CAEd,YAAY;CAEZ,YAAY;CAEZ,OAAO;CAEP,kBAAkB,KAAK,2BAA2B;CAElD,eAAe,KAAK,2BAA2B;CAE/C,mBAAmB,KAAK,2BAA2B;CAEnD,aAAa;CAEb;CAEA;CAEA;CAEA;CAEA,YAAY,QAAoB;AAC9B,QAAM,UAAU,EAAE,CAAC;AAEnB,OAAK,QAAQ,QAAQ,SAAS,KAAK;AACnC,OAAK,cAAc,QAAQ,eAAe,KAAK;AAC/C,OAAK,YAAY,QAAQ,aAAa,KAAK;AAC3C,OAAK,YAAY,QAAQ,aAAa,KAAK;AAC3C,OAAK,OAAO,QAAQ,QAAQ,KAAK;AACjC,OAAK,kBAAkB,QAAQ,mBAAmB,KAAK;AACvD,OAAK,eAAe,QAAQ,gBAAgB,KAAK;AACjD,OAAK,mBAAmB,QAAQ,oBAAoB,KAAK;AACzD,OAAK,aAAa,QAAQ,cAAc,KAAK;AAC7C,OAAK,YAAY,QAAQ;AACzB,OAAK,aACH,QAAQ,eAAA,GAAA,0BAAA,wBAAqC,eAAe;AAC9D,OAAK,OAAO,QAAQ;AACpB,OAAK,UAAU,QAAQ;;;;;;CAOzB,sBAAsB;AACpB,MAAI,CAAC,KAAK,WACR,OAAM,IAAI,MACR,wFACD;;;;;;CAQL,OAAO,4BAA6C;AAClD,SAAO;GACL,OAAO;GACP,oBAAoB;GACpB,qBAAqB;GACrB,gBAAgB;GAChB,kBAAkB;GAClB,eAAe;GAChB;;;CAIH,WAAW;AACT,SAAO;;;CAIT,IAAI,gBAAgB;AAClB,SAAO;GACL,aAAa,KAAK;GAClB,WAAW,KAAK;GAChB,WAAW,KAAK;GAChB,MAAM,KAAK;GACX,iBAAiB,KAAK;GACtB,cAAc,KAAK;GACnB,kBAAkB,KAAK;GACvB,YAAY,KAAK;GACjB,WAAW,KAAK;GACjB;;;CAIH,IAAI,oBAAoB;AACtB,SAAO;GAAE,GAAG,KAAK;GAAe,OAAO,KAAK;GAAO;;;;;;;;;;;;;CAcrD,MAAM,MACJ,QACA,SACiB;EACjB,IAAI,OAAO,SAAS;AACpB,OAAK,qBAAqB;AAC1B,MAAI,KAAK,QAAQ,QAAQ,KAAK,KAAK,SAAS,KAAK,KAAK,SAAS,EAC7D,OAAM,IAAI,MAAM,qDAAqD;AAEvE,SAAO,KAAK,QAAQ,QAAQ,EAAE;EAO9B,MAAM,MAAM,GAJT,KAAK,WAAW,KAAK,UAAU,uBAC5B,gDACA,iCAEiB,GAAG,KAAK,MAAM;EACrC,MAAM,UAAU;GACd,eAAe,UAAU,KAAK;GAC9B,gBAAgB;GACjB;EACD,MAAM,OAAO;GAAE;GAAQ,eAAe;GAAM,GAAG,KAAK;GAAe;EACnE,MAAM,eAAe,MAAM,KAAK,OAAO,gBAAgB,EAAE,EAAE,YAAY;GACrE,MAAM,WAAW,MAAM,MAAM,KAAK;IAChC,QAAQ;IACR;IACA,MAAM,KAAK,UAAU,KAAK;IAC1B,QAAQ,QAAQ;IACjB,CAAC;AACF,OAAI,CAAC,SAAS,IAAI;IAChB,MAAM,wBAAQ,IAAI,MAChB,qCAAqC,SAAS,SAC/C;AAEA,UAAc,WAAW;AAC1B,UAAM;;AAER,UAAO,SAAS,MAAM;IACtB;AAEF,MACE,CAAC,aAAa,eACd,aAAa,YAAY,WAAW,KACpC,CAAC,aAAa,YAAY,GAAG,KAE7B,OAAM,IAAI,MAAM,mCAAmC;AAGrD,SAAO,aAAa,YAAY,GAAG,KAAK,QAAQ"}