File size: 6,272 Bytes
d4f1687
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
"""
Test script to validate the verification functionality without requiring actual Qdrant data.
This will test the validation logic and report generation components.
"""
import sys
import os
sys.path.insert(0, os.path.join(os.path.dirname(__file__)))

from verify_retrieval.validators import (
    validate_metadata_consistency,
    validate_retrieved_chunks,
    validate_similarity_scores,
    validate_metadata_accuracy
)
from verify_retrieval.reporters import generate_verification_report
from verify_retrieval.models import MetadataRecord, RetrievedContentChunk, QueryRequest, VerificationResult


def test_validation_functions():
    """Test the validation functions with sample data."""
    print("Testing validation functions...")

    # Test data simulating Qdrant results
    sample_results = [
        {
            'id': 'test_id_1',
            'content': 'This is a sample content chunk about transformer architecture.',
            'similarity_score': 0.85,
            'metadata': {
                'url': 'https://example.com/transformers',
                'title': 'Transformer Models',
                'chunk_index': 1,
                'total_chunks': 3
            },
            'payload': {
                'url': 'https://example.com/transformers',
                'title': 'Transformer Models',
                'chunk_index': 1,
                'total_chunks': 3
            }
        },
        {
            'id': 'test_id_2',
            'content': 'Another content chunk about neural networks.',
            'similarity_score': 0.72,
            'metadata': {
                'url': 'https://example.com/neural-networks',
                'title': 'Neural Networks',
                'chunk_index': 2,
                'total_chunks': 3
            },
            'payload': {
                'url': 'https://example.com/neural-networks',
                'title': 'Neural Networks',
                'chunk_index': 2,
                'total_chunks': 3
            }
        },
        {
            'id': 'test_id_3',
            'content': 'Content about semantic search techniques.',
            'similarity_score': 0.65,
            'metadata': {
                'url': 'https://example.com/semantic-search',
                'title': 'Semantic Search',
                'chunk_index': 3,
                'total_chunks': 3
            },
            'payload': {
                'url': 'https://example.com/semantic-search',
                'title': 'Semantic Search',
                'chunk_index': 3,
                'total_chunks': 3
            }
        }
    ]

    # Test metadata consistency validation
    metadata_validation = validate_metadata_consistency(sample_results)
    print(f"Metadata validation: {metadata_validation}")

    # Test retrieved chunks validation
    chunk_validation = validate_retrieved_chunks("transformer architecture", sample_results)
    print(f"Chunk validation: {chunk_validation}")

    # Test similarity scores validation
    similarity_validation = validate_similarity_scores(sample_results, min_threshold=0.7)
    print(f"Similarity validation: {similarity_validation}")

    # Test metadata accuracy
    metadata_accuracy = validate_metadata_accuracy(sample_results)
    print(f"Metadata accuracy: {metadata_accuracy}%")

    # Check if the validation was successful based on actual return values
    all_metadata_valid = len(metadata_validation['errors']) == 0
    chunks_have_content = chunk_validation['total_chunks'] > 0
    avg_similarity_good = similarity_validation['average_score'] > 0.7
    metadata_accuracy_good = metadata_accuracy >= 90.0  # Using 90% as a reasonable threshold

    return all([
        all_metadata_valid,
        chunks_have_content,
        avg_similarity_good,
        metadata_accuracy_good
    ])


def test_report_generation():
    """Test the report generation functionality."""
    print("\nTesting report generation...")

    sample_results = [
        {
            'id': 'test_id_1',
            'content': 'This is a sample content chunk about transformer architecture.',
            'similarity_score': 0.85,
            'metadata': {
                'url': 'https://example.com/transformers',
                'title': 'Transformer Models',
                'chunk_index': 1,
                'total_chunks': 2
            },
            'payload': {
                'url': 'https://example.com/transformers',
                'title': 'Transformer Models',
                'chunk_index': 1,
                'total_chunks': 2
            }
        },
        {
            'id': 'test_id_2',
            'content': 'Another content chunk about neural networks.',
            'similarity_score': 0.72,
            'metadata': {
                'url': 'https://example.com/neural-networks',
                'title': 'Neural Networks',
                'chunk_index': 2,
                'total_chunks': 2
            },
            'payload': {
                'url': 'https://example.com/neural-networks',
                'title': 'Neural Networks',
                'chunk_index': 2,
                'total_chunks': 2
            }
        }
    ]

    config = {
        'top_k': 5,
        'min_similarity': 0.7,
        'collection_name': 'rag_embedding'
    }

    report = generate_verification_report(
        query="transformer architecture",
        results=sample_results,
        config=config
    )

    print(f"Report generated successfully: {report['status']}")
    print(f"Metrics: {report['metrics']}")

    return report['status'] in ['SUCCESS', 'PARTIAL_SUCCESS']


def main():
    """Main test function."""
    print("Running verification system tests...\n")

    # Test validation functions
    validation_success = test_validation_functions()
    print(f"Validation functions test: {'PASSED' if validation_success else 'FAILED'}\n")

    # Test report generation
    report_success = test_report_generation()
    print(f"Report generation test: {'PASSED' if report_success else 'FAILED'}\n")

    overall_success = validation_success and report_success
    print(f"Overall test result: {'PASSED' if overall_success else 'FAILED'}")

    return overall_success


if __name__ == "__main__":
    success = main()
    sys.exit(0 if success else 1)