Events, embedded as they land.
Pick a text column and an OpenAI embedding model. Basalt embeds new rows on arrival and stores each vector next to its source row.
Pick a text column and an OpenAI embedding model. Basalt embeds new rows on arrival and stores each vector next to its source row.
Basalt batches new rows and calls the OpenAI Embeddings API with your key. Vectors are written to a vector column on the same row, and each row is embedded once, keyed by a hash of its text.
Store your OpenAI API key as a workspace secret and choose the view and column to embed. Backfill runs at your rate limit.
# embed support ticket bodies with text-embedding-3-small basalt connect openai --view tickets --column body --model text-embedding-3-small
Write plain SQL over the source. Basalt keeps the view current with every record and tracks lineage back to the topic, partition and offset.
CREATE MATERIALIZED VIEW revenue_by_min AS SELECT date_trunc('minute', ts) AS minute, currency, sum(amount) AS revenue, count(*) AS payments FROM payments WHERE status = 'captured' GROUP BY 1, 2;
Every view is an endpoint the moment it exists. Call it over REST, connect with any Postgres client, or use the SDK from your app.
curl https://api.basalt.dev/v1/views/revenue_by_min?limit=5 \ -H "Authorization: Bearer $BASALT_TOKEN"
Rows are keyed by content hash, so unchanged text is never re-embedded.
Search by similarity and filter by any column in the same query.
Requests respect your tier limits and back off on 429 responses.
Use text-embedding-3-small or -large, with optional reduced dimensions.