These docs are outdated. Read the latest.
0.9.3.1 — 2026-08-02
Packaging
- Ship P1-46 distribution documentation
0.9.3 — 2026-07-30
Bug Fixes
- Return 413 for oversized ingest (R2-07)
- [core] Fix CSV column loss on blank/dup headers; collapse meta keys
- Reject invalid collection names on ingest (B2)
- Reject overlong ingest docids (B6)
- Reject non-object ingest metadata (B7)
- Fail fast on macOS direct SBERT with FAISS (B3)
- Keep catalog metrics off request path (B4)
- Accept case-insensitive Bearer scheme in static auth (B10)
- Fix dev loopback coercion in enforce_policy (B9)
- Harden auth/config startup validation (R4-70, R4-71)
- Break circular import via lazy LocalStore export (B11)
- Map encode outages to 503 (B12)
- Let filters import standalone (B11)
- Defer negated metadata filters (B14)
- Import embedder config from its owner (B11)
- Preserve BYOV vectors across restart (B13)
- Hold search slots through timeouts (B16)
- Bootstrap admin key in workers (B17)
- Preserve collection config on catalog recovery (B15)
- Guard query cache identity (R3-77)
- Keep cancelled search slots occupied (B16)
- Backfill legacy collection config sidecars (B15)
Documentation
- Document GitLab MR workflow
- Fix README auth key (R1-01)
- Refresh compose and env examples (R1-02, R2-08, R2-09, R2-10)
- Fix embedder_label example to colon form (R4-38)
- List all reference pages in README, prettify links
- Document embedder..* global fallback keys (R4-44)
- Mark release reproducibility complete (P3-40)
- Clarify legacy env mapping was temporary (R4-37)
- Regen OpenAPI snapshot: batch 413 response (B8)
- Fix embedder and CSV docstring drift (R4-76)
- Align embedder label examples (R4-38)
- Mark rebrand plan historical
- Remove stale bench-stress findings note
- Clarify benchmark artifact storage (R6-59)
- Explain Docker volume persistence (B20)
- Correct CLI selector order (R2-79)
- Forward Docker auth key (B20)
Core
- Register local client provider
- Share local client surface with client package
- Point local client surface at Python SDK
- Honor include_common search opt-in
- Commit schema migration explicitly (R3-22)
- Replace config in place so child views stay live (R3-15)
- Order multi-collection write locks by key, not id (R3-17)
- Close orphaned embedder worker on cache eviction (R3-16)
- Re-encode search query if embedder swapped mid-flight (R3-23)
- Validate native embedder device; fail fast on unavailable/invalid (B1)
- Fix instance path defaults (B5)
- Return not-found for vanished collection updates (R3-36)
- Support string not-equal filters (R2-74)
- Add identity (raw-vector/BYOV) embedder
Testing
- Align CLI query listing tests (R2-06)
- Drop unused fake embeddings helper (R4-48)
- Prune redundant API coverage
- Remove leftover test noise (R4-50)
- Release timed-out search worker instead of sleeping 5s
- Remove misnamed dead tests/init.py (R4-51)
- Cover close() reader-drain path (R4-52)
- Reproduce close() racing an in-flight read (R4-46)
- Drop duplicate CSV ingest API tests (R4-47)
- Trim duplicate auth status tests (R4-45)
- Cover batch metadata validation (B7)
- Cover single-doc ingest encode lock scope (R3-18)
- Assert canonical negation filtering (B14)
- Close pytest resources deterministically (R3-80)
API
- Share current_store dependency (R3-63)
- Map update_collection not_found structurally, not by message (R3-36)
- Validate name and report not_found on delete_collection (R3-28)
- Reject metadata-only multipart ingest (R1-67)
- Reject invalid POST search k values (R2-68)
- Gate health metrics behind admin auth (R4-69)
- Enforce batch ingest size limit (B8)
- Add tenant-scoped collection move route (R3-30)
- Classify invalid document ingest errors (R1-73)
- Add raw-vector fields to ingest and search schemas (BYOV chunk 2)
- Gate BYOV: identity vectors-only, embedding dim validation (BYOV chunk 3)
- Validate BYOV dimensions (P1-64)
- Validate raw-vector document metadata (P1-64)
Infrastructure
- Prepare release mirror state
- Add GitLab issue sync
- Remove config import fallbacks (R1-61)
- Source issue keys from commits only, not the MR description
- Drop phantom PAVEDB_CONFIG from Docker image (R4-39)
- Bench: cache HF model + 120s startup timeout on cold runners
- Sync B/F/G issue keys, not just R/P
- Auto-retry jobs on runner/system failures (max 2)
- Retry source checkout fetches
- Allow reserved review issue suffixes
- Warn on reserved review issue suffix gaps (R4-66)
Build
- Regenerate third-party licenses from runtime closure (P3-40)
- Publish runtime pip-freeze snapshot on release tags (P3-40)
- Build only the CPU image in CI; rename torch-wheel selector (P3-40)
- Tighten requirement pins after dependency due-diligence
- [cli] Drop source-tree shell wrappers (R4-65)
- Copy pyproject metadata in Dockerfile (R4-42)
- Remove invalid Torch floor (R6-58)
- Copy project license into Docker image (R3-78)
Store
- Drop dead bare-list handling from search output (R4-55)
- Remove unreachable async _flush_caches close path (R3-12)
- Snapshot embedder caches before orphan scan (R3-16)
- Use concrete FAISS backend in LocalStore (R4-53)
- Drop custom SearchOutput equality (R4-55)
- Release catalog guard before bootstrap (R3-13)
- Drain active readers before close (R4-52)
- Keep filtered metadata on one snapshot (R6-56)
Config
- Parse list-valued env overrides (R2-11)
- Drop .gitignore un-ignore for nonexistent example (R4-40)
- Package favicon.ico in pave.assets (R6-57)
- Drop dead scripts/*.sh include from MANIFEST.in (R4-41)
- Align pave.toml Python version with setup.py (R4-43)
- Ignore local tenants file (R4-40)
- Reject invalid text chunk overlap (R3-75)
Packaging
- Remove archived patchvec shim (R3-64)
- Remove qdrant stub (R1-60, R4-54)
- Replace BaseStore ABC with protocol (R2-62)
- Sanitize default docids (R2-05, R4-27)
- Move ingest size limit into service (R2-07)
- Drop unused imports stale from relocated archive logic (R4-34)
- Rename pave.toml to pyproject.toml so its tables are discovered (R4-42)
Log
- Harden metrics persistence (R1-03, R2-04)
- Assign ops-log handle before dest in configure (R3-19)
- Drain executors before flushing metrics on shutdown (R3-24)
- Drop redundant lock around stdout dest assignment
- Split query-log writer from document writes (R3-20)
SDK
- Scope SDK get_query/replay to tenant+collection (R3-33)
- Return the move envelope from SDK _rename (R3-32)
- Map no_text_extracted to InvalidRequest in the SDK (R3-31)
- Align local rename return contract (R3-32)
- Reach BYOV search/add through the public client (B18)
CLI
- Reject non-object –filters early (R3-26)
- Include vector_space_key in CLI collection listing (R3-29)
- Validate collection name on create, drop auto-slug (R3-35)
- Return JSON errors for malformed options (B19)
Performance
- Stabilize local vector stress tails
- Walk catalog metrics outside the metrics lock (R3-21)
- Remove historical benchmark dumps (R6-59)
Plan
- Record v0.9.3 final review
Refactor
- Unify tenant cap logic via tenant_limit_gate (R4-72)
UI
- Refresh app icon artwork and regenerate favicon
0.9.2 — 2026-06-20
Core
- Add batch document ingest (P1-16)
- Add JSON document ingest (P1-16)
- Single-source config schema in pave/config package (P1-53c)
- Centralize branding in version.py; promote CLI runtime flags to global
- [conf] Add embedder instance registry (P1-58)
- [fix] Stop spurious force-exit, especially under –reload
- Add embedder inventory endpoints (P1-59)
Log
- Create log parent dirs and disable cleanly on open failure
- Show instance name in startup banner and reflow config fields
- Log store SEARCH-IN at debug level
- [fix] Route uvicorn access log to file via log_config
- Add HTTP request metrics middleware (P1-49)
- Polish startup banner and warmup logging
- Preserve public v1 paths in HTTP metrics
Documentation
- Add generated CLI reference docs (P1-53b)
- [core] Document store protocol contract (P3-26)
- [core] Add module and class docstrings on public seams (P1-53d)(P3-26)
- [build] Add OpenAPI contract snapshot (P1-53e)
Config
- Tweak production-ready defaults (static auth, file logs)
- Rely on schema defaults for config reads
- Standardize config access calls
API
- [doc] Add OpenAPI reference metadata (P1-53a)
- Add embedded/library mode client (P1-15)
Build
- Wire dev serve flags for workers, reload, and instance name
- Recreate stale PaveDB venvs
Performance
- Refactor benchmark server config, restore bench model
- Cover batch document ingest endpoint (P2-48)
CLI
- Add parser metadata for CLI reference (P1-53b)
UI
- Migrate served template to centralized branding tokens
0.9.1 — 2026-06-15
Core
- Move embedder specs onto embedder modules (P1-32)
- Convention-based embedder dispatch (P3-49)
- Add OllamaEmbedder as a thin OpenAI-compatible wrapper for a local Ollama dae…
- Replace startup warmup with store.warm() behind a config knob (P3-48)
- Align typing policy with SDK boundaries (P1-57)
Store
- [fix] Treat concurrent-delete race in search as 404
- [fix] Stop persisting embedder defaults that bust the load cache
- Remove _system tenant carve-outs
- [fix] Keep health probes off the per-collection lock walk
- Hoist query embedding out of the collection read lock
API
- Add collection model specs and move/update APIs (P1-32)
- Return 503 for unavailable embedders (P1-32)
Performance
- Cover collection update and move APIs (P1-32)
0.9.0 — 2026-06-11
API
- Get document by ID endpoint (P1-17)
- Per-collection embedder params in create-collection (P1-32 prep)
- Add ok field to search response (P1-14)
- Add response models for CRUD endpoints (P1-14)
- Mount API routes under /v1/ prefix (P1-43)
- Expose timing breakdown in search response (P1-40)
- Add X-Request-ID middleware (P1-11)
- Echo request_id and latency_ms in all JSON response bodies (P1-11)
- List documents endpoint (P1-44)
- Enrich list collections response (P1-45)
- Get collection detail endpoint (P1-45)
- Log search queries + collection-scoped query log endpoints (P1-41)
- Reject search-body request_id; use X-Request-ID (P1-48)
- Query replay endpoint (P1-42)
- Admin query-home resolver + shortcut routes + CLI rework (P1-51)
- [fix] make global searches go through the ops_event annotation and generate o…
- Add actor field to ops_log events (P2-46)
- [cli] Add chunk inspector endpoints and commands (P2-23)
- [bench] Surface search query IDs for stress replay (P2-48)
Store
- Add CatalogDB catalog store (P1-33)
- Wire CatalogDB into LocalStore (P1-33)
- Return SearchOutput with per-phase timing (P1-40)
- Persist query logs in per-collection meta.db (P1-41)
- Enrich query_log with historical scope and actor (P2-46)
- Consolidate pre-1.0 SQLite schemas
- [fix] Avoid collection reopen races after cache flush
- [fix] Avoid CatalogDB reopen races after cache flush
- [fix] Wait for SQLite writers before closing DB handles
- [fix] Serialize archive restore with store ops (P1-52)
- [fix] Keep search hydration under collection lock (P1-52)
- [fix] Serialize SQLite read connections (P1-52)
- [fix] Replace documents atomically during ingest (P1-52)
- Allow concurrent same-collection reads (P1-52)
- [fix] Make catalog updates atomic (P1-52)
- [fix] Return 409 for rename target collisions (P1-52)
- [fix] Pin cached collection reads during races (P1-52)
- [fix] Reopen vector backend after collection rename (P1-52)
Performance
- [fix] Disambiguate bench-stress coverage-pass misses
- [fix] Preserve ephemeral server logs on benchmark failure
- [fix] Fail when managed benchmark server exits (P2-48)
- Add critical/full stress suites (P2-48)
- Auto-discover stress ops for full suite (P2-48)
- Warn on stress coverage gaps and race outcomes (P2-48)
- Add stress ops for remaining OpenAPI endpoints (P2-48)
- Add bench-stress-full target (P2-48)
Build
- Defer release commit until local validation passes
- Keep version in one file
- [fix] Avoid eager embedder loads in build-check (P3-52)
- [fix] Force BuildKit on docker build
- [fix] Use validated bash for make recipes
- Make release builds opt-in and name dev artifacts
UI
- Align docs UI with PaveDB theme
- Regroup API browser tabs and tag groups
- Add API browser tab deep links
- Add contextual hints to API browser tabs
- Simplify API browser wording and chrome
CLI
- Add query log inspection commands (P1-41)
- Add collection and document inspection commands (P1-44 P1-45)
- Add collection config args to create-collection (P1-45)
- Add explicit common-merge search flag
Core
- [fix] Normalize _do_search error results
- [fix] Cross-check scoped query lookup against query_home
- [fix] Isolate SBERT from server process on macOS (P3-26)
- [fix] Prefer current SBERT dimension API (P3-26)
Documentation
- Update roadmap and plan docs
- Document store concurrency model (P1-52)
- [fix] Default to non-cpu quick startup
Testing
- CatalogDB integration + upgrade tests (P1-33)
- Make LocalStore tests use temp_data_dir explicitly
- Consolidate collection API tests into one file
Log
- Improve server failure diagnostics (P1-52)
- Clarify concurrency cap diagnostics (P1-20)
Infrastructure
- Rename GitLab CI config file
Packaging
- Finalize PaveDB rebrand (P3-35)
0.9 series — Rebrand to PaveDB
Breaking changes
PATCHVEC_*env vars are no longer recognized; usePAVEDB_*- Default instance home is
~/pavedb/instead of~/patchvec/ - Docker image renamed to
pavedb - Published registry path is now
registry.gitlab.com/flowlexi/pavedb/pavedb:*
0.5.9 — 2026-04-03
Store
- CollectionDB read-only open for fallback reads
- Close abandoned CollectionDBs on cache flush
- Extract vector backend seam (P1-29a)
- Clean VectorBackend protocol, add FaissBackend, activate embedder path (P1-29b)
- Adapt SbertEmbedder to Embedder protocol (P1-29b)
- Add QdrantVectorBackend stub (P1-29b)
- [fix] validate FAISS index dimension on load
- [fix] harden chunk/archive I/O against TOCTOU races
- Add chunk_meta CollectionDB storage (P1-29c)
- Add exact-negation CollectionDB pushdown (P1-29c)
- Sanitize metadata keys and values before inserting to chunk metadata table
- Split document/chunk metadata storage and pushdown (P1-29c)
- Remove dead txtai backend and legacy methods (P1-37)
- Simplify filter path — pass normed_filters directly to filter_by_meta (P1-37)
- Drop txtai dependency, promote SbertEmbedder to default (P1-37)
- Rename TxtaiStore → FaissStore, simplify file names, reshape provider-scoped…
- Fix filter_by_meta mixed-OR key narrowing incorrect results
- Reject invalid sanitized metadata keys (P1-36)
- Extract filters and sanitization to pave/filters.py (P1-31)
- LocalStore orchestrator replaces FaissStore (P1-31)
Build
- Fix make install-dev output under .ONESHELL
- Update make check to use faiss config
- Add make build-check target (P3-52)
- Include openai extra in Docker image
- Add make docker-check target (P3-51)
- Gate release on smoke checks
- Rename build/CI identifiers and benchmark labels to pavedb (P3-35)
Documentation
- Add third-party license audit and dependency policy
- Add Step 2 benchmark results to
docs/PLAN-STORE.md(before/after FAISS cuto… - Refresh docs for faiss/sbert naming (P1-37)
- Clarify collection logical-vs-physical mapping
- Remove unsupported qdrant runtime mode references
- Add inspectability/control layer to roadmap
Performance
- Implement variant filtering latency modes, with fresh model per variant run a…
- Latency results before and after metadata k,v table implementation, several f…
- Benchmarks after txtai removal
- Add –slo-p99-ms exit gate to search_latency (P2-30)
- Add –max-error-pct exit gate to stress (P2-30)
- Wire SLO flags into Makefile targets (P2-30)
Config
- Fix tenants sidecar precedence and dev config loading
- Temporarily map supported legacy
PATCHVEC_*env vars toPAVEDB_*during the phase-1 migration; removed in the 0.9 rebrand series (P3-35) - [fix] isolate default config state across instances
Service
- Add error logging at all ok:false service layer return sites (P2-40)
- [fix] wrap create_collection and health probe in collection_lock
- [fix] reorder archive restore and lock exclusion, rewrite data_export tests (…
Testing
- Drop unsafe skipped concurrent upsert race case
- Rename test_faiss_* → test_store_* (P1-31)
- Add opt-in public relevance regression checks (P2-29)
Tests
- FaissBackend and TxtaiEmbedder tests.
- Cover chunk_meta CollectionDB storage (P1-29c)
- Cover pushdown edge cases (P1-29c)
API
- Split main.py routes into APIRouter modules (P3-50)
Bug Fixes
- Harden store lifecycle races found by bench-stress
CLI
- [conf] add explicit instance bootstrap and runtime paths (P1-34)
Core
- Rename operator-visible identifiers to pavedb (P3-35)
Deps
- Package sbert runtime and relevance deps
Infrastructure
- Add benchmark CI job with SLO gate (P2-30)
0.5.8.1 — 2026-03-07
API
- [cli] add list-tenants and list-collections endpoints and commands
- Ensure latency_ms in all /search returns (incl. common disabled)
- Normalize error envelope and make document delete idempotent
- Reject uploads exceeding configurable size limit (default 500 MB)
- Search timeout + concurrency cap (P1-20)
- Ingest concurrency cap (P1-20 follow-up)
- Per-tenant concurrent request cap (P1-08)
- Expose server HW info in /health/metrics
Documentation
- Add coding style, commit message standards to developer docs
- Revamp ROADMAP structure, priorities, and release ordering
- Config.yml.example full docs pass
- [bench] baseline benchmark results before SQLite metadata store
- [perf] Phase 1 benchmark results + impl comparison (winner:impl2)
- Plan large scale store refactor
Performance
- Rebalance stress weights; error tracking in both scripts
- Improve benchmark scripts, make targets, and docs
- Improve benchmark resilience: retry on failed seeds and add –debug mode
- Run header, unified table format, sample results; tune stress duration/concur…
- Stress: coverage pass for ops not picked during timed phase
- Fix op_delete_collection: remove from world only after success
Store
- Migrate legacy txtai indexes missing documents/objects/sections tables
- Phase 1 SQLite per-collection meta.db — impl2 (read/write split conn)
- [tests] fix has_doc cache race and add regression test
- [search] scope metadata fetch to top-k when no post-filter
- Store-backed catalog metrics (P1-21) + validation hardening
- Accept optional doc_meta and pass it explicitly to SQLite upsert
Core
- Add collection rename functionality across all layers
- Standardize naming across API, CLI, and service layers
- Add SearchResult dataclass for type-safe search results
- Lazy build_app(): app only initialised on first access
- Replace key with character in TXT preprocessor (P2-41)
Log
- Dev stream cleanup (P2-28)
- Ops stream: pave/log.py, ops_event decorator, 8 routes (P2-28)
- Merge diverging log level configs, set defaults, surface log.level as source…
- Migrate dev stream from config.py to log.py; ~ expansion for log paths
- Add top result excerpt to search log line
Build
- Make release re-run safety, docker-build/push USE_CPU parity
- Fix docker-build/push error propagation on sub-make failure
- [docs] overhaul Makefile release flow and project docs
Config
- Ingest timeout guidance: expose timeout_keep_alive, nginx proxy hints
- Complete _DEFAULTS, ~ path expansion, fix Makefile env vars
- Default path ~/patchvec/config.yml; expand PATCHVEC_CONFIG too
Testing
- Speed up suite 5x: inject FakeEmbeddings for non-slow tests
- [store] fix Python 3.12 sqlite3 DeprecationWarning; silence SwigPy noise
Infrastructure
- Remove deploy jobs, add docker RC build, fix tag patterns
Packaging
- Changelog generation goes back to last tag in changelog itself not in git his…
Service
- Fix _flush_store_caches: drop refs, do not close() connections
0.5.7 — 2026-02-21
Store
- Ensure CRLF-rich documents round-trip intact
- Sanitize txtai metadata persistence (closes #3)
- Prevent infinite recursion with deeply nested collections
- Push !-prefixed filters into SQL pre-filter instead of post-filter, reducing…
- Change default embedding model to multilingual and add multilingual cross lan…
- Build a match_reason as part of the search return contract
- Fixed race condition in get_lock() with double-checked locking pattern using…
- Replace eval() with operator module in filter matching
- Replace assert with runtime check in index_records
- Fix collection_lock usage across all TxtaiStore methods
- [fix] Disable meta-device loading so that Pooling.to() works on PyTorch>=2.6…
Documentation
- Refresh workflows and roadmap
- Revise roadmap based on technical evaluation
- [test] Document and test the live-data-update path (purge + ingest)
- Added benchmark suite documentation
- Update short description (ABOUT.md) to reflect recent workflow changes
Build
- Push torch cpu requirement to 2.8+
- Add cpu/gpu extras with proper torch wheel selection and python version. Clos…
- Fix assets package and license definitions in setup.py
- Consolidate deps into setup.py, single source of truth
Core
- Add feature to dump entire datastore as .zip file (api and cli)
- Add feature to push/restore data archive from zip backup (api and cli)
- [metrics] Persist metric across app resets and add metrics reset cli utility…
- Pretty terminal logging with colors and level-based filtering
API
- Add latency histograms (p50/p95/p99)** on for search and ingest
- Structured request logging with request_id, added latency and request_id to s…
- [cli] Add delete document by ID endpoint and command
Performance
- Add concurrent stress test exercising all supported API operations
- Eagerly load embedding model at server startup
Bug Fixes
- Atomic writes, coalesced metrics flush, Makefile benchmark targets
Config
- Implement initial/decent multilevel logging support
Infrastructure
- Add benchmarks/ directory with search latency load test
Packaging
- Revamp the automated changelog generation script
Chores
- Update ROADMAP.md
- Update to Python 3.10+ type hint syntax
- Update copyright notices to 2026, add missing copyright headers
- Use Python 3.10+ typing syntax; warn on corrupt index
- Small fix in README.md to make docs consistent with docker image naming scheme
- Update project urls
0.5.6 — 2025-10-29
Core
- Added ingestion timestamps to document metadata and improved CSV ingestion controls (headers, meta columns and include lists).
- Hardened API boot by forcing string-based Uvicorn startup and gating document purges
behind
has_docchecks. - Normalized service entrypoint configuration, including stricter binding and authentication safeguards.
- Standardized request metrics emission and activated service-level telemetry across the API.
Store
- Prevented FAISS index overwrites on multi-document ingests and ensured index directories are created eagerly.
- Improved FAISS store concurrency through SQL filtering hooks, stronger locking, and thread-safe helpers.
- Guaranteed text chunks are persisted and hydrated when vector content retrieval falls back to storage.
- Ensured
txtai_storeconsistently returns search text results.
Build & Packaging
- Added dedicated Makefile targets for local deployment, e2e checks (still needs work) and dependency cleanup.
- Enabled the Docker build pipeline with split GPU/CPU flows, refined image tagging, and updated startup scripts.
- Extended release automation with PyPI publishing support, GitLab pipeline steps, and tuned Makefile/setup.py metadata.
- Updated dependency sets, including explicit
faiss-cpusupport and auxiliary tooling definitions inpave.toml.
Config
- Introduced multilevel logging defaults and refreshed the example embedding model to a multilingual preset.
- Expanded configuration backend coverage with additional tests.
UI
- Added a lightweight Swagger/OpenAPI UI with branding, authorization helpers, and contextual headers/footers.
Testing
- Simplified store mocks by pinning default embedding models and cleaning up legacy FAISS test shims.
Misc
- Updated project metadata, copyright headers, and ignore lists.
- Advanced version markers for intermediate dev builds and release tags (0.5.5 → 0.5.6devN).
0.5.5 — 2025-09-02
Core
- Added CSV ingestion configuration knobs (headers, meta columns, include filters).
- Implemented default document ID handling to overwrite vectors deterministically on re- ingest.
- Fixed authentication edge cases and expanded accompanying tests.
- Ensured request metrics are emitted consistently across the API surface.
Build & Packaging
- Added an end-to-end Makefile target and improved startup scripts with dependency cleanup steps.
- Extended release automation with Docker targets and a PyPI publishing flow.
- Refined dependency management by bundling
faiss-cpufor CPU builds andsqlite4for testing.
Store
- Made FAISS-backed collections initialize their index structure on creation.
- Corrected the txtai store path so search responses always include original text payloads.
Commits
- [buid] Add e2e check target and cleanup Makefile
- [build] Enhance startup scripts, add dependency clean Makefile target
- [core] Add CSV ingestion options: headers (yes|no), meta_cols and include_cols
- [core] Add default docid behavior so that vectors are seamlessly overriden when same file is ingested even if no docid is provided
- [core] Fixed txtai_store to handle indexes correctly and always return search text.
- [core] Fixing auth and adding tests
- [core] Normalize entry point config and add binding and auth safeguards for prod envs
- [core] Standardize request metrics in API and enable service metrics in service pipeline
- [pkg] Add docker targets and make further adjustments do Makefile
- [pkg] Add pypi publish makefile target
- [pkg] Fix dependencies: add sqlite4 to testing and explicitly add faiss-cpu to cpu- only target
- [store] Make sure FAISS indexes and dir structure are initialized upon collection creation.
- Fix .gitlab-ci.yml file
0.5.4 — 2025-08-12
Feat
- initial public release of PatchVec — multi-tenant, pluggable vector search microservice
0.5.3 — 2025-08-12
Config
- Introduced minimal
.env.example(required vars only;PATCHVEC_scheme) - Clarified tenants secrets via untracked
tenants.yml
Packaging
- Added Makefile-based release flow (tests gate release; Docker/compose versions bumped automatically)
- Added Gitlab & Github CI/CD workflows (not tested)
Docs
- Split README into README.md (end-user) and CONTRIBUTING.md (dev)
- Added REST examples with
curl - Documented uvicorn server overrides via
HOST,PORT,RELOAD,WORKERS,LOG_LEVEL - Trimmed Quickstart and added PyPI install path
0.5.2 — 2025-08-12
Testing
- Added CSV and PDF ingestion/search
- Adjusted test cases for FastAPI’s stricter body/query validation.
Arch
- Added
TxtaiEmbedderas default; addedOpenAIEmbedderandSbertEmbedder.
API
- Fixed
POST /searchroute to acceptSearchBodyvia JSON body.
Other
- Added
docker-composerstub
0.5.1 — 2025-08-11
Testing
- Added comprehensive pytest test suite covering:
- Collection creation/deletion
- Document ingestion & search (TXT)
- Re-ingestion with purge
- Expanded pytest coverage for TXT ingestion, re-ingestion, and search.
- Fixed relative import issues in tests.
Arch
- Refactored store and embedder factories to use Python 3.10+
matchsyntax. - Standardized naming (
*_store,*_emb).
Auth
- Refactored authentication/authorization into
auth_ctx()andauthorize_tenant()using FastAPI dependency injection. - Authorization now automatically derives tenant from bearer token when applicable.
API
- Unified GET and POST search behavior.
0.5 — 2025-08-11
Testing
- Added
DummyStorefor testing.
Arch
- Isolated vector store interfaces via ABC (
BaseStore) for plug-in stores (Qdrant, FAISS, etc.). - Added
StoreFactoryandEmbedderFactorywith runtime store/embedder selection (pluggable backends).
API
- Added
/healthendpoint with general metrics and alive status
0.4 — 2025-08-10
- Modularized codebase:
stores/for vector store backends.embedders/for embedding backends.auth.pyfor authentication/authorization implementation.service.pyfor main logic implementation (abstracted from api and cli interfaces).cli.pyfor cli implementation.main.pyfor endpoint routing and default initialization.preprocess.pyfor file ingestion helpers.metrics.pyfor metrics implementation.
0.3 — 2025-08-09
- Added QdrantStore skeleton (methods unimplemented).
- Added
OpenAIEmbedderproof of concept (not tested). - Introduced
CFGfor unified cfg management. - Added complete cli mode
0.2 — 2025-08-08
- Implemented multi-tenant routing (
/{tenant}/{collection}). - Added basic static authentication via global or per-tenant API keys.
- Added document ingestion and collection management endpoints.
0.1 — 2025-08-07
- First working prototype with:
- FastAPI service with search endpoint.
- FAISS store and Sbel embeddings.
- Command-line TXT ingestion and REST
searchendpoint. - Single-tenant mode.
- Minimal auth stub.