@langchain/google-common 2.1.18 → 2.1.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (108) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/dist/auth.cjs +1 -2
  3. package/dist/auth.cjs.map +1 -1
  4. package/dist/auth.d.cts.map +1 -1
  5. package/dist/auth.d.ts.map +1 -1
  6. package/dist/auth.js +1 -2
  7. package/dist/auth.js.map +1 -1
  8. package/dist/chat_models.cjs +24 -27
  9. package/dist/chat_models.cjs.map +1 -1
  10. package/dist/chat_models.d.cts.map +1 -1
  11. package/dist/chat_models.d.ts.map +1 -1
  12. package/dist/chat_models.js +7 -9
  13. package/dist/chat_models.js.map +1 -1
  14. package/dist/connection.cjs +16 -26
  15. package/dist/connection.cjs.map +1 -1
  16. package/dist/connection.d.cts.map +1 -1
  17. package/dist/connection.d.ts.map +1 -1
  18. package/dist/connection.js +13 -22
  19. package/dist/connection.js.map +1 -1
  20. package/dist/embeddings.cjs +12 -22
  21. package/dist/embeddings.cjs.map +1 -1
  22. package/dist/embeddings.d.cts +0 -1
  23. package/dist/embeddings.d.cts.map +1 -1
  24. package/dist/embeddings.d.ts +0 -1
  25. package/dist/embeddings.d.ts.map +1 -1
  26. package/dist/embeddings.js +7 -16
  27. package/dist/embeddings.js.map +1 -1
  28. package/dist/experimental/media.cjs +41 -70
  29. package/dist/experimental/media.cjs.map +1 -1
  30. package/dist/experimental/media.d.cts.map +1 -1
  31. package/dist/experimental/media.d.ts.map +1 -1
  32. package/dist/experimental/media.js +36 -65
  33. package/dist/experimental/media.js.map +1 -1
  34. package/dist/experimental/utils/media_core.cjs +22 -39
  35. package/dist/experimental/utils/media_core.cjs.map +1 -1
  36. package/dist/experimental/utils/media_core.d.cts.map +1 -1
  37. package/dist/experimental/utils/media_core.d.ts.map +1 -1
  38. package/dist/experimental/utils/media_core.js +16 -33
  39. package/dist/experimental/utils/media_core.js.map +1 -1
  40. package/dist/index.cjs +1 -0
  41. package/dist/llms.cjs +14 -19
  42. package/dist/llms.cjs.map +1 -1
  43. package/dist/llms.d.cts.map +1 -1
  44. package/dist/llms.d.ts.map +1 -1
  45. package/dist/llms.js +4 -8
  46. package/dist/llms.js.map +1 -1
  47. package/dist/output_parsers.cjs +12 -29
  48. package/dist/output_parsers.cjs.map +1 -1
  49. package/dist/output_parsers.d.cts.map +1 -1
  50. package/dist/output_parsers.d.ts.map +1 -1
  51. package/dist/output_parsers.js +10 -26
  52. package/dist/output_parsers.js.map +1 -1
  53. package/dist/profiles.cjs +100 -17
  54. package/dist/profiles.cjs.map +1 -1
  55. package/dist/profiles.js +100 -17
  56. package/dist/profiles.js.map +1 -1
  57. package/dist/types-anthropic.d.cts.map +1 -1
  58. package/dist/types-anthropic.d.ts.map +1 -1
  59. package/dist/types.cjs +1 -0
  60. package/dist/types.cjs.map +1 -1
  61. package/dist/types.d.cts +0 -1
  62. package/dist/types.d.cts.map +1 -1
  63. package/dist/types.d.ts +0 -1
  64. package/dist/types.d.ts.map +1 -1
  65. package/dist/types.js.map +1 -1
  66. package/dist/utils/anthropic.cjs +73 -113
  67. package/dist/utils/anthropic.cjs.map +1 -1
  68. package/dist/utils/anthropic.js +63 -102
  69. package/dist/utils/anthropic.js.map +1 -1
  70. package/dist/utils/common.cjs +10 -13
  71. package/dist/utils/common.cjs.map +1 -1
  72. package/dist/utils/common.d.cts.map +1 -1
  73. package/dist/utils/common.d.ts.map +1 -1
  74. package/dist/utils/common.js +6 -8
  75. package/dist/utils/common.js.map +1 -1
  76. package/dist/utils/failed_handler.cjs +1 -2
  77. package/dist/utils/failed_handler.cjs.map +1 -1
  78. package/dist/utils/failed_handler.d.cts.map +1 -1
  79. package/dist/utils/failed_handler.d.ts.map +1 -1
  80. package/dist/utils/failed_handler.js +1 -2
  81. package/dist/utils/failed_handler.js.map +1 -1
  82. package/dist/utils/gemini.cjs +83 -135
  83. package/dist/utils/gemini.cjs.map +1 -1
  84. package/dist/utils/gemini.d.cts.map +1 -1
  85. package/dist/utils/gemini.d.ts.map +1 -1
  86. package/dist/utils/gemini.js +58 -109
  87. package/dist/utils/gemini.js.map +1 -1
  88. package/dist/utils/index.cjs +1 -0
  89. package/dist/utils/palm.d.cts.map +1 -1
  90. package/dist/utils/palm.d.ts.map +1 -1
  91. package/dist/utils/safety.cjs.map +1 -1
  92. package/dist/utils/safety.d.cts.map +1 -1
  93. package/dist/utils/safety.d.ts.map +1 -1
  94. package/dist/utils/safety.js.map +1 -1
  95. package/dist/utils/stream.cjs +5 -9
  96. package/dist/utils/stream.cjs.map +1 -1
  97. package/dist/utils/stream.d.cts.map +1 -1
  98. package/dist/utils/stream.d.ts.map +1 -1
  99. package/dist/utils/stream.js +5 -9
  100. package/dist/utils/stream.js.map +1 -1
  101. package/dist/utils/zod_to_gemini_parameters.cjs +4 -7
  102. package/dist/utils/zod_to_gemini_parameters.cjs.map +1 -1
  103. package/dist/utils/zod_to_gemini_parameters.d.cts.map +1 -1
  104. package/dist/utils/zod_to_gemini_parameters.d.ts.map +1 -1
  105. package/dist/utils/zod_to_gemini_parameters.js +2 -4
  106. package/dist/utils/zod_to_gemini_parameters.js.map +1 -1
  107. package/package.json +3 -3
  108. package/dist/_virtual/rolldown_runtime.cjs +0 -25
@@ -12,7 +12,7 @@ var GoogleMultipartUploadConnection = class extends GoogleHostConnection {
12
12
  async _body(separator, data, metadata) {
13
13
  const contentType = data.mimetype;
14
14
  const { encoded, encoding } = await data.encode();
15
- const body = [
15
+ return [
16
16
  `--${separator}`,
17
17
  "Content-Type: application/json; charset=UTF-8",
18
18
  "",
@@ -24,8 +24,7 @@ var GoogleMultipartUploadConnection = class extends GoogleHostConnection {
24
24
  "",
25
25
  encoded,
26
26
  `--${separator}--`
27
- ];
28
- return body.join("\n");
27
+ ].join("\n");
29
28
  }
30
29
  async request(data, metadata, options) {
31
30
  const separator = `separator-${Date.now()}`;
@@ -34,8 +33,7 @@ var GoogleMultipartUploadConnection = class extends GoogleHostConnection {
34
33
  "Content-Type": `multipart/related; boundary=${separator}`,
35
34
  "X-Goog-Upload-Protocol": "multipart"
36
35
  };
37
- const response = this._request(body, options, requestHeaders);
38
- return response;
36
+ return this._request(body, options, requestHeaders);
39
37
  }
40
38
  };
41
39
  var GoogleDownloadConnection = class extends GoogleHostConnection {
@@ -61,28 +59,18 @@ var BlobStoreGoogle = class extends BlobStore {
61
59
  }
62
60
  async _set(keyValuePair) {
63
61
  const [, blob] = keyValuePair;
64
- const setMetadata = this.buildSetMetadata(keyValuePair);
65
- const metadata = setMetadata;
66
- const options = {};
67
- const connection = this.buildSetConnection(keyValuePair);
68
- const response = await connection.request(blob, metadata, options);
69
- return response;
62
+ const metadata = this.buildSetMetadata(keyValuePair);
63
+ return await this.buildSetConnection(keyValuePair).request(blob, metadata, {});
70
64
  }
71
65
  async mset(keyValuePairs) {
72
66
  const ret = keyValuePairs.map((keyValue) => this._set(keyValue));
73
67
  await Promise.all(ret);
74
68
  }
75
69
  async _getMetadata(key) {
76
- const connection = this.buildGetMetadataConnection(key);
77
- const options = {};
78
- const response = await connection.request(options);
79
- return response.data;
70
+ return (await this.buildGetMetadataConnection(key).request({})).data;
80
71
  }
81
72
  async _getData(key) {
82
- const connection = this.buildGetDataConnection(key);
83
- const options = {};
84
- const response = await connection.request(options);
85
- return response.data;
73
+ return (await this.buildGetDataConnection(key).request({})).data;
86
74
  }
87
75
  _getMimetypeFromMetadata(metadata) {
88
76
  return metadata.contentType;
@@ -90,22 +78,18 @@ var BlobStoreGoogle = class extends BlobStore {
90
78
  async _get(key) {
91
79
  const metadata = await this._getMetadata(key);
92
80
  const data = await this._getData(key);
93
- if (data && metadata) {
94
- const ret = await MediaBlob.fromBlob(data, {
95
- metadata,
96
- path: key
97
- });
98
- return ret;
99
- } else return void 0;
81
+ if (data && metadata) return await MediaBlob.fromBlob(data, {
82
+ metadata,
83
+ path: key
84
+ });
85
+ else return;
100
86
  }
101
87
  async mget(keys) {
102
88
  const ret = keys.map((key) => this._get(key));
103
89
  return await Promise.all(ret);
104
90
  }
105
91
  async _del(key) {
106
- const connection = this.buildDeleteConnection(key);
107
- const options = {};
108
- await connection.request(options);
92
+ await this.buildDeleteConnection(key).request({});
109
93
  }
110
94
  async mdelete(keys) {
111
95
  const ret = keys.map((key) => this._del(key));
@@ -179,8 +163,7 @@ var GoogleCloudStorageRawConnection = class extends GoogleDownloadRawConnection
179
163
  }
180
164
  async buildUrl() {
181
165
  const path = encodeURIComponent(this.uri.path);
182
- const ret = `https://storage.googleapis.com/storage/${this.apiVersion}/b/${this.uri.bucket}/o/${path}?alt=media`;
183
- return ret;
166
+ return `https://storage.googleapis.com/storage/${this.apiVersion}/b/${this.uri.bucket}/o/${path}?alt=media`;
184
167
  }
185
168
  };
186
169
  var BlobStoreGoogleCloudStorageBase = class extends BlobStoreGoogle {
@@ -194,40 +177,34 @@ var BlobStoreGoogleCloudStorageBase = class extends BlobStoreGoogle {
194
177
  };
195
178
  }
196
179
  buildSetConnection([key, _blob]) {
197
- const params = {
180
+ return new GoogleCloudStorageUploadConnection({
198
181
  ...this.params,
199
182
  uri: key
200
- };
201
- return new GoogleCloudStorageUploadConnection(params, this.caller, this.client);
183
+ }, this.caller, this.client);
202
184
  }
203
185
  buildSetMetadata([key, blob]) {
204
- const uri = new GoogleCloudStorageUri(key);
205
- const ret = {
206
- name: uri.path,
186
+ return {
187
+ name: new GoogleCloudStorageUri(key).path,
207
188
  metadata: blob.metadata,
208
189
  contentType: blob.mimetype
209
190
  };
210
- return ret;
211
191
  }
212
192
  buildGetMetadataConnection(key) {
213
- const params = {
193
+ return new GoogleCloudStorageDownloadConnection({
214
194
  uri: key,
215
195
  method: "GET",
216
196
  alt: void 0
217
- };
218
- return new GoogleCloudStorageDownloadConnection(params, this.caller, this.client);
197
+ }, this.caller, this.client);
219
198
  }
220
199
  buildGetDataConnection(key) {
221
- const params = { uri: key };
222
- return new GoogleCloudStorageRawConnection(params, this.caller, this.client);
200
+ return new GoogleCloudStorageRawConnection({ uri: key }, this.caller, this.client);
223
201
  }
224
202
  buildDeleteConnection(key) {
225
- const params = {
203
+ return new GoogleCloudStorageDownloadConnection({
226
204
  uri: key,
227
205
  method: "DELETE",
228
206
  alt: void 0
229
- };
230
- return new GoogleCloudStorageDownloadConnection(params, this.caller, this.client);
207
+ }, this.caller, this.client);
231
208
  }
232
209
  };
233
210
  var AIStudioMediaBlob = class extends MediaBlob {
@@ -249,8 +226,7 @@ var AIStudioMediaBlob = class extends MediaBlob {
249
226
  }
250
227
  get isExpired() {
251
228
  const now = (/* @__PURE__ */ new Date()).toISOString();
252
- const exp = this.metadata?.expirationTime ?? now;
253
- return exp <= now;
229
+ return (this.metadata?.expirationTime ?? now) <= now;
254
230
  }
255
231
  };
256
232
  var AIStudioFileUploadConnection = class extends GoogleMultipartUploadConnection {
@@ -330,38 +306,33 @@ var BlobStoreAIStudioFileBase = class extends BlobStoreGoogle {
330
306
  return {};
331
307
  }
332
308
  buildGetMetadataConnection(key) {
333
- const params = {
309
+ return new AIStudioFileDownloadConnection({
334
310
  ...this.params,
335
311
  method: "GET",
336
312
  name: this._pathToName(key)
337
- };
338
- return new AIStudioFileDownloadConnection(params, this.caller, this.client);
313
+ }, this.caller, this.client);
339
314
  }
340
315
  buildGetDataConnection(_key) {
341
316
  throw new Error("AI Studio File API does not provide data");
342
317
  }
343
318
  async _get(key) {
344
319
  const metadata = await this._getMetadata(key);
345
- if (metadata) {
346
- const contentType = metadata?.mimeType ?? "application/octet-stream";
347
- const data = {
320
+ if (metadata) return new MediaBlob({
321
+ path: key,
322
+ data: {
348
323
  value: "",
349
- type: contentType
350
- };
351
- return new MediaBlob({
352
- path: key,
353
- data,
354
- metadata
355
- });
356
- } else return void 0;
324
+ type: metadata?.mimeType ?? "application/octet-stream"
325
+ },
326
+ metadata
327
+ });
328
+ else return;
357
329
  }
358
330
  buildDeleteConnection(key) {
359
- const params = {
331
+ return new AIStudioFileDownloadConnection({
360
332
  ...this.params,
361
333
  method: "DELETE",
362
334
  name: this._pathToName(key)
363
- };
364
- return new AIStudioFileDownloadConnection(params, this.caller, this.client);
335
+ }, this.caller, this.client);
365
336
  }
366
337
  };
367
338
 
@@ -1 +1 @@
1
- {"version":3,"file":"media.js","names":["fields: GoogleConnectionParams<AuthOptions> | undefined","caller: AsyncCaller","client: GoogleAbstractedClient","separator: string","data: MediaBlob","metadata: Record<string, unknown>","options: CallOptions","fields?: BlobStoreGoogleParams<AuthOptions>","keyValuePair: [string, MediaBlob]","keyValuePairs: [string, MediaBlob][]","key: string","keys: string[]","_prefix: string | undefined","uri: string","fields: GoogleCloudStorageUploadConnectionParams<AuthOptions>","fields: GoogleCloudStorageDownloadConnectionParams<AuthOptions>","fields: GoogleCloudStorageRawConnectionParams<AuthOptions>","fields: BlobStoreGoogleCloudStorageBaseParams<AuthOptions>","params: GoogleCloudStorageUploadConnectionParams<AuthOptions>","ret: GoogleCloudStorageObject","params: GoogleCloudStorageDownloadConnectionParams<AuthOptions>","params: GoogleCloudStorageRawConnectionParams<AuthOptions>","value: string","field: string","fields: AIStudioFileDownloadConnectionParams<AuthOptions>","fields?: BlobStoreAIStudioFileBaseParams<AuthOptions>","params: BlobStoreAIStudioFileBaseParams<AuthOptions>","path: string","apiKey: string","params: AIStudioFileDownloadConnectionParams<AuthOptions>","_key: string","data: MediaBlobData"],"sources":["../../src/experimental/media.ts"],"sourcesContent":["import {\n AsyncCaller,\n AsyncCallerCallOptions,\n AsyncCallerParams,\n} from \"@langchain/core/utils/async_caller\";\nimport { getEnvironmentVariable } from \"@langchain/core/utils/env\";\nimport {\n MediaBlob,\n BlobStore,\n BlobStoreOptions,\n MediaBlobData,\n} from \"./utils/media_core.js\";\nimport {\n GoogleConnectionParams,\n GoogleRawResponse,\n GoogleResponse,\n} from \"../types.js\";\nimport { GoogleHostConnection, GoogleRawConnection } from \"../connection.js\";\nimport {\n ApiKeyGoogleAuth,\n GoogleAbstractedClient,\n GoogleAbstractedClientOpsMethod,\n} from \"../auth.js\";\n\nexport interface GoogleUploadConnectionParams<\n AuthOptions,\n> extends GoogleConnectionParams<AuthOptions> {}\n\nexport abstract class GoogleMultipartUploadConnection<\n CallOptions extends AsyncCallerCallOptions,\n ResponseType extends GoogleResponse,\n AuthOptions,\n> extends GoogleHostConnection<CallOptions, ResponseType, AuthOptions> {\n constructor(\n fields: GoogleConnectionParams<AuthOptions> | undefined,\n caller: AsyncCaller,\n client: GoogleAbstractedClient\n ) {\n super(fields, caller, client);\n }\n\n async _body(\n separator: string,\n data: MediaBlob,\n metadata: Record<string, unknown>\n ): Promise<string> {\n const contentType = data.mimetype;\n const { encoded, encoding } = await data.encode();\n const body = [\n `--${separator}`,\n \"Content-Type: application/json; charset=UTF-8\",\n \"\",\n JSON.stringify(metadata),\n \"\",\n `--${separator}`,\n `Content-Type: ${contentType}`,\n `Content-Transfer-Encoding: ${encoding}`,\n \"\",\n encoded,\n `--${separator}--`,\n ];\n return body.join(\"\\n\");\n }\n\n async request(\n data: MediaBlob,\n metadata: Record<string, unknown>,\n options: CallOptions\n ): Promise<ResponseType> {\n const separator = `separator-${Date.now()}`;\n const body = await this._body(separator, data, metadata);\n const requestHeaders = {\n \"Content-Type\": `multipart/related; boundary=${separator}`,\n \"X-Goog-Upload-Protocol\": \"multipart\",\n };\n const response = this._request(body, options, requestHeaders);\n return response;\n }\n}\n\nexport abstract class GoogleDownloadConnection<\n CallOptions extends AsyncCallerCallOptions,\n ResponseType extends GoogleResponse,\n AuthOptions,\n> extends GoogleHostConnection<CallOptions, ResponseType, AuthOptions> {\n async request(options: CallOptions): Promise<ResponseType> {\n return this._request(undefined, options);\n }\n}\n\nexport abstract class GoogleDownloadRawConnection<\n CallOptions extends AsyncCallerCallOptions,\n AuthOptions,\n> extends GoogleRawConnection<CallOptions, AuthOptions> {\n buildMethod(): GoogleAbstractedClientOpsMethod {\n return \"GET\";\n }\n\n async request(options: CallOptions): Promise<GoogleRawResponse> {\n return this._request(undefined, options);\n }\n}\n\nexport interface BlobStoreGoogleParams<AuthOptions>\n extends\n GoogleConnectionParams<AuthOptions>,\n AsyncCallerParams,\n BlobStoreOptions {}\n\nexport abstract class BlobStoreGoogle<\n ResponseType extends GoogleResponse,\n AuthOptions,\n> extends BlobStore {\n caller: AsyncCaller;\n\n client: GoogleAbstractedClient;\n\n constructor(fields?: BlobStoreGoogleParams<AuthOptions>) {\n super(fields);\n this.caller = new AsyncCaller(fields ?? {});\n this.client = this.buildClient(fields);\n }\n\n abstract buildClient(\n fields?: BlobStoreGoogleParams<AuthOptions>\n ): GoogleAbstractedClient;\n\n abstract buildSetMetadata([key, blob]: [string, MediaBlob]): Record<\n string,\n unknown\n >;\n\n abstract buildSetConnection([key, blob]: [\n string,\n MediaBlob,\n ]): GoogleMultipartUploadConnection<\n AsyncCallerCallOptions,\n ResponseType,\n AuthOptions\n >;\n\n async _set(keyValuePair: [string, MediaBlob]): Promise<ResponseType> {\n const [, blob] = keyValuePair;\n const setMetadata = this.buildSetMetadata(keyValuePair);\n const metadata = setMetadata;\n const options = {};\n const connection = this.buildSetConnection(keyValuePair);\n const response = await connection.request(blob, metadata, options);\n return response;\n }\n\n async mset(keyValuePairs: [string, MediaBlob][]): Promise<void> {\n const ret = keyValuePairs.map((keyValue) => this._set(keyValue));\n await Promise.all(ret);\n }\n\n abstract buildGetMetadataConnection(\n key: string\n ): GoogleDownloadConnection<\n AsyncCallerCallOptions,\n ResponseType,\n AuthOptions\n >;\n\n async _getMetadata(key: string): Promise<Record<string, unknown>> {\n const connection = this.buildGetMetadataConnection(key);\n const options = {};\n const response = await connection.request(options);\n return response.data;\n }\n\n abstract buildGetDataConnection(\n key: string\n ): GoogleDownloadRawConnection<AsyncCallerCallOptions, AuthOptions>;\n\n async _getData(key: string): Promise<Blob> {\n const connection = this.buildGetDataConnection(key);\n const options = {};\n const response = await connection.request(options);\n return response.data;\n }\n\n _getMimetypeFromMetadata(metadata: Record<string, unknown>): string {\n return metadata.contentType as string;\n }\n\n async _get(key: string): Promise<MediaBlob | undefined> {\n const metadata = await this._getMetadata(key);\n const data = await this._getData(key);\n if (data && metadata) {\n const ret = await MediaBlob.fromBlob(data, { metadata, path: key });\n return ret;\n } else {\n return undefined;\n }\n }\n\n async mget(keys: string[]): Promise<(MediaBlob | undefined)[]> {\n const ret = keys.map((key) => this._get(key));\n return await Promise.all(ret);\n }\n\n abstract buildDeleteConnection(\n key: string\n ): GoogleDownloadConnection<\n AsyncCallerCallOptions,\n GoogleResponse,\n AuthOptions\n >;\n\n async _del(key: string): Promise<void> {\n const connection = this.buildDeleteConnection(key);\n const options = {};\n await connection.request(options);\n }\n\n async mdelete(keys: string[]): Promise<void> {\n const ret = keys.map((key) => this._del(key));\n await Promise.all(ret);\n }\n\n // eslint-disable-next-line require-yield\n async *yieldKeys(_prefix: string | undefined): AsyncGenerator<string> {\n // TODO: Implement. Most have an implementation that uses nextToken.\n throw new Error(\"yieldKeys is not implemented\");\n }\n}\n\n/**\n * Based on https://cloud.google.com/storage/docs/json_api/v1/objects#resource\n */\nexport interface GoogleCloudStorageObject extends Record<string, unknown> {\n id?: string;\n name?: string;\n contentType?: string;\n metadata?: Record<string, unknown>;\n // This is incomplete.\n}\n\nexport interface GoogleCloudStorageResponse extends GoogleResponse {\n data: GoogleCloudStorageObject;\n}\n\nexport type BucketAndPath = {\n bucket: string;\n path: string;\n};\n\nexport class GoogleCloudStorageUri {\n static uriRegexp = /gs:\\/\\/([a-z0-9][a-z0-9._-]+[a-z0-9])\\/(.*)/;\n\n bucket: string;\n\n path: string;\n\n constructor(uri: string) {\n const bucketAndPath = GoogleCloudStorageUri.uriToBucketAndPath(uri);\n this.bucket = bucketAndPath.bucket;\n this.path = bucketAndPath.path;\n }\n\n get uri() {\n return `gs://${this.bucket}/${this.path}`;\n }\n\n get isValid() {\n return (\n typeof this.bucket !== \"undefined\" && typeof this.path !== \"undefined\"\n );\n }\n\n static uriToBucketAndPath(uri: string): BucketAndPath {\n const match = this.uriRegexp.exec(uri);\n if (!match) {\n throw new Error(`Invalid gs:// URI: ${uri}`);\n }\n return {\n bucket: match[1],\n path: match[2],\n };\n }\n\n static isValidUri(uri: string): boolean {\n return this.uriRegexp.test(uri);\n }\n}\n\nexport interface GoogleCloudStorageConnectionParams {\n uri: string;\n}\n\nexport interface GoogleCloudStorageUploadConnectionParams<AuthOptions>\n extends\n GoogleUploadConnectionParams<AuthOptions>,\n GoogleCloudStorageConnectionParams {}\n\nexport class GoogleCloudStorageUploadConnection<\n AuthOptions,\n> extends GoogleMultipartUploadConnection<\n AsyncCallerCallOptions,\n GoogleCloudStorageResponse,\n AuthOptions\n> {\n uri: GoogleCloudStorageUri;\n\n constructor(\n fields: GoogleCloudStorageUploadConnectionParams<AuthOptions>,\n caller: AsyncCaller,\n client: GoogleAbstractedClient\n ) {\n super(fields, caller, client);\n this.uri = new GoogleCloudStorageUri(fields.uri);\n }\n\n async buildUrl(): Promise<string> {\n return `https://storage.googleapis.com/upload/storage/${this.apiVersion}/b/${this.uri.bucket}/o?uploadType=multipart`;\n }\n}\n\nexport interface GoogleCloudStorageDownloadConnectionParams<AuthOptions>\n extends\n GoogleCloudStorageConnectionParams,\n GoogleConnectionParams<AuthOptions> {\n method: GoogleAbstractedClientOpsMethod;\n alt: \"media\" | undefined;\n}\n\nexport class GoogleCloudStorageDownloadConnection<\n ResponseType extends GoogleResponse,\n AuthOptions,\n> extends GoogleDownloadConnection<\n AsyncCallerCallOptions,\n ResponseType,\n AuthOptions\n> {\n uri: GoogleCloudStorageUri;\n\n method: GoogleAbstractedClientOpsMethod;\n\n alt: \"media\" | undefined;\n\n constructor(\n fields: GoogleCloudStorageDownloadConnectionParams<AuthOptions>,\n caller: AsyncCaller,\n client: GoogleAbstractedClient\n ) {\n super(fields, caller, client);\n this.uri = new GoogleCloudStorageUri(fields.uri);\n this.method = fields.method;\n this.alt = fields.alt;\n }\n\n buildMethod(): GoogleAbstractedClientOpsMethod {\n return this.method;\n }\n\n async buildUrl(): Promise<string> {\n const path = encodeURIComponent(this.uri.path);\n const ret = `https://storage.googleapis.com/storage/${this.apiVersion}/b/${this.uri.bucket}/o/${path}`;\n return this.alt ? `${ret}?alt=${this.alt}` : ret;\n }\n}\n\nexport interface GoogleCloudStorageRawConnectionParams<AuthOptions>\n extends\n GoogleCloudStorageConnectionParams,\n GoogleConnectionParams<AuthOptions> {}\n\nexport class GoogleCloudStorageRawConnection<\n AuthOptions,\n> extends GoogleDownloadRawConnection<AsyncCallerCallOptions, AuthOptions> {\n uri: GoogleCloudStorageUri;\n\n constructor(\n fields: GoogleCloudStorageRawConnectionParams<AuthOptions>,\n caller: AsyncCaller,\n client: GoogleAbstractedClient\n ) {\n super(fields, caller, client);\n this.uri = new GoogleCloudStorageUri(fields.uri);\n }\n\n async buildUrl(): Promise<string> {\n const path = encodeURIComponent(this.uri.path);\n const ret = `https://storage.googleapis.com/storage/${this.apiVersion}/b/${this.uri.bucket}/o/${path}?alt=media`;\n return ret;\n }\n}\n\nexport interface BlobStoreGoogleCloudStorageBaseParams<\n AuthOptions,\n> extends BlobStoreGoogleParams<AuthOptions> {\n uriPrefix: GoogleCloudStorageUri;\n}\n\nexport abstract class BlobStoreGoogleCloudStorageBase<\n AuthOptions,\n> extends BlobStoreGoogle<GoogleCloudStorageResponse, AuthOptions> {\n params: BlobStoreGoogleCloudStorageBaseParams<AuthOptions>;\n\n constructor(fields: BlobStoreGoogleCloudStorageBaseParams<AuthOptions>) {\n super(fields);\n this.params = fields;\n this.defaultStoreOptions = {\n ...this.defaultStoreOptions,\n pathPrefix: fields.uriPrefix.uri,\n };\n }\n\n buildSetConnection([key, _blob]: [\n string,\n MediaBlob,\n ]): GoogleMultipartUploadConnection<\n AsyncCallerCallOptions,\n GoogleCloudStorageResponse,\n AuthOptions\n > {\n const params: GoogleCloudStorageUploadConnectionParams<AuthOptions> = {\n ...this.params,\n uri: key,\n };\n return new GoogleCloudStorageUploadConnection<AuthOptions>(\n params,\n this.caller,\n this.client\n );\n }\n\n buildSetMetadata([key, blob]: [string, MediaBlob]): Record<string, unknown> {\n const uri = new GoogleCloudStorageUri(key);\n const ret: GoogleCloudStorageObject = {\n name: uri.path,\n metadata: blob.metadata,\n contentType: blob.mimetype,\n };\n return ret;\n }\n\n buildGetMetadataConnection(\n key: string\n ): GoogleDownloadConnection<\n AsyncCallerCallOptions,\n GoogleCloudStorageResponse,\n AuthOptions\n > {\n const params: GoogleCloudStorageDownloadConnectionParams<AuthOptions> = {\n uri: key,\n method: \"GET\",\n alt: undefined,\n };\n return new GoogleCloudStorageDownloadConnection<\n GoogleCloudStorageResponse,\n AuthOptions\n >(params, this.caller, this.client);\n }\n\n buildGetDataConnection(\n key: string\n ): GoogleDownloadRawConnection<AsyncCallerCallOptions, AuthOptions> {\n const params: GoogleCloudStorageRawConnectionParams<AuthOptions> = {\n uri: key,\n };\n return new GoogleCloudStorageRawConnection<AuthOptions>(\n params,\n this.caller,\n this.client\n );\n }\n\n buildDeleteConnection(\n key: string\n ): GoogleDownloadConnection<\n AsyncCallerCallOptions,\n GoogleResponse,\n AuthOptions\n > {\n const params: GoogleCloudStorageDownloadConnectionParams<AuthOptions> = {\n uri: key,\n method: \"DELETE\",\n alt: undefined,\n };\n return new GoogleCloudStorageDownloadConnection<\n GoogleResponse,\n AuthOptions\n >(params, this.caller, this.client);\n }\n}\n\nexport type AIStudioFileState =\n | \"PROCESSING\"\n | \"ACTIVE\"\n | \"FAILED\"\n | \"STATE_UNSPECIFIED\";\n\nexport type AIStudioFileVideoMetadata = {\n videoMetadata: {\n videoDuration: string; // Duration in seconds, possibly with fractional, ending in \"s\"\n };\n};\n\nexport type AIStudioFileMetadata = AIStudioFileVideoMetadata;\n\nexport interface AIStudioFileObject {\n name?: string;\n displayName?: string;\n mimeType?: string;\n sizeBytes?: string; // int64 format\n createTime?: string; // timestamp format\n updateTime?: string; // timestamp format\n expirationTime?: string; // timestamp format\n sha256Hash?: string; // base64 encoded\n uri?: string;\n state?: AIStudioFileState;\n error?: {\n code: number;\n message: string;\n details: Record<string, unknown>[];\n };\n metadata?: AIStudioFileMetadata;\n}\n\nexport class AIStudioMediaBlob extends MediaBlob {\n _valueAsDate(value: string): Date {\n if (!value) {\n return new Date(0);\n }\n return new Date(value);\n }\n\n _metadataFieldAsDate(field: string): Date {\n return this._valueAsDate(this.metadata?.[field]);\n }\n\n get createDate(): Date {\n return this._metadataFieldAsDate(\"createTime\");\n }\n\n get updateDate(): Date {\n return this._metadataFieldAsDate(\"updateTime\");\n }\n\n get expirationDate(): Date {\n return this._metadataFieldAsDate(\"expirationTime\");\n }\n\n get isExpired(): boolean {\n const now = new Date().toISOString();\n const exp = this.metadata?.expirationTime ?? now;\n return exp <= now;\n }\n}\n\nexport interface AIStudioFileGetResponse extends GoogleResponse {\n data: AIStudioFileObject;\n}\n\nexport interface AIStudioFileSaveResponse extends GoogleResponse {\n data: {\n file: AIStudioFileObject;\n };\n}\n\nexport interface AIStudioFileListResponse extends GoogleResponse {\n data: {\n files: AIStudioFileObject[];\n nextPageToken: string;\n };\n}\n\nexport type AIStudioFileResponse =\n | AIStudioFileGetResponse\n | AIStudioFileSaveResponse\n | AIStudioFileListResponse;\n\nexport interface AIStudioFileConnectionParams {}\n\nexport interface AIStudioFileUploadConnectionParams<AuthOptions>\n extends\n GoogleUploadConnectionParams<AuthOptions>,\n AIStudioFileConnectionParams {}\n\nexport class AIStudioFileUploadConnection<\n AuthOptions,\n> extends GoogleMultipartUploadConnection<\n AsyncCallerCallOptions,\n AIStudioFileSaveResponse,\n AuthOptions\n> {\n get computedApiVersion(): string {\n return \"v1beta\";\n }\n\n async buildUrl(): Promise<string> {\n return `https://generativelanguage.googleapis.com/upload/${this.apiVersion}/files`;\n }\n}\n\nexport interface AIStudioFileDownloadConnectionParams<AuthOptions>\n extends AIStudioFileConnectionParams, GoogleConnectionParams<AuthOptions> {\n method: GoogleAbstractedClientOpsMethod;\n name: string;\n}\n\nexport class AIStudioFileDownloadConnection<\n ResponseType extends GoogleResponse,\n AuthOptions,\n> extends GoogleDownloadConnection<\n AsyncCallerCallOptions,\n ResponseType,\n AuthOptions\n> {\n method: GoogleAbstractedClientOpsMethod;\n\n name: string;\n\n constructor(\n fields: AIStudioFileDownloadConnectionParams<AuthOptions>,\n caller: AsyncCaller,\n client: GoogleAbstractedClient\n ) {\n super(fields, caller, client);\n this.method = fields.method;\n this.name = fields.name;\n }\n\n get computedApiVersion(): string {\n return \"v1beta\";\n }\n\n buildMethod(): GoogleAbstractedClientOpsMethod {\n return this.method;\n }\n\n async buildUrl(): Promise<string> {\n return `https://generativelanguage.googleapis.com/${this.apiVersion}/files/${this.name}`;\n }\n}\n\nexport interface BlobStoreAIStudioFileBaseParams<\n AuthOptions,\n> extends BlobStoreGoogleParams<AuthOptions> {\n retryTime?: number;\n}\n\nexport abstract class BlobStoreAIStudioFileBase<\n AuthOptions,\n> extends BlobStoreGoogle<AIStudioFileResponse, AuthOptions> {\n params?: BlobStoreAIStudioFileBaseParams<AuthOptions>;\n\n retryTime: number = 1000;\n\n constructor(fields?: BlobStoreAIStudioFileBaseParams<AuthOptions>) {\n const params: BlobStoreAIStudioFileBaseParams<AuthOptions> = {\n defaultStoreOptions: {\n pathPrefix: \"https://generativelanguage.googleapis.com/v1beta/files/\",\n actionIfInvalid: \"removePath\",\n },\n ...fields,\n };\n super(params);\n this.params = params;\n this.retryTime = params?.retryTime ?? this.retryTime ?? 1000;\n }\n\n _pathToName(path: string): string {\n return path.split(\"/\").pop() ?? path;\n }\n\n abstract buildAbstractedClient(\n fields?: BlobStoreGoogleParams<AuthOptions>\n ): GoogleAbstractedClient;\n\n buildApiKeyClient(apiKey: string): GoogleAbstractedClient {\n return new ApiKeyGoogleAuth(apiKey);\n }\n\n buildApiKey(fields?: BlobStoreGoogleParams<AuthOptions>): string | undefined {\n return fields?.apiKey ?? getEnvironmentVariable(\"GOOGLE_API_KEY\");\n }\n\n buildClient(\n fields?: BlobStoreGoogleParams<AuthOptions>\n ): GoogleAbstractedClient {\n const apiKey = this.buildApiKey(fields);\n if (apiKey) {\n return this.buildApiKeyClient(apiKey);\n } else {\n // TODO: Test that you can use OAuth to access\n return this.buildAbstractedClient(fields);\n }\n }\n\n async _regetMetadata(key: string): Promise<AIStudioFileObject> {\n // Sleep for some time period\n await new Promise((resolve) => setTimeout(resolve, this.retryTime));\n\n // Fetch the latest metadata\n return this._getMetadata(key);\n }\n\n async _set([key, blob]: [\n string,\n MediaBlob,\n ]): Promise<AIStudioFileSaveResponse> {\n const response = (await super._set([\n key,\n blob,\n ])) as AIStudioFileSaveResponse;\n\n let file = response.data?.file ?? { state: \"FAILED\" };\n while (file.state === \"PROCESSING\" && file.uri && this.retryTime > 0) {\n file = await this._regetMetadata(file.uri);\n }\n\n // The response should contain the name (and valid URI), so we need to\n // update the blob with this. We can't return a new blob, since mset()\n // doesn't return anything.\n blob.path = file.uri;\n blob.metadata = {\n ...blob.metadata,\n ...file,\n };\n return response;\n }\n\n buildSetConnection([_key, _blob]: [\n string,\n MediaBlob,\n ]): GoogleMultipartUploadConnection<\n AsyncCallerCallOptions,\n AIStudioFileResponse,\n AuthOptions\n > {\n return new AIStudioFileUploadConnection(\n this.params,\n this.caller,\n this.client\n );\n }\n\n buildSetMetadata([_key, _blob]: [string, MediaBlob]): Record<\n string,\n unknown\n > {\n return {};\n }\n\n buildGetMetadataConnection(\n key: string\n ): GoogleDownloadConnection<\n AsyncCallerCallOptions,\n AIStudioFileResponse,\n AuthOptions\n > {\n const params: AIStudioFileDownloadConnectionParams<AuthOptions> = {\n ...this.params,\n method: \"GET\",\n name: this._pathToName(key),\n };\n return new AIStudioFileDownloadConnection<\n AIStudioFileResponse,\n AuthOptions\n >(params, this.caller, this.client);\n }\n\n buildGetDataConnection(\n _key: string\n ): GoogleDownloadRawConnection<AsyncCallerCallOptions, AuthOptions> {\n throw new Error(\"AI Studio File API does not provide data\");\n }\n\n async _get(key: string): Promise<MediaBlob | undefined> {\n const metadata = await this._getMetadata(key);\n if (metadata) {\n const contentType =\n (metadata?.mimeType as string) ?? \"application/octet-stream\";\n // TODO - Get the actual data (and other metadata) from an optional backing store\n const data: MediaBlobData = {\n value: \"\",\n type: contentType,\n };\n\n return new MediaBlob({\n path: key,\n data,\n metadata,\n });\n } else {\n return undefined;\n }\n }\n\n buildDeleteConnection(\n key: string\n ): GoogleDownloadConnection<\n AsyncCallerCallOptions,\n AIStudioFileResponse,\n AuthOptions\n > {\n const params: AIStudioFileDownloadConnectionParams<AuthOptions> = {\n ...this.params,\n method: \"DELETE\",\n name: this._pathToName(key),\n };\n return new AIStudioFileDownloadConnection<\n AIStudioFileResponse,\n AuthOptions\n >(params, this.caller, this.client);\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"media.js","names":[],"sources":["../../src/experimental/media.ts"],"sourcesContent":["import {\n AsyncCaller,\n AsyncCallerCallOptions,\n AsyncCallerParams,\n} from \"@langchain/core/utils/async_caller\";\nimport { getEnvironmentVariable } from \"@langchain/core/utils/env\";\nimport {\n MediaBlob,\n BlobStore,\n BlobStoreOptions,\n MediaBlobData,\n} from \"./utils/media_core.js\";\nimport {\n GoogleConnectionParams,\n GoogleRawResponse,\n GoogleResponse,\n} from \"../types.js\";\nimport { GoogleHostConnection, GoogleRawConnection } from \"../connection.js\";\nimport {\n ApiKeyGoogleAuth,\n GoogleAbstractedClient,\n GoogleAbstractedClientOpsMethod,\n} from \"../auth.js\";\n\nexport interface GoogleUploadConnectionParams<\n AuthOptions,\n> extends GoogleConnectionParams<AuthOptions> {}\n\nexport abstract class GoogleMultipartUploadConnection<\n CallOptions extends AsyncCallerCallOptions,\n ResponseType extends GoogleResponse,\n AuthOptions,\n> extends GoogleHostConnection<CallOptions, ResponseType, AuthOptions> {\n constructor(\n fields: GoogleConnectionParams<AuthOptions> | undefined,\n caller: AsyncCaller,\n client: GoogleAbstractedClient\n ) {\n super(fields, caller, client);\n }\n\n async _body(\n separator: string,\n data: MediaBlob,\n metadata: Record<string, unknown>\n ): Promise<string> {\n const contentType = data.mimetype;\n const { encoded, encoding } = await data.encode();\n const body = [\n `--${separator}`,\n \"Content-Type: application/json; charset=UTF-8\",\n \"\",\n JSON.stringify(metadata),\n \"\",\n `--${separator}`,\n `Content-Type: ${contentType}`,\n `Content-Transfer-Encoding: ${encoding}`,\n \"\",\n encoded,\n `--${separator}--`,\n ];\n return body.join(\"\\n\");\n }\n\n async request(\n data: MediaBlob,\n metadata: Record<string, unknown>,\n options: CallOptions\n ): Promise<ResponseType> {\n const separator = `separator-${Date.now()}`;\n const body = await this._body(separator, data, metadata);\n const requestHeaders = {\n \"Content-Type\": `multipart/related; boundary=${separator}`,\n \"X-Goog-Upload-Protocol\": \"multipart\",\n };\n const response = this._request(body, options, requestHeaders);\n return response;\n }\n}\n\nexport abstract class GoogleDownloadConnection<\n CallOptions extends AsyncCallerCallOptions,\n ResponseType extends GoogleResponse,\n AuthOptions,\n> extends GoogleHostConnection<CallOptions, ResponseType, AuthOptions> {\n async request(options: CallOptions): Promise<ResponseType> {\n return this._request(undefined, options);\n }\n}\n\nexport abstract class GoogleDownloadRawConnection<\n CallOptions extends AsyncCallerCallOptions,\n AuthOptions,\n> extends GoogleRawConnection<CallOptions, AuthOptions> {\n buildMethod(): GoogleAbstractedClientOpsMethod {\n return \"GET\";\n }\n\n async request(options: CallOptions): Promise<GoogleRawResponse> {\n return this._request(undefined, options);\n }\n}\n\nexport interface BlobStoreGoogleParams<AuthOptions>\n extends\n GoogleConnectionParams<AuthOptions>,\n AsyncCallerParams,\n BlobStoreOptions {}\n\nexport abstract class BlobStoreGoogle<\n ResponseType extends GoogleResponse,\n AuthOptions,\n> extends BlobStore {\n caller: AsyncCaller;\n\n client: GoogleAbstractedClient;\n\n constructor(fields?: BlobStoreGoogleParams<AuthOptions>) {\n super(fields);\n this.caller = new AsyncCaller(fields ?? {});\n this.client = this.buildClient(fields);\n }\n\n abstract buildClient(\n fields?: BlobStoreGoogleParams<AuthOptions>\n ): GoogleAbstractedClient;\n\n abstract buildSetMetadata([key, blob]: [string, MediaBlob]): Record<\n string,\n unknown\n >;\n\n abstract buildSetConnection([key, blob]: [\n string,\n MediaBlob,\n ]): GoogleMultipartUploadConnection<\n AsyncCallerCallOptions,\n ResponseType,\n AuthOptions\n >;\n\n async _set(keyValuePair: [string, MediaBlob]): Promise<ResponseType> {\n const [, blob] = keyValuePair;\n const setMetadata = this.buildSetMetadata(keyValuePair);\n const metadata = setMetadata;\n const options = {};\n const connection = this.buildSetConnection(keyValuePair);\n const response = await connection.request(blob, metadata, options);\n return response;\n }\n\n async mset(keyValuePairs: [string, MediaBlob][]): Promise<void> {\n const ret = keyValuePairs.map((keyValue) => this._set(keyValue));\n await Promise.all(ret);\n }\n\n abstract buildGetMetadataConnection(\n key: string\n ): GoogleDownloadConnection<\n AsyncCallerCallOptions,\n ResponseType,\n AuthOptions\n >;\n\n async _getMetadata(key: string): Promise<Record<string, unknown>> {\n const connection = this.buildGetMetadataConnection(key);\n const options = {};\n const response = await connection.request(options);\n return response.data;\n }\n\n abstract buildGetDataConnection(\n key: string\n ): GoogleDownloadRawConnection<AsyncCallerCallOptions, AuthOptions>;\n\n async _getData(key: string): Promise<Blob> {\n const connection = this.buildGetDataConnection(key);\n const options = {};\n const response = await connection.request(options);\n return response.data;\n }\n\n _getMimetypeFromMetadata(metadata: Record<string, unknown>): string {\n return metadata.contentType as string;\n }\n\n async _get(key: string): Promise<MediaBlob | undefined> {\n const metadata = await this._getMetadata(key);\n const data = await this._getData(key);\n if (data && metadata) {\n const ret = await MediaBlob.fromBlob(data, { metadata, path: key });\n return ret;\n } else {\n return undefined;\n }\n }\n\n async mget(keys: string[]): Promise<(MediaBlob | undefined)[]> {\n const ret = keys.map((key) => this._get(key));\n return await Promise.all(ret);\n }\n\n abstract buildDeleteConnection(\n key: string\n ): GoogleDownloadConnection<\n AsyncCallerCallOptions,\n GoogleResponse,\n AuthOptions\n >;\n\n async _del(key: string): Promise<void> {\n const connection = this.buildDeleteConnection(key);\n const options = {};\n await connection.request(options);\n }\n\n async mdelete(keys: string[]): Promise<void> {\n const ret = keys.map((key) => this._del(key));\n await Promise.all(ret);\n }\n\n // eslint-disable-next-line require-yield\n async *yieldKeys(_prefix: string | undefined): AsyncGenerator<string> {\n // TODO: Implement. Most have an implementation that uses nextToken.\n throw new Error(\"yieldKeys is not implemented\");\n }\n}\n\n/**\n * Based on https://cloud.google.com/storage/docs/json_api/v1/objects#resource\n */\nexport interface GoogleCloudStorageObject extends Record<string, unknown> {\n id?: string;\n name?: string;\n contentType?: string;\n metadata?: Record<string, unknown>;\n // This is incomplete.\n}\n\nexport interface GoogleCloudStorageResponse extends GoogleResponse {\n data: GoogleCloudStorageObject;\n}\n\nexport type BucketAndPath = {\n bucket: string;\n path: string;\n};\n\nexport class GoogleCloudStorageUri {\n static uriRegexp = /gs:\\/\\/([a-z0-9][a-z0-9._-]+[a-z0-9])\\/(.*)/;\n\n bucket: string;\n\n path: string;\n\n constructor(uri: string) {\n const bucketAndPath = GoogleCloudStorageUri.uriToBucketAndPath(uri);\n this.bucket = bucketAndPath.bucket;\n this.path = bucketAndPath.path;\n }\n\n get uri() {\n return `gs://${this.bucket}/${this.path}`;\n }\n\n get isValid() {\n return (\n typeof this.bucket !== \"undefined\" && typeof this.path !== \"undefined\"\n );\n }\n\n static uriToBucketAndPath(uri: string): BucketAndPath {\n const match = this.uriRegexp.exec(uri);\n if (!match) {\n throw new Error(`Invalid gs:// URI: ${uri}`);\n }\n return {\n bucket: match[1],\n path: match[2],\n };\n }\n\n static isValidUri(uri: string): boolean {\n return this.uriRegexp.test(uri);\n }\n}\n\nexport interface GoogleCloudStorageConnectionParams {\n uri: string;\n}\n\nexport interface GoogleCloudStorageUploadConnectionParams<AuthOptions>\n extends\n GoogleUploadConnectionParams<AuthOptions>,\n GoogleCloudStorageConnectionParams {}\n\nexport class GoogleCloudStorageUploadConnection<\n AuthOptions,\n> extends GoogleMultipartUploadConnection<\n AsyncCallerCallOptions,\n GoogleCloudStorageResponse,\n AuthOptions\n> {\n uri: GoogleCloudStorageUri;\n\n constructor(\n fields: GoogleCloudStorageUploadConnectionParams<AuthOptions>,\n caller: AsyncCaller,\n client: GoogleAbstractedClient\n ) {\n super(fields, caller, client);\n this.uri = new GoogleCloudStorageUri(fields.uri);\n }\n\n async buildUrl(): Promise<string> {\n return `https://storage.googleapis.com/upload/storage/${this.apiVersion}/b/${this.uri.bucket}/o?uploadType=multipart`;\n }\n}\n\nexport interface GoogleCloudStorageDownloadConnectionParams<AuthOptions>\n extends\n GoogleCloudStorageConnectionParams,\n GoogleConnectionParams<AuthOptions> {\n method: GoogleAbstractedClientOpsMethod;\n alt: \"media\" | undefined;\n}\n\nexport class GoogleCloudStorageDownloadConnection<\n ResponseType extends GoogleResponse,\n AuthOptions,\n> extends GoogleDownloadConnection<\n AsyncCallerCallOptions,\n ResponseType,\n AuthOptions\n> {\n uri: GoogleCloudStorageUri;\n\n method: GoogleAbstractedClientOpsMethod;\n\n alt: \"media\" | undefined;\n\n constructor(\n fields: GoogleCloudStorageDownloadConnectionParams<AuthOptions>,\n caller: AsyncCaller,\n client: GoogleAbstractedClient\n ) {\n super(fields, caller, client);\n this.uri = new GoogleCloudStorageUri(fields.uri);\n this.method = fields.method;\n this.alt = fields.alt;\n }\n\n buildMethod(): GoogleAbstractedClientOpsMethod {\n return this.method;\n }\n\n async buildUrl(): Promise<string> {\n const path = encodeURIComponent(this.uri.path);\n const ret = `https://storage.googleapis.com/storage/${this.apiVersion}/b/${this.uri.bucket}/o/${path}`;\n return this.alt ? `${ret}?alt=${this.alt}` : ret;\n }\n}\n\nexport interface GoogleCloudStorageRawConnectionParams<AuthOptions>\n extends\n GoogleCloudStorageConnectionParams,\n GoogleConnectionParams<AuthOptions> {}\n\nexport class GoogleCloudStorageRawConnection<\n AuthOptions,\n> extends GoogleDownloadRawConnection<AsyncCallerCallOptions, AuthOptions> {\n uri: GoogleCloudStorageUri;\n\n constructor(\n fields: GoogleCloudStorageRawConnectionParams<AuthOptions>,\n caller: AsyncCaller,\n client: GoogleAbstractedClient\n ) {\n super(fields, caller, client);\n this.uri = new GoogleCloudStorageUri(fields.uri);\n }\n\n async buildUrl(): Promise<string> {\n const path = encodeURIComponent(this.uri.path);\n const ret = `https://storage.googleapis.com/storage/${this.apiVersion}/b/${this.uri.bucket}/o/${path}?alt=media`;\n return ret;\n }\n}\n\nexport interface BlobStoreGoogleCloudStorageBaseParams<\n AuthOptions,\n> extends BlobStoreGoogleParams<AuthOptions> {\n uriPrefix: GoogleCloudStorageUri;\n}\n\nexport abstract class BlobStoreGoogleCloudStorageBase<\n AuthOptions,\n> extends BlobStoreGoogle<GoogleCloudStorageResponse, AuthOptions> {\n params: BlobStoreGoogleCloudStorageBaseParams<AuthOptions>;\n\n constructor(fields: BlobStoreGoogleCloudStorageBaseParams<AuthOptions>) {\n super(fields);\n this.params = fields;\n this.defaultStoreOptions = {\n ...this.defaultStoreOptions,\n pathPrefix: fields.uriPrefix.uri,\n };\n }\n\n buildSetConnection([key, _blob]: [\n string,\n MediaBlob,\n ]): GoogleMultipartUploadConnection<\n AsyncCallerCallOptions,\n GoogleCloudStorageResponse,\n AuthOptions\n > {\n const params: GoogleCloudStorageUploadConnectionParams<AuthOptions> = {\n ...this.params,\n uri: key,\n };\n return new GoogleCloudStorageUploadConnection<AuthOptions>(\n params,\n this.caller,\n this.client\n );\n }\n\n buildSetMetadata([key, blob]: [string, MediaBlob]): Record<string, unknown> {\n const uri = new GoogleCloudStorageUri(key);\n const ret: GoogleCloudStorageObject = {\n name: uri.path,\n metadata: blob.metadata,\n contentType: blob.mimetype,\n };\n return ret;\n }\n\n buildGetMetadataConnection(\n key: string\n ): GoogleDownloadConnection<\n AsyncCallerCallOptions,\n GoogleCloudStorageResponse,\n AuthOptions\n > {\n const params: GoogleCloudStorageDownloadConnectionParams<AuthOptions> = {\n uri: key,\n method: \"GET\",\n alt: undefined,\n };\n return new GoogleCloudStorageDownloadConnection<\n GoogleCloudStorageResponse,\n AuthOptions\n >(params, this.caller, this.client);\n }\n\n buildGetDataConnection(\n key: string\n ): GoogleDownloadRawConnection<AsyncCallerCallOptions, AuthOptions> {\n const params: GoogleCloudStorageRawConnectionParams<AuthOptions> = {\n uri: key,\n };\n return new GoogleCloudStorageRawConnection<AuthOptions>(\n params,\n this.caller,\n this.client\n );\n }\n\n buildDeleteConnection(\n key: string\n ): GoogleDownloadConnection<\n AsyncCallerCallOptions,\n GoogleResponse,\n AuthOptions\n > {\n const params: GoogleCloudStorageDownloadConnectionParams<AuthOptions> = {\n uri: key,\n method: \"DELETE\",\n alt: undefined,\n };\n return new GoogleCloudStorageDownloadConnection<\n GoogleResponse,\n AuthOptions\n >(params, this.caller, this.client);\n }\n}\n\nexport type AIStudioFileState =\n | \"PROCESSING\"\n | \"ACTIVE\"\n | \"FAILED\"\n | \"STATE_UNSPECIFIED\";\n\nexport type AIStudioFileVideoMetadata = {\n videoMetadata: {\n videoDuration: string; // Duration in seconds, possibly with fractional, ending in \"s\"\n };\n};\n\nexport type AIStudioFileMetadata = AIStudioFileVideoMetadata;\n\nexport interface AIStudioFileObject {\n name?: string;\n displayName?: string;\n mimeType?: string;\n sizeBytes?: string; // int64 format\n createTime?: string; // timestamp format\n updateTime?: string; // timestamp format\n expirationTime?: string; // timestamp format\n sha256Hash?: string; // base64 encoded\n uri?: string;\n state?: AIStudioFileState;\n error?: {\n code: number;\n message: string;\n details: Record<string, unknown>[];\n };\n metadata?: AIStudioFileMetadata;\n}\n\nexport class AIStudioMediaBlob extends MediaBlob {\n _valueAsDate(value: string): Date {\n if (!value) {\n return new Date(0);\n }\n return new Date(value);\n }\n\n _metadataFieldAsDate(field: string): Date {\n return this._valueAsDate(this.metadata?.[field]);\n }\n\n get createDate(): Date {\n return this._metadataFieldAsDate(\"createTime\");\n }\n\n get updateDate(): Date {\n return this._metadataFieldAsDate(\"updateTime\");\n }\n\n get expirationDate(): Date {\n return this._metadataFieldAsDate(\"expirationTime\");\n }\n\n get isExpired(): boolean {\n const now = new Date().toISOString();\n const exp = this.metadata?.expirationTime ?? now;\n return exp <= now;\n }\n}\n\nexport interface AIStudioFileGetResponse extends GoogleResponse {\n data: AIStudioFileObject;\n}\n\nexport interface AIStudioFileSaveResponse extends GoogleResponse {\n data: {\n file: AIStudioFileObject;\n };\n}\n\nexport interface AIStudioFileListResponse extends GoogleResponse {\n data: {\n files: AIStudioFileObject[];\n nextPageToken: string;\n };\n}\n\nexport type AIStudioFileResponse =\n | AIStudioFileGetResponse\n | AIStudioFileSaveResponse\n | AIStudioFileListResponse;\n\nexport interface AIStudioFileConnectionParams {}\n\nexport interface AIStudioFileUploadConnectionParams<AuthOptions>\n extends\n GoogleUploadConnectionParams<AuthOptions>,\n AIStudioFileConnectionParams {}\n\nexport class AIStudioFileUploadConnection<\n AuthOptions,\n> extends GoogleMultipartUploadConnection<\n AsyncCallerCallOptions,\n AIStudioFileSaveResponse,\n AuthOptions\n> {\n get computedApiVersion(): string {\n return \"v1beta\";\n }\n\n async buildUrl(): Promise<string> {\n return `https://generativelanguage.googleapis.com/upload/${this.apiVersion}/files`;\n }\n}\n\nexport interface AIStudioFileDownloadConnectionParams<AuthOptions>\n extends AIStudioFileConnectionParams, GoogleConnectionParams<AuthOptions> {\n method: GoogleAbstractedClientOpsMethod;\n name: string;\n}\n\nexport class AIStudioFileDownloadConnection<\n ResponseType extends GoogleResponse,\n AuthOptions,\n> extends GoogleDownloadConnection<\n AsyncCallerCallOptions,\n ResponseType,\n AuthOptions\n> {\n method: GoogleAbstractedClientOpsMethod;\n\n name: string;\n\n constructor(\n fields: AIStudioFileDownloadConnectionParams<AuthOptions>,\n caller: AsyncCaller,\n client: GoogleAbstractedClient\n ) {\n super(fields, caller, client);\n this.method = fields.method;\n this.name = fields.name;\n }\n\n get computedApiVersion(): string {\n return \"v1beta\";\n }\n\n buildMethod(): GoogleAbstractedClientOpsMethod {\n return this.method;\n }\n\n async buildUrl(): Promise<string> {\n return `https://generativelanguage.googleapis.com/${this.apiVersion}/files/${this.name}`;\n }\n}\n\nexport interface BlobStoreAIStudioFileBaseParams<\n AuthOptions,\n> extends BlobStoreGoogleParams<AuthOptions> {\n retryTime?: number;\n}\n\nexport abstract class BlobStoreAIStudioFileBase<\n AuthOptions,\n> extends BlobStoreGoogle<AIStudioFileResponse, AuthOptions> {\n params?: BlobStoreAIStudioFileBaseParams<AuthOptions>;\n\n retryTime: number = 1000;\n\n constructor(fields?: BlobStoreAIStudioFileBaseParams<AuthOptions>) {\n const params: BlobStoreAIStudioFileBaseParams<AuthOptions> = {\n defaultStoreOptions: {\n pathPrefix: \"https://generativelanguage.googleapis.com/v1beta/files/\",\n actionIfInvalid: \"removePath\",\n },\n ...fields,\n };\n super(params);\n this.params = params;\n this.retryTime = params?.retryTime ?? this.retryTime ?? 1000;\n }\n\n _pathToName(path: string): string {\n return path.split(\"/\").pop() ?? path;\n }\n\n abstract buildAbstractedClient(\n fields?: BlobStoreGoogleParams<AuthOptions>\n ): GoogleAbstractedClient;\n\n buildApiKeyClient(apiKey: string): GoogleAbstractedClient {\n return new ApiKeyGoogleAuth(apiKey);\n }\n\n buildApiKey(fields?: BlobStoreGoogleParams<AuthOptions>): string | undefined {\n return fields?.apiKey ?? getEnvironmentVariable(\"GOOGLE_API_KEY\");\n }\n\n buildClient(\n fields?: BlobStoreGoogleParams<AuthOptions>\n ): GoogleAbstractedClient {\n const apiKey = this.buildApiKey(fields);\n if (apiKey) {\n return this.buildApiKeyClient(apiKey);\n } else {\n // TODO: Test that you can use OAuth to access\n return this.buildAbstractedClient(fields);\n }\n }\n\n async _regetMetadata(key: string): Promise<AIStudioFileObject> {\n // Sleep for some time period\n await new Promise((resolve) => setTimeout(resolve, this.retryTime));\n\n // Fetch the latest metadata\n return this._getMetadata(key);\n }\n\n async _set([key, blob]: [\n string,\n MediaBlob,\n ]): Promise<AIStudioFileSaveResponse> {\n const response = (await super._set([\n key,\n blob,\n ])) as AIStudioFileSaveResponse;\n\n let file = response.data?.file ?? { state: \"FAILED\" };\n while (file.state === \"PROCESSING\" && file.uri && this.retryTime > 0) {\n file = await this._regetMetadata(file.uri);\n }\n\n // The response should contain the name (and valid URI), so we need to\n // update the blob with this. We can't return a new blob, since mset()\n // doesn't return anything.\n blob.path = file.uri;\n blob.metadata = {\n ...blob.metadata,\n ...file,\n };\n return response;\n }\n\n buildSetConnection([_key, _blob]: [\n string,\n MediaBlob,\n ]): GoogleMultipartUploadConnection<\n AsyncCallerCallOptions,\n AIStudioFileResponse,\n AuthOptions\n > {\n return new AIStudioFileUploadConnection(\n this.params,\n this.caller,\n this.client\n );\n }\n\n buildSetMetadata([_key, _blob]: [string, MediaBlob]): Record<\n string,\n unknown\n > {\n return {};\n }\n\n buildGetMetadataConnection(\n key: string\n ): GoogleDownloadConnection<\n AsyncCallerCallOptions,\n AIStudioFileResponse,\n AuthOptions\n > {\n const params: AIStudioFileDownloadConnectionParams<AuthOptions> = {\n ...this.params,\n method: \"GET\",\n name: this._pathToName(key),\n };\n return new AIStudioFileDownloadConnection<\n AIStudioFileResponse,\n AuthOptions\n >(params, this.caller, this.client);\n }\n\n buildGetDataConnection(\n _key: string\n ): GoogleDownloadRawConnection<AsyncCallerCallOptions, AuthOptions> {\n throw new Error(\"AI Studio File API does not provide data\");\n }\n\n async _get(key: string): Promise<MediaBlob | undefined> {\n const metadata = await this._getMetadata(key);\n if (metadata) {\n const contentType =\n (metadata?.mimeType as string) ?? \"application/octet-stream\";\n // TODO - Get the actual data (and other metadata) from an optional backing store\n const data: MediaBlobData = {\n value: \"\",\n type: contentType,\n };\n\n return new MediaBlob({\n path: key,\n data,\n metadata,\n });\n } else {\n return undefined;\n }\n }\n\n buildDeleteConnection(\n key: string\n ): GoogleDownloadConnection<\n AsyncCallerCallOptions,\n AIStudioFileResponse,\n AuthOptions\n > {\n const params: AIStudioFileDownloadConnectionParams<AuthOptions> = {\n ...this.params,\n method: \"DELETE\",\n name: this._pathToName(key),\n };\n return new AIStudioFileDownloadConnection<\n AIStudioFileResponse,\n AuthOptions\n >(params, this.caller, this.client);\n }\n}\n"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
- const require_rolldown_runtime = require('../../_virtual/rolldown_runtime.cjs');
2
- const uuid = require_rolldown_runtime.__toESM(require("uuid"));
3
- const __langchain_core_stores = require_rolldown_runtime.__toESM(require("@langchain/core/stores"));
4
- const __langchain_core_load_serializable = require_rolldown_runtime.__toESM(require("@langchain/core/load/serializable"));
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
+ let uuid = require("uuid");
3
+ let _langchain_core_stores = require("@langchain/core/stores");
4
+ let _langchain_core_load_serializable = require("@langchain/core/load/serializable");
5
5
 
6
6
  //#region src/experimental/utils/media_core.ts
7
7
  function bytesToString(dataArray) {
@@ -17,7 +17,7 @@ function bytesToString(dataArray) {
17
17
  * Represents a chunk of data that can be identified by the path where the
18
18
  * data is (or will be) located, along with optional metadata about the data.
19
19
  */
20
- var MediaBlob = class MediaBlob extends __langchain_core_load_serializable.Serializable {
20
+ var MediaBlob = class MediaBlob extends _langchain_core_load_serializable.Serializable {
21
21
  lc_serializable = true;
22
22
  lc_namespace = [
23
23
  "langchain",
@@ -74,11 +74,9 @@ var MediaBlob = class MediaBlob extends __langchain_core_load_serializable.Seria
74
74
  async encode() {
75
75
  const dataUrl = await this.asDataUrl();
76
76
  const comma = dataUrl.indexOf(",");
77
- const encoded = dataUrl.substring(comma + 1);
78
- const encoding = dataUrl.indexOf("base64") > -1 ? "base64" : "8bit";
79
77
  return {
80
- encoded,
81
- encoding
78
+ encoded: dataUrl.substring(comma + 1),
79
+ encoding: dataUrl.indexOf("base64") > -1 ? "base64" : "8bit"
82
80
  };
83
81
  }
84
82
  static fromDataUrl(url) {
@@ -87,20 +85,17 @@ var MediaBlob = class MediaBlob extends __langchain_core_load_serializable.Seria
87
85
  const semicolon = url.indexOf(";");
88
86
  const mimeType = url.substring(colon + 1, semicolon);
89
87
  const comma = url.indexOf(",");
90
- const base64Data = url.substring(comma + 1);
91
- const data = {
92
- type: mimeType,
93
- value: base64Data
94
- };
95
88
  return new MediaBlob({
96
- data,
89
+ data: {
90
+ type: mimeType,
91
+ value: url.substring(comma + 1)
92
+ },
97
93
  path: url
98
94
  });
99
95
  }
100
96
  static async fromBlob(blob, other) {
101
97
  const valueBuffer = await blob.arrayBuffer();
102
- const valueArray = new Uint8Array(valueBuffer);
103
- const valueStr = bytesToString(valueArray);
98
+ const valueStr = bytesToString(new Uint8Array(valueBuffer));
104
99
  const value = btoa(valueStr);
105
100
  return new MediaBlob({
106
101
  ...other,
@@ -123,7 +118,7 @@ var MediaBlob = class MediaBlob extends __langchain_core_load_serializable.Seria
123
118
  * BaseStore may be implemented (or even possible). Those that are not
124
119
  * implemented should be documented and throw an Error if called.
125
120
  */
126
- var BlobStore = class extends __langchain_core_stores.BaseStore {
121
+ var BlobStore = class extends _langchain_core_stores.BaseStore {
127
122
  lc_namespace = ["langchain", "google-common"];
128
123
  defaultStoreOptions;
129
124
  defaultFetchOptions;
@@ -169,9 +164,7 @@ var BlobStore = class extends __langchain_core_stores.BaseStore {
169
164
  return newBlob;
170
165
  }
171
166
  async _validBlobPrefixPath(blob, opts) {
172
- const prefix = opts?.pathPrefix ?? "";
173
- const suffix = this._blobPathSuffix(blob);
174
- const newPath = `${prefix}${suffix}`;
167
+ const newPath = `${opts?.pathPrefix ?? ""}${this._blobPathSuffix(blob)}`;
175
168
  return this._newBlob(blob, newPath);
176
169
  }
177
170
  _validBlobPrefixUuidFunction(name) {
@@ -182,9 +175,7 @@ var BlobStore = class extends __langchain_core_stores.BaseStore {
182
175
  }
183
176
  }
184
177
  async _validBlobPrefixUuid(blob, opts) {
185
- const prefix = opts?.pathPrefix ?? "";
186
- const suffix = this._validBlobPrefixUuidFunction(opts?.actionIfInvalid ?? "prefixUuid4");
187
- const newPath = `${prefix}${suffix}`;
178
+ const newPath = `${opts?.pathPrefix ?? ""}${this._validBlobPrefixUuidFunction(opts?.actionIfInvalid ?? "prefixUuid4")}`;
188
179
  return this._newBlob(blob, newPath);
189
180
  }
190
181
  async _validBlobRemovePath(blob, _opts) {
@@ -206,7 +197,7 @@ var BlobStore = class extends __langchain_core_stores.BaseStore {
206
197
  case "prefixUuid6":
207
198
  case "prefixUuid7": return this._validBlobPrefixUuid(blob, opts);
208
199
  case "removePath": return this._validBlobRemovePath(blob, opts);
209
- default: return void 0;
200
+ default: return;
210
201
  }
211
202
  }
212
203
  async store(blob, opts = {}) {
@@ -221,7 +212,6 @@ var BlobStore = class extends __langchain_core_stores.BaseStore {
221
212
  const savedKey = await validBlob.asUri();
222
213
  return await this.fetch(savedKey);
223
214
  }
224
- return void 0;
225
215
  }
226
216
  async _missingFetchBlobEmpty(path, _opts) {
227
217
  return new MediaBlob({ path });
@@ -229,7 +219,7 @@ var BlobStore = class extends __langchain_core_stores.BaseStore {
229
219
  async _missingFetchBlob(path, opts) {
230
220
  switch (opts?.actionIfBlobMissing) {
231
221
  case "emptyBlob": return this._missingFetchBlobEmpty(path, opts);
232
- default: return void 0;
222
+ default: return;
233
223
  }
234
224
  }
235
225
  async fetch(key, opts = {}) {
@@ -238,8 +228,7 @@ var BlobStore = class extends __langchain_core_stores.BaseStore {
238
228
  ...opts
239
229
  };
240
230
  const realKey = await this._realKey(key);
241
- const ret = await this.mget([realKey]);
242
- return ret?.[0] ?? await this._missingFetchBlob(realKey, allOpts);
231
+ return (await this.mget([realKey]))?.[0] ?? await this._missingFetchBlob(realKey, allOpts);
243
232
  }
244
233
  };
245
234
  var BackedBlobStore = class extends BlobStore {
@@ -298,17 +287,13 @@ var SimpleWebBlobStore = class extends BlobStore {
298
287
  async _fetch(url) {
299
288
  const ret = new MediaBlob({ path: url });
300
289
  const metadata = {};
301
- const fetchOptions = { method: "GET" };
302
- const res = await fetch(url, fetchOptions);
290
+ const res = await fetch(url, { method: "GET" });
303
291
  metadata.status = res.status;
304
292
  const headers = {};
305
293
  for (const [key, value] of res.headers.entries()) headers[key] = value;
306
294
  metadata.headers = headers;
307
295
  metadata.ok = res.ok;
308
- if (res.ok) {
309
- const resMediaBlob = await MediaBlob.fromBlob(await res.blob());
310
- ret.data = resMediaBlob.data;
311
- }
296
+ if (res.ok) ret.data = (await MediaBlob.fromBlob(await res.blob())).data;
312
297
  ret.metadata = metadata;
313
298
  return ret;
314
299
  }
@@ -342,8 +327,7 @@ var DataBlobStore = class extends BlobStore {
342
327
  return MediaBlob.fromDataUrl(url);
343
328
  }
344
329
  async mget(keys) {
345
- const blobMap = keys.map(this._fetch);
346
- return blobMap;
330
+ return keys.map(this._fetch);
347
331
  }
348
332
  async mdelete(_keys) {
349
333
  this._notImplementedException();
@@ -394,8 +378,7 @@ var MediaManager = class {
394
378
  }
395
379
  async getMediaBlob(uri) {
396
380
  const aliasBlob = await this.store.fetch(uri);
397
- const ret = await this._isInvalid(aliasBlob) ? await this._resolveAndSave(uri) : aliasBlob;
398
- return ret;
381
+ return await this._isInvalid(aliasBlob) ? await this._resolveAndSave(uri) : aliasBlob;
399
382
  }
400
383
  };
401
384