UNPKG

audio-transcripter

Version:

Lightweight TypeScript library for transcribing audio files using Google Gemini 2.0 models. Supports local files, remote URLs, and Blobs.

83 lines (82 loc) 3.14 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.uploadFileToGenAI = uploadFileToGenAI; exports.buildTranscriptionPrompt = buildTranscriptionPrompt; exports.generateTranscription = generateTranscription; const dotenv_1 = __importDefault(require("dotenv")); const genai_1 = require("@google/genai"); const prompt_1 = require("./prompt"); // Try to load .env file from current working directory dotenv_1.default.config(); // Get API key from environment variables or .env file const API_KEY = process.env.TRANSCRIBER_KEY; if (!API_KEY) { throw new Error("TRANSCRIBER_KEY is missing. Please set it in one of the following ways:\n" + "1. Set it as an environment variable: export TRANSCRIBER_KEY=your-key-here\n" + "2. Create a .env file in your project root with: TRANSCRIBER_KEY=your-key-here\n\n" + "Get your API key from: https://makersuite.google.com/app/apikey"); } const genAI = new genai_1.GoogleGenAI({ apiKey: API_KEY }); async function uploadFileToGenAI(file, mimeType) { try { const uploadResponse = await genAI.files.upload({ file, config: { mimeType }, }); if (!uploadResponse || !uploadResponse.uri || !uploadResponse.mimeType) { console.error("[error] Failed to upload file or missing response data."); return null; } return { uri: uploadResponse.uri, mimeType: uploadResponse.mimeType, }; } catch (error) { console.error("[error] Failed to upload file:", error instanceof Error ? error.message : String(error)); return null; } } // Prompt building function function buildTranscriptionPrompt(style, language, context) { let prompt = prompt_1.TRANSCRIPTION_PROMPTS[style] || prompt_1.TRANSCRIPTION_PROMPTS.accurate; if (language) { prompt += `\n\nIMPORTANT: The audio is in ${language}. Please transcribe in the same language.`; } if (context) { prompt += `\n\nContext: ${context}`; } return prompt; } async function generateTranscription(prompt, fileUri, mimeType) { try { const response = await genAI.models.generateContent({ model: "gemini-2.0-flash", contents: [ { role: "user", parts: [ { text: prompt, }, { fileData: { fileUri: fileUri, mimeType: mimeType, }, }, ], }, ], }); return response?.candidates?.[0]?.content?.parts?.[0]?.text || null; } catch (error) { console.error("[error] Failed to generate transcription:", error instanceof Error ? error.message : String(error)); return null; } }