[fix] doc: drop the contents:: directive, name the plugin consistently

Furo renders its own page-local table of contents and reports an error
when a page adds one with contents::.  No other page in the tree uses
that directive; these two now follow suit.

The plugin is named "AI Summary" where the name of the plugin is meant,
and "AI summary" where the generated text itself is meant.  That also
fixes the entry in the plugin navigation, which takes its label from the
page title.

Two references to the configuration page rendered as its title, the bare
YAML key "ai_summary:", which reads as a typo in a sentence.  They now
carry explicit link text.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
jasonwitty
2026-08-10 16:17:53 -07:00
co-authored by Claude Opus 5
parent b6eed9a993
commit 6b50b23467
5 changed files with 12 additions and 22 deletions
+2 -7
View File
@@ -10,7 +10,7 @@
- :ref:`settings plugins` - :ref:`settings plugins`
- :ref:`settings preferences` - :ref:`settings preferences`
Configuration of the :ref:`AI summary plugin <ai_summary plugin>`, which shows a Configuration of the :ref:`AI Summary plugin <ai_summary plugin>`, which shows a
short AI generated answer above the search results. short AI generated answer above the search results.
The text is produced by an **LLM server that you run** -- SearXNG does not ship The text is produced by an **LLM server that you run** -- SearXNG does not ship
@@ -18,11 +18,6 @@ a model and does not talk to any AI provider on its own. Anything that speaks
the `OpenAI chat completions API`_ works: `Ollama`_, vLLM, llama.cpp, LM Studio, the `OpenAI chat completions API`_ works: `Ollama`_, vLLM, llama.cpp, LM Studio,
Hugging Face TGI and others. The plugin is not activated by default. Hugging Face TGI and others. The plugin is not activated by default.
.. contents::
:depth: 2
:local:
:backlinks: entry
.. _ai_summary quickstart: .. _ai_summary quickstart:
@@ -76,7 +71,7 @@ Add this to your ``settings.yml``:
.. warning:: .. warning::
A ``plugins:`` block **replaces** the default list, it is not merged into it A ``plugins:`` block **replaces** the default list, it is not merged into it
(:ref:`settings plugins`). If you list only the AI summary plugin, every (:ref:`settings plugins`). If you list only the AI Summary plugin, every
other plugin is switched off. That is why the block above repeats the other plugin is switched off. That is why the block above repeats the
defaults -- drop the lines for plugins you do not want. defaults -- drop the lines for plugins you do not want.
+5 -10
View File
@@ -1,23 +1,18 @@
.. _ai_summary plugin: .. _ai_summary plugin:
========== ==========
AI summary AI Summary
========== ==========
.. sidebar:: Further reading .. .. sidebar:: Further reading ..
- :ref:`settings ai_summary` - :ref:`Configuration <settings ai_summary>`
- :ref:`dev plugin` - :ref:`dev plugin`
- :ref:`result types` - :ref:`result types`
.. contents:: The AI Summary plugin shows a generated answer above the search results. The
:depth: 2 text comes from an LLM server the administrator runs; see :ref:`its
:local: configuration <settings ai_summary>` for how to set one up.
:backlinks: entry
The AI summary plugin shows a generated answer above the search results. The
text comes from an LLM server the administrator runs; see :ref:`settings
ai_summary` for how to set one up.
The interesting part of this plugin is *when* things happen. Generating an The interesting part of this plugin is *when* things happen. Generating an
answer takes seconds, and a search engine that waits seconds before painting answer takes seconds, and a search engine that waits seconds before painting
+2 -2
View File
@@ -1,5 +1,5 @@
# SPDX-License-Identifier: AGPL-3.0-or-later # SPDX-License-Identifier: AGPL-3.0-or-later
"""Implementations needed for the AI summary plugin """Implementations needed for the AI Summary plugin
(:py:obj:`searx.plugins.ai_summary`).""" (:py:obj:`searx.plugins.ai_summary`)."""
# pylint: disable=too-few-public-methods # pylint: disable=too-few-public-methods
@@ -30,7 +30,7 @@ application setup by :py:obj:`searx.plugins.ai_summary.SXNGPlugin.init`."""
class SettingsAISummary(msgspec.Struct, kw_only=True, forbid_unknown_fields=True): class SettingsAISummary(msgspec.Struct, kw_only=True, forbid_unknown_fields=True):
"""Options for configuring the AI summary plugin. """Options for configuring the AI Summary plugin.
.. code:: yaml .. code:: yaml
+2 -2
View File
@@ -1,5 +1,5 @@
# SPDX-License-Identifier: AGPL-3.0-or-later # SPDX-License-Identifier: AGPL-3.0-or-later
"""Implementation of the AI summary plugin, which shows a generated answer above """Implementation of the AI Summary plugin, which shows a generated answer above
the search results. The answer comes from an LLM server that implements the the search results. The answer comes from an LLM server that implements the
`OpenAI chat completions API`_ (Ollama, vLLM, llama.cpp, LM Studio, Hugging Face `OpenAI chat completions API`_ (Ollama, vLLM, llama.cpp, LM Studio, Hugging Face
TGI, ...) and that the administrator runs. TGI, ...) and that the administrator runs.
@@ -135,7 +135,7 @@ class SXNGPlugin(Plugin):
self.info = PluginInfo( self.info = PluginInfo(
id=self.id, id=self.id,
name=gettext("AI summary"), name=gettext("AI Summary"),
description=gettext( description=gettext(
"Show an AI generated summary of the search query on top of the" "Show an AI generated summary of the search query on top of the"
" result page (uses a local LLM server, see the settings below)." " result page (uses a local LLM server, see the settings below)."
+1 -1
View File
@@ -287,7 +287,7 @@ plugins:
# '(.*\.)?youtu\.be$': 'yt.example.com' # '(.*\.)?youtu\.be$': 'yt.example.com'
# #
# Configuration of the "AI summary plugin", for more details see # Configuration of the "AI Summary plugin", for more details see
# https://docs.searxng.org/admin/settings/settings_ai_summary.html # https://docs.searxng.org/admin/settings/settings_ai_summary.html
# #
# ai_summary: # ai_summary: