175 lines
5.5 KiB
Python
175 lines
5.5 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Example usage of the Research Lookup skill with automatic model selection.
|
|
|
|
This script demonstrates:
|
|
1. Automatic model selection based on query complexity
|
|
2. Manual model override options
|
|
3. Batch query processing
|
|
4. Integration with scientific writing workflows
|
|
"""
|
|
|
|
import os
|
|
from research_lookup import ResearchLookup
|
|
|
|
|
|
def example_automatic_selection():
|
|
"""Demonstrate automatic model selection."""
|
|
print("=" * 80)
|
|
print("EXAMPLE 1: Automatic Model Selection")
|
|
print("=" * 80)
|
|
print()
|
|
|
|
research = ResearchLookup()
|
|
|
|
# Simple lookup - will use Sonar Pro
|
|
query1 = "Recent advances in CRISPR gene editing 2024"
|
|
print(f"Query: {query1}")
|
|
print(f"Expected model: Sonar Pro (fast lookup)")
|
|
result1 = research.lookup(query1)
|
|
print(f"Actual model: {result1.get('model')}")
|
|
print()
|
|
|
|
# Complex analysis - will use Sonar Reasoning Pro
|
|
query2 = "Compare and contrast the efficacy of mRNA vaccines versus traditional vaccines"
|
|
print(f"Query: {query2}")
|
|
print(f"Expected model: Sonar Reasoning Pro (analytical)")
|
|
result2 = research.lookup(query2)
|
|
print(f"Actual model: {result2.get('model')}")
|
|
print()
|
|
|
|
|
|
def example_manual_override():
|
|
"""Demonstrate manual model override."""
|
|
print("=" * 80)
|
|
print("EXAMPLE 2: Manual Model Override")
|
|
print("=" * 80)
|
|
print()
|
|
|
|
# Force Sonar Pro for budget-constrained rapid lookup
|
|
research_pro = ResearchLookup(force_model='pro')
|
|
query = "Explain the mechanism of CRISPR-Cas9"
|
|
print(f"Query: {query}")
|
|
print(f"Forced model: Sonar Pro")
|
|
result = research_pro.lookup(query)
|
|
print(f"Model used: {result.get('model')}")
|
|
print()
|
|
|
|
# Force Sonar Reasoning Pro for critical analysis
|
|
research_reasoning = ResearchLookup(force_model='reasoning')
|
|
print(f"Query: {query}")
|
|
print(f"Forced model: Sonar Reasoning Pro")
|
|
result = research_reasoning.lookup(query)
|
|
print(f"Model used: {result.get('model')}")
|
|
print()
|
|
|
|
|
|
def example_batch_queries():
|
|
"""Demonstrate batch query processing."""
|
|
print("=" * 80)
|
|
print("EXAMPLE 3: Batch Query Processing")
|
|
print("=" * 80)
|
|
print()
|
|
|
|
research = ResearchLookup()
|
|
|
|
# Mix of simple and complex queries
|
|
queries = [
|
|
"Recent clinical trials for Alzheimer's disease", # Sonar Pro
|
|
"Compare deep learning vs traditional ML in drug discovery", # Sonar Reasoning Pro
|
|
"Statistical power analysis methods", # Sonar Pro
|
|
]
|
|
|
|
print("Processing batch queries...")
|
|
print("Each query will automatically select the appropriate model")
|
|
print()
|
|
|
|
results = research.batch_lookup(queries, delay=1.0)
|
|
|
|
for i, result in enumerate(results):
|
|
print(f"Query {i+1}: {result['query'][:50]}...")
|
|
print(f" Model: {result.get('model')}")
|
|
print(f" Type: {result.get('model_type')}")
|
|
print()
|
|
|
|
|
|
def example_scientific_writing_workflow():
|
|
"""Demonstrate integration with scientific writing workflow."""
|
|
print("=" * 80)
|
|
print("EXAMPLE 4: Scientific Writing Workflow")
|
|
print("=" * 80)
|
|
print()
|
|
|
|
research = ResearchLookup()
|
|
|
|
# Literature review phase - use Pro for breadth
|
|
print("PHASE 1: Literature Review (Breadth)")
|
|
lit_queries = [
|
|
"Recent papers on machine learning in genomics 2024",
|
|
"Clinical applications of AI in radiology",
|
|
"RNA sequencing analysis methods"
|
|
]
|
|
|
|
for query in lit_queries:
|
|
print(f" - {query}")
|
|
# These will automatically use Sonar Pro
|
|
print()
|
|
|
|
# Discussion phase - use Reasoning Pro for synthesis
|
|
print("PHASE 2: Discussion (Synthesis & Analysis)")
|
|
discussion_queries = [
|
|
"Compare the advantages and limitations of different ML approaches in genomics",
|
|
"Explain the relationship between model interpretability and clinical adoption",
|
|
"Analyze the ethical implications of AI in medical diagnosis"
|
|
]
|
|
|
|
for query in discussion_queries:
|
|
print(f" - {query}")
|
|
# These will automatically use Sonar Reasoning Pro
|
|
print()
|
|
|
|
|
|
def main():
|
|
"""Run all examples (requires OPENROUTER_API_KEY to be set)."""
|
|
|
|
if not os.getenv("OPENROUTER_API_KEY"):
|
|
print("Note: Set OPENROUTER_API_KEY environment variable to run live queries")
|
|
print("These examples show the structure without making actual API calls")
|
|
print()
|
|
|
|
# Uncomment to run examples (requires API key)
|
|
# example_automatic_selection()
|
|
# example_manual_override()
|
|
# example_batch_queries()
|
|
# example_scientific_writing_workflow()
|
|
|
|
# Show complexity assessment without API calls
|
|
print("=" * 80)
|
|
print("COMPLEXITY ASSESSMENT EXAMPLES (No API calls required)")
|
|
print("=" * 80)
|
|
print()
|
|
|
|
os.environ.setdefault("OPENROUTER_API_KEY", "test")
|
|
research = ResearchLookup()
|
|
|
|
test_queries = [
|
|
("Recent CRISPR studies", "pro"),
|
|
("Compare CRISPR vs TALENs", "reasoning"),
|
|
("Explain how CRISPR works", "reasoning"),
|
|
("Western blot protocol", "pro"),
|
|
("Pros and cons of different sequencing methods", "reasoning"),
|
|
]
|
|
|
|
for query, expected in test_queries:
|
|
complexity = research._assess_query_complexity(query)
|
|
model_name = "Sonar Reasoning Pro" if complexity == "reasoning" else "Sonar Pro"
|
|
status = "✓" if complexity == expected else "✗"
|
|
print(f"{status} '{query}'")
|
|
print(f" → {model_name}")
|
|
print()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|
|
|