Changelog
All notable changes to Search Toolkit are documented here.
0.0.13
Breaking changes
Embedding model on the schema
create_schema()andcreate_default_schema()now takeembedding_model(anEmbeddingModelorMistralEmbeddingPreset) instead ofembedding_dimensions: int.embedding_dimensionsis deprecated (emits aDeprecationWarningand builds aCustomEmbeddingModel(name="unknown")under the hood); passing both raisesValueError.VespaSchemaDefinition.embedding_dimensionsis replaced byembedding_model: EmbeddingModel, threading the full model config (name, dimensions, dtype, distance metric) through the schema layer.VespaSearchIndexnow exposes anembedding_modelproperty.
Improvements
- Added a Postgres search backend (
mistralai-search-toolkit-plugins-postgres) as a second index alongside Vespa.PostgresStoreIndeximplementsVectorStoreIndex(dense and hybrid search),NavigableIndex(navigate/read/grep/get_chunk), andPatchableIndex(partial updates). AVectorSearchQuerythat carries bothqueryandembeddingruns BM25 (pg_textsearch) and HNSW (pgvector) retrieval fused by weighted reciprocal rank fusion; the newPostgresSearchQuerytunesvector_weight/text_weight/rrf_k. ThePostgresAppmirrors the Vespa app'sget_search_index(config, collection)shape, and collections are declared withPostgresCollectionSchema(collection_name, document_type, embedding_model). Requires thevectorandpg_textsearchextensions provisioned in the target database. - Added an
EmbeddingModelabstraction (embedding/models.py) as the single source of truth for vector config:MistralEmbeddingModelandCustomEmbeddingModel(discriminated union viaEmbeddingModel), theMistralEmbeddingPresetenum (MISTRAL_EMBED_DIM_1024/MISTRAL_EMBED_DIM_256/MISTRAL_EMBED_DIM_128) withbuild_embedding_model(), plusVectorDType(FLOAT32/FLOAT16),DistanceMetric(COSINE/INNER_PRODUCT/L2), and aVectorConfigprotocol. SmartPDFExtractorandLegacyOfficeExtractornow accept anyDocumentExtractoras an OCR delegate instead of requiringMistralOCRExtractor, so a deployment with no reachable Mistral API can supply its own engine.- Added opt-in text-first PDF extraction via
pdf_min_chars_per_page(PdfTextFirstExtractor); off by default. PDFs dispatched to the heuristic leave.docx/.pptx/.odt/.epuband image attachments on the OCR route untouched. - Threaded
exclude_idsthrough the retrieval layer:QueryEngine.search(..., exclude_ids=...) forwards to retrievers and onto the search query.CachedQueryEngine.search forwards it and bypasses the cache when exclusions are set.
Bugfixes
- Updated
markdownifyfrom>=0.14,<1to>=1.0.0,<2and adapted the custom converter to the 1.x API.
0.0.12
Breaking changes
Checkpoint serialization
- A new
document/serialization.pymodule introduces aDocumentTypeRegistryand stable type ids so that document classes can be round-tripped through an external service safely.
Improvements
- Added
MistralClientConfigandbuild_mistral_client()to centralize Mistral SDK client creation for whole pipelines. - Added
SmartPDFExtractor, which chooses between PyMuPDF and Mistral OCR automatically for PDFs that already have a text layer. - Added
EmailWithAttachmentsExtractor, which adds attachment text to the parent email's Markdown under an## Attachmentssection. - Improved error reporting for ingestion problems.
Bugfixes
- Deterministic ingestion failures now fail faster.
Chores
- Bumped
mistralaito>=2.9.1,<2.10. - Bumped
dynaconffrom>=3.2.11to>=3.3.4. - Renamed the
mistralai.search.toolkit.embeddersmodule tomistralai.search.toolkit.embedding. A backward-compatibleembeddersshim re-exports public symbols and emits aDeprecationWarning. See the Embedders page.
0.0.11
Improvements
- For ingestion, made extraction checkpoints (saving snapshots between stages, for faster retrying) a backend-agnostic capability.
Pipeline(checkpoint_store=...)accepts anyObjectStoragebackend and saves checkpoints between the ingestion stages;run_file(..., checkpoint_key=...)loads and saves the extraction result so retries and re-ingestion skip re-extraction. - Introduced a
DocumentProcessorprotocol for ingestion, unifyingTextSplitter,Embedder, andChunkEnricher. - Added map-reduce summarization for long documents:
SummarizeRequestConfigwithoverflow_strategy: OverflowStrategy.MAP_REDUCEcan split a document, summarize the different parts, and merge them into a final summary. See the Summary Enricher. - Added OCR v4 features: inline markdown table embedding in page chunks, per-chunk confidence scores, and basic bounding-box support.
- Added a
PatchableIndexcapability withpatch_chunkandpatch_documentfor partial updates onDOCUMENT_PER_CHUNKindices, avoiding a full re-index when only metadata changes. - Added
get_chunk(chunk_id)to theNavigableIndexprotocol. - Vespa: added
set_default_ranking_weights()to bake default ranking-feature weights into a schema and its default query profile. See Manage ranking. - Vespa: added a phase-1 vector
closenessranking function for embedding fields, putting vector relevance into candidate selection. See Ranking profiles. - Vespa:
BoolFieldgained afast_searchoption.
Bugfixes
- Sanitize illegal Unicode code points (lone surrogates) from extracted content.
Chores
- Updated
mistralaibound from<2.7to<2.9. - Bumped
pypdffrom 6.13.3 to 6.14.2. - Bumped
azure-storage-blobto 12.30.0.
0.0.10
Improvements
- Added embeddings batch API support for ingestion:
MistralEmbedder.run_batch_embedding_job()can be used to lower embedding costs for large ingestion jobs. - Added header-aware token-budgeted chunking for ingestion: new
ParagraphTokenTextSplitterandMarkdownTokenTextSplittersplitters. See the Text splitters page. - Added a
NavigableIndexprotocol withnavigate,read, andgrepmethods for positional chunk navigation onDOCUMENT_PER_CHUNKindices. - Vespa: added YQL search on
DocumentPerChunkSearchIndexviaVespaSearchQuery, with ranking tuning and chunk-id exclusion (exclude_ids). See Manage ranking.
Bugfixes
- Fixed
TokenTextSplitterreporting wrong offsets for repeated content.
Chores
- Relaxed the toolkit
mistralaiconstraint to>=2.5.0,<2.7.
0.0.9
Breaking changes
Document model
Search Toolkit now uses a unified document model built around Document and DocumentChunk, with a deterministic identity derived from a source_id and a locator. See the Document model page for full details.
- Extractors now produce
DocumentChunkobjects directly; the separate page representation has been removed. Document.idandDocumentChunk.idare now computed deterministically fromsource_id(pluslocatorfor chunks), making indexing idempotent. The explicitidfield onFileanddocument_idonDocumentChunkhave been removed.- Added
source_id,locator,parent_ref, andchunk_typeas first-class fields, along with typed, extensible metadata models. The same identity contract is mirrored onSearchResultChunk.
Vespa indexing model
Vespa now indexes one chunk per document via the new DOCUMENT_PER_CHUNK indexing mode, which becomes the recommended model. The previous single-document model is deprecated.
- Added the
DOCUMENT_PER_CHUNKindexing mode, including default fields, ranking profiles, and the full write, delete, and search paths. See Anatomy of a Vespa application. - Added an
IndexingModeto the schema definition with deprecation hooks for migrating existing schemas. - The index API is split into a base
VespaSearchIndexand a dedicatedSingleDocumentSearchIndex; the single-document model is deprecated in favor ofDOCUMENT_PER_CHUNK. - The schema
id_fieldis deprecated and is no longer allowed forDOCUMENT_PER_CHUNKindexes.
Other
- Renamed the
indicesmodule tosearch. Update imports accordingly.
Improvements
- Added blob-storage
FileLoaderimplementations for S3, Azure, and GCS, plus astorage-s3extra. See the File loaders page. - Added OCR model literals and constants.
- Vespa: extracted a dedicated
VespaClientwith improved error handling. - Vespa: added a backend-agnostic services definition, topology v2, and a translator, with automatic v2 topology generation for single-node Docker deployments.
- Vespa: added Vespa-to-Vespa copy and index-to-streaming migration workflows.
- Vespa: emit a metrics consumer in
services.xml. - Vespa: warn when rank2 features are configured without rank1, and when ranking weights default to 0.
Security
- Updated
langchain-coreto~=1.4.
Bugfixes
- Vespa: rank by cosine similarity instead of euclidean distance.
- Vespa: fix retrieval of the document count.
- Vespa: thread
distribute_across_groupsintoload_topology_file. - Vespa CLI: lazy-import index registration SDK models.
- Treat truncated LLM responses as retryable and enrich
LLMException/SummaryGenerationErrorfor structured logging. - OCR extractor: use mimetype metadata for filetype detection.
- Added
text/x-fileandtext/x-script.pythonMIME types to the registry.
0.0.8
Initial release of Search Toolkit as a tech preview.