You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
98 lines
2.6 KiB
98 lines
2.6 KiB
import gradio_client as grc
|
|
import interpreter
|
|
import time
|
|
import gradio as gr
|
|
from pydub import AudioSegment
|
|
import io
|
|
from elevenlabs import generate, play, set_api_key
|
|
import dotenv
|
|
|
|
dotenv.load_dotenv(".env")
|
|
|
|
# interpreter.model = "TheBloke/Mistral-7B-OpenOrca-GGUF"
|
|
interpreter.auto_run = True
|
|
|
|
|
|
set_api_key("ELEVEN_LABS_API_KEY")
|
|
|
|
|
|
def get_audio_length(audio_bytes):
|
|
# Create a BytesIO object from the byte array
|
|
byte_io = io.BytesIO(audio_bytes)
|
|
|
|
# Load the audio data with PyDub
|
|
audio = AudioSegment.from_mp3(byte_io)
|
|
|
|
# Get the length of the audio in milliseconds
|
|
length_ms = len(audio)
|
|
|
|
# Optionally convert to seconds
|
|
length_s = length_ms / 1000.0
|
|
|
|
return length_s
|
|
|
|
|
|
def speak(text):
|
|
speaking = True
|
|
audio = generate(text=text, voice="Daniel")
|
|
play(audio, notebook=True)
|
|
|
|
audio_length = get_audio_length(audio)
|
|
time.sleep(audio_length)
|
|
|
|
|
|
# @title Text-only JARVIS
|
|
# @markdown Run this cell for a ChatGPT-like interface.
|
|
|
|
|
|
with gr.Blocks() as demo:
|
|
chatbot = gr.Chatbot()
|
|
msg = gr.Textbox()
|
|
|
|
def user(user_message, history):
|
|
return "", history + [[user_message, None]]
|
|
|
|
def bot(history):
|
|
user_message = history[-1][0]
|
|
history[-1][1] = ""
|
|
active_block_type = ""
|
|
|
|
for chunk in interpreter.chat(user_message, stream=True, display=False):
|
|
# Message
|
|
if "message" in chunk:
|
|
if active_block_type != "message":
|
|
active_block_type = "message"
|
|
history[-1][1] += chunk["message"]
|
|
yield history
|
|
|
|
# Code
|
|
if "language" in chunk:
|
|
language = chunk["language"]
|
|
if "code" in chunk:
|
|
if active_block_type != "code":
|
|
active_block_type = "code"
|
|
history[-1][1] += f"\n```{language}\n"
|
|
history[-1][1] += chunk["code"]
|
|
yield history
|
|
|
|
# Output
|
|
if "executing" in chunk:
|
|
history[-1][1] += "\n```\n\n```text\n"
|
|
yield history
|
|
if "output" in chunk:
|
|
if chunk["output"] != "KeyboardInterrupt":
|
|
history[-1][1] += chunk["output"] + "\n"
|
|
yield history
|
|
if "end_of_execution" in chunk:
|
|
history[-1][1] = history[-1][1].strip()
|
|
history[-1][1] += "\n```\n"
|
|
yield history
|
|
|
|
msg.submit(user, [msg, chatbot], [msg, chatbot], queue=False).then(
|
|
bot, chatbot, chatbot
|
|
)
|
|
|
|
if __name__ == "__main__":
|
|
demo.queue()
|
|
demo.launch(debug=True)
|