Spaces:
Paused
Paused
rick
commited on
update demorrha
Browse files- app.py +53 -12
- requirements.txt +2 -1
app.py
CHANGED
|
@@ -5,6 +5,9 @@ from audiorecorder import audiorecorder
|
|
| 5 |
import tempfile
|
| 6 |
import base64
|
| 7 |
|
|
|
|
|
|
|
|
|
|
| 8 |
# fonction pour lire et retourner le contenu de fichiers textes
|
| 9 |
def lire_fichier(nom_fichier):
|
| 10 |
try:
|
|
@@ -16,24 +19,44 @@ def lire_fichier(nom_fichier):
|
|
| 16 |
except Exception as e:
|
| 17 |
return f"Une erreur s'est produite lors de la lecture du fichier : {str(e)}"
|
| 18 |
|
| 19 |
-
|
| 20 |
-
client = OpenAI(api_key=getenv("OPENAI_API_KEY"))
|
| 21 |
-
|
| 22 |
-
# Définition du prompt système initial
|
| 23 |
-
SYSTEM_PROMPT = f"{lire_fichier('linguascribe.prompt')}"
|
| 24 |
-
|
| 25 |
-
def transcribe_audio(audio_file):
|
| 26 |
with tempfile.NamedTemporaryFile(delete=False, suffix=".wav") as temp_audio:
|
| 27 |
audio_file.export(temp_audio.name, format="wav")
|
| 28 |
|
| 29 |
with open(temp_audio.name, "rb") as audio_file:
|
| 30 |
transcript = client.audio.transcriptions.create(
|
| 31 |
model="whisper-1",
|
| 32 |
-
file=audio_file
|
|
|
|
| 33 |
)
|
| 34 |
|
| 35 |
return transcript.text
|
| 36 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 37 |
def text_to_speech(text):
|
| 38 |
response = client.audio.speech.create(
|
| 39 |
model="tts-1",
|
|
@@ -77,9 +100,18 @@ def process_message(message, operation_prompt="", is_audio_input=False):
|
|
| 77 |
tts_audio = text_to_speech(full_response)
|
| 78 |
st.audio(tts_audio, format="audio/mp3", autoplay=True)
|
| 79 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 80 |
def main():
|
| 81 |
-
st.title("
|
| 82 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 83 |
# Initialisation de l'historique des messages avec le prompt système
|
| 84 |
if "messages" not in st.session_state:
|
| 85 |
st.session_state.messages = [
|
|
@@ -104,12 +136,21 @@ def main():
|
|
| 104 |
|
| 105 |
if len(audio) > 0:
|
| 106 |
# st.audio(audio.export().read(), autoplay=False)
|
| 107 |
-
transcription = transcribe_audio(audio)
|
|
|
|
|
|
|
|
|
|
| 108 |
st.write(f"Transcription : {transcription}")
|
| 109 |
process_message(transcription, operation_prompt=f"{OP_PROMPT}", is_audio_input=True)
|
| 110 |
|
| 111 |
-
st.sidebar
|
| 112 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 113 |
|
| 114 |
if __name__ == "__main__":
|
| 115 |
main()
|
|
|
|
| 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:
|
|
|
|
| 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")
|
| 25 |
|
| 26 |
with open(temp_audio.name, "rb") as audio_file:
|
| 27 |
transcript = client.audio.transcriptions.create(
|
| 28 |
model="whisper-1",
|
| 29 |
+
file=audio_file,
|
| 30 |
+
language=language
|
| 31 |
)
|
| 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(
|
| 44 |
+
model="gpt-4o",
|
| 45 |
+
temperature=temperature,
|
| 46 |
+
messages=[
|
| 47 |
+
{
|
| 48 |
+
"role": "system",
|
| 49 |
+
"content": system_prompt
|
| 50 |
+
},
|
| 51 |
+
{
|
| 52 |
+
"role": "user",
|
| 53 |
+
"content": f"{input_text}"
|
| 54 |
+
}
|
| 55 |
+
]
|
| 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",
|
|
|
|
| 100 |
tts_audio = text_to_speech(full_response)
|
| 101 |
st.audio(tts_audio, format="audio/mp3", autoplay=True)
|
| 102 |
|
| 103 |
+
|
| 104 |
+
# Définition du prompt système initial
|
| 105 |
+
SYSTEM_PROMPT = f"{lire_fichier('linguascribe.prompt')}"
|
| 106 |
+
|
| 107 |
+
|
| 108 |
def main():
|
| 109 |
+
st.title("------- DEMORRHA -------")
|
| 110 |
|
| 111 |
+
# Initialisation des variables d'état de la session
|
| 112 |
+
if "language_detected" not in st.session_state:
|
| 113 |
+
st.session_state["language_detected"] = None
|
| 114 |
+
|
| 115 |
# Initialisation de l'historique des messages avec le prompt système
|
| 116 |
if "messages" not in st.session_state:
|
| 117 |
st.session_state.messages = [
|
|
|
|
| 136 |
|
| 137 |
if len(audio) > 0:
|
| 138 |
# st.audio(audio.export().read(), autoplay=False)
|
| 139 |
+
transcription = transcribe_audio(audio, language=st.session_state.language_detected)
|
| 140 |
+
if None == st.session_state.language_detected:
|
| 141 |
+
st.session_state.language_detected = language_detection(input_text=transcription, temperature=0.01)
|
| 142 |
+
st.write(f"Language Detected: {st.session_state.language_detected}")
|
| 143 |
st.write(f"Transcription : {transcription}")
|
| 144 |
process_message(transcription, operation_prompt=f"{OP_PROMPT}", is_audio_input=True)
|
| 145 |
|
| 146 |
+
with st.sidebar:
|
| 147 |
+
st.header("DEMORRHA - v1")
|
| 148 |
+
st.markdown("## À propos")
|
| 149 |
+
st.info("\n".join([
|
| 150 |
+
"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.",
|
| 151 |
+
"Cet outil a pour objectif de montrer la voie dans un acte saint de la volontee de son auteur: ",
|
| 152 |
+
"Abattre les barrieres linguistiques entre les hommes."
|
| 153 |
+
]))
|
| 154 |
|
| 155 |
if __name__ == "__main__":
|
| 156 |
main()
|
requirements.txt
CHANGED
|
@@ -1,4 +1,5 @@
|
|
| 1 |
streamlit
|
| 2 |
streamlit-audiorecorder
|
| 3 |
streamlit-autorefresh
|
| 4 |
-
|
|
|
|
|
|
| 1 |
streamlit
|
| 2 |
streamlit-audiorecorder
|
| 3 |
streamlit-autorefresh
|
| 4 |
+
replicate
|
| 5 |
+
openai
|