Spaces:
Runtime error
Runtime error
File size: 3,976 Bytes
d934e05 47d1763 1e508c0 47d1763 f280a0c 47d1763 f280a0c 47d1763 1979a9d 47d1763 f280a0c 47d1763 2aa6e54 47d1763 7b55a1a 47d1763 8dc34d0 d934e05 1e508c0 2c5b1e7 1e508c0 d934e05 f8409b4 47d1763 f8409b4 33de646 47d1763 33de646 d934e05 1e508c0 d934e05 47d1763 d934e05 |
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 99 100 101 102 103 104 105 106 107 108 |
import streamlit as st
from src.common import *
def login(pw: str) -> bool:
"""
Convenience wrapper for login functionality. Has side effect of storing the logged in
user name in the session state
:param pw: Password to attempt login
:return: True/False if logged in
"""
pw_users = st.secrets['app_password'].split(';')
for pu in pw_users:
split_point=pu.find('(')
pu_password = pu[0:split_point]
if pu_password == pw:
pu_user = pu[split_point + 1: -1]
st.session_state['username'] = pu_user
return True
return False
def show_system_status_bar() -> None:
endpoints = st.secrets['endpoints'].split(',')
num_endpoints = len(endpoints)
running = []
stopped = []
stopped_with_status = []
for e in endpoints:
status = hf_endpoint_status('alfraser', e)
if status == HF_RUNNING:
running.append(e)
else:
stopped.append(e)
stopped_with_status.append(f'{e} ({status})')
if len(running) == num_endpoints:
message = "**:large_green_circle: System Status - All LLM Endpoints Running**"
elif len(stopped) == num_endpoints:
message = "**:red_circle: System Status - No LLM Endpoints Running**"
else:
message = "**:large_orange_circle: System Status - Some LLM Endpoints Running**"
with st.expander(message):
if len(running) == num_endpoints:
st.success("All LLM endpoints running")
st.write("**Note** - endpoints shutdown after 15 minutes of inactivity")
else:
st.info(f"{len(running)} of {num_endpoints} LLM endpoints running")
all = []
for e in running:
all.append(f'* :large_green_circle: {e}')
for e in stopped_with_status:
all.append(f'* :red_circle: {e}')
st.write('\n'.join(all))
if st.button("Start all endpoints"):
for e in stopped:
logging.info(f"Requesting start of {e}")
resume_hf_endpoint('alfraser', e)
st.success('**Note** - endpoint start may take multiple minutes, so refresh and check status periodically')
def st_setup(page_title: str, layout: str = 'wide', skip_login: bool = False) -> None:
"""
Sets up standard outline (wide layout), checks for logged in status and then
displays the login box if not logged in. Should be used as a conditional to display
the other content on the page.
:param page_title: The streamlit page title for this page
:return: bool - logged in status
"""
st.set_page_config(page_title=page_title, layout=layout)
username='username'
if username in st.session_state:
st.markdown(f'<div style="float: right; padding-top: 10px;">Logged in as <b>{st.session_state[username]}</b></span>', unsafe_allow_html=True)
with st.sidebar:
st.image('img/uob-logo.png', width=200)
if skip_login:
show_system_status_bar()
return True
# Option to add a running_local key to secrets.toml for local login to speed up development
# This relies on the protection of streamlit secrets in production, which password login already relies on
running_local = 'running_local'
if running_local in st.secrets:
show_system_status_bar()
return True
logged_in = 'logged_in'
if logged_in not in st.session_state or st.session_state[logged_in]==False:
_, c2, _ = st.columns(3)
with c2:
st.write('### Log in')
pw = st.text_input(type='password', label='Password')
if st.button('Log in'):
if login(pw):
st.session_state[logged_in]=True
st.rerun()
else:
st.info("Invalid password")
return False
else:
show_system_status_bar()
return True
|