Spaces:
Runtime error
Runtime error
File size: 3,151 Bytes
58e0d8e |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
import streamlit as st
from streamlit import session_state as ss
from my_agent import MyAgent
import db_utils
class PageAgents:
def __init__(self):
self.name = "Agents"
def create_agent(self, crew=None):
agent = MyAgent()
if 'agents' not in ss:
ss.agents = [MyAgent]
ss.agents.append(agent)
agent.edit = True
db_utils.save_agent(agent) # Save agent to database
if crew:
crew.agents.append(agent)
db_utils.save_crew(crew)
return agent
def draw(self):
with st.container():
st.subheader(self.name)
editing = False
if 'agents' not in ss:
ss.agents = db_utils.load_agents() # Load agents from database
if 'crews' not in ss:
ss.crews = db_utils.load_crews() # Load crews from database
# Dictionary to track agent assignment
agent_assignment = {agent.id: [] for agent in ss.agents}
# Assign agents to crews
for crew in ss.crews:
for agent in crew.agents:
agent_assignment[agent.id].append(crew.name)
# Display agents grouped by crew in tabs
tabs = ["All Agents"] + ["Unassigned Agents"] + [crew.name for crew in ss.crews]
tab_objects = st.tabs(tabs)
# Display all agents
with tab_objects[0]:
st.markdown("#### All Agents")
for agent in ss.agents:
agent.draw()
if agent.edit:
editing = True
st.button('Create agent', on_click=self.create_agent, disabled=editing, key="create_agent_all")
# Display unassigned agents
with tab_objects[1]:
st.markdown("#### Unassigned Agents")
unassigned_agents = [agent for agent in ss.agents if not agent_assignment[agent.id]]
for agent in unassigned_agents:
unique_key = f"{agent.id}_unassigned"
agent.draw(key=unique_key)
if agent.edit:
editing = True
st.button('Create agent', on_click=self.create_agent, disabled=editing, key="create_agent_unassigned")
# Display agents grouped by crew
for i, crew in enumerate(ss.crews, 2):
with tab_objects[i]:
st.markdown(f"#### {crew.name}")
assigned_agents = [agent for agent in crew.agents]
for agent in assigned_agents:
unique_key = f"{agent.id}_{crew.name}"
agent.draw(key=unique_key)
if agent.edit:
editing = True
st.button('Create agent', on_click=self.create_agent, disabled=editing, kwargs={'crew': crew}, key=f"create_agent_{crew.name}")
if len(ss.agents) == 0:
st.write("No agents defined yet.")
st.button('Create agent', on_click=self.create_agent, disabled=editing)
|