tlavandier/OpenData-Bordeaux-RSE
1
1# RAG pour déposer un appel d'offre2 3import streamlit as st4from data_manager import get_data5import openai6import os7from dotenv import load_dotenv8 9def fetch_rse_data():10 data, _ = get_data()11 return data12 13load_dotenv(".streamlit/.env")14 15def perform_chat(messages, model):16 YOUR_API_KEY = os.getenv("API_TOKEN_PERPLEXITYAI")17 if YOUR_API_KEY is None:18 raise Exception("API key not found. Please check votre configuration .env.")19 client = openai.OpenAI(api_key=YOUR_API_KEY, base_url="https://api.perplexity.ai")20 21 response_stream = client.chat.completions.create(22 model=model, # Utiliser le modèle sélectionné23 messages=messages,24 stream=True25 )26 27 assistant_response = ""28 for chunk in response_stream:29 assistant_response += chunk.choices[0].delta.content30 31 st.write(assistant_response)32 33def format_company_rse(data):34 """35 Formate une chaîne contenant le nom de l'entreprise et l'action RSE pour chaque enregistrement.36 """37 formatted_string = ""38 for record in data:39 nom = record.get("nom_courant_denomination", "Inconnu")40 action = record.get("action_rse", "Non spécifié")41 formatted_string += f"**Nom** : {nom}, **Action RSE** : {action}\n\n"42 return formatted_string43 44def run_rag(tender, data, model):45 question = f"""Voici les données des actions RSE des entreprises de Bordeaux Métropole: \n{format_company_rse(data)}, 46 Je voudrais savoir quelles sont les entreprises qui pourraient correspondre à cet appel d'offre: {tender} 47 Fais moi une présentation détaillée TOUJOURS EN FRANCAISE de quelles sont les entreprises qui pourraient correspondre à cet appel d'offre ? LA REPONSE QUE TU DONNES DOIT ETRE ECRITE EN FRANCAIS."""48 messages = [49 {"role": "system", "content": "Tu es une intelligence artificielle et ton objectif est de donner une réponse polie, claire et détaillée à l'utilisateur. Tu dois répondre en français."},50 {"role": "user", "content": question}51 ]52 st.markdown("**Question posée :**")53 st.write(question)54 st.markdown("**Réponse IA :**")55 perform_chat(messages, model)56 57def display_call_for_tender():58 st.title("Déposer votre appel d'offre")59 tender_description = st.text_area("Décrivez l'appel d'offre :")60 61 # Ajouter le menu déroulant pour sélectionner le modèle62 model = st.selectbox("Choisissez un modèle d'IA :", ["sonar-medium-online", "mistral-7b-instruct", "mixtral-8x7b-instruct", "sonar-small-online", "codellama-70b-instruct"])63 64 if st.button("Rechercher des entreprises"):65 data = fetch_rse_data()66 if tender_description:67 run_rag(tender_description, data, model)68 else:69 st.write("Veuillez saisir une description pour l'appel d'offre.")70 