Spaces:
Paused
Paused
| from typing import Any, Dict, List, Optional | |
| import requests | |
| import os | |
| class CustomRetriever: | |
| """ | |
| Custom API Retriever | |
| """ | |
| def __init__(self, query: str): | |
| self.endpoint = os.getenv('RETRIEVER_ENDPOINT') | |
| if not self.endpoint: | |
| raise ValueError("RETRIEVER_ENDPOINT environment variable not set") | |
| self.params = self._populate_params() | |
| self.query = query | |
| def _populate_params(self) -> Dict[str, Any]: | |
| """ | |
| Populates parameters from environment variables prefixed with 'RETRIEVER_ARG_' | |
| """ | |
| return { | |
| key[len('RETRIEVER_ARG_'):].lower(): value | |
| for key, value in os.environ.items() | |
| if key.startswith('RETRIEVER_ARG_') | |
| } | |
| def search(self, max_results: int = 5) -> Optional[List[Dict[str, Any]]]: | |
| """ | |
| Performs the search using the custom retriever endpoint. | |
| :param max_results: Maximum number of results to return (not currently used) | |
| :return: JSON response in the format: | |
| [ | |
| { | |
| "url": "http://example.com/page1", | |
| "raw_content": "Content of page 1" | |
| }, | |
| { | |
| "url": "http://example.com/page2", | |
| "raw_content": "Content of page 2" | |
| } | |
| ] | |
| """ | |
| try: | |
| response = requests.get(self.endpoint, params={**self.params, 'query': self.query}) | |
| response.raise_for_status() | |
| return response.json() | |
| except requests.RequestException as e: | |
| print(f"Failed to retrieve search results: {e}") | |
| return None |