Interface graphique
Jusqu'à présent les questions à destination du LLM sont rédigées depuis notre programme, ce n'est évidemment pas une situation d'avenir ! Nous allons donc mettre en place une interface graphique afin de permettre aux utilisateurs de poser des questions sans avoir besoin de modifier le code.
Nous pourrions mettre en place un serveur qui pourrait être interrogé par un client (page web écrite en HTML et JavaScript), mais il existe une solution beaucoup plus simple à mettre en oeuvre qui va nous permettre de tout écrire en Python : Gradio
Gradio est une bibliothèque Python qui permet de mettre en place une interface graphique dans un navigateur Web en écrivant uniquement quelques lignes de Python.
Repartons sur l'exemple du chapitre 4 :
from dotenv import load_dotenv
from openai import OpenAI
from IPython.display import Markdown, display
from pypdf import PdfReader
import os
import gradio as gr
load_dotenv()
API_KEY = os.getenv('GOOGLE_API_KEY')
ìmport
: la bibliothèque gradio (que nous utiliserons avec l'alias gr
).
reader = PdfReader("./reglement_interieur.pdf")
reglement = ""
for page in reader.pages:
text = page.extract_text()
if text:
reglement += text
prompt_system = f"Tu dois répondre aux questions portant sur le règlement intérieur de lycée Rouvière de Toulon.\
Tu ne dois aborder aucun autre sujet. Si tu ne trouves pas la réponse à la question posée, tu ne dois pas inventer une réponse,\
tu dois simplement dire 'Désolé, je n'ai pas la réponse à cette question'. \
Pour t'aider à répondre aux questions, tu peux consulter le règlement intérieur du lycée Rouvière : \n {reglement}\n"
llm = OpenAI(api_key=API_KEY, base_url="https://generativelanguage.googleapis.com/v1beta/openai/")
reglement
, nous créons notre prompt système et une instance de la classe OpenAI
.
Petite nouveauté maintenant, nous allons créer une fonction chat
qui va contenir l'appel au LLM. Cette fonction prend 2 paramètres :
- message
qui correspond au message que l'on va envoyer au LLM
- history
que nous n'allons pas expliquer dans ce chapitre (mais sa présence est obligatoire pour le bon fonctionnement de gradio)
def chat(message, history):
msg = [{"role": "system", "content": prompt_system}] + [{"role": "user", "content": message}]
response = llm.chat.completions.create(model = 'gemini-2.0-flash', messages = msg)
answer = response.choices[0].message.content
return answer
chat
. La fonction renvoie le texte correspondant à la réponse du LLM.
Il nous reste à mettre en place notre interface graphique avec cette unique ligne :
gr.ChatInterface(chat, type="messages").launch()
Code complet :
from dotenv import load_dotenv
from openai import OpenAI
from IPython.display import Markdown, display
from pypdf import PdfReader
import os
import gradio as gr
load_dotenv()
API_KEY = os.getenv('GOOGLE_API_KEY')
reader = PdfReader("./reglement_interieur.pdf")
reglement = ""
for page in reader.pages:
text = page.extract_text()
if text:
reglement += text
prompt_system = f"Tu dois répondre aux questions portant sur le règlement intérieur de lycée Rouvière de Toulon.\
Tu ne dois aborder aucun autre sujet. Si tu ne trouves pas la réponse à la question posée, tu ne dois pas inventer une réponse,\
tu dois simplement dire 'Désolé, je n'ai pas la réponse à cette question'. \
Pour t'aider à répondre aux questions, tu peux consulter le règlement intérieur du lycée Rouvière : \n {reglement}\n"
llm = OpenAI(api_key=API_KEY, base_url="https://generativelanguage.googleapis.com/v1beta/openai/")
def chat(message, history):
msg = [{"role": "system", "content": prompt_system}] + [{"role": "user", "content": message}]
response = llm.chat.completions.create(model = 'gemini-2.0-flash', messages = msg)
answer = response.choices[0].message.content
return answer
gr.ChatInterface(chat, type="messages").launch()