|
from openai import OpenAI |
|
import streamlit as st |
|
|
|
|
|
st.title("") |
|
|
|
|
|
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 = [] |
|
|
|
|
|
st.sidebar.image("logo.png", use_column_width=True) |
|
|
|
|
|
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" |
|
} |
|
|
|
|
|
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)] |
|
|
|
|
|
context_text = open(f'context/{selected_context_file}', 'r').read() |
|
|
|
|
|
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 ?"]) |
|
|
|
|
|
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?") |
|
|
|
|
|
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}] |
|
|
|
|
|
for message in st.session_state.messages: |
|
with st.chat_message(message["role"]): |
|
st.markdown(message["content"]) |
|
|
|
|
|
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) |
|
|
|
|
|
if prompt := st.chat_input("Entrez votre question ici..."): |
|
st.session_state.messages.append({"role": "user", "content": prompt}) |
|
|
|
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}) |
|
|