Implementing Your Own Retriever
August 10, 2025 ยท View on GitHub
If you wish to plug your own retriever and into search agents already implemented in this repo, you may simply create a new searcher class that inherits from BaseSearcher in searcher/searchers/base.py.
For a skeleton searcher class, you may refer to searcher/searchers/custom_searcher.py. This is a placeholder class you can use as a starting point. You have to implement the following methods:
__init__: Initialize the searcher fromargspassed from the command line.parse_args: Parse the arguments your searcher needs from the command line (e.g.,parser.add_argument("--my-arg", type=str, default="default_value")).search: Perform a search from a query, and return a list of documents.get_document: Get a complete document by its docid.search_type: Get the type of the searcher.search_description: The prompt to be passed to the LLM describing the search tool.get_document_description: The prompt to be passed to the LLM describing the get_document tool.
Then, for any command described in the docs, you may simply replace the --searcher-type argument with custom, and pass in the arguments your searcher needs.
For example, instead of running:
python search_agent/oss_client.py --model openai/gpt-oss-120b --searcher-type bm25 --index-path indexes/bm25/
you may run:
python search_agent/oss_client.py --model openai/gpt-oss-120b --searcher-type custom --my-arg "my-value"
where my-value is the value you passed to the --my-arg argument in your searcher class.