Aller au contenu
Projet de développement SGBD

Exercice 2 : Interface de Chat

Exercice 2 : Création d’une interface de chat

Après avoir pondu un mini chat qui se contentait d’une unique question, place aux choses (un peu) plus sérieuses. Cette fois, vous allez pondre une interface façon ChatGPT… Voici en gros ce que vous devrez faire :

  1. Lister les conversations (par ordre décroissant de fraîcheur), pour que l’utilisateur puisse naviguer entre différentes discussions – ou illusions de discussions.
  2. Sélectionner un modèle de langage (avec votre composant du chapitre précédent, fort heureusement déjà codé). Quand vous changez de modèle, vous sauvegardez ce choix dans :
    • La table users (parce que, manifestement, on veut se souvenir de vos choix pour plus tard).
    • Les données de la conversation sélectionnée (si elle existe), histoire de tout synchroniser.
  3. Afficher les messages liés à la conversation sélectionnée. Oui, c’est un concept dingue de chat multi-conversations, mais on croit en vous (enfin, à moitié).
  4. Gestion du loader lors de l’envoi d’un message : pendant que l’API d’OpenRouter fait son œuvre, montrez un indicateur, sinon l’utilisateur risque de bégayer d’impatience.
  5. Génération automatique d’un titre pour la conversation dès que le premier message de la discussion obtient une réponse. Ainsi, vous faites un deuxième appel à l’API (vous aimez la surenchère, non ?).
  6. Mise en forme : évidemment, vous appliquez votre mise en page markdown et la coloration de code (vue au chapitre précédent), histoire que le tout ait l’air au moins un peu présentable.

Exemple d’accueil pour l’interface de chat

Exemple de conversation

Organisation de votre Chef-d’Œuvre

  • Vues : Une vue principale listant les conversations, plus éventuellement un composant dédié à l’affichage d’une conversation donnée (titre, messages, champ de saisie).
  • Modèles : Oui, de vrais Models Eloquent, pas des brouillons. Vous aurez un modèle Conversation, un modèle Message, etc. On ne va pas détailler plus, vous avez un cerveau (normalement).
  • Routes : Au moins une route pour afficher les conversations, une pour afficher une conversation précise, une pour poster un message, et ainsi de suite. Vous connaissez la chanson.
  • Contrôleurs : Un ConversationController et un MessageController, pourquoi pas, ou vous mergez tout dans un seul… C’est vous qui décidez du bazar, du moment que ça fonctionne.

Points d’Attention

  1. Enregistrement du modèle sélectionné : pas de discussion stérile, assurez-vous que quand l’utilisateur choisit un modèle, vous mettez à jour la colonne correspondante dans la table users. Si une conversation est active, mettez aussi à jour la table conversations.
  2. Tri des conversations : du plus récent au plus ancien. On sait qu’ordonner c’est pas sorcier, mais évitez de confondre ASC et DESC, merci.
  3. Loader pendant l’appel API : On veut un indicateur visuel. Ou un superbe squelette stylé, ou même un text brut "Chargement…". Bref, un signe de vie.
  4. Titre auto : Dès que la première réponse d’une conversation arrive, vous relancez votre cher ChatService ou tout autre service pour générer un titre. Trop se creuser la tête, c’est so 2020.
  5. Markdown & highlight : Pas d’excuse pour avoir du texte tout nu. Faites briller votre rendu, comme un sou neuf.

Conclusion

Aucune raison de paniquer : vous disposez déjà des briques indispensables (le ChatService, votre configuration d’OpenRouter, votre formidable component de sélection de modèle). Réutilisez tout ça pour concevoir cette interface de chat, qui se veut ultra-ergonomique.

Si vous restez coincés, posez-vous la question : « Qu’ai-je encore oublié de faire ? » et, dans 99 % des cas, la réponse sera : « À peu près tout ». Bon courage. Inutile de dire que la barre de crédibilité est haute… mais ça vaut le coup d’essayer.

Maintenant, à vos claviers, petits aventuriers de la programmation, votre ChatGPT-like vous attend.

Autres exemples