DungeonMaster / app.py
pikaduck's picture
Streamlit UI for landing page & building character ready; supports hard-coded prompt based avatar generation using stable diffusion hosted in colab
4eb8ef9
"""
Title : Landing Page of the application
@author : Sakshi Tantak
"""
# Imports
import base64
import requests
import streamlit as st
from filepaths import LOGO_PATH, POSTER_PATH
st.set_page_config(page_title = 'Dungeons & Dragons', layout = 'wide', page_icon = LOGO_PATH)
def set_centered_heading(text):
st.markdown(f"<h1 style='text-align: center; color: #FF5733;'>{text}</h1>", unsafe_allow_html=True)
if 'llm_endpoint' not in st.session_state:
st.session_state['llm_endpoint'] = ''
if 'stable_diffusion_endpoint' not in st.session_state:
st.session_state['stable_diffusion_endpoint'] = ''
def add_bg_from_local(image_file):
with open(image_file, "rb") as image_file:
encoded_string = base64.b64encode(image_file.read())
st.markdown(
f"""
<style>
.stApp {{
image: url(data:image/{"jpeg"};base64,{encoded_string.decode()});
size: auto
}}
</style>
""",
unsafe_allow_html=True
)
def get_api_endpoints():
form = st.form('api-endpoints')
with form:
llm_endpoint = st.text_input(label = 'LLM Endpoint',
value = 'https://643b-34-132-196-118.ngrok-free.app')
stable_diffusion_endpoint = form.text_input(label = 'Stable Diffusion Endpoint',
value = 'https://643b-34-132-196-118.ngrok-free.app')
submitted = st.form_submit_button('Add URLs')
if submitted:
with st.spinner('Checking if the URLs are valid'):
try:
llm_response = requests.get(url = llm_endpoint)
if llm_response.status_code == 200 and llm_response.text == 'Dungeon Master':
st.success('Hurrah! Your LLM endpoint works!')
else:
st.error('Err! This LLM endpoint is invalid or is not working!')
except:
st.error('Err! This LLM endpoint is invalid or is not working!')
try:
sd_response = requests.get(url = stable_diffusion_endpoint)
if sd_response.status_code == 200 and sd_response.text == 'Generate Avatar':
st.success('Hurrah! Your Stable Diffusion endpoint works!')
else:
st.error('Err! This Stable Diffusion endpoint is invalid or is not working!')
except:
st.error('Err! This Stable Diffusion endpoint is invalid or is not working!')
return llm_endpoint, stable_diffusion_endpoint
return None, None
def main():
set_centered_heading('Dungeons & Dragons')
placeholder = st.empty()
with placeholder:
cols = st.columns(2)
with cols[0]:
st.image(POSTER_PATH)
with cols[-1]:
llm_endpoint, stable_diffusion_endpoint = get_api_endpoints()
if llm_endpoint is not None and stable_diffusion_endpoint is not None:
print(llm_endpoint, stable_diffusion_endpoint)
st.session_state['llm_endpoint'] = llm_endpoint
st.session_state['stable_diffusion_endpoint'] = stable_diffusion_endpoint
if __name__ == '__main__':
main()