Public
Likeslimarmor
Val Town is a collaborative website to build and scale JavaScript apps.
Deploy APIs, crons, & store data – all from the browser, and deployed in milliseconds.
Viewing readonly version of main branch: v38View latest version
A lightweight, optimized vector database built on Val Town's SQLite (powered by Turso/libSQL). Supports any OpenAI-compatible embedding provider.
| Provider | Env Vars | Default Model | Dimensions |
|---|---|---|---|
| Nebius (default) | NEBIUS_API_KEY | Qwen3-Embedding-8B | 4096 |
| OpenAI | OPENAI_API_KEY | text-embedding-3-small | 1536 |
| OpenRouter | OPENROUTER_API_KEY | openai/text-embedding-3-small | 1536 |
| Custom | EMBEDDING_API_KEY + EMBEDDING_API_URL | (configurable) | (configurable) |
| Metric | Value |
|---|---|
| Storage per record | ~22 KB |
| Max records per 1GB | ~47,500 |
| Avg embedding time | ~460ms |
| Recommended maxDistance | 0.6 - 0.65 |
# Set the provider (nebius, openai, openrouter) EMBEDDING_PROVIDER=openai OPENAI_API_KEY=sk-...
EMBEDDING_API_URL=https://your-api.com/v1/embeddings EMBEDDING_API_KEY=your-key EMBEDDING_MODEL=your-model EMBEDDING_DIM=1536
| Method | Endpoint | Description |
|---|---|---|
POST | /upsert | Insert/update {id, text, meta?} |
POST | /search | Search {query, k?, maxDistance?} |
POST | /delete | Delete {id} |
GET | /get?id=... | Get single record |
GET | /list?limit=... | List record IDs |
| Method | Endpoint | Description |
|---|---|---|
GET | /ping | Health check |
GET | /stats | Detailed storage stats |
GET | /seed?n=100 | Seed N synthetic records |
GET | /calibrate?q=... | Suggest distance thresholds |
POST | /reindex | Recreate optimized index |
POST | /clear?confirm=yes | Delete ALL records |
| Distance | Meaning | Action |
|---|---|---|
| 0.0 - 0.4 | Very similar | Always include |
| 0.4 - 0.6 | Related | Include (tight mode) |
| 0.6 - 0.7 | Somewhat related | Include (balanced mode) |
| 0.7+ | Likely unrelated | Filter out |
Default recommendation: maxDistance: 0.64
import * as db from "https://esm.town/v/kamenxrider/slimarmor/vectordb.ts";
// Check provider
console.log(db.getProviderInfo());
await db.setup();
await db.upsert("doc-1", "Your text here", { category: "notes" });
const results = await db.search("search query", 10, 0.64);
⚠️ Important: If you switch providers or models, the embeddings will be incompatible. You'll need to:
- Clear existing data:
POST /clear?confirm=yes - Set new provider env vars
- Re-insert your data
- Runtime: Val Town (Deno)
- Database: Val Town SQLite (Turso/libSQL with DiskANN)
- Embeddings: Any OpenAI-compatible API
- Index: Cosine similarity, max_neighbors=64, compress_neighbors=float8
MIT