import copy from typing import Optional import pandas as pd import requests import streamlit as st http_session = requests.Session() LOCAL_DB = False if LOCAL_DB: ROBOTOFF_BASE_URL = "http://localhost:5500/api/v1" else: ROBOTOFF_BASE_URL = "https://robotoff.openfoodfacts.org/api/v1" PREDICTION_URL = ROBOTOFF_BASE_URL + "/predict/category" @st.cache_data def get_predictions(barcode: str, threshold: Optional[float] = None): data = {"barcode": barcode} if threshold is not None: data["threshold"] = threshold r = requests.post(PREDICTION_URL, json=data) r.raise_for_status() return r.json()["neural"] def display_predictions( barcode: str, threshold: Optional[float] = None, ): debug = None response = get_predictions(barcode, threshold) response = copy.deepcopy(response) if "debug" in response: if debug is None: debug = response["debug"] response.pop("debug") st.write(pd.DataFrame(response["predictions"])) if debug is not None: st.markdown("**Debug information**") st.write(debug) st.sidebar.title("Category Prediction Demo") query_params = st.experimental_get_query_params() default_barcode = query_params["barcode"][0] if "barcode" in query_params else "" barcode = st.sidebar.text_input("Product barcode", default_barcode) threshold = st.sidebar.number_input("Threshold", format="%f", value=0.5) or None if barcode: barcode = barcode.strip() display_predictions( barcode=barcode, threshold=threshold, )