L’objectif de ce projet est de concevoir un site de partage de recettes qui va permettre de :
Le LLM ne servira pas à gérer les recettes, mais à sélectionner des recettes pertinentes parmi celles présentes sur le site à partir de requêtes en langage naturel. Par exemple : « Je cherche un dessert pour Noël, assez classique et faisable en moins de 2 h. » Le LLM devra être hébergé sur les serveurs de votre entreprise.
Les recettes de base contiennent :
Une recette peut être une variante d’une recette existante. La variante fait référence à une recette de base ou à une autre variante. Elle peut enlever des ingrédients, changer des quantités et rajouter des ingrédients. Elle peut aussi modifier le temps et contient un texte complémentaire qui ajuste les instructions et qui explique.
L’affichage des variantes doit refléter la recette de base ainsi que les modifications apportées. Pour l’affichage d’une variante de variante, on se rapporte à la recette de base. On doit voir visuellement les changements. Une convention d’affichage devra être définie afin de signaler visuellement les différences entre la recette de base et ses variantes (codes couleur, texte barré, surlignage, etc.).
Le site devra gérer 3 types d’utilisateurs : les utilisateurs non authentifiés, les utilisateurs authentifiés et l’administrateur. Tous les utilisateurs, qu’ils soient authentifiés ou non, peuvent consulter les recettes publiées sur le site.
Les utilisateurs non authentifiés peuvent simplement voir la page d’accueil du site, qui présente les dernières recettes publiées, et faire des recherches « simples » par mots-clés.
Les utilisateurs authentifiés peuvent :
Tous les utilisateurs authentifiés possèdent un porte-monnaie virtuel sur le site, qu’ils peuvent recharger en euros à l’aide de leur carte bancaire via Stripe. Les super-likes coûtent 1 € ; ce montant est prélevé sur le porte-monnaie virtuel, qui ne peut jamais être dans le négatif. L’argent des super-likes sera redistribué en fin de mois aux auteurs des recettes, selon un mécanisme décrit plus loin.
Contrairement aux autres utilisateurs, l’administrateur ne possède pas de porte-monnaie virtuel personnel. La plateforme dispose en revanche de deux porte-monnaie virtuels techniques, visibles uniquement par l’administrateur du site :
Quand un utilisateur utilise un super-like, 40 % de la somme reviennent directement au site comme bénéfice et sont transférés sur le porte-monnaie des bénéfices du site. Les 60 % restants sont versés sur le porte-monnaie de redistribution.
À chaque fin de mois, la somme présente sur le porte-monnaie de redistribution est redistribuée vers les auteurs des recettes, en tenant compte des recettes ayant reçu des super-likes et des recettes dont elles sont des variantes, selon la règle suivante :
Pour chaque recette, la redistribution est calculée sur la somme totale des montants issus des super-likes reçus pendant le mois ; cette règle influe sur la manière dont sont gérés les arrondis. En cas de montants qui ne sont pas exactement divisibles en centimes lors de ces répartitions, les arrondis sont effectués au centime d’euro. Si un centime résiduel subsiste du fait des arrondis, ce centime bénéficie au propriétaire qui est le plus proche, dans la chaîne, de la recette ayant reçu le super-like.
Par exemple, imaginons une recette A qui est une variante de la recette B, elle-même variante de la recette C. Si un utilisateur super-like la recette A pour un coût de 1 €, il y a 60 centimes à redistribuer (les 40 centimes restants allant au porte-monnaie des bénéfices).
Entre les propriétaires de A, B et C :
Les utilisateurs et l’administrateur doivent avoir accès à un détail de l’origine des fonds, recette par recette.
L’administrateur du site doit pouvoir, depuis un espace dédié, modifier les coûts des super-likes et planifier des promotions des types suivants :
Les promotions doivent être planifiables à l’avance et modifiables tant qu’elles ne sont pas en cours. Il ne peut pas y avoir deux promotions actives simultanément. Les promotions s’appliquent à l’ensemble des utilisateurs. Ceux-ci doivent être informés des promotions en cours et à venir par un mécanisme de notification défini dans le cadre du projet.
Les super-likes gratuits sont payés depuis le porte-monnaie des bénéfices. Il faut empêcher que l’administrateur puisse définir une politique tarifaire qui ferait perdre de l’argent au site. Il vous incombe de proposer une solution garantissant que le site ne puisse pas perdre d’argent, en tenant compte notamment des promotions, des super-likes gratuits et de la répartition des montants.
Dans le reporting financier accessible à l’administrateur et aux utilisateurs, les promotions appliquées doivent être clairement identifiées, de manière à éviter toute contestation.
Les utilisateurs inscrits peuvent effectuer une recherche intelligente pour 10 centimes d’euro. L’utilisateur fournit un petit texte décrivant ses envies et ses contraintes, et le site propose des recettes adaptées. Vous utiliserez un LLM local pour sélectionner les recettes (et variantes pertinentes).
La page d’accueil du site change selon que l’utilisateur est authentifié ou non. Un utilisateur authentifié voit, en plus, les recettes publiées pendant le dernier mois par les personnes qu’il suit, puis par les personnes suivies par ces personnes, etc. Dans un même niveau de proximité, les recettes sont classées selon le nombre de likes et de super-likes reçus pendant le mois.
Votre site devra utiliser les technologies suivantes:
Spring avec les modules Spring Data, Spring AI et Spring Security;Spring MVC avec Thymeleaf ou un autre moteur de templates. Ce client devra être entèrement fonctionnel mais certaines feature avancées comme les notifications peuvent ne pas être présentes. Spring Boot pour la configuration de Spring;Hibernate comme ORM;Votre projet doit utiliser Maven comme outil de build.
Vous collaborerez sur votre projet en utilisant Git. Une fois votre groupe crée, vous créerez un projet sur GitLab.
Votre activité sur GitLab sera prise en compte dans votre note finale.
Spring Boot quand il est utilisé avec Spring Data et Hibernate met en place un pattern assez douteux : il crée une Session hibernate lors de chaque appel à une méthode du controleur. Comme cela est très bien expliqué dans cet article, cette approche peut entrainer des problèmes de performances.
Dans votre projet, vous devez désactiver ce pattern en mettant dans votre fichier application.properties:
spring.jpa.open-in-view=false
Votre site devra:
Vous serez évalué en partie sur la capacité de votre site à être utilisé par un très grand nombre d'utilisateurs.
Vous serez aussi évalué sur la qualité de votre architecture logicelle.
Vous devez créer un groupe de 5 personnes (sauf dérogation négociée avec les enseignants). Dans votre groupe, vous désignerez un chef de projet qui servira d'intermédiaire avec les enseignants.
La première tâche du chef de projet est de créer le gitlab. Dans le README du projet, vous mettrez les noms et prénoms et les emails des membres du groupe. Ensuite, il invitera les membres du projet et les deux enseignants comme Maintener du projet: @acarayol et @Youssefooooo.
Le projet doit contenir un README qui commence par la liste des membres du projet avec leurs adresses email en commençant par le responsable du projet. Le fichier README doit donner les instructions à suivre pour lancer le projet après avoir cloné le projet depuis GitLab.
Le projet doit contenir des données et fonctionner avec un base de données tournant localement.
Pour le rendu, le projet doit être finalisé sur GitLab et déposé sur e-learning. Le chef de projet devra:
Après le dépot de votre projet, vous recevrez une liste de questions auxquelles vous devrez répondre dans un rapport. Vous ne pourrez plus modifier votre projet. Le rapport comptera dans l'évaluation.
Les dates limites sont fermes: ne rien avoir déposé à cette date ou ne pas être présent à la soutenance entraine automatiquement 0 au projet. Conformément aux modalités de contrôle des connaissances du master, la note de projet n'est pas compensable en deuxième session.