Spaces:
Running
Running
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 |