Spaces:
Sleeping
Sleeping
| import json | |
| from pathlib import Path | |
| import pandas as pd | |
| import plotly.graph_objects as go | |
| import streamlit as st | |
| from datasets import load_dataset | |
| DATASET_ID = "hoololi/llm-calculations" | |
| LOCAL_PARQUET = Path("llm_calculations.parquet") | |
| MODEL_INFO_PATH = Path("model_info_snapshot.json") | |
| MODE_ORDER = ["raw", "prompted", "tool"] | |
| MODE_COLORS = {"raw": "#6EA8FE", "prompted": "#FFB86B", "tool": "#69DB7C"} | |
| st.set_page_config(page_title="LLM Calculations Explorer", page_icon="🧮", layout="wide") | |
| def load_data() -> pd.DataFrame: | |
| if LOCAL_PARQUET.exists(): | |
| df = pd.read_parquet(LOCAL_PARQUET) | |
| else: | |
| ds = load_dataset(DATASET_ID, split="train") | |
| df = ds.to_pandas() | |
| if "operation" not in df.columns and "question" in df.columns: | |
| df["operation"] = df["question"] | |
| if "cost" in df.columns: | |
| df["cost"] = pd.to_numeric(df["cost"], errors="coerce") | |
| if "mode" in df.columns: | |
| df["mode"] = pd.Categorical(df["mode"], categories=MODE_ORDER, ordered=True) | |
| return df | |
| def load_model_info() -> dict: | |
| if not MODEL_INFO_PATH.exists(): | |
| return {} | |
| return json.loads(MODEL_INFO_PATH.read_text(encoding="utf-8")) | |
| def selected_models(model_a: str, model_b: str) -> list[str]: | |
| models = [model_a] | |
| if model_b and model_b != model_a: | |
| models.append(model_b) | |
| return models | |
| def summarize(df: pd.DataFrame, model_order: list[str]) -> pd.DataFrame: | |
| if df.empty: | |
| return pd.DataFrame() | |
| summary = ( | |
| df.groupby(["model", "mode"], observed=False) | |
| .agg( | |
| rows=("mode", "size"), | |
| accuracy_pct=("final_result_correct", lambda s: s.mean() * 100), | |
| run_success_pct=("run_success", lambda s: s.mean() * 100 if s.notna().any() else None), | |
| avg_total_tokens=("total_tokens", "mean"), | |
| avg_input_tokens=("input_tokens", "mean"), | |
| avg_output_tokens=("output_tokens", "mean"), | |
| avg_cost=("cost", "mean"), | |
| total_cost=("cost", "sum"), | |
| avg_latency_seconds=("latency_seconds", "mean"), | |
| ) | |
| .reset_index() | |
| ) | |
| summary["mode"] = pd.Categorical(summary["mode"], categories=MODE_ORDER, ordered=True) | |
| summary["model"] = pd.Categorical(summary["model"], categories=model_order, ordered=True) | |
| summary = summary.sort_values(["model", "mode"]) | |
| summary["model"] = summary["model"].astype(str) | |
| summary["mode"] = summary["mode"].astype(str) | |
| return summary.round(4) | |
| def metric_chart(summary: pd.DataFrame, metric: str, yaxis_title: str, percent=False) -> go.Figure: | |
| fig = go.Figure() | |
| for mode in MODE_ORDER: | |
| part = summary[summary["mode"] == mode] | |
| fig.add_bar( | |
| x=part["model"], | |
| y=part[metric], | |
| name=mode, | |
| marker_color=MODE_COLORS[mode], | |
| hovertemplate=f"{yaxis_title}: %{{y:.4g}}<extra></extra>", | |
| ) | |
| fig.update_layout( | |
| template="plotly_dark", | |
| barmode="group", | |
| height=260, | |
| margin=dict(l=35, r=10, t=10, b=35), | |
| legend=dict(orientation="h", yanchor="top", y=0.99, xanchor="right", x=0.99), | |
| paper_bgcolor="rgba(0,0,0,0)", | |
| plot_bgcolor="rgba(255,255,255,0.035)", | |
| yaxis_title=yaxis_title, | |
| xaxis_title=None, | |
| ) | |
| fig.update_xaxes(categoryorder="array", categoryarray=summary["model"].drop_duplicates().tolist(), tickangle=0) | |
| fig.update_yaxes(gridcolor="rgba(255,255,255,0.12)") | |
| if percent: | |
| fig.update_yaxes(range=[0, 100], tickvals=[0, 20, 40, 60, 80, 100]) | |
| return fig | |
| def price_per_million(value) -> str: | |
| if value in (None, ""): | |
| return "n/a" | |
| try: | |
| return f"${float(value) * 1_000_000:.2f}/1M tokens" | |
| except (TypeError, ValueError): | |
| return str(value) | |
| def model_card(model: str, model_info: dict) -> None: | |
| info = model_info.get(model, {}) | |
| if not info: | |
| st.caption(f"No OpenRouter snapshot information available for `{model}`.") | |
| return | |
| pricing = info.get("pricing", {}) if isinstance(info.get("pricing", {}), dict) else {} | |
| architecture = info.get("architecture", {}) if isinstance(info.get("architecture", {}), dict) else {} | |
| provider = info.get("top_provider", {}) if isinstance(info.get("top_provider", {}), dict) else {} | |
| supported = info.get("supported_parameters", []) or [] | |
| description = (info.get("description") or "").strip().replace("\n", " ") | |
| if len(description) > 320: | |
| description = description[:320].rstrip() + "…" | |
| st.markdown(f"### {info.get('name') or model}") | |
| st.code(model, language=None) | |
| st.markdown( | |
| f""" | |
| - **Context length:** {info.get('context_length') or provider.get('context_length') or 'n/a'} | |
| - **Max completion tokens:** {provider.get('max_completion_tokens') or 'n/a'} | |
| - **Modality:** {architecture.get('modality') or 'n/a'} | |
| - **Tokenizer:** {architecture.get('tokenizer') or 'n/a'} | |
| - **Input price:** {price_per_million(pricing.get('prompt') or pricing.get('input'))} | |
| - **Output price:** {price_per_million(pricing.get('completion') or pricing.get('output'))} | |
| - **Supported parameters:** {', '.join(supported[:8]) if supported else 'n/a'}{'…' if len(supported) > 8 else ''} | |
| """ | |
| ) | |
| if description: | |
| st.caption(description) | |
| df = load_data() | |
| model_info = load_model_info() | |
| models = sorted(df["model"].dropna().unique().tolist()) | |
| operation_categories = sorted(df["operation_category"].dropna().unique().tolist()) if "operation_category" in df.columns else [] | |
| st.title("🧮 LLM Calculations Explorer") | |
| st.markdown("Simple explorer for the `hoololi/llm-calculations` dataset. Compare raw, prompted, and tool modes.") | |
| with st.container(border=True): | |
| c1, c2, c3, c4 = st.columns([1.2, 1.2, 1.4, 1]) | |
| with c1: | |
| model_a = st.selectbox("Model A", models, index=0) | |
| with c2: | |
| model_b = st.selectbox("Model B optional", [""] + models, index=0) | |
| with c3: | |
| selected_categories = st.multiselect( | |
| "Operation categories", | |
| operation_categories, | |
| default=operation_categories, | |
| ) | |
| with c4: | |
| run_error_policy = st.selectbox( | |
| "Run errors", | |
| ["Count as failures", "Exclude from metrics"], | |
| index=0, | |
| ) | |
| chosen = selected_models(model_a, model_b) | |
| view = df[df["model"].isin(chosen)].copy() | |
| if selected_categories and "operation_category" in view.columns: | |
| view = view[view["operation_category"].isin(selected_categories)] | |
| if run_error_policy == "Exclude from metrics" and "run_success" in view.columns: | |
| view = view[view["run_success"] == True] | |
| summary = summarize(view, chosen) | |
| st.subheader("Metrics summary") | |
| st.dataframe(summary, width="stretch", hide_index=True) | |
| r1c1, r1c2 = st.columns(2) | |
| with r1c1: | |
| st.markdown("**Accuracy**") | |
| st.plotly_chart(metric_chart(summary, "accuracy_pct", "Accuracy (%)", True), width="stretch") | |
| with r1c2: | |
| st.markdown("**Tokens**") | |
| st.plotly_chart(metric_chart(summary, "avg_total_tokens", "Average total tokens"), width="stretch") | |
| r2c1, r2c2 = st.columns(2) | |
| with r2c1: | |
| st.markdown("**Cost**") | |
| st.plotly_chart(metric_chart(summary, "avg_cost", "Average cost, USD"), width="stretch") | |
| with r2c2: | |
| st.markdown("**Latency**") | |
| st.plotly_chart(metric_chart(summary, "avg_latency_seconds", "Seconds"), width="stretch") | |
| with st.expander("Selected model details from OpenRouter snapshot", expanded=False): | |
| info_cols = st.columns(len(chosen)) | |
| for col, model in zip(info_cols, chosen): | |
| with col: | |
| model_card(model, model_info) | |
| st.divider() | |
| st.subheader("Browse dataset records") | |
| st.caption("Inspect the individual rows behind the aggregate metrics.") | |
| browse_df = view.copy() | |
| b1, b2, b3 = st.columns([1, 1, 1.4]) | |
| with b1: | |
| browse_modes = st.multiselect("Modes", MODE_ORDER, default=MODE_ORDER) | |
| with b2: | |
| correctness_filter = st.selectbox( | |
| "Final answer", | |
| ["All", "Correct only", "Incorrect only", "Run errors only", "Tool issues only"], | |
| index=0, | |
| ) | |
| with b3: | |
| search_text = st.text_input("Search operation or answer", value="") | |
| if browse_modes: | |
| browse_df = browse_df[browse_df["mode"].astype(str).isin(browse_modes)] | |
| if correctness_filter == "Correct only": | |
| browse_df = browse_df[browse_df["final_result_correct"] == True] | |
| elif correctness_filter == "Incorrect only": | |
| browse_df = browse_df[browse_df["final_result_correct"] == False] | |
| elif correctness_filter == "Run errors only": | |
| browse_df = browse_df[browse_df["run_success"] == False] | |
| elif correctness_filter == "Tool issues only": | |
| browse_df = browse_df[ | |
| (browse_df["mode"].astype(str) == "tool") | |
| & ( | |
| (browse_df.get("tool_error_type") != "none") | |
| | (browse_df.get("tool_result_correct") == False) | |
| | (browse_df.get("tool_expression_scope").isin(["partial_expression", "unrelated_expression", "unknown"])) | |
| ) | |
| ] | |
| if search_text.strip(): | |
| needle = search_text.strip().lower() | |
| browse_df = browse_df[ | |
| browse_df["operation"].fillna("").str.lower().str.contains(needle, regex=False) | |
| | browse_df["answer_text"].fillna("").str.lower().str.contains(needle, regex=False) | |
| ] | |
| browse_df = browse_df.sort_values(["operation_id", "model", "mode"]) | |
| display_cols = [ | |
| "operation_id", | |
| "operation_category", | |
| "model", | |
| "mode", | |
| "operation", | |
| "correct_result_str", | |
| "extracted_answer_str", | |
| "final_result_correct", | |
| "run_success", | |
| "tool_expression_scope", | |
| "tool_error_type", | |
| ] | |
| display_cols = [col for col in display_cols if col in browse_df.columns] | |
| st.dataframe(browse_df[display_cols], width="stretch", hide_index=True, height=260) | |
| if not browse_df.empty: | |
| browse_df = browse_df.reset_index(drop=True) | |
| row_labels = browse_df.apply( | |
| lambda r: f"{r['operation_id']} | {r['model']} | {r['mode']} | final_correct={r['final_result_correct']}", | |
| axis=1, | |
| ).tolist() | |
| selected_label = st.selectbox("Record details", row_labels, index=0) | |
| selected_row = browse_df.iloc[row_labels.index(selected_label)] | |
| d1, d2 = st.columns([1, 1]) | |
| with d1: | |
| st.markdown("#### Operation") | |
| st.write(selected_row.get("operation")) | |
| st.caption(f"Category: {selected_row.get('operation_category')}") | |
| st.markdown("#### Expected / extracted") | |
| st.json( | |
| { | |
| "correct_result": selected_row.get("correct_result_str", selected_row.get("correct_result")), | |
| "extracted_answer": selected_row.get("extracted_answer_str", selected_row.get("extracted_answer")), | |
| "final_result_correct": bool(selected_row.get("final_result_correct")), | |
| "extraction_error_type": selected_row.get("extraction_error_type"), | |
| "answer_empty": bool(selected_row.get("answer_empty")), | |
| } | |
| ) | |
| with d2: | |
| st.markdown("#### Diagnostics") | |
| st.json( | |
| { | |
| "run_success": bool(selected_row.get("run_success")), | |
| "run_error": selected_row.get("run_error"), | |
| "tool_called": selected_row.get("tool_called"), | |
| "tool_expression_scope": selected_row.get("tool_expression_scope"), | |
| "tool_error_type": selected_row.get("tool_error_type"), | |
| "tool_result_correct": selected_row.get("tool_result_correct"), | |
| } | |
| ) | |
| st.markdown("#### Model answer") | |
| st.code(selected_row.get("answer_text") or "", language=None) | |
| if str(selected_row.get("mode")) == "tool": | |
| st.markdown("#### Tool details") | |
| st.json( | |
| { | |
| "tool_expression": selected_row.get("tool_expression"), | |
| "tool_result": selected_row.get("tool_result_str", selected_row.get("tool_result")), | |
| "tool_error": selected_row.get("tool_error"), | |
| "tool_calls": selected_row.get("tool_calls"), | |
| } | |
| ) | |
| else: | |
| st.info("No records match the current filters.") | |