mix rhymes

This commit is contained in:
2026-02-23 14:41:25 +01:00
parent 125ac0f40f
commit 8648793d64
2 changed files with 33 additions and 15 deletions
+33 -3
View File
@@ -82,6 +82,35 @@ const sanitizeStructureEntries = (structure = []) => {
const mapStructureToPrompt = (structure = []) =>
sanitizeStructureEntries(structure).map((entry) => STRUCTURE_PROMPT_LABELS[entry] || entry)
const RHYMES_PRESETS = [
{
matchers: ['avec rimes', 'avec des rimes', 'rimes'],
prompt: 'Rimes riches et variées (rimes finales + internes). Évite les rimes faciles.',
},
{
matchers: ['sans rimes', 'sans rime', 'pas de rimes', 'pas de rime'],
prompt:
"Vers libres sans rimes finales ni schéma de rimes. Évite les rimes intentionnelles, privilégie le rythme et l'imagerie.",
},
{
matchers: ['mélange des deux', 'melange des deux', 'mixte'],
prompt:
'Mélange: alterne sections rimées et sections non rimées. Au moins la moitié des lignes sans rime finale. Quand tu rimes, rimes riches et variées.',
},
]
const resolveRhymesInstruction = (value) => {
if (typeof value === 'string') {
const trimmed = value.trim()
if (!trimmed) return ''
const key = trimmed.toLowerCase()
const preset = RHYMES_PRESETS.find((option) => option.matchers.includes(key))
return preset ? preset.prompt : trimmed
}
if (Array.isArray(value)) return value.join(', ')
return ''
}
// --- MODERATION ---
const buildModerationBrief = ({
@@ -119,6 +148,7 @@ exports.generateLyrics = onCall({}, async ({ auth = {}, data = {} }) => {
structure: rawStructure = ['couplet', 'refrain', 'couplet', 'refrain'],
rhymes = '',
} = data
const rhymesInstruction = resolveRhymesInstruction(rhymes)
// 1. Préparation Structure
const sanitizedStructure = sanitizeStructureEntries(rawStructure)
@@ -135,7 +165,7 @@ exports.generateLyrics = onCall({}, async ({ auth = {}, data = {} }) => {
audience,
emotion,
structure: promptStructure,
rhymes,
rhymes: rhymesInstruction,
}
const moderationInput = buildModerationBrief(moderationPayload)
@@ -172,7 +202,7 @@ Ta spécialité est la **Prosodie** (le rythme naturel des mots) et l'impact ém
TES RÈGLES D'OR :
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 RICHES** : Évite les rimes faciles (amour/toujours). Cherche des assonances et des rimes internes.
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.
4. **STRUCTURE STRICTE** : Respecte exactement l'ordre des sections demandées.
- **Couplet** : Raconte l'histoire, pose le décor.
@@ -199,7 +229,7 @@ Retourne UNIQUEMENT un JSON valide.
<EMOTION_DOMINANTE>${emotion || 'Intense'}</EMOTION_DOMINANTE>
<STYLE_MUSICAL>${style || 'Pop Moderne'}</STYLE_MUSICAL>
<CIBLE>${audience || 'Tout public'}</CIBLE>
<TYPE_DE_RIMES>${rhymes || 'Rimes croisées et riches'}</TYPE_DE_RIMES>
<TYPE_DE_RIMES>${rhymesInstruction || 'Rimes croisées et riches'}</TYPE_DE_RIMES>
</BRIEF_CREATIF>
<STRUCTURE_IMPOSEE>