b47fd08cb7
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>
46 lines
1.1 KiB
Python
46 lines
1.1 KiB
Python
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
"""Implementation of the :py:obj:`preference <searx.preference>` settings."""
|
|
# pylint: disable = too-few-public-methods
|
|
|
|
import typing as t
|
|
import msgspec
|
|
|
|
|
|
class SettingsPref(msgspec.Struct, kw_only=True, forbid_unknown_fields=True):
|
|
"""Options for configuring the preferences
|
|
|
|
.. code:: yaml
|
|
|
|
preferences:
|
|
lock:
|
|
- favicon_resolver
|
|
- image_proxy
|
|
- method
|
|
# ...
|
|
|
|
"""
|
|
|
|
lock: set[
|
|
t.Literal[
|
|
"categories",
|
|
"language",
|
|
"locale",
|
|
"autocomplete",
|
|
"favicon_resolver",
|
|
"image_proxy",
|
|
"method",
|
|
"safesearch",
|
|
"theme",
|
|
"results_on_new_tab",
|
|
"doi_resolver",
|
|
"ai_summary_server",
|
|
"ai_summary_model",
|
|
"ai_summary_grounding",
|
|
"simple_style",
|
|
"center_alignment",
|
|
"query_in_title",
|
|
"search_on_category_select",
|
|
]
|
|
] = set()
|
|
"""Lock arbitrary settings on the preferences page."""
|