Cluster vectors
cluster_vectorsPerform k-means clustering on a pgvector column in PostgreSQL, returning centroids and per-row assignments. Supports L2 or cosine distance, optional id column, and configurable sample size.
Instructions
k-means cluster a pgvector column. Samples up to sample_size (default 5000) non-NULL rows of schema.table.embedding_column, runs Lloyd's algorithm with k-means++ seeding (seed for determinism), and returns centroids (one per cluster, with size) + assignments (per-row cluster index + distance). When id_column is set each assignment carries that column's value; otherwise the row's positional sample index. metric='l2' (default — squared Euclidean) or 'cosine' (vectors normalised; centroids re-normalised every iteration). k >= 2 and there must be at least 2k parseable rows. Reports available=false if pgvector is not installed.
Example: cluster_vectors(schema='public', table='docs', embedding_column='embedding', k=8, metric='cosine')
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| k | Yes | ||
| seed | No | ||
| table | Yes | ||
| metric | No | l2 | |
| schema | Yes | ||
| database | No | Optional: target a configured secondary (read-only) database by name; omit for the primary. Call list_databases to see the configured ids. | |
| id_column | No | ||
| sample_size | No | ||
| max_iterations | No | ||
| embedding_column | Yes |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| metric | Yes | ||
| inertia | Yes | ||
| available | Yes | ||
| centroids | Yes | ||
| converged | Yes | ||
| dimension | Yes | ||
| iterations | Yes | ||
| assignments | Yes | ||
| sampled_rows | Yes |