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,