Spaces:
Sleeping
Sleeping
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}) | |