Skip to content

Instantly share code, notes, and snippets.

@mfitton
Created December 7, 2020 19:59
Show Gist options
  • Save mfitton/51593c0df11d18a20b27fba3b0308ed0 to your computer and use it in GitHub Desktop.
Save mfitton/51593c0df11d18a20b27fba3b0308ed0 to your computer and use it in GitHub Desktop.
import streamlit as st
import time
import session_state
from datetime import datetime, timedelta
from util import get_db_connection
from PIL import Image
import ray
def retry_until_success(f, timeout=15):
end = datetime.now() + timedelta(seconds=timeout)
while True:
try:
r = f()
return r
except Exception as e:
if datetime.now() < end:
time.sleep(1)
continue
raise e
def rerun():
raise st.script_runner.RerunException(
st.script_request_queue.RerunData(None))
if __name__ == "__main__":
# Draw a title and some text to the app:
'''
# Movie recommendations!
'''
ray.init(address="auto", ignore_reinit_error=True)
state = session_state.get(liked_image_id="")
progress_bar = st.sidebar.progress(0)
status_text = st.sidebar.empty()
img_width = st.sidebar.slider("Image size", 10, 300, 100)
num_movies = st.sidebar.slider("Number of movies", 1, 20, 5)
num_cols = st.sidebar.slider("Number of columns", 1, 5, 2)
pick_img = st.sidebar.radio(
"Which movie?", [x for x in range(1, num_movies + 1)])
cols = st.beta_columns(num_cols)
ensemble_actor = retry_until_success(lambda: ray.get_actor("composed_model"))
if st.button("Submit preference"):
# Submit new data and fetch results
result = ray.get(ensemble_actor.record_liked_id.remote(state.liked_image_id))
else:
result = ray.get(ensemble_actor.get_recommendation.remote())
if result:
movies = result["recs"]
state.liked_image_id = str(movies[pick_img]['id'])
### List[Movie] where Movie in model results
### id: int
### title: string
for i in range(num_movies):
col_idx = i % num_cols
movie = movies[i]
status_text.text("%i%% Complete" % (i * 20))
progress_bar.progress(int((i / num_movies) * 100))
image_name = 'assets/' + str(movie['id']) + '.jpg'
image = Image.open(image_name)
cols[col_idx].image(image,
caption=str(i+1)+':'+movie['title'],width=img_width)
progress_bar.empty()
else:
st.write("Loading.")
# time.sleep(4)
# rerun()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment