Skip to content

Latest commit

 

History

History
933 lines (682 loc) · 81.8 KB

RELEASE.md

File metadata and controls

933 lines (682 loc) · 81.8 KB

Release 2.13.0

New features

  • Searchable attributes for unstructured indexes (#968). This new feature allows you to specify which lexical or tensor fields to include in your search queries, providing greater control over the search process. By customizing your search parameters, you can enhance the precision of your results across all search types: tensor, lexical, and hybrid. This feature is available for unstructured indexes created with Marqo 2.13 or later. For detailed guidance, please refer to the API reference and comparison of unstructured and structured indexes
  • Support for stella_en_400M_v5 embedding models (#1021). This feature adds compatibility for the Stella 400M text embedding models, enhancing the versatility of Marqo in handling diverse model types. Users can now use the hf_stella model type in their custom models. Please refer to stella model guide for details.
  • Allow specifying pooling method for Hugging Face models (#954). Marqo can now infer the pooling method and accept user provided pooling method in model properties. For detailed examples, please refer to this document about bringing your own Hugging Face model.

Bug fixes and minor changes

  • Normalize custom vectors during indexing when normalizeEmbeddings is set to True for indexes created with Marqo 2.13 or later (#970). This fix ensures that custom vector fields align with other tensor fields in terms of normalization, resulting in more accurate search results and improved overall performance.
  • Enhanced query parser for double quotes (#979). This feature introduces improved parsing logic for handling double quotes in search queries, allowing for greater flexibility and resilience against syntax errors. Badly formatted and escaped quotes no longer lead to 500 status errors. Please refer to the lexical search guide for more details and examples.
  • Bug fix for score modifiers handling (#1008). This update resolves an issue related to the handling of score modifiers in queries, specifically those involving the period . character. Users will now experience smoother query operations without encountering internal errors, ensuring that score modifiers are correctly applied.
  • Bug fixes for media download and query handling (#1022). Users can now successfully download private media files by using the new mediaDownloadHeaders parameter, which will replace the deprecated imageDownloadHeaders. Additionally, the fix resolves issues preventing the inclusion of more than two modalities in weighted queries, along with support for indexing .png images in Languagebind models.

Contributor shout-outs

  • Shoutouts to our valuable 4.6k stargazers!
  • Thanks a lot for the discussion and suggestions in our community. We love to hear your thoughts and requests. Join our Slack channel and forum now.

Release 2.12.5

Bug fixes and minor changes

  • Fix a bug where authentication is not correctly passed when loading a private model. Marqo can now load custom models from private repositories correctly (#1010).

Release 2.12.4

Bug fixes and minor changes

  • Fix inference time regression from 2.11 to 2.12 where inference time increased unexpectedly (#1005).

Release 2.12.3

Bug fixes and minor changes

  • Fix bug where users upgrading from indexes created with Marqo 2.11 to 2.12 would encounter an error when using the get_settings API endpoint (#1003).

Release 2.12.2

Bug fixes and minor changes

  • Upgrade the Pillow and nltk packages (#989).
  • Fix a bug where normalizeEmbeddings=False is not honored for some indexes (#994).

Release 2.12.1

Bug fixes and minor changes

  • Fix a bug where when treatUrlsAndPointersAsImages is unset and treatUrlsAndPointersAsMedia is set, Marqo returns an error where treatUrlsAndPointersAsImages cannot be False when treatUrlsAndPointersAsMedia is True (#971)
  • Add new video-audio model LanguageBind/Video_V1.5_FT_Audio_FT to the model registry (#971).

Release 2.12.0

New features

  • Add support for video and audio modalities using LanguageBind models (#931). You can now index, embed, and search with video and audio files using Marqo, extending your search capabilities beyond text and images.
  • Load OpenCLIP models from HuggingFace Hub (#939). Support loading OpenCLIP models directly from HuggingFace by providing a model name with the hf-hub: prefix. This simplifies model integration and expands your options.
  • Load custom OpenCLIP checkpoints with different image preprocessors (#939). Allow loading a custom OpenCLIP checkpoint with a different image preprocessor by providing imagePreprocessor in the model properties. This offers greater flexibility in model selection and customization.

Bug fixes and minor changes

  • Fix tokenizer loading for custom OpenCLIP checkpoints (#939). The correct tokenizer is now applied when custom OpenCLIP model checkpoints are loaded.
  • Improve error handling for image_pointer fields in structured indexes (#944). Structured indexes now have targeted error reporting for non-image content in image_pointer fields. This improvement prevents batch failures and provides clearer feedback to users.

Contributor shout-outs

  • Shoutouts to our valuable 4.5k stargazers!
  • Thanks a lot for the discussion and suggestions in our community. We love to hear your thoughts and requests. Join our Slack channel and forum now.

Release 2.11.4

Bug fixes and minor changes

  • Fix duplication of results in RRF hybrid search (#957). Resolved an issue where some results in Reciprocal Rank Fusion (RRF) hybrid search were duplicated, ensuring more accurate and unique search results.

Release 2.11.3

Bug fixes and minor changes

  • Support S3 custom model without explicit credentials (#948).

Release 2.11.2

Bug fixes and minor changes

  • Fix an issue where CUDA was not automatically selected as the default device for the embed endpoint, even when available #941.

Release 2.11.1

Bug fixes and minor changes

  • Added a default User-Agent header (Marqobot/1.0) and enabled automatic redirection handling when downloading images (#932). This enhancement allows Marqo to correctly process image URLs that require a User-Agent header or redirection.

Release 2.11.0

New features

  • Hybrid Search for unstructured indexes ("searchMethod": "HYBRID”) (#912). Marqo now supports hybrid search for unstructured indexes, combining lexical and tensor search (e.g., using reciprocal rank fusion - RRF) to provide the best relevance possible. See usage here. Please note that hybrid search only works on a fresh Marqo 2.11.0 instance without state transfer for now. This is a limitation that we will address in the next release.
  • Marqo Terraform provider is now available on both OpenTofu Registry and Terraform Registry. See usage here

Bug fixes and minor changes

  • Improve the error handling of batch add/update/get documents API (#911). Now each document in a batch request has its individual response status with detailed error message. See details here
  • Fix incorrect or missing prefixes for some models in the registry (#917). This change improves all BGE models, all Snowflake models, and multilingual-e5-large-instruct. For example, snowflake-arctic-embed-l model has 34% improvement in NDCG@10 on the Arguana benchmark and 153% improvement in NDCG@10 on the FIQA benchmark.
  • Increase the maxHits and maxOffset limit to 1,000,000 in the default query profile. (#914). This allows user to override MARQO_MAX_SEARCH_LIMIT and MARQO_MAX_SEARCH_OFFSET environment variables to large values up to one million. Please note that this is an advanced setting and very large values aren’t normally recommended.
  • Fix a bug that causes 400 error when using hybrid search with LEXICAL retrieval method and TENSOR ranking method and scoreModifiersLexical (#922).

Contributor shout-outs

  • Huge shoutout to all our 4.4k stargazers! We’ve come a long way as a team and as a community, so a huge thanks to everyone who continues to support Marqo.
  • Feel free to keep on sharing questions and feedback on our forum and Slack channel! If you have any more inquiries or thoughts, please don’t hesitate to reach out.

Release 2.10.2

Bug fixes and minor changes

  • Fix an issue where CUDA was not automatically selected as the default device for the embed endpoint, even when available #941.

Release 2.10.1

Bug fixes and minor changes

  • Improve the clarity of the error message when Marqo can not download the provided image (#905).
  • Improve the error message in hybrid search to avoid confusion (#900).
  • Fix a bug where a 500 error is returned when an unsupported search method is provided. Marqo now correctly returns a 400 error (#899).
  • Fix a bug where a 500 error is returned when an invalid image URL with non-ASCII characters is provided. Marqo now encodes the image URL correctly (#908).

Release 2.10.0

New features

  • Hybrid Search ("searchMethod": "HYBRID”) (#845). Marqo now supports hybrid search, combining lexical and tensor search (using reciprocal rank fusion) to provide the best relevance possible. See usage here.
  • Lexical Search score modifiers (#884). Score modifiers are now supported for lexical search. Score modifiers are applied on all matches, not just the top k retrieved, resulting in more relevant hits. See usage here.

Bug fixes and minor changes

  • Increase unstructured index default filterStringMaxLength to 50, from 20 (#887). Maximum length of string fields to be used in query filters now defaults to 50 characters long.

Contributor shout-outs

  • Huge shoutout to all our 4.3k stargazers! We’ve come a long way as a team and as a community, so a huge thanks to everyone who continues to support Marqo.
  • Feel free to keep on sharing questions and feedback on our forum and Slack channel! If you have any more inquiries or thoughts, please don’t hesitate to reach out.

Release 2.9.0

New features

  • Numeric map data type. Add numeric map data types, available for filtering and score modification (#851). You can now store a map/dictionary of numeric value and use these in your filters and score modifiers, or simply retrieve these with your documents. See the new types here. For usage in search, see here. This is supported only for indexes created with Marqo 2.9 or later.
  • Double and long score modifier fields. Support double and long in map and standard numeric fields for score modifiers in both structured and unstructured indexes (#851). You can now use double values with full precision as score modifiers, as well as integers with guaranteed precision up to 2^53 - 1 (increased from 2^24 - 1), with only negligible precision loss for larger values. For details on these new types, see the documentation here.

Bug fixes and minor changes

  • Fix the bug in score modifiers where missing score modifiers in docs used in multiply_score_by lead to the multiplication of scores by 0 instead of by 1 (#851).
  • Improve upgrade stability (#874). Fix failure of state transfer between some versions of Marqo due to Vespa binaries being copied with state. For more information, see the documentation here
  • Improve the model warmup strategy on instances with CUDA (#877). Marqo now requires less memory to warmup the models when spinning up .
  • Improve create/delete index resilience to partial failures (#866). You can now bring Marqo to a consistent state by repeating the operation until getting a 200 response.

Contributor shout-outs

  • Shoutouts to our valuable 4.3k stargazers!
  • Thanks a lot for the discussion and suggestions in our community. We love to hear your thoughts and requests. Join our Slack channel and forum now.

Release 2.8.2

Bug fixes and minor changes

  • Fix an issue in Marqo where loading some models (e.g., open_clip/xlm-roberta-base-ViT-B-32/laion5b_s13b_b90k) is unsuccessful. This was resolved by upgrading the transformers and optimum packages. (#868)

Release 2.8.1

Bug fixes and minor changes

  • Fix a bug in Marqo where a 500 error is returned for the entire batch of documents when encountering an invalid document ID during image downloading. Marqo now correctly returns an error and rejects the invalid document, allowing successful indexing of other valid documents with a 200 response. (#860)

Release 2.8.0

New features

  • Improve add_documents memory efficiency and throughput for CLIP and Open_CLIP models when indexing documents with images when no patch method is used (#849). The image downloading and preprocessing logic has been improved. Marqo now converts the images to tensors directly after downloading. In our tests, the memory usage has been reduced by 37.5% and the throughput has been increased by 7.5% (subject to your settings). Marqo is also more stable when indexing documents in a multi-threading scenario.
  • Add support for pre-warming patch models (#847). See usage here.

Bug fixes and minor changes

  • Replace the requests package with pycurl for faster image downloads (#814). Marqo now downloads images 2-3x faster in our tests and the overall add_documents throughput is increased by 7.5%

Contributor shout-outs

  • Shoutouts to our valuable 4.2k stargazers!
  • Thanks a lot for the discussion and suggestions in our community. We love to hear your thoughts and requests. Join our Slack channel and forum now.

Release 2.7.2

Bug fixes and minor changes

  • Fix an issue causing an error during the Marqo shutdown process (#850). Marqo now shuts down properly without encountering errors.

Release 2.7.1

Bug fixes and minor changes

  • Resolve an issue where Marqo could not create or delete an index when not connected to the Zookeeper server (#848). Users can now create or delete an index without needing to connect to the Zookeeper server. However, please note that without the Zookeeper server, your request is not protected in concurrent scenarios. For guidance on configuring your Zookeeper server, refer to this documentation.

Release 2.7.0

New features

  • Update Open CLIP version and support new families of models, e.g., MetaCLIP, DatacompCLIP (#833). Update the Open CLIP version to 2.24.0 which includes new and state-of-the-art multimodal models. You can choose these models to build your index. Check here for the available models.
  • Support lexical search with only a filter (#840). Marqo now supports a match-all query ("*") with a filter in lexical search. This allows you to search your documents solely based on the filter content without considering the relevance. This is a community-requested feature (#770, #771) and we love to hear from our users.

Bug fixes and minor changes

  • Improve the thread safety of index creation and deletion operations (#838). Marqo now returns an operation_conflict_error(409) if users try to delete or create an index when there is another index creation or deletion in progress.
  • Fix a bug that an empty string lexical search query ("") returns a 500 error (#840). Marqo now returns an empty search result for such a query.
  • Address verbose logging at the WARNING level when attributes_to_retrieve excludes fields required to build highlights. (#837)

Contributor shout-outs

  • Shoutouts to our valuable 4.2k stargazers!
  • Thanks @jesse-lord and @afroozsheikh for requesting valuable features to improve Marqo!
  • Thanks a lot for the discussion and suggestions in our community. We love to hear your thoughts and requests. Join our Slack channel and forum now.

Release 2.6.0

New features

  • Support for custom and default prefixes (#821 and #832) in the index creation, adding documents, search, and embed endpoints. See usage for index creation here, adding documents here, search here, and embed here.

Bug fixes and minor changes

  • Improved recommender with structured indexes (#830)
  • Better handling of image download errors (#829). Image download errors will now return a 200 overall and log errors per document.

Contributor Shout-outs

  • Shoutout to all our 4.2k stargazers! Thanks for continuing to use our product and helping Marqo grow.
  • Keep on sharing your questions and feedback on our forum and Slack channel! If you have any more inquiries or thoughts, please don’t hesitate to reach out.

Release 2.5.1

Bug fixes and minor changes

  • More stable recommend endpoint (#825).
  • Change error code when using IN filter operator on an unstructured index (#823).
  • New index settings validation endpoint for Cloud use (#809).

Release 2.5.0

New features

  • New ‘embed’ endpoint (POST /indexes/{index_name}/embed) (#803). Marqo can now perform inference and return the embeddings for a single piece or list of content, where content can be either a string or weighted dictionary of strings. See usage here.
  • New ‘recommend’ endpoint (POST /indexes/{index_name}/recommend) (#816). Given a list of existing document IDs, Marqo can now recommend similar documents by performing a search on interpolated vectors from the documents. See usage here.
  • Add Inference Cache to speed up frequent search and embed requests (#802). Marqo now caches embeddings generated during inference. The cache size and type can be configured with MARQO_INFERENCE_CACHE_SIZE and MARQO_INFERENCE_CACHE_TYPE. See configuration instructions here.
  • Add configurable search timeout (#813). Backend timeout now defaults to 1s, but can be configured with the environment variable VESPA_SEARCH_TIMEOUT_MS. See configuration instructions here.
  • More informative get_cuda_info response (#811). New keys: utilization memory_used_percent have been added for easier tracking of cuda device status. See here for more information.

Bug fixes and minor changes

  • Upgraded open_clip_torch, timm, and safetensors for access to new models (#810)

Contributor shout-outs

  • Shoutout to all our 4.1k stargazers! Thanks for continuing to use our product and helping Marqo grow.
  • Keep on sharing your questions and feedback on our forum and Slack channel! If you have any more inquiries or thoughts, please don’t hesitate to reach out.

Release 2.4.3

Bug fixes and minor changes

  • Fix incorrect Marqo version number (#805). Version number updated from 2.4.1 to 2.4.3

Release 2.4.2

Bug fixes and minor changes

  • Better response for truncated images in add_documents (#797). Truncated images no longer cause a 500 error. The individual document will fail and return a 400 error in add docs response (full response will be a 200).

Release 2.4.1

Bug fixes and minor changes

  • Improve telemetry memory management (#800).

Release 2.4.0

New features

  • Add IN operator to the query filter string DSL (#790, #793, & #795). For structured indexes, you can now use the IN keyword to restrict text and integer fields to be within a list of values. See usage here.

  • Add no_model option for index creation (#789). 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.

  • Optional q parameter for the search endpoint if context vectors are provided. (#789). This is particularly useful when using context vectors to search across your documents that have custom vector fields. See usage here.

Bug fixes and minor changes

  • Improve error message for defining tensorFields when adding documents to a structured index (#788).

Contributor shout-outs

  • A huge thank you to all our 4.1k stargazers! We appreciate all of you continuing to use our product and helping Marqo grow.
  • Thanks for sharing your questions and feedback on our forum and Slack channel! If you have any more inquiries or thoughts, please don’t hesitate to reach out.

Release 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.3

New features

  • Add configurable search timeout (#843). Backend timeout now defaults to 1s, but can be configured with the environment variable VESPA_SEARCH_TIMEOUT_MS. See configuration instructions here.

Release 2.2.2

Bug fixes and minor changes

  • Improve telemetry memory management (#804).

Release 2.2.1

Bug fixes and minor changes

  • Fix response code for vector store timeout, change it from 429 to 504 (#763)

Release 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> and array<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

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 for MARQO_MAX_RETRIEVABLE_DOCS configuration is now 10,000 (#735​​, #737​​). See search limit and offset 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). Using dependent_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).

Release 2.0.1

Bug fixes and minor changes

  • Improved stability of use_existing_tensors feature in add_documents (#725).
  • Improved readability of Marqo start-up logs (#719).
  • Removed obsolete examples (#721, #723).

Release 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 optional efSearch parameter which allows you to fine-tune the underlying HNSW search. Increase efSearch 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 best efSearch for your dataset. See here for usage.
  • New approximate nearest neighbour space types. Marqo now supports euclidean, angular, dotproduct, prenormalized-angular, and hamming 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, like textPreprocessing, 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

Bug fixes and minor changes

  • Adding no_model to MARQO_MODELS_TO_PRELOAD no longer causes an error on startup. Preloading process is simply skipped for this model #657.

Release 1.5.0

New Features

  • Separate model for search and add documents (#633). Using the search_model and search_model_properties key in index_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 use search_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 for add_documents here and search here.

Bug fixes and minor changes

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

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’s client_batch_size or changing this limit via the MARQO_MAX_ADD_DOCS_COUNT variable. Read more on configuring the doc count limit here.
  • Default refresh value for add_documents() and delete_documents() set to false (#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 the refresh parameter to true. 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 if context 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() and search() 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 setting MARQO_LOG_LEVEL to debug.

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

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 for protobuf & onnx have been removed while a version pin for anyio 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

New features

  • Storage status in health check endpoint (#555 & #559). The GET /indexes/{index-name}/health endpoint's backend object will now return the boolean storage_is_available, to indicate if there is remaining storage space. If space is not available, health status will now return yellow. 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 of 429 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!

Release 1.1.0

New features

  • New field numberOfVectors in the get_stats response object (#553). This field counts all vectors from all documents in a given index. See here for detailed usage.

  • New per-index health check endpoint GET /indexes/{index-name}/health (#552). This replaces the cluster-level health check endpoint, GET /health, which is deprecated and will be removed in Marqo 2.0.0. See here for detailed usage.

Bug fixes and minor changes

  • Improved image download validation and resource management (#551). Image downloading in Marqo is more stable and resource-efficient now.

  • Adding documents now returns an error when tensorFields is not specified explicitly (#554). This prevents users accidentally creating unwanted tensor fields.

Contributor shout-outs

  • Thank you for the vibrant discussion in our forum. We love hearing your questions and about your use cases.

Release 1.0.0

Breaking Changes

  • New parameter tensor_fields will replace non_tensor_fields in the add_documents endpoint (#538). Only fields in tensor_fields will have embeddings generated, offering more granular control over which fields are vectorised. See here for the full list of add_documents parameters and their usage. The non_tensor_fields parameter is deprecated and will be removed in a future release. Calls to add_documents with neither of these parameters specified will now fail.

  • Multiple tensor field optimisation (#530). This optimisation results in faster and more stable searches across multiple tensor fields. Please note that indexed documents will now have a different internal document structure, so documents indexed with previous Marqo versions cannot be searched with this version, and vice versa.

  • The add_documents endpoint's request body is now an object, with the list of documents under the documents key (#535). The query parameters use_existing_tensors, image_download_headers, model_auth, and mappings have been moved to the body as optional keys, and support for these parameters in the query string is deprecated. This change results in shorter URLs and better readability, as values for these parameters no longer need to be URL-encoded. See here for the new add_documents API usage. Backwards compatibility is supported at the moment but will be removed in a future release.

  • Better validation for index creation with custom models (#530). When creating an index with a model not in the registry, Marqo will check if model_properties is specified with a proper dimension, and raise an error if not. See here for a guide on using custom models. This validation is now done at index creation time, rather than at add documents or search time.

  • Stricter filter_string syntax for search (#530). The filter_string parameter must have special Lucene characters escaped with a backslash (\) to filter as expected. This will affect filtering on field names or content that contains special characters. See here for more information on special characters and see here for a guide on using Marqo filter strings.

  • Removed server-side batching (batch_size parameter) for the add_documents endpoint (#527). Instead, client-side batching is encouraged (use client_batch_size instead of server_batch_size in the python client).

New Features

  • Multi-field pagination (#530). The offset parameter in search can now be used to paginate through results spanning multiple searchable_attributes. This works for both TENSOR and LEXICAL search. See here for a guide on pagination.
  • Optimised default index configuration (#540).

Bug Fixes & Minor Changes

  • Removed or updated all references to outdated features in the examples and the README (#529).
  • Enhanced bulk search test stability (#544).

Contributor shout-outs

  • Thank you to our 3.2k stargazers!
  • We've finally come to our first major release, Marqo 1.0.0! Thanks to all our users and contributors, new and old, for your feedback and support to help us reach this huge milestone. We're excited to continue building Marqo with you. Happy searching!

Release 0.1.0

New features

  • Telemetry. Marqo now includes various timing metrics for the search, bulk_search and add_documents endpoints when the query parameter telemetry=True is specified (#506). The metrics will be returned in the response body and provide a breakdown of latencies for various stages of the API call.
  • Consolidate default device to CUDA when available (#508). By default, Marqo now uses CUDA devices for search and indexing if available. See here for more information. This helps ensure you get the best indexing and search experience without having to explicitly add the device parameter to search and add_documents calls.
  • Model download integrity verification (#502). Model files are validated and removed if corrupted during download. This helps ensure that models are not loaded if they are corrupted.

Breaking changes

  • Remove deprecated add_or_update_documents endpoint (#517).
  • Disable automatic index creation. Marqo will no longer automatically create an index if it does not exist (#516). Attempting to add documents to a non-existent index will now result in an error. This helps provide more certainty about the properties of the index you are adding documents to, and also helps prevent accidental indexing to the wrong index.
  • Remove parallel indexing (#523). Marqo no longer supports server-side parallel indexing. This helps deliver a more stable and efficient indexing experience. Parallelisation can still be implemented by the user.

Bug fixes and minor changes

  • Improve error messages (#494, #499).
  • Improve API request validation (#495).
  • Add new multimodal search example (#503).
  • Remove autocast for CPU to speed up vectorisation on ARM64 machines (#491).
  • Enhance test stability (#514).
  • Ignore .kibana index (#512).
  • Improve handling of whitespace when indexing documents (#521).
  • Update CUDA version to 11.4.3 (#525).

Contributor shout-outs

  • Thank you to our 3.1k stargazers!

Release 0.0.21

New features

  • Load custom SBERT models from cloud storage with authentication (#474). Marqo now supports fetching your fine-tuned public and private SBERT models from Hugging Face and AWS s3. Learn more about using your own SBERT model here. For instructions on loading a private model using authentication, check model auth during search and model auth during add_documents.

  • Bulk search score modifier and context vector support (#469). Support has been added for score modifiers and context vectors to our bulk search API. This can help enhance throughput and performance for certain workloads. Please see documentation for usage.

Bug fixes and minor changes

Contributor shout-outs

  • A special thank you to our 3.0k stargazers!

Release 0.0.20

New features

  • Custom model pre-loading (#475). Public CLIP and OpenCLIP models specified by URL can now be loaded on Marqo startup via the MARQO_MODELS_TO_PRELOAD environment variable. These must be formatted as JSON objects with model and model_properties. See here (configuring pre-loaded models) for usage.

Bug fixes and minor changes

  • Fixed arm64 build issue caused by package version conflicts (#478)

Release 0.0.19

New features

  • Model authorisation(#460). Non-public OpenCLIP and CLIP models can now be loaded from Hugging Face and AWS s3 via the model_location settings object and model_auth. See here (model auth during search) and here (model auth during add_documents) for usage.
  • Max replicas configuration (#465). Marqo admins now have more control over the max number of replicas that can be set for indexes on the Marqo instance. See here for how to configure this.

Breaking changes

  • Marqo now allows for a maximum of 1 replica per index by default (#465).

Bug fixes and minor changes

  • README improvements (#468)
  • OpenCLIP version bumped (#461)
  • Added extra tests (#464)
  • Unneeded files are now excluded in Docker builds (#448, #426)

Contributor shout-outs

  • Thank you to our 2.9k stargazers!
  • Thank you to community members for the increasingly exciting discussions on our Slack channel. Feedback, questions and hearing about use cases helps us build a great open source product.
  • Thank you to @jalajk24 for the PR to exclude unneeded files from Docker builds!

Release 0.0.18

New features

  • New E5 model type is available (#419). E5 models are state of the art general-purpose text embedding models that obtained the best results on the MTEB benchmark when released in Dec 2022. Read more about these models here.
  • Automatic model ejection (#372). Automatic model ejection helps prevent out-of-memory (OOM) errors on machines with a larger amount of CPU memory (16GB+) by ejecting the least recently used model.
  • Speech processing article and example (#431). @OwenPendrighElliott demonstrates how you can build and query a Marqo index from audio clips.

Optimisations

  • Delete optimisation (#436). The /delete endpoint can now handle a higher volume of requests.
  • Inference calls can now execute in batches, with batch size configurable by an environment variable (#376).

Bug fixes and minor changes

  • Configurable max value validation for HNSW graph parameters (#424). See here for how to configure.
  • Configurable maximum number of tensor search attributes (#430). See here for how to configure.
  • Unification of vectorise output type (#432)
  • Improved test pipeline reliability (#438, #439)
  • Additional image download tests (#402, #442)
  • Minor fix in the Iron Manual example (#440)
  • Refactored HTTP requests wrapper (#367)

Contributor shout-outs

  • Thank you to our 2.8k stargazers!
  • Thank you community members raising issues and discussions in our Slack channel.
  • Thank you @jess-lord and others for raising issues

Release 0.0.17

New features

  • New parameters that allow tweaking of Marqo indexes' underlying HNSW graph. ef_construction and m can be defined at index time (#386, #420, #421), giving you more control over the relevancy/speed tradeoff. See usage and more details here.
  • Score modification fields (#414). Rank documents using knn similarity in addition to document metadata ( #414). This allows integer or float fields from a document to bias a document's score during the knn search and allows additional ranking signals to be used. Use cases include giving more reputable documents higher weighting and de-duplicating search results. See usage here.

Bug fixes and minor changes

  • Added validation for unknown parameters during bulk search (#413).
  • Improved concurrency handling when adding documents to an index as it's being deleted (#407).
  • Better error messages for multimodal combination fields (#395).
  • Examples of recently added features added to README (#403).

Contributor shout-outs

Release 0.0.16

New features

  • Bulk search (#363, #373). Conduct multiple searches with just one request. This improves search throughput in Marqo by parallelising multiple search queries in a single API call. The average search time can be decreased up to 30%, depending on your devices and models. Check out the usage guide here
  • Configurable number of index replicas (#391). You can now configure how many replicas to make for an index in Marqo using the number_of_replicas parameter. Marqo makes 1 replica by default. We recommend having at least one replica to prevent data loss. See the usage guide here
  • Use your own vectors during searches (#381). Use your own vectors as context for your queries. Your vectors will be incorporated into the query using a weighted sum approach, allowing you to reduce the number of inference requests for duplicated content. Check out the usage guide here

Bug fixes and minor changes

  • Fixed a bug where some Open CLIP models were unable to load checkpoints from the cache (#387).
  • Fixed a bug where multimodal search vectors are not combined based on expected weights (#384).
  • Fixed a bug where multimodal document vectors are not combined in an expected way. numpy.sum was used rather than numpy.mean. (#384).
  • Fixed a bug where an unexpected error is thrown when using_existing_tensor = True and documents are added with duplicate IDs (#390).
  • Fixed a bug where the index settings validation did not catch the model field if it is in the incorrect part of the settings json (#365).
  • Added missing descriptions and requirement files on our GPT-examples (#349).
  • Updated the instructions to start Marqo-os (#371).
  • Improved the Marqo start-up time by incorporating the downloading of the punkt tokenizer into the dockerfile (#346).

Contributor shout-outs

  • Thank you to our 2.5k stargazers.
  • Thank you to @ed-muthiah for submitting a PR (#349) that added missing descriptions and requirement files on our GPT-examples.

Release 0.0.15

New features

  • Multimodal tensor combination (#332, #355). Combine image and text data into a single vector! Multimodal combination objects can be added as Marqo document fields. For example, this can be used to encode text metadata into image vectors. See usage here.

Bug fixes

  • Fixed a bug that prevented CLIP's device check from behaving as expected (#337)
  • CLIP utils is set to use the OpenCLIP default tokenizer so that long text inputs are truncated correctly (#351).

Contributor shout-outs:

Release 0.0.14

New features

  • use_existing_tensors flag, for add_documents (#335). Use existing Marqo tensors to autofill unchanged tensor fields, for existing documents. This lets you quickly add new metadata while minimising inference operations. See usage here.
  • image_download_headers parameter for search and add_documents (#336). Index and search non-publicly available images. Add image download auth information to add_documents and search requests. See usage here.

Optimisations

  • The index cache is now updated on intervals of 2 seconds (#333), rather than on every search. This reduces the pressure on Marqo-OS, allowing for greater search and indexing throughput.

Bug fixes

  • Helpful validation errors for invalid index settings (#330). Helpful error messages allow for a smoother getting-started experience.
  • Automatic precision conversion to fp32 when using fp16 models on CPU (#331).
  • Broadening of the types of image download errors gracefully handled. (#321)

Release 0.0.13

New features

  • Support for custom CLIP models using the OpenAI and OpenCLIP architectures (#286). Read about usage here.
  • Concurrency throttling (#304). Configure the number of allowed concurrent indexing and search threads. Read about usage here.
  • Configurable logging levels (#314). Adjust log output for your debugging/log storage needs. See how to configure log level here.
  • New array datatype (#312). You can use these arrays as a collection of tags to filter on! See usage here.
  • Boost tensor fields during search (#300). Weight fields as higher and lower relative to each other during search. Use this to get a mix of results that suits your use case. See usage here.
  • Weighted multimodal queries (#307). You can now search with a dictionary of weighted queries. If searching an image index, these queries can be a weighted mix of image URLs and text. See usage here.
  • New GPT-Marqo integration example and article. Turn your boring user manual into a question-answering bot, with an optional persona, with GPT + Marqo!
  • Added new OpenCLIP models to Marqo (#299)

Optimisations

  • Concurrent image downloads (#281, #311)
  • Blazingly fast fp16 ViT CLIP models (#286). See usage here
  • Reduction of data transfer between Marqo and Marqo-os (#300)
  • We see a 3.0x indexing speedup, and a 1.7x search speedup, using the new fp16/ViT-L/14 CLIP model, compared to the previous release using ViT-L/14.

Bug fixes

  • Fixed 500 error when creating an index while only specifying number_of_shards(#293)
  • Fixed model cache management no parsing reranker model properties properly (#308)

Contributor shout-outs

  • Thank you to our 2.3k stargazers
  • Thank you to @codebrain and others for raising issues.

Release 0.0.12

New features

  • Multilingual CLIP (#267). Search images in the language you want! Marqo now incorporates open source multilingual CLIP models. A list of available multilingual CLIP models are available here.
  • Exact text matching (#243, #288). Search for specific words and phrases using double quotes (" ") in lexical search. See usage here.

Optimisations

  • Search speed-up (#278). Latency reduction from Marqo-os indexes reconfigurations.

Contributor shout-outs

Thank you to our 2.2k stargazers and 80+ forkers!

Release 0.0.11

New features

  • Pagination (#251). Navigate through pages of results. Provide an extensive end-user search experience without having to keep results in memory! See usage here
  • The /models endpoint (#239). View what models are loaded, and on what device. This lets Marqo admins examine loaded models and prune unneeded ones. See usage here
  • The /device endpoint (#239). See resource usage for the machine Marqo is running on. This helps Marqo admins manage resources on remote Marqo instances. See usage here
  • The index settings endpoint (/indexes/{index_name}/settings)(#248). See the model and parameters used by each index. See usage here.
  • Latency log outputs (#242). Marqo admins have better transparency about the latencies for each step of the Marqo indexing and search request pipeline
  • ONNX CLIP models are now available (#245). Index and search images in Marqo with CLIP models in the faster, and open, ONNX format - created by Marqo's machine learning team. These ONNX CLIP models give Marqo up to a 35% speedup over standard CLIP models. These ONNX CLIP models are open sourced by Marqo. Read about usage here.
  • New simple image search guide (#253, #263).

Contributor shout-outs

  • ⭐️ We've just hit over 2.1k GitHub stars! ⭐️ So an extra special thanks to our stargazers and contributors who make Marqo possible.

Release 0.0.10

New features

  • Generic model support (#179). Create an index with your favourite SBERT-type models from HuggingFace! Read about usage here
  • Visual search update 2. (#214). Search-time image reranking and open-vocabulary localization, based on users' queries, is now available with the Owl-ViT model. Locate the part of the image corresponding to your query! Read about usage here
  • Visual search update 1. (#214). Better image patching. In addition to faster-rcnn, you can now use yolox or attention based (DINO) region proposal as a patching method at indexing time. This allows localization as the sub patches of the image can be searched. Read about usage here.

Check out this article about how this update makes image search awesome.

Bug fixes

  • Fixed imports and outdated Python client usage in Wikipedia demo (#216)

Contributor shout-outs

  • Thank you to @georgewritescode for debugging and updating the Wikipedia demo
  • Thank you to our 1.8k stargazers and 60+ forkers!

Release 0.0.9

Optimisations

  • Set k to limit to for Marqo-os search queries (#219)
  • Reduced the amount of metadata returned from Marqo-os, on searches (#218)

Non-breaking data model changes

  • Set default kNN m value to 16 (#222)

Bug fixes

  • Better error messages when downloading an image fails (#198)
  • Bug where filtering wouldn't work on fields with spaces (#213), resolving #115

Release 0.0.8

New features

  • Get indexes endpoint: GET /indexes (#181). Use this endpoint to inspect existing Marqo indexes. Read about usage here.
  • Non-tensor fields(#161). During the indexing phase, mark fields as non-tensor to prevent tensors being created for them. This helps speed up indexing and reduce storage for fields where keyword search is good enough. For example: email, name and categorical fields. These fields can still be used for filtering. Read about usage here.
  • Configurable preloaded models(#155). Specify which machine learning model to load as Marqo starts. This prevents a delay during initial search and index commands after Marqo starts. Read about usage here.
  • New example and article: use Marqo to provide context for up-to-date GPT3 news summary generation (#171, #174). Special thanks to @iain-mackie for this example.

Bug fixes and minor changes

  • Updated developer guide (#164)
  • Updated requirements which prevented Marqo being built as an arm64 image (#173)
  • Backend updated to use marqo-os:0.0.3 (#183)
  • Default request timeout has been increased from 2 to 75 seconds (#184)

Contributor shout-outs

  • For work on the GPT3 news summary generation example: @iain-mackie
  • For contributing the non-tensor fields feature: @jeadie
  • Thank you to our users who raise issues and give us valuable feeback
  • Thank you to our 1.4k+ star gazers and 50+ forkers!

Release 0.0.7

Bug fixes and minor changes

  • 429 (too many request errors) are propagated from Marqo-os to the user properly (#150)

Release 0.0.6

New features

  • Health check endpoint: GET /health. An endpoint that can be used to inspect the status of Marqo and Marqo's backend (Marqo-os) (#128). Read about usage here.
  • Marqo can be launched with environment variables that define limits around maximum number of fields per index, maximum document size and the maximum number of documents that can be retrieved (#135). Read about usage here.
  • README translations:

Breaking API changes

  • The home / json response has been updated. If you have logic that reads the endpoint root, please update it (#128).
  • The Python client's add_documents() and update_documents() batch_size parameter has been replaced by server_batch_size and client_batch_size parameters (py-marqo#27), (py-marqo#28)

Non-breaking data model changes

  • Each text field just creates a top level Marqo-os text field, without any keywords (#135)
  • Very large fields get their tensor_facet keywords ignored, rather than Marqo-OS preventing the doc being indexed (#135)
  • Tensor facets can no longer have _id as a filtering field (#135)

Bug fixes and minor changes

  • FastAPI runs with better concurrency (#128)
  • Get documents by IDs and lexical search and no longer returns vectors if expose_facets isn't specified
  • Fixed batching bug in Python client (py-marqo#28)

Caveats

  • If a large request to add_documents or update_documents results in a document adding fields such that the index field limit is exceeded, the entire operation will fail (without resilience). Mitigate this sending add_documents and update_documents requests with smaller batches of documents.
  • For optimal indexing of large volumes of images, we recommend that the images are hosted on the same region and cloud provider as Marqo.

Contributor shout-outs

Release 0.0.5

Added Open CLIP models and added features to the get document endpoint.

New features

  • Added Open CLIP models (#116). Read about usage here
  • Added the ability to get multiple documents by ID (#122). Read about usage here
  • Added the ability to get document tensor facets through the get document endpoint (#122). Read about usage here

Release 0.0.4

Adding the attributesToRetrieve to the search endpoint and added the update documents endpoints

New features

  • Added the AttributesToRetrieve option to the search endpoint (55e5ac6)
  • Added the PUT documents endpoint (ce1306a)