Releases: marqo-ai/marqo
Releases · marqo-ai/marqo
Release 2.3.0
2.3.0
New features
- New
update_documents
API (#773). Structured indexes now support high throughput partial updates to non-tensor fields. Unstructured indexes do not support partial updates. See usages here - The custom vectors feature is now supported again for both structured and unstructured indexes (#777). You can now add externally generated vectors to Marqo documents. See usages here
Bug fixes and minor changes
- Fix an issue where non-default distance metrics are not configured correctly with unstructured indexes (#772).
- Introduce a guide for running Marqo open source in production environments, offering insights and best practices (#775).
- Remove outdated examples from the README to improve clarity and relevance (#766).
Contributor shout-outs
- A huge thank you to all our 4k stargazers! This is a new milestone for Marqo!
- Stay connected and share your thoughts on our forum and Slack channel! Your insights, questions, and feedback are always welcome and highly appreciated.
Release 2.2.1
Release 2.2.0
2.2.0
New features
- Support filtering on document ID with structured indexes. This was already supported with unstructured indexes (#749)
- New structured index data types:
long
,double
,array<long>
andarray<double>
for a higher precision and range of values Available for indexes created with Marqo 2.2+ (#722) - Higher precision numeric fields for unstructured indexes. Unstructured indexes created with Marqo 2.2+ will use double precision floats and longs for a higher precision and wider range of values (#722)
- Numeric value range validation. Values that are out of range for the field type will now receive a 400 validation error when adding documents. (#722)
Bug fixes and minor changes
- Fix unstructured index bug where filtering for boolean-like strings (e.g.,
"true"
) would not work as expected (#709) - Better handling of vector store timeouts. Marqo will now return a 429 (throttled) error message when the backend vector store is receiving more traffic than it can handle(#758)
- Improved error logging. Stack trace will now always be logged (#745)
- Better API 500 error message. Marqo will no longer return verbose error messages in the API response (#751)
- Default index model is now hf/e5-base-v2 (#710)
- Improve error messages (#746, #747)
- Improve error handling at startup when vector store is not ready. Marqo will now start and wait for vector store to become available (#752)
Contributor shout-outs
- A huge thank you to all our 3.9k stargazers!
- Thank you @Dmitri for helping us identify the issue with running Marqo on older AMD64 processors!
Release 2.1.0
2.1.0
New features
- Search result maximum limit and offset greatly increased. Maximum
limit
parameter increased from 400 to 1,000,offset
increased from 1,000 to 10,000. Maximum value forMARQO_MAX_RETRIEVABLE_DOCS
configuration is now 10,000 (#735, #737). See searchlimit
andoffset
usage here
Bug fixes and minor changes
- Improved the Marqo bootstrapping process to address unexpected API behaviour when no index has been created yet (#730).
- Improved validation for
create_index
settings (#717, #734). Usingdependent_fields
as a request body parameter will now raise a 400 validation error. - Improved data parsing for documents in unstructured indexes (#732).
- Made vector store layer config upgrades and rollbacks easier (#735, #736).
- Readme improvements (#729).
2.0.1
Also included in this release
Bug fixes and minor changes
Release 2.0.0
2.0.0
New features
- Significant queries-per-second (QPS) and latency improvements in addition to reduced memory and storage requirements. Get a higher QPS and a lower latency for the same infrastructure cost, or get the same performance for much cheaper! In our large-scale experiments, we have achieved 2x QPS improvement, 2x speed-up in P50 search latency and 2.3x speed-up in P99 search latency, compared to previous Marqo versions.
- Significantly improved recall. You can now get up to 99% recall (depending on your dataset and configuration) without sacrificing performance.
- Support for bfloat16 numeric type. Index 2x more vectors with the same amount of memory for a minimal reduction in recall and performance.
- Structured index. You can now create structured indexes, which provide better data validation, higher performance, better recall and better memory efficiency.
- New API search parameter
efSearch
. Search API now accepts an optionalefSearch
parameter which allows you to fine-tune the underlying HNSW search. IncreaseefSearch
to improve recall at a minor cost of QPS and latency. See here for usage. - Exact nearest neighbour search. Set
"approximate": false
in the Search API body to perform an exact nearest neighbour search. This is useful for calculating recall and finding the bestefSearch
for your dataset. See here for usage. - New approximate nearest neighbour space types. Marqo now supports
euclidean
,angular
,dotproduct
,prenormalized-angular
, andhamming
distance metrics. L1, L2 and Linf distance metrics are no longer supported. The distance metric determines how Marqo calculates the closeness between indexed documents and search queries. - Easier local runs. Simply run
docker run -p 8882:8882 marqoai/marqo:2.0.0
to start Marqo locally on both ARM64 (M-series Macs) and AMD64 machines.
Breaking changes
- Create index API no longer accept the
index_defaults
parameter. Attributes previously defined in this object, liketextPreprocessing
, are now moved out to the top level settings object. See here for details. - Create index API's
filterStringMaxLength
parameter determines the maximum length of strings that are indexed for filtering (default value 20 characters). This limitation does not apply to structured indexes. See here for details. - Most APIs now require camel case request bodies and return camel case responses. See create index, search and add documents for a few examples.
- New Marqo configuration parameters See here for usage.
- Search response
_highlights
attribute is now a list of dictionaries. See here for new usage. - Add documents multimodal fields are defined as normal fields and not dictionaries. Furthermore, the mappings object is optional for structured indexes. See here for usage.
- Add documents does not accept the
refresh
parameter anymore. - The following features are available in Marqo 1.5, but are not supported by Marqo 2.0 and will be added in future releases:
- Separate models for search and add documents
- Prefixes for text chunks and queries
- Configurable document count limit for add documents. There is a non-configurable limit of 128 in Marqo 2.0.
- Custom (externally generated) vectors and
no_model
option for index creation. - Optional Search API
q
parameter when searching with context vectors.
Contributor shout-outs
- Thank you to the community for your invaluable feedback, which drove the prioritisation for this major release.
- A warm thank you to all our 3.9k stargazers.
Release 1.5.1
Release 1.5.0
1.5.0
New Features
- Separate model for search and add documents (#633). Using the
search_model
andsearch_model_properties
key inindex_defaults
allows you to specify a model specifically to be used for searching. This is useful for using a different model for search than what is used for add_documents. Learn how to usesearch_model
here. - Prefixes for text chunks and queries enabled to improve retrieval for specific models (#643). These prefixes are defined at the
model_properties
level, but can be overriden at index creation, add documents, or search time. Learn how to use prefixes foradd_documents
here andsearch
here.
Bug fixes and minor changes
- Upgraded
open_clip_torch
,timm
, andsafetensors
for access to new models (#646). - Documents containing multimodal objects that encounter errors in processing are rejected with a 400 error (#631).
- Updated README: More detailed explanations, fixed formatting issues (https://github.com/marqo-ai/marqo/pull/629/files, https://github.com/marqo-ai/marqo/pull/642/files).
Contributor shout-outs
- A huge thank you to all our 3.7k stargazers!
- Thanks everyone for continuing to participate in our forum! Keep all your insights, questions, and feedback coming!
Release 1.4.0
1.4.0
Breaking Changes
- Configurable document count limit for
add_documents()
calls (#592). This mitigates Marqo getting overloaded
due to add_documents requests with a very high number of documents. If you are adding documents in batches larger than the default (64), you will now
receive an error. You can ensure your add_documents request complies to this limit by setting the Python client’sclient_batch_size
or changing this
limit via theMARQO_MAX_ADD_DOCS_COUNT
variable. Read more on configuring the doc count limit here. - Default
refresh
value foradd_documents()
anddelete_documents()
set tofalse
(#601). This prevents
unnecessary refreshes, which can negatively impact search and add_documents performance, especially for applications that are
constantly adding or deleting documents. If you search or get documents immediately after adding or deleting documents, you may still get some extra
or missing documents. To see results of these operations more immediately, simply set therefresh
parameter totrue
. Read more on this parameter
here.
New Features
- Custom vector field type added (#610). You can now add externally generated vectors to Marqo documents! See
usage here. no_model
option added for index creation (#617). This allows for indexes that do no vectorisation, providing
easy use of custom vectors with no risk of accidentally mixing them up with Marqo-generated vectors. See usage here.- The search endpoint's
q
parameter is now optional ifcontext
vectors are provided. (#617). This is
particularly useful when using context vectors to search across your documents that have custom vector fields. See usage here. - Configurable retries added to backend requests (#623). This makes
add_documents()
andsearch()
requests
more resilient to transient network errors. Use with caution, as retries in Marqo will change the consistency guarantees for these endpoints. For more
control over retry error handling, you can leave retry attempts at the default value (0) and implement your own backend communication error handling.
See retry configuration instructions and how it impacts these endpoints' behaviour here. - More informative
delete_documents()
response (#619). The response object now includes a list of document
ids, status codes, and results (success or reason for failure). See delete documents usage here. - Friendlier startup experience (#600). Startup output has been condensed, with unhelpful log messages removed.
More detailed logs can be accessed by settingMARQO_LOG_LEVEL
todebug
.
Bug fixes and minor changes
- Updated README: added Haystack integration, tips, and fixed links (#593, #602, #616).
- Stabilized test suite by adding score modifiers search tests (#596) and migrating test images to S3 (#594).
bulk
added as an illegal index name (#598). This prevents conflicts with the/bulk
endpoint.- Unnecessary
reputation
field removed from backend call (#609). - Fixed typo in error message (#615).
Contributor shout-outs
- A huge thank you to all our 3.7k stargazers!
- Shoutout to @TuanaCelik for helping out with the Haystack integration!
- Thanks everyone for keeping our forum busy. Don't hesitate to keep posting your insights, questions, and feedback!
Release 1.3.0
1.3.0
New features
- New E5 models added to model registry (#568). E5 V2 and Multilingual E5 models are now available for use. The new E5 V2 models outperform their E5 counterparts in the BEIR benchmark, as seen here. See all available models here.
- Dockerfile optimisation (#569). A pre-built Marqo base image results in reduced image layers and increased build speed, meaning neater docker pulls and an overall better development experience.
Bug fixes and minor changes
- Major README overhaul (#573). The README has been revamped with up-to-date examples and easier to follow instructions.
- New security policy (#574).
- Improved testing pipeline (#582 & #586). Tests now trigger on pull request updates. This results in safer and easier merges to mainline.
- Updated requirements files. Now the
requirements.dev.txt
should be used to install requirements for development environments (#569). Version pins forprotobuf
&onnx
have been removed while a version pin foranyio
has been added (#581, & #589). - General readability improvements (#577, #578, #587, & #580)
Contributor shout-outs
- A huge thank you to all our 3.5k stargazers!
- Shoutout to @vladdoster for all the useful spelling and grammar edits!
- Thanks everyone for keeping our forum bustling. Don't hesitate to keep posting your insights, questions, and feedback!
Release 1.2.0
1.2.0
New features
-
Storage status in health check endpoint (#555 & #559). The
GET /indexes/{index-name}/health
endpoint'sbackend
object will now return the booleanstorage_is_available
, to indicate if there is remaining storage space. If space is not available, health status will now returnyellow
. See here for detailed usage. -
Score Modifiers search optimization (#566). This optimization reduces latency for searches with the
score_modifiers
parameter when field names or weights are changed. See here for detailed usage.
Bug fixes and minor changes
- Improved error message for full storage (#555 & #559). When storage is full, Marqo will return
400 Bad Request
instead of429 Too Many Requests
. - Searching with a zero vector now returns an empty list instead of an internal error (#562).
Contributor shout-outs
- A huge thank you to all our 3.3k stargazers!
- Thank you for all the continued discussion in our forum. Keep all the insights, questions, and feedback coming!