File size: 2,309 Bytes
fe965ff
 
 
 
9c5b99f
fe965ff
 
9c5b99f
fe965ff
9c5b99f
fe965ff
 
 
 
 
 
9c5b99f
fe965ff
 
 
 
 
9c5b99f
 
 
fe965ff
 
 
9c5b99f
 
 
 
fe965ff
 
 
 
 
 
 
 
 
 
 
9c5b99f
 
 
 
fe965ff
 
9c5b99f
fe965ff
 
 
 
 
9c5b99f
fe965ff
 
 
 
 
9c5b99f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
import streamlit as st
from autocatalog.inference.predictor import AutoCatalogPredictor

@st.cache_resource(show_spinner=False)
def load_predictor(repo_id, device=None):
    return AutoCatalogPredictor(
        repo_id=repo_id,
        device=device,
    )

def format_percent(value):
    return f"{value * 100:.2f}%"

def render_prediction_card(task_name, task_result):
    label = task_result["label"]
    confidence = task_result["confidence"]

    st.markdown(
        f"""
        <div class="prediction-card">
            <div class="prediction-header">
                <span class="task-name">{task_name}</span>
                <span class="confidence">
                    {format_percent(confidence)}
                </span>
            </div>
            <div class="label">{label}</div>
            <div class="bar-bg">
                <div
                    class="bar-fill"
                    style="width: {confidence * 100:.2f}%"
                ></div>
            </div>
        </div>
        """,
        unsafe_allow_html=True,
    )

def render_top_predictions(prediction):
    with st.expander("View Top-3 Predictions"):
        for task, result in prediction.items():
            st.markdown(f"**{task}**")
            for item in result["top_3"]:
                st.write(
                    f"{item['label']} — "
                    f"{format_percent(item['confidence'])}"
                )

            st.divider()


def render_metrics(metrics):
    if not metrics:
        return

    overall = metrics.get("overall_metrics",{},)
    if not overall:
        return

    st.subheader("Model Evaluation")
    col1, col2, col3, col4 = st.columns(4)
    col1.metric(
        "Average Accuracy",
        format_percent(
            overall.get(
                "average_accuracy",
                0,
            )
        ),
    )
    col2.metric(
        "Weighted F1",
        format_percent(
            overall.get(
                "average_weighted_f1",
                0,
            )
        ),
    )
    col3.metric(
        "Top-3 Accuracy",
        format_percent(
            overall.get(
                "average_top3_accuracy",
                0,
            )
        ),
    )
    col4.metric(
        "Test Samples",
        f"{overall.get('samples', 0):,}",
    )