Spaces:
Runtime error
Runtime error
File size: 5,494 Bytes
3796a5e c43093e 3796a5e ff1d740 4094da1 ff1d740 91e84de ff1d740 057830c c43093e 3796a5e c43093e 85df983 c43093e 0ed9063 c43093e 30e5c47 c43093e c5f762e c43093e c5f762e c43093e c5f762e c43093e 49e1c3f c52bc49 62f3a65 49e1c3f 59716dc 3796a5e c43093e |
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 |
import gradio as gr
import os
import json
import requests
whisper = gr.Interface.load(name="spaces/sanchit-gandhi/whisper-large-v2")
#input_message.submit([input_message, history], [input_message, chatbot, history])
def translate_or_transcribe(audio, task):
text_result = whisper(audio, None, task, fn_index=0)
return text_result
#Streaming endpoint
API_URL = "https://api.openai.com/v1/chat/completions" #os.getenv("API_URL") + "/generate_stream"
def predict(inputs, top_p, temperature, openai_api_key, history=[]):
payload = {
"model": "gpt-3.5-turbo",
"messages": [{"role": "user", "content": f"{inputs}"}],
"temperature" : 1.0,
"top_p":1.0,
"n" : 1,
"stream": True,
"presence_penalty":0,
"frequency_penalty":0,
}
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {openai_api_key}"
}
history.append(inputs)
# make a POST request to the API endpoint using the requests.post method, passing in stream=True
response = requests.post(API_URL, headers=headers, json=payload, stream=True)
#response = requests.post(API_URL, headers=headers, json=payload, stream=True)
token_counter = 0
partial_words = ""
counter=0
for chunk in response.iter_lines():
if counter == 0:
counter+=1
continue
counter+=1
# check whether each line is non-empty
if chunk :
# decode each line as response data is in bytes
if len(json.loads(chunk.decode()[6:])['choices'][0]["delta"]) == 0:
break
#print(json.loads(chunk.decode()[6:])['choices'][0]["delta"]["content"])
partial_words = partial_words + json.loads(chunk.decode()[6:])['choices'][0]["delta"]["content"]
if token_counter == 0:
history.append(" " + partial_words)
else:
history[-1] = partial_words
chat = [(history[i], history[i + 1]) for i in range(0, len(history) - 1, 2) ] # convert to tuples of list
token_counter+=1
yield chat, history # resembles {chatbot: chat, state: history}
def reset_textbox():
return gr.update(value='')
title = """<h1 align="center">🔥ChatGPT API 🚀Streaming🚀 with Whisper</h1>"""
description = """Language models can be conditioned to act like dialogue agents through a conversational prompt that typically takes the form:
```
User: <utterance>
Assistant: <utterance>
User: <utterance>
Assistant: <utterance>
...
```
In this app, you can explore the outputs of a 20B large language model.
"""
#<a href="https://huggingface.co/spaces/ysharma/ChatGPTwithAPI?duplicate=true"><img src="https://bit.ly/3gLdBN6" alt="Duplicate Space"></a>Duplicate Space with GPU Upgrade for fast Inference & no queue<br>
with gr.Blocks(css = """#col_container {width: 700px; margin-left: auto; margin-right: auto;}
#chatbot {height: 400px; overflow: auto;}""") as demo:
gr.HTML(title)
gr.HTML()
gr.HTML('''<center><a href="https://huggingface.co/spaces/ysharma/ChatGPTwithAPI?duplicate=true"><img src="https://bit.ly/3gLdBN6" alt="Duplicate Space"></a>Duplicate the Space and run securely with your OpenAI API Key</center>''')
with gr.Column(elem_id = "col_container"):
openai_api_key = gr.Textbox(type='password', label="Enter your OpenAI API key here")
chatbot = gr.Chatbot(elem_id='chatbot') #c
prompt_input_audio = gr.Audio(source="microphone",type="filepath",label="Record Audio Input"
)
translate_btn = gr.Button("Check Whisper first ? 👍")
whisper_task = gr.Radio(["translate", "transcribe"], value="translate", show_label=False)
inputs = gr.Textbox(placeholder= "Hi there!", label= "Type an input and press Enter") #t
state = gr.State([]) #s
b1 = gr.Button()
#inputs, top_p, temperature, top_k, repetition_penalty
with gr.Accordion("Parameters", open=False):
top_p = gr.Slider( minimum=-0, maximum=1.0, value=0.95, step=0.05, interactive=True, label="Top-p (nucleus sampling)",)
temperature = gr.Slider( minimum=-0, maximum=5.0, value=0.5, step=0.1, interactive=True, label="Temperature",)
#top_k = gr.Slider( minimum=1, maximum=50, value=4, step=1, interactive=True, label="Top-k",)
#repetition_penalty = gr.Slider( minimum=0.1, maximum=3.0, value=1.03, step=0.01, interactive=True, label="Repetition Penalty", )
translate_btn.click(fn=translate_or_transcribe,
inputs=[prompt_input_audio,whisper_task],
outputs=inputs
)
inputs.submit( predict, [inputs, top_p, temperature, openai_api_key, state], [chatbot, state],)
b1.click( predict, [inputs, top_p, temperature, openai_api_key, state], [chatbot, state],)
b1.click(reset_textbox, [], [inputs])
inputs.submit(reset_textbox, [], [inputs])
#gr.Markdown(description)
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>
''')
gr.Markdown("![visitor badge](https://visitor-badge.glitch.me/badge?page_id=RamAnanth1.chatGPT_voice)")
demo.queue().launch(debug=True) |