Skip to main content

Parallel AI Search

Get API Key: https://www.parallel.ai

LiteLLM Python SDK​

Parallel AI Search
import os
from litellm import search

os.environ["PARALLEL_AI_API_KEY"] = "..."

response = search(
query="latest AI developments",
search_provider="parallel_ai",
max_results=5
)

LiteLLM AI Gateway​

1. Setup config.yaml​

config.yaml
model_list:
- model_name: gpt-5.6-terra
litellm_params:
model: gpt-5.6-terra
api_key: os.environ/OPENAI_API_KEY

search_tools:
- search_tool_name: parallel-search
litellm_params:
search_provider: parallel_ai
api_key: os.environ/PARALLEL_AI_API_KEY

2. Start the proxy​

litellm --config /path/to/config.yaml

# RUNNING on http://0.0.0.0:4000

3. Test the search endpoint​

Test Request
curl http://0.0.0.0:4000/v1/search/parallel-search \
-H "Authorization: Bearer $LITELLM_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"query": "latest AI developments",
"max_results": 5
}'

Provider-specific Parameters​

Parallel AI Search with Provider-specific Parameters
import os
from litellm import search

os.environ["PARALLEL_AI_API_KEY"] = "..."

response = search(
query="latest developments in quantum computing",
search_provider="parallel_ai",
max_results=5,
# Parallel AI-specific parameters
processor="pro", # 'base' or 'pro'
max_chars_per_result=500 # Max characters per result
)

Web Search Interception​

When a Parallel AI search tool backs web search interception, the intercepted litellm_web_search tool's optional objective and search_queries fields are forwarded to Parallel's v1 Search API as objective and search_queries, so one tool call from the model searches several keyword angles at once. Parallel AI is the only search provider that receives this richer shape today; every other provider gets the tool call's single query.

config.yaml
model_list:
- model_name: claude
litellm_params:
model: anthropic/claude-sonnet-5
api_key: os.environ/ANTHROPIC_API_KEY

search_tools:
- search_tool_name: parallel-search
litellm_params:
search_provider: parallel_ai
api_key: os.environ/PARALLEL_AI_API_KEY
max_results: 5

litellm_settings:
callbacks: ["websearch_interception"]
websearch_interception_params:
enabled_providers: ["anthropic"]
search_tool_name: parallel-search
Request
curl http://0.0.0.0:4000/v1/messages \
-H "Authorization: Bearer $LITELLM_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "claude",
"max_tokens": 1024,
"messages": [{"role": "user", "content": "What is the latest stable Node.js release and what changed in it?"}],
"tools": [{"type": "web_search_20250305", "name": "web_search"}]
}'

The model sees the three-field schema and typically fills all of them. LiteLLM then sends Parallel the model's objective and up to five of its search_queries; queries past the fifth are dropped before the request goes out, matching Parallel's cap.

Outbound Parallel AI request
{
"objective": "Find the most current stable Node.js release version and what changes were included in that release",
"search_queries": ["latest stable Node.js release", "Node.js newest version changelog", "current Node.js LTS release"],
"mode": "basic",
"advanced_settings": {"max_results": 5}
}

When the model fills only query, or you call /v1/search/parallel-search with a single query string, that string is sent as both a one-item search_queries list and the objective. A list of query strings on a direct search call maps to search_queries the same way, with objective passed through only when you supply it. An objective set in the search tool's litellm_params is kept on every request and the model's is dropped.

🚅
LiteLLM Enterprise
SSO/SAML, audit logs, spend tracking, multi-team management, and guardrails — built for production.
Learn more →