ira/execution/api_handlers/base_handler.py

64 lines
1.8 KiB
Python

"""
Base handler interface for search APIs.
All specific API handlers should inherit from this base class.
"""
from abc import ABC, abstractmethod
from typing import Dict, List, Any, Optional
class BaseSearchHandler(ABC):
"""Base class for all search API handlers."""
@abstractmethod
def search(self, query: str, num_results: int = 10, **kwargs) -> List[Dict[str, Any]]:
"""
Execute a search query and return results.
Args:
query: The search query to execute
num_results: Number of results to return
**kwargs: Additional search parameters specific to the API
Returns:
List of search results, each as a dictionary with at least:
- title: Title of the result
- url: URL of the result
- snippet: Text snippet or description
- source: Source of the result (e.g., "google", "scholar")
"""
pass
@abstractmethod
def get_name(self) -> str:
"""
Get the name of the search handler.
Returns:
Name of the search handler (e.g., "google", "scholar")
"""
pass
@abstractmethod
def is_available(self) -> bool:
"""
Check if the search API is available and properly configured.
Returns:
True if the API is available, False otherwise
"""
pass
@abstractmethod
def get_rate_limit_info(self) -> Dict[str, Any]:
"""
Get information about the API's rate limits.
Returns:
Dictionary with rate limit information:
- requests_per_minute: Maximum requests per minute
- requests_per_day: Maximum requests per day
- current_usage: Current usage statistics if available
"""
pass