File size: 4,140 Bytes
1c73b10
 
 
3ce2f84
1c73b10
 
3ce2f84
 
1c73b10
 
 
 
 
3ce2f84
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1c73b10
 
 
3ce2f84
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1c73b10
 
 
3ce2f84
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1c73b10
 
 
 
 
 
 
 
 
 
3ce2f84
 
 
 
 
 
 
 
 
 
 
 
 
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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
from typing import Optional, Dict
import pandas as pd
import matplotlib.pyplot as plt
import logging
from data_manager import data_manager

logger = logging.getLogger(__name__)

def filter_leaderboard(
    family: Optional[str] = None,
    quantization_level: Optional[str] = None
) -> pd.DataFrame:
    """Filter leaderboard data based on criteria."""
    try:
        df = data_manager.leaderboard_data.copy()
        
        if df.empty:
            logger.warning("Leaderboard data is empty, returning empty DataFrame")
            return pd.DataFrame()
        
        if family:
            df = df[df["family"] == family]
        if quantization_level:
            df = df[df["quantization_level"] == quantization_level]
        
        return df.sort_values("score", ascending=False)
    except Exception as e:
        logger.error(f"Error filtering leaderboard: {e}")
        return pd.DataFrame()

def search_responses(query: str, model: str) -> pd.DataFrame:
    """Search model responses based on query."""
    try:
        if not query or not model:
            return pd.DataFrame()
        
        df = data_manager.responses_data
        
        if df.empty:
            logger.warning("Responses data is empty, returning empty DataFrame")
            return pd.DataFrame()
        
        # Check if model column exists
        model_column = f"{model}_cevap"
        if model_column not in df.columns:
            logger.warning(f"Model column '{model_column}' not found in responses data")
            return pd.DataFrame({"error": [f"Model '{model}' responses not found"]})
        
        filtered = df[
            df["bolum"].str.contains(query, case=False, na=False)
        ]
        
        selected_columns = ["bolum", "soru", "cevap", model_column]
        return filtered[selected_columns].dropna()
    except Exception as e:
        logger.error(f"Error searching responses: {e}")
        return pd.DataFrame({"error": [f"Error: {str(e)}"]})

def plot_section_results() -> plt.Figure:
    """Generate section results plot."""
    try:
        df = data_manager.section_results_data
        
        if df.empty:
            logger.warning("Section results data is empty, returning empty plot")
            fig, ax = plt.subplots(figsize=(12, 6))
            ax.text(0.5, 0.5, "No data available", ha='center', va='center', fontsize=14)
            ax.set_title("Section-Wise Performance", pad=20)
            plt.tight_layout()
            return fig
        
        fig, ax = plt.subplots(figsize=(12, 6))
        avg_scores = df.mean(numeric_only=True)
        
        bars = avg_scores.plot(kind="bar", ax=ax)
        
        # Customize plot
        ax.set_title("Average Section-Wise Performance", pad=20)
        ax.set_ylabel("Accuracy (%)")
        ax.set_xlabel("Sections")
        plt.xticks(rotation=45, ha='right')
        plt.tight_layout()
        
        # Add value labels
        for i, v in enumerate(avg_scores):
            ax.text(i, v, f'{v:.1f}%', ha='center', va='bottom')
        
        return fig
    except Exception as e:
        logger.error(f"Error plotting section results: {e}")
        fig, ax = plt.subplots(figsize=(12, 6))
        ax.text(0.5, 0.5, f"Error generating plot: {str(e)}", ha='center', va='center', fontsize=12)
        plt.tight_layout()
        return fig

def validate_model_submission(
    model_name: str,
    base_model: str,
    revision: str,
    precision: str,
    weight_type: str,
    model_type: str
) -> tuple[bool, str]:
    """Validate model submission parameters."""
    try:
        if not all([model_name, base_model]):
            return False, "Model name and base model are required."
        
        # Check if leaderboard data is available
        if not data_manager.leaderboard_data.empty:
            if model_name in data_manager.leaderboard_data["model"].values:
                return False, "Model name already exists."
        
        return True, "Validation successful"
    except Exception as e:
        logger.error(f"Error validating model submission: {e}")
        return False, f"Validation error: {str(e)}"