|
|
import os |
|
|
import sys |
|
|
from dotenv import load_dotenv |
|
|
from langchain_core.messages import HumanMessage |
|
|
from pathlib import Path |
|
|
|
|
|
|
|
|
sys.path.append(os.getcwd()) |
|
|
|
|
|
load_dotenv() |
|
|
|
|
|
def run_test(query: str, file_path: str = None, test_name: str = ""): |
|
|
print(f"\n{'='*80}") |
|
|
print(f"TEST: {test_name}" if test_name else f"Testing Query: {query}") |
|
|
print(f"{'='*80}") |
|
|
if file_path: |
|
|
print(f"File: {file_path}") |
|
|
|
|
|
try: |
|
|
from agents import app |
|
|
from database import create_db_and_tables |
|
|
|
|
|
|
|
|
create_db_and_tables() |
|
|
|
|
|
inputs = {"messages": [HumanMessage(content=query)]} |
|
|
if file_path: |
|
|
inputs["file_path"] = file_path |
|
|
|
|
|
result = app.invoke(inputs) |
|
|
print("\n✅ Response:") |
|
|
print(result["messages"][-1].content) |
|
|
print(f"\n{'='*80}\n") |
|
|
return True |
|
|
except Exception as e: |
|
|
print(f"\n❌ Error: {e}") |
|
|
print(f"\n{'='*80}\n") |
|
|
return False |
|
|
|
|
|
def create_test_document(): |
|
|
"""Create a test document for RAG testing.""" |
|
|
try: |
|
|
from reportlab.lib.pagesizes import letter |
|
|
from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer |
|
|
from reportlab.lib.styles import getSampleStyleSheet |
|
|
|
|
|
test_file = Path("uploads/test_policy.pdf") |
|
|
test_file.parent.mkdir(exist_ok=True) |
|
|
|
|
|
|
|
|
doc = SimpleDocTemplate(str(test_file), pagesize=letter) |
|
|
styles = getSampleStyleSheet() |
|
|
story = [] |
|
|
|
|
|
|
|
|
story.append(Paragraph("Company Policy: Remote Work Guidelines", styles['Title'])) |
|
|
story.append(Spacer(1, 12)) |
|
|
|
|
|
content = [ |
|
|
("Overview", "Our company supports flexible remote work arrangements for all employees."), |
|
|
("Eligibility", "All full-time employees are eligible for remote work. Part-time employees must have manager approval. New hires must complete 3 months probation before remote work eligibility."), |
|
|
("Equipment", "Company provides laptop and monitor for remote work. Employees receive $500 annual stipend for home office setup. VPN access is mandatory for all remote connections."), |
|
|
("Work Hours", "Core hours: 10 AM - 3 PM local time (must be available). Flexible scheduling outside core hours. Minimum 40 hours per week required for full-time employees."), |
|
|
("Communication", "Daily standup at 10 AM via video call. Slack response time: within 1 hour during core hours. Weekly team meeting on Fridays at 2 PM."), |
|
|
("Performance Evaluation", "Remote employees evaluated on deliverables, not hours. Monthly 1-on-1 with manager required. Quarterly performance reviews.") |
|
|
] |
|
|
|
|
|
for heading, text in content: |
|
|
story.append(Paragraph(f"<b>{heading}:</b>", styles['Heading2'])) |
|
|
story.append(Paragraph(text, styles['BodyText'])) |
|
|
story.append(Spacer(1, 12)) |
|
|
|
|
|
doc.build(story) |
|
|
return str(test_file.absolute()) |
|
|
|
|
|
except ImportError: |
|
|
|
|
|
print("⚠️ reportlab not available, creating markdown document instead...") |
|
|
test_content = """# Company Policy: Remote Work Guidelines |
|
|
|
|
|
## Overview |
|
|
Our company supports flexible remote work arrangements for all employees. |
|
|
|
|
|
## Eligibility |
|
|
All full-time employees are eligible for remote work. Part-time employees must have manager approval. |
|
|
New hires must complete 3 months probation before remote work eligibility. |
|
|
|
|
|
## Equipment |
|
|
Company provides laptop and monitor for remote work. Employees receive $500 annual stipend for home office setup. |
|
|
VPN access is mandatory for all remote connections. |
|
|
|
|
|
## Work Hours |
|
|
Core hours: 10 AM - 3 PM local time (must be available). Flexible scheduling outside core hours. |
|
|
Minimum 40 hours per week required for full-time employees. |
|
|
|
|
|
## Communication |
|
|
Daily standup at 10 AM via video call. Slack response time: within 1 hour during core hours. |
|
|
Weekly team meeting on Fridays at 2 PM. |
|
|
|
|
|
## Performance Evaluation |
|
|
Remote employees evaluated on deliverables, not hours. Monthly 1-on-1 with manager required. |
|
|
Quarterly performance reviews. |
|
|
""" |
|
|
|
|
|
test_file = Path("uploads/test_policy.md") |
|
|
test_file.parent.mkdir(exist_ok=True) |
|
|
test_file.write_text(test_content) |
|
|
return str(test_file.absolute()) |
|
|
|
|
|
if __name__ == "__main__": |
|
|
print("\n" + "="*80) |
|
|
print("MULTI-AGENT SYSTEM TEST SUITE") |
|
|
print("="*80) |
|
|
|
|
|
|
|
|
run_test( |
|
|
"What is the weather in Chennai today?", |
|
|
test_name="Weather Agent - Current Weather" |
|
|
) |
|
|
|
|
|
|
|
|
run_test( |
|
|
"Schedule a team meeting tomorrow at 2 PM in London if the weather is good. Meeting should be 1 hour long with participants: John, Sarah, Mike", |
|
|
test_name="Meeting Agent - Weather-based Scheduling" |
|
|
) |
|
|
|
|
|
|
|
|
run_test( |
|
|
"Show me all meetings scheduled for tomorrow", |
|
|
test_name="SQL Agent - Meeting Query" |
|
|
) |
|
|
|
|
|
|
|
|
print("\n" + "="*80) |
|
|
print("Creating test document for RAG testing...") |
|
|
print("="*80) |
|
|
test_file_path = create_test_document() |
|
|
print(f"Test document created at: {test_file_path}\n") |
|
|
|
|
|
run_test( |
|
|
"What is the remote work equipment policy?", |
|
|
file_path=test_file_path, |
|
|
test_name="Document Agent - RAG with High Confidence" |
|
|
) |
|
|
|
|
|
|
|
|
run_test( |
|
|
"What are the latest trends in AI for 2026?", |
|
|
file_path=test_file_path, |
|
|
test_name="Document Agent - Web Search Fallback (query not in document)" |
|
|
) |
|
|
|
|
|
|
|
|
run_test( |
|
|
"How many hours per week do remote employees need to work?", |
|
|
file_path=test_file_path, |
|
|
test_name="Document Agent - Specific Information Retrieval" |
|
|
) |
|
|
|
|
|
print("\n" + "="*80) |
|
|
print("TEST SUITE COMPLETED") |
|
|
print("="*80) |
|
|
run_test("Show all meetings scheduled tomorrow") |
|
|
|
|
|
print("\nNote: Agent 2 requires a file upload. Test manually via API or add file path.") |
|
|
|