Spaces:
Sleeping
Sleeping
import gradio as gr | |
from uuid import uuid4 | |
from langgraph.checkpoint.memory import MemorySaver | |
from langgraph.store.memory import InMemoryStore | |
from src.rag_lanchain import graph_builder | |
memory = MemorySaver() | |
in_memory_store = InMemoryStore() | |
graph = graph_builder.compile(checkpointer=memory, store=in_memory_store) | |
def respond(msg, config): | |
role_dict = {"ai": "assistant", "human": "user"} | |
if len(msg) == 0: | |
gr.Warning("Chat messages cannot be empty") | |
history = [] | |
for hist in graph.get_state_history(config): | |
history = [{"role": role_dict.get(i.type, i.type), "content": i.content} for i in | |
hist.values["messages"]] | |
break | |
return "", history | |
events = graph.stream( | |
{"messages": [{"role": "user", "content": msg}]}, | |
config, | |
stream_mode="values", | |
) | |
events = list(events) | |
conversation = events[-1]["messages"] | |
conversation = [{"role": role_dict.get(i.type, i.type), "content": i.content} for i in conversation] | |
return "", conversation | |
def init_chat_state(): | |
return {"configurable": {"thread_id": str(uuid4()).replace('-', '_')}} | |
css = """ | |
.centered-container { | |
max-width: 1000px; | |
margin: 0 auto; | |
} | |
""" | |
THEME = gr.themes.Ocean() | |
demo = gr.Blocks(theme=THEME, fill_width=False, fill_height=True, css=css) | |
with demo: | |
config_state = gr.State(init_chat_state) | |
with gr.Column(elem_classes="centered-container"): | |
gr.Markdown(""" | |
# 💬 Polars Python Chatbot | |
### Ask anything about the [Polars](https://pola-rs.github.io/polars/) Python package! | |
### This chatbot uses a database of embeddings generated from the official documentation to help you find accurate and relevant answers about using Polars for data manipulation in Python. | |
""") | |
chatbot = gr.Chatbot( | |
label=None, | |
type="messages", | |
show_label=False, | |
height=400, | |
) | |
with gr.Row(equal_height=True): | |
msg = gr.Textbox( | |
placeholder="Type your message here...", | |
show_label=False, | |
lines=3, | |
max_lines=3, | |
scale=5, | |
) | |
send_btn = gr.Button("Send", variant="primary", scale=1) | |
with gr.Row(): | |
clear = gr.ClearButton([msg, chatbot], value="Clear Chat", variant="secondary") | |
send_btn.click(respond, [msg, config_state], [msg, chatbot]) | |
msg.submit(respond, [msg, config_state], [msg, chatbot]) | |
if __name__ == '__main__': | |
demo.launch() | |