mirror of
https://github.com/arsvendg/Stirling-PDF.git
synced 2026-07-14 10:34:06 +02:00
# Description of Changes Adds storage in the database for full document content alongside the RAG content (and changes the service to `DocumentService` instead of `RagService`). Then adds a generic capability that should be usable by any agent (currently just used by the Question Agent) which allows the agent to pull out the full contents of the doc, chunks it into various sections that will fit in the context window, and then processes them in parallel to create an intermediate result, and then processes the intermediate result into a final answer. It will re-chunk as many times as necessary to get the content small enough for the actual answer to be analysed (I've tested on PDFs ~3500 pages long, which is well above the context limit and requires maybe 3 rounds of compression to get an answer). The new full doc analysis stuff is heavier than the RAG lookup so both remain. The agents should use RAG for targeted info and the chunked reasoner for info that requires reading the full doc.
75 lines
3.4 KiB
Bash
75 lines
3.4 KiB
Bash
###############################################################################
|
|
# Environment variables used within the AI Engine.
|
|
# Values can be overridden in the uncommitted sibling `.env.local` file.
|
|
# Note: This file is committed to Git, so should not contain any private keys.
|
|
###############################################################################
|
|
|
|
# Configure the model strings passed to pydantic-ai. Provider credentials are handled by
|
|
# pydantic-ai and should be set using the provider's native environment variables, for example
|
|
# ANTHROPIC_API_KEY or OPENAI_API_KEY.
|
|
STIRLING_SMART_MODEL=anthropic:claude-haiku-4-5
|
|
STIRLING_FAST_MODEL=anthropic:claude-haiku-4-5
|
|
|
|
# Default output token limits applied by the engine for each model tier.
|
|
STIRLING_SMART_MODEL_MAX_TOKENS=8192
|
|
STIRLING_FAST_MODEL_MAX_TOKENS=2048
|
|
|
|
# RAG Configuration — retrieval-augmented generation is always on.
|
|
# Embedding provider credentials are handled natively (e.g. VOYAGE_API_KEY for VoyageAI).
|
|
STIRLING_RAG_EMBEDDING_MODEL=voyageai:voyage-4
|
|
|
|
# Vector store backend: "sqlite" (embedded) or "pgvector" (external Postgres).
|
|
STIRLING_RAG_BACKEND=sqlite
|
|
|
|
# Path to the sqlite-vec database file (used when backend=sqlite).
|
|
STIRLING_RAG_STORE_PATH=data/rag.db
|
|
|
|
# Postgres DSN for pgvector (used when backend=pgvector). Leave empty when backend=sqlite.
|
|
# Example: postgresql://user:password@host:5432/dbname
|
|
STIRLING_RAG_PGVECTOR_DSN=
|
|
|
|
STIRLING_RAG_CHUNK_SIZE=512
|
|
STIRLING_RAG_CHUNK_OVERLAP=64
|
|
STIRLING_RAG_TOP_K=20
|
|
|
|
# Per-run cap on ``search_knowledge`` calls. After this many calls the tool is
|
|
# removed from the agent's toolset so it must answer from what it already retrieved
|
|
# rather than chain more searches.
|
|
STIRLING_RAG_MAX_SEARCHES=5
|
|
|
|
# Chunked reasoner settings: how big each per-worker slice is (in characters),
|
|
# how many workers may run in parallel against the fast model, and how long
|
|
# any single worker is allowed to wait for a response before being abandoned.
|
|
# Worker timeouts protect gather_notes from upstream model stalls (which
|
|
# otherwise hang at the provider's ~10 minute HTTP default); the affected
|
|
# slice is dropped and the rest of the document still answers.
|
|
STIRLING_CHUNKED_REASONER_CHARS_PER_SLICE=16000
|
|
STIRLING_CHUNKED_REASONER_CONCURRENCY=10
|
|
STIRLING_CHUNKED_REASONER_WORKER_TIMEOUT_SECONDS=60
|
|
|
|
# When the rendered slice notes would exceed this many characters, the
|
|
# reasoner folds them hierarchically with fast-model calls until they fit.
|
|
# This keeps the synthesis prompt under the model's context limit on long
|
|
# documents (a 3000-page novel produces ~900k chars of raw notes).
|
|
STIRLING_CHUNKED_REASONER_NOTES_CHAR_BUDGET=250000
|
|
|
|
# Upper bounds on PDF page text the engine will request per extraction round.
|
|
STIRLING_MAX_PAGES=200
|
|
STIRLING_MAX_CHARACTERS=200000
|
|
|
|
# PostHog analytics. Set STIRLING_POSTHOG_ENABLED=true and provide an API key to enable.
|
|
STIRLING_POSTHOG_ENABLED=false
|
|
STIRLING_POSTHOG_API_KEY=phc_VOdeYnlevc2T63m3myFGjeBlRcIusRgmhfx6XL5a1iz
|
|
STIRLING_POSTHOG_HOST=https://eu.i.posthog.com
|
|
|
|
# Log level for the stirling logger hierarchy (DEBUG, INFO, WARNING, ERROR)
|
|
STIRLING_LOG_LEVEL=INFO
|
|
|
|
# Path to log file. Rolls daily, keeps 1 backup. Leave empty for console only.
|
|
STIRLING_LOG_FILE=
|
|
|
|
# Set true to log every outgoing httpx / Anthropic SDK request with timing.
|
|
# Use when diagnosing worker stalls: a hung call shows a "Request" line with
|
|
# no matching "Response" line. Noisy; leave off in normal use.
|
|
STIRLING_HTTP_DEBUG=false
|