Skip to main content
LibreChat is joining ClickHouse to power the open-source Agentic Data Stack 🎉 Learn more
LibreChat

Web Search Configuration

The webSearch configuration allows you to customize the web search functionality within LibreChat, including search providers, content scrapers, and result rerankers.

Overview

The web search feature consists of three main components:

  1. Search Providers: Services that perform the initial web search
  2. Scrapers: Services that extract content from web pages
  3. Rerankers: Services that reorder search results for better relevance

Example

webSearch:
  # Search Provider Configuration
  serperApiKey: "${SERPER_API_KEY}"
  searxngInstanceUrl: "${SEARXNG_INSTANCE_URL}"
  searxngApiKey: "${SEARXNG_API_KEY}"
  searchProvider: "serper" # Options: "serper", "searxng", "tavily"
 
  # Tavily Configuration (search and/or scraper)
  tavilyApiKey: "${TAVILY_API_KEY}"
  # Optional: custom Tavily-compatible endpoints
  tavilySearchUrl: "${TAVILY_SEARCH_URL}"
  tavilyExtractUrl: "${TAVILY_EXTRACT_URL}"
 
  # Scraper Configuration
  firecrawlApiKey: "${FIRECRAWL_API_KEY}"
  firecrawlApiUrl: "${FIRECRAWL_API_URL}"
  firecrawlVersion: "${FIRECRAWL_VERSION}"
  scraperProvider: "firecrawl" # Options: "firecrawl", "serper", "tavily"
 
  # Reranker Configuration
  jinaApiKey: "${JINA_API_KEY}"
  jinaApiUrl: "${JINA_API_URL}"
  cohereApiKey: "${COHERE_API_KEY}"
  rerankerType: "jina" # Options: "jina", "cohere", "none"
 
  # General Settings
  scraperTimeout: 7500 # Timeout in milliseconds for scraper requests (default: 7500)
  safeSearch: 1 # Options: 0 (OFF), 1 (MODERATE - default), 2 (STRICT)

Search Providers

searchProvider

KeyTypeDescriptionExample
searchProviderStringSpecifies which search provider to use.Options: "serper", "searxng", "tavily"

serperApiKey

KeyTypeDescriptionExample
serperApiKeyStringEnvironment variable name for the Serper API key. If not set in .env, users will be prompted to provide it via UI.${SERPER_API_KEY}

Note: Get your API key from Serper.dev

searxngInstanceUrl

KeyTypeDescriptionExample
searxngInstanceUrlStringEnvironment variable name for the SearXNG instance URL. If not set in .env, users will be prompted to provide it via UI.${SEARXNG_INSTANCE_URL}

searxngApiKey

KeyTypeDescriptionExample
searxngApiKeyStringEnvironment variable name for the SearXNG API key. If not set in .env, users will be prompted to provide it via UI.${SEARXNG_API_KEY}

Note: This is optional and only needed if your SearXNG instance requires authentication.

tavilyApiKey

KeyTypeDescriptionExample
tavilyApiKeyStringEnvironment variable name for the Tavily API key. Used for both search and scraper. If not set in .env, users will be prompted to provide it via UI.${TAVILY_API_KEY}

Note: Get your API key from Tavily

tavilySearchUrl

KeyTypeDescriptionExample
tavilySearchUrlStringEnvironment variable name for a custom Tavily Search API URL. Optional; defaults to Tavily hosted search when unset.${TAVILY_SEARCH_URL}

tavilyExtractUrl

KeyTypeDescriptionExample
tavilyExtractUrlStringEnvironment variable name for a custom Tavily Extract API URL. Optional; defaults to Tavily hosted extract when unset.${TAVILY_EXTRACT_URL}

tavilySearchOptions

KeyTypeDescriptionExample
tavilySearchOptionsObjectConfiguration options for Tavily search.

Subkeys:

KeyTypeDescriptionExample
searchDepthStringControls relevance vs latency tradeoff. "basic" returns one NLP summary per URL. "advanced" returns multiple semantically relevant snippets per URL (2 API credits). "fast" balances speed and relevance with snippets. "ultra-fast" minimizes latency with one NLP summary.Options: "basic", "advanced", "fast", "ultra-fast". Default: "basic"
maxResultsNumberThe maximum number of search results to return.Range: 1-20. Default: 5
topicStringThe category of the search. "news" is useful for real-time updates. "finance" for financial data.Options: "general", "news", "finance". Default: "general"
includeImagesBooleanInclude images in the response. Returns both top-level query images and per-result images.Default: false
includeAnswerBoolean or StringInclude an LLM-generated answer. "basic" or true for a quick answer, "advanced" for a detailed answer.Default: false
includeRawContentBoolean or StringInclude cleaned and parsed HTML content. "markdown" or true for markdown format, "text" for plain text.Default: false
includeDomainsArray of StringsRestrict search to specific domains. Maximum 300 domains.
excludeDomainsArray of StringsExclude specific domains from results. Maximum 150 domains.
timeRangeStringTime range filter based on publish or last updated date.Options: "day", "week", "month", "year"
includeImageDescriptionsBooleanWhen includeImages is true, also add a descriptive text for each image.Default: false
includeFaviconBooleanInclude the favicon URL for each search result.Default: false
chunksPerSourceNumberMaximum number of relevant content chunks per source. Only available when searchDepth is "advanced".Range: 1-3. Default: 3
safeSearchBooleanOptional Tavily safe_search override for Tavily Search requests. Omitted by default; true may require Tavily Enterprise.Default: omitted
timeoutNumberClient-side HTTP request timeout in milliseconds. Controls how long to wait for the Tavily API to respond before giving up.Default: 15000

Scrapers

firecrawlApiKey

KeyTypeDescriptionExample
firecrawlApiKeyStringEnvironment variable name for the Firecrawl API key. If not set in .env, users will be prompted to provide it via UI.${FIRECRAWL_API_KEY}

Note: Get your API key from Firecrawl.dev

firecrawlApiUrl

KeyTypeDescriptionExample
firecrawlApiUrlStringEnvironment variable name for the Firecrawl API URL. If not set in .env, users will be prompted to provide it via UI.${FIRECRAWL_API_URL}

Note: This is optional and only needed if you're using a custom Firecrawl instance.

firecrawlVersion

KeyTypeDescriptionExample
firecrawlVersionStringEnvironment variable name for the Firecrawl API version (v0 or v1).${FIRECRAWL_VERSION}

scraperProviderider

KeyTypeDescriptionExample
scraperProviderStringSpecifies which scraper service to use.Options: "firecrawl", "serper", "tavily"

firecrawlOptions

KeyTypeDescriptionExample
firecrawlOptionsObjectAdvanced configuration options for Firecrawl scraper.

Subkeys:

formats

KeyTypeDescriptionExample
formatsArray of StringsFormats to include in the output.

includeTags

KeyTypeDescriptionExample
includeTagsArray of StringsTags to include in the output.

excludeTags

KeyTypeDescriptionExample
excludeTagsArray of StringsTags to exclude from the output.

headers

KeyTypeDescriptionExample
headersObjectHeaders to send with the request. Can be used to send cookies, user-agent, etc.

waitFor

KeyTypeDescriptionExample
waitForNumberSpecify a delay in milliseconds before fetching the content, allowing the page sufficient time to load.

timeout

KeyTypeDescriptionExample
timeoutIntegerTimeout in milliseconds for the scraping request. Must be a non-negative integer.Default: 7500

maxAge

KeyTypeDescriptionExample
maxAgeNumberReturns a cached version of the page if it is younger than this age in milliseconds. If a cached version of the page is older than this value, the page will be scraped.

Note: If you do not need extremely fresh data, enabling this can speed up your scrapes by 500%.

mobile

KeyTypeDescriptionExample
mobileBooleanEmulate scraping from a mobile device.

skipTlsVerification

KeyTypeDescriptionExample
skipTlsVerificationBooleanSkip TLS certificate verification when making requests.

blockAds

KeyTypeDescriptionExample
blockAdsBooleanEnables ad-blocking and cookie popup blocking.

removeBase64Images

KeyTypeDescriptionExample
removeBase64ImagesBooleanRemoves all base 64 images from the output, which may be overwhelmingly long. The image's alt text remains in the output, but the URL is replaced with a placeholder.

parsePDF

KeyTypeDescriptionExample
parsePDFBooleanControls how PDF files are processed during scraping.

storeInCache

KeyTypeDescriptionExample
storeInCacheBooleanIf true, the page will be stored in the Firecrawl index and cache. Setting this to false is useful if your scraping activity may have data protection concerns. Using some parameters associated with sensitive scraping (headers) will force this parameter to be false.

zeroDataRetention

KeyTypeDescriptionExample
zeroDataRetentionBooleanIf true, this will enable zero data retention for this scrape (requires prior setup on Firecrawl).

location

KeyTypeDescriptionExample
locationObjectGeographic location and language settings for scraping.

onlyMainContent

KeyTypeDescriptionExample
onlyMainContentBooleanOnly return the main content of the page excluding headers, navs, footers, etc.

changeTrackingOptions

KeyTypeDescriptionExample
changeTrackingOptionsObjectConfiguration for tracking changes in scraped content.

Example:

webSearch:
  firecrawlApiKey: "${FIRECRAWL_API_KEY}"
  firecrawlOptions:
    formats: ["markdown", "rawHtml"]
    includeTags: ["main", "article", ".content"]
    excludeTags: ["nav", "footer", ".ads"]
    waitFor: 2000
    timeout: 10000
    mobile: false
    blockAds: true
    onlyMainContent: true
    location:
      country: "US"
      languages: ["en"]

Note: For detailed information about Firecrawl scraper options and defaults, see the Firecrawl API Documentation.

tavilyScraperOptions

KeyTypeDescriptionExample
tavilyScraperOptionsObjectConfiguration options for Tavily Extract (scraper).

Subkeys:

KeyTypeDescriptionExample
extractDepthStringThe depth of the extraction process. "advanced" retrieves more data including tables and embedded content with higher success but may increase latency. "basic" costs 1 credit per 5 successful URLs, "advanced" costs 2 credits per 5 successful URLs.Options: "basic", "advanced". Default: "basic"
includeImagesBooleanInclude a list of images extracted from the URLs in the response.Default: false
includeFaviconBooleanInclude the favicon URL for each extracted result.Default: false
formatStringThe format of the extracted web page content. "markdown" returns content in markdown format. "text" returns plain text and may increase latency.Options: "markdown", "text". Default: "markdown"
timeoutNumberTimeout in milliseconds. Controls the client-side HTTP timeout. When set, it also sends Tavily a server-side extraction timeout converted to seconds and clamped to 1-60s.Default: 15000 for basic, 30000 for advanced

Example:

webSearch:
  searchProvider: tavily
  scraperProvider: tavily
  tavilyApiKey: "${TAVILY_API_KEY}"
  # Optional: custom Tavily-compatible endpoints
  # tavilySearchUrl: "${TAVILY_SEARCH_URL}"
  # tavilyExtractUrl: "${TAVILY_EXTRACT_URL}"
  tavilySearchOptions:
    searchDepth: basic
    maxResults: 5
    topic: general
  tavilyScraperOptions:
    extractDepth: basic

Note: For detailed information about Tavily API options, see the Tavily API Documentation.

Rerankers

jinaApiKey

KeyTypeDescriptionExample
jinaApiKeyStringEnvironment variable name for the Jina API key. If not set in .env, users will be prompted to provide it via UI.${JINA_API_KEY}

Note: Get your API key from Jina.ai

jinaApiUrl

KeyTypeDescriptionExample
jinaApiUrlStringEnvironment variable name for the Jina API URL. If not set in .env, users will be prompted to provide it via UI.${JINA_API_URL}

Note: This is optional and only needed if you're using a custom Jina instance.

cohereApiKey

KeyTypeDescriptionExample
cohereApiKeyStringEnvironment variable name for the Cohere API key. If not set in .env, users will be prompted to provide it via UI.${COHERE_API_KEY}

Note: Get your API key from Cohere Dashboard

rerankerType

KeyTypeDescriptionExample
rerankerTypeStringSpecifies which reranker service to use. Set to "none" to skip reranking.Options: "jina", "cohere", "none"

General Settings

scraperTimeout

KeyTypeDescriptionExample
scraperTimeoutIntegerTimeout in milliseconds for scraper requests. Must be a non-negative integer.Default: 7500

safeSearch

KeyTypeDescriptionExample
safeSearchNumberSafe search filtering level. 0 = OFF (no filtering), 1 = MODERATE (default), 2 = STRICT (maximum filtering).Default: 1 (MODERATE)

Note: Safe search levels align with standard search API conventions. MODERATE filtering is enabled by default to provide reasonable content filtering while maintaining search effectiveness. Tavily does not inherit this global setting by default; use tavilySearchOptions.safeSearch only if your Tavily account supports safe_search.

Notes

  • API keys can be configured in two ways:
    1. Set the environment variables specified in the YAML configuration
    2. If environment variables are not set, users will be prompted to provide the API keys via the UI
  • The configuration supports multiple services for each component (providers, scrapers, rerankers)
  • If a specific service type is not specified, the system will try all available services in that category
  • Safe search provides three levels of content filtering: OFF (0), MODERATE (1), and STRICT (2)
  • Tavily does not inherit the global safe search setting by default; set tavilySearchOptions.safeSearch explicitly only when your Tavily account supports safe_search
  • Never put actual API keys in the YAML configuration - only use environment variable names

Setting Up SearXNG

SearXNG is a privacy-focused meta search engine that you can self-host. For more information, see the official SearXNG documentation.

Here are the steps to set up your own SearXNG instance for use with LibreChat:

Using Docker Desktop

  1. Search for the official SearXNG image

    • Open Docker Desktop
    • Search for searxng/searxng in the Images tab
    • Click Run on the official image to automatically pull down and run a container of the image
  2. Running the container

    • Expand the Optional Settings dropdown in the proceeding panel that appears once the download completes
    • Set your desired configuration details (port number, container name, etc.)
    • Click Run to start the container
  3. Configure SearXNG for LibreChat

    • Navigate to the Files tab in Docker Desktop
    • Go to /etc/searxng/settings.yaml
    • Open the file editor
    • Navigate to the formats section
    • Add json as an acceptable format so that LibreChat can communicate with your instance
    • Save the file
  4. Restart the container

    • Restart the container for the changes to take effect

Video Guide:

Here's a video to guide you through the process from start to finish in about a minute:

SearXNG Docker setup walkthrough

Note: In this example, the instance URL is http://localhost:55011 (port number found under the container name in the top left at the end of the video)

Configuring LibreChat to use SearXNG

You can configure SearXNG in LibreChat within the UI or through librechat.yaml.

UI Configuration

  1. Open the tools dropdown in the chat input bar Tools configuration button

  2. Click on the gear icon next to Web Search Tools configuration section

  3. Select SearXNG from the Search Provider dropdown SearXNG dropdown selection

  4. Enter your configuration details (e.g. instance URL, scraper type, etc.) and click save Save web search configuration

  5. Click on the Web Search option in the tools dropdown Web search badge in chat interface

  6. The Web Search badge should now be enabled, meaning your queries can now utilize the web search functionality Web search badge confirmation

How is this guide?