Spaces:
Build error
Build error
Update app.py
Browse files
app.py
CHANGED
|
@@ -4,7 +4,6 @@ import matplotlib.pyplot as plt
|
|
| 4 |
import io
|
| 5 |
from PIL import Image
|
| 6 |
|
| 7 |
-
# Оценки от 1 до 5
|
| 8 |
metrics = {
|
| 9 |
"Классификация обращений": {
|
| 10 |
"ChatGPT": {"Точность": 5, "Интерпретируемость": 4, "Стабильность": 4, "Время отклика": 3, "Применимость": 4},
|
|
@@ -53,7 +52,7 @@ def update(task, selected_criteria):
|
|
| 53 |
x = np.arange(len(models))
|
| 54 |
width = 0.8 / len(criteria)
|
| 55 |
|
| 56 |
-
# График 1
|
| 57 |
fig1, ax1 = plt.subplots(figsize=(5, 3))
|
| 58 |
for i, crit in enumerate(criteria):
|
| 59 |
values = [metrics[task][m][crit] for m in models]
|
|
@@ -67,20 +66,24 @@ def update(task, selected_criteria):
|
|
| 67 |
ax1.set_ylim(0, 5.5)
|
| 68 |
ax1.set_ylabel("Оценка (1–5)")
|
| 69 |
ax1.set_title(f"Сравнение моделей по критериям\nЗадача: {task}")
|
| 70 |
-
ax1.legend(fontsize=7, loc='upper right')
|
| 71 |
ax1.grid(axis='y', linestyle='--', alpha=0.3)
|
|
|
|
|
|
|
| 72 |
fig1.patch.set_facecolor('#1e1e1e')
|
| 73 |
ax1.set_facecolor('#1e1e1e')
|
| 74 |
ax1.tick_params(colors='white')
|
| 75 |
ax1.yaxis.label.set_color('white')
|
| 76 |
ax1.xaxis.label.set_color('white')
|
| 77 |
ax1.title.set_color('white')
|
|
|
|
|
|
|
|
|
|
| 78 |
ax1.legend().get_frame().set_facecolor('#2e2e2e')
|
| 79 |
ax1.legend().get_frame().set_edgecolor('#444')
|
| 80 |
ax1.xaxis.labelpad = 10
|
| 81 |
-
fig1.subplots_adjust(bottom=0.
|
| 82 |
|
| 83 |
-
# График 2
|
| 84 |
avg_scores = []
|
| 85 |
for model in models:
|
| 86 |
vals = metrics[task][model]
|
|
@@ -104,16 +107,38 @@ def update(task, selected_criteria):
|
|
| 104 |
ax2.xaxis.label.set_color('white')
|
| 105 |
ax2.title.set_color('white')
|
| 106 |
ax2.xaxis.labelpad = 10
|
| 107 |
-
fig2.subplots_adjust(bottom=0.
|
| 108 |
|
| 109 |
-
# Лидер
|
| 110 |
sums = {model: sum(metrics[task][model][crit] for crit in criteria) for model in models}
|
| 111 |
leader = max(sums, key=sums.get)
|
| 112 |
-
result = f"📌 **Модель `{leader}` лидирует** по выбранным критериям в задаче **{task}**."
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 113 |
|
| 114 |
-
return cards[0], cards[1], cards[2], fig_to_image(fig1), fig_to_image(fig2), result
|
| 115 |
|
| 116 |
-
# CSS
|
| 117 |
css = """
|
| 118 |
.gradio-container { font-family: Arial, sans-serif; background-color: #181818; color: white; }
|
| 119 |
.card.dark-card { background: #2e2e2e; border-radius: 8px; padding: 10px; margin: 10px; }
|
|
|
|
| 4 |
import io
|
| 5 |
from PIL import Image
|
| 6 |
|
|
|
|
| 7 |
metrics = {
|
| 8 |
"Классификация обращений": {
|
| 9 |
"ChatGPT": {"Точность": 5, "Интерпретируемость": 4, "Стабильность": 4, "Время отклика": 3, "Применимость": 4},
|
|
|
|
| 52 |
x = np.arange(len(models))
|
| 53 |
width = 0.8 / len(criteria)
|
| 54 |
|
| 55 |
+
# График 1
|
| 56 |
fig1, ax1 = plt.subplots(figsize=(5, 3))
|
| 57 |
for i, crit in enumerate(criteria):
|
| 58 |
values = [metrics[task][m][crit] for m in models]
|
|
|
|
| 66 |
ax1.set_ylim(0, 5.5)
|
| 67 |
ax1.set_ylabel("Оценка (1–5)")
|
| 68 |
ax1.set_title(f"Сравнение моделей по критериям\nЗадача: {task}")
|
|
|
|
| 69 |
ax1.grid(axis='y', linestyle='--', alpha=0.3)
|
| 70 |
+
|
| 71 |
+
# Цвета и стили
|
| 72 |
fig1.patch.set_facecolor('#1e1e1e')
|
| 73 |
ax1.set_facecolor('#1e1e1e')
|
| 74 |
ax1.tick_params(colors='white')
|
| 75 |
ax1.yaxis.label.set_color('white')
|
| 76 |
ax1.xaxis.label.set_color('white')
|
| 77 |
ax1.title.set_color('white')
|
| 78 |
+
|
| 79 |
+
# Легенда — ВНЕ графика
|
| 80 |
+
ax1.legend(fontsize=8, loc='upper center', bbox_to_anchor=(0.5, 1.25), ncol=3, frameon=True)
|
| 81 |
ax1.legend().get_frame().set_facecolor('#2e2e2e')
|
| 82 |
ax1.legend().get_frame().set_edgecolor('#444')
|
| 83 |
ax1.xaxis.labelpad = 10
|
| 84 |
+
fig1.subplots_adjust(top=0.75, bottom=0.25)
|
| 85 |
|
| 86 |
+
# График 2
|
| 87 |
avg_scores = []
|
| 88 |
for model in models:
|
| 89 |
vals = metrics[task][model]
|
|
|
|
| 107 |
ax2.xaxis.label.set_color('white')
|
| 108 |
ax2.title.set_color('white')
|
| 109 |
ax2.xaxis.labelpad = 10
|
| 110 |
+
fig2.subplots_adjust(bottom=0.25)
|
| 111 |
|
| 112 |
+
# Лидер в текущей задаче
|
| 113 |
sums = {model: sum(metrics[task][model][crit] for crit in criteria) for model in models}
|
| 114 |
leader = max(sums, key=sums.get)
|
| 115 |
+
result = f"### 📌 <span style='font-size: 18px;'>**Модель `{leader}` лидирует** по выбранным критериям в задаче **{task}**.</span>"
|
| 116 |
+
|
| 117 |
+
# Общий анализ по всем задачам
|
| 118 |
+
model_scores = {model: [] for model in models}
|
| 119 |
+
for tsk in metrics:
|
| 120 |
+
for model in models:
|
| 121 |
+
vals = metrics[tsk][model]
|
| 122 |
+
selected = selected_criteria if selected_criteria else vals.keys()
|
| 123 |
+
model_scores[model].extend([vals[c] for c in selected])
|
| 124 |
+
|
| 125 |
+
avg_all = {model: round(np.mean(scores), 2) for model, scores in model_scores.items()}
|
| 126 |
+
overall_leader = max(avg_all, key=avg_all.get)
|
| 127 |
+
|
| 128 |
+
analysis_text = f"""
|
| 129 |
+
<br><br>
|
| 130 |
+
### 🔎 <span style='font-size: 17px;'>**Общий анализ моделей:**</span>
|
| 131 |
+
|
| 132 |
+
- ChatGPT — средняя оценка: **{avg_all["ChatGPT"]}/5**
|
| 133 |
+
- GigaChat — средняя оценка: **{avg_all["GigaChat"]}/5**
|
| 134 |
+
- DeepSeek — средняя оценка: **{avg_all["DeepSeek"]}/5**
|
| 135 |
+
|
| 136 |
+
📊 <span style='font-size: 18px;'>**Лидирует модель `{overall_leader}`** по суммарным показателям в выбранных задачах.</span>
|
| 137 |
+
"""
|
| 138 |
|
| 139 |
+
return cards[0], cards[1], cards[2], fig_to_image(fig1), fig_to_image(fig2), result + analysis_text
|
| 140 |
|
| 141 |
+
# CSS
|
| 142 |
css = """
|
| 143 |
.gradio-container { font-family: Arial, sans-serif; background-color: #181818; color: white; }
|
| 144 |
.card.dark-card { background: #2e2e2e; border-radius: 8px; padding: 10px; margin: 10px; }
|