Sidoine commited on
Commit
54cf99f
·
verified ·
1 Parent(s): 4d541cc

Upload app2.py

Browse files
Files changed (1) hide show
  1. app2.py +132 -0
app2.py ADDED
@@ -0,0 +1,132 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Chargement des librairies
2
+
3
+ # Pour créer et exécuter des applications Web interactives directement via des scripts Python.
4
+ import streamlit as st
5
+
6
+
7
+ # Pour charger des variables d'environnement à partir d'un fichier .env dans l'environnement du système pour un accès sécurisé et facile.
8
+ # Pour interagir avec l'API de Groq pour exécuter des modèles d'apprentissage automatique et gérer les opérations sur les données.
9
+ from groq import Groq
10
+
11
+
12
+
13
+ # Changement du logo et du titre de l'application
14
+ st.set_page_config(page_title="myChatbot", page_icon="left_speech_bubble", layout="centered", menu_items=None)
15
+
16
+
17
+ # # Load environment variables from .env at the project root
18
+ # project_root = Path(__file__).resolve().parent
19
+ # load_dotenv(project_root / ".env")
20
+
21
+ # Pour les parametres du menu
22
+ with st.sidebar:
23
+ # Pour selectionner votre volet
24
+ radio_option = st.radio("Select your pane", options=("Chatbot", "Text to Speech", "Speech to Text"))
25
+
26
+ if radio_option == "Chatbot":
27
+ # Pour les parametres du menu
28
+ with st.sidebar:
29
+ st.sidebar.subheader("🛠️Settings")
30
+ temperature = st.slider("Temperature", 0.0, 5.0, 1.0)
31
+ tokens = st.slider("Max Tokens", 0, 8192, 900)
32
+ stream = st.toggle("Stream", value=True)
33
+ if stream:
34
+ etat = True
35
+ else:
36
+ etat = False
37
+
38
+
39
+ class GroqAPI:
40
+ # Gère les opérations API avec Groq pour générer des réponses de chat
41
+ def __init__(self, model_name: str):
42
+ self.client = Groq(api_key="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")
43
+ self.model_name = model_name
44
+
45
+ # Méthode interne pour récupérer les réponses de l'API Groq
46
+ def _response(self, message):
47
+ return self.client.chat.completions.create(
48
+ model=self.model_name,
49
+ messages=message,
50
+ temperature=temperature,
51
+ max_tokens=tokens,
52
+ stream=etat,
53
+ stop=None,
54
+ )
55
+
56
+ # Générateur pour diffuser les réponses de l'API
57
+ def response_stream(self, message):
58
+ for chunk in self._response(message):
59
+ if chunk.choices[0].delta.content:
60
+ yield chunk.choices[0].delta.content
61
+
62
+
63
+ class Message:
64
+ # Gère les messages de discussion dans l'interface utilisateur Streamlit
65
+ system_prompt = "You are a professional AI. Please generate responses in English to all user inputs."
66
+
67
+ # Initialise l'historique des discussions s'il n'existe pas dans l'état de session
68
+ def __init__(self):
69
+ if "messages" not in st.session_state:
70
+ st.session_state.messages = [{"role": "system", "content": self.system_prompt}]
71
+
72
+ # Ajoute un nouveau message à l'état de la session
73
+ def add(self, role: str, content: str):
74
+ st.session_state.messages.append({"role": role, "content": content})
75
+
76
+ # Affiche tous les messages passés dans l'interface utilisateur, en ignorant les messages système
77
+ def display_chat_history(self):
78
+ for message in st.session_state.messages:
79
+ if message["role"] == "system":
80
+ continue
81
+ with st.chat_message(message["role"]):
82
+ st.markdown(message["content"])
83
+
84
+ # Réponses de l'API Stream à l'interface utilisateur des messages de discussion Streamlit
85
+ def display_stream(self, generater):
86
+ with st.chat_message("assistant"):
87
+ return st.write(generater)
88
+
89
+
90
+ class ModelSelector:
91
+ # Permet à l'utilisateur de sélectionner un modèle dans une liste prédéfinie
92
+ def __init__(self):
93
+ # Liste des modèles disponibles au choix
94
+ self.models = ["llama3-70b-8192", "llama3-8b-8192", "gemma-7b-it", "mixtral-8x7b-32768"]
95
+
96
+ # Affiche la sélection de modèles dans une barre latérale avec un titre
97
+ def select(self):
98
+ with st.sidebar:
99
+ return st.selectbox("Model", self.models)
100
+
101
+
102
+ # Point d'entrée de l'utilisateur pour l'application streamlit "myChatbot"
103
+ def main():
104
+ user_input = st.chat_input("Chat whit me...")
105
+ model = ModelSelector()
106
+ selected_model = model.select()
107
+ message = Message()
108
+
109
+ # S'il y a une entrée utilisateur, la traiter via le modèle sélectionné
110
+ if user_input:
111
+ llm = GroqAPI(selected_model)
112
+ message.add("user", user_input)
113
+ message.display_chat_history()
114
+ response = message.display_stream(llm.response_stream(st.session_state.messages))
115
+ message.add("assistant", response)
116
+
117
+ with st.sidebar:
118
+ st.markdown('''<br/>
119
+ <h6 style='text-align:center;color:grey;font-size:10px;'>
120
+ © myChatbot - TOUNDE - 2024
121
+ </h6>''',
122
+ unsafe_allow_html=True
123
+ )
124
+
125
+
126
+
127
+
128
+
129
+
130
+
131
+ if __name__ == "__main__":
132
+ main()