rick commited on
Commit
6ff8c22
·
unverified ·
1 Parent(s): 73b0775

update demorrha

Browse files
Files changed (1) hide show
  1. app.py +29 -24
app.py CHANGED
@@ -5,10 +5,10 @@ from audiorecorder import audiorecorder
5
  import tempfile
6
  import base64
7
 
8
- # Configuration de la clé API OpenAI
9
  client = OpenAI(api_key=getenv("OPENAI_API_KEY"))
10
 
11
- # fonction pour lire et retourner le contenu de fichiers textes
12
  def lire_fichier(nom_fichier):
13
  try:
14
  with open(nom_fichier, 'r', encoding='utf-8') as fichier:
@@ -19,6 +19,7 @@ def lire_fichier(nom_fichier):
19
  except Exception as e:
20
  return f"Une erreur s'est produite lors de la lecture du fichier : {str(e)}"
21
 
 
22
  def transcribe_audio(audio_file, language=None):
23
  with tempfile.NamedTemporaryFile(delete=False, suffix=".wav") as temp_audio:
24
  audio_file.export(temp_audio.name, format="wav")
@@ -32,12 +33,13 @@ def transcribe_audio(audio_file, language=None):
32
 
33
  return transcript.text
34
 
 
35
  def language_detection(input_text, temperature=0.01):
36
  system_prompt = "".join([
37
  "Je souhaite que vous agissiez en tant que fonction linguistique.",
38
  "Je m'exprimerai dans n'importe quelle langue, et vous en détecterez la langue.",
39
- "Vous fournirez le resultat de votre detection au format ISO-639-1.",
40
- "Votre reponse dois representer l'argument `language` et contenir seulement sa valeur de type chaine de caracteres.",
41
  "La langue de l'audio d'entrée. Fournir la langue d'entrée au format ISO-639-1 améliorera la précision et la latence."
42
  ])
43
  response = client.chat.completions.create(
@@ -56,7 +58,7 @@ def language_detection(input_text, temperature=0.01):
56
  )
57
  return response.choices[0].message.content
58
 
59
-
60
  def text_to_speech(text):
61
  response = client.audio.speech.create(
62
  model="tts-1",
@@ -74,6 +76,7 @@ def text_to_speech(text):
74
 
75
  return audio_bytes
76
 
 
77
  def process_message(message, operation_prompt="", is_audio_input=False):
78
  payload_content = f'{operation_prompt} :\n\"\"\"\n{message}\n\"\"\"'
79
 
@@ -100,30 +103,28 @@ def process_message(message, operation_prompt="", is_audio_input=False):
100
  tts_audio = text_to_speech(full_response)
101
  st.audio(tts_audio, format="audio/mp3", autoplay=True)
102
 
103
- # Définition de la classe GlobalSystemPrompts pour stocker les prompts système globaux
104
  class GlobalSystemPrompts:
105
- # ########################################################################
106
- # Définition des prompts système globaux pour différentes fonctionnalités
107
- # Chaque méthode retourne un prompt système spécifique
108
  def linguascribe():
109
  SYSTEM_PROMPT = f"{lire_fichier('linguascribe.prompt')}"
110
  return SYSTEM_PROMPT
111
 
 
112
  SYSTEM_PROMPT=""
113
  OP_PROMPT=""
114
 
115
- def set_mode_translation(from_lang ,dest_lang):
 
116
  global SYSTEM_PROMPT
117
  global OP_PROMPT
118
  SYSTEM_PROMPT=GlobalSystemPrompts.linguascribe()
119
  OP_PROMPT = f"Translate({from_lang} to {dest_lang})"
120
- return {
121
- "system_prompt": SYSTEM_PROMPT,
122
- "operation_prompt": OP_PROMPT
123
- }
124
 
 
125
  SUPPORTED_LANGUAGES=["Afrikaans", "Arabic", "Armenian", "Azerbaijani", "Belarusian", "Bosnian", "Bulgarian", "Catalan", "Chinese", "Croatian", "Czech", "Danish", "Dutch", "English", "Estonian", "Finnish", "French", "Galician", "German", "Greek", "Hebrew", "Hindi", "Hungarian", "Icelandic", "Indonesian", "Italian", "Japanese", "Kannada", "Kazakh", "Korean", "Latvian", "Lithuanian", "Macedonian", "Malay", "Marathi", "Maori", "Nepali", "Norwegian", "Persian", "Polish", "Portuguese", "Romanian", "Russian", "Serbian", "Slovak", "Slovenian", "Spanish", "Swahili", "Swedish", "Tagalog", "Tamil", "Thai", "Turkish", "Ukrainian", "Urdu", "Vietnamese", "Welsh"]
126
 
 
127
  def convert_language_name_to_iso6391(language_name):
128
  # Dictionnaire de correspondance entre les noms de langues et les codes ISO 639-1
129
  language_to_iso = {
@@ -147,7 +148,7 @@ def convert_language_name_to_iso6391(language_name):
147
  # Retourne le code ISO 639-1 correspondant au nom de la langue
148
  return language_to_iso.get(language_name, "en") # Par défaut, retourne 'en' si la langue n'est pas trouvée
149
 
150
-
151
  def main():
152
  st.title("------- DEMORRHA -------")
153
 
@@ -161,6 +162,7 @@ def main():
161
  if "target_language" not in st.session_state:
162
  st.session_state.target_language = "en"
163
 
 
164
  if "translation" == st.session_state["process_mode"]:
165
  set_mode_translation(from_lang=st.session_state.language_detected, dest_lang=st.session_state.target_language)
166
 
@@ -175,39 +177,41 @@ def main():
175
  with st.chat_message(message["role"]):
176
  st.markdown(message["content"])
177
 
178
- # Interface utilisateur pour le chat
179
  user_input = st.chat_input("Entrez votre message ici:")
180
 
181
-
182
- # Ajout de l'enregistreur audio
183
  st.write("Ou enregistrez votre message audio :")
184
  audio = audiorecorder("Cliquez pour enregistrer", "Cliquez pour arrêter l'enregistrement")
185
 
 
186
  if user_input:
187
  process_message(user_input, operation_prompt=f"{OP_PROMPT}")
188
 
 
189
  if len(audio) > 0:
190
- # st.audio(audio.export().read(), autoplay=False)
191
  transcription = transcribe_audio(audio, language=st.session_state.language_detected)
192
  if None == st.session_state.language_detected:
193
  st.session_state.language_detected = language_detection(input_text=transcription, temperature=0.01)
194
- st.write(f"Language Detected: {st.session_state.language_detected}")
195
  st.write(f"Transcription : {transcription}")
196
  process_message(transcription, operation_prompt=f"{OP_PROMPT}", is_audio_input=True)
197
 
 
198
  with st.sidebar:
199
  st.header("DEMORRHA - v1")
200
  st.markdown("## À propos")
201
  st.info("\n".join([
202
- "Cette application utilise Streamlit et l'API de OpenAI pour créer un chat interactif avec des modèles de langages avancé dans le but de fournir un outil permettant la communication entre les etres humains.",
203
- "Cet outil a pour objectif de montrer la voie dans un acte saint de la volontee de son auteur: ",
204
- "Abattre les barrieres linguistiques entre les hommes."
205
  ]))
206
 
207
- # Sélection de la langue de destination
208
  def on_language_change():
209
  st.session_state.target_language = convert_language_name_to_iso6391(st.session_state.language_selector)
210
 
 
211
  st.selectbox(
212
  label="Choisissez la langue de destination",
213
  options=tuple(SUPPORTED_LANGUAGES),
@@ -217,5 +221,6 @@ def main():
217
  index=SUPPORTED_LANGUAGES.index("English")
218
  )
219
 
 
220
  if __name__ == "__main__":
221
  main()
 
5
  import tempfile
6
  import base64
7
 
8
+ # Configuration du client OpenAI avec la clé API
9
  client = OpenAI(api_key=getenv("OPENAI_API_KEY"))
10
 
11
+ # Fonction pour lire et retourner le contenu de fichiers textes
12
  def lire_fichier(nom_fichier):
13
  try:
14
  with open(nom_fichier, 'r', encoding='utf-8') as fichier:
 
19
  except Exception as e:
20
  return f"Une erreur s'est produite lors de la lecture du fichier : {str(e)}"
21
 
22
+ # Fonction pour transcrire l'audio en texte
23
  def transcribe_audio(audio_file, language=None):
24
  with tempfile.NamedTemporaryFile(delete=False, suffix=".wav") as temp_audio:
25
  audio_file.export(temp_audio.name, format="wav")
 
33
 
34
  return transcript.text
35
 
36
+ # Fonction pour détecter la langue d'un texte donné
37
  def language_detection(input_text, temperature=0.01):
38
  system_prompt = "".join([
39
  "Je souhaite que vous agissiez en tant que fonction linguistique.",
40
  "Je m'exprimerai dans n'importe quelle langue, et vous en détecterez la langue.",
41
+ "Vous fournirez le résultat de votre détection au format ISO-639-1.",
42
+ "Votre réponse doit représenter l'argument `language` et contenir seulement sa valeur de type chaîne de caractères.",
43
  "La langue de l'audio d'entrée. Fournir la langue d'entrée au format ISO-639-1 améliorera la précision et la latence."
44
  ])
45
  response = client.chat.completions.create(
 
58
  )
59
  return response.choices[0].message.content
60
 
61
+ # Fonction pour convertir du texte en parole
62
  def text_to_speech(text):
63
  response = client.audio.speech.create(
64
  model="tts-1",
 
76
 
77
  return audio_bytes
78
 
79
+ # Fonction pour traiter les messages de l'utilisateur et générer une réponse
80
  def process_message(message, operation_prompt="", is_audio_input=False):
81
  payload_content = f'{operation_prompt} :\n\"\"\"\n{message}\n\"\"\"'
82
 
 
103
  tts_audio = text_to_speech(full_response)
104
  st.audio(tts_audio, format="audio/mp3", autoplay=True)
105
 
106
+ # Classe pour stocker les prompts système globaux
107
  class GlobalSystemPrompts:
108
+ # Méthode pour récupérer le prompt système pour la fonctionnalité Linguascribe
 
 
109
  def linguascribe():
110
  SYSTEM_PROMPT = f"{lire_fichier('linguascribe.prompt')}"
111
  return SYSTEM_PROMPT
112
 
113
+ # Variables globales pour les prompts
114
  SYSTEM_PROMPT=""
115
  OP_PROMPT=""
116
 
117
+ # Fonction pour configurer le mode de traduction
118
+ def set_mode_translation(from_lang, dest_lang):
119
  global SYSTEM_PROMPT
120
  global OP_PROMPT
121
  SYSTEM_PROMPT=GlobalSystemPrompts.linguascribe()
122
  OP_PROMPT = f"Translate({from_lang} to {dest_lang})"
 
 
 
 
123
 
124
+ # Liste des langues supportées par l'application
125
  SUPPORTED_LANGUAGES=["Afrikaans", "Arabic", "Armenian", "Azerbaijani", "Belarusian", "Bosnian", "Bulgarian", "Catalan", "Chinese", "Croatian", "Czech", "Danish", "Dutch", "English", "Estonian", "Finnish", "French", "Galician", "German", "Greek", "Hebrew", "Hindi", "Hungarian", "Icelandic", "Indonesian", "Italian", "Japanese", "Kannada", "Kazakh", "Korean", "Latvian", "Lithuanian", "Macedonian", "Malay", "Marathi", "Maori", "Nepali", "Norwegian", "Persian", "Polish", "Portuguese", "Romanian", "Russian", "Serbian", "Slovak", "Slovenian", "Spanish", "Swahili", "Swedish", "Tagalog", "Tamil", "Thai", "Turkish", "Ukrainian", "Urdu", "Vietnamese", "Welsh"]
126
 
127
+ # Fonction pour convertir le nom d'une langue en code ISO 639-1
128
  def convert_language_name_to_iso6391(language_name):
129
  # Dictionnaire de correspondance entre les noms de langues et les codes ISO 639-1
130
  language_to_iso = {
 
148
  # Retourne le code ISO 639-1 correspondant au nom de la langue
149
  return language_to_iso.get(language_name, "en") # Par défaut, retourne 'en' si la langue n'est pas trouvée
150
 
151
+ # Fonction principale de l'application
152
  def main():
153
  st.title("------- DEMORRHA -------")
154
 
 
162
  if "target_language" not in st.session_state:
163
  st.session_state.target_language = "en"
164
 
165
+ # Configuration du mode de traduction si nécessaire
166
  if "translation" == st.session_state["process_mode"]:
167
  set_mode_translation(from_lang=st.session_state.language_detected, dest_lang=st.session_state.target_language)
168
 
 
177
  with st.chat_message(message["role"]):
178
  st.markdown(message["content"])
179
 
180
+ # Interface utilisateur pour le chat textuel
181
  user_input = st.chat_input("Entrez votre message ici:")
182
 
183
+ # Interface utilisateur pour l'enregistrement audio
 
184
  st.write("Ou enregistrez votre message audio :")
185
  audio = audiorecorder("Cliquez pour enregistrer", "Cliquez pour arrêter l'enregistrement")
186
 
187
+ # Traitement du message textuel de l'utilisateur
188
  if user_input:
189
  process_message(user_input, operation_prompt=f"{OP_PROMPT}")
190
 
191
+ # Traitement de l'entrée audio de l'utilisateur
192
  if len(audio) > 0:
 
193
  transcription = transcribe_audio(audio, language=st.session_state.language_detected)
194
  if None == st.session_state.language_detected:
195
  st.session_state.language_detected = language_detection(input_text=transcription, temperature=0.01)
196
+ st.write(f"Langue détectée : {st.session_state.language_detected}")
197
  st.write(f"Transcription : {transcription}")
198
  process_message(transcription, operation_prompt=f"{OP_PROMPT}", is_audio_input=True)
199
 
200
+ # Configuration de la barre latérale
201
  with st.sidebar:
202
  st.header("DEMORRHA - v1")
203
  st.markdown("## À propos")
204
  st.info("\n".join([
205
+ "Cette application utilise Streamlit et l'API d'OpenAI pour créer un chat interactif avec des modèles de langages avancés dans le but de fournir un outil permettant la communication entre les êtres humains.",
206
+ "Cet outil a pour objectif de montrer la voie dans un acte saint de la volonté de son auteur : ",
207
+ "Abattre les barrières linguistiques entre les hommes."
208
  ]))
209
 
210
+ # Fonction de rappel pour le changement de langue
211
  def on_language_change():
212
  st.session_state.target_language = convert_language_name_to_iso6391(st.session_state.language_selector)
213
 
214
+ # Sélection de la langue de destination
215
  st.selectbox(
216
  label="Choisissez la langue de destination",
217
  options=tuple(SUPPORTED_LANGUAGES),
 
221
  index=SUPPORTED_LANGUAGES.index("English")
222
  )
223
 
224
+ # Point d'entrée de l'application
225
  if __name__ == "__main__":
226
  main()