File size: 5,018 Bytes
f2d8fa0
b0c635c
475e087
346d904
701d40f
cf0d196
0b14976
 
 
f3e3da1
 
0b14976
 
 
cf0d196
 
701d40f
0b14976
60ace2e
c786385
f2d8fa0
f3e3da1
0b14976
 
 
f3e3da1
0b14976
 
 
991d60f
9166220
96f7b3c
0b14976
f3e3da1
0b14976
f3e3da1
0b14976
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
f3e3da1
0b14976
 
cf0d196
f3e3da1
 
0b14976
 
 
 
 
 
 
 
 
 
 
f2d8fa0
283777a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
b70251f
283777a
 
 
 
 
cf0d196
96f7b3c
c8bccce
 
f3e3da1
 
a72241a
cf0d196
283777a
c8bccce
cf0d196
cd07abe
 
 
 
cf0d196
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
133
134
import gradio as gr
#import requests

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 whisper_result, 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, "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")
        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")
        whisper_tr = gr.Textbox(label="whisper english translation", elem_id="text_inp")

        send_btn = gr.Button("Send my request !")
    
        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")
    
    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)