alibayram's picture
Implement robust data loading with retry logic, enhance error handling in Gradio app, and improve user experience with fallback data for leaderboard and responses. Update configuration for request timeouts and retries.
3ce2f84
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)}"