snnorty commited on
Commit
008ccba
·
verified ·
1 Parent(s): d50559d

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +51 -31
app.py CHANGED
@@ -1,4 +1,5 @@
1
  import os
 
2
  import requests
3
  import pandas as pd
4
  import gradio as gr
@@ -36,24 +37,26 @@ def solve_question(agent, question: str) -> str:
36
  raw_ans = agent.run(question)
37
  ans = str(raw_ans).strip()
38
 
39
- # Точечный фильтр от технических утечек трейса
40
- if "call_" in ans and "python_interpreter" in ans:
41
  return "0"
42
- if ans.startswith("[{'id':") or ans.startswith("{'id':"):
 
 
43
  return "0"
44
 
45
- # Если ответ многострочный, ищем наиболее содержательную строку (не пустую)
46
  if "\n" in ans:
47
  lines = [line.strip() for line in ans.split("\n") if line.strip()]
48
  if lines:
49
- ans = lines[-1] # Берём последнюю непустую строку
50
 
51
- # Аккуратная очистка от лишних кавычек и знаков препинания по краям
52
  ans = ans.strip(" .\"'`:;")
53
 
54
- # Жёстко обрезаем только явный перебор по длине
55
- if len(ans) > 80:
56
- ans = ans[:80].strip()
57
 
58
  return ans if ans else "0"
59
  except Exception as e:
@@ -92,7 +95,7 @@ def run_and_submit_all(profile: gr.OAuthProfile | None):
92
  results_log = []
93
  answers_payload = []
94
 
95
- yield "Запуск прогона задач... Соединение защищено.", pd.DataFrame(results_log)
96
 
97
  for item in questions_data:
98
  task_id = item.get("task_id")
@@ -104,29 +107,46 @@ def run_and_submit_all(profile: gr.OAuthProfile | None):
104
  answers_payload.append({"task_id": task_id, "submitted_answer": ans})
105
  results_log.append({"Task ID": task_id, "Question": q, "Submitted Answer": ans})
106
 
107
- # Обновляем табличку на лету без разрыва соединения
108
  yield f"Выполнено задач: {len(results_log)} из {len(questions_data)}...", pd.DataFrame(results_log)
109
 
110
- yield "Все задачи обработаны. Отправка пакета на сервер оценки...", pd.DataFrame(results_log)
111
-
112
- try:
113
- sub_res = requests.post(
114
- f"{DEFAULT_API_URL}/submit",
115
- json={"username": username, "agent_code": agent_code, "answers": answers_payload},
116
- timeout=180
117
- )
118
- sub_res.raise_for_status()
119
- data = sub_res.json()
120
-
121
- status = (
122
- f"Submission Successful!\n"
123
- f"User: {data.get('username')}\n"
124
- f"Overall Score: {data.get('score', 'N/A')}%\n"
125
- f"Message: {data.get('message', '')}"
126
- )
127
- yield status, pd.DataFrame(results_log)
128
- except Exception as e:
129
- yield f"Submission status: {e}", pd.DataFrame(results_log)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
130
 
131
  with gr.Blocks() as demo:
132
  gr.Markdown("# GAIA Smart Agent Runner")
 
1
  import os
2
+ import time
3
  import requests
4
  import pandas as pd
5
  import gradio as gr
 
37
  raw_ans = agent.run(question)
38
  ans = str(raw_ans).strip()
39
 
40
+ # Жесткая защита от утечек трейсов и громоздких объектов
41
+ if not ans or ans.lower() == "none":
42
  return "0"
43
+ if "call_" in ans or "python_interpreter" in ans or "Error" in ans:
44
+ return "0"
45
+ if ans.startswith("[{") or ans.startswith("{'"):
46
  return "0"
47
 
48
+ # Берём последнюю непустую строчку, если ответ многострочный
49
  if "\n" in ans:
50
  lines = [line.strip() for line in ans.split("\n") if line.strip()]
51
  if lines:
52
+ ans = lines[-1]
53
 
54
+ # Чистим кавычки и мусор по краям
55
  ans = ans.strip(" .\"'`:;")
56
 
57
+ # Строгое ограничение длины ответа для сервера оценки (не более 60 символов)
58
+ if len(ans) > 60:
59
+ ans = ans[:60].strip()
60
 
61
  return ans if ans else "0"
62
  except Exception as e:
 
95
  results_log = []
96
  answers_payload = []
97
 
98
+ yield "Запуск прогона задач... Агент начал выполнение.", pd.DataFrame(results_log)
99
 
100
  for item in questions_data:
101
  task_id = item.get("task_id")
 
107
  answers_payload.append({"task_id": task_id, "submitted_answer": ans})
108
  results_log.append({"Task ID": task_id, "Question": q, "Submitted Answer": ans})
109
 
110
+ # Обновляем таблицу в реальном времени через yield
111
  yield f"Выполнено задач: {len(results_log)} из {len(questions_data)}...", pd.DataFrame(results_log)
112
 
113
+ yield "Все задачи решены. Отправка пакета на сервер оценки (с защитой от 500 ошибки)...", pd.DataFrame(results_log)
114
+
115
+ # Попытка отправки с ретраями на случай падения бэкенда курса
116
+ sub_res = None
117
+ success = False
118
+ for attempt in range(3):
119
+ try:
120
+ sub_res = requests.post(
121
+ f"{DEFAULT_API_URL}/submit",
122
+ json={"username": username, "agent_code": agent_code, "answers": answers_payload},
123
+ timeout=180
124
+ )
125
+ if sub_res.status_code == 200:
126
+ success = True
127
+ break
128
+ else:
129
+ time.sleep(3)
130
+ except Exception:
131
+ time.sleep(3)
132
+
133
+ if success and sub_res:
134
+ try:
135
+ data = sub_res.json()
136
+ status = (
137
+ f"Submission Successful!\n"
138
+ f"User: {data.get('username')}\n"
139
+ f"Overall Score: {data.get('score', 'N/A')}%\n"
140
+ f"Message: {data.get('message', '')}"
141
+ )
142
+ yield status, pd.DataFrame(results_log)
143
+ return
144
+ except Exception:
145
+ pass
146
+
147
+ # Если даже после ретраев сервер вернул ошибку
148
+ err_text = sub_res.text if sub_res else "Connection timeout/error"
149
+ yield f"Submission status: 500 Server Error (Сервер курса перегружен). Попробуй нажать кнопку повторно через пару минут.\nDetails: {err_text}", pd.DataFrame(results_log)
150
 
151
  with gr.Blocks() as demo:
152
  gr.Markdown("# GAIA Smart Agent Runner")