filter on lyrics for bloking unwanted content, tickets fix

This commit is contained in:
Thomas Demirdjian
2025-09-08 15:48:29 +02:00
parent 987388c501
commit a3dc4f89b7
22 changed files with 1386 additions and 126 deletions
+56 -1
View File
@@ -1,6 +1,6 @@
const { onCall } = require("firebase-functions/v2/https");
const { z } = require("genkit");
const { generateAI } = require("../helpers/gemini");
const { generateAI, analyseLyrics } = require("../helpers/gemini");
exports.generateLyrics = onCall({}, async ({ auth = {}, data = {} }) => {
try {
@@ -90,3 +90,58 @@ Pour chaque ` +
console.log(e);
}
});
// Vérifie la toxicité des paroles via Gemini et retourne un résultat structuré
// Nom Cloud Function: lyrics-analyseLyricsToxicity
exports.analyseLyricsToxicity = onCall({}, async ({ data = {} }) => {
try {
// Validation d'entrée minimale
const requestSchema = z.object({
title: z.string().optional(),
lyrics: z
.union([
z.string(),
z.object({ couplet: z.string().optional(), refrain: z.string().optional() }),
z.array(z.object({ type: z.string().optional(), lyrics: z.string().optional() })),
])
.describe("Paroles à analyser (formats supportés)"),
});
const parsed = requestSchema.parse(data || {});
const result = await analyseLyrics({ title: parsed.title || "", lyrics: parsed.lyrics });
// Prépare un message lisible pour le front
const highCats = Object.entries(result.categories || {})
.filter(([, v]) => (typeof v === "number" ? v : 0) >= 0.5)
.map(([k]) => k)
.slice(0, 5);
let errorCode = "OK";
let message = "Analyse effectuée: aucun blocage.";
if (result.blocked) {
errorCode = "TOXIC_CONTENT_BLOCKED";
const list = highCats.length ? ` (${highCats.join(", ")})` : "";
message = `Publication bloquée: contenu interdit détecté${list}.`;
} else if (result.flagged) {
errorCode = "TOXIC_CONTENT_FLAGGED";
const list = highCats.length ? ` (${highCats.join(", ")})` : "";
message = `Attention: contenu potentiellement sensible détecté${list}.`;
}
return {
success: !result.blocked,
errorCode,
message,
result,
};
} catch (err) {
console.error("analyseLyricsToxicity failed", err?.message || err);
return {
success: false,
errorCode: "ANALYSE_FAILED",
message:
"Erreur lors de l'analyse de la toxicité. Réessayez plus tard.",
};
}
});