chameleon / src /app.py
Eric Botti
prompt tweaking, added game rules as system message
21c7651
from typing import Type
import streamlit as st
from streamlit import session_state
from game_chameleon import ChameleonGame
from agent_interfaces import HumanAgentInterface
from message import Message
from prompts import fetch_prompt
st.set_page_config(layout="wide", page_title="Chameleon")
def display_message(message: Message):
if message.type == "verbose":
messages_container.markdown(f":green[{message.content}]")
elif message.type == "debug":
messages_container.markdown(f":orange[DEBUG: {message.content}]")
elif message.type == "system":
# Don't display system message as it is displayed in the "How to Play" expander
pass
else:
messages_container.markdown(f"{message.content}")
if "messages" not in session_state:
session_state.messages = []
session_state.user_input = None
class StreamlitInterface(HumanAgentInterface):
def add_message(self, message: Message):
super().add_message(message)
session_state.messages.append(message)
display_message(message)
def _generate(self) -> str:
response = session_state.user_input
session_state.user_input = None
return response
# Streamlit App
margin_size = 1
center_size = 3
title_left, title_center, title_right = st.columns([margin_size, center_size, margin_size])
with title_center:
st.markdown("# :rainbow[Chameleon]")
left, center, right = st.columns([margin_size, center_size, margin_size])
with center:
messages_container = st.container()
messages_container.write("Welcome to Chameleon! A social deduction game powered by LLMs.")
rules_expander = messages_container.expander("How to Play", expanded=False)
rules_expander.markdown(fetch_prompt("game_rules"))
messages_container.write("Enter your name to begin...")
user_input = st.chat_input("Your response:")
if st.session_state.messages:
for message in st.session_state.messages:
display_message(message)
if user_input:
if "game" not in st.session_state:
st.session_state.game = ChameleonGame.from_human_name(user_input, StreamlitInterface)
else:
session_state.user_input = user_input
st.session_state.game.run_game()
st.markdown("#")
footer="""<style>
.footer {
position: fixed;
background-color: #0E1117;
padding-top: 10px;
left: 0;
bottom: 0;
width: 100%;
text-align: center;
}
</style>
<div class="footer">
<p style="margin: 0;">Created by <a href="https://huggingface.co/ericbotti" target="_blank">Eric Botti</a></p>
<small>Your responses may be collected for research purposes</small>
</div>
"""
st.markdown(footer, unsafe_allow_html=True)