{"version":3,"file":"ibm.cjs","names":["_convertToolCallIdToMistralCompatible","convertLangChainToolCallToOpenAI","AIMessage","ChatMessage","HumanMessageChunk","AIMessageChunk","ToolMessageChunk","FunctionMessageChunk","ChatMessageChunk","BaseChatModel","authenticateAndSetGatewayInstance","authenticateAndSetInstance","AsyncCaller","ChatGenerationChunk","StructuredOutputParser","JsonOutputParser","WatsonxToolsOutputParser","RunnablePassthrough","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\n    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\n    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 extends Omit<\n  CreateChatCompletionsParams,\n  keyof TextChatParams | \"model\" | \"stream\" | \"messages\"\n> {}\nexport interface WatsonxCallOptionsGatewayChat\n  extends\n    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 extends WatsonxCallOptionsGatewayChat {\n  serviceUrl: string;\n  version: string;\n}\n\n// Chat input for different chat modes\nexport interface ChatWatsonxInput\n  extends BaseChatModelParams, WatsonxProjectSpaceParams {}\n\nexport interface ChatWatsonxDeployedInput\n  extends BaseChatModelParams, WatsonxDeployedParams {}\n\nexport interface ChatWatsonxGatewayInput\n  extends BaseChatModelParams, 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        ...(\"reasoning_content\" in message\n          ? { reasoning: message?.reasoning_content }\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 = {\n    ...(rawToolCalls ? { tool_calls: rawToolCalls } : {}),\n    ...(\"reasoning_content\" in delta\n      ? { reasoning: delta?.reasoning_content }\n      : {}),\n  };\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  ) {\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        \"reasoningEffort\",\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        \"reasoningEffort\",\n        \"includeReasoning\",\n      ],\n    };\n\n    const validProps: string[] = [\n      ...PROPERTY_GROUPS.ALWAYS_ALLOWED,\n      ...PROPERTY_GROUPS.AUTH,\n      ...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  includeReasoning?: boolean;\n\n  reasoningEffort?: \"low\" | \"medium\" | \"high\";\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    this.reasoningEffort = fields?.reasoningEffort;\n    this.includeReasoning = fields?.includeReasoning;\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\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      reasoningEffort: options.reasoningEffort ?? this.reasoningEffort,\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    // oxlint-disable-next-line typescript/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          includeReasoning: options.includeReasoning ?? this.includeReasoning,\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    // oxlint-disable-next-line typescript/no-explicit-any\n    RunOutput extends Record<string, any> = Record<string, any>,\n  >(\n    outputSchema:\n      | InteropZodType<RunOutput>\n      // oxlint-disable-next-line typescript/no-explicit-any\n      | Record<string, any>,\n    config?: StructuredOutputMethodOptions<false>\n  ): Runnable<BaseLanguageModelInput, RunOutput>;\n\n  withStructuredOutput<\n    // oxlint-disable-next-line typescript/no-explicit-any\n    RunOutput extends Record<string, any> = Record<string, any>,\n  >(\n    outputSchema:\n      | InteropZodType<RunOutput>\n      // oxlint-disable-next-line typescript/no-explicit-any\n      | Record<string, any>,\n    config?: StructuredOutputMethodOptions<true>\n  ): Runnable<BaseLanguageModelInput, { raw: BaseMessage; parsed: RunOutput }>;\n\n  withStructuredOutput<\n    // oxlint-disable-next-line typescript/no-explicit-any\n    RunOutput extends Record<string, any> = Record<string, any>,\n  >(\n    outputSchema:\n      | InteropZodType<RunOutput>\n      // oxlint-disable-next-line typescript/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    // oxlint-disable-next-line typescript/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      // oxlint-disable-next-line typescript/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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AAO;GACL,eAAe;GACf,QAAQ;GACR,QAAQ;GACR,mBAAmB;GACnB,iBAAiB;GACjB,sBAAsB;GACtB,mBAAmB;GACnB,mBAAmB;GACnB,cAAc;GACf;;CAGH,IAAI,aAAwC;AAC1C,SAAO;GACL,eAAe;GACf,QAAQ;GACR,QAAQ;GACR,mBAAmB;GACnB,iBAAiB;GACjB,sBAAsB;GACtB,mBAAmB;GACnB,mBAAmB;GACnB,cAAc;GACf;;CAGH,YAAY,SAAqD;EAC/D,MAAM,SAAS,KAAK,iBAAiB,QAAQ;AAC7C,SAAO;GACL,aAAa;GACb,eAAe,KAAK;GACpB,eAAe;GACf,gBAAgB,OAAO,eAAe,KAAA;GACtC,eAAe,OAAO,aAAa,KAAA;GACpC;;CAGH,qBACE,QACA;EACA,MAAM,kBAAkB;GACtB,gBAAgB;IACd;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACD;GAED,MAAM;IACJ;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACD;GAED,QAAQ;IACN;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACD;GAED,SAAS;IACP;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACD;GAED,YAAY,CAAC,WAAW;GAExB,kBAAkB;IAChB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACD;GACF;EAED,MAAM,aAAuB;GAC3B,GAAG,gBAAgB;GACnB,GAAG,gBAAgB;GACnB,GAAG,gBAAgB;GACpB;AAED,MAAI,KAAK,aACP,YAAW,KAAK,GAAG,gBAAgB,QAAQ;WAClC,KAAK,SACd,YAAW,KAAK,GAAG,gBAAgB,WAAW;WACrC,KAAK,WAAW,KAAK,UAC9B,YAAW,KAAK,GAAG,gBAAgB,iBAAiB;AAGtD,cAAA,gBAAgB,QAAQ,WAAW;;CAGrC;CAEA;CAEA;CAEA,UAAU;CAEV,eAAe;CAEf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"}