File size: 2,679 Bytes
81e1c72 380be21 81e1c72 380be21 1373c22 81e1c72 21c7651 380be21 1af1cee 380be21 81e1c72 21c7651 81e1c72 380be21 dd5d973 81e1c72 c6447fa dd5d973 81e1c72 380be21 81e1c72 c6447fa 380be21 81e1c72 380be21 dd5d973 21c7651 dd5d973 81e1c72 dd5d973 380be21 81e1c72 dd5d973 f975b0f c6447fa 81e1c72 380be21 7275c7f 380be21 184f405 bfe0881 184f405 65b412a 184f405 |
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 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 |
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) |