Best Use of Actian VectorAI DB: one track, no sub-categories.
ADHD Hacks runs September 6, 2026 in Bengaluru. This repo gets you from zero to a running database and your first query in under 10 minutes.
Stuck? Ask your Actian mentor in the room, they’re there throughout the day. We’re also on Discord.
A vector database. It searches by meaning instead of exact words.
A regular database finds “products named laptop.” VectorAI DB finds “products similar to portable computer for students,” even when the words don’t match. It’s portable and multimodal, built to run at the edge, on-prem, disconnected, or in the cloud, without losing performance or consistency depending on where it’s deployed.
One thing worth knowing going in: VectorAI DB doesn’t include an embedding model, the thing that turns your text or images into the numbers it actually searches over. You bring your own. Free, easy ones are listed below. Think of it as embedding model equals translator, VectorAI DB equals the filing cabinet and search engine behind it.
The Community Edition comes with 5,000 vectors, plenty for a one-day build.
Full docs, if you want to go deeper than this README: docs.vectoraidb.actian.com
Requirements: Python 3.10 or newer.
Step 1, install the client:
pip install actian-vectorai-client
Step 2, start the database. This uses Docker:
docker pull actian/vectorai:latest
docker run -d --name vectorai \
-v ./local_data:/var/lib/actian-vectorai \
-p 6573-6575:6573-6575 \
-e ACTIAN_VECTORAI_ACCEPT_EULA=YES \
actian/vectorai:latest
Wait until docker logs vectorai shows the server is ready, then confirm it’s up:
curl http://localhost:6573/
You should get back JSON with "title": "Actian VectorAI DB".
A port note, since this trips people up: REST API is 6573. Port 6575 is a local dashboard UI, not the API, so hitting it with API calls will look like a broken integration when it’s just the wrong port. Port 6574 is gRPC, used by the SDK under the hood.
Auth is off by default on a fresh container, no API key or token needed for local dev. Don’t spend time trying to disable auth, it’s already disabled.
Step 3, your first query:
from actian_vectorai import VectorAIClient, VectorParams, Distance, PointStruct
with VectorAIClient("localhost:6574") as client:
info = client.health_check()
print(f"Connected to {info['title']} v{info['version']}")
client.collections.create(
"products",
vectors_config=VectorParams(size=128, distance=Distance.Cosine),
)
client.points.upsert("products", [
PointStruct(id=1, vector=[0.1] * 128, payload={"category": "books"}),
])
results = client.points.search("products", vector=[0.1] * 128, limit=5)
for r in results:
print(f"[{r.id}] score={r.score:.4f} payload={r.payload}")
That’s semantic search, running. Next step is usually swapping [0.1] * 128 for real output from an embedding model, and the toy payload for your actual data.
| Model | Dimensions | Notes |
|---|---|---|
sentence-transformers/all-MiniLM-L6-v2 |
384d | Fast, general-purpose, good default if unsure |
sentence-transformers/all-mpnet-base-v2 |
768d | Higher quality text embeddings, a bit slower |
BAAI/bge-small-en-v1.5 |
384d | Strong quality-to-speed ratio |
openai/clip-vit-base-patch32 |
512d | Multimodal, text and images |
All free, hosted on Hugging Face, installable via pip install sentence-transformers. No API keys, no cost, no rate limits, a solid choice if venue wifi is unreliable, since the model runs locally once downloaded.
Remember: your collection’s vector size must match your embedding model’s output exactly (384 for MiniLM, 1536 if you use an OpenAI embedding model, etc). Mismatched dimensions fail loudly (DIMENSION_MISMATCH), and the only fix is recreating the collection.
Read this before assuming something’s broken:
ENGINE_NOT_INITIALIZED right after the container starts is expected. Retry with backoff (0.5s, 1s, 2s, 4s, 8s), it clears on its own.chown -R 999:999 ./local_data on the host.-e ACTIAN_VECTORAI_ACCEPT_EULA=YES, the container exits immediately. This is required, not optional.-v ./local_data:/var/lib/actian-vectorai volume mount. Without it, your data disappears the moment the container is recreated.Collection already exists (409) on a re-run? Use get_or_create instead of a plain create call, or just ignore the 409, it’s harmless./points/search for similarity search. Don’t build around /points/query, it’s inconsistently documented across sources.One track. VectorAI DB needs to be load-bearing in whatever you build, not swappable for any other database with nothing else changing.
Beyond that, it’s open: a local knowledge base, a RAG chatbot, a recommendation engine, an offline-capable agent, a multimodal search tool, whatever you want to build where semantic search over your own data is the actual point.
Demo your build during the end-of-day session. [CONFIRM: is there a separate write-up or submission step, or is the live demo the whole thing?]
$500 total: 1st place $250, 2nd place $150, 3rd place $100.
Judged by the Actian team.