UNPKG

@langchain/community

Version:
1 lines • 53.6 kB
{"version":3,"file":"ibm.cjs","names":["model: string","tool_call_id: string","_convertToolCallIdToMistralCompatible","tools: ChatWatsonxToolType[]","MESSAGE_TYPE_TO_ROLE_MAP: Record<MessageType, string>","role: MessageType","message: BaseMessage","model?: string","convertLangChainToolCallToOpenAI","messages: BaseMessage[]","choice: TextChatResultChoice | ChatsChoice","rawDataId: string","usage?: TextChatUsage","e: unknown","additional_kwargs: Record<string, unknown>","AIMessage","ChatMessage","helperIndex: { [\"value\"]: number }","delta: WatsonxDeltaStream","rawData: TextChatResponse | ChatsResponse","defaultRole?: TextChatMessagesTextChatMessageAssistant.Constants.Role","HumanMessageChunk","toolCallChunks: ToolCallChunk[]","AIMessageChunk","ToolMessageChunk","FunctionMessageChunk","ChatMessageChunk","toolChoice: TextChatParameterTools | string | \"auto\" | \"any\"","BaseChatModel","options: this[\"ParsedCallOptions\"]","fields: this[\"ParsedCallOptions\"] | ChatWatsonxConstructorInput","validProps: string[]","checkValidProps","fields: ChatWatsonxConstructorInput","expectOneOf","authenticateAndSetGatewayInstance","authenticateAndSetInstance","toolParams: Record<string, WatsonXAI.TextChatParameterTools[]>","toolChoiceParams: Record<\n      string,\n      TextChatParameterTools | string | undefined\n    >","gatewayParams: Record<string, any>","kwargs?: Partial<CallOptions>","options?: this[\"ParsedCallOptions\"]","callback: () => T","AsyncCaller","scopeId: ReturnType<ChatWatsonx[\"scopeId\"]>","params: ReturnType<ChatWatsonx[\"invocationParams\"]>","messages: ChatsMessage[]","signal?: AbortSignal","stream: S","runManager?: CallbackManagerForLLMRun","finalChunks: Record<number, ChatGenerationChunk>","tokenUsage: UsageMetadata","tokenUsages: UsageMetadata[]","generations: ChatGeneration[]","generation: ChatGeneration","_runManager?: CallbackManagerForLLMRun","usage: TextChatUsage | undefined","generationChunk","ChatGenerationChunk","outputSchema:\n      | InteropZodType<RunOutput>\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\n      | Record<string, any>","config?: StructuredOutputMethodOptions<boolean>","schema: InteropZodType<RunOutput> | Record<string, any>","outputParser: BaseLLMOutputParser<RunOutput>","llm: Runnable<BaseLanguageModelInput>","outputFormatSchema: JsonSchema7Type | undefined","StructuredOutputParser","JsonOutputParser","WatsonxToolsOutputParser","openAIFunctionDefinition: FunctionDefinition","RunnablePassthrough","input: any","config","RunnableSequence"],"sources":["../../src/chat_models/ibm.ts"],"sourcesContent":["import {\n  AIMessage,\n  AIMessageChunk,\n  ChatMessage,\n  ChatMessageChunk,\n  FunctionMessageChunk,\n  HumanMessageChunk,\n  isAIMessage,\n  MessageType,\n  ToolMessageChunk,\n  UsageMetadata,\n  type BaseMessage,\n} from \"@langchain/core/messages\";\nimport {\n  BaseLanguageModelInput,\n  FunctionDefinition,\n  StructuredOutputMethodOptions,\n} from \"@langchain/core/language_models/base\";\nimport { CallbackManagerForLLMRun } from \"@langchain/core/callbacks/manager\";\nimport {\n  BaseChatModel,\n  BindToolsInput,\n  LangSmithParams,\n  type BaseChatModelParams,\n} from \"@langchain/core/language_models/chat_models\";\nimport {\n  ChatGeneration,\n  ChatGenerationChunk,\n  ChatResult,\n} from \"@langchain/core/outputs\";\nimport { AsyncCaller } from \"@langchain/core/utils/async_caller\";\nimport {\n  DeploymentsTextChatParams,\n  RequestCallbacks,\n  TextChatMessagesTextChatMessageAssistant,\n  TextChatParameterTools,\n  TextChatParams,\n  TextChatResponse,\n  TextChatResponseFormat,\n  TextChatResultChoice,\n  TextChatResultMessage,\n  TextChatToolCall,\n  TextChatUsage,\n} from \"@ibm-cloud/watsonx-ai/dist/watsonx-ai-ml/vml_v1.js\";\nimport { WatsonXAI, Stream } from \"@ibm-cloud/watsonx-ai\";\nimport { Response } from \"@ibm-cloud/watsonx-ai/base\";\nimport {\n  convertLangChainToolCallToOpenAI,\n  makeInvalidToolCall,\n  parseToolCall,\n} from \"@langchain/core/output_parsers/openai_tools\";\nimport { ToolCallChunk } from \"@langchain/core/messages/tool\";\nimport {\n  Runnable,\n  RunnablePassthrough,\n  RunnableSequence,\n} from \"@langchain/core/runnables\";\nimport {\n  BaseLLMOutputParser,\n  JsonOutputParser,\n  StructuredOutputParser,\n} from \"@langchain/core/output_parsers\";\nimport {\n  InteropZodType,\n  isInteropZodSchema,\n} from \"@langchain/core/utils/types\";\nimport {\n  JsonSchema7Type,\n  toJsonSchema,\n} from \"@langchain/core/utils/json_schema\";\nimport { NewTokenIndices } from \"@langchain/core/callbacks/base\";\nimport {\n  ChatObjectStream,\n  ChatsChoice,\n  ChatsMessage,\n  ChatsRequestTool,\n  ChatsResponse,\n  CreateChatCompletionsParams,\n  Gateway,\n} from \"@ibm-cloud/watsonx-ai/gateway\";\nimport { WatsonxAuth, XOR, WatsonxBaseChatParams } from \"../types/ibm.js\";\nimport {\n  _convertToolCallIdToMistralCompatible,\n  authenticateAndSetGatewayInstance,\n  authenticateAndSetInstance,\n  checkValidProps,\n  expectOneOf,\n  WatsonxToolsOutputParser,\n} from \"../utils/ibm.js\";\n\n// Ensuring back compatibility\nexport interface WatsonxCallParams extends WatsonxCallOptionsChat {}\nexport interface WatsonxCallDeployedParams extends DeploymentsTextChatParams {}\n\nexport interface WatsonxDeltaStream {\n  role?: string;\n  content?: string;\n  tool_calls?: TextChatToolCall[];\n  refusal?: string;\n}\n\n/** Project/space params */\n\nexport interface WatsonxCallOptionsChat\n  extends Partial<Omit<TextChatParams, \"modelId\" | \"toolChoice\" | \"messages\">>,\n    WatsonxBaseChatParams {\n  model?: string;\n}\n\nexport interface WatsonxProjectSpaceParams extends WatsonxCallOptionsChat {\n  model: string;\n  serviceUrl: string;\n  version: string;\n}\n/** Deployed params */\nexport interface WatsonxCallOptionsDeployedChat\n  extends Partial<Omit<DeploymentsTextChatParams, \"messages\">>,\n    WatsonxBaseChatParams {}\n\nexport interface WatsonxDeployedParams extends WatsonxCallOptionsDeployedChat {\n  serviceUrl: string;\n  version: string;\n}\n/** Gateway params */\nexport interface WatsonxGatewayChatKwargs\n  extends Omit<\n    CreateChatCompletionsParams,\n    keyof TextChatParams | \"model\" | \"stream\" | \"messages\"\n  > {}\nexport interface WatsonxCallOptionsGatewayChat\n  extends Omit<\n      CreateChatCompletionsParams,\n      | \"stream\"\n      | \"toolChoice\"\n      | \"messages\"\n      | \"prompt\"\n      | keyof WatsonxGatewayChatKwargs\n    >,\n    WatsonxBaseChatParams {\n  /** Additional parameters usable only in model gateway */\n  modelGatewayKwargs?: WatsonxGatewayChatKwargs;\n}\n\nexport interface WatsonxGatewayChatParams\n  extends WatsonxCallOptionsGatewayChat {\n  serviceUrl: string;\n  version: string;\n}\n\n// Chat input for different chat modes\nexport interface ChatWatsonxInput\n  extends BaseChatModelParams,\n    WatsonxProjectSpaceParams {}\n\nexport interface ChatWatsonxDeployedInput\n  extends BaseChatModelParams,\n    WatsonxDeployedParams {}\n\nexport interface ChatWatsonxGatewayInput\n  extends BaseChatModelParams,\n    WatsonxGatewayChatParams {\n  /** Flag indicating weather to use Model Gateway or no */\n  modelGateway: boolean;\n}\n\n// Chat type to be extended by chat class\nexport type ChatWatsonxConstructor = BaseChatModelParams &\n  Partial<WatsonxBaseChatParams> &\n  WatsonxDeployedParams &\n  WatsonxCallParams &\n  WatsonxDeployedParams;\n\nfunction _convertToValidToolId(model: string, tool_call_id: string): string {\n  if (model.startsWith(\"mistralai\") && tool_call_id)\n    return _convertToolCallIdToMistralCompatible(tool_call_id);\n  return tool_call_id;\n}\n\ntype ChatWatsonxToolType =\n  | BindToolsInput\n  | TextChatParameterTools\n  | ChatsRequestTool;\n\nfunction _convertToolToWatsonxTool(\n  tools: ChatWatsonxToolType[]\n): WatsonXAI.TextChatParameterTools[] {\n  return tools.map((tool) => {\n    if (\"type\" in tool) {\n      return tool as WatsonXAI.TextChatParameterTools;\n    }\n    // Check if schema is a Zod schema or already a JSON schema\n    const parameters = isInteropZodSchema(tool.schema)\n      ? toJsonSchema(tool.schema)\n      : tool.schema;\n\n    return {\n      type: \"function\",\n      function: {\n        name: tool.name,\n        description: tool.description ?? `Tool: ${tool.name}`,\n        parameters,\n      },\n    };\n  });\n}\nconst MESSAGE_TYPE_TO_ROLE_MAP: Record<MessageType, string> = {\n  human: \"user\",\n  ai: \"assistant\",\n  system: \"system\",\n  tool: \"tool\",\n  function: \"function\",\n  generic: \"assistant\",\n  developer: \"developer\",\n  remove: \"function\",\n};\n\nconst getRole = (role: MessageType): string => {\n  const watsonRole = MESSAGE_TYPE_TO_ROLE_MAP[role];\n  if (!watsonRole) {\n    throw new Error(`Unknown message type: ${role}`);\n  }\n  return watsonRole;\n};\n\nconst getToolCalls = (message: BaseMessage, model?: string) => {\n  if (isAIMessage(message) && message.tool_calls?.length) {\n    return message.tool_calls\n      .map((toolCall) => ({\n        ...toolCall,\n        id: _convertToValidToolId(model ?? \"\", toolCall.id ?? \"\"),\n      }))\n      .map(convertLangChainToolCallToOpenAI);\n  }\n  return undefined;\n};\n\nfunction _convertMessagesToWatsonxMessages(\n  messages: BaseMessage[],\n  model?: string\n): TextChatResultMessage[] | ChatsMessage[] {\n  return messages.map((message) => {\n    const toolCalls = getToolCalls(message, model);\n    const content = toolCalls === undefined ? message.content : \"\";\n    if (\"tool_call_id\" in message && typeof message.tool_call_id === \"string\") {\n      return {\n        role: getRole(message.getType()),\n        content,\n        name: message.name,\n        tool_call_id: _convertToValidToolId(model ?? \"\", message.tool_call_id),\n      };\n    }\n\n    return {\n      role: getRole(message.getType()),\n      content,\n      tool_calls: toolCalls,\n    };\n  });\n}\n\nfunction _watsonxResponseToChatMessage(\n  choice: TextChatResultChoice | ChatsChoice,\n  rawDataId: string,\n  usage?: TextChatUsage\n): BaseMessage {\n  const { message } = choice;\n  if (!message) throw new Error(\"No message presented\");\n  const rawToolCalls = message.tool_calls ?? [];\n\n  switch (message.role) {\n    case \"assistant\": {\n      const toolCalls = [];\n      const invalidToolCalls = [];\n      for (const rawToolCall of rawToolCalls) {\n        try {\n          const parsed = parseToolCall(rawToolCall, { returnId: true });\n          toolCalls.push(parsed);\n        } catch (e: unknown) {\n          invalidToolCalls.push(\n            makeInvalidToolCall(rawToolCall, (e as Error).message)\n          );\n        }\n      }\n      const additional_kwargs: Record<string, unknown> = {\n        tool_calls: rawToolCalls.map((toolCall) => ({\n          ...toolCall,\n          type: \"function\",\n        })),\n      };\n\n      return new AIMessage({\n        id: rawDataId,\n        content: message.content ?? \"\",\n        tool_calls: toolCalls,\n        invalid_tool_calls: invalidToolCalls,\n        additional_kwargs,\n        usage_metadata: usage\n          ? {\n              input_tokens: usage.prompt_tokens ?? 0,\n              output_tokens: usage.completion_tokens ?? 0,\n              total_tokens: usage.total_tokens ?? 0,\n            }\n          : undefined,\n      });\n    }\n    default:\n      return new ChatMessage(message.content ?? \"\", message.role ?? \"unknown\");\n  }\n}\n\nfunction _convertDeltaToMessageChunk(\n  helperIndex: { [\"value\"]: number },\n  delta: WatsonxDeltaStream,\n  rawData: TextChatResponse | ChatsResponse,\n  model?: string,\n  usage?: TextChatUsage,\n  defaultRole?: TextChatMessagesTextChatMessageAssistant.Constants.Role\n) {\n  if (delta.refusal) throw new Error(delta.refusal);\n\n  const rawToolCalls = delta.tool_calls?.length\n    ? delta.tool_calls?.map(\n        (\n          toolCall,\n          index\n        ): TextChatToolCall & { index: number; type: \"function\" } => {\n          const validId =\n            toolCall.id && toolCall.id !== \"\"\n              ? _convertToValidToolId(model ?? \"\", toolCall.id)\n              : undefined;\n          if (toolCall.id) helperIndex.value += 1;\n          return {\n            index:\n              delta?.tool_calls && delta?.tool_calls?.length > 1\n                ? index\n                : helperIndex.value,\n            ...toolCall,\n            ...(validId !== null && { id: validId }),\n            type: \"function\",\n          };\n        }\n      )\n    : undefined;\n\n  const role = delta.role || defaultRole || \"assistant\";\n  const content = delta.content ?? \"\";\n  const additional_kwargs = rawToolCalls ? { tool_calls: rawToolCalls } : {};\n\n  const usageMetadata = {\n    input_tokens: usage?.prompt_tokens ?? 0,\n    output_tokens: usage?.completion_tokens ?? 0,\n    total_tokens: usage?.total_tokens ?? 0,\n  };\n  switch (role) {\n    case \"user\":\n      return new HumanMessageChunk({ content });\n\n    case \"assistant\": {\n      // Extract tool call chunks creation\n      const toolCallChunks: ToolCallChunk[] = [];\n      if (rawToolCalls && rawToolCalls?.length > 0) {\n        for (const rawToolCallChunk of rawToolCalls) {\n          const toolCallName = rawToolCallChunk.function.name;\n          toolCallChunks.push({\n            name: toolCallName.length > 0 ? toolCallName : undefined,\n            args: rawToolCallChunk.function?.arguments,\n            id: rawToolCallChunk.id,\n            index: rawToolCallChunk.index,\n            type: \"tool_call_chunk\",\n          });\n        }\n      }\n\n      return new AIMessageChunk({\n        content,\n        tool_call_chunks: toolCallChunks,\n        additional_kwargs,\n        usage_metadata: usageMetadata,\n        id: rawData.id,\n      });\n    }\n\n    case \"tool\":\n      if (rawToolCalls) {\n        return new ToolMessageChunk({\n          content,\n          additional_kwargs,\n          tool_call_id: _convertToValidToolId(model ?? \"\", rawToolCalls[0].id),\n        });\n      }\n      return null;\n\n    case \"function\":\n      return new FunctionMessageChunk({\n        content,\n        additional_kwargs,\n      });\n\n    default:\n      return new ChatMessageChunk({ content, role });\n  }\n}\n\nfunction _convertToolChoiceToWatsonxToolChoice(\n  toolChoice: TextChatParameterTools | string | \"auto\" | \"any\"\n) {\n  if (typeof toolChoice === \"string\") {\n    if (toolChoice === \"any\" || toolChoice === \"required\") {\n      return { toolChoiceOption: \"required\" };\n    } else if (toolChoice === \"auto\" || toolChoice === \"none\") {\n      return { toolChoiceOption: toolChoice };\n    } else {\n      return {\n        toolChoice: {\n          type: \"function\",\n          function: { name: toolChoice },\n        },\n      };\n    }\n  } else if (\"type\" in toolChoice) return { toolChoice };\n  else\n    throw new Error(\n      `Unrecognized tool_choice type. Expected string or TextChatParameterTools. Recieved ${toolChoice}`\n    );\n}\n\n// Combined input for chat excluding each mode to not be present at the same time\nexport type ChatWatsonxConstructorInput = XOR<\n  XOR<ChatWatsonxInput, ChatWatsonxDeployedInput>,\n  ChatWatsonxGatewayInput\n> &\n  WatsonxAuth;\n\n// Helper to force type expansion\nexport type ChatWatsonxCallOptions = XOR<\n  XOR<WatsonxCallOptionsChat, WatsonxCallOptionsDeployedChat>,\n  WatsonxCallOptionsGatewayChat\n>;\n\nexport class ChatWatsonx<\n    CallOptions extends ChatWatsonxCallOptions = ChatWatsonxCallOptions,\n  >\n  extends BaseChatModel<CallOptions>\n  implements ChatWatsonxConstructor\n{\n  static lc_name() {\n    return \"ChatWatsonx\";\n  }\n\n  lc_serializable = true;\n\n  get lc_secrets(): { [key: string]: string } {\n    return {\n      authenticator: \"AUTHENTICATOR\",\n      apiKey: \"WATSONX_AI_APIKEY\",\n      apikey: \"WATSONX_AI_APIKEY\",\n      watsonxAIAuthType: \"WATSONX_AI_AUTH_TYPE\",\n      watsonxAIApikey: \"WATSONX_AI_APIKEY\",\n      watsonxAIBearerToken: \"WATSONX_AI_BEARER_TOKEN\",\n      watsonxAIUsername: \"WATSONX_AI_USERNAME\",\n      watsonxAIPassword: \"WATSONX_AI_PASSWORD\",\n      watsonxAIUrl: \"WATSONX_AI_URL\",\n    };\n  }\n\n  get lc_aliases(): { [key: string]: string } {\n    return {\n      authenticator: \"authenticator\",\n      apikey: \"watsonx_ai_apikey\",\n      apiKey: \"watsonx_ai_apikey\",\n      watsonxAIAuthType: \"watsonx_ai_auth_type\",\n      watsonxAIApikey: \"watsonx_ai_apikey\",\n      watsonxAIBearerToken: \"watsonx_ai_bearer_token\",\n      watsonxAIUsername: \"watsonx_ai_username\",\n      watsonxAIPassword: \"watsonx_ai_password\",\n      watsonxAIUrl: \"watsonx_ai_url\",\n    };\n  }\n\n  getLsParams(options: this[\"ParsedCallOptions\"]): LangSmithParams {\n    const params = this.invocationParams(options);\n    return {\n      ls_provider: \"watsonx\",\n      ls_model_name: this.model,\n      ls_model_type: \"chat\",\n      ls_temperature: params.temperature ?? undefined,\n      ls_max_tokens: params.maxTokens ?? undefined,\n    };\n  }\n\n  private checkValidProperties(\n    fields: this[\"ParsedCallOptions\"] | ChatWatsonxConstructorInput,\n    includeCommonProps = true\n  ) {\n    const PROPERTY_GROUPS = {\n      ALWAYS_ALLOWED: [\n        \"headers\",\n        \"signal\",\n        \"tool_choice\",\n        \"promptIndex\",\n        \"ls_structured_output_format\",\n        \"watsonxCallbacks\",\n        \"writer\",\n        \"interrupt\",\n      ],\n\n      AUTH: [\n        \"serviceUrl\",\n        \"watsonxAIApikey\",\n        \"watsonxAIBearerToken\",\n        \"watsonxAIUsername\",\n        \"watsonxAIPassword\",\n        \"watsonxAIUrl\",\n        \"watsonxAIAuthType\",\n        \"disableSSL\",\n      ],\n\n      SHARED: [\n        \"maxRetries\",\n        \"authenticator\",\n        \"serviceUrl\",\n        \"version\",\n        \"streaming\",\n        \"callbackManager\",\n        \"callbacks\",\n        \"maxConcurrency\",\n        \"cache\",\n        \"metadata\",\n        \"concurrency\",\n        \"onFailedAttempt\",\n        \"verbose\",\n        \"tags\",\n        \"headers\",\n        \"disableStreaming\",\n        \"timeout\",\n        \"stopSequences\",\n      ],\n\n      GATEWAY: [\n        \"tools\",\n        \"frequencyPenalty\",\n        \"logitBias\",\n        \"logprobs\",\n        \"topLogprobs\",\n        \"maxTokens\",\n        \"n\",\n        \"presencePenalty\",\n        \"responseFormat\",\n        \"seed\",\n        \"stop\",\n        \"temperature\",\n        \"topP\",\n        \"model\",\n        \"modelGatewayKwargs\",\n        \"modelGateway\",\n      ],\n\n      DEPLOYMENT: [\"idOrName\"],\n\n      PROJECT_OR_SPACE: [\n        \"spaceId\",\n        \"projectId\",\n        \"tools\",\n        \"toolChoiceOption\",\n        \"frequencyPenalty\",\n        \"logitBias\",\n        \"logprobs\",\n        \"topLogprobs\",\n        \"maxTokens\",\n        \"maxCompletionTokens\",\n        \"n\",\n        \"presencePenalty\",\n        \"responseFormat\",\n        \"seed\",\n        \"stop\",\n        \"temperature\",\n        \"topP\",\n        \"timeLimit\",\n        \"model\",\n      ],\n    };\n\n    const validProps: string[] = [...PROPERTY_GROUPS.ALWAYS_ALLOWED];\n\n    if (includeCommonProps) {\n      validProps.push(...PROPERTY_GROUPS.AUTH, ...PROPERTY_GROUPS.SHARED);\n    }\n\n    if (this.modelGateway) {\n      validProps.push(...PROPERTY_GROUPS.GATEWAY);\n    } else if (this.idOrName) {\n      validProps.push(...PROPERTY_GROUPS.DEPLOYMENT);\n    } else if (this.spaceId || this.projectId) {\n      validProps.push(...PROPERTY_GROUPS.PROJECT_OR_SPACE);\n    }\n\n    checkValidProps(fields, validProps);\n  }\n\n  protected service?: WatsonXAI;\n\n  protected gateway?: Gateway;\n\n  model?: string;\n\n  version = \"2024-05-31\";\n\n  modelGateway = false;\n\n  maxTokens?: number;\n\n  maxCompletionTokens?: number;\n\n  maxRetries = 0;\n\n  serviceUrl: string;\n\n  spaceId?: string;\n\n  projectId?: string;\n\n  idOrName?: string;\n\n  frequencyPenalty?: number;\n\n  logprobs?: boolean;\n\n  topLogprobs?: number;\n\n  n?: number;\n\n  presencePenalty?: number;\n\n  temperature?: number;\n\n  topP?: number;\n\n  timeLimit?: number;\n\n  maxConcurrency?: number;\n\n  responseFormat?: TextChatResponseFormat;\n\n  streaming = false;\n\n  modelGatewayKwargs?: WatsonxGatewayChatKwargs;\n\n  watsonxCallbacks?: RequestCallbacks;\n\n  constructor(fields: ChatWatsonxConstructorInput) {\n    super(fields);\n    const uniqueProps = [\"spaceId\", \"projectId\", \"idOrName\", \"modelGateway\"];\n    expectOneOf(fields, uniqueProps, true);\n\n    this.idOrName = fields?.idOrName;\n    this.projectId = fields?.projectId;\n    this.modelGateway = fields.modelGateway || this.modelGateway;\n    this.spaceId = fields?.spaceId;\n\n    this.checkValidProperties(fields);\n\n    this.model = fields?.model ?? this.model;\n    this.projectId = fields?.projectId;\n    this.spaceId = fields?.spaceId;\n    this.watsonxCallbacks = fields?.watsonxCallbacks;\n    this.serviceUrl = fields?.serviceUrl;\n    this.version = fields?.version ?? this.version;\n\n    this.temperature = fields?.temperature;\n    this.maxRetries = fields?.maxRetries || this.maxRetries;\n    this.maxConcurrency = fields?.maxConcurrency;\n    this.frequencyPenalty = fields?.frequencyPenalty;\n    this.maxTokens = fields?.maxTokens ?? this.maxTokens;\n    this.maxCompletionTokens = fields?.maxCompletionTokens;\n    this.presencePenalty = fields?.presencePenalty;\n    this.topP = fields?.topP;\n    this.responseFormat = fields?.responseFormat ?? this.responseFormat;\n    this.streaming = fields?.streaming ?? this.streaming;\n    this.n = fields?.n ?? this.n;\n    this.timeLimit = fields?.timeLimit;\n\n    this.modelGateway = fields?.modelGateway ?? this.modelGateway;\n    this.modelGatewayKwargs = fields?.modelGatewayKwargs;\n\n    const {\n      watsonxAIApikey,\n      watsonxAIAuthType,\n      watsonxAIBearerToken,\n      watsonxAIUsername,\n      watsonxAIPassword,\n      watsonxAIUrl,\n      disableSSL,\n      version,\n      serviceUrl,\n    } = fields;\n\n    const authData = {\n      watsonxAIApikey,\n      watsonxAIAuthType,\n      watsonxAIBearerToken,\n      watsonxAIUsername,\n      watsonxAIPassword,\n      watsonxAIUrl,\n      disableSSL,\n      version,\n      serviceUrl,\n    };\n\n    if (this.modelGateway) {\n      const chatGateway = authenticateAndSetGatewayInstance(authData);\n      if (chatGateway) this.gateway = chatGateway;\n      else throw new Error(\"You have not provided any type of authentication\");\n    } else {\n      const service = authenticateAndSetInstance(authData);\n\n      if (service) this.service = service;\n      else throw new Error(\"You have not provided any type of authentication\");\n    }\n  }\n\n  _llmType() {\n    return \"watsonx\";\n  }\n\n  invocationParams(options: this[\"ParsedCallOptions\"]) {\n    const { tools, responseFormat, timeLimit, tool_choice } = options;\n\n    expectOneOf(options, [\"spaceId\", \"projectId\", \"idOrName\", \"modelGateway\"]);\n    this.checkValidProperties(options, false);\n\n    const paramDefaults = {\n      maxTokens: options.maxTokens ?? this.maxTokens,\n      maxCompletionTokens:\n        options.maxCompletionTokens ?? this.maxCompletionTokens,\n      temperature: options.temperature ?? this.temperature,\n      topP: options.topP ?? this.topP,\n      presencePenalty: options.presencePenalty ?? this.presencePenalty,\n      n: options.n ?? this.n,\n      topLogprobs: options.topLogprobs ?? this.topLogprobs,\n      logprobs: options.logprobs ?? this.logprobs,\n      frequencyPenalty: options.frequencyPenalty ?? this.frequencyPenalty,\n    };\n\n    const toolParams: Record<string, WatsonXAI.TextChatParameterTools[]> = tools\n      ? { tools: _convertToolToWatsonxTool(tools) }\n      : {};\n\n    const toolChoiceParams: Record<\n      string,\n      TextChatParameterTools | string | undefined\n    > = tool_choice ? _convertToolChoiceToWatsonxToolChoice(tool_choice) : {};\n\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    const gatewayParams: Record<string, any> = this.modelGateway\n      ? { ...this.modelGatewayKwargs }\n      : {\n          timeLimit: timeLimit ?? this.timeLimit,\n          projectId: options.projectId ?? this.projectId,\n        };\n\n    return {\n      ...paramDefaults,\n      ...toolParams,\n      responseFormat,\n      ...toolChoiceParams,\n      ...gatewayParams,\n    };\n  }\n\n  invocationCallbacks(options: this[\"ParsedCallOptions\"]) {\n    return options.watsonxCallbacks ?? this.watsonxCallbacks;\n  }\n\n  override bindTools(\n    tools: ChatWatsonxToolType[],\n    kwargs?: Partial<CallOptions>\n  ): Runnable<BaseLanguageModelInput, AIMessageChunk, CallOptions> {\n    return this.withConfig({\n      tools: _convertToolToWatsonxTool(tools),\n      ...kwargs,\n    } as CallOptions);\n  }\n\n  scopeId(\n    options?: this[\"ParsedCallOptions\"]\n  ):\n    | { idOrName: string }\n    | { projectId: string; modelId: string }\n    | { spaceId: string; modelId: string }\n    | { modelId: string }\n    | { model: string } {\n    const model = options?.model ?? this.model;\n    const projectId = options?.projectId ?? this.projectId;\n    const spaceId = options?.spaceId ?? this.spaceId;\n    const idOrName = options?.idOrName ?? this.idOrName;\n\n    if (this.modelGateway) {\n      if (!model) {\n        throw new Error(\n          \"No model provided! Model gateway expects model to be provided\"\n        );\n      }\n      return { model };\n    }\n\n    if (projectId && model) return { projectId, modelId: model };\n    if (spaceId && model) return { spaceId, modelId: model };\n    if (idOrName) return { idOrName };\n    if (model) return { modelId: model };\n\n    throw new Error(\"No id or model provided!\");\n  }\n\n  async completionWithRetry<T>(\n    callback: () => T,\n    options?: this[\"ParsedCallOptions\"]\n  ) {\n    const caller = new AsyncCaller({\n      maxConcurrency: options?.maxConcurrency ?? this.maxConcurrency,\n      maxRetries: this.maxRetries,\n    });\n    const result = options\n      ? caller.callWithOptions(\n          {\n            signal: options.signal,\n          },\n          async () => callback()\n        )\n      : caller.call(async () => callback());\n\n    return result;\n  }\n\n  private async _chatModelGateway<S extends boolean = false>(\n    scopeId: ReturnType<ChatWatsonx[\"scopeId\"]>,\n    params: ReturnType<ChatWatsonx[\"invocationParams\"]>,\n    messages: ChatsMessage[],\n    signal?: AbortSignal,\n    stream: S = false as S\n  ): Promise<\n    S extends true ? Stream<ChatObjectStream> : Response<ChatsResponse>\n  > {\n    if (this.gateway) {\n      if (\"model\" in scopeId) {\n        return this.gateway.chat.completion.create({\n          ...params,\n          ...scopeId,\n          signal,\n          stream,\n          ...(stream ? { returnObject: true } : {}),\n          messages,\n        });\n      }\n      throw new Error(\n        \"No 'model' specified. Model needs to be spcified for model gateway\"\n      );\n    }\n    throw new Error(\n      \"'gateway' instance is not set. Please check your implementation\"\n    );\n  }\n\n  async _generate(\n    messages: BaseMessage[],\n    options: this[\"ParsedCallOptions\"],\n    runManager?: CallbackManagerForLLMRun\n  ): Promise<ChatResult> {\n    if (this.streaming) {\n      const stream = this._streamResponseChunks(messages, options, runManager);\n      const finalChunks: Record<number, ChatGenerationChunk> = {};\n      let tokenUsage: UsageMetadata = {\n        input_tokens: 0,\n        output_tokens: 0,\n        total_tokens: 0,\n      };\n      const tokenUsages: UsageMetadata[] = [];\n      for await (const chunk of stream) {\n        const message = chunk.message as AIMessageChunk;\n        const usageMetadata = message?.usage_metadata as UsageMetadata;\n        if (usageMetadata) {\n          const completion = chunk.generationInfo?.completion;\n          if (tokenUsages[completion])\n            tokenUsages[completion].output_tokens =\n              usageMetadata?.output_tokens;\n          else tokenUsages[completion] = usageMetadata;\n        }\n        chunk.message.response_metadata = {\n          model: this.model,\n          ...chunk.generationInfo,\n          ...chunk.message.response_metadata,\n        };\n\n        const index =\n          (chunk.generationInfo as NewTokenIndices)?.completion ?? 0;\n        if (finalChunks[index] === undefined) {\n          finalChunks[index] = chunk;\n        } else {\n          finalChunks[index] = finalChunks[index].concat(chunk);\n        }\n      }\n      tokenUsage = tokenUsages.reduce((acc, curr) => {\n        return {\n          input_tokens: acc.input_tokens + curr.input_tokens,\n          output_tokens: acc.output_tokens + curr.output_tokens,\n          total_tokens: acc.total_tokens + curr.total_tokens,\n        };\n      });\n      const generations = Object.entries(finalChunks)\n        .sort(([aKey], [bKey]) => parseInt(aKey, 10) - parseInt(bKey, 10))\n        .map(([_, value]) => value);\n      return { generations, llmOutput: { tokenUsage } };\n    } else {\n      const params = this.invocationParams(options);\n      const scopeId = this.scopeId(options);\n      const watsonxCallbacks = this.invocationCallbacks(options);\n      const watsonxMessages = _convertMessagesToWatsonxMessages(\n        messages,\n        this.model\n      );\n      const callback = () => {\n        if (this.modelGateway) {\n          return this._chatModelGateway(\n            scopeId,\n            params,\n            watsonxMessages,\n            options.signal,\n            false\n          );\n        }\n\n        if (this.service) {\n          if (\"idOrName\" in scopeId) {\n            return this.service.deploymentsTextChat(\n              {\n                ...scopeId,\n                messages: watsonxMessages,\n                signal: options?.signal,\n              },\n              watsonxCallbacks\n            );\n          }\n\n          if (\"modelId\" in scopeId)\n            return this.service.textChat(\n              {\n                ...params,\n                ...scopeId,\n                messages: watsonxMessages,\n                signal: options?.signal,\n              },\n              watsonxCallbacks\n            );\n        }\n\n        throw new Error(\n          \"No service or gateway set. Please check your intsance init\"\n        );\n      };\n\n      const { result } = await this.completionWithRetry(callback, options);\n      const generations: ChatGeneration[] = [];\n      for (const part of result.choices) {\n        const generation: ChatGeneration = {\n          text: part.message?.content ?? \"\",\n          message: _watsonxResponseToChatMessage(\n            part,\n            result.id,\n            result?.usage\n          ),\n        };\n        if (part.finish_reason) {\n          generation.generationInfo = { finish_reason: part.finish_reason };\n        }\n        generations.push(generation);\n      }\n\n      return {\n        generations,\n        llmOutput: {\n          tokenUsage: result?.usage,\n          model_name: this.model,\n          model: this.model,\n        },\n      };\n    }\n  }\n\n  async *_streamResponseChunks(\n    messages: BaseMessage[],\n    options: this[\"ParsedCallOptions\"],\n    _runManager?: CallbackManagerForLLMRun\n  ): AsyncGenerator<ChatGenerationChunk> {\n    const params = this.invocationParams(options);\n    const scopeId = this.scopeId(options);\n    const watsonxMessages = _convertMessagesToWatsonxMessages(\n      messages,\n      this.model\n    );\n    const watsonxCallbacks = this.invocationCallbacks(options);\n    const { signal } = options;\n    const callback = () => {\n      if (this.modelGateway) {\n        return this._chatModelGateway(\n          scopeId,\n          params,\n          watsonxMessages,\n          signal,\n          true\n        );\n      }\n      if (this.service) {\n        if (\"idOrName\" in scopeId)\n          return this.service.deploymentsTextChatStream(\n            {\n              ...scopeId,\n              messages: watsonxMessages,\n              returnObject: true,\n              signal,\n            },\n            watsonxCallbacks\n          );\n        if (\"modelId\" in scopeId)\n          return this.service.textChatStream(\n            {\n              ...params,\n              ...scopeId,\n              messages: watsonxMessages,\n              returnObject: true,\n              signal,\n            },\n            watsonxCallbacks\n          );\n\n        throw new Error(\n          \"No idOrName or modelId specified. At least one of these needs to be specified in basic mode\"\n        );\n      }\n      throw new Error(\n        \"No service or gateway set. Please check your intsance init\"\n      );\n    };\n    const stream = await this.completionWithRetry(callback, options);\n    let defaultRole;\n    let usage: TextChatUsage | undefined;\n    let currentCompletion = 0;\n    const counter = { value: -1 };\n    for await (const chunk of stream) {\n      if (chunk?.data?.usage) usage = chunk.data.usage;\n      const { data } = chunk;\n      const choice = data.choices[0] as TextChatResultChoice &\n        Record<\"delta\", TextChatResultMessage>;\n\n      if (choice && !(\"delta\" in choice)) {\n        continue;\n      }\n      const delta = choice?.delta;\n      if (!delta) {\n        continue;\n      }\n\n      currentCompletion = choice.index ?? 0;\n      const newTokenIndices = {\n        prompt: options.promptIndex ?? 0,\n        completion: choice.index ?? 0,\n      };\n\n      const generationInfo = {\n        ...newTokenIndices,\n        finish_reason: choice.finish_reason,\n      };\n\n      const message = _convertDeltaToMessageChunk(\n        counter,\n        delta,\n        data,\n        this.model,\n        chunk.data.usage,\n        defaultRole\n      );\n      defaultRole = (delta.role ||\n        defaultRole) as TextChatMessagesTextChatMessageAssistant.Constants.Role;\n\n      if (\n        message === null ||\n        (!delta.content && !delta.tool_calls && delta.role === \"assistant\")\n      ) {\n        continue;\n      }\n      const generationChunk = new ChatGenerationChunk({\n        message,\n        text: delta.content ?? \"\",\n        generationInfo,\n      });\n\n      yield generationChunk;\n      // eslint-disable-next-line no-void\n      void _runManager?.handleLLMNewToken(\n        generationChunk.text,\n        newTokenIndices,\n        undefined,\n        undefined,\n        undefined,\n        { chunk: generationChunk }\n      );\n    }\n\n    const generationChunk = new ChatGenerationChunk({\n      message: new AIMessageChunk({\n        content: \"\",\n        response_metadata: {\n          model: this.model,\n          usage,\n        },\n        usage_metadata: {\n          input_tokens: usage?.prompt_tokens ?? 0,\n          output_tokens: usage?.completion_tokens ?? 0,\n          total_tokens: usage?.total_tokens ?? 0,\n        },\n      }),\n      text: \"\",\n      generationInfo: {\n        prompt: options.promptIndex ?? 0,\n        completion: currentCompletion ?? 0,\n      },\n    });\n    yield generationChunk;\n  }\n\n  /** @ignore */\n  _combineLLMOutput() {\n    return [];\n  }\n\n  withStructuredOutput<\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    RunOutput extends Record<string, any> = Record<string, any>,\n  >(\n    outputSchema:\n      | InteropZodType<RunOutput>\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\n      | Record<string, any>,\n    config?: StructuredOutputMethodOptions<false>\n  ): Runnable<BaseLanguageModelInput, RunOutput>;\n\n  withStructuredOutput<\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    RunOutput extends Record<string, any> = Record<string, any>,\n  >(\n    outputSchema:\n      | InteropZodType<RunOutput>\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\n      | Record<string, any>,\n    config?: StructuredOutputMethodOptions<true>\n  ): Runnable<BaseLanguageModelInput, { raw: BaseMessage; parsed: RunOutput }>;\n\n  withStructuredOutput<\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    RunOutput extends Record<string, any> = Record<string, any>,\n  >(\n    outputSchema:\n      | InteropZodType<RunOutput>\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\n      | Record<string, any>,\n    config?: StructuredOutputMethodOptions<boolean>\n  ):\n    | Runnable<BaseLanguageModelInput, RunOutput>\n    | Runnable<\n        BaseLanguageModelInput,\n        { raw: BaseMessage; parsed: RunOutput }\n      > {\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    const schema: InteropZodType<RunOutput> | Record<string, any> =\n      outputSchema;\n    const name = config?.name;\n    const method = config?.method;\n    const includeRaw = config?.includeRaw;\n    let functionName = name ?? \"extract\";\n    let outputParser: BaseLLMOutputParser<RunOutput>;\n    let llm: Runnable<BaseLanguageModelInput>;\n    if (method === \"jsonMode\") {\n      let outputFormatSchema: JsonSchema7Type | undefined;\n      if (isInteropZodSchema(schema)) {\n        outputParser = StructuredOutputParser.fromZodSchema(schema);\n        outputFormatSchema = toJsonSchema(schema);\n      } else {\n        outputParser = new JsonOutputParser<RunOutput>();\n      }\n      const options = {\n        responseFormat: { type: \"json_object\" },\n        ls_structured_output_format: {\n          kwargs: { method: \"jsonMode\" },\n          schema: outputFormatSchema,\n        },\n      } as Partial<CallOptions>;\n      llm = this.withConfig(options);\n    } else {\n      if (isInteropZodSchema(schema)) {\n        const asJsonSchema = toJsonSchema(schema);\n        llm = this.withConfig({\n          tools: [\n            {\n              type: \"function\" as const,\n              function: {\n                name: functionName,\n                description:\n                  asJsonSchema.description ?? `Tool: ${functionName}`,\n                parameters: asJsonSchema,\n              },\n            },\n          ],\n          // Ideally that would be set to required but this is not supported yet\n          tool_choice: {\n            type: \"function\",\n            function: {\n              name: functionName,\n            },\n          },\n          ls_structured_output_format: {\n            kwargs: { method: \"functionCalling\" },\n            schema: asJsonSchema,\n          },\n        } as Partial<CallOptions>);\n        outputParser = new WatsonxToolsOutputParser({\n          returnSingle: true,\n          keyName: functionName,\n          zodSchema: schema,\n        });\n      } else {\n        let openAIFunctionDefinition: FunctionDefinition;\n        if (\n          typeof schema.name === \"string\" &&\n          typeof schema.parameters === \"object\" &&\n          schema.parameters != null\n        ) {\n          openAIFunctionDefinition = schema as FunctionDefinition;\n          functionName = schema.name;\n        } else {\n          openAIFunctionDefinition = {\n            name: functionName,\n            description: schema.description ?? \"\",\n            parameters: schema,\n          };\n        }\n        llm = this.withConfig({\n          tools: [\n            {\n              type: \"function\" as const,\n              function: openAIFunctionDefinition,\n            },\n          ],\n          tool_choice: {\n            type: \"function\" as const,\n            function: {\n              name: functionName,\n            },\n          },\n          ls_structured_output_format: {\n            kwargs: { method: \"functionCalling\" },\n            schema: toJsonSchema(schema),\n          },\n        } as Partial<CallOptions>);\n        outputParser = new WatsonxToolsOutputParser<RunOutput>({\n          returnSingle: true,\n          keyName: functionName,\n        });\n      }\n    }\n\n    if (!includeRaw) {\n      return llm.pipe(outputParser) as Runnable<\n        BaseLanguageModelInput,\n        RunOutput\n      >;\n    }\n\n    const parserAssign = RunnablePassthrough.assign({\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\n      parsed: (input: any, config) => outputParser.invoke(input.raw, config),\n    });\n    const parserNone = RunnablePassthrough.assign({\n      parsed: () => null,\n    });\n    const parsedWithFallback = parserAssign.withFallbacks({\n      fallbacks: [parserNone],\n    });\n    return RunnableSequence.from<\n      BaseLanguageModelInput,\n      { raw: BaseMessage; parsed: RunOutput }\n    >([\n      {\n        raw: llm,\n      },\n      parsedWithFallback,\n    ]);\n  }\n}\n"],"mappings":"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"}