File size: 2,420 Bytes
81e1c72 380be21 81e1c72 380be21 1373c22 81e1c72 380be21 1af1cee 380be21 81e1c72 380be21 dd5d973 81e1c72 c6447fa dd5d973 81e1c72 380be21 81e1c72 c6447fa 380be21 81e1c72 380be21 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 |
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, format_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}]")
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.")
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) |