blob: 8db01336841c25b3c143b870ba97ed34fdf354c5 [file]
import application as cowsay_application
import streamlit as st
from burr.integrations.streamlit import (
AppState,
Record,
get_state,
render_explorer,
set_slider_to_current,
update_state,
)
def cow_say_view(app_state: AppState):
application = app_state.app
button = st.button("Cow say?", use_container_width=True)
if button:
step_output = application.step()
action, result, state = step_output
app_state.history.append(Record(state.get_all(), action.name, result))
set_slider_to_current()
def render_cow_said(record: Record):
cow_said = record.state.get("cow_said")
cow_should_speak = record.state.get("cow_should_speak")
with st.chat_message("cow", avatar="🐮" if cow_should_speak and cow_said else "💭"):
grey = "#A9A9A9"
if record.action == "cow_should_say":
if cow_should_speak:
st.markdown(
f"<p style='color: {grey};'>Cow will not speak.</p>", unsafe_allow_html=True
)
else:
st.markdown(
f"<p style='color: {grey};'>Cow will not speak.</p>", unsafe_allow_html=True
)
else:
if cow_said is None:
st.markdown(f"<p style='color: {grey};'>...</p>", unsafe_allow_html=True)
if cow_said is not None:
st.code(cow_said, language="plaintext")
def retrieve_state():
if "burr_state" not in st.session_state:
state = AppState.from_empty(app=cowsay_application.application())
else:
state = get_state()
return state
def main():
st.set_page_config(layout="wide")
st.title("Talking cows with Burr")
app_state = retrieve_state() # retrieve first so we can use for the ret of the step
columns = st.columns(2)
with columns[0]:
cow_say_view(app_state)
with st.container(height=800):
for item in app_state.history:
render_cow_said(item)
with columns[1]:
render_explorer(app_state)
update_state(app_state) # update so the next iteration knows what to do
if __name__ == "__main__":
main()