Article

Créer un garde-manger IA avec Firebase AI Logic et Gemini

Comment TinyRecipe utilise Firebase AI Logic et Gemini pour générer rapidement des recettes structurées à partir des ingrédients disponibles.

Créer un garde-manger IA avec Firebase AI Logic et Gemini

En tant que développeur indépendant gérant plusieurs apps mobiles local-first, mes principes ont toujours été la rapidité, l’utilité et la maîtrise des coûts. Pour TinyRecipe, l’objectif était simple : réduire le gaspillage alimentaire en générant des recettes pratiques, étape par étape, à partir des seuls ingrédients présents dans le réfrigérateur ou le garde-manger.

Intégrer l’IA générative dans une app mobile peut vite entraîner des réponses lentes, des données JSON imprévisibles et des coûts d’API croissants si l’architecture n’est pas soigneusement pensée. Voici comment j’ai intégré Firebase AI Logic, avec Gemini sur Vertex AI, pour générer rapidement des recettes structurées tout en limitant les coûts récurrents.

Le défi principal : encadrer le LLM

Si on laisse un LLM créer une recette sans contraintes, trois problèmes apparaissent immédiatement :

  1. Hallucinations et associations étranges : il pourrait suggérer de préparer une soupe avec de l’huile d’olive, de la sauce soja et un citron.
  2. Schéma incohérent : convertir du texte libre ou du Markdown non structuré en composants natifs de l’interface mobile entraîne des erreurs fragiles côté client.
  3. Forte consommation de tokens : des réponses sans limite épuisent rapidement le budget de tokens pour les instructions en plusieurs étapes.

Pour résoudre cela, j’ai utilisé l’intégration backend de Firebase avec Vertex AI afin d’imposer des instructions système strictes et une sortie structurée.

1. Encadrer le prompt système et imposer un schéma JSON

Au lieu de demander simplement une bonne recette au modèle, le prompt système l’oblige à respecter un contrat de schéma JSON strict :

{
  "title": "String",
  "prep_time_minutes": "Number",
  "difficulty": "Easy | Medium | Hard",
  "matched_pantry_items": ["Array of Strings"],
  "missing_staples_required": ["Array of Strings"],
  "instructions": [
    {
      "step_number": 1,
      "text": "String"
    }
  ]
}

Deux garde-fous ont rendu la fonctionnalité bien plus utile en pratique :

  • Exemption des produits de base : les utilisateurs ne devraient pas avoir à cocher le sel, le poivre, l’eau du robinet ou l’huile de cuisson dans leur garde-manger. Le prompt autorise explicitement ces produits de base, ce qui simplifie la sélection.
  • Isolation stricte des ingrédients : le modèle privilégie les ingrédients marqués comme disponibles dans le garde-manger numérique avant de proposer des ajouts.

2. Optimisations côté client : une expérience sans friction

Personne n’a envie de taper « 250 g de blanc de poulet en dés » sur un clavier mobile dans la cuisine.

[L’utilisateur touche les tags du garde-manger] -> [Le client crée un tableau] -> [Requête Firebase AI] -> [Affichage natif]
  • Tags de sélection rapide par catégorie : l’interface propose des tags classés par catégorie pour sélectionner rapidement les ingrédients courants.
  • Mise en cache locale : avant d’envoyer une requête à Firebase AI Logic, l’app calcule le hash du tableau d’ingrédients sélectionnés. Si l’utilisateur demande rapidement une recette avec les mêmes ingrédients principaux, TinyRecipe affiche instantanément le résultat en cache sans nouvel appel API.

3. Leçons retenues et prochaines étapes

Firebase AI Logic a rendu la mise à l’échelle d’une fonctionnalité d’IA générative remarquablement simple pour un développeur solo. En imposant des schémas JSON stricts à la sortie du modèle et en gardant l’état local, TinyRecipe offre :

  • une génération en moins de deux secondes
  • un affichage prévisible sans échec d’analyse
  • un gaspillage de tokens API négligeable

La fonctionnalité de garde-manger IA est désormais disponible sur iOS et Android.