Skip to main content

4 posts tagged with "amazon s3 vectors"

Amazon s3 Vectors related topics and usage

View All Tags

Spice v1.8.2 (Oct 21, 2025)

ยท 5 min read
Jack Eadie
Token Plumber at Spice AI

Announcing the release of Spice v1.8.2! ๐Ÿ”

Spice v1.8.2 is a patch release focused on reliability, validation, performance, and bug fixes, with improvements across DuckDB acceleration, S3 Vectors, document tables, and HTTP search.

What's New in v1.8.2โ€‹

Support Table Relations in /v1/search HTTP Endpointโ€‹

Spice now supports table relations for the additional_columns and where parameters in the /v1/search endpoint. This enables improved search for multi-dataset use cases, where filters and columns can be used on specific datasets.

Example:

curl 'http://localhost:8090/v1/search' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' -d '{
"text": "hello world",
"additional_columns": ["tbl1.foo", "tbl2.bar", "baz"],
"where": "tbl1.foo > 100000",
"limit": 5
}'

In this example, search results from the tbl1 dataset will include columns foo and baz, where foo > 100000. For tbl2, columns bar and baz will be returned.

DuckDB Data Accelerator Table Partitioning & Indexingโ€‹

  • Configurable DuckDB Index Scan: DuckDB acceleration now supports configurable duckdb_index_scan_percentage and duckdb_index_scan_max_count parameters, supporting fine-tuning of index scan behavior for improved query performance.

Example:

datasets:
- from: postgres:my_table
name: my_table
acceleration:
enabled: true
engine: duckdb
mode: file
params:
# When combined, DuckDB will use an index scan when the number of qualifying rows is less than the maximum of these two thresholds
duckdb_index_scan_percentage: '0.10' # 10% as decimal
duckdb_index_scan_max_count: '1000'
  • Hive-Style Partitioning: In file-partitioned mode, the DuckDB data accelerator uses Hive-style partitioning for more efficient file management.

  • Table-Based Partitioning: Spice now supports partitioning DuckDB accelerations within a single file. This approach maintains ACID guarantees for full and append mode refreshes, while optimizing resource usage and improving query performance. Configure via the partition_mode parameter:

datasets:
- from: file:test_data.parquet
name: test_data
params:
file_format: parquet
acceleration:
enabled: true
engine: duckdb
mode: file
params:
partition_mode: tables
partition_by:
- bucket(100, Field1)

S3 Vectors Reliabilityโ€‹

  • Race Condition Fix: Resolved a race condition in S3 Vectors index and bucket creation. The runtime also now checks if an index or bucket exists after a ConflictException, ensuring robust error handling during index creation and improving reliability for large-scale multi-index vector search.

Document Table Improvementsโ€‹

  • Primary Key Update: Document tables now use the location column as the primary key, improving performance, consistency, and query reliability.

Additional Improvements & Bugfixesโ€‹

  • Reliability: Improved error handling and resource checks for S3 Vectors and DuckDB acceleration.
  • Validation: Expanded validation for partitioning and index creation.
  • Performance: Optimized partition refresh and index scan logic.
  • Bugfix: Don't nullify DuckDB release callbacks for schemas.

Contributorsโ€‹

Breaking Changesโ€‹

No breaking changes.

Cookbook Updatesโ€‹

No major cookbook updates.

The Spice Cookbook includes 81 recipes to help you get started with Spice quickly and easily.

Upgradingโ€‹

To upgrade to v1.8.2, use one of the following methods:

CLI:

spice upgrade

Homebrew:

brew upgrade spiceai/spiceai/spice

Docker:

Pull the spiceai/spiceai:1.8.2 image:

docker pull spiceai/spiceai:1.8.2

For available tags, see DockerHub.

Helm:

helm repo update
helm upgrade spiceai spiceai/spiceai

AWS Marketplace:

๐ŸŽ‰ Spice is now available in the AWS Marketplace!

What's Changedโ€‹

Changelogโ€‹

  • Update mongo config for benchmarks by @krinart in #7546
  • Configurable DuckDB duckdb_index_scan_percentage & duckdb_index_scan_max_count by @lukekim in #7551
  • Fix race condition in S3 Vectors index and bucket creation by @kczimm in #7577
  • Use 'location' as primary key for document tables by @Jeadie in #7567
  • Update official Docker builds to use release binaries by @phillipleblanc in #7597
  • Hive-style partitioning for DuckDB file mode by @kczimm in #7563
  • New Generate Changelog workflow by @krinart in #7562
  • Add support for DuckDB table-based partitioning by @sgrebnov in #7581
  • DuckDB table partitioning: delete partitions that no longer exist after full refresh by @sgrebnov in #7614
  • Rename duckdb_partition_mode to partition_mode param by @sgrebnov in #7622
  • Fix license issue in table-providers by @phillipleblanc in #7620
  • Make DuckDB table partition data write threshold configurable by @sgrebnov in #7626
  • fix: Don't nullify DuckDB release callbacks for schemas by @peasee in #7628
  • Fix integration tests by reverting the use of batch inserts w/ prepared statements by @phillipleblanc in #7630
  • Return TableProvider from CandidateGeneration::search by @Jeadie in #7559
  • Handle table relations in HTTP v1/search by @Jeadie in #7615

Spice v1.8.0 (Oct 6, 2025)

ยท 20 min read
Phillip LeBlanc
Co-Founder and CTO of Spice AI

Announcing the release of Spice v1.8.0! ๐ŸงŠ

Spice v1.8.0 delivers major advances in data writes, scalable vector search, and now in previewโ€”managed acceleration snapshots for fast cold starts. This release introduces write support for Iceberg tables using standard SQL INSERT INTO, partitioned S3 Vector indexes for petabyte-scale vector search, and preview of the AI SQL function for direct LLM integration in SQL. Additional improvements include improved reliability, and the v3.0.3 release of the Spice.js Node.js SDK.

What's New in v1.8.0โ€‹

Iceberg Table Write Support (Preview)โ€‹

Append Data to Iceberg Tables with SQL INSERT INTO: Spice now supports writing to Iceberg tables and catalogs using standard SQL INSERT INTO statements. This enables data ingestion, transformation, and pipeline use casesโ€”no Spark or external writer required.

  • Append-only: Initial version targets appends; no overwrite or delete.
  • Schema validation: Inserted data must match the target table schema.
  • Secure by default: Writes are only enabled for datasets or catalogs explicitly marked with access: read_write.

Example Spicepod configuration:

catalogs:
- from: iceberg:https://glue.ap-northeast-3.amazonaws.com/iceberg/v1/catalogs/111111/namespaces
name: ice
access: read_write

datasets:
- from: iceberg:https://iceberg-catalog-host.com/v1/namespaces/my_namespace/tables/my_table
name: iceberg_table
access: read_write

Example SQL usage:

-- Insert from another table
INSERT INTO iceberg_table
SELECT * FROM existing_table;

-- Insert with values
INSERT INTO iceberg_table (id, name, amount)
VALUES (1, 'John', 100.0), (2, 'Jane', 200.0);

-- Insert into catalog table
INSERT INTO ice.sales.transactions
VALUES (1001, '2025-01-15', 299.99, 'completed');

Note: Only Iceberg datasets and catalogs with access: read_write support writes. Internal Spice tables and other connectors remain read-only.

Learn more in the Iceberg Data Connector documentation.

Acceleration Snapshots for Fast Cold Starts (Preview)โ€‹

Bootstrap Managed Accelerations from Object Storage: Spice now supports managed acceleration snapshots in preview, enabling datasets accelerated with file-based engines (DuckDB or SQLite) to bootstrap from a snapshot stored in object storage (such as S3) if the local acceleration file does not exist on startup. This dramatically reduces cold start times and enables ephemeral storage for accelerations with persistent recovery.

Key features:

  • Rapid readiness: Datasets can become ready in seconds by downloading a pre-built snapshot, skipping lengthy initial acceleration.
  • Hive-style partitioning: Snapshots are organized by month, day, and dataset for easy retention and management.
  • Flexible bootstrapping: Configurable fallback and retry behavior if a snapshot is missing or corrupted.

Example Spicepod configuration:

snapshots:
enabled: true
location: s3://some_bucket/some_folder/ # Folder for storing snapshots
bootstrap_on_failure_behavior: warn # Options: warn, retry, fallback
params:
s3_auth: iam_role # All S3 dataset params accepted here

datasets:
- from: s3://some_bucket/some_table/
name: some_table
params:
file_format: parquet
s3_auth: iam_role
acceleration:
enabled: true
snapshots: enabled # Options: enabled, disabled, bootstrap_only, create_only
engine: duckdb
mode: file
params:
duckdb_file: /nvme/some_table.db

How it works:

  • On startup, if the acceleration file does not exist, Spice checks the snapshot location for the latest snapshot and downloads it.
  • Snapshots are stored as: s3://some_bucket/some_folder/month=2025-09/day=2025-09-30/dataset=some_table/some_table_<timestamp>.db
  • If no snapshot is found, a new acceleration file is created as usual.
  • Snapshots are written after each refresh (unless configured otherwise).

Supported snapshot modes:

  • enabled: Download and write snapshots.
  • bootstrap_only: Only download on startup, do not write new snapshots.
  • create_only: Only write snapshots, do not download on startup.
  • disabled: No snapshotting.

Note: This feature is only supported for file-based accelerations (DuckDB or SQLite) with dedicated files.

Why use acceleration snapshots?

  • Faster cold starts: Skip waiting for full acceleration on startup.
  • Ephemeral storage: Use fast local disks (e.g., NVMe) for acceleration, with persistent recovery from object storage.
  • Disaster recovery: Recover from federated source outages by bootstrapping from the latest snapshot.

Partitioned S3 Vector Indexesโ€‹

Efficient, Scalable Vector Search with Partitioning: Spice now supports partitioning Amazon S3 Vector indexes and scatter-gather queries using a partition_by expression in the dataset vector engine configuration. Partitioned indexes enable faster ingestion, lower query latency, and scale to billions of vectors.

Example Spicepod configuration:

datasets:
- name: reviews
vectors:
enabled: true
engine: s3_vectors
params:
s3_vectors_bucket: my-bucket
s3_vectors_index: base-embeddings
partition_by:
- 'bucket(50, PULocationID)'
columns:
- name: body
embeddings:
from: bedrock_titan
- name: title
embeddings:
from: bedrock_titan

See the Amazon S3 Vectors documentation for details.

AI SQL function for LLM Integration (Preview)โ€‹

LLMs Directly In SQL: A new asynchronous ai SQL function enables direct calls to LLMs from SQL queries for text generation, translation, classification, and more. This feature is released in preview and supports both default and model-specific invocation.

Example Spicepod model configuration:

models:
- name: gpt-4o
from: openai:gpt-4o
params:
openai_api_key: ${secrets:openai_key}

Example SQL usage:

-- basic usage with default model
SELECT ai('hi, this prompt is directly from SQL.');
-- basic usage with specified model
SELECT ai('hi, this prompt is directly from SQL.', 'gpt-4o');
-- Using row data as input to the prompt
SELECT ai(concat_ws(' ', 'Categorize the zone', Zone, 'in a single word. Only return the word.')) AS category
FROM taxi_zones
LIMIT 10;

Learn more in the SQL Reference AI documentation.

Remote Endpoint Support for Spice CLIโ€‹

Run CLI Commands Remotely: The Spice CLI now supports connecting to remote Spice instances, enabling you to run spice sql, spice search, and spice chat commands from your local machine against a remote spiced daemon or to Spice Cloud. Previously, these commands required running on the same machine as the runtime. Now, new flags allow remote execution:

  • --cloud: Connect to a Spice Cloud instance (requires --api-key).
  • --endpoint <endpoint>: Connect to a remote Spice instance via HTTP or Arrow Flight SQL (gRPC). Supports http://, https://, grpc://, or grpc+tls:// schemes.

Examples:

# Run SQL queries against a remote Spice instance
spice sql --endpoint http://remote-host:8090

# Use Spice Cloud for chat or search
spice chat --cloud --api-key <your-api-key>
spice search --cloud --api-key <your-api-key>

Supported CLI Commands:

  • spice sql --cloud / spice sql --endpoint <endpoint>
  • spice search --cloud / spice search --endpoint <endpoint>
  • spice chat --cloud / spice chat --endpoint <endpoint>

Additional Flags:

  • --headers: Pass custom HTTP headers to the remote endpoint.
  • --tls-root-certificate-file: Specify a root certificate for TLS verification.
  • --user-agent: Set a custom user agent for requests.

For more details, see the Spice CLI Command Reference.

Spice.js v3.0.3 SDKโ€‹

Spice.js v3.0.3 Released: The official Spice.ai Node.js/JavaScript SDK has been updated to v3.0.3, bringing cross-platform support, new APIs, and improved reliability for both Node.js and browser environments.

  • Modern Query Methods: Use sql(), sqlJson(), and nsql() for flexible querying, streaming, and natural language to SQL.
  • Browser Support: SDK now works in browsers and web applications, automatically selecting the optimal transport (gRPC or HTTP).
  • Health Checks & Dataset Refresh: Easily monitor Spice runtime health and trigger dataset refreshes on demand.
  • Automatic HTTP Fallback: If gRPC/Flight is unavailable, the SDK falls back to HTTP automatically.
  • Migration Guidance: v3 requires Node.js 20+, uses camelCase parameters, and introduces a new package structure.

Example usage:

import { SpiceClient } from '@spiceai/spice'

const client = new SpiceClient(apiKey)
const table = await client.sql('SELECT * FROM my_table LIMIT 10')
console.table(table.toArray())

See Spice.js SDK documentation for full details, migration tips, and advanced usage.

Additional Improvementsโ€‹

  • Reliability: Improved logging, error handling, and network readiness checks across connectors (Iceberg, Databricks, etc.).
  • Vector search durability and scale: Refined logging, stricter default limits, safeguards against index-only scans and duplicate results, and always-accessible metadata for robust queryability at scale.
  • Cache behavior: Tightened cache logic for modification queries.
  • Full-Text Search: FTS metadata columns now usable in projections; max search results increased to 1000.
  • RRF Hybrid Search: Reciprocal Rank Fusion (RRF) UDTF enhancements for advanced hybrid search scenarios.

Contributorsโ€‹

Breaking Changesโ€‹

This release introduces two breaking changes associated with the search observability and tooling.

Firstly, the document_similarity tool has been renamed to search. This has the equivalent change to tracing of these tool calls:

## Old: v1.7.1
>> spice trace tool_use::document_similarity
>> curl -XPOST http://localhost:8090/v1/tools/document_similarity \
-d '{
"datasets": ["my_tbl"],
"text": "Welcome to another Spice release"
}'

## New: v1.8.0
>> spice trace tool_use::search
>> curl -XPOST http://localhost:8090/v1/tools/search \
-d '{
"datasets": ["my_tbl"],
"text": "Welcome to another Spice release"
}'

Secondly, the vector_search task in runtime.task_history has been renamed to search.

Cookbook Updatesโ€‹

The Spice Cookbook now includes 80 recipes to help you get started with Spice quickly and easily.


Upgradingโ€‹

To upgrade to v1.8.0, use one of the following methods:

CLI:

spice upgrade

Homebrew:

brew upgrade spiceai/spiceai/spice

Docker:

Pull the spiceai/spiceai:1.8.0 image:

docker pull spiceai/spiceai:1.8.0

For available tags, see DockerHub.

Helm:

helm repo update
helm upgrade spiceai spiceai/spiceai

AWS Marketplace:

๐ŸŽ‰ Spice is now available in the AWS Marketplace!

What's Changedโ€‹

Dependenciesโ€‹

  • iceberg-rust: Upgraded to v0.7.0-rc.1
  • mimalloc: Upgraded from 0.1.47 to 0.1.48
  • azure_core: Upgraded from 0.27.0 to 0.28.0
  • Jimver/cuda-toolkit: Upgraded from 0.2.27 to 0.2.28

Changelogโ€‹

Spice v1.6.0 (Aug 26, 2025)

ยท 22 min read
Sergei Grebnov
Senior Software Engineer at Spice AI

Announcing the release of Spice v1.6.0! ๐Ÿ”ฅ

Spice 1.6.0 upgrades DataFusion to v48, reducing expressions memory footprint by ~50% for faster planning and lower memory usage, eliminating unnecessary projections in queries, optimizing string functions like ascii and character_length for up to 3x speedup, and accelerating unbounded aggregate window functions by 5.6x. The release adds Kafka and MongoDB connectors for real-time streaming and NoSQL data acceleration, supports OpenAI Responses API for advanced model interactions including OpenAI-hosted tools like web_search and code_interpreter, improves the OpenAI Embeddings Connector with usage tier configuration for higher throughput via increased concurrent requests, introduces Model2Vec embeddings for ultra-low-latency encoding, and improves the Amazon S3 Vectors engine to support multi-column primary keys.

What's New in v1.6.0โ€‹

DataFusion v48 Highlightsโ€‹

Spice.ai is built on the DataFusion query engine. The v48 release brings:

Performance & Size Improvements ๐Ÿš€: Expressions memory footprint was reduced by ~50% resulting in faster planning and lower memory usage, with planning times improved by 10-20%. There are now fewer unnecessary projections in queries. The string functions, ascii and character_length were optimized for improved performance, with character_length achieving up to 3x speedup. Queries with unbounded aggregate window functions have improved performance by 5.6 times via avoided unnecessary computation for constant results across partitions. The Expr struct size was reduced from 272 to 144 bytes.

New Features & Enhancements โœจ: Support was added for ORDER BY ALL for easy ordering of all columns in a query.

See the Apache DataFusion 48.0.0 Blog for details.

Runtime Highlightsโ€‹

Amazon S3 Vectors Multi-Column Primary Keys: The Amazon S3 Vectors engine now supports datasets with multi-column primary keys. This enables vector indexes for datasets where more than one column forms the primary key, such as those splitting documents into chunks for retrieval contexts. For multi-column keys, Spice serializes the keys using arrow-json format, storing them as single string keys in the vector index.

Model2Vec Embeddings: Spice now supports model2vec static embeddings with a new model2vec embeddings provider, for sentence transformers up to 500x faster and 15x smaller, enabling scenarios requiring low latency and high-throughput encoding.

embeddings:
- from: model2vec:minishlab/potion-base-8M # HuggingFace model
name: potion
- from: model2vec:path/to/my/local/model # local model
name: local

Learn more in the Model2Dev Embeddings documentation.

Kafka Data Connector: Use from: kafka:<topic> to ingest data directly from Kafka topics for integration with existing Kafka-based event streaming infrastructure, providing real-time data acceleration and query without additional middleware.

Example Spicepod.yml:

- from: kafka:orders_events
name: orders
acceleration:
enabled: true
refresh_mode: append
params:
kafka_bootstrap_servers: server:9092

Learn more in the Kafka Data Connector documentation.

MongoDB Data Connector: Use from: mongodb:<dataset> to access and accelerate data stored in MongoDB, deployed on-premises or in the cloud.

Example spicepod.yml:

datasets:
- from: mongodb:my_dataset
name: my_dataset
params:
mongodb_host: localhost
mongodb_db: my_database
mongodb_user: my_user
mongodb_pass: password

Learn more in the MongoDB Data Connector documentation.

OpenAI Responses API Support: The OpenAI Responses API (/v1/responses) is now supported, which is OpenAI's most advanced interface for generating model responses.

To enable the /v1/responses HTTP endpoint, set the responses_api parameter to enabled:

Example spicepod.yml:

models:
- name: openai_model_using_responses_api
from: openai:gpt-4.1
params:
openai_api_key: ${ secrets:OPENAI_API_KEY }
responses_api: enabled # Enable the /v1/responses endpoint for this model

Example curl request:

curl http://localhost:8090/v1/responses \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-4.1",
"input": "Tell me a three sentence bedtime story about Spice AI."
}'

To use responses in spice chat, use the --responses flag.

Example:

spice chat --responses # Use the `/v1/responses` endpoint for all completions instead of `/v1/chat/completions`

Use OpenAI-hosted tools supported by Open AI's Responses API by specifying the openai_responses_tools parameter:

Example spicepod.yml:

models:
- name: test
from: openai:gpt-4.1
params:
openai_api_key: ${ secrets:SPICE_OPENAI_API_KEY }
tools: sql, list_datasets
responses_api: enabled
openai_responses_tools: web_search, code_interpreter # 'code_interpreter' or 'web_search'

These OpenAI-specific tools are only available from the /v1/responses endpoint. Any other tools specified via the tools parameter are available from both the /v1/chat/completions and /v1/responses endpoints.

Learn more in the OpenAI Model Provider documentation.

OpenAI Embeddings & Models Connectors Usage Tier: The OpenAI Embeddings and Models Connectors now supports specifying account usage tier for embeddings and model requests, improving the performance of generating text embeddings or calling models during dataset load and search by increasing concurrent requests.

Example spicepod.yml:

embeddings:
- from: openai:text-embedding-3-small
name: openai_embed
params:
openai_usage_tier: tier1

By setting the usage tier to the matching usage tier for your OpenAI account, the Embeddings and Models Connector will increase the maximum number of concurrent requests to match the specified tier.

Learn more in the OpenAI Model Provider documentation.

Contributorsโ€‹

New Contributorsโ€‹

Breaking Changesโ€‹

No breaking changes.

Cookbook Updatesโ€‹

The Spice Cookbook includes 77 recipes to help you get started with Spice quickly and easily.

Upgradingโ€‹

To upgrade to v1.6.0, use one of the following methods:

CLI:

spice upgrade

Homebrew:

brew upgrade spiceai/spiceai/spice

Docker:

Pull the spiceai/spiceai:1.6.0 image:

docker pull spiceai/spiceai:1.6.0

For available tags, see DockerHub.

Helm:

helm repo update
helm upgrade spiceai spiceai/spiceai

AWS Marketplace:

๐ŸŽ‰ Spice is also now available in the AWS Marketplace!

What's Changedโ€‹

Dependenciesโ€‹

Changelogโ€‹

  • Support Streaming with Tool Calls (#6941) by @Advayp in #6941
  • Fix parameterized query planning in DataFusion (#6942) by @Jeadie in #6942
  • Update the UnableToLoadCredentials error with a pointer to docs (#6937) by @phillipleblanc in #6937
  • Fix spicecloud benchmark (#6935) by @krinart in #6935
  • [Debezium] Support for VariableScaleDecimal (#6934) by @krinart in #6934
  • Update to DF 48 (#6665) by @mach-kernel and @kczimm in #6665
  • Mark append-stream and CDC datasets as ready after first message (#6914) by @sgrebnov in #6914
  • Model2Vec embedding model support (#6846) by @mach-kernel in #6846
  • Update snapshot for S3 vector search test (#6920) by @Jeadie in #6920
  • remove [] from queryset in spicepod path for CI (#6919) by @Jeadie in #6919
  • Remove verbose tracing (#6915) by @Jeadie in #6915
  • Refactor how models supporting the Responses API are loaded (#6912) by @Advayp in #6912
  • Write tests for truncate formatting in arrow_tools and fix bug. (#6900) by @Jeadie in #6900
  • Support using the Responses API from spice chat (#6894) by @Advayp in #6894
  • Include GPT-5 into Text-To-SQL and Financebench benchmarks (#6907) by @sgrebnov in #6907
  • Better error message when credentials aren't loaded for S3 Vectors (#6910) by @phillipleblanc in #6910
  • Add tracing and system prompt support for the Responses API (#6893) by @Advayp in #6893
  • Constraint violation check is improved to control behavior when violations occur within a batch (#6897) by @phillipleblanc in #6897
  • fix: Multi-column text search with v1/search (#6905) by @peasee in #6905
  • fix: Correctly project text search primary keys to underlying projection (#6904) by @peasee in #6904
  • fix: Update benchmark snapshots (#6901) by @app/github-actions in #6901
  • In S3vector, do not pushdown on non-filterable columns (#6884) by @Jeadie in #6884
  • Run E2E Test CI macOS build on bigger runners (#6896) by @phillipleblanc in #6896
  • Enable configuration of the Responses API for the Azure model provider (#6891) by @Advayp in #6891
  • fix: Update benchmark snapshots (#6888) by @app/github-actions in #6888
  • Update OpenAPI specification for /v1/responses (#6889) by @Advayp in #6889
  • Add test to ensure tools are injected correctly in the Responses API (#6886) by @Advayp in #6886
  • Enable embeddings for append streams (#6878) by @sgrebnov in #6878
  • Show correct limit for EXPLAIN plans in S3VectorsQueryExec (#6852) by @Jeadie in #6852
  • Responses API support for Azure Open AI (#6879) by @Advayp in #6879
  • fix: Update search test case structure (#6865) by @peasee in #6865
  • Fix mongodb benchmark (#6883) by @phillipleblanc in #6883
  • Support multiple column primary keys for S3 vectors. (#6775) by @Jeadie in #6775
  • Kafka Data Connector: persist consumer between restarts (#6870) by @sgrebnov in #6870
  • Fix newlines in errors added in recent PRs (#6877) by @phillipleblanc in #6877
  • Add override parameter to force support for the Responses API (#6871) by @Advayp in #6871
  • Don't use metadata columns in VectorScanTableProvider (#6854) by @Jeadie in #6854
  • Add non-streaming tool call support (hosted and Spice tools) via the Responses API (#6869) by @Advayp in #6869
  • Update error guideline to remove newlines + remove newlines from error messages. (#6866) by @phillipleblanc in #6866
  • Remove void acceleration engine + optional table behaviors (#6868) by @phillipleblanc in #6868
  • Kafka Data Connector basic support (#6856) by @sgrebnov in #6856
  • Federated+Accelerated TPCH Benchmarks for MongoDB (#6788) by @krinart in #6788
  • Pass embeddings calculated in compute_index to the acceleration (#6792) by @phillipleblanc in #6792
  • Add non-streaming and streaming support for OpenAI Responses API endpoint (#6830) by @Advayp in #6830
  • Use latest version of OpenAI crate to resolve issues with Service Tier deserialization (#6853) by @Advayp in #6853
  • Update openapi.json (#6799) by @app/github-actions in #6799
  • Improve management message (#6850) by @lukekim in #6850
  • fix: Include FTS search column if it is the PK (#6836) by @peasee in #6836
  • Refactor Health Checks (#6848) by @Advayp in #6848
  • Introduce a Responses trait and LLM registry for model providers that support the OpenAI Responses API (#6798) by @Advayp in #6798
  • fix: Update datafusion-table-providers to include constraints (#6837) by @peasee in #6837
  • Bump postcard from 1.1.2 to 1.1.3 (#6841) by @app/dependabot in #6841
  • Bump governor from 0.10.0 to 0.10.1 (#6835) by @app/dependabot in #6835
  • Bump ctor from 0.2.9 to 0.5.0 (#6827) by @app/dependabot in #6827
  • Bump azure_core from 0.26.0 to 0.27.0 (#6826) by @app/dependabot in #6826
  • Bump rstest from 0.25.0 to 0.26.1 (#6825) by @app/dependabot in #6825
  • Use latest commit in our fork of async-openai (#6829) by @Advayp in #6829
  • Bump rustls from 0.23.27 to 0.23.31 (#6824) by @app/dependabot in #6824
  • Bump async-trait from 0.1.88 to 0.1.89 (#6823) by @app/dependabot in #6823
  • Bump hyper from 1.6.0 to 1.7.0 (#6814) by @app/dependabot in #6814
  • Bump serde_json from 1.0.140 to 1.0.142 (#6812) by @app/dependabot in #6812
  • Add s3 vector test retrieving vectors (#6786) by @Jeadie in #6786
  • fix: Allow v1/search with only FTS (#6811) by @peasee in #6811
  • Bump tantivy from 0.24.1 to 0.24.2 (#6806) by @app/dependabot in #6806
  • Bump tokio-util from 0.7.15 to 0.7.16 (#6810) by @app/dependabot in #6810
  • fix: Improve FTS index primary key handling (#6809) by @peasee in #6809
  • Bump logos from 0.15.0 to 0.15.1 (#6808) by @app/dependabot in #6808
  • Bump hf-hub from 0.4.2 to 0.4.3 (#6807) by @app/dependabot in #6807
  • Bump odbc-api from 13.0.1 to 13.1.0 (#6803) by @app/dependabot in #6803
  • fix: Spice search CLI with FTS supports string or slice unmarshalling (#6805) by @peasee in #6805
  • Bump uuid from 1.17.0 to 1.18.0 (#6797) by @app/dependabot in #6797
  • Bump reqwest from 0.12.22 to 0.12.23 (#6796) by @app/dependabot in #6796
  • Bump anyhow from 1.0.98 to 1.0.99 (#6795) by @app/dependabot in #6795
  • Bump clap from 4.5.41 to 4.5.45 (#6794) by @app/dependabot in #6794
  • Respect default MAX_DECODING_MESSAGE_SIZE (100MB) in Flight API (#6802) by @sgrebnov in #6802
  • Fix compilation errors caused by upgrading async-openai (#6793) by @Advayp in #6793
  • Remove outdated vector search benchmark (replaced with testoperator) (#6791) by @sgrebnov in #6791
  • Handle errors in vector ingestion pipeline (#6782) by @phillipleblanc in #6782
  • fix: Explicitly error when chunking is defined for vector engines (#6787) by @peasee in #6787
  • Make VectorScanTableProvider and VectorQueryTableProvider support multi-column primary keys (#6757) by @Jeadie in #6757
  • Use megascience/megascience Q+A dataset for text search testing. (#6702) by @Jeadie in #6702
  • Flight REPL autocomplete (#6589) by @krinart in #6589
  • use ref: github.event.pull_request.head.sha in integration_models.yml (#6780) by @Jeadie in #6780
  • fix: Move search telemetry calls in UDTF to scan (#6778) by @peasee in #6778
  • Fix Hugging Face models and embeddings loading in Docker (#6777) by @ewgenius in #6777
  • feat: Migrate bedrock rate limiter (#6773) by @peasee in #6773
  • Run the PR checks on the DEV runners (#6769) by @phillipleblanc in #6769
  • feat: add OpenAI models rate controller (#6767) by @peasee in #6767
  • Implement MongoDB data connector (#6594) by @krinart in #6594
  • fix: Use head ref for concurrency group (#6770) by @peasee in #6770
  • fix: Run enforce pulls with spice on pull_request_target (#6768) by @peasee in #6768
  • feat: Add OpenAI Embeddings Rate Controller (#6764) by @peasee in #6764
  • Move AWS SDK credential bridge integration test to the existing AWS SDK integration test run (#6766) by @phillipleblanc in #6766
  • Use Spice specific errors instead of OpenAIError in embedding module (#6748) by @kczimm in #6748
  • Use context in Glue Catalog Provider (#6763) by @Advayp in #6763
  • pin cargo-deny to previous version (#6762) by @kczimm in #6762
  • Bump actions/download-artifact from 4 to 5 (#6720) by @app/dependabot in #6720
  • Upgrade dependabot dependencies (#6754) by @phillipleblanc in #6754
  • Set E2E Test CI models build to 90 minute timeout (#6756) by @phillipleblanc in #6756
  • chore: upgrade to Rust 1.87.0 (#6614) by @kczimm in #6614
  • feat: Add initial runtime-rate-limiter crate (#6753) by @peasee in #6753
  • feat: Add more embedding traces, add MiniLM MTEB spicepod (#6742) by @peasee in #6742
  • Update QA analytics for release (#6740) by @Advayp in #6740
  • Always use 'returnData: true' for s3 vector query index (#6741) by @Jeadie in #6741
  • feat: Add Embedding and Search anonymous telemetry (#6737) by @peasee in #6737
  • Add 1.5.2 to SECURITY.md (#6739) by @ewgenius in #6739
  • Combine the Iceberg and Object Store AWS SDK bridges into one crate (#6718) by @Advayp in #6718
  • Updates to v1.5.2 release notes (#6736) by @lukekim in #6736
  • Update end game template - move glue catalog to catalogs section (#6732) by @ewgenius in #6732
  • Update v1.5.2.md (#6735) by @kczimm in #6735
  • Add note about S3 Vectors workaround (#6734) by @phillipleblanc in #6734
  • feat: Avoid joining for VectorScanTableProvider if the index is sufficient (#6714) by @peasee in #6714
  • update changelog (#6729) by @kczimm in #6729
  • remove unneeded autogenerated s3 vector code (#6715) by @Jeadie in #6715
  • fix: Set S3 vectors default limit to 30, add more tracing (#6712) by @peasee in #6712
  • docs: Add Hadoop cookbook to endgame template (#6708) by @peasee in #6708
  • Fix testoperator append mode compilation error (#6706) by @phillipleblanc in #6706
  • test: Add VectorScanTableProvider snapshot tests (#6701) by @peasee in #6701
  • feat: Add Hadoop catalog-mode benchmark (#6684) by @peasee in #6684
  • Move shared AWS crates used in bridges to workspace (#6705) by @Advayp in #6705
  • Use installation id to group connections (#6703) by @Advayp in #6703
  • Add Guardrails for AWS bedrock models (#6692) by @Jeadie in #6692
  • Update bedrock keys for CI. (#6693) by @Jeadie in #6693
  • Update acknowledgements (#6690) by @app/github-actions in #6690
  • ROADMAP updates Aug 1, 2025 (#6667) by @lukekim in #6667
  • Add retry logic for OpenAI embeddings creation (#6656) by @sgrebnov in #6656
  • Make models E2E chat test more robust (#6657) by @sgrebnov in #6657
  • Update Search GH Workflow to use Test Operator (#6650) by @sgrebnov in #6650
  • Score and P95 latency calculation for MTEB Quora-based vector search tests in Test Operator (#6640) by @sgrebnov in #6640
  • Fix multiple query error being classified as an internal error (#6635) by @Advayp in #6635
  • Add Support for S3 Table Buckets (#6573) by krinart in #6573
  • set MISTRALRS_METAL_PRECOMPILE=0 for metal (#6652) by @kczimm in #6652
  • Vector search to push down udtf limit argument into logical sort plan (#6636) by @mach-kernel in #6636
  • docs: Update qa_analytics.csv (#6643) by @peasee in #6643
  • Update SECURITY.md (#6642) by @Jeadie in #6642
  • docs: Update qa_analytics.csv (#6641) by @peasee in #6641
  • Separate token usage (#6619) by @Advayp in #6619
  • Fix typo in release notes (#6634) by @Advayp in #6634
  • Add environment variable for org token (#6633) by @Advayp in #6633
  • CDC: Compute embeddings on ingest (#6612) by @mach-kernel in #6612
  • Add view name to view creation errors (#6611) by @lukekim in #6611
  • Add core logic for running MTEB Quora-based vector search tests in Test Operator (#6607) by @sgrebnov in #6607
  • Revert "Update generate-openapi.yml (#6584)" (#6620) by @Jeadie in #6620
  • Non-accelerated views should report as ready only after all dependent datasets are ready (#6617) by @sgrebnov in #6617

Spice v1.5.0 (July 21, 2025)

ยท 14 min read
Evgenii Khramkov
Senior Software Engineer at Spice AI

Announcing the release of Spice v1.5.0! ๐Ÿ”

Spice v1.5.0 brings major upgrades to search and retrieval. It introduces native support for Amazon S3 Vectors, enabling petabyte scale vector search directly from S3 vector buckets, alongside SQL-integrated vector and tantivy-powered full-text search, partitioning for DuckDB acceleration, and automated refreshes for search indexes and views. It includes the AWS Bedrock Embeddings Model Provider, the Oracle Database connector, and the now-stable Spice.ai Cloud Data Connector, and the upgrade to DuckDB v1.3.2.

What's New in v1.5.0โ€‹

Amazon S3 Vectors Support: Spice.ai now integrates with Amazon S3 Vectors, launched in public preview on July 15, 2025, enabling vector-native object storage with built-in indexing and querying. This integration supports semantic search, recommendation systems, and retrieval-augmented generation (RAG) at petabyte scale with S3โ€™s durability and elasticity. Spice.ai manages the vector lifecycleโ€”ingesting data, creating embeddings with models like Amazon Titan or Cohere via AWS Bedrock, or others available on HuggingFace, and storing it in S3 Vector buckets.

Spice integration with Amazon S3 Vectors

Example Spicepod.yml configuration for S3 Vectors:

datasets:
- from: s3://my_data_bucket/data/
name: my_vectors
params:
file_format: parquet
acceleration:
enabled: true
vectors:
engine: s3_vectors
params:
s3_vectors_aws_region: us-east-2
s3_vectors_bucket: my-s3-vectors-bucket
columns:
- name: content
embeddings:
- from: bedrock_titan
row_id:
- id

Example SQL query using S3 Vectors:

SELECT *
FROM vector_search(my_vectors, 'Cricket bats', 10)
WHERE price < 100
ORDER BY score

For more details, refer to the S3 Vectors Documentation.

SQL-integrated Search: Vector and BM25-scored full-text search capabilities are now natively available in SQL queries, extending the power of the POST v1/search endpoint to all SQL workflows.

Example Vector-Similarity-Search (VSS) using the vector_search UDTF on the table reviews for the search term "Cricket bats":

SELECT review_id, review_text, review_date, score
FROM vector_search(reviews, "Cricket bats")
WHERE country_code="AUS"
LIMIT 3

Example Full-Text-Search (FTS) using the text_search UDTF on the table reviews for the search term "Cricket bats":

SELECT review_id, review_text, review_date, score
FROM text_search(reviews, "Cricket bats")
LIMIT 3

DuckDB v1.3.2 Upgrade: Upgraded DuckDB engine from v1.1.3 to v1.3.2. Key improvements include support for adding primary keys to existing tables, resolution of over-eager unique constraint checking for smoother inserts, and 13% reduced runtime on TPC-H SF100 queries through extensive optimizer refinements. The v1.2.x release of DuckDB was skipped due to a regression in indexes.

Partitioned Acceleration: DuckDB file-based accelerations now support partition_by expressions, enabling queries to scale to large datasets through automatic data partitioning and query predicate pruning. New UDFs, bucket and truncate, simplify partition logic.

New UDFs useful for partition_by expressions:

  • bucket(num_buckets, col): Partitions a column into a specified number of buckets based on a hash of the column value.
  • truncate(width, col): Truncates a column to a specified width, aligning values to the nearest lower multiple (e.g., truncate(10, 101) = 100).

Example Spicepod.yml configuration:

datasets:
- from: s3://my_bucket/some_large_table/
name: my_table
params:
file_format: parquet
acceleration:
enabled: true
engine: duckdb
mode: file
partition_by: bucket(100, account_id) # Partition account_id into 100 buckets

Full-Text-Search (FTS) Index Refresh: Accelerated datasets with search indexes maintain up-to-date results with configurable refresh intervals.

Example refreshing search indexes on body every 10 seconds:

datasets:
- from: github:github.com/spiceai/docs/pulls
name: spiceai.doc.pulls
params:
github_token: ${secrets:GITHUB_TOKEN}
acceleration:
enabled: true
refresh_mode: full
refresh_check_interval: 10s
columns:
- name: body
full_text_search:
enabled: true
row_id:
- id

Scheduled View Refresh: Accelerated Views now support cron-based refresh schedules using refresh_cron, automating updates for accelerated data.

Example Spicepod.yml configuration:

views:
- name: my_view
sql: SELECT 1
acceleration:
enabled: true
refresh_cron: '0 * * * *' # Every hour

For more details, refer to Scheduled Refreshes.

Multi-column Vector Search: For datasets configured with embeddings on more than one column, POST v1/search and similarity_search perform parallel vector search on each column, aggregating results using reciprocal rank fusion.

Example Spicepod.yml for multi-column search:

datasets:
- from: github:github.com/apache/datafusion/issues
name: datafusion.issues
params:
github_token: ${secrets:GITHUB_TOKEN}
columns:
- name: title
embeddings:
- from: hf_minilm
- name: body
embeddings:
- from: openai_embeddings

AWS Bedrock Embeddings Model Provider: Added support for AWS Bedrock embedding models, including Amazon Titan Text Embeddings and Cohere Text Embeddings.

Example Spicepod.yml:

embeddings:
- from: bedrock:cohere.embed-english-v3
name: cohere-embeddings
params:
aws_region: us-east-1
input_type: search_document
truncate: END
- from: bedrock:amazon.titan-embed-text-v2:0
name: titan-embeddings
params:
aws_region: us-east-1
dimensions: '256'

For more details, refer to the AWS Bedrock Embedding Models Documentation.

Oracle Data Connector: Use from: oracle: to access and accelerate data stored in Oracle databases, deployed on-premises or in the cloud.

Example Spicepod.yml:

datasets:
- from: oracle:"SH"."PRODUCTS"
name: products
params:
oracle_host: 127.0.0.1
oracle_username: scott
oracle_password: tiger

See the Oracle Data Connector documentation.

GitHub Data Connector: The GitHub data connector supports query and acceleration of members, the users of an organization.

Example Spicepod.yml configuration:

datasets:
- from: github:github.com/spiceai/members # General format: github.com/[org-name]/members
name: spiceai.members
params:
# With GitHub Apps (recommended)
github_client_id: ${secrets:GITHUB_SPICEHQ_CLIENT_ID}
github_private_key: ${secrets:GITHUB_SPICEHQ_PRIVATE_KEY}
github_installation_id: ${secrets:GITHUB_SPICEHQ_INSTALLATION_ID}
# With GitHub Tokens
# github_token: ${secrets:GITHUB_TOKEN}

See the GitHub Data Connector Documentation

Spice.ai Cloud Data Connector: Graduated to Stable.

spice-rs SDK Release: The Spice Rust SDK has updated to v3.0.0. This release includes optimizations for the Spice client API, adds robust query retries, and custom metadata configurations for spice queries.

Contributorsโ€‹

Breaking Changesโ€‹

  • Search HTTP API Response: POST v1/search response payload has changed. See the new API documentation for details.
  • Model Provider Parameter Prefixes: Model Provider parameters use provider-specific prefixes instead of openai_ prefixes (e.g., hf_temperature for HuggingFace, anthropic_max_completion_tokens for Anthropic, perplexity_tool_choice for Perplexity). The openai_ prefix remains supported for backward compatibility but is deprecated and will be removed in a future release.

Cookbook Updatesโ€‹

The Spice Cookbook now includes 72 recipes to help you get started with Spice quickly and easily.

Upgradingโ€‹

To upgrade to v1.5.0, download and install the specific binary from github.com/spiceai/spiceai/releases/tag/v1.5.0 or pull the v1.5.0 Docker image (spiceai/spiceai:1.5.0).

What's Changedโ€‹

Dependenciesโ€‹

Changelogโ€‹

  • fix: openai model endpoint (#6394) by @Sevenannn in #6394
  • Enable configuring otel endpoint from spice run (#6360) by @Advayp in #6360
  • Enable Oracle connector in default build configuration (#6395) by @sgrebnov in #6395
  • fix llm integraion test (#6398) by @Sevenannn in #6398
  • Promote spice cloud connector to stable quality (#6221) by @Sevenannn in #6221
  • v1.5.0-rc.1 release notes (#6397) by @lukekim in #6397
  • Fix model nsql integration tests (#6365) by @Sevenannn in #6365
  • Fix incorrect UDTF name and SQL query (#6404) by @lukekim in #6404
  • Update v1.5.0-rc.1.md (#6407) by @sgrebnov in #6407
  • Improve error messages (#6405) by @lukekim in #6405
  • build(deps): bump Jimver/cuda-toolkit from 0.2.25 to 0.2.26 (#6388) by @app/dependabot in #6388
  • Upgrade dependabot dependencies (#6411) by @phillipleblanc in #6411
  • Fix projection pushdown issues for document based file connector (#6362) by @Advayp in #6362
  • Add a PartitionedDuckDB Accelerator (#6338) by @kczimm in #6338
  • Use vector_search() UDTF in HTTP APIs (#6417) by @Jeadie in #6417
  • add supported types (#6409) by @kczimm in #6409
  • Enable session time zone override for MySQL (#6426) by @sgrebnov in #6426
  • Acceleration-like indexing for full text search indexes. (#6382) by @Jeadie in #6382
  • Provide error message when partition by expression changes (#6415) by @kczimm in #6415
  • Add support for Oracle Autonomous Database connections (Oracle Cloud) (#6421) by @sgrebnov in #6421
  • prune partitions for exact and in list with and without UDFs (#6423) by @kczimm in #6423
  • Fixes and reenable FTS tests (#6431) by @Jeadie in #6431
  • Upgrade DuckDB to 1.3.2 (#6434) by @phillipleblanc in #6434
  • Fix issue in limit clause for the Github Data connector (#6443) by @Advayp in #6443
  • Upgrade iceberg-rust to 0.5.1 (#6446) by @phillipleblanc in #6446
  • v1.5.0-rc.2 release notes (#6440) by @lukekim in #6440
  • Oracle: add automated TPC-H SF1 benchmark tests (#6449) by @sgrebnov in #6449
  • fix: Update benchmark snapshots (#6455) by @app/github-actions in #6455
  • Preserve ArrowError in arrow_tools::record_batch (#6454) by @mach-kernel in #6454
  • fix: Update benchmark snapshots (#6465) by @app/github-actions in #6465
  • Add option to preinstall Oracle ODPI-C library in Docker image (#6466) by @sgrebnov in #6466
  • Include Oracle connector (federated mode) in automated benchmarks (#6467) by @sgrebnov in #6467
  • Update crates/llms/src/bedrock/embed/mod.rs by @lukekim in #6468
  • v1.5.0-rc.3 release notes (#6474) by @lukekim in #6474
  • Add integration tests for S3 Vectors filters pushdown (#6469) by @sgrebnov in #6469
  • check for indexedtableprovider when finding tables to search on (#6478) by @Jeadie in #6478
  • Parse fully qualified table names in UDTFs (#6461) by @Jeadie in #6461
  • Add integration test for S3 Vectors to cover data update (overwrite) (#6480) by @sgrebnov in #6480
  • Add 'Run all tests' option for models tests and enable Bedrock tests (#6481) by @sgrebnov in #6481
  • Add support for a members table type for the GitHub Data Connector (#6464) by @Advayp in #6464
  • S3 vector data cannot be null (#6483) by @Jeadie in #6483
  • Don't infer FixedSizeList size during indexing vectors. (#6487) by @Jeadie in #6487
  • Add support for retention_sql acceleration param (#6488) by @sgrebnov in #6488
  • Make dataset refresh progress tracing less verbose (#6489) by @sgrebnov in #6489
  • Use RwLock on tantivy index in FullTextDatabaseIndex for update concurrency (#6490) by @Jeadie in #6490
  • Add tests for dataset retention logic and refactor retention code (#6495) by @sgrebnov in #6495
  • Upgade dependabot dependencies (#6497) by @phillipleblanc in #6497
  • Add periodic tracing of data loading progress during dataset refresh (#6499) by @sgrebnov in #6499
  • Promote Oracle Data Connector to Alpha (#6503) by @sgrebnov in #6503
  • Use AWS SDK to provide credentials for Iceberg connectors (#6498) by @phillipleblanc in #6498
  • Add integration tests for partitioning (#6463) by @kczimm in #6463
  • Use top-level table in full-text search JOIN ON (#6491) by @Jeadie in #6491
  • Use accelerated table in vector_search JOIN operations when appropriate (#6516) by @Jeadie in #6516
  • Fix 'additional_column' for quoted columns (fix for qualified columns broke it) (#6512) by @Jeadie in #6512
  • Also use AWS SDK for inferring credentials for S3/Delta/Databricks Delta data connectors (#6504) by @phillipleblanc in #6504
  • Add per-dataset availability monitor configuration (#6482) by @phillipleblanc in #6482
  • Suppress the warning from the AWS SDK if it can't load credentials (#6533) by @phillipleblanc in #6533
  • Change default value of check_availability from default to auto (#6534) by @lukekim in #6534
  • README.md improvements for v1.5.0 (#6539) by @lukekim in #6539
  • Temporary disable s3_vectors_basic (#6537) by @sgrebnov in #6537
  • Ensure binder errors show before query and other (#6374) by @suhuruli in #6374
  • Update spiceai/duckdb-rs -> DuckDB 1.3.2 + index fix (#6496) by @mach-kernel in #6496
  • Update table-providers to latest version with DuckDB fixes (#6535) by @phillipleblanc in #6535
  • S3: default to public access if no auth is provided (#6532) by @sgrebnov in #6532