πOpenDeepSearch: Democratizing Search with Open-source Reasoning Models and Reasoning Agents π
OpenDeepSearch is a lightweight yet powerful search tool designed for seamless integration with AI agents. It enables deep web search and retrieval, optimized for use with Hugging Face's SmolAgents ecosystem.
- Performance: ODS performs on par with closed source search alternatives on single-hop queries such as SimpleQA π.
- Advanced Capabilities: ODS performs much better than closed source search alternatives on multi-hop queries such as FRAMES bench π.
- πOpenDeepSearch: Democratizing Search with Open-source Reasoning Models and Reasoning Agents π
- Semantic Search π§ : Leverages Crawl4AI and semantic search rerankers (such as Qwen2-7B-instruct and Jina AI) to provide in-depth results
- Two Modes of Operation β‘:
- Default Mode: Quick and efficient search with minimal latency.
- Pro Mode (Deep Search): More in-depth and accurate results at the cost of additional processing time.
- Optimized for AI Agents π€: Works seamlessly with SmolAgents like
CodeAgent
. - Fast and Lightweight β‘: Designed for speed and efficiency with minimal setup.
- Extensible π: Easily configurable to work with different models and APIs.
To install OpenDeepSearch, run:
pip install -e . #you can also use: uv pip install -e .
pip install -r requirements.txt #you can also use: uv pip install -r requirements.txt
Note: you must have torch
installed.
Note: using uv
instead of regular pip
makes life much easier!
-
Sign up for Serper.dev: Get free 2500 credits and add your API key.
- Visit serper.dev to create an account.
- Retrieve your API key and store it as an environment variable:
export SERPER_API_KEY='your-api-key-here'
-
Choose a Reranking Solution:
- Quick Start with Jina: Sign up at Jina AI to get an API key for immediate use
- Self-hosted Option: Set up Infinity Embeddings server locally with open source models such as Qwen2-7B-instruct
- For more details on reranking options, see our Rerankers Guide
-
Set up LiteLLM Provider:
- Choose a provider from the supported list, including:
- OpenAI
- Anthropic
- Google (Gemini)
- OpenRouter
- HuggingFace
- Fireworks
- And many more!
- Set your chosen provider's API key as an environment variable:
export <PROVIDER>_API_KEY='your-api-key-here' # e.g., OPENAI_API_KEY, ANTHROPIC_API_KEY
- When initializing OpenDeepSearch, specify your chosen model using the provider's format:
search_agent = OpenDeepSearchTool(model_name="provider/model-name") # e.g., "anthropic/claude-3-opus-20240229", 'huggingface/microsoft/codebert-base', 'openrouter/google/gemini-2.0-flash-001'
- Choose a provider from the supported list, including:
You can use OpenDeepSearch independently or integrate it with SmolAgents for enhanced reasoning and code generation capabilities.
from opendeepsearch import OpenDeepSearchTool
import os
# Set environment variables for API keys
os.environ["SERPER_API_KEY"] = "your-serper-api-key-here"
os.environ["OPENROUTER_API_KEY"] = "your-openrouter-api-key-here"
os.environ["JINA_API_KEY"] = "your-jina-api-key-here"
search_agent = OpenDeepSearchTool(model_name="openrouter/google/gemini-2.0-flash-001", reranker="jina") # Set pro_mode for deep search
# Set reranker to "jina", or "infinity" for self-hosted reranking
query = "Fastest land animal?"
result = search_agent.search(query)
print(result)
To try out OpenDeepSearch with a user-friendly interface, simply run:
python gradio_demo.py
This will launch a local web interface where you can test different search queries and modes interactively. You can also change the model, reranker, and search mode in gradio_demo.py
.
from opendeepsearch import OpenDeepSearchTool
from smolagents import CodeAgent, LiteLLMModel
import os
# Set environment variables for API keys
os.environ["SERPER_API_KEY"] = "your-serper-api-key-here"
os.environ["OPENROUTER_API_KEY"] = "your-openrouter-api-key-here"
os.environ["JINA_API_KEY"] = "your-jina-api-key-here"
search_agent = OpenDeepSearchTool(model_name="openrouter/google/gemini-2.0-flash-001", reranker="jina") # Set reranker to "jina" or "infinity"
model = LiteLLMModel(
"openrouter/google/gemini-2.0-flash-001",
temperature=0.2
)
code_agent = CodeAgent(tools=[search_agent], model=model)
query = "How long would a cheetah at full speed take to run the length of Pont Alexandre III?"
result = code_agent.run(query)
print(result)
from opendeepsearch import OpenDeepSearchTool
from opendeepsearch.wolfram_tool import WolframAlphaTool
from opendeepsearch.prompts import REACT_PROMPT
from smolagents import LiteLLMModel, ToolCallingAgent, Tool
import os
# Set environment variables for API keys
os.environ["SERPER_API_KEY"] = "your-serper-api-key-here"
os.environ["JINA_API_KEY"] = "your-jina-api-key-here"
os.environ["WOLFRAM_ALPHA_APP_ID"] = "your-wolfram-alpha-app-id-here"
os.environ["FIREWORKS_API_KEY"] = "your-fireworks-api-key-here"
model = LiteLLMModel(
"fireworks_ai/llama-v3p1-70b-instruct", # Your Fireworks Deepseek model
temperature=0.7
)
search_agent = OpenDeepSearchTool(model_name="fireworks_ai/llama-v3p1-70b-instruct", reranker="jina") # Set reranker to "jina" or "infinity"
# Initialize the Wolfram Alpha tool
wolfram_tool = WolframAlphaTool(app_id=os.environ["WOLFRAM_ALPHA_APP_ID"])
# Initialize the React Agent with search and wolfram tools
react_agent = ToolCallingAgent(
tools=[search_agent, wolfram_tool],
model=model,
prompt_templates=REACT_PROMPT # Using REACT_PROMPT as system prompt
)
# Example query for the React Agent
query = "What is the distance, in metres, between the Colosseum in Rome and the Rialto bridge in Venice"
result = react_agent.run(query)
print(result)
OpenDeepSearch offers two distinct search modes to balance between speed and depth:
- Uses SERP-based interaction for quick results
- Minimal processing overhead
- Ideal for single-hop, straightforward queries
- Fast response times
- Perfect for basic information retrieval
- Involves comprehensive web scraping
- Implements semantic reranking of results
- Includes advanced post-processing of data
- Slightly longer processing time
- Excels at:
- Multi-hop queries
- Complex search requirements
- Detailed information gathering
- Questions requiring cross-reference verification
OpenDeepSearch is built on the shoulders of great open-source projects:
- SmolAgents π€ β Powers the agent framework and reasoning capabilities.
- Crawl4AI π·οΈ β Provides data crawling support.
- Infinity Embedding API π β Powers semantic search capabilities.
- LiteLLM π₯ β Used for efficient AI model integration.
- Various Open-Source Libraries π β Enhancing search and retrieval functionalities.
If you use OpenDeepSearch
in your works, please cite it using the following BibTex entry:
@misc{alzubi2025opendeepsearchdemocratizing,
title={Open Deep Search: Democratizing Search with Open-source Reasoning Agents},
author={Salaheddin Alzubi and Creston Brooks and Purva Chiniya and Edoardo Contente and Chiara von Gerlach and Lucas Irwin and Yihan Jiang and Arda Kaz and Windsor Nguyen and Sewoong Oh and Himanshu Tyagi and Pramod Viswanath},
year={2025},
eprint={2503.20201},
archivePrefix={arXiv},
primaryClass={cs.LG},
url={https://arxiv.org/abs/2503.20201},
}
For questions or collaborations, open an issue or reach out to the maintainers.