{"version":3,"file":"connection.cjs","names":["modelToFamily","modelToPublisher","getGeminiAPI","getAnthropicAPI","BaseCallbackHandler"],"sources":["../src/connection.ts"],"sourcesContent":["/* oxlint-disable @typescript-eslint/no-explicit-any */\nimport { BaseLanguageModelCallOptions } from \"@langchain/core/language_models/base\";\nimport {\n  AsyncCaller,\n  AsyncCallerCallOptions,\n} from \"@langchain/core/utils/async_caller\";\nimport { getRuntimeEnvironment } from \"@langchain/core/utils/env\";\nimport { BaseRunManager } from \"@langchain/core/callbacks/manager\";\nimport { BaseCallbackHandler } from \"@langchain/core/callbacks/base\";\nimport type {\n  GoogleAIBaseLLMInput,\n  GoogleConnectionParams,\n  GooglePlatformType,\n  GoogleResponse,\n  GoogleLLMResponse,\n  GoogleAIModelRequestParams,\n  GoogleRawResponse,\n  GoogleAIAPI,\n  VertexModelFamily,\n  GoogleAIAPIConfig,\n  AnthropicAPIConfig,\n  GeminiAPIConfig,\n  GoogleModelParams,\n} from \"./types.js\";\nimport {\n  GoogleAbstractedClient,\n  GoogleAbstractedClientOps,\n  GoogleAbstractedClientOpsMethod,\n} from \"./auth.js\";\nimport {\n  getGeminiAPI,\n  modelToFamily,\n  modelToPublisher,\n} from \"./utils/index.js\";\nimport { getAnthropicAPI } from \"./utils/anthropic.js\";\n\nexport abstract class GoogleConnection<\n  CallOptions extends AsyncCallerCallOptions,\n  ResponseType extends GoogleResponse,\n> {\n  caller: AsyncCaller;\n\n  client: GoogleAbstractedClient;\n\n  streaming: boolean;\n\n  constructor(\n    caller: AsyncCaller,\n    client: GoogleAbstractedClient,\n    streaming?: boolean\n  ) {\n    this.caller = caller;\n    this.client = client;\n    this.streaming = streaming ?? false;\n  }\n\n  abstract buildUrl(): Promise<string>;\n\n  abstract buildMethod(): GoogleAbstractedClientOpsMethod;\n\n  async _clientInfoHeaders(): Promise<Record<string, string>> {\n    const { userAgent, clientLibraryVersion } = await this._getClientInfo();\n    return {\n      \"User-Agent\": userAgent,\n      \"Client-Info\": clientLibraryVersion,\n    };\n  }\n\n  async _getClientInfo(): Promise<{\n    userAgent: string;\n    clientLibraryVersion: string;\n  }> {\n    const env = await getRuntimeEnvironment();\n    const langchain = env?.library ?? \"langchain-js\";\n    // TODO: Add an API for getting the current LangChain version\n    const langchainVersion = \"0\";\n    const moduleName = await this._moduleName();\n    let clientLibraryVersion = `${langchain}/${langchainVersion}`;\n    if (moduleName && moduleName.length) {\n      clientLibraryVersion = `${clientLibraryVersion}-${moduleName}`;\n    }\n    return {\n      userAgent: clientLibraryVersion,\n      clientLibraryVersion: `${langchainVersion}-${moduleName}`,\n    };\n  }\n\n  async _moduleName(): Promise<string> {\n    return this.constructor.name;\n  }\n\n  async additionalHeaders(): Promise<Record<string, string>> {\n    return {};\n  }\n\n  async _buildOpts(\n    data: unknown | undefined,\n    options: CallOptions,\n    requestHeaders: Record<string, string> = {}\n  ): Promise<GoogleAbstractedClientOps> {\n    const url = await this.buildUrl();\n    const method = this.buildMethod();\n    const infoHeaders = (await this._clientInfoHeaders()) ?? {};\n    const additionalHeaders = (await this.additionalHeaders()) ?? {};\n    const headers = {\n      ...infoHeaders,\n      ...additionalHeaders,\n      ...requestHeaders,\n    };\n\n    const opts: GoogleAbstractedClientOps = {\n      url,\n      method,\n      headers,\n      signal: options?.signal,\n    };\n    if (data && method === \"POST\") {\n      opts.data = data;\n    }\n    if (this.streaming) {\n      opts.responseType = \"stream\";\n    } else {\n      opts.responseType = \"json\";\n    }\n    return opts;\n  }\n\n  async _request(\n    data: unknown | undefined,\n    options: CallOptions,\n    requestHeaders: Record<string, string> = {}\n  ): Promise<ResponseType> {\n    const opts = await this._buildOpts(data, options, requestHeaders);\n    const callResponse = await this.caller.callWithOptions(\n      { signal: options?.signal },\n      async () => this.client.request(opts)\n    );\n    const response: unknown = callResponse; // Done for typecast safety, I guess\n    return <ResponseType>response;\n  }\n}\n\nexport abstract class GoogleHostConnection<\n  CallOptions extends AsyncCallerCallOptions,\n  ResponseType extends GoogleResponse,\n  AuthOptions,\n>\n  extends GoogleConnection<CallOptions, ResponseType>\n  implements GoogleConnectionParams<AuthOptions>\n{\n  // This does not default to a value intentionally.\n  // Use the \"platform\" getter if you need this.\n  platformType: GooglePlatformType | undefined;\n\n  _endpoint: string | undefined;\n\n  _location: string | undefined;\n\n  _apiVersion: string | undefined;\n\n  constructor(\n    fields: GoogleConnectionParams<AuthOptions> | undefined,\n    caller: AsyncCaller,\n    client: GoogleAbstractedClient,\n    streaming?: boolean\n  ) {\n    super(caller, client, streaming);\n    this.caller = caller;\n\n    this.platformType = this.fieldPlatformType(fields);\n    this._endpoint = fields?.endpoint;\n    this._location = fields?.location;\n    this._apiVersion = fields?.apiVersion;\n    this.client = client;\n  }\n\n  fieldPlatformType(\n    fields: GoogleConnectionParams<any> | undefined\n  ): GooglePlatformType | undefined {\n    if (typeof fields === \"undefined\") {\n      return undefined;\n    }\n    if (typeof fields.platformType !== \"undefined\") {\n      return fields.platformType;\n    }\n    if (fields.vertexai === true) {\n      return \"gcp\";\n    }\n    return undefined;\n  }\n\n  get platform(): GooglePlatformType {\n    return this.platformType ?? this.computedPlatformType;\n  }\n\n  get computedPlatformType(): GooglePlatformType {\n    return \"gcp\";\n  }\n\n  get computedApiVersion(): string {\n    return \"v1\";\n  }\n\n  get apiVersion(): string {\n    return this._apiVersion ?? this.computedApiVersion;\n  }\n\n  get location(): string {\n    return this._location ?? this.computedLocation;\n  }\n\n  get computedLocation(): string {\n    return \"us-central1\";\n  }\n\n  get endpoint(): string {\n    return this._endpoint ?? this.computedEndpoint;\n  }\n\n  get computedEndpoint(): string {\n    if (this.location === \"global\") {\n      return \"aiplatform.googleapis.com\";\n    } else {\n      return `${this.location}-aiplatform.googleapis.com`;\n    }\n  }\n\n  buildMethod(): GoogleAbstractedClientOpsMethod {\n    return \"POST\";\n  }\n}\n\nexport abstract class GoogleRawConnection<\n  CallOptions extends AsyncCallerCallOptions,\n  AuthOptions,\n> extends GoogleHostConnection<CallOptions, GoogleRawResponse, AuthOptions> {\n  async _buildOpts(\n    data: unknown | undefined,\n    _options: CallOptions,\n    requestHeaders: Record<string, string> = {}\n  ): Promise<GoogleAbstractedClientOps> {\n    const opts = await super._buildOpts(data, _options, requestHeaders);\n    opts.responseType = \"blob\";\n    return opts;\n  }\n}\n\nexport abstract class GoogleAIConnection<\n  CallOptions extends AsyncCallerCallOptions,\n  InputType,\n  AuthOptions,\n  ResponseType extends GoogleResponse,\n>\n  extends GoogleHostConnection<CallOptions, ResponseType, AuthOptions>\n  implements GoogleAIBaseLLMInput<AuthOptions>\n{\n  model: string;\n\n  modelName: string;\n\n  client: GoogleAbstractedClient;\n\n  _apiName?: string;\n\n  apiConfig?: GoogleAIAPIConfig;\n\n  constructor(\n    fields: GoogleAIBaseLLMInput<AuthOptions> | undefined,\n    caller: AsyncCaller,\n    client: GoogleAbstractedClient,\n    streaming?: boolean\n  ) {\n    super(fields, caller, client, streaming);\n    this.client = client;\n    this.modelName = fields?.model ?? fields?.modelName ?? this.model;\n    this.model = this.modelName;\n\n    this._apiName = fields?.apiName;\n    this.apiConfig = {\n      safetyHandler: fields?.safetyHandler, // For backwards compatibility\n      ...fields?.apiConfig,\n    };\n  }\n\n  get modelFamily(): VertexModelFamily {\n    return modelToFamily(this.model);\n  }\n\n  get modelPublisher(): string {\n    return modelToPublisher(this.model);\n  }\n\n  get computedAPIName(): string {\n    // At least at the moment, model publishers and APIs map the same\n    return this.modelPublisher;\n  }\n\n  get apiName(): string {\n    return this._apiName ?? this.computedAPIName;\n  }\n\n  get api(): GoogleAIAPI {\n    switch (this.apiName) {\n      case \"google\":\n      case \"gemma\": // TODO: Is this true?\n        return getGeminiAPI(this.apiConfig as GeminiAPIConfig);\n      case \"anthropic\":\n        return getAnthropicAPI(this.apiConfig as AnthropicAPIConfig);\n      default:\n        throw new Error(`Unknown API: ${this.apiName}`);\n    }\n  }\n\n  get isApiKey(): boolean {\n    return this.client.clientType === \"apiKey\";\n  }\n\n  fieldPlatformType(\n    fields: GoogleConnectionParams<any> | undefined\n  ): GooglePlatformType | undefined {\n    const ret = super.fieldPlatformType(fields);\n    if (typeof ret !== \"undefined\") {\n      return ret;\n    }\n    if (fields?.vertexai === false) {\n      return \"gai\";\n    }\n    return undefined;\n  }\n\n  get computedPlatformType(): GooglePlatformType {\n    // This is not a completely correct assumption, since GCP can\n    // have an API Key. But if so, then people need to set the platform\n    // type explicitly.\n    if (this.isApiKey) {\n      return \"gai\";\n    } else {\n      return \"gcp\";\n    }\n  }\n\n  get computedApiVersion(): string {\n    switch (this.platform) {\n      case \"gai\":\n        return \"v1beta\";\n      default:\n        return \"v1\";\n    }\n  }\n\n  get computedLocation(): string {\n    switch (this.apiName) {\n      case \"google\":\n        return super.computedLocation;\n      case \"anthropic\":\n        return \"us-east5\";\n      default:\n        throw new Error(\n          `Unknown apiName: ${this.apiName}. Can't get location.`\n        );\n    }\n  }\n\n  abstract buildUrlMethod(): Promise<string>;\n\n  async buildUrlGenerativeLanguage(): Promise<string> {\n    const method = await this.buildUrlMethod();\n    const url = `https://generativelanguage.googleapis.com/${this.apiVersion}/models/${this.model}:${method}`;\n    return url;\n  }\n\n  async buildUrlVertexExpress(): Promise<string> {\n    const method = await this.buildUrlMethod();\n    const publisher = this.modelPublisher;\n    const url = `https://aiplatform.googleapis.com/${this.apiVersion}/publishers/${publisher}/models/${this.model}:${method}`;\n    return url;\n  }\n\n  async buildUrlVertexLocation(): Promise<string> {\n    const projectId = await this.client.getProjectId();\n    const method = await this.buildUrlMethod();\n    const publisher = this.modelPublisher;\n    const url = `https://${this.endpoint}/${this.apiVersion}/projects/${projectId}/locations/${this.location}/publishers/${publisher}/models/${this.model}:${method}`;\n    return url;\n  }\n\n  async buildUrlVertex(): Promise<string> {\n    if (this.isApiKey) {\n      return this.buildUrlVertexExpress();\n    } else {\n      return this.buildUrlVertexLocation();\n    }\n  }\n\n  async buildUrl(): Promise<string> {\n    switch (this.platform) {\n      case \"gai\":\n        return this.buildUrlGenerativeLanguage();\n      default:\n        return this.buildUrlVertex();\n    }\n  }\n\n  abstract formatData(\n    input: InputType,\n    parameters: GoogleModelParams\n  ): Promise<unknown>;\n\n  async request(\n    input: InputType,\n    parameters: GoogleAIModelRequestParams,\n\n    options: CallOptions,\n    runManager?: BaseRunManager\n  ): Promise<ResponseType> {\n    const moduleName = this.constructor.name;\n    const streamingParameters: GoogleAIModelRequestParams = {\n      ...parameters,\n      streaming: this.streaming,\n    };\n    const data = await this.formatData(input, streamingParameters);\n\n    await runManager?.handleCustomEvent(`google-request-${moduleName}`, {\n      data,\n      parameters: streamingParameters,\n      options,\n      connection: {\n        ...this,\n        url: await this.buildUrl(),\n        urlMethod: await this.buildUrlMethod(),\n        modelFamily: this.modelFamily,\n        modelPublisher: this.modelPublisher,\n        computedPlatformType: this.computedPlatformType,\n      },\n    });\n\n    const response = await this._request(data, options);\n\n    await runManager?.handleCustomEvent(`google-response-${moduleName}`, {\n      response,\n    });\n\n    return response;\n  }\n}\n\nexport abstract class AbstractGoogleLLMConnection<\n  MessageType,\n  AuthOptions,\n> extends GoogleAIConnection<\n  BaseLanguageModelCallOptions,\n  MessageType,\n  AuthOptions,\n  GoogleLLMResponse\n> {\n  async buildUrlMethodGemini(): Promise<string> {\n    return this.streaming ? \"streamGenerateContent\" : \"generateContent\";\n  }\n\n  async buildUrlMethodClaude(): Promise<string> {\n    return this.streaming ? \"streamRawPredict\" : \"rawPredict\";\n  }\n\n  async buildUrlMethod(): Promise<string> {\n    switch (this.modelFamily) {\n      case \"gemini\":\n      case \"gemma\": // TODO: Is this true?\n        return this.buildUrlMethodGemini();\n      case \"claude\":\n        return this.buildUrlMethodClaude();\n      default:\n        throw new Error(`Unknown model family: ${this.modelFamily}`);\n    }\n  }\n\n  async formatData(\n    input: MessageType,\n    parameters: GoogleAIModelRequestParams\n  ): Promise<unknown> {\n    // Filter out labels for non-Vertex AI platforms (labels are only supported on Vertex AI)\n    let filteredParameters = parameters;\n    if (parameters.labels && this.platform !== \"gcp\") {\n      const { labels, ...paramsWithoutLabels } = parameters;\n      filteredParameters = paramsWithoutLabels;\n    }\n\n    return this.api.formatData(input, filteredParameters);\n  }\n}\n\nexport interface GoogleCustomEventInfo {\n  subEvent: string;\n  module: string;\n}\n\nexport abstract class GoogleRequestCallbackHandler extends BaseCallbackHandler {\n  customEventInfo(eventName: string): GoogleCustomEventInfo {\n    const names = eventName.split(\"-\");\n    return {\n      subEvent: names[1],\n      module: names[2],\n    };\n  }\n\n  abstract handleCustomRequestEvent(\n    eventName: string,\n    eventInfo: GoogleCustomEventInfo,\n    data: any,\n    runId: string,\n    tags?: string[],\n    metadata?: Record<string, any>\n  ): any;\n\n  abstract handleCustomResponseEvent(\n    eventName: string,\n    eventInfo: GoogleCustomEventInfo,\n    data: any,\n    runId: string,\n    tags?: string[],\n    metadata?: Record<string, any>\n  ): any;\n\n  abstract handleCustomChunkEvent(\n    eventName: string,\n    eventInfo: GoogleCustomEventInfo,\n    data: any,\n    runId: string,\n    tags?: string[],\n    metadata?: Record<string, any>\n  ): any;\n\n  handleCustomEvent(\n    eventName: string,\n    data: any,\n    runId: string,\n    tags?: string[],\n    metadata?: Record<string, any>\n  ): any {\n    if (!eventName) {\n      return undefined;\n    }\n    const eventInfo = this.customEventInfo(eventName);\n    switch (eventInfo.subEvent) {\n      case \"request\":\n        return this.handleCustomRequestEvent(\n          eventName,\n          eventInfo,\n          data,\n          runId,\n          tags,\n          metadata\n        );\n      case \"response\":\n        return this.handleCustomResponseEvent(\n          eventName,\n          eventInfo,\n          data,\n          runId,\n          tags,\n          metadata\n        );\n      case \"chunk\":\n        return this.handleCustomChunkEvent(\n          eventName,\n          eventInfo,\n          data,\n          runId,\n          tags,\n          metadata\n        );\n      default:\n        console.error(\n          `Unexpected eventInfo for ${eventName} ${JSON.stringify(\n            eventInfo,\n            null,\n            1\n          )}`\n        );\n    }\n  }\n}\n\nexport class GoogleRequestLogger extends GoogleRequestCallbackHandler {\n  name: string = \"GoogleRequestLogger\";\n\n  log(eventName: string, data: any, tags?: string[]): undefined {\n    const tagStr = tags ? `[${tags}]` : \"[]\";\n    console.log(`${eventName} ${tagStr} ${JSON.stringify(data, null, 1)}`);\n  }\n\n  handleCustomRequestEvent(\n    eventName: string,\n    _eventInfo: GoogleCustomEventInfo,\n    data: any,\n    _runId: string,\n    tags?: string[],\n    _metadata?: Record<string, any>\n  ): any {\n    this.log(eventName, data, tags);\n  }\n\n  handleCustomResponseEvent(\n    eventName: string,\n    _eventInfo: GoogleCustomEventInfo,\n    data: any,\n    _runId: string,\n    tags?: string[],\n    _metadata?: Record<string, any>\n  ): any {\n    this.log(eventName, data, tags);\n  }\n\n  handleCustomChunkEvent(\n    eventName: string,\n    _eventInfo: GoogleCustomEventInfo,\n    data: any,\n    _runId: string,\n    tags?: string[],\n    _metadata?: Record<string, any>\n  ): any {\n    this.log(eventName, data, tags);\n  }\n}\n\nexport class GoogleRequestRecorder extends GoogleRequestCallbackHandler {\n  name = \"GoogleRequestRecorder\";\n\n  request: any = {};\n\n  response: any = {};\n\n  chunk: any[] = [];\n\n  handleCustomRequestEvent(\n    _eventName: string,\n    _eventInfo: GoogleCustomEventInfo,\n    data: any,\n    _runId: string,\n    _tags?: string[],\n    _metadata?: Record<string, any>\n  ): any {\n    this.request = data;\n  }\n\n  handleCustomResponseEvent(\n    _eventName: string,\n    _eventInfo: GoogleCustomEventInfo,\n    data: any,\n    _runId: string,\n    _tags?: string[],\n    _metadata?: Record<string, any>\n  ): any {\n    this.response = data;\n  }\n\n  handleCustomChunkEvent(\n    _eventName: string,\n    _eventInfo: GoogleCustomEventInfo,\n    data: any,\n    _runId: string,\n    _tags?: string[],\n    _metadata?: Record<string, any>\n  ): any {\n    this.chunk.push(data);\n  }\n}\n"],"mappings":"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KAAK,UACH,QAAO,KAAK,yBACV,WACA,WACA,MACA,OACA,MACA,SACD;GACH,KAAK,WACH,QAAO,KAAK,0BACV,WACA,WACA,MACA,OACA,MACA,SACD;GACH,KAAK,QACH,QAAO,KAAK,uBACV,WACA,WACA,MACA,OACA,MACA,SACD;GACH,QACE,SAAQ,MACN,4BAA4B,UAAU,GAAG,KAAK,UAC5C,WACA,MACA,EACD,GACF;;;;AAKT,IAAa,sBAAb,cAAyC,6BAA6B;CACpE,OAAe;CAEf,IAAI,WAAmB,MAAW,MAA4B;EAC5D,MAAM,SAAS,OAAO,IAAI,KAAK,KAAK;AACpC,UAAQ,IAAI,GAAG,UAAU,GAAG,OAAO,GAAG,KAAK,UAAU,MAAM,MAAM,EAAE,GAAG;;CAGxE,yBACE,WACA,YACA,MACA,QACA,MACA,WACK;AACL,OAAK,IAAI,WAAW,MAAM,KAAK;;CAGjC,0BACE,WACA,YACA,MACA,QACA,MACA,WACK;AACL,OAAK,IAAI,WAAW,MAAM,KAAK;;CAGjC,uBACE,WACA,YACA,MACA,QACA,MACA,WACK;AACL,OAAK,IAAI,WAAW,MAAM,KAAK;;;AAInC,IAAa,wBAAb,cAA2C,6BAA6B;CACtE,OAAO;CAEP,UAAe,EAAE;CAEjB,WAAgB,EAAE;CAElB,QAAe,EAAE;CAEjB,yBACE,YACA,YACA,MACA,QACA,OACA,WACK;AACL,OAAK,UAAU;;CAGjB,0BACE,YACA,YACA,MACA,QACA,OACA,WACK;AACL,OAAK,WAAW;;CAGlB,uBACE,YACA,YACA,MACA,QACA,OACA,WACK;AACL,OAAK,MAAM,KAAK,KAAK"}