8edc368752
Three changes to the ai_summary plugin: - The *AI Summary* preferences tab is only rendered when the plugin is activated in settings.yml. An instance that does not offer AI summaries no longer shows an AI tab at all. The gate is the administrator setting, not the user opt-out, because the per user on/off switch lives inside that tab -- hiding it on opt-out would leave no way to opt back in. - Users can configure an API key for their own LLM server (ai_summary_api_key). The administrator key is still only sent to base_url and the user key only to a server the user configured, so neither key can be captured through the other. The setting is marked secret: credentials are excluded from the preferences URL, which users copy around to transfer or share their preferences. - Grounding summaries on the search results is now the default; the extra cost of the longer prompt is moderate. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
66 lines
2.3 KiB
ReStructuredText
66 lines
2.3 KiB
ReStructuredText
.. _settings ai_summary:
|
|
|
|
===============
|
|
``ai_summary:``
|
|
===============
|
|
|
|
Default configuration of the :ref:`AI summary plugin <ai_summary plugin>`.
|
|
Users configure the LLM server URL (any server implementing the OpenAI chat
|
|
completions API: Ollama, vLLM, llama.cpp, LM Studio, Hugging Face TGI, ...)
|
|
and the model in the *AI Summary* tab of their preferences; the values below
|
|
only act as instance wide defaults.
|
|
|
|
.. code:: yaml
|
|
|
|
ai_summary:
|
|
base_url: "http://127.0.0.1:11434"
|
|
model: "llama3.2:3b"
|
|
|
|
An LLM server that requires authentication -- e.g. vLLM or llama.cpp started
|
|
with ``--api-key``, or a server behind an authenticating reverse proxy -- is
|
|
configured with an ``api_key``:
|
|
|
|
.. code:: yaml
|
|
|
|
ai_summary:
|
|
base_url: "http://127.0.0.1:8000"
|
|
api_key: "sk-..."
|
|
model: "llama3.2:3b"
|
|
|
|
The key is sent in an ``Authorization: Bearer`` header and only to the
|
|
``base_url`` above. A user who points the ``ai_summary_server`` preference at
|
|
a server of their own never gets the administrator's key; for such a server
|
|
the user configures their own key in the ``ai_summary_api_key`` preference.
|
|
SearXNG has no indirection for secrets in ``settings.yml``, so the file
|
|
holding the key should be readable by the SearXNG process only.
|
|
|
|
The *AI Summary* tab of the preferences is only shown when the plugin is
|
|
activated in ``settings.yml`` (``active: true``); an instance that does not
|
|
offer AI summaries does not show the tab at all.
|
|
|
|
.. attention::
|
|
|
|
A user configurable server URL allows any user of the instance to make the
|
|
SearXNG server send requests to a URL of their choice (`SSRF`_), and each
|
|
summary is real LLM work. This plugin is intended for private instances --
|
|
on a public instance lock the related preferences (:ref:`settings
|
|
preferences`):
|
|
|
|
.. code:: yaml
|
|
|
|
preferences:
|
|
lock:
|
|
- ai_summary_server
|
|
- ai_summary_api_key
|
|
- ai_summary_model
|
|
- ai_summary_grounding
|
|
|
|
Locking ``ai_summary_server`` and ``ai_summary_api_key`` matters most: an
|
|
unlocked pair lets any user of the instance make SearXNG send an
|
|
``Authorization`` header of their choosing to a host of their choosing.
|
|
|
|
.. _SSRF: https://owasp.org/www-community/attacks/Server_Side_Request_Forgery
|
|
|
|
.. autoclass:: searx.ai_summary.SettingsAISummary
|
|
:members:
|