yoshizen commited on
Commit
1dbf488
·
verified ·
1 Parent(s): 63cf5a3

Upload validate_format.py

Browse files
Files changed (1) hide show
  1. validate_format.py +115 -0
validate_format.py ADDED
@@ -0,0 +1,115 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ Тестовый скрипт для локальной проверки формата ответа агента
3
+ """
4
+
5
+ import json
6
+
7
+ def test_agent_output_format(agent_response):
8
+ """
9
+ Проверяет формат ответа агента на соответствие требованиям Hugging Face GAIA
10
+
11
+ Args:
12
+ agent_response: Ответ агента для проверки
13
+
14
+ Returns:
15
+ dict: Результаты проверки
16
+ """
17
+ results = {
18
+ "is_valid": False,
19
+ "format_type": None,
20
+ "extracted_answer": None,
21
+ "issues": []
22
+ }
23
+
24
+ # Проверка на пустой ответ
25
+ if not agent_response:
26
+ results["issues"].append("Ответ пустой")
27
+ return results
28
+
29
+ # Проверка на JSON формат
30
+ try:
31
+ json_obj = json.loads(agent_response)
32
+ results["format_type"] = "JSON"
33
+
34
+ # Проверка наличия ключа final_answer
35
+ if "final_answer" in json_obj:
36
+ final_answer = json_obj["final_answer"]
37
+ results["extracted_answer"] = final_answer
38
+
39
+ # Проверка на пустой final_answer
40
+ if not final_answer:
41
+ results["issues"].append("Ключ final_answer содержит пустое значение")
42
+ else:
43
+ results["is_valid"] = True
44
+ else:
45
+ results["issues"].append("JSON не содержит ключ 'final_answer'")
46
+
47
+ except json.JSONDecodeError:
48
+ # Если не JSON, проверяем как plain string
49
+ results["format_type"] = "Plain String"
50
+ results["extracted_answer"] = agent_response
51
+
52
+ # Проверка на префиксы, которые могут помешать exact match
53
+ prefixes = ["Answer:", "Response:", "A:", "The answer is:", "Final answer:"]
54
+ for prefix in prefixes:
55
+ if agent_response.startswith(prefix):
56
+ results["issues"].append(f"Ответ содержит префикс '{prefix}', который может помешать exact match")
57
+
58
+ # Если нет проблем с префиксами, считаем plain string валидным
59
+ if not results["issues"]:
60
+ results["is_valid"] = True
61
+
62
+ return results
63
+
64
+ def main():
65
+ """
66
+ Демонстрирует проверку различных форматов ответа
67
+ """
68
+ # Примеры ответов для тестирования
69
+ test_responses = [
70
+ # JSON с final_answer (правильный формат)
71
+ '{"final_answer": "Paris"}',
72
+
73
+ # Plain string (может работать, но не рекомендуется)
74
+ "Paris",
75
+
76
+ # JSON без final_answer (неправильный формат)
77
+ '{"answer": "Paris", "confidence": 0.95}',
78
+
79
+ # Plain string с префиксом (неправильный формат)
80
+ "Answer: Paris",
81
+
82
+ # Пустой ответ
83
+ "",
84
+
85
+ # JSON с пустым final_answer
86
+ '{"final_answer": ""}'
87
+ ]
88
+
89
+ print("=== ПРОВЕРКА ФОРМАТОВ ОТВЕТА ДЛЯ HUGGING FACE GAIA ===\n")
90
+
91
+ for i, response in enumerate(test_responses):
92
+ print(f"Тест #{i+1}: {response}")
93
+ results = test_agent_output_format(response)
94
+
95
+ print(f" Формат: {results['format_type']}")
96
+ print(f" Извлеченный ответ: {results['extracted_answer']}")
97
+ print(f" Валидный: {'✓' if results['is_valid'] else '✗'}")
98
+
99
+ if results["issues"]:
100
+ print(" Проблемы:")
101
+ for issue in results["issues"]:
102
+ print(f" - {issue}")
103
+ else:
104
+ print(" Проблемы: нет")
105
+
106
+ print()
107
+
108
+ print("=== РЕКОМЕНДАЦИИ ===")
109
+ print("1. Используйте формат JSON с ключом 'final_answer'")
110
+ print("2. Убедитесь, что значение 'final_answer' не пустое")
111
+ print("3. Избегайте префиксов в ответе")
112
+ print("4. Проверьте, что ответ точно соответствует ожидаемому (exact match)")
113
+
114
+ if __name__ == "__main__":
115
+ main()