Spaces:
Runtime error
Runtime error
import os | |
import gradio as gr | |
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader | |
from llama_index.readers.web import SimpleWebPageReader | |
from llama_index.llms.mistralai import MistralAI | |
from llama_index.embeddings.mistralai import MistralAIEmbedding | |
from llama_index.core import Settings | |
from llama_index.core.query_engine import RetrieverQueryEngine | |
from dotenv import load_dotenv | |
def print_conversation(chat_history): | |
""" | |
Fonction de vérification. | |
Args: | |
chat_history (List[List[str]]): historique d'échanges avec le chatbot | |
""" | |
for question, response in chat_history: | |
print('Question :', end = '\n') | |
print(question, end = '\n') | |
print('Response :', end = '\n') | |
print(response, end = '\n\n') | |
def main( | |
query_engine, | |
elevage, | |
temperature, | |
humidite, | |
meteo | |
): | |
""" | |
Fonction qui crée le bloc du chatbot avec gradio. | |
Couplage entre le | |
Args: | |
query_engine (_type_): index de recherche vectorielle. | |
elevage (str): | |
temperature (str): | |
humidite (str): | |
meteo (str): | |
Returns: | |
None | |
""" | |
title = "Gaia Mistral Chat RAG URL Demo" | |
description = "Example of an assistant with Gradio, RAG from url and Mistral AI via its API" | |
placeholder = "Vous pouvez me posez une question sur ce contexte, appuyer sur Entrée pour valider" | |
with gr.Blocks() as demo: | |
chatbot = gr.Chatbot() | |
msg = gr.Textbox(placeholder = placeholder) | |
clear = gr.ClearButton([msg, chatbot]) | |
def respond(message, chat_history): | |
global_message = f""" | |
Tu es un chatbot qui réponds en français, commence et qui dois aider à déterminer les risques parasitaires d'élevage en fonction des conditions météo, voici les conditions météo : | |
- élevage : {elevage} | |
- température moyenne : {temperature} | |
- humidité moyenne : {humidite} | |
- météo : {meteo} | |
{message} | |
Donne-moi ensuite les solutions de prévention et de traitement pour chacun d'eux indépendamment du tableau. | |
Tu dois impérativement répondre en français. | |
""" | |
response = query_engine.query(global_message) | |
chat_history.append((message, str(response))) | |
print_conversation(chat_history) | |
return '', chat_history | |
msg.submit(respond, [msg, chatbot], [msg, chatbot]) | |
demo.title = title | |
demo.launch() | |
if __name__ == "__main__": | |
#### Loading de la clef Mistral | |
load_dotenv() | |
env_api_key = os.getenv('MISTRAL_API_KEY') | |
### Type du modèle | |
llm_model = 'mistral-small-2312' | |
### Config modèle | |
Settings.llm = MistralAI( | |
max_tokens = 1024, | |
api_key = env_api_key | |
) | |
Settings.embed_model = MistralAIEmbedding( | |
model_name="mistral-embed", | |
api_key=env_api_key | |
) | |
### Mise en place de l'index | |
documents = SimpleDirectoryReader("documents").load_data() | |
index = VectorStoreIndex.from_documents(documents) | |
query_engine = index.as_query_engine(similarity_top_k=15) | |
### Précision du type d'élevage et des conditions météo | |
elevage = 'bovin' | |
temperature = '15°C' | |
humidite = '40%' | |
meteo = 'pluvieux' | |
### Lancement du Gradio | |
main( | |
query_engine, | |
elevage, | |
temperature, | |
humidite, | |
meteo | |
) | |