MCPcopy Create free account
hub / github.com/nlweb-ai/NLWeb / EndToEndTestRunner

Class EndToEndTestRunner

AskAgent/python/testing/end_to_end_tests.py:54–239  ·  view source on GitHub ↗

Test runner for end-to-end query tests.

Source from the content-addressed store, hash-verified

52
53
54class EndToEndTestRunner(BaseTestRunner):
55 """Test runner for end-to-end query tests."""
56
57 def __init__(self):
58 """Initialize end-to-end test runner."""
59 super().__init__(TestType.END_TO_END)
60
61 def get_config_defaults(self) -> dict[str, Any]:
62 """Get default values from config files."""
63 defaults = {
64 'site': 'all',
65 'model': 'gpt-4o-mini',
66 'generate_mode': 'list',
67 'retrieval_backend': CONFIG.preferred_retrieval_endpoint,
68 'prev': []
69 }
70
71 # Try to get preferred model from LLM config
72 if hasattr(CONFIG, 'preferred_llm_provider') and CONFIG.preferred_llm_provider:
73 llm_provider = CONFIG.get_llm_provider()
74 if llm_provider and llm_provider.models:
75 # Use the 'low' model as default for testing
76 defaults['model'] = llm_provider.models.low or defaults['model']
77
78 return defaults
79
80 def validate_test_case(self, test_case: dict[str, Any]) -> tuple[bool, str | None]:
81 """Validate end-to-end test case has required fields."""
82 required_fields = ['query']
83 missing_fields = [field for field in required_fields if field not in test_case or not test_case[field]]
84
85 if missing_fields:
86 return False, f"Missing required fields: {missing_fields}"
87
88 # Validate prev field format
89 if 'prev' in test_case and test_case['prev'] and not isinstance(test_case['prev'], list):
90 # Try to parse string representation
91 prev_str = test_case['prev']
92 if isinstance(prev_str, str):
93 if prev_str == '' or prev_str.lower() == 'none':
94 test_case['prev'] = []
95 elif ',' in prev_str:
96 test_case['prev'] = [q.strip() for q in prev_str.split(',')]
97 else:
98 test_case['prev'] = [prev_str]
99 else:
100 return False, f"Invalid 'prev' format: expected list or string, got {type(prev_str)}"
101
102 return True, None
103
104 async def run_single_test(self, test_case: dict[str, Any]) -> EndToEndTestResult:
105 """Run a single end-to-end test."""
106 start_time = time.time()
107
108 # Get defaults and merge with test case
109 defaults = self.get_config_defaults()
110
111 # Create test case object

Callers 2

__init__Method · 0.90
mainFunction · 0.85

Calls

no outgoing calls

Tested by 2

__init__Method · 0.72
mainFunction · 0.68