filter on lyrics for bloking unwanted content, tickets fix
This commit is contained in:
+56
-1
@@ -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.",
|
||||
};
|
||||
}
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user