File size: 7,714 Bytes
9b1ec5f
87fa1b1
 
 
b5f663f
ff6623d
b5f663f
e4d904e
b5f663f
 
d53f8eb
87fa1b1
56c5e88
f675bf5
87fa1b1
 
a67c09f
90f7ec7
87fa1b1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
b9701ec
e14d0da
5e1dfaf
87fa1b1
 
 
b9701ec
87fa1b1
 
 
 
 
 
 
 
 
 
 
 
 
e4d904e
87fa1b1
f675bf5
87fa1b1
 
 
b9701ec
87fa1b1
 
 
 
31282e2
87fa1b1
f675bf5
87fa1b1
 
 
 
 
 
 
 
 
 
a5d7494
87fa1b1
b9701ec
 
87fa1b1
 
bb9a87c
87fa1b1
 
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
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
import cohere
import gradio as gr
import os, json
import random

co = cohere.Client(os.environ['CO_API_KEY'])
# initialize a conversation session id
cohere_chat_res_start = co.chat("Hi", persona = "catgpt")
conv_session_id = cohere_chat_res_start.session_id

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

def translate_or_transcribe(audio):
    return whisper(audio, None, "translate", fn_index=0)
    
def get_response_from_chatbot(text):
    cohere_chat_res = co.chat(text, session_id=conv_session_id,  persona = "catgpt")
    return cohere_chat_res.reply

def chat(message, chat_history):      
    out_chat = []
    if chat_history != '':
        out_chat = json.loads(chat_history)
    response = get_response_from_chatbot(message)
    out_chat.append((message, response))
    chat_history = json.dumps(out_chat)
    return out_chat, chat_history

start_work = """async() => {
    function isMobile() {
        try {
            document.createEvent("TouchEvent"); return true;
        } catch(e) {
            return false; 
        }
    }
	function getClientHeight()
	{
	  var clientHeight=0;
	  if(document.body.clientHeight&&document.documentElement.clientHeight) {
		var clientHeight = (document.body.clientHeight<document.documentElement.clientHeight)?document.body.clientHeight:document.documentElement.clientHeight;
	  } else {
		var clientHeight = (document.body.clientHeight>document.documentElement.clientHeight)?document.body.clientHeight:document.documentElement.clientHeight;
	  }
	  return clientHeight;
	}
 
    function setNativeValue(element, value) {
      const valueSetter = Object.getOwnPropertyDescriptor(element.__proto__, 'value').set;
      const prototype = Object.getPrototypeOf(element);
      const prototypeValueSetter = Object.getOwnPropertyDescriptor(prototype, 'value').set;
      
      if (valueSetter && valueSetter !== prototypeValueSetter) {
            prototypeValueSetter.call(element, value);
      } else {
            valueSetter.call(element, value);
      }
    }
    var gradioEl = document.querySelector('body > gradio-app').shadowRoot;
    if (!gradioEl) {
        gradioEl = document.querySelector('body > gradio-app');
    }
    
    if (typeof window['gradioEl'] === 'undefined') {
        window['gradioEl'] = gradioEl;
       
        const page1 = window['gradioEl'].querySelectorAll('#page_1')[0];
        const page2 = window['gradioEl'].querySelectorAll('#page_2')[0]; 
    
        page1.style.display = "none";
        page2.style.display = "block"; 

        window['div_count'] = 0;
        window['chat_bot'] = window['gradioEl'].querySelectorAll('#chat_bot')[0];
        window['chat_bot1'] = window['gradioEl'].querySelectorAll('#chat_bot1')[0];   
        chat_row = window['gradioEl'].querySelectorAll('#chat_row')[0]; 
        prompt_row = window['gradioEl'].querySelectorAll('#prompt_row')[0]; 
        window['chat_bot1'].children[1].textContent = '';
        
        clientHeight = getClientHeight();
        new_height = (clientHeight-300) + 'px';
        chat_row.style.height = new_height;
        window['chat_bot'].style.height = new_height;
        window['chat_bot'].children[2].style.height = new_height;
        window['chat_bot1'].style.height = new_height;
        window['chat_bot1'].children[2].style.height = new_height;
        prompt_row.children[0].style.flex = 'auto';
        prompt_row.children[0].style.width = '100%';
        
        window['checkChange'] = function checkChange() {
            try {
                if (window['chat_bot'].children[2].children[0].children.length > window['div_count']) {
                    new_len = window['chat_bot'].children[2].children[0].children.length - window['div_count'];
                    for (var i = 0; i < new_len; i++) { 
                        new_div = window['chat_bot'].children[2].children[0].children[window['div_count'] + i].cloneNode(true);
                        window['chat_bot1'].children[2].children[0].appendChild(new_div);
                    }
                    window['div_count'] = chat_bot.children[2].children[0].children.length;
                }
                if (window['chat_bot'].children[0].children.length > 1) {
                     window['chat_bot1'].children[1].textContent = window['chat_bot'].children[0].children[1].textContent;
                } else {
                    window['chat_bot1'].children[1].textContent = '';
                }
              
            } catch(e) {
            }        
        }
        window['checkChange_interval'] = window.setInterval("window.checkChange()", 500);         
    }
   
    return false;
}"""


with gr.Blocks(title='Talk to CatGPT') as demo:
    gr.Markdown("## Talk to CatGPT with your voice ! ##")
    gr.Markdown("### Interact with CatGPT, a cat-based persona created by Cohere AI ! ###")
    with gr.Group(elem_id="page_1", visible=True) as page_1:
        with gr.Box():            
            with gr.Row():
                start_button = gr.Button("Let's talk to CatGPT!", elem_id="start-btn", visible=True) 
                start_button.click(fn=None, inputs=[], outputs=[], _js=start_work)
                
    with gr.Group(elem_id="page_2", visible=False) as page_2:        
        with gr.Row(elem_id="chat_row"):
            chatbot = gr.Chatbot(elem_id="chat_bot", visible=False).style(color_map=("green", "blue"))
            chatbot1 = gr.Chatbot(elem_id="chat_bot1").style(color_map=("green", "blue"))    
        with gr.Row():
            prompt_input_audio = gr.Audio(
                                        source="microphone",
                                        type="filepath",
                                        label="Record Audio Input",
                                        
                                    )
            translate_btn = gr.Button("Check text first ?👍")
            
        #whisper_task = gr.Radio(["translate", "transcribe"], value="translate", show_label=False)
        with gr.Row(elem_id="prompt_row"):
            prompt_input = gr.Textbox(lines=2, label="Input text",show_label=True)
            chat_history = gr.Textbox(lines=4, label="prompt", visible=False)
            submit_btn = gr.Button(value = "Send to CatGPT",elem_id="submit-btn").style(
                    margin=True,
                    rounded=(True, True, True, True),
                    width=100
                )
               
        translate_btn.click(fn=translate_or_transcribe, 
                         inputs=[prompt_input_audio], 
                         outputs=prompt_input
                        )
          
        submit_btn.click(fn=chat, 
                             inputs=[prompt_input, chat_history], 
                             outputs=[chatbot, chat_history],
                            )
    gr.HTML('''
         <p>Note: Please be aware that audio records from iOS devices will not be decoded as expected by Gradio. For the best experience, record your voice from a computer instead of your smartphone ;)</p>
        <div class="footer">
                    <p>Whisper Model by <a href="https://github.com/openai/whisper" style="text-decoration: underline;" target="_blank">OpenAI</a>
                    </p>
                    <p>This demo uses the Cohere API. Cohere provides access to advanced Large Language Models and NLP tools through one easy-to-use API. <a href="https://cohere.ai/" style="text-decoration: underline;" target="_blank">Get started for free!</a>
                    </p>
        </div>
        ''')
    gr.Markdown("![visitor badge](https://visitor-badge.glitch.me/badge?page_id=RamAnanth1.co_chat_voice)")

demo.launch(debug = True)