File size: 3,931 Bytes
401e778
 
 
 
 
 
218aeeb
cc7cd93
401e778
 
 
 
 
 
cc7cd93
401e778
 
 
 
 
 
 
 
 
 
d1d0da4
4dcef6e
d1d0da4
1f8b120
 
401e778
d1d0da4
401e778
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
d1d0da4
1558998
d1d0da4
 
 
401e778
d1d0da4
401e778
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
846e417
 
 
 
401e778
7c7bfb7
 
 
bc6614b
401e778
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
import gradio as gr
import openai
import soundfile as sf
import speech_recognition as sr
from gtts import gTTS
import tempfile
import os
from openai import OpenAI

# Set your OpenAI API key

# Load API keys from an environment variables
OPENAI_SECRET_KEY = os.environ.get("OPENAI_SECRET_KEY")
openai.api_key = 'OPENAI_SECRET_KEY'
client = OpenAI(api_key = OPENAI_SECRET_KEY)

# Initialize recognizer
recognizer = sr.Recognizer()

# Generate a conversational question in French
def generate_question():
    prompt = (
        "Tu es un professeur de français. Pose une question en français qui imite un scénario réel, créatif et diversifié, "
        "pour un élève qui apprend le français. Évite les questions banales sur le tourisme et les voyages."
    )
    response = client.chat.completions.create(
        model="gpt-3.5-turbo-1106",
        messages=prompt,
        max_tokens=300,
        temperature=0.2
    )
    question = response.choices[0].message.content
    return question

# Record the user's response
def record_response():
    with sr.Microphone() as source:
        print("Recording your response...")
        recognizer.adjust_for_ambient_noise(source)
        audio_data = recognizer.listen(source)
    return audio_data

# Transcribe the recorded audio
def transcribe_audio(audio_data):
    try:
        transcription = recognizer.recognize_google(audio_data, language="fr-FR")
        return transcription
    except sr.UnknownValueError:
        return "Désolé, je n'ai pas compris. Pouvez-vous répéter?"
    except sr.RequestError:
        return "Erreur de reconnaissance vocale. Veuillez réessayer."

# Analyze the transcription and generate feedback
def generate_feedback(transcription):
    prompt = (
        f"Tu es professeur de français. Voici une réponse d'un élève : {transcription}. "
        "Donne trois suggestions pour améliorer son français en te concentrant sur la grammaire et en évitant les anglicismes."
    )
    response = client.chat.completions.create(
        model="gpt-3.5-turbo-1106",
        messages=prompt,
        max_tokens=300,
        temperature=0.2
    )
    feedback = response.choices[0].message.content
    return feedback

# Text-to-Speech for feedback
def speak_feedback(feedback):
    tts = gTTS(text=feedback, lang='fr')
    with tempfile.NamedTemporaryFile(suffix=".mp3", delete=False) as temp_audio:
        tts.save(temp_audio.name)
        audio_file = temp_audio.name
    return audio_file

# Gradio UI functions
def ask_question():
    question = generate_question()
    return question

def record_and_transcribe():
    audio_data = record_response()
    transcription = transcribe_audio(audio_data)
    return transcription

def provide_feedback(transcription):
    feedback = generate_feedback(transcription)
    return feedback

def speak_out_feedback(feedback):
    audio_file = speak_feedback(feedback)
    return audio_file

# Gradio Interface
with gr.Blocks() as french_chatbot:
    question_output = gr.Textbox(label="Question pour vous")
    transcription_output = gr.Textbox(label="Votre réponse transcrite")
    feedback_output = gr.Textbox(label="Suggestions pour améliorer votre français")
    
    with gr.Row():
        generate_question_button = gr.Button("Générer une Question")
        record_response_button = gr.Button("Enregistrer et Transcrire")
        generate_feedback_button = gr.Button("Générer des Suggestions")
        speak_feedback_button = gr.Audio(label="Écouter Suggestions")

    generate_question_button.click(fn=ask_question, outputs=question_output)
    record_response_button.click(fn=record_and_transcribe, outputs=transcription_output)
    generate_feedback_button.click(fn=provide_feedback, inputs=transcription_output, outputs=feedback_output)
    #speak_feedback_button.click(fn=speak_out_feedback, inputs=feedback_output, outputs=speak_feedback_button)

french_chatbot.launch()