From b3445e2578a2c1f542ccae1dc607fecfbca8f62a Mon Sep 17 00:00:00 2001 From: justabot Date: Mon, 25 Nov 2024 15:35:19 -0500 Subject: [PATCH 1/2] CS - upgrades to file downloading. --- packages/client-direct/src/index.ts | 54 ++++++++++++++++++++++++----- 1 file changed, 46 insertions(+), 8 deletions(-) diff --git a/packages/client-direct/src/index.ts b/packages/client-direct/src/index.ts index d86869085b0..dc27b9e6fb4 100644 --- a/packages/client-direct/src/index.ts +++ b/packages/client-direct/src/index.ts @@ -17,6 +17,8 @@ import { import { stringToUuid } from "@ai16z/eliza"; import { settings } from "@ai16z/eliza"; import { createApiRouter } from "./api.ts"; +import * as fs from "fs"; +import * as path from "path"; const upload = multer({ storage: multer.memoryStorage() }); export const messageHandlerTemplate = @@ -298,24 +300,60 @@ export class DirectClient { "/fine-tune/:assetId", async (req: express.Request, res: express.Response) => { const assetId = req.params.assetId; + const downloadDir = path.join(process.cwd(), 'downloads', assetId); + + console.log('Download directory:', downloadDir); + try { - const response = await fetch(`https://api.bageldb.ai/api/v1/asset/${assetId}/download`, { + console.log('Creating directory...'); + await fs.promises.mkdir(downloadDir, { recursive: true }); + + console.log('Fetching file...'); + const fileResponse = await fetch(`https://api.bageldb.ai/api/v1/asset/${assetId}/download`, { headers: { 'X-API-KEY': `${process.env.BAGEL_API_KEY}` } }); + + if (!fileResponse.ok) { + throw new Error(`API responded with status ${fileResponse.status}: ${await fileResponse.text()}`); + } + + console.log('Response headers:', fileResponse.headers); + + const fileName = fileResponse.headers.get('content-disposition') + ?.split('filename=')[1] + ?.replace(/"/g, '') || 'default_name.txt'; - // Forward the content-type header - res.set('Content-Type', response.headers.get('content-type')); + console.log('Saving as:', fileName); - // Convert ReadableStream to Buffer and send - const arrayBuffer = await response.arrayBuffer(); + const arrayBuffer = await fileResponse.arrayBuffer(); const buffer = Buffer.from(arrayBuffer); - res.send(buffer); + + const filePath = path.join(downloadDir, fileName); + console.log('Full file path:', filePath); + + await fs.promises.writeFile(filePath, buffer); + + // Verify file was written + const stats = await fs.promises.stat(filePath); + console.log('File written successfully. Size:', stats.size, 'bytes'); + + res.json({ + success: true, + message: 'Single file downloaded successfully', + downloadPath: downloadDir, + fileCount: 1, + fileName: fileName, + fileSize: stats.size + }); + } catch (error) { + console.error('Detailed error:', error); res.status(500).json({ - error: 'Failed to forward request to BagelDB', - details: error.message + error: 'Failed to download files from BagelDB', + details: error.message, + stack: error.stack }); } } From 684984b9a70795180d44410608ab0bb0da4220e9 Mon Sep 17 00:00:00 2001 From: justabot Date: Mon, 25 Nov 2024 15:38:39 -0500 Subject: [PATCH 2/2] CS - Downloads working better. --- packages/client-direct/src/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/client-direct/src/index.ts b/packages/client-direct/src/index.ts index dc27b9e6fb4..e8da9d2c73a 100644 --- a/packages/client-direct/src/index.ts +++ b/packages/client-direct/src/index.ts @@ -297,7 +297,7 @@ export class DirectClient { } ); this.app.get( - "/fine-tune/:assetId", + "/fine-tune/:assetId", async (req: express.Request, res: express.Response) => { const assetId = req.params.assetId; const downloadDir = path.join(process.cwd(), 'downloads', assetId);