Skip to main content

Sententia

FastAPI-based search and RAG engine for local Markdown files, powered by FAISS and multilingual E5 embeddings.

Quick Start

Install:

pip install sententia

Run with OpenAI-compatible LLM:

sententia /path/to/markdown/docs \
  --llm-protocol openai \
  --llm-url https://api.openai.com \
  --llm-model gpt-4o \
  --llm-token sk-...

Run with Anthropic:

sententia /path/to/markdown/docs \
  --llm-protocol anthropic \
  --llm-url https://api.anthropic.com \
  --llm-model claude-sonnet-4-6 \
  --llm-token sk-ant-...

Run with Ollama (no API key needed):

sententia /path/to/markdown/docs \
  --llm-protocol ollama \
  --llm-url http://localhost:11434 \
  --llm-model llama3

Features

  • Semantic search — FAISS index with intfloat/multilingual-e5-base embeddings
  • RAG Q&A — retrieve relevant chunks and generate answers via LLM
  • Multiple LLM providers — OpenAI, Anthropic, Ollama
  • Dual interface — REST API server or MCP server (Model Context Protocol)
  • File access — read original Markdown files by relative path

Usage

sententia DATA_DIR [OPTIONS]
Option Description Default
DATA_DIR Path to Markdown files directory (required)
--index-path Path to FAISS index file (persisted) in-memory
--llm-protocol LLM provider: openai, anthropic, ollama (required)
--llm-url LLM API base URL (without /v1 version path) (required)
--llm-model LLM model identifier (required)
--llm-token API key (falls back to SENTENTIA_LLM_TOKEN env var) —
--host Server bind address 0.0.0.0
--port Server port 8000
--mcp Run as MCP server instead of REST API false

Reference

REST API

Search documents

POST /search
{ "query": "how to configure logging", "top": 10 }

Response:

{
  "results": [
    { "text": "...", "source": "docs/guide.md", "score": 0.87 }
  ]
}
Parameter Type Default Description
query string "" Search query
top integer 10 Number of results (1–100)

Ask a question (RAG)

POST /ask
{ "query": "how to configure logging" }

Response:

{
  "answer": "To configure logging...",
  "sources": ["docs/guide.md", "docs/reference.md"]
}
Parameter Type Default Description
query string "" Question to answer

Read file

GET /files/{path}

Response:

{ "text": "file contents...", "source": "docs/guide.md" }

MCP Tools

Launch with --mcp flag to expose tools via Model Context Protocol.

search — Search for relevant documents in the knowledge base.

Parameter Type Default Description
query string — Search query
top integer 10 Number of results

Returns list of { text, source, score }.

ask — Ask a question and get an answer based on indexed documents.

Parameter Type Default Description
query string — Question to answer

Returns { answer, sources }.

files — Read file content by path.

Parameter Type Default Description
path string — Relative file path

Returns { text, source }.

Development

Clone and install with dev dependencies:

git clone https://github.com/qarium/sententia.git
cd sententia
pip install -e ".[test]"

Run tests:

pytest

Lint:

ruff check sententia tests

Metadata

Release files for sententia 0.0.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for sententia 0.0.0
File Size Uploaded Provenance
sententia-0.0.0.tar.gz 68.2 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for sententia 0.0.0
File Interpreter ABI Platform
sententia-0.0.0-py3-none-any.whl Python 3 none any Details

Total release size: 125.3 kB

Release files / sententia-0.0.0.tar.gz

Download URL sententia-0.0.0.tar.gz
Size 68.2 kB
Tags Source
SHA-256 checksum
How to use checksums
2e16ec3459f564af044dab9fbb58d3cf1d8f855fcf61006e378b753d41aa6c92
BLAKE2b-256 checksum
How to use checksums
bae1f0871c1ace20324a992169720a7b4f6f205e7f421050993b136df37ffaa6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.12

Release files / sententia-0.0.0-py3-none-any.whl

Download URL sententia-0.0.0-py3-none-any.whl
Size 57.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
bd990e99709c0dd43d1a6eaf9638fa79b8a71f42e31ce0eb32e8c8b41d21443c
BLAKE2b-256 checksum
How to use checksums
1179932414df80c6bc575e873ebe7f2d00332880869c9b6ee1188b081aa9b569
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.12

Security for sententia 0.0.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Release history Release notifications | RSS feed

This release

0.0.0 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page