spboucher04's picture
Update app.py
54625b7 verified
from openai import OpenAI
import streamlit as st
# Titre principal de la page
st.title("")
# Clé API OpenAI
client = OpenAI(api_key=st.secrets["OPENAI_API_KEY"])
if "openai_model" not in st.session_state:
st.session_state["openai_model"] = "gpt-4-turbo"
if "messages" not in st.session_state:
st.session_state.messages = []
# Affichage du logo Pong en haut du panneau de gauche
st.sidebar.image("logo.png", use_column_width=True)
# Mapping des noms conviviaux pour chaque contexte
context_files = {
"context0.txt": "Général",
"context1.txt": "Conseiller Financier",
"context2.txt": "Actuaire",
"context3.txt": "Avocat",
"context4.txt": "Comptable",
"context5.txt": "Médecin",
"context6.txt": "Dentiste",
"context7.txt": "Pharmacien",
"context8.txt": "Nutritionniste",
"context9.txt": "Conseiller en investissements immobiliers",
"context10.txt": "Conseiller en planification de voyages",
"context11.txt": "Conseiller en organisation d'événements",
"context12.txt": "Ingénieur Civil",
"context13.txt": "Psychologue",
"context14.txt": "Vétérinaire",
"context15.txt": "Architecte",
"context16.txt": "Conseiller en démarrage d'entreprise",
"context17.txt": "Conseiller en technologies de l'information",
"context18.txt": "Chef de Projet",
"context19.txt": "Informaticien",
"context20.txt": "Graphiste"
}
# Sélection du contexte
context_filenames = list(context_files.keys())
context_display_names = [context_files[filename] for filename in context_filenames]
selected_context_display = st.sidebar.selectbox("Choisissez un assistant:", context_display_names)
selected_context_file = context_filenames[context_display_names.index(selected_context_display)]
# Définir le texte du contexte
context_text = open(f'context/{selected_context_file}', 'r').read()
# Définir les questions suggérées en fonction du contexte
suggestions = {
"context0.txt": [
"Comment puis-je améliorer ma gestion du temps pour être plus productif au quotidien ?",
"Quels sont les meilleurs conseils pour gérer efficacement mon budget personnel ?",
"Comment puis-je améliorer ma communication pour renforcer mes relations professionnelles ?",
"Quelles stratégies recommandez-vous pour atteindre un équilibre entre vie professionnelle et personnelle ?"
],
"context1.txt": [
"Comment puis-je diversifier mon portefeuille d'investissement pour minimiser les risques ?",
"Quelles sont les options d'investissement les plus sûres pour les retraités ?",
"Comment les récentes modifications de la loi sur les impôts affectent-elles mes stratégies de planification fiscale ?",
"Quels sont les avantages et inconvénients des différents types de fonds d'investissement ?"
],
"context2.txt": [
"Quelles sont les meilleures pratiques pour modéliser le risque de longévité dans les produits d'assurance vie ?",
"Comment intégrer les considérations de risque cybernétique dans les polices d'assurance commerciale ?",
"Quel impact la réglementation internationale sur les réserves d'assurance a-t-elle sur la solvabilité des assureurs ?",
"De quelle manière les données démographiques et les tendances de santé publique influencent-elles les prévisions actuarielles pour les assurances santé ?"
],
"context3.txt": [
"Quelles sont les implications légales de la signature électronique sur les contrats internationaux ?",
"Comment les récentes modifications du droit du travail affectent-elles les petites entreprises ?",
"Quels sont les défis juridiques les plus courants pour les startups en technologie ?",
"Comment préparer une défense efficace pour un cas de violation de brevet ?"
],
"context4.txt": [
"Comment les nouvelles réglementations fiscales influencent-elles la planification fiscale pour les PME ?",
"Quels sont les meilleurs logiciels de comptabilité pour les auto-entrepreneurs ?",
"Comment effectuer un audit interne efficace ?",
"Quelles stratégies recommandez-vous pour maximiser les déductions fiscales ?"
],
"context5.txt": [
"Quelles sont les dernières avancées dans le traitement du diabète de type 2 ?",
"Comment intégrer les approches holistiques dans un plan de traitement conventionnel ?",
"Quels sont les risques associés aux nouvelles vaccinations pour les enfants ?",
"Comment améliorer la communication avec les patients ayant des croyances médicales diverses ?"
],
"context6.txt": [
"Quels sont les avantages et les inconvénients des implants dentaires par rapport aux ponts ?",
"Comment prévenir efficacement la gingivite chez les adolescents ?",
"Quelles sont les dernières techniques en esthétique dentaire ?",
"Comment gérer l'anxiété dentaire chez les patients adultes ?"
],
"context7.txt": [
"Quelles sont les interactions médicamenteuses courantes que les patients doivent surveiller avec les nouveaux médicaments cardiovasculaires ?",
"Comment la pharmacogénomique influence-t-elle la prescription de médicaments ?",
"Quels conseils donneriez-vous pour la gestion des médicaments à domicile ?",
"Quelles sont les tendances actuelles en matière de médicaments biosimilaires ?"
],
"context8.txt": [
"Comment adapter un plan nutritionnel à des besoins diététiques spécifiques, comme le diabète ou les allergies alimentaires ?",
"Quels sont les derniers développements en matière de superaliments et leur efficacité ?",
"Comment planifier des repas équilibrés et nutritifs pour toute la semaine ?",
"Quelles sont les meilleures pratiques pour maintenir une perte de poids à long terme ?"
],
"context9.txt": [
"Quels sont les marchés émergents les plus prometteurs pour les investissements immobiliers en ce moment ?",
"Comment analyser le rendement potentiel d'un investissement immobilier ?",
"Quelles sont les implications fiscales d'un investissement immobilier dans plusieurs États ou pays ?",
"Comment diversifier un portefeuille d'investissements immobiliers pour réduire les risques ?"
],
"context10.txt": [
"Quelles destinations offrent une expérience culturelle riche tout en étant peu fréquentées par les touristes ?",
"Comment puis-je compenser l'empreinte carbone de mes voyages internationaux ?",
"Quelles applications ou outils recommandez-vous pour rester organisé et efficace lors de voyages multiples ?",
"Comment assurer ma sécurité lors de voyages dans des régions instables ?"
],
"context11.txt": [
"Quelles sont les tendances actuelles en matière de technologies événementielles pour améliorer l'engagement des participants ?",
"Comment créer un événement hybride réussi qui combine des éléments en ligne et en personne ?",
"Quels sont les critères essentiels pour choisir le lieu parfait pour un type d'événement spécifique ?",
"Comment gérer efficacement les imprévus le jour de l'événement ?"
],
"context12.txt": [
"Quels sont les matériaux innovants en génie civil pour les infrastructures durables ?",
"Comment évaluer l'impact environnemental d'un nouveau projet de construction ?",
"Quelles techniques de renforcement sismique sont recommandées pour les bâtiments anciens ?",
"Comment la technologie des drones est-elle utilisée dans les grands projets de construction ?"
],
"context13.txt": [
"Quelles sont les thérapies les plus efficaces pour traiter l'anxiété chez les adolescents ?",
"Comment la psychologie positive peut-elle être intégrée dans les programmes de bien-être en entreprise ?",
"Quelles sont les implications de la thérapie en ligne par rapport à la thérapie traditionnelle en face à face ?",
"Comment traiter les troubles du sommeil sans médicaments ?"
],
"context14.txt": [
"Quels sont les signes de détresse alimentaire chez les petits animaux domestiques ?",
"Comment intégrer les soins préventifs dans le plan de santé d'un animal vieillissant ?",
"Quelles sont les considérations éthiques dans le traitement des animaux de ferme ?",
"Comment gérer les maladies chroniques chez les animaux sans l'utilisation excessive de médicaments ?"
],
"context15.txt": [
"Quelles sont les dernières tendances en matière de design durable pour les bâtiments résidentiels ?",
"Comment intégrer les principes du Feng Shui dans un plan architectural moderne ?",
"Quels sont les défis spécifiques de la construction sur des terrains irréguliers ?",
"Comment calculer efficacement le ratio coût-efficacité des matériaux de construction ?"
],
"context16.txt": [
"Quelles sont les erreurs les plus courantes que les entrepreneurs font lors du lancement d'une startup et comment les éviter ?",
"Comment valider une idée de produit sans un budget important ?",
"Quels sont les indicateurs clés de performance (KPI) essentiels pour une startup en phase de croissance ?",
"Comment attirer des investisseurs pour une série A ?"
],
"context17.txt": [
"Comment les dernières tendances en IA peuvent-elles être intégrées pour automatiser les opérations dans mon entreprise ?",
"Quelles sont les meilleures pratiques pour assurer la cybersécurité dans une infrastructure IT en croissance ?",
"Comment prioriser les mises à jour technologiques dans un budget limité ?",
"Quels sont les défis spécifiques à la gestion des données dans le cloud et comment les surmonter ?"
],
"context18.txt": [
"Quelles méthodologies de gestion de projet sont les plus efficaces pour les projets transnationaux ?",
"Comment évaluer les risques dans un projet de développement logiciel ?",
"Quels outils collaboratifs recommandez-vous pour des équipes distantes ?",
"Comment impliquer toutes les parties prenantes dans un projet de rénovation d'entreprise ?"
],
"context19.txt": [
"Quelles sont les meilleures pratiques pour sécuriser les données dans un environnement cloud ?",
"Comment optimiser les performances d'une base de données relationnelle ?",
"Quelles sont les implications éthiques de l'intelligence artificielle dans les décisions automatisées ?",
"Quelles sont les dernières avancées dans le développement de logiciels open source ?"
],
"context20.txt": [
"Quelles sont les tendances actuelles dans le design graphique pour le branding digital ?",
"Comment l'accessibilité peut-elle être intégrée dans le design web ?",
"Quels outils de design recommandez-vous pour les débutants en design graphique ?",
"Comment créer une identité visuelle cohérente pour une marque sur différentes plateformes ?"
]
}
suggested_questions = suggestions.get(selected_context_file, ["Avez-vous des questions ?", "Puis-je vous aider ?"])
# Fonction pour obtenir le message de bienvenue
def get_welcome_message(context_file):
messages = {
"context0.txt": "Bonjour! Je suis votre Assistant Général, développé par M-LAI, prêt à vous aider dans différents domaines.",
"context1.txt": "Bonjour! Je suis votre Conseiller Financier, développé par M-LAI, prêt à vous aider à gérer vos investissements.",
"context2.txt": "Bonjour! Je suis votre Actuaire, développé par M-LAI, prêt à vous fournir des conseils actuariels.",
"context3.txt": "Bonjour! Je suis votre Avocat, développé par M-LAI, ici pour vous aider dans vos questions juridiques.",
"context4.txt": "Bonjour! Je suis votre Comptable, développé par M-LAI, prêt à vous aider dans vos questions fiscales.",
"context5.txt": "Bonjour! Je suis votre Médecin, développé par M-LAI, ici pour répondre à vos questions médicales.",
"context6.txt": "Bonjour! Je suis votre Dentiste, développé par M-LAI, prêt à vous aider dans vos soins dentaires.",
"context7.txt": "Bonjour! Je suis votre Pharmacien, développé par M-LAI, prêt à vous aider à gérer vos médicaments.",
"context8.txt": "Bonjour! Je suis votre Nutritionniste, développé par M-LAI, prêt à vous aider à améliorer votre alimentation.",
"context9.txt": "Bonjour! Je suis votre Conseiller en investissements immobiliers, développé par M-LAI, prêt à vous aider dans vos investissements.",
"context10.txt": "Bonjour! Je suis votre Conseiller en planification de voyages, développé par M-LAI, prêt à vous aider à planifier vos voyages.",
"context11.txt": "Bonjour! Je suis votre Conseiller en organisation d'événements, développé par M-LAI, prêt à vous aider dans vos événements.",
"context12.txt": "Bonjour! Je suis votre Ingénieur Civil, développé par M-LAI, prêt à vous aider dans vos projets de construction.",
"context13.txt": "Bonjour! Je suis votre Psychologue, développé par M-LAI, prêt à vous aider dans vos questions de santé mentale.",
"context14.txt": "Bonjour! Je suis votre Vétérinaire, développé par M-LAI, prêt à vous aider dans vos questions vétérinaires.",
"context15.txt": "Bonjour! Je suis votre Architecte, développé par M-LAI, prêt à vous aider dans vos projets de design et de construction.",
"context16.txt": "Bonjour! Je suis votre Conseiller en démarrage d'entreprise, développé par M-LAI, prêt à vous aider dans vos projets de startup.",
"context17.txt": "Bonjour! Je suis votre Conseiller en technologies de l'information, développé par M-LAI, prêt à vous aider dans vos projets technologiques.",
"context18.txt": "Bonjour! Je suis votre Chef de Projet, développé par M-LAI, prêt à vous aider dans vos projets de gestion.",
"context19.txt": "Bonjour! Je suis votre Informaticien, développé par M-LAI, prêt à vous aider dans vos projets logiciels.",
"context20.txt": "Bonjour! Je suis votre Graphiste, développé par M-LAI, prêt à vous aider dans vos projets de design."
}
return messages.get(context_file, "Bonjour! Comment puis-je vous aider aujourd'hui?")
# Mettre à jour le message de bienvenue en fonction du contexte sélectionné
if "selected_context" not in st.session_state or st.session_state.selected_context != selected_context_file:
st.session_state.selected_context = selected_context_file
welcome_message = get_welcome_message(selected_context_file)
st.session_state.messages = [{"role": "assistant", "content": welcome_message}]
# Afficher les messages
for message in st.session_state.messages:
with st.chat_message(message["role"]):
st.markdown(message["content"])
# Ajouter des boutons pour les questions suggérées
def ask_question(question):
st.session_state.messages.append({"role": "user", "content": question})
full_messages = [{"role": "system", "content": context_text}, {"role": "user", "content": question}] + \
[{"role": m["role"], "content": m["content"]} for m in st.session_state.messages if m["role"] != "system"]
with st.chat_message("user"):
st.markdown(question)
with st.chat_message("assistant"):
stream = client.chat.completions.create(
model=st.session_state["openai_model"],
messages=full_messages,
stream=True,
)
response = st.write_stream(stream)
st.session_state.messages.append({"role": "assistant", "content": response})
st.sidebar.write("### Questions suggérées :")
for q in suggested_questions:
if st.sidebar.button(q):
ask_question(q)
# Entrée utilisateur
if prompt := st.chat_input("Entrez votre question ici..."):
st.session_state.messages.append({"role": "user", "content": prompt})
# Ajout du contexte système, non visible à l'utilisateur
full_messages = [{"role": "system", "content": context_text}, {"role": "user", "content": prompt}] + \
[{"role": m["role"], "content": m["content"]} for m in st.session_state.messages if m["role"] != "system"]
with st.chat_message("user"):
st.markdown(prompt)
with st.chat_message("assistant"):
stream = client.chat.completions.create(
model=st.session_state["openai_model"],
messages=full_messages,
stream=True,
)
response = st.write_stream(stream)
st.session_state.messages.append({"role": "assistant", "content": response})