File size: 4,454 Bytes
6b4a7ef
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
"""
Тестовый скрипт для локальной проверки формата ответа агента
"""

import json

def test_agent_output_format(agent_response):
    """
    Проверяет формат ответа агента на соответствие требованиям Hugging Face GAIA
    
    Args:
        agent_response: Ответ агента для проверки
    
    Returns:
        dict: Результаты проверки
    """
    results = {
        "is_valid": False,
        "format_type": None,
        "extracted_answer": None,
        "issues": []
    }
    
    # Проверка на пустой ответ
    if not agent_response:
        results["issues"].append("Ответ пустой")
        return results
    
    # Проверка на JSON формат
    try:
        json_obj = json.loads(agent_response)
        results["format_type"] = "JSON"
        
        # Проверка наличия ключа final_answer
        if "final_answer" in json_obj:
            final_answer = json_obj["final_answer"]
            results["extracted_answer"] = final_answer
            
            # Проверка на пустой final_answer
            if not final_answer:
                results["issues"].append("Ключ final_answer содержит пустое значение")
            else:
                results["is_valid"] = True
        else:
            results["issues"].append("JSON не содержит ключ 'final_answer'")
            
    except json.JSONDecodeError:
        # Если не JSON, проверяем как plain string
        results["format_type"] = "Plain String"
        results["extracted_answer"] = agent_response
        
        # Проверка на префиксы, которые могут помешать exact match
        prefixes = ["Answer:", "Response:", "A:", "The answer is:", "Final answer:"]
        for prefix in prefixes:
            if agent_response.startswith(prefix):
                results["issues"].append(f"Ответ содержит префикс '{prefix}', который может помешать exact match")
        
        # Если нет проблем с префиксами, считаем plain string валидным
        if not results["issues"]:
            results["is_valid"] = True
    
    return results

def main():
    """
    Демонстрирует проверку различных форматов ответа
    """
    # Примеры ответов для тестирования
    test_responses = [
        # JSON с final_answer (правильный формат)
        '{"final_answer": "Paris"}',
        
        # Plain string (может работать, но не рекомендуется)
        "Paris",
        
        # JSON без final_answer (неправильный формат)
        '{"answer": "Paris", "confidence": 0.95}',
        
        # Plain string с префиксом (неправильный формат)
        "Answer: Paris",
        
        # Пустой ответ
        "",
        
        # JSON с пустым final_answer
        '{"final_answer": ""}'
    ]
    
    print("=== ПРОВЕРКА ФОРМАТОВ ОТВЕТА ДЛЯ HUGGING FACE GAIA ===\n")
    
    for i, response in enumerate(test_responses):
        print(f"Тест #{i+1}: {response}")
        results = test_agent_output_format(response)
        
        print(f"  Формат: {results['format_type']}")
        print(f"  Извлеченный ответ: {results['extracted_answer']}")
        print(f"  Валидный: {'✓' if results['is_valid'] else '✗'}")
        
        if results["issues"]:
            print("  Проблемы:")
            for issue in results["issues"]:
                print(f"    - {issue}")
        else:
            print("  Проблемы: нет")
        
        print()
    
    print("=== РЕКОМЕНДАЦИИ ===")
    print("1. Используйте формат JSON с ключом 'final_answer'")
    print("2. Убедитесь, что значение 'final_answer' не пустое")
    print("3. Избегайте префиксов в ответе")
    print("4. Проверьте, что ответ точно соответствует ожидаемому (exact match)")

if __name__ == "__main__":
    main()