{"version":3,"sources":["../../../node_modules/.pnpm/tsup@8.3.6_@swc+core@1.10.15_tsx@4.19.2_typescript@5.7.3_yaml@2.7.0/node_modules/tsup/assets/cjs_shims.js","../../../src/adapters/ibm-vllm/client.ts"],"names":["getImportMetaUrl","document","URL","__filename","href","currentScript","src","baseURI","importMetaUrl","GENERATION_PROTO_PATH","NLP_PROTO_PATH","defaultOptions","clientShutdownDelay","grpcClientOptions","grpcConfig","longs","Number","enums","String","arrays","objects","oneofs","keepCase","defaults","generationPackage","grpc","loadPackageDefinition","protoLoader","loadSync","pathname","embeddingsPackage","GRPC_CLIENT_TTL","Client","Serializable","options","usedDefaultCredentials","getClient","modelId","factory","modelSpecificUrl","url","replace","replaceAll","client","credentials","createSsl","Buffer","from","rootCert","privateKey","certChain","setTimeout","close","unref","getDefaultCredentials","parseEnv","z","string","constructor","modelInfo","request","model_id","fmaas","GenerationService","wrapGrpcCall","bind","generate","generateStream","wrapGrpcStream","tokenize","embed","caikit","runtime","Nlp","NlpService","queues","embeddings","add","embeddingTasksPredict","throwOnTimeout","fn","signal","metadata","Metadata","getProp","Promise","resolve","reject","call","err","response","removeEventListener","abortHandler","undefined","FrameworkError","cancel","addEventListener","once","stream","addListener","createSnapshot","ValueError","R","omit","loadSnapshot","snapshot","Object","assign","PQueue","concurrency","limits","ttl","enumerable"],"mappings":"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","file":"client.cjs","sourcesContent":["// Shim globals in cjs bundle\n// There's a weird bug that esbuild will always inject importMetaUrl\n// if we export it as `const importMetaUrl = ... __filename ...`\n// But using a function will not cause this issue\n\nconst getImportMetaUrl = () =>\n  typeof document === 'undefined'\n    ? new URL(`file:${__filename}`).href\n    : (document.currentScript && document.currentScript.src) ||\n      new URL('main.js', document.baseURI).href\n\nexport const importMetaUrl = /* @__PURE__ */ getImportMetaUrl()\n","/**\n * Copyright 2025 IBM Corp.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport grpc, {\n  CallOptions as GRPCCallOptions,\n  ClientOptions as GRPCClientOptions,\n  ClientReadableStream,\n  ClientUnaryCall,\n  Metadata,\n} from \"@grpc/grpc-js\";\n\nimport * as R from \"remeda\";\n// eslint-disable-next-line no-restricted-imports\nimport { UnaryCallback } from \"@grpc/grpc-js/build/src/client.js\";\nimport { FrameworkError, ValueError } from \"@/errors.js\";\nimport protoLoader, { Options } from \"@grpc/proto-loader\";\n\nimport {\n  BatchedGenerationRequest,\n  BatchedGenerationResponse__Output,\n  BatchedTokenizeRequest,\n  BatchedTokenizeResponse__Output,\n  type EmbeddingTasksRequest,\n  GenerationRequest__Output,\n  ModelInfoRequest,\n  ModelInfoResponse__Output,\n  ProtoGrpcType as GenerationProtoGentypes,\n  ProtoGrpcType$1 as CaikitProtoGentypes,\n  SingleGenerationRequest,\n  EmbeddingResults__Output,\n  type SubtypeConstructor,\n} from \"@/adapters/ibm-vllm/types.js\";\nimport { parseEnv } from \"@/internals/env.js\";\nimport { z } from \"zod\";\nimport { Cache } from \"@/cache/decoratorCache.js\";\nimport { Serializable } from \"@/internals/serializable.js\";\nimport PQueue from \"p-queue-compat\";\nimport { getProp } from \"@/internals/helpers/object.js\";\n\nconst GENERATION_PROTO_PATH = new URL(\"./proto/generation.proto\", import.meta.url);\nconst NLP_PROTO_PATH = new URL(\"./proto/caikit_runtime_Nlp.proto\", import.meta.url);\n\ninterface ClientOptions {\n  modelRouterSubdomain?: string;\n  url: string;\n  credentials: {\n    rootCert: string;\n    certChain: string;\n    privateKey: string;\n  };\n  grpcClientOptions: GRPCClientOptions;\n  clientShutdownDelay: number;\n  limits?: {\n    concurrency?: {\n      embeddings?: number;\n    };\n  };\n}\n\nconst defaultOptions = {\n  clientShutdownDelay: 5 * 60 * 1000,\n  grpcClientOptions: {\n    // This is needed, otherwise communication to DIPC cluster fails with \"Dropped connection\" error after +- 50 secs\n    \"grpc.keepalive_time_ms\": 25000,\n    \"grpc.max_receive_message_length\": 32 * 1024 * 1024, // 32MiB\n  },\n};\n\nconst grpcConfig: Options = {\n  longs: Number,\n  enums: String,\n  arrays: true,\n  objects: true,\n  oneofs: true,\n  keepCase: true,\n  defaults: true,\n};\n\nconst generationPackage = grpc.loadPackageDefinition(\n  protoLoader.loadSync([GENERATION_PROTO_PATH.pathname], grpcConfig),\n) as unknown as GenerationProtoGentypes;\n\nconst embeddingsPackage = grpc.loadPackageDefinition(\n  protoLoader.loadSync([NLP_PROTO_PATH.pathname], grpcConfig),\n) as unknown as CaikitProtoGentypes;\n\nconst GRPC_CLIENT_TTL = 15 * 60 * 1000;\n\ntype CallOptions = GRPCCallOptions & { signal?: AbortSignal };\ntype RequiredModel<T> = T & { model_id: string };\n\nexport class Client extends Serializable {\n  public readonly options: ClientOptions;\n  private usedDefaultCredentials = false;\n\n  @Cache({ ttl: GRPC_CLIENT_TTL })\n  protected getClient<T extends { close: () => void }>(\n    modelId: string,\n    factory: SubtypeConstructor<typeof grpc.Client, T>,\n  ): T {\n    const modelSpecificUrl = this.options.url.replace(/{model_id}/, modelId.replaceAll(\"/\", \"--\"));\n    const client = new factory(\n      modelSpecificUrl,\n      grpc.credentials.createSsl(\n        Buffer.from(this.options.credentials.rootCert),\n        Buffer.from(this.options.credentials.privateKey),\n        Buffer.from(this.options.credentials.certChain),\n      ),\n      this.options.grpcClientOptions,\n    );\n    setTimeout(() => {\n      try {\n        client.close();\n      } catch {\n        /* empty */\n      }\n    }, GRPC_CLIENT_TTL + this.options.clientShutdownDelay).unref();\n    return client;\n  }\n\n  protected getDefaultCredentials() {\n    this.usedDefaultCredentials = true;\n    return {\n      rootCert: parseEnv(\"IBM_VLLM_ROOT_CERT\", z.string()),\n      privateKey: parseEnv(\"IBM_VLLM_PRIVATE_KEY\", z.string()),\n      certChain: parseEnv(\"IBM_VLLM_CERT_CHAIN\", z.string()),\n    };\n  }\n\n  constructor(options?: Partial<ClientOptions>) {\n    super();\n    this.options = {\n      ...defaultOptions,\n      ...options,\n      url: options?.url ?? parseEnv(\"IBM_VLLM_URL\", z.string()),\n      credentials: options?.credentials ?? this.getDefaultCredentials(),\n    };\n  }\n\n  async modelInfo(request: RequiredModel<ModelInfoRequest>, options?: CallOptions) {\n    const client = this.getClient(request.model_id, generationPackage.fmaas.GenerationService);\n    return this.wrapGrpcCall<ModelInfoRequest, ModelInfoResponse__Output>(\n      client.modelInfo.bind(client),\n    )(request, options);\n  }\n\n  async generate(request: RequiredModel<BatchedGenerationRequest>, options?: CallOptions) {\n    const client = this.getClient(request.model_id, generationPackage.fmaas.GenerationService);\n    return this.wrapGrpcCall<BatchedGenerationRequest, BatchedGenerationResponse__Output>(\n      client.generate.bind(client),\n    )(request, options);\n  }\n\n  async generateStream(request: RequiredModel<SingleGenerationRequest>, options?: CallOptions) {\n    const client = this.getClient(request.model_id, generationPackage.fmaas.GenerationService);\n    return this.wrapGrpcStream<SingleGenerationRequest, GenerationRequest__Output>(\n      client.generateStream.bind(client),\n    )(request, options);\n  }\n\n  async tokenize(request: RequiredModel<BatchedTokenizeRequest>, options?: CallOptions) {\n    const client = this.getClient(request.model_id, generationPackage.fmaas.GenerationService);\n    return this.wrapGrpcCall<BatchedTokenizeRequest, BatchedTokenizeResponse__Output>(\n      client.tokenize.bind(client),\n    )(request, options);\n  }\n\n  async embed(request: RequiredModel<EmbeddingTasksRequest>, options?: CallOptions) {\n    const client = this.getClient(\n      request.model_id,\n      embeddingsPackage.caikit.runtime.Nlp.NlpService,\n    );\n    return this.queues.embeddings.add(\n      () =>\n        this.wrapGrpcCall<EmbeddingTasksRequest, EmbeddingResults__Output>(\n          client.embeddingTasksPredict.bind(client),\n        )(request, options),\n      { throwOnTimeout: true },\n    );\n  }\n\n  protected wrapGrpcCall<TRequest, TResponse>(\n    fn: (\n      request: TRequest,\n      metadata: Metadata,\n      options: CallOptions,\n      callback: UnaryCallback<TResponse>,\n    ) => ClientUnaryCall,\n  ) {\n    return (request: TRequest, { signal, ...options }: CallOptions = {}): Promise<TResponse> => {\n      const metadata = new Metadata();\n      const modelId = getProp(request, [\"model_id\"]);\n      if (modelId) {\n        metadata.add(\"mm-model-id\", modelId);\n      }\n\n      return new Promise<TResponse>((resolve, reject) => {\n        const call = fn(request, metadata, options, (err, response) => {\n          signal?.removeEventListener(\"abort\", abortHandler);\n          if (err) {\n            reject(err);\n          } else {\n            if (response === undefined) {\n              reject(new FrameworkError(\"Invalid response from GRPC server\"));\n            } else {\n              resolve(response);\n            }\n          }\n        });\n        const abortHandler = () => call.cancel();\n        signal?.addEventListener(\"abort\", abortHandler, { once: true });\n      });\n    };\n  }\n\n  protected wrapGrpcStream<TRequest, TResponse>(\n    fn: (request: TRequest, options: CallOptions) => ClientReadableStream<TResponse>,\n  ) {\n    return async (\n      request: TRequest,\n      { signal, ...options }: CallOptions = {},\n    ): Promise<ClientReadableStream<TResponse>> => {\n      const stream = fn(request, options);\n      const abortHandler = () => stream.cancel();\n      signal?.addEventListener(\"abort\", abortHandler, { once: true });\n      stream.addListener(\"close\", () => signal?.removeEventListener(\"abort\", abortHandler));\n      return stream;\n    };\n  }\n\n  createSnapshot() {\n    if (!this.usedDefaultCredentials) {\n      throw new ValueError(\n        \"Cannot serialize a client with credentials passed directly. Use environment variables.\",\n      );\n    }\n    return {\n      options: R.omit(this.options, [\"credentials\"]),\n    };\n  }\n\n  loadSnapshot(snapshot: ReturnType<typeof this.createSnapshot>) {\n    Object.assign(this, snapshot);\n    this.options.credentials = this.getDefaultCredentials();\n  }\n\n  @Cache({ enumerable: false })\n  protected get queues() {\n    return {\n      embeddings: new PQueue({\n        concurrency: this.options.limits?.concurrency?.embeddings ?? 5,\n        throwOnTimeout: true,\n      }),\n    };\n  }\n}\n"]}