|
import streamlit as st |
|
from modules.data_class import DataState |
|
from modules.tools import data_node |
|
from modules.nodes import chatbot_with_tools, human_node, maybe_exit_human_node, maybe_route_to_tools |
|
|
|
from langgraph.graph import StateGraph, START, END |
|
|
|
from IPython.display import Image, display |
|
from pprint import pprint |
|
from typing import Literal |
|
|
|
from langgraph.prebuilt import ToolNode |
|
|
|
from collections.abc import Iterable |
|
from IPython.display import display, clear_output |
|
import sys |
|
|
|
|
|
|
|
graph_builder = StateGraph(DataState) |
|
|
|
|
|
graph_builder.add_node("chatbot_healthassistant", chatbot_with_tools) |
|
graph_builder.add_node("patient", human_node) |
|
graph_builder.add_node("documenting", data_node) |
|
|
|
|
|
graph_builder.add_conditional_edges("chatbot_healthassistant", maybe_route_to_tools) |
|
graph_builder.add_conditional_edges("patient", maybe_exit_human_node) |
|
graph_builder.add_edge("documenting", "chatbot_healthassistant") |
|
graph_builder.add_edge(START, "chatbot_healthassistant") |
|
|
|
|
|
graph_with_order_tools = graph_builder.compile() |
|
|
|
|
|
st.title("LangGraph Chatbot") |
|
st.markdown("Chat with an AI-powered health assistant.") |
|
|
|
|
|
if "messages" not in st.session_state: |
|
st.session_state.messages = [] |
|
|
|
user_input = st.text_input("You:", key="input") |
|
|
|
if st.button("Send"): |
|
if user_input: |
|
|
|
st.session_state.messages.append(("User", user_input)) |
|
|
|
|
|
state = DataState(messages=st.session_state.messages, data={}, finished=False) |
|
for output in graph_with_order_tools.stream(state): |
|
response = output["messages"][-1] |
|
st.session_state.messages.append(("Bot", response)) |
|
|
|
|
|
for sender, message in st.session_state.messages: |
|
st.write(f"**{sender}:** {message}") |