Как работает Prometheus
Prometheus — это не «чат с моделью поверх Obsidian», а локальный RAG: индекс ваших Markdown-заметок, поиск по смыслу и генерация ответа строго по найденному контексту.
Три процесса на вашей машине
- Prometheus Plugin — Community Plugin: Chat, Search, Settings, Status, доступ к Vault API и жизненный цикл runtime.
- Prometheus Runtime — локальный sidecar: parsing, chunking, embeddings, sqlite-vec, retrieval, grounded prompt.
- Ollama — внешний локальный runtime для выбранной вами LLM.
┌─────────────────────────────────────────────────────────────┐ │ Компьютер пользователя │ │ │ │ ┌──────────────────────────────┐ │ │ │ Prometheus Plugin │ │ │ │ Chat / Search / Settings │ │ │ └──────────────┬───────────────┘ │ │ │ HTTP на 127.0.0.1 │ │ ▼ │ │ ┌──────────────────────────────┐ localhost │ │ │ Prometheus Runtime │────────────────────┐ │ │ │ Parser / Chunker / Retrieval │ ▼ │ │ │ FastEmbed / sqlite-vec │ ┌────────────┐ │ │ └──────────────────────────────┘ │ Ollama │ │ │ │ Local LLM │ │ │ └────────────┘ │ └─────────────────────────────────────────────────────────────┘
127.0.0.1, а не публичный сетевой API. Интернет после
установки runtime и моделей не нужен.
Что делает плагин
Плагин остаётся тонким. Он:
- рисует UI чата, поиска, статуса и настроек;
- читает Markdown через Obsidian Vault API;
- слушает события
create/modify/rename/delete; - скачивает, проверяет и запускает managed Runtime (или подключает custom binary);
- открывает заметку и heading по ссылке-источнику;
- передаёт документы и вопросы в Runtime по localhost.
Плагин не считает embeddings, не хранит vector index и не вызывает LLM напрямую.
Индексация vault
Когда меняется заметка, плагин с debounce читает файл и отправляет документ в Runtime:
- проверка Vault ID, Document ID и revision;
- пропуск, если
content_hashне изменился; - разбор Markdown и heading-aware chunking;
- генерация embeddings через FastEmbed;
- атомарный upsert в sqlite-vec + обновление SQLite manifest / FTS.
Операция идемпотентна: повтор с тем же hash не пересчитывает embeddings. Rename сохраняет Document ID, delete чистит chunks и vectors.
Query / RAG pipeline
Ответ на вопрос (Chat)
- embedding запроса;
- dense search (по умолчанию) по sqlite-vec;
- опционально hybrid dense + BM25 (FTS5) через weighted RRF;
- опциональный reranker (cross-encoder);
- отбор контекста под token budget;
- grounded prompt → Ollama → стриминг ответа + источники.
Семантический поиск (Search)
Тот же retrieval-компонент, но без вызова LLM: вы получаете список релевантных фрагментов и можете открыть заметки напрямую.
PROMETHEUS_RETRIEVAL_MODE=dense|hybrid.
Reranker включается отдельно через PROMETHEUS_RERANKER_ENABLED.
Grounding policy
Модели явно указывается опираться только на переданный контекст.
Если найденных chunks недостаточно, Runtime возвращает состояние
insufficient_context — продукт должен сказать об этом
пользователю, а не заполнять пробелы «общими знаниями» модели.
Где лежат данные
- Vault Markdown — единственный источник истины, внутри Obsidian vault.
- Runtime binary, embeddings index, модели — вне vault и вне
.obsidian/plugins, чтобы не попадать в Obsidian Sync / Git. - Ollama model weights — в каталоге Ollama на вашей машине.