import streamlit as st from shared.hf_helpers import build_pipeline from retailgpt_evaluator.leaderboard import build_leaderboard import yaml, pandas as pd, os from pathlib import Path def main(): # Safely set page config (won’t error inside streamlit_hub.py) try: st.set_page_config(page_title="RetailGPT Evaluator", page_icon="πŸ›οΈ", layout="wide") except st.errors.StreamlitAPIException: pass st.title("πŸ›οΈ RetailGPT Evaluator β€” AxionX Digital") # Load config safely config_path = Path(__file__).resolve().parent / "config.yaml" with open(config_path) as f: cfg = yaml.safe_load(f) # Show leaderboard if exists leaderboard_df = None results_path = Path("models/retail_eval_results.json") if results_path.exists(): try: leaderboard_df = build_leaderboard(results_path) st.subheader("πŸ“Š Model Leaderboard") st.dataframe(leaderboard_df, use_container_width=True) st.markdown("#### πŸ“ˆ Evaluation Metrics") metric_options = leaderboard_df["model"].tolist() selected = st.selectbox("Inspect metrics for:", metric_options) selected_row = leaderboard_df[leaderboard_df["model"] == selected].iloc[0] cols = st.columns(4) cols[0].metric("ROUGE-L", f"{selected_row['rougeL']:.3f}") cols[1].metric("BLEU", f"{selected_row['bleu']:.3f}") cols[2].metric("Factuality", f"{selected_row['factuality']:.3f}") cols[3].metric("Score (avg)", f"{selected_row['score']:.3f}") st.bar_chart( leaderboard_df.set_index("model")[["rougeL", "bleu", "factuality", "score"]] ) except Exception as exc: # pragma: no cover - defensive UI fallback st.error(f"Unable to load evaluation results: {exc}") else: st.warning("Run `evaluate.py` first to generate metrics.") # Model chat interface st.markdown("---") model_name = st.selectbox("Choose a model to chat with:", cfg["models"]) pipe = build_pipeline(model_name) query = st.text_area("Customer query:", "Which is the best country for retail?.") if st.button("Ask Model"): result = pipe(query, max_new_tokens=cfg["demo"]["max_new_tokens"]) st.markdown("### 🧠 Model Response") st.write(result[0]["generated_text"]) # Ensure it's import-safe if __name__ == "__main__": main()