const fs = require('fs'); const path = require('path'); const outputDir = path.join(__dirname, "../../../storage/documents"); // path for output directory if (!fs.existsSync(outputDir)) { fs.mkdirSync(outputDir, { recursive: true }); // Create output directory if it doesn't exist } // Ensure Google API key is set in environment variables: export GOOGLE_API_KEY="your_api_key_here" const GEMINI_API_KEY = process.env.GOOGLE_API_KEY; // Ensure Google API key is set in environment variables: export GOOGLE_API_KEY="your_api_key_here" const GEMINI_URL = "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent"; // URL for the REST call, used model and action const module_exports = { name: "llm-gemini", type: "llm", displayname: "Gemini LLM", description: "Generates documents using Google Gemini LLM", async function(parameter) { return new Promise(async (resolve, reject) => { try { // console.log("Gemini LLM module invoked with parameters:", parameter); resolve(await this.createDocumentFromTranscript( //Call the function to create document with transcript, document type and language parameter.inputTranscriptPath, // Path to input transcript file parameter.documentTypePath, // Path to document type file which is chosen in the front end by the user parameter.language // Language for the document which is chosen in the front end by the user )); } catch (error) { // console.error("Error in Gemini LLM module:", error); reject(error) } }) }, createDocumentFromTranscript: async function(transcriptPath, documentTypePath, language = "en") { // default language is English return new Promise(async(resolve, reject) => { try { const transcript = await fs.promises.readFile(transcriptPath, "utf-8"); //read transcript file from Path const documentType = await fs.promises.readFile(documentTypePath, "utf-8"); //read document type from Path const promptText = `${documentType}, in language ${language}, transcript:\n\n${transcript}`; //combine doc type, language and transcript - Change prompt here if needed // --- REST CALL --- const response = await fetch(`${GEMINI_URL}?key=${GEMINI_API_KEY}`, { //safe model response in variable method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ contents: [ { parts: [ { text: promptText } // Input prompt for content generation ] } ] }) }); if (!response.ok) { //ok is true when a responce was successfull const text = await response.text(); throw new Error(`Gemini API error (${response.status}): ${text}`); } const data = await response.json(); // Get generated text from response or default to empty string (if null) const output = data?.candidates?.[0]?.content?.parts?.[0]?.text || ""; let inputTranscriptName = path.basename(transcriptPath, path.extname(transcriptPath)); // Name for the output file // console.log(inputTranscriptName); const outPath = path.join(outputDir, `${inputTranscriptName}.md`); // Output file path & name to make naming dynamic. Pulled from input transcript name fs.writeFileSync(outPath, output, "utf8"); // Write output to file // console.log("Generated document written to:", outPath); resolve(outPath) } catch (error) { // console.error("Error generating Gemini content:", error); reject(error) } }) } }; module.exports = module_exports; // CLI Mode: Allow direct execution if (require.main === module) { (async () => { const args = process.argv.slice(2); if (args.length < 2) { console.error("Usage: node llm-gemini.js [language]"); console.error("Example: node llm-gemini.js ./transcript.json ./docType.txt de"); process.exit(1); } const [transcriptPath, documentTypePath, language] = args; // Check if API key is set if (!GEMINI_API_KEY) { console.error("ERROR: GOOGLE_API_KEY environment variable is not set!"); console.error("Please set it with: export GOOGLE_API_KEY='your_api_key_here'"); process.exit(1); } // Check if files exist if (!fs.existsSync(transcriptPath)) { console.error(`ERROR: Transcript file not found: ${transcriptPath}`); process.exit(1); } if (!fs.existsSync(documentTypePath)) { console.error(`ERROR: Document type file not found: ${documentTypePath}`); process.exit(1); } console.log("Starting document generation..."); console.log(`Transcript: ${transcriptPath}`); console.log(`Document Type: ${documentTypePath}`); console.log(`Language: ${language || 'en (default)'}`); await module_exports.createDocumentFromTranscript( transcriptPath, documentTypePath, language || 'en' ); console.log("Done!"); })(); }