| 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 |
| 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 |
|
|
| 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() |