Lenylvt commited on
Commit
e280a73
·
verified ·
1 Parent(s): af27aee

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +10 -39
app.py CHANGED
@@ -1,6 +1,5 @@
1
  import streamlit as st
2
  from huggingface_hub import InferenceClient
3
- import time
4
  import re
5
  import edge_tts
6
  import asyncio
@@ -11,7 +10,6 @@ from pydub import AudioSegment
11
  # Initialize Hugging Face InferenceClient
12
  client_hf = InferenceClient("mistralai/Mixtral-8x7B-Instruct-v0.1")
13
 
14
- # Define the async function for text-to-speech conversion using Edge TTS
15
  async def text_to_speech_edge(text, language_code):
16
  voice = {"fr": "fr-FR-RemyMultilingualNeural"}[language_code]
17
  communicate = edge_tts.Communicate(text, voice)
@@ -20,7 +18,6 @@ async def text_to_speech_edge(text, language_code):
20
  await communicate.save(tmp_path)
21
  return tmp_path
22
 
23
- # Helper function to run async functions from within Streamlit (synchronous context)
24
  def run_in_threadpool(func, *args, **kwargs):
25
  loop = asyncio.new_event_loop()
26
  asyncio.set_event_loop(loop)
@@ -36,7 +33,6 @@ def concatenate_audio(paths):
36
  combined.export(combined_path, format="mp3")
37
  return combined_path
38
 
39
- # Modified function to work with async Edge TTS
40
  def dictee_to_audio_segmented(dictee):
41
  sentences = segmenter_texte(dictee)
42
  audio_urls = []
@@ -48,7 +44,7 @@ def dictee_to_audio_segmented(dictee):
48
  return audio_urls
49
 
50
  def generer_dictee(classe, longueur):
51
- prompt = f"Créer une dictée pour la classe {classe} d'une longueur d'environ {longueur} mots. Il est important de créer le texte uniquement de la dictée et de ne pas ajouter de consignes ou d'indications supplémentaires."
52
  generate_kwargs = {
53
  "temperature": 0.7,
54
  "max_new_tokens": 1000,
@@ -64,24 +60,6 @@ def generer_dictee(classe, longueur):
64
  dictee = dictee.replace("</s>", "").strip()
65
  return dictee
66
 
67
- def correction_dictee(dictee, dictee_utilisateur):
68
- prompt = f"Voici une dictée crée: {dictee} | Voici la dictée faite par l'utilisateur : {dictee_utilisateur} - Corrige la dictée en donnant les explications, utilise les syntax du markdown pour une meilleur comprehesion de la correction."
69
- generate_kwargs = {
70
- "temperature": 0.7,
71
- "max_new_tokens": 2000, # Ajustez selon la longueur attendue de la correction
72
- "top_p": 0.95,
73
- "repetition_penalty": 1.2,
74
- "do_sample": True,
75
- }
76
- formatted_prompt = f"<s>[INST] {prompt} [/INST]"
77
- stream = client_hf.text_generation(formatted_prompt, **generate_kwargs, stream=True, details=True, return_full_text=False)
78
- texte_ameliore = ""
79
- for response in stream:
80
- texte_ameliore += response.token.text
81
- texte_ameliore = texte_ameliore.replace("</s>", "").strip()
82
- return correction
83
-
84
-
85
  def replace_punctuation(text):
86
  replacements = {
87
  ".": " point.",
@@ -99,37 +77,30 @@ def segmenter_texte(texte):
99
  sentences = re.split(r'(?<=[.!?]) +', texte)
100
  return sentences
101
 
102
- # Streamlit App Interface
103
  st.set_page_config(layout="wide")
104
  st.title('Générateur de Dictée')
105
 
106
  with st.expander("Paramètres de la dictée", expanded=True):
107
- mode = st.radio("Mode:", ["S'entrainer: Vous aurez uniquement les audios suivi d'une correction par IA (Pour 1 seul personne)", "Entrainer: Vous aurez uniquement le texte de la dictée pour entrainer quelqu'un d'autre (Pour 2 ou + personnes)"])
108
  classe = st.selectbox("Classe", ["CP", "CE1", "CE2", "CM1", "CM2", "6ème", "5ème", "4ème", "3ème", "Seconde", "Premiere", "Terminale"], index=2)
109
  longueur = st.slider("Longueur de la dictée (nombre de mots)", 50, 500, 200)
110
 
111
  if st.button('Générer la Dictée'):
112
  with st.spinner("Génération de la dictée en cours..."):
113
  dictee = generer_dictee(classe, longueur)
114
- if mode == "S'entrainer: Vous aurez uniquement les audios suivi d'une correction par IA (Pour 1 seul personne)":
115
  audio_urls = dictee_to_audio_segmented(dictee)
116
  concatenated_audio_path = concatenate_audio(audio_urls)
117
-
118
  col1, col2 = st.columns(2)
119
-
120
  with col1:
121
- st.audio(concatenated_audio_path, format='audio/wav', start_time=0)
122
- with st.expander("Phrases de la Dictée"):
123
- for idx, url in enumerate(audio_urls, start=1):
124
- st.markdown(f"**Phrase {idx}:**")
125
- st.audio(url, format='audio/wav')
126
-
127
  with col2:
128
- dictee_utilisateur = st.text_input("Écrivez la dictée ici:")
 
129
  if st.button('Correction'):
130
- with st.spinner("Génération de la dictée en cours..."):
131
- correction = correction_dictee(dictee, dictee_utilisateur)
132
- st.text_area("Voici la correction :", correction, height=500)
133
 
134
- elif mode == "Entrainer: Vous aurez uniquement le texte de la dictée pour entrainer quelqu'un d'autre (Pour 2 ou + personnes)":
135
  st.text_area("Voici votre dictée :", dictee, height=300)
 
1
  import streamlit as st
2
  from huggingface_hub import InferenceClient
 
3
  import re
4
  import edge_tts
5
  import asyncio
 
10
  # Initialize Hugging Face InferenceClient
11
  client_hf = InferenceClient("mistralai/Mixtral-8x7B-Instruct-v0.1")
12
 
 
13
  async def text_to_speech_edge(text, language_code):
14
  voice = {"fr": "fr-FR-RemyMultilingualNeural"}[language_code]
15
  communicate = edge_tts.Communicate(text, voice)
 
18
  await communicate.save(tmp_path)
19
  return tmp_path
20
 
 
21
  def run_in_threadpool(func, *args, **kwargs):
22
  loop = asyncio.new_event_loop()
23
  asyncio.set_event_loop(loop)
 
33
  combined.export(combined_path, format="mp3")
34
  return combined_path
35
 
 
36
  def dictee_to_audio_segmented(dictee):
37
  sentences = segmenter_texte(dictee)
38
  audio_urls = []
 
44
  return audio_urls
45
 
46
  def generer_dictee(classe, longueur):
47
+ prompt = f"Créer une dictée pour la classe {classe} d'une longueur d'environ {longueur} mots."
48
  generate_kwargs = {
49
  "temperature": 0.7,
50
  "max_new_tokens": 1000,
 
60
  dictee = dictee.replace("</s>", "").strip()
61
  return dictee
62
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
63
  def replace_punctuation(text):
64
  replacements = {
65
  ".": " point.",
 
77
  sentences = re.split(r'(?<=[.!?]) +', texte)
78
  return sentences
79
 
 
80
  st.set_page_config(layout="wide")
81
  st.title('Générateur de Dictée')
82
 
83
  with st.expander("Paramètres de la dictée", expanded=True):
84
+ mode = st.radio("Mode:", ["S'entrainer", "Entrainer"])
85
  classe = st.selectbox("Classe", ["CP", "CE1", "CE2", "CM1", "CM2", "6ème", "5ème", "4ème", "3ème", "Seconde", "Premiere", "Terminale"], index=2)
86
  longueur = st.slider("Longueur de la dictée (nombre de mots)", 50, 500, 200)
87
 
88
  if st.button('Générer la Dictée'):
89
  with st.spinner("Génération de la dictée en cours..."):
90
  dictee = generer_dictee(classe, longueur)
91
+ if mode == "S'entrainer":
92
  audio_urls = dictee_to_audio_segmented(dictee)
93
  concatenated_audio_path = concatenate_audio(audio_urls)
 
94
  col1, col2 = st.columns(2)
 
95
  with col1:
96
+ st.audio(concatenated_audio_path, format='audio/mp3')
 
 
 
 
 
97
  with col2:
98
+ # Utiliser st.session_state pour conserver la saisie de l'utilisateur
99
+ user_input = st.text_area("Écrivez la dictée ici:", value=st.session_state.get('user_input', ''), height=300, key='user_input')
100
  if st.button('Correction'):
101
+ st.write("Dictée originale:")
102
+ st.text(dictee)
103
+ # Ajouter ici la logique de comparaison/correction détaillée si nécessaire
104
 
105
+ elif mode == "Entrainer":
106
  st.text_area("Voici votre dictée :", dictee, height=300)