File size: 4,024 Bytes
7d95945
 
 
 
 
 
7f58389
7d95945
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 os
import gradio as gr
import openai
from gtts import gTTS # Google Text To Speech

# load the api key
openai.api_key = ''
# takes an audio file from the microphone
# submits the raw audio to OpenAI for 
# Speech to Text Translation
# input from Microphone Component
# output to User Input - Textbox Component
def transcribe(audio):   
        audio_file = open(audio, "rb")    
        # Call the transcribe method with the file-like object
        transcript = openai.Audio.transcribe("whisper-1", audio_file)
        
        return transcript["text"]



# Create a Gradio App using Blocks    
with gr.Blocks() as demo:
    gr.Markdown(
    """
    # bienvenido al Chat Bot!
    """
    )
    with gr.Accordion("Click for Instructions:"):
            gr.Markdown(
    """
    * Dime en lo que te puedo ayudar
    """)
        
    
    # First message as instructions to OpenAI
    # Establishes a State object to create a
    # unique state for each user and on reload
    #DGG messages = gr.State(value=[{"role": "system", "content": "You are a therapist. Respond in less than 5 sentences."}])
    messages = gr.State(value=[{"role": "system", "content": "Eres un cajero bancario. Responde brevemente."}])

    # Takes the users transcribed audio as a string
    # Takes the messages list as a reference
    # Sends the ongoing chat log to OpenAI
    # input from User Input - Textbox Component
    # output to Chat Log - Textbox Component
    def botResponse(user_input, messages):
        # adds the user input to the ongoing chat log
        # and submits the log to OpenAI
        messages.append({"role": "user", "content": user_input})
        response = openai.ChatCompletion.create(
          model="gpt-3.5-turbo-0301",
          messages=messages
        )

        # Parse the response from OpenAI and store
        # it in the chat log
        system_message = response["choices"][0]["message"]["content"]
        messages.append({"role": "assistant", "content": system_message})

        # Process the messages list to get the
        # chat log into a string. Exclude the
        # System responses from the string
        chat_transcript = ""
        for message in messages:
            if (message["role"] != "system"):
                chat_transcript += message["role"] + ": " + message["content"] + "\n\n"

        return chat_transcript

    # Gets the last message in the 
    # chat log and uses GTTS to
    # convert the last response into
    # an audio file. Returns a path to
    # the converted text as an mp3 file
    # input from messages as a reference
    # output to GPT Voice - Audio Component
    def giveVoice(messages):
        bot_message=messages[-1]
        
        myobj = gTTS(text=bot_message["content"])
        myobj.save("temp.mp3")
    
        dir = os.getcwd()
        new_path = os.path.join(dir, "temp.mp3")
    
        return new_path

    # Creates the Gradio interface objects
    # The submit button triggers a cascade of
    # events that each engage a different 
    # component as input/output
    with gr.Row():
        with gr.Column(scale=1):
            user_audio = gr.Audio(source="microphone", type="filepath", label="Input Phrase")
            submit_btn = gr.Button(value="Transcribe Audio")
            #DGGsubmit_btn2 = gr.Button(value="Submit Text")
            gpt_voice = gr.Audio(label="Consejero")
        with gr.Column(scale=2):
            user_transcript = gr.Text(label="Audio Translation", interactive=False)
            #DGGuser_text = gr.Text(label="Text Input")
            gpt_transcript = gr.Text(label="Chat Transcript")
    submit_btn.click(transcribe, user_audio, user_transcript)
    #DGGsubmit_btn2.click(botResponse, [user_text, messages], gpt_transcript)
    user_transcript.change(botResponse, [user_transcript, messages], gpt_transcript)
    gpt_transcript.change(giveVoice, messages, gpt_voice)
    
    
# creates a local web server
# if share=True creates a public
# demo on huggingface.co
demo.launch(share=False)