diff --git a/.changeset/dry-dodos-push.md b/.changeset/dry-dodos-push.md new file mode 100644 index 000000000..6c8e61544 --- /dev/null +++ b/.changeset/dry-dodos-push.md @@ -0,0 +1,5 @@ +--- +"@google/generative-ai": patch +--- + +the code was refactored to accept both file paths and Buffers as inputs for uploading files with metadata diff --git a/common/api-review/generative-ai-server.api.md b/common/api-review/generative-ai-server.api.md index ae98439cf..c598a33d6 100644 --- a/common/api-review/generative-ai-server.api.md +++ b/common/api-review/generative-ai-server.api.md @@ -4,6 +4,8 @@ ```ts +/// + // @public export interface CachedContent extends CachedContentBase { createTime?: string; @@ -357,7 +359,7 @@ export class GoogleAIFileManager { deleteFile(fileId: string): Promise; getFile(fileId: string): Promise; listFiles(listParams?: ListParams): Promise; - uploadFile(filePath: string, fileMetadata: FileMetadata): Promise; + uploadFile(fileInput: string | Buffer, fileMetadata: FileMetadata): Promise; } // @public diff --git a/docs/reference/server/generative-ai.googleaifilemanager.md b/docs/reference/server/generative-ai.googleaifilemanager.md index 655c8d0c4..c404dd957 100644 --- a/docs/reference/server/generative-ai.googleaifilemanager.md +++ b/docs/reference/server/generative-ai.googleaifilemanager.md @@ -31,5 +31,5 @@ export declare class GoogleAIFileManager | [deleteFile(fileId)](./generative-ai.googleaifilemanager.deletefile.md) | | Delete file with given ID | | [getFile(fileId)](./generative-ai.googleaifilemanager.getfile.md) | | Get metadata for file with given ID | | [listFiles(listParams)](./generative-ai.googleaifilemanager.listfiles.md) | | List all uploaded files | -| [uploadFile(filePath, fileMetadata)](./generative-ai.googleaifilemanager.uploadfile.md) | | Upload a file | +| [uploadFile(fileInput, fileMetadata)](./generative-ai.googleaifilemanager.uploadfile.md) | | Upload a file | diff --git a/docs/reference/server/generative-ai.googleaifilemanager.uploadfile.md b/docs/reference/server/generative-ai.googleaifilemanager.uploadfile.md index 90648e904..4ba75f623 100644 --- a/docs/reference/server/generative-ai.googleaifilemanager.uploadfile.md +++ b/docs/reference/server/generative-ai.googleaifilemanager.uploadfile.md @@ -9,14 +9,14 @@ Upload a file **Signature:** ```typescript -uploadFile(filePath: string, fileMetadata: FileMetadata): Promise; +uploadFile(fileInput: string | Buffer, fileMetadata: FileMetadata): Promise; ``` ## Parameters | Parameter | Type | Description | | --- | --- | --- | -| filePath | string | | +| fileInput | string \| Buffer | | | fileMetadata | [FileMetadata](./generative-ai.filemetadata.md) | | **Returns:** diff --git a/packages/main/src/server/file-manager.ts b/packages/main/src/server/file-manager.ts index e839b8f70..0f8eb3920 100644 --- a/packages/main/src/server/file-manager.ts +++ b/packages/main/src/server/file-manager.ts @@ -16,7 +16,7 @@ */ import { RequestOptions } from "../../types"; -import { readFileSync } from "fs"; +import { readFile } from "fs/promises"; import { FilesRequestUrl, getHeaders, makeServerRequest } from "./request"; import { FileMetadata, @@ -51,10 +51,18 @@ export class GoogleAIFileManager { * Upload a file */ async uploadFile( - filePath: string, + fileInput: string | Buffer, fileMetadata: FileMetadata, ): Promise { - const file = readFileSync(filePath); + let file: Buffer | string; + + if (typeof fileInput === "string") { + file = await readFile(fileInput); + } else if (Buffer.isBuffer(fileInput)) { + file = fileInput; + } else { + throw Error("fileInput must be filePath or buffer"); + } const url = new FilesRequestUrl( RpcTask.UPLOAD, this.apiKey,