mirror of
https://gitlab.rlp.net/proj-wise2526-video2document/video2document.git
synced 2026-06-15 18:01:52 +02:00
faee605f12
Added mocha based unit tests for each module Did a bit of cleanup in the modules to remove debug console.log calls Removed the Progress bar in the extractor and the library requirement Promisified the gemini module to make sure it returns the path as a promise instead of just on the cli Fixed gitignore so that it now only ignores the content int the storage directories, and not the whole directories Added neetingReport.json for the LLMs to use
84 lines
4.1 KiB
JavaScript
84 lines
4.1 KiB
JavaScript
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
|
|
|
|
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)
|
|
}
|
|
})
|
|
}
|
|
}; |