start integrate suno and generate lyrics with gemini
This commit is contained in:
@@ -0,0 +1,95 @@
|
||||
const {onCall} = require("firebase-functions/https");
|
||||
const {z} = require("genkit");
|
||||
const {generateAI} = require("../index");
|
||||
|
||||
exports.generateLyrics = onCall({}, async ({auth = {}, data = {}}) => {
|
||||
try {
|
||||
const {
|
||||
objective = "Célébrer l'agence Minuit et mettre en avant son " +
|
||||
"expertise digitale, son esprit d'équipe et sa créativité.",
|
||||
context = "L'agence Minuit accompagne les startups et entreprises " +
|
||||
"innovantes dans la création de produits digitaux, du prototype " +
|
||||
"à la version de financement, jusqu'à l'optimisation et la mise " +
|
||||
"à l'échelle. Spécialisée dans le développement sur-mesure " +
|
||||
"d'applications mobiles, elle valorise l'humain, le design et " +
|
||||
"l'accompagnement personnalisé. Esprit nocturne, équipe passionnée.",
|
||||
emotion = "La Joie : expose un bonheur profond, l'émerveillement, " +
|
||||
"la gratitude, satisfaction intense, énergie positive.",
|
||||
style = "Upbeat : Pour une ambiance joyeuse et rythmée.",
|
||||
audience = "L'équipe Minuit et ses clients fidèles, startups " +
|
||||
"ambitieuses et partenaires visionnaires.",
|
||||
structure = ["couplet", "refrain", "couplet", "refrain"],
|
||||
rhymes = "Avec rimes",
|
||||
} = data;
|
||||
|
||||
console.log("Function generate lyrics start with data", data);
|
||||
|
||||
const system = `
|
||||
Tu es un parolier expert en chanson française moderne et populaire.
|
||||
Tu écris des chansons marquantes, accessibles, sur des thématiques ` +
|
||||
`d'innovation, d'esprit d'équipe et de créativité digitale.
|
||||
Ton ` +
|
||||
`écriture doit toucher à la fois l'humain, le collectif et la ` +
|
||||
`passion d'entreprendre.
|
||||
Tu dois générer un titre accrocheur et ` +
|
||||
`mémorable pour la chanson en plus des paroles.
|
||||
Respecte ` +
|
||||
`précisément la structure demandée et fournis le résultat dans un ` +
|
||||
`format JSON clair, respectant strictement le schéma demandé.
|
||||
`.trim();
|
||||
|
||||
// Construction du prompt utilisateur
|
||||
const prompt = `
|
||||
Objectif : ${objective}
|
||||
Contexte : ${context}
|
||||
Émotion : ${emotion}
|
||||
Style musical : ${style}
|
||||
Audience cible : ${audience}
|
||||
Structure de la chanson : ${structure.join(" => ")}
|
||||
Schéma de rimes : ${rhymes}
|
||||
|
||||
Génère un titre accrocheur et les paroles de la chanson en suivant ` +
|
||||
`strictement cette structure.
|
||||
Le titre doit être court, ` +
|
||||
`mémorable et refléter l'esprit de l'agence Minuit.
|
||||
Pour chaque ` +
|
||||
`partie ("couplet" ou "refrain"), écris 4 à 16 lignes adaptées, ` +
|
||||
`expressives et cohérentes avec le style et l'émotion souhaitée.
|
||||
`.trim();
|
||||
|
||||
// Définition du schéma zod/genkit pour la validation du retour
|
||||
const lyricsSchema = z.object({
|
||||
title: z.string().describe("Titre de la chanson, court et accrocheur"),
|
||||
lyrics: z
|
||||
.array(
|
||||
z.object({
|
||||
type: z
|
||||
.string()
|
||||
.describe(
|
||||
"Type de section : \"couplet\" ou \"refrain\" " +
|
||||
"selon la structure",
|
||||
),
|
||||
lyrics: z
|
||||
.string()
|
||||
.describe(
|
||||
"Paroles de la section, chaque ligne séparée " +
|
||||
"par un retour à la ligne",
|
||||
),
|
||||
}),
|
||||
)
|
||||
.describe(
|
||||
"Paroles de la chanson sous forme de tableau de sections " +
|
||||
"structurées.",
|
||||
),
|
||||
success: z.boolean().describe("Indique si la génération a réussi"),
|
||||
});
|
||||
|
||||
return await generateAI({
|
||||
system,
|
||||
prompt,
|
||||
schema: lyricsSchema,
|
||||
});
|
||||
} catch (e) {
|
||||
console.log(e);
|
||||
}
|
||||
});
|
||||
Reference in New Issue
Block a user