diff --git a/README.md b/README.md index 5cbff0c..1059fcf 100644 --- a/README.md +++ b/README.md @@ -1,25 +1,47 @@ -# SearXNG Gemini & OpenRouter Stream +# AI Answers for SearXNG A SearXNG plugin that streams AI responses using search results as grounding context. Supports Google Gemini and OpenAI-compatible providers (OpenRouter, Ollama, etc.). +## Installation + +Place `ai_answers.py` into the `searx/plugins` directory of your instance (or mount it in a container) and enable it in `settings.yml`: + +```yaml +plugins: + - name: ai_answers + active: true +``` + ## Configuration Set the following environment variables: ### General + - `LLM_PROVIDER`: `openrouter` (default) or `gemini`. - `GEMINI_MAX_TOKENS`: Defaults to `500`. - `GEMINI_TEMPERATURE`: Defaults to `0.2`. -### Google Gemini -- `GEMINI_API_KEY`: Your Google AI API key. -- `GEMINI_MODEL`: Defaults to `gemma-3-27b-it`. - ### OpenRouter / OpenAI / Ollama + - `OPENROUTER_API_KEY`: Your API key. - `OPENROUTER_MODEL`: Defaults to `google/gemma-3-27b-it:free`. - `OPENROUTER_BASE_URL`: Defaults to `openrouter.ai`. (Change to `localhost:11434` for Ollama). -## Installation +### Google Gemini -Place `gemini_flash.py` into the `searx/plugins` directory of your instance (or mount it in a container) and enable it in `settings.yml` with a new plugin block setting it to active. +- `GEMINI_API_KEY`: Your Google AI API key. +- `GEMINI_MODEL`: Defaults to `gemma-3-27b-it`. + +## How It Works + +After search completes, the plugin extracts the top 6 results as context. A client-side script calls the stream endpoint with a signed token. The LLM response streams back. Token by token rendering is soon. + +## Ollama (Local) + +``` +LLM_PROVIDER=openrouter +OPENROUTER_API_KEY=ollama +OPENROUTER_MODEL=gemma3:27b +OPENROUTER_BASE_URL=localhost:11434 +``` diff --git a/gemini_flash.py b/ai_answers.py similarity index 99% rename from gemini_flash.py rename to ai_answers.py index fb299e2..abbf8a2 100644 --- a/gemini_flash.py +++ b/ai_answers.py @@ -12,7 +12,7 @@ TOKEN_EXPIRY_SEC = 60 CONNECTION_TIMEOUT_SEC = 30 class SXNGPlugin(Plugin): - id = "gemini_flash" + id = "ai_answers" def __init__(self, plg_cfg): super().__init__(plg_cfg) diff --git a/test_standalone.py b/test_standalone.py index ce3730a..fb73091 100644 --- a/test_standalone.py +++ b/test_standalone.py @@ -37,7 +37,7 @@ sys.modules["searx"] = searx sys.modules["searx.plugins"] = searx_plugins sys.modules["searx.result_types"] = searx_results -from gemini_flash import SXNGPlugin +from ai_answers import SXNGPlugin from flask_babel import Babel app = Flask(__name__)