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
JavaScript
;
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;
}
}