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>
The documentation was written from the perspective of someone who had
just implemented the plugin: it opened with SSRF caveats and settings
keys, and explained decisions rather than usage.
The admin page now starts from what the feature is, followed by a
four-step quickstart (install Ollama, pull a model, configure, restart)
and a troubleshooting section for the failures that actually occur. The
quickstart repeats the default plugins because a plugins: block replaces
that list instead of merging into it -- following the short version of
the instructions would otherwise switch every other plugin off.
The developer page gains a rendered data flow diagram. The two-request
design -- placeholder first, streamed answer second -- is the part of
this plugin that is hard to convey in prose, and the SSE to NDJSON
change is easier to see than to read about.
The module docstring now describes the module and links to both pages,
instead of restating administration guidance.
Add Jason Witty to AUTHORS.rst.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Grounding is on by default, and it sends the top search results along
with the query. Which data leaves the instance depends on where the LLM
server runs -- per the privacy-by-design directive the reader has to be
able to see that from the documentation.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
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>
Servers that require authentication (e.g. vLLM or llama.cpp started with
--api-key, or an LLM server behind an authenticating reverse proxy) can
now be configured with an ai_summary.api_key, sent as "Authorization:
Bearer".
The key is administrator configuration only: there is no preference for
it, and it is only sent to the configured base_url. Users can point the
ai_summary_server preference at a server of their own, and such a server
must not be handed the instance API key -- otherwise every user of the
instance could capture it.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Talk to the LLM server via GET /v1/models and POST /v1/chat/completions
(SSE) instead of Ollama's native API. Any OpenAI compatible server now
works (Ollama, vLLM, llama.cpp, LM Studio, Hugging Face TGI, ...);
Ollama serves this API natively, existing setups keep working unchanged.
The Ollama specific keep_alive option is dropped, the ai_summary.grounding
setting is added as instance wide default of the grounding preference.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Add an optional, disabled-by-default plugin that shows an AI generated
summary at the top of the result page, generated by a (local) Ollama
server:
- async: the result page is never delayed; a client plugin streams the
answer (NDJSON over a new /ai_summary endpoint) into a placeholder
answer with a typing indicator, collapsed behind a More button, with
an inline follow-up chat
- trigger: first page of general searches only, skipped when an infobox
or instant answer already answers the query
- grounding (per-user preference): send the top result snippets as
context, the model answers from them instead of its own knowledge
- configuration: new AI Summary preferences tab (server URL, model,
grounding) with instance defaults in a new ai_summary: settings
section; all three preferences can be locked for public instances
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>