82 lines
2.9 KiB
Python
82 lines
2.9 KiB
Python
#!/usr/bin/env python
|
|
"""
|
|
Integration test for code query to report workflow.
|
|
|
|
This script tests the full pipeline from a code-related query to a report.
|
|
"""
|
|
|
|
import os
|
|
import sys
|
|
import asyncio
|
|
import argparse
|
|
from datetime import datetime
|
|
|
|
# Add parent directory to path to import modules
|
|
sys.path.append(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))))
|
|
|
|
from query.query_processor import get_query_processor
|
|
from scripts.query_to_report import query_to_report
|
|
from report.report_templates import QueryType
|
|
from report.report_detail_levels import DetailLevel
|
|
|
|
|
|
async def test_code_query(query: str = "How to implement a binary search in Python?", detail_level: str = "brief"):
|
|
"""Test the code query to report workflow."""
|
|
# Process the query to verify it's detected as code
|
|
print(f"\nTesting code query detection for: {query}")
|
|
query_processor = get_query_processor()
|
|
structured_query = await query_processor.process_query(query)
|
|
|
|
# Check if query is detected as code
|
|
is_code = structured_query.get('is_code', False)
|
|
print(f"Detected as code query: {is_code}")
|
|
|
|
if not is_code:
|
|
# Force code query type
|
|
print("Manually setting to code query type for testing")
|
|
structured_query['is_code'] = True
|
|
|
|
# Generate timestamp for unique output files
|
|
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
|
|
output_file = f"test_code_query_{timestamp}.md"
|
|
|
|
# Generate report
|
|
print(f"\nGenerating {detail_level} report for code query...")
|
|
await query_to_report(
|
|
query=query,
|
|
output_file=output_file,
|
|
detail_level=detail_level,
|
|
query_type=QueryType.CODE.value,
|
|
is_code=True
|
|
)
|
|
|
|
print(f"\nReport generated and saved to: {output_file}")
|
|
|
|
# Display the start of the report
|
|
try:
|
|
with open(output_file, 'r', encoding='utf-8') as f:
|
|
content = f.read()
|
|
preview_length = min(500, len(content))
|
|
print(f"\nReport preview:\n{'-' * 40}\n{content[:preview_length]}...\n{'-' * 40}")
|
|
print(f"Total length: {len(content)} characters")
|
|
except Exception as e:
|
|
print(f"Error reading report: {e}")
|
|
|
|
return output_file
|
|
|
|
|
|
def main():
|
|
"""Parse arguments and run the test."""
|
|
parser = argparse.ArgumentParser(description='Test code query to report pipeline')
|
|
parser.add_argument('--query', '-q', type=str, default="How to implement a binary search in Python?",
|
|
help='The code-related query to test')
|
|
parser.add_argument('--detail-level', '-d', type=str, default="brief",
|
|
choices=['brief', 'standard', 'detailed', 'comprehensive'],
|
|
help='Level of detail for the report')
|
|
|
|
args = parser.parse_args()
|
|
asyncio.run(test_code_query(query=args.query, detail_level=args.detail_level))
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main() |