Spaces:
Running
Running
#!/usr/bin/env python3 | |
""" | |
Direct test for YouTube video analysis tool | |
""" | |
import os | |
import sys | |
import gaia_tools | |
import re | |
# YouTube URL regex pattern | |
YOUTUBE_URL_PATTERN = r'(https?://)?(www\.)?(youtube\.com|youtu\.?be)/.+?(?=\s|$)' | |
def extract_youtube_url(text): | |
"""Extract YouTube URL from text""" | |
match = re.search(YOUTUBE_URL_PATTERN, text) | |
if match: | |
return match.group(0) | |
return None | |
# Save original function | |
original_analyze_youtube_video = gaia_tools.analyze_youtube_video | |
# Create mock function | |
def mock_analyze_youtube_video(video_url, question, max_frames=10): | |
"""Mock implementation that returns a predefined answer for bird species question""" | |
print(f"π¬ Mock analyzing video: {video_url}") | |
return """ | |
Video Analysis Results: | |
Video Title: Bird Identification Challenge: Backyard Birds in Spring | |
Duration: 3:42 | |
Analysis: | |
After careful frame-by-frame analysis of the video, the highest number of different bird species visible simultaneously is 3. | |
This occurs at approximately 1:23 into the video, where we can see: | |
1. American Robin | |
2. Northern Cardinal | |
3. Blue Jay | |
These three species are clearly visible in the same frame at this timestamp. | |
""" | |
def main(): | |
"""Run direct test of YouTube video analysis""" | |
# Import here to avoid circular imports - needs to be done before mock setup | |
from question_classifier import QuestionClassifier | |
from main import GAIASolver | |
# Replace with mock - must be done after imports | |
gaia_tools.analyze_youtube_video = mock_analyze_youtube_video | |
try: | |
# Test question | |
question_text = "In the video https://www.youtube.com/watch?v=L1vXCYZAYYM, what is the highest number of bird species to be on camera simultaneously?" | |
# Extract URL | |
youtube_url = extract_youtube_url(question_text) | |
if not youtube_url: | |
print("β Failed to extract YouTube URL") | |
return | |
print(f"π Extracted URL: {youtube_url}") | |
# First check the classifier | |
print("π§© Testing classifier...") | |
classifier = QuestionClassifier() | |
classification = classifier.classify_question(question_text) | |
print(f"π Classification: {classification['primary_agent']}") | |
print(f"π§ Tools needed: {classification.get('tools_needed', [])}") | |
# Check if YouTube tool is prioritized | |
if "analyze_youtube_video" in classification.get('tools_needed', []): | |
print("β PASS: analyze_youtube_video is selected as a tool") | |
# Check if it's the first tool | |
if classification.get('tools_needed', [])[0] == "analyze_youtube_video": | |
print("β PASS: analyze_youtube_video is the FIRST tool") | |
else: | |
print("β οΈ WARN: analyze_youtube_video is not the first tool") | |
else: | |
print("β FAIL: analyze_youtube_video not selected for YouTube URL") | |
# Now test with the solver | |
print("\nπ€ Testing with full GAIASolver...") | |
try: | |
# Initialize solver | |
solver = GAIASolver() | |
# Create a simple question object | |
question = { | |
'task_id': 'youtube_direct_test', | |
'question': question_text | |
} | |
# Process with solver | |
print("π Solving question...") | |
result = solver.solve_question(question) | |
print("\nπ Result:") | |
print("-" * 50) | |
print(result) | |
print("-" * 50) | |
# Extract answer | |
if "3" in result: | |
print("\nβ Success! Found expected answer '3'") | |
else: | |
print("\nβ Failed! Expected answer not found") | |
except Exception as e: | |
print(f"\nβ Error initializing or running solver: {e}") | |
finally: | |
# Restore original function | |
gaia_tools.analyze_youtube_video = original_analyze_youtube_video | |
print("\nπ Original function restored") | |
if __name__ == "__main__": | |
main() | |