From 305f967f29ac114409f9f53e4a60f8283556d145 Mon Sep 17 00:00:00 2001 From: Benjamin Shafii Date: Tue, 9 Apr 2024 21:50:33 +0200 Subject: [PATCH] feat: point to server --- src/FileOrganizerSettingTab.ts | 17 +++++++++++++++++ src/index.ts | 8 ++++++-- src/modules/audio.ts | 35 +++++++++++++++++++++++----------- src/modules/name.ts | 11 +++++++---- src/modules/text.ts | 5 ++++- src/modules/vision.ts | 5 ++++- 6 files changed, 62 insertions(+), 19 deletions(-) diff --git a/src/FileOrganizerSettingTab.ts b/src/FileOrganizerSettingTab.ts index 371d4c77..d8537b0d 100644 --- a/src/FileOrganizerSettingTab.ts +++ b/src/FileOrganizerSettingTab.ts @@ -116,6 +116,23 @@ export class FileOrganizerSettingTab extends PluginSettingTab { ); new Setting(containerEl).setName("Experimental features").setHeading(); + new Setting(containerEl) + .setName("Custom Server URL") + .setDesc( + "You can run this locally by going on the File Organizer 2000 repo and following the GitHub instructions." + ) + .addText((text) => + text + .setPlaceholder("Enter your server URL") + .setValue( + this.plugin.settings.customServerUrl || + "file-organizer-2000.vercel.app" + ) + .onChange(async (value) => { + this.plugin.settings.customServerUrl = value; + await this.plugin.saveSettings(); + }) + ); new Setting(containerEl) .setName("Custom vision prompt") diff --git a/src/index.ts b/src/index.ts index 466600e4..10cd6277 100644 --- a/src/index.ts +++ b/src/index.ts @@ -22,6 +22,7 @@ class FileOrganizerSettings { useSimilarTags = true; // default value is true customVisionPrompt = ""; // default value is an empty string useAutoAppend = false; // default value is true + customServerUrl = "app.fileorganizer2000.com"; } const validAudioExtensions = ["mp3", "wav", "webm", "m4a"]; @@ -190,9 +191,12 @@ export default class FileOrganizer extends Plugin { async generateTranscriptFromAudio(file: TFile) { new Notice(`Generating transcription for ${file.basename}`, 3000); // @ts-ignore - const filePath = file.vault.adapter.basePath + "/" + file.path; + const arrayBuffer = await this.app.vault.readBinary(file); + const fileContent = Buffer.from(arrayBuffer); + const encodedAudio = fileContent.toString("base64"); + logMessage(`Encoded: ${encodedAudio.substring(0, 20)}...`); - const transcribedText = await useAudio(filePath); + const transcribedText = await useAudio(encodedAudio); const postProcessedText = transcribedText; this.appendToCustomLogFile( `Generated transcription for [[${file.basename}.${file.extension}]]` diff --git a/src/modules/audio.ts b/src/modules/audio.ts index 65a884a9..ab84eeb9 100644 --- a/src/modules/audio.ts +++ b/src/modules/audio.ts @@ -1,14 +1,27 @@ -async function useAudio(filePath: string) { - const result = await fetch("http://localhost:3000/api/audio", { - method: "POST", - body: JSON.stringify({ filePath }), - headers: { - "Content-Type": "application/json", - }, - }); - const data = await result.json(); - console.log("audio data", data); - return data.text; +import { requestUrl } from "obsidian"; +import { logMessage } from "../../utils"; + +// audio type of type base64 +async function useAudio(audioFileBase64: string) { + const baseUrl = "https://file-organizer-2000.vercel.app/"; + + const endpoint = "api/audio"; + const url = `${baseUrl}/${endpoint}`; + try { + const result = await requestUrl({ + url: url, + method: "POST", + body: JSON.stringify({ file: audioFileBase64 }), + headers: { + "Content-Type": "application/json", + }, + }); + const data = await result.json; + logMessage(data.text); + return data.text; + } catch (error) { + console.error("Error uploading audio file:", error); + } } export default useAudio; diff --git a/src/modules/name.ts b/src/modules/name.ts index bdfb72aa..10a8ac9e 100644 --- a/src/modules/name.ts +++ b/src/modules/name.ts @@ -1,8 +1,7 @@ import { requestUrl } from "obsidian"; import { logMessage } from "../../utils"; -// Generates titles for documents -async function useName(document) { +async function useName(document, apiKey) { const data = { model: "gpt-4-1106-preview", messages: [ @@ -17,18 +16,22 @@ async function useName(document) { }, ], }; + const baseUrl = "https://file-organizer-2000.vercel.app/"; + const endpoint = "api/name"; + const url = `${baseUrl}/${endpoint}`; const response = await requestUrl({ - url: "http://localhost:3000/api/name", + url: url, method: "POST", body: JSON.stringify(data), headers: { "Content-Type": "application/json", + Authorization: `Bearer ${apiKey}`, }, }); const result = await response.json; - logMessage("name result", result.choices[0].message.content); + logMessage(result.choices[0].message.content); return result.choices[0].message.content.trim(); } diff --git a/src/modules/text.ts b/src/modules/text.ts index 6c55a7cc..e42f91f3 100644 --- a/src/modules/text.ts +++ b/src/modules/text.ts @@ -16,9 +16,12 @@ async function useText(content: string, systemPrompt: string) { }, ], }; + const baseUrl = "https://file-organizer-2000.vercel.app/"; + const endpoint = "api/text"; + const url = `${baseUrl}/${endpoint}`; const response = await requestUrl({ - url: "http://localhost:3000/api/text", + url: url, method: "POST", body: JSON.stringify(data), headers: { diff --git a/src/modules/vision.ts b/src/modules/vision.ts index 3fb80147..f4a2f916 100644 --- a/src/modules/vision.ts +++ b/src/modules/vision.ts @@ -22,8 +22,11 @@ async function useVision(encodedImage, systemPrompt = defaultPrompt) { }, ], }; + const baseUrl = "https://file-organizer-2000.vercel.app/"; + const endpoint = "api/vision"; + const url = `${baseUrl}/${endpoint}`; - const response = await fetch("http://localhost:3000/api/vision", { + const response = await fetch(url, { method: "POST", headers: { "Content-Type": "application/json",