+
Codename
+
{profile.codename}
+
Source
+
{profile.source}
+
Relationship
+
{profile.relationship.name}
+
Age Constraint
+
{profile.age_constraint if profile.age_constraint else 'None'}
+
Occupation Constraint
+
{profile.occupation_constraint if profile.occupation_constraint else 'None'}
+
Agent Constraint
+
{profile.agent_constraint if profile.agent_constraint else 'None'}
+
Tag
+
{profile.tag}
+
+ """,
+ unsafe_allow_html=True,
+ )
+
+
+def render_conversation_and_evaluation(episode: EpisodeLog) -> None:
+ local_css("./././css/style.css")
+ agents = [list(get_agents(agent).values())[0] for agent in episode.agents]
+ agent_names = [get_full_name(agent) for agent in agents]
+
+ messages = render_messages(episode)
+
+ background_messages = [
+ message for message in messages if message["role"] == "Background Info"
+ ]
+ evaluation_messages = [
+ message for message in messages if message["type"] == "comment"
+ ]
+ conversation_messages = [
+ message
+ for message in messages
+ if message not in background_messages and message not in evaluation_messages
+ ]
+
+ assert (
+ len(background_messages) == 2
+ ), f"Need 2 background messages, but got {len(background_messages)}"
+
+ st.markdown("---")
+
+ st.subheader("Conversation & Evaluation")
+ with st.expander("Conversation", expanded=True):
+ for index, message in enumerate(conversation_messages):
+ role = role_mapping.get(message["role"], message["role"])
+ content = message["content"]
+ # escape doller sign
+ content = content.replace("$", "$")
+
+ if role == "obs" or message.get("type") == "action":
+ try:
+ content = json.loads(content)
+ except Exception as e:
+ print(e)
+
+ with st.chat_message(
+ role,
+ avatar=str(
+ avatar_mapping.get(message["role"], avatar_mapping["default"])
+ ),
+ ):
+ if isinstance(content, dict):
+ st.json(content)
+ elif role == "info":
+ st.markdown(
+ f"""
+