wl-chat / app.py
cyberandy's picture
update
44be91e
import gradio as gr
import requests
import time
import ast
import os
## Adding the Theme here ##
wordlift_theme = gr.themes.Soft(
primary_hue=gr.themes.Color(
c50="#007AFF",
c100="rgba(0, 122, 255, 0.2)",
c200="#007AFF",
c300="rgba(0, 122, 255, 0.32)",
c400="rgba(0, 122, 255, 0.32)",
c500="rgba(0, 122, 255, 1.0)",
c600="rgba(0, 122, 255, 1.0)",
c700="rgba(0, 122, 255, 0.32)",
c800="rgba(0, 122, 255, 0.32)",
c900="#007AFF",
c950="#007AFF",
),
secondary_hue=gr.themes.Color(
c50="#576b95",
c100="#576b95",
c200="#576b95",
c300="#576b95",
c400="#576b95",
c500="#576b95",
c600="#576b95",
c700="#576b95",
c800="#576b95",
c900="#576b95",
c950="#576b95",
),
neutral_hue=gr.themes.Color(
name="gray",
c50="#f9fafb",
c100="#f3f4f6",
c200="#e5e7eb",
c300="#d1d5db",
c400="#B2B2B2",
c500="#808080",
c600="#636363",
c700="#515151",
c800="#393939",
c900="#272727",
c950="#171717",
),
radius_size=gr.themes.sizes.radius_sm,
).set(
button_primary_background_fill="#2196F3",
button_primary_background_fill_dark="#2196F3",
button_primary_background_fill_hover="#007AFF",
button_primary_border_color="#2196F3",
button_primary_border_color_dark="#2196F3",
button_primary_text_color="#FFFFFF",
button_primary_text_color_dark="#FFFFFF",
button_secondary_background_fill="#F2F2F2",
button_secondary_background_fill_dark="#2B2B2B",
button_secondary_text_color="#393939",
button_secondary_text_color_dark="#FFFFFF",
# background_fill_primary="#F7F7F7",
# background_fill_primary_dark="#1F1F1F",
block_title_text_color="*primary_500",
block_title_background_fill="*primary_100",
input_background_fill="#F6F6F6",
)
# _________________________________________________________________#
def main():
# Load CSS
css_path = os.path.join(os.getcwd(), "assets", "custom.css")
app = gr.Interface(fn=response, inputs=[msg, chatbot], outputs=[msg, chatbot], server_name="localhost")
app.load_css(css_path)
app.launch(share=True, inline=True)
def bot(user_message, history):
# POST request to the API
response = requests.post(
'https://langchain-cd369f3121.wolf.jina.ai/ask',
headers={'accept': 'application/json', 'Content-Type': 'application/json'},
json={"input": user_message, "envs": {}}
)
# Extract the bot's response from the API response
data_str = response.json()['result']
# Print out the response status and content for debugging
print("Response status:", response.status_code)
print("Response content:", response.content)
# Try to parse the response as a tuple
try:
data = ast.literal_eval(data_str)
# Check if the parsed data is a tuple with sources
if isinstance(data, tuple) and len(data) == 2:
bot_message = data[0]
sources = ', '.join(data[1])
# Update the chat history with the bot's response and sources
history.append([user_message, f"{bot_message}\n\nLearn more: {sources}"])
else:
raise ValueError # Not a tuple with sources, treat it as a plain text message
except (SyntaxError, ValueError):
# The response is just a plain text message
bot_message = data_str
# Update the chat history with the bot's response
history.append([user_message, bot_message])
return history
#gr.Chatbot.postprocess = postprocess
with open("assets/custom.css", "r", encoding="utf-8") as f:
customCSS = f.read()
with gr.Blocks(css=customCSS, theme=wordlift_theme) as demo:
chatbot = gr.Chatbot(elem_id="chuanhu_chatbot").style(height="100%")
msg = gr.Textbox(label=" 🪄", placeholder="Type a message to the bot and press enter").style(container=False)
clear = gr.Button("🧹 Start fresh")
response = msg.submit(bot, [msg, chatbot], [chatbot], queue=False)
response.then(lambda: gr.update(interactive=True), None, [msg], queue=False)
clear.click(lambda: None, None, chatbot, queue=False)
#demo = gr.Interface(fn=bot, inputs=msg, outputs=chatbot, theme="dark", title="WL-Chat", description="A chatbot to interact with WordLift's blog.")
demo.queue()
demo.launch(inline=True)
if __name__ == "__main__":
main()