Spaces:
Sleeping
Sleeping
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) |