Spaces:
Sleeping
Sleeping
| import importlib.util | |
| from pathlib import Path | |
| _client_path = Path(__file__).parent.parent / "api_client.py" | |
| _spec = importlib.util.spec_from_file_location("api_client", _client_path) | |
| _module = importlib.util.module_from_spec(_spec) | |
| _spec.loader.exec_module(_module) | |
| api_predict = _module.api_predict | |
| require_api = _module.require_api | |
| import pandas as pd | |
| import streamlit as st | |
| require_api() | |
| st.title("Compare Models") | |
| st.caption("Side-by-side comparison of all trained models on CLINC150 test set.") | |
| RESULTS = { | |
| "logreg": {"accuracy": 0.8058, "macro_f1": 0.8416, "weighted_f1": 0.7985, "latency_p50_ms": 0.12}, | |
| "svm": {"accuracy": 0.8002, "macro_f1": 0.8474, "weighted_f1": 0.7795, "latency_p50_ms": 0.14}, | |
| "textcnn": {"accuracy": 0.7740, "macro_f1": 0.8244, "weighted_f1": 0.7646, "latency_p50_ms": 97.6}, | |
| "rnn": {"accuracy": 0.1818, "macro_f1": 0.0020, "weighted_f1": 0.0560, "latency_p50_ms": 124.5}, | |
| "lstm": {"accuracy": 0.7669, "macro_f1": 0.8113, "weighted_f1": 0.7555, "latency_p50_ms": 249.2}, | |
| "distilbert": {"accuracy": 0.8765, "macro_f1": 0.9019, "weighted_f1": 0.8722, "latency_p50_ms": 9.6}, | |
| } | |
| df = pd.DataFrame(RESULTS).T | |
| df.index.name = "model" | |
| st.subheader("Metrics Table") | |
| st.dataframe( | |
| df.style.format({ | |
| "accuracy": "{:.2%}", | |
| "macro_f1": "{:.2%}", | |
| "weighted_f1": "{:.2%}", | |
| "latency_p50_ms": "{:.2f} ms", | |
| }).background_gradient(subset=["accuracy", "macro_f1", "weighted_f1"], cmap="Greens"), | |
| use_container_width=True, | |
| ) | |
| st.subheader("Accuracy & F1 Comparison") | |
| chart_df = df[["accuracy", "macro_f1", "weighted_f1"]] | |
| st.bar_chart(chart_df) | |
| st.subheader("Latency Comparison") | |
| st.bar_chart(df[["latency_p50_ms"]]) | |
| st.divider() | |
| st.subheader("Side-by-Side Prediction") | |
| st.caption("Run the same input through multiple models at once.") | |
| text = st.text_input("Enter a query to compare", placeholder="e.g. cancel my hotel reservation") | |
| selected_models = st.multiselect( | |
| "Models to compare", | |
| options=["classical", "svm", "transformer"], | |
| default=["classical", "transformer"], | |
| ) | |
| if st.button("Compare", type="primary", disabled=not (text and selected_models)): | |
| cols = st.columns(len(selected_models)) | |
| for col, model_type in zip(cols, selected_models): | |
| with col: | |
| with st.spinner(f"running {model_type}..."): | |
| result = api_predict(text, model_type) | |
| st.markdown(f"**{model_type}**") | |
| st.metric("Intent", result["intent"]) | |
| st.metric("Confidence", f"{result['confidence']:.2%}") | |
| st.metric("Latency", f"{result['latency_ms']:.1f} ms") | |
| if result["is_oos"]: | |
| st.warning("flagged OOS") |