CoolFace
Apppublic

tlavandier/OpenData-Bordeaux-RSE

sourceHugging Facemitupdated 2y agoView on Hugging Face
1likes
RAG.py70 linesDownload Raw Back to root
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