feat: filter by lang

This commit is contained in:
2026-08-11 13:19:25 +02:00
parent c8656d6273
commit 0165e8b44d
8 changed files with 139 additions and 29 deletions
+13
View File
@@ -140,6 +140,7 @@ const buildModerationBrief = ({
exports.generateLyrics = onCall({ secrets: [GEMINI_API_KEY] }, async ({ auth = {}, data = {} }) => {
try {
const {
lang: rawLang,
objective = '',
context = '',
style = '',
@@ -148,6 +149,15 @@ exports.generateLyrics = onCall({ secrets: [GEMINI_API_KEY] }, async ({ auth = {
structure: rawStructure = ['couplet', 'refrain', 'couplet', 'refrain'],
rhymes = '',
} = data
if (!['fr', 'en'].includes(rawLang)) {
throw new HttpsError('invalid-argument', 'La langue doit être "fr" ou "en".')
}
const lang = rawLang
const languageLabel = lang === 'en' ? 'English' : 'français'
const languageInstruction =
lang === 'en'
? 'Write the title, lyrics and description in English.'
: 'Rédige le titre, les paroles et la description en français.'
const rhymesInstruction = resolveRhymesInstruction(rhymes)
// 1. Préparation Structure
@@ -201,6 +211,7 @@ Tu es le meilleur parolier musical actuel, expert en "Songwriting" pour les IA g
Ta spécialité est la **Prosodie** (le rythme naturel des mots) et l'impact émotionnel.
TES RÈGLES D'OR :
0. **LANGUE** : ${languageInstruction}
1. **MÉTRIQUE & RYTHME** : Tes vers doivent être "chantables". Compte les syllabes pour qu'elles collent au style musical demandé. Évite les phrases trop longues ou imprononçables rapidement.
2. **RIMES** : Suis strictement <TYPE_DE_RIMES> du brief. Si "Sans rimes" ou "Mélange des deux" est demandé, respecte l'absence/alternance de rimes. Si rien n'est indiqué, fais des rimes riches et évite les rimes faciles (amour/toujours).
3. **SHOW, DON'T TELL** : N'écris pas "Je suis triste", écris "La pluie brouille mes carreaux". Utilise des détails sensoriels.
@@ -224,6 +235,7 @@ Retourne UNIQUEMENT un JSON valide.
const prompt = `
<BRIEF_CREATIF>
<LANGUE>${languageLabel}</LANGUE>
<OBJECTIF>${objective || 'Créer une chanson mémorable'}</OBJECTIF>
<CONTEXTE>${context || 'Libre interprétation'}</CONTEXTE>
<EMOTION_DOMINANTE>${emotion || 'Intense'}</EMOTION_DOMINANTE>
@@ -237,6 +249,7 @@ ${structureTags || fallbackStructureTags}
</STRUCTURE_IMPOSEE>
<CONSIGNES_GENERATION>
0. ${languageInstruction}
1. Génère un **Titre** percutant (moins de 6 mots).
2. Pour chaque section <SECTION>, écris le contenu adapté :
- Si c'est "Instrumental" ou "Solo" : laisse le champ 'lyrics' vide ou mets une brève indication d'ambiance entre parenthèses ex: "(Solo de guitare déchirant)".