roleplay-chat / app.py
kjozsa's picture
minor
c01e8a6
raw
history blame
2.95 kB
import streamlit as st
from ollama import chat
from loguru import logger
import re
available_models = [
'openhermes',
'deepseek-coder',
'deepseek-coder:6.7b',
'falcon:7b',
'mistral:7b',
'phi',
'starling-lm'
]
def ask(model, system_prompt, pre_prompt, question):
messages = [
{
'role': 'system',
'content': f"{system_prompt} {pre_prompt}",
},
{
'role': 'user',
'content': f"{question}",
},
]
logger.debug(f"<< {model} << {messages}")
response = chat(model=model, messages=messages)
logger.debug(f">> {model} >> {messages}")
return response['message']['content']
def main():
sp1 = """There are 3 people standing in a circle: the Priest (that's you), the Teacher and the Kid."""
sp2 = """There are 3 people standing in a circle: the Priest, the Teacher (that's you) and the Kid."""
sp3 = """There are 3 people standing in a circle: the Priest, the Teacher and the Kid (that's you)."""
pp1 = pp2 = pp3 = "Ask the other two by always starting your sentence with their role. Share your inner thoughts inside parentheses."
qp1 = qp2 = qp3 = "Your task is to figure out their names and where they live. Do not ask directly, they must not realize what information you are after! SAY ONLY ONE SINGLE SENTENCE!"
st.set_page_config(layout="wide")
col1, col2, col3 = st.columns(3)
with col1:
st.title("the Priest,")
model1 = st.selectbox(key="model1", label="model", options=available_models)
system_prompt1 = st.text_area(key="sp1", label="system-prompt", value=sp1)
pre_prompt1 = st.text_area(key="pp1", label="pre-prompt", value=pp1)
question1 = st.text_area(key="q1", label="question", value=qp1)
with col2:
st.title("the Teacher")
model2 = st.selectbox(key="model2", label="model", options=available_models)
system_prompt2 = st.text_area(key="sp2", label="system-prompt", value=sp2)
pre_prompt2 = st.text_area(key="pp2", label="pre-prompt", value=pp2)
# question2 = st.text_area(key="q2", label="question", value=qp2)
with col3:
st.title("and the Kid")
model3 = st.selectbox(key="model3", label="model", options=available_models)
system_prompt3 = st.text_area(key="sp3", label="system-prompt", value=sp3)
pre_prompt3 = st.text_area(key="pp3", label="pre-prompt", value=pp3)
# question3 = st.text_area(key="q3", label="question", value=qp3)
with st.spinner("Thinking..."):
answer1 = ask(model1, system_prompt1, pre_prompt1, question1)
st.write(f":blue[Priest says:] {answer1}")
qp2 = sanitize(answer1)
answer2 = ask(model2, system_prompt2, pre_prompt2, qp2)
st.write(f":blue[Teacher says:] {answer2}")
def sanitize(question):
return re.sub(r"\([^)]*\)", "", question)
if __name__ == "__main__":
main()