code: def act(self):
      observation = self.observation
      results = self.search_client.retrieve(
          [observation["text"]], self.n_docs
      )[0]
      documents: List[Document] = []
      for doc in results:
          content = (
              self.intra_doc_delim.join(doc["content"])
              if isinstance(doc["content"], list)
              else doc["content"]
          )
          documents.append(
              Document(
                  docid=doc["url"], text=content, title=doc["title"]
              )
          )
      reply = {
          "text": "\n".join([str(doc) for doc in documents]),
          "top_docs": documents,
      }
      return reply
  
file_path: ParlAI/projects/bb3/agents/search_agent.py
imports: from typing import Any, Dict, List, Optional, Union
  from parlai.agents.rag.retrieve_api import SearchEngineRetriever, SearchEngineRetrieverMock
  from parlai.agents.rag.retrievers import Document
  from parlai.core.agents import Agent
  from parlai.core.opt import Opt
  from parlai.core.params import ParlaiParser
  from parlai.core.message import Message
label_desc: Use image node_id 5 for calling the SearchAgent obj's underlying member method code with example usage: obj.act() and returns: reply