aliabd's picture
aliabd HF Staff
Upload folder using huggingface_hub
4737b79 verified
raw
history blame
5.17 kB
import gradio as gr
import os
import plotly.express as px
# Chatbot demo with multimodal input (text, markdown, LaTeX, code blocks, image, audio, & video). Plus shows support for streaming text.
def random_plot():
df = px.data.iris()
fig = px.scatter(
df,
x="sepal_width",
y="sepal_length",
color="species",
size="petal_length",
hover_data=["petal_width"],
)
return fig
def print_like_dislike(x: gr.LikeData):
print(x.index, x.value, x.liked)
def random_bokeh_plot():
from bokeh.models import ColumnDataSource, Whisker
from bokeh.plotting import figure
from bokeh.sampledata.autompg2 import autompg2 as df
from bokeh.transform import factor_cmap, jitter, factor_mark
classes = list(sorted(df["class"].unique()))
p = figure(
height=400,
x_range=classes,
background_fill_color="#efefef",
title="Car class vs HWY mpg with quintile ranges",
)
p.xgrid.grid_line_color = None
g = df.groupby("class")
upper = g.hwy.quantile(0.80)
lower = g.hwy.quantile(0.20)
source = ColumnDataSource(data=dict(base=classes, upper=upper, lower=lower))
error = Whisker(
base="base",
upper="upper",
lower="lower",
source=source,
level="annotation",
line_width=2,
)
error.upper_head.size = 20
error.lower_head.size = 20
p.add_layout(error)
p.circle(
jitter("class", 0.3, range=p.x_range),
"hwy",
source=df,
alpha=0.5,
size=13,
line_color="white",
color=factor_cmap("class", "Light6", classes),
)
return p
def random_matplotlib_plot():
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
countries = ["USA", "Canada", "Mexico", "UK"]
months = ["January", "February", "March", "April", "May"]
m = months.index("January")
r = 3.2
start_day = 30 * m
final_day = 30 * (m + 1)
x = np.arange(start_day, final_day + 1)
pop_count = {"USA": 350, "Canada": 40, "Mexico": 300, "UK": 120}
df = pd.DataFrame({"day": x})
for country in countries:
df[country] = x ** (r) * (pop_count[country] + 1)
fig = plt.figure()
plt.plot(df["day"], df[countries].to_numpy())
plt.title("Outbreak in " + "January")
plt.ylabel("Cases")
plt.xlabel("Days since Day 0")
plt.legend(countries)
return fig
def add_message(history, message):
for x in message["files"]:
history.append(((x,), None))
if message["text"] is not None:
history.append((message["text"], None))
return history, gr.MultimodalTextbox(value=None, interactive=False)
def bot(history, response_type):
if response_type == "plot":
history[-1][1] = gr.Plot(random_plot())
elif response_type == "bokeh_plot":
history[-1][1] = gr.Plot(random_bokeh_plot())
elif response_type == "matplotlib_plot":
history[-1][1] = gr.Plot(random_matplotlib_plot())
elif response_type == "gallery":
history[-1][1] = gr.Gallery(
[os.path.join("files", "avatar.png"), os.path.join("files", "avatar.png")]
)
elif response_type == "image":
history[-1][1] = gr.Image(os.path.join("files", "avatar.png"))
elif response_type == "video":
history[-1][1] = gr.Video(os.path.join("files", "world.mp4"))
elif response_type == "audio":
history[-1][1] = gr.Audio(os.path.join("files", "audio.wav"))
elif response_type == "audio_file":
history[-1][1] = (os.path.join("files", "audio.wav"), "description")
elif response_type == "image_file":
history[-1][1] = (os.path.join("files", "avatar.png"), "description")
elif response_type == "video_file":
history[-1][1] = (os.path.join("files", "world.mp4"), "description")
elif response_type == "txt_file":
history[-1][1] = (os.path.join("files", "sample.txt"), "description")
else:
history[-1][1] = "Cool!"
return history
fig = random_plot()
with gr.Blocks(fill_height=True) as demo:
chatbot = gr.Chatbot(
elem_id="chatbot",
bubble_full_width=False,
scale=1,
)
response_type = gr.Radio(
[
"audio_file",
"image_file",
"video_file",
"txt_file",
"plot",
"matplotlib_plot",
"bokeh_plot",
"image",
"text",
"gallery",
"video",
"audio",
],
value="text",
label="Response Type",
)
chat_input = gr.MultimodalTextbox(
interactive=True,
placeholder="Enter message or upload file...",
show_label=False,
)
chat_msg = chat_input.submit(
add_message, [chatbot, chat_input], [chatbot, chat_input]
)
bot_msg = chat_msg.then(
bot, [chatbot, response_type], chatbot, api_name="bot_response"
)
bot_msg.then(lambda: gr.MultimodalTextbox(interactive=True), None, [chat_input])
chatbot.like(print_like_dislike, None, None)
demo.queue()
if __name__ == "__main__":
demo.launch()