Files
B.Tech-Project-III/thirdeye/scripts/test_m3.py
2026-04-05 00:43:23 +05:30

74 lines
3.6 KiB
Python

"""Test Milestone 3: Signal Extractor, Classifier, and Context Detector working."""
import asyncio, os, sys
sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..'))
DEV_CHAT = """[Alex]: Hey team, I think we should go with PostgreSQL for the main DB. MongoDB is overkill for our relational data.
[Priya]: Agreed on Postgres. I'll set up the schema today.
[Raj]: Payment module webhook integration is looking tricky. I'll handle it myself since I know the Stripe API best.
[Alex]: I'm just gonna hardcode the API URL for now, we'll add env vars when we dockerize.
[Sam]: The timeout error on the checkout endpoint is happening again. Third time this week.
[Alex]: Just restart the pod for now, I'll look at it after the sprint."""
PRODUCT_CHAT = """[Lisa]: Users keep asking about dark mode, it comes up in every demo.
[Mike]: I think we should prioritize the mobile app over the API this sprint.
[Sarah]: No way, API stability is way more important. Two enterprise clients complained last week.
[Lisa]: Sarah from Acme literally said 'I would pay double if you had SSO integration.'
[Mike]: Competitor X just launched a mobile-first version. We're falling behind."""
async def test_signal_extractor():
from backend.agents.signal_extractor import extract_signals
print("Testing Signal Extractor (DevLens)...")
signals = await extract_signals(DEV_CHAT, "test-dev", lens="dev")
print(f" Extracted {len(signals)} signals:")
for s in signals:
print(f" - [{s.type}] {s.summary[:70]}...")
assert len(signals) >= 2, f"Expected >=2 signals, got {len(signals)}"
print(f" ✅ DevLens extraction working ({len(signals)} signals)")
print("\nTesting Signal Extractor (ProductLens)...")
signals2 = await extract_signals(PRODUCT_CHAT, "test-product", lens="product")
print(f" Extracted {len(signals2)} signals:")
for s in signals2:
print(f" - [{s.type}] {s.summary[:70]}...")
assert len(signals2) >= 2, f"Expected >=2 signals, got {len(signals2)}"
print(f" ✅ ProductLens extraction working ({len(signals2)} signals)")
async def test_classifier():
from backend.agents.signal_extractor import extract_signals
from backend.agents.classifier import classify_signal
print("\nTesting Classifier Agent...")
signals = await extract_signals(DEV_CHAT, "test-classify", lens="dev")
if signals:
classified = await classify_signal(signals[0])
print(f" Signal: {classified.summary[:60]}")
print(f" Sentiment: {classified.sentiment}, Urgency: {classified.urgency}")
print(f" Keywords: {classified.keywords}")
print(f" ✅ Classifier working")
else:
print(f" ⚠️ No signals to classify (extractor returned empty)")
async def test_context_detector():
from backend.agents.context_detector import detect_context
print("\nTesting Context Detector...")
result = await detect_context(DEV_CHAT)
print(f" Detected: {result['detected_lens']} (confidence: {result['confidence']})")
print(f" Evidence: {result['evidence']}")
assert result["detected_lens"] == "dev", f"Expected 'dev', got '{result['detected_lens']}'"
print(f" ✅ Correctly detected as 'dev'")
result2 = await detect_context(PRODUCT_CHAT)
print(f" Detected: {result2['detected_lens']} (confidence: {result2['confidence']})")
assert result2["detected_lens"] == "product", f"Expected 'product', got '{result2['detected_lens']}'"
print(f" ✅ Correctly detected as 'product'")
async def main():
await test_signal_extractor()
await test_classifier()
await test_context_detector()
print("\n🎉 MILESTONE 3 PASSED — Core agents working")
asyncio.run(main())