Avancé
🧠 Fondamentaux
30 XP
0 personnes ont réussi
Interface CLI avec Rich
Ton agent est fonctionnel, mais pour le moment il vit dans un fichier Python qu'on execute dans un terminal triste. Pour en faire un vrai outil utilisable, il lui faut une interface en ligne de commande (CLI) agreable. La librairie Rich transforme ton terminal en interface coloree avec des spinners, des tableaux, et du texte formate.
pip install rich
Rich, c'est comme du CSS pour le terminal. Tu peux afficher du texte en couleur, des panneaux encadres, des barres de progression, et meme du code avec coloration syntaxique. Voici les composants qu'on va utiliser :
from rich.console import Console from rich.panel import Panel from rich.table import Table from rich.markdown import Markdown
Pour cet exercice, on ne va pas construire la boucle interactive (ca viendra dans le projet final). On va construire les fonctions de formatage qui preparent l'affichage.
Ecris une fonction formater_reponse_agent(reponse, sources) qui prend la reponse de l'agent (string) et la liste des sources (list de dicts avec "numero", "titre", "url"). Elle renvoie un dictionnaire avec deux cles : "reponse_formatee" (la reponse avec un en-tete) et "sources_formatees" (les sources en texte lisible).
Ecris une fonction formater_statistiques(stats) qui prend un dictionnaire de statistiques (iterations, outils_utilises, temps si disponible) et renvoie un texte resume sur une ligne.
Ecris aussi une fonction traiter_commande(commande, historique_cout=None) qui gere les commandes speciales : /help renvoie le texte d'aide /clear renvoie {"action": "clear"} /cost renvoie un resume des couts (basee sur historique_cout, une liste de nombres) Tout autre texte renvoie {"action": "question", "texte": commande}
sources = [
{"numero": 1, "titre": "Python.org", "url": "https://python.org"},
{"numero": 2, "titre": "Docs", "url": "https://docs.python.org"},
]
r = formater_reponse_agent("Python est genial.", sources)
assert "reponse_formatee" in r and "sources_formatees" in r
assert "Python est genial" in r["reponse_formatee"]
assert "[1]" in r["sources_formatees"] and "[2]" in r["sources_formatees"]
assert "https://python.org" in r["sources_formatees"]
Formatage sans sources
r = formater_reponse_agent("Reponse directe.", [])
assert "sources_formatees" in r
assert len(r["sources_formatees"]) > 0, "Doit afficher un message meme sans sources"