File size: 2,093 Bytes
d4852d9 |
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 |
import sqlite3
import sys
import streamlit as st
from app.database import ItemDatabase
from app.recommendations import RecommenderSystem
def show_item(item_id):
item = st.session_state["db"].get_item(item_id)
title = item["title"]
with st.container(border=True):
st.write(f"**{title}**")
st.write(item["description"])
if st.button("Recommend similar items", key=item["item_id"]):
st.session_state["recommendation_query"] = item["item_id"]
st.session_state["search_query"] = None # reset
st.rerun()
def main():
st.title("Graph-based RecSys")
if "db" not in st.session_state:
st.session_state["db"] = ItemDatabase(
db_path="/data/items.db")
if "recsys" not in st.session_state:
st.session_state["recsys"] = RecommenderSystem(
faiss_index_path="/data/index.faiss",
db_path="/data/items.db")
if "search_query" not in st.session_state:
st.session_state["search_query"] = None
if "recommendation_query" not in st.session_state:
st.session_state["recommendation_query"] = None
search_query = st.text_input("Enter item name", st.session_state["search_query"])
if st.button("Search"):
st.session_state["search_query"] = search_query
st.session_state["recommendation_query"] = None # reset
if st.session_state["recommendation_query"] is not None:
query = st.session_state["recommendation_query"]
base_item_title = st.session_state["db"].get_item(query)["title"]
st.subheader(f'Recommendation Results for "{base_item_title}"')
results = st.session_state["recsys"].recommend_items(query)
for item_id in results:
show_item(item_id)
elif st.session_state["search_query"] is not None:
query = st.session_state["search_query"]
st.subheader(f'Search Results for "{query}"')
results = st.session_state["db"].search_items(query)
for item_id in results:
show_item(item_id)
if __name__ == "__main__":
main() |