File size: 5,094 Bytes
f2d8fa0
502eb97
346d904
701d40f
cf0d196
0b14976
 
 
f3e3da1
 
0b14976
 
 
cf0d196
 
701d40f
0b14976
60ace2e
c786385
f2d8fa0
f3e3da1
0b14976
 
 
f3e3da1
0b14976
 
 
991d60f
9166220
f92ecbc
0b14976
f3e3da1
0b14976
f3e3da1
502eb97
0b14976
 
 
4149648
0b14976
 
 
4149648
0b14976
 
 
4149648
0b14976
 
 
4149648
0b14976
 
 
4149648
0b14976
 
 
4149648
0b14976
 
 
4149648
0b14976
f3e3da1
0b14976
 
cf0d196
f3e3da1
 
0b14976
 
 
 
 
 
 
 
 
 
 
f2d8fa0
283777a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
b70251f
283777a
 
 
 
 
cf0d196
f92ecbc
 
 
 
96f7b3c
c8bccce
 
f3e3da1
 
4149648
f92ecbc
283777a
c8bccce
f92ecbc
f3e3da1
cf0d196
283777a
 
f2d8fa0
 
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
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
import gradio as gr

from PIL import Image
import os

os.system("pip install openai")
import openai

#api_key = os.environ.get('api_key')


whisper = gr.Interface.load(name="spaces/sanchit-gandhi/whisper-large-v2")

from share_btn import community_icon_html, loading_icon_html, share_js

token = os.environ.get('HF_TOKEN')

tts = gr.Interface.load(name="spaces/Flux9665/IMS-Toucan")
talking_face = gr.Blocks.load(name="spaces/fffiloni/one-shot-talking-face", api_key=token)

def infer(audio, openai_api_key):
    
    whisper_result = whisper(audio, None, "translate", fn_index=0)
    
    gpt_response = try_api(whisper_result, openai_api_key)
    
    audio_response = tts(gpt_response[0], "English Text", "English Accent", "English Speaker's Voice", fn_index=0)
    
    portrait_link = talking_face("wise_woman_portrait.png", audio_response, fn_index=0)
    
    return gr.Textbox.update(value=whisper_result, visible=True), portrait_link, gr.Textbox.update(value=gpt_response[1], visible=True), gr.update(visible=True)

def try_api(message, openai_api_key):
    try:
        response = call_api(message, openai_api_key)
        return response, Fore.GREEN + "no error"
    except openai.error.Timeout as e:
        #Handle timeout error, e.g. retry or log
        print(f"OpenAI API request timed out: {e}")
        return "oups", f"OpenAI API request timed out: {e}"
    except openai.error.APIError as e:
        #Handle API error, e.g. retry or log
        print(f"OpenAI API returned an API Error: {e}")
        return "oups", f"OpenAI API returned an API Error: {e}"
    except openai.error.APIConnectionError as e:
        #Handle connection error, e.g. check network or log
        print(f"OpenAI API request failed to connect: {e}")
        return "oups", f"OpenAI API request failed to connect: {e}"
    except openai.error.InvalidRequestError as e:
        #Handle invalid request error, e.g. validate parameters or log
        print(f"OpenAI API request was invalid: {e}")
        return "oups", f"OpenAI API request was invalid: {e}"
    except openai.error.AuthenticationError as e:
        #Handle authentication error, e.g. check credentials or log
        print(f"OpenAI API request was not authorized: {e}")
        return "oups", f"OpenAI API request was not authorized: {e}"
    except openai.error.PermissionError as e:
        #Handle permission error, e.g. check scope or log
        print(f"OpenAI API request was not permitted: {e}")
        return "oups", f"OpenAI API request was not permitted: {e}"
    except openai.error.RateLimitError as e:
        #Handle rate limit error, e.g. wait or log
        print(f"OpenAI API request exceeded rate limit: {e}")
        return "oups", f"OpenAI API request exceeded rate limit: {e}"

def call_api(message, openai_api_key):
          
    print("starting open ai")
    
    openai.api_key = openai_api_key
    
    response = openai.Completion.create(
        model="text-davinci-003",
        prompt=message,
        temperature=0.5,
        max_tokens=2048,
        top_p=1,
        frequency_penalty=0,
        presence_penalty=0.6
    )

    return str(response.choices[0].text).split("\n",2)[2]

title = """
    <div style="text-align: center; max-width: 500px; margin: 0 auto;">
        <div
        style="
            display: inline-flex;
            align-items: center;
            gap: 0.8rem;
            font-size: 1.75rem;
            margin-bottom: 10px;
        "
        >
        <h1 style="font-weight: 600; margin-bottom: 7px;">
            GPT Talking Portrait
        </h1>
        </div>
        <p style="margin-bottom: 10px;font-size: 94%;font-weight: 100;line-height: 1.5em;">
        Use Whisper to ask, alive portrait responds  !
        </p>
    </div>
"""

with gr.Blocks(css="style.css") as demo:
    
    with gr.Column(elem_id="col-container"):
        
        gr.HTML(title)
        
        gpt_response = gr.Video(label="Talking Portrait response", elem_id="video_out")
        with gr.Group(elem_id="share-btn-container", visible=False) as share_group:
                community_icon = gr.HTML(community_icon_html)
                loading_icon = gr.HTML(loading_icon_html)
                share_button = gr.Button("Share to community", elem_id="share-btn")
        error_handler = gr.Textbox(visible=False, show_label=False)
             
    with gr.Column(elem_id="col-container-2"):
        with gr.Row():
            record_input = gr.Audio(source="microphone",type="filepath", label="Audio input", show_label=True, elem_id="record_btn")
            openai_api_key = gr.Textbox(max_lines=1, type="password", label="Your OpenAI API Key", placeholder="sk-123abc...")
        whisper_tr = gr.Textbox(label="whisper english translation", elem_id="text_inp", visible=False)

        send_btn = gr.Button("Send my request !")
       
    send_btn.click(infer, inputs=[record_input, openai_api_key], outputs=[whisper_tr, gpt_response, error_handler, share_group])
    share_button.click(None, [], [], _js=share_js)

demo.queue(max_size=32, concurrency_count=20).launch(debug=True)