from typing import List import requests from sqlalchemy.orm import Session from app.core.retrievers.base_retriever import Retriever class RemoteRetriever(Retriever): """ A retriever that fetches context from a single remote backend server. """ def __init__(self, server_url: str): """ Initializes the retriever with the remote server's URL. Args: server_url (str): The URL of the remote backend server. """ self.server_url = server_url self.session = requests.Session() def retrieve_context(self, query: str, db: Session) -> List[str]: """ Fetches context for a given query from the remote server. Args: query (str): The user's query string. db (Session): The database session (unused, but required by the abstract base class). Returns: List[str]: A list of text strings representing the retrieved context. """ try: # Send the query to the remote server response = self.session.post(self.server_url, json={'query': query}) response.raise_for_status() # Raise an exception for bad status codes # Assuming the server returns a JSON object with a 'context' key server_context = response.json().get('context', []) return server_context except requests.exceptions.RequestException as e: print(f"Error connecting to the server at {self.server_url}: {e}") return []