Spaces:
Paused
Paused
| import streamlit as st | |
| from openai import OpenAI | |
| from os import getenv | |
| from audiorecorder import audiorecorder | |
| import tempfile | |
| import base64 | |
| # fonction pour lire et retourner le contenu de fichiers textes | |
| def lire_fichier(nom_fichier): | |
| try: | |
| with open(nom_fichier, 'r', encoding='utf-8') as fichier: | |
| contenu = fichier.read() | |
| return contenu | |
| except FileNotFoundError: | |
| return f"Erreur : Le fichier '{nom_fichier}' n'a pas été trouvé." | |
| except Exception as e: | |
| return f"Une erreur s'est produite lors de la lecture du fichier : {str(e)}" | |
| # Configuration de la clé API OpenAI | |
| client = OpenAI(api_key=getenv("OPENAI_API_KEY")) | |
| # Définition du prompt système initial | |
| SYSTEM_PROMPT = f"{lire_fichier('linguascribe.prompt')}" | |
| def transcribe_audio(audio_file): | |
| with tempfile.NamedTemporaryFile(delete=False, suffix=".wav") as temp_audio: | |
| audio_file.export(temp_audio.name, format="wav") | |
| with open(temp_audio.name, "rb") as audio_file: | |
| transcript = client.audio.transcriptions.create( | |
| model="whisper-1", | |
| file=audio_file | |
| ) | |
| return transcript.text | |
| def text_to_speech(text): | |
| response = client.audio.speech.create( | |
| model="tts-1", | |
| voice="onyx", | |
| input=text | |
| ) | |
| # Sauvegarder l'audio dans un fichier temporaire | |
| with tempfile.NamedTemporaryFile(delete=False, suffix=".mp3") as temp_audio: | |
| response.stream_to_file(temp_audio.name) | |
| # Lire le contenu du fichier audio | |
| with open(temp_audio.name, "rb") as audio_file: | |
| audio_bytes = audio_file.read() | |
| return audio_bytes | |
| def process_message(message, operation_prompt="", is_audio_input=False): | |
| payload_content = f'{operation_prompt} :\n\"\"\"\n{message}\n\"\"\"' | |
| st.session_state.messages.append({"role": "user", "content": payload_content}) | |
| with st.chat_message("user"): | |
| st.markdown(message) | |
| with st.chat_message("assistant"): | |
| message_placeholder = st.empty() | |
| full_response = "" | |
| for response in client.chat.completions.create( | |
| model="gpt-4o", | |
| messages=st.session_state.messages, | |
| stream=True, | |
| temperature=0.1, | |
| ): | |
| full_response += (response.choices[0].delta.content or "") | |
| message_placeholder.markdown(full_response + "▌") | |
| message_placeholder.markdown(full_response) | |
| st.session_state.messages.append({"role": "assistant", "content": full_response}) | |
| if is_audio_input: | |
| tts_audio = text_to_speech(full_response) | |
| st.audio(tts_audio, format="audio/mp3", autoplay=True) | |
| def main(): | |
| st.title("Application de Chat avec GPT-4") | |
| # Initialisation de l'historique des messages avec le prompt système | |
| if "messages" not in st.session_state: | |
| st.session_state.messages = [ | |
| {"role": "system", "content": SYSTEM_PROMPT} | |
| ] | |
| # Affichage de l'historique des messages (sauf le message système) | |
| for message in st.session_state.messages[1:]: | |
| with st.chat_message(message["role"]): | |
| st.markdown(message["content"]) | |
| # Interface utilisateur pour le chat | |
| user_input = st.chat_input("Entrez votre message ici:") | |
| OP_PROMPT = "Translate(fr_FR to en_US)" | |
| # Ajout de l'enregistreur audio | |
| st.write("Ou enregistrez votre message audio :") | |
| audio = audiorecorder("Cliquez pour enregistrer", "Cliquez pour arrêter l'enregistrement") | |
| if user_input: | |
| process_message(user_input, operation_prompt=f"{OP_PROMPT}") | |
| if len(audio) > 0: | |
| # st.audio(audio.export().read(), autoplay=False) | |
| transcription = transcribe_audio(audio) | |
| st.write(f"Transcription : {transcription}") | |
| process_message(transcription, operation_prompt=f"{OP_PROMPT}", is_audio_input=True) | |
| st.sidebar.markdown("## À propos") | |
| st.sidebar.info("Cette application utilise Streamlit et OpenAI GPT-4 pour créer un chat interactif avec un modèle de langage avancé.") | |
| if __name__ == "__main__": | |
| main() |