Skip to Content
We are live but in Staging 🎉
VectorCLI Guidedodil k3 vector collection

dodil k3 vector collection

Manage vector collections. Five subcommands — add (pipeline-mode), add-manual (external-mode), get, list, delete. Mirrors Collections — API Reference.

Persistent flag on the whole group: --bucket / -b (required).

SubcommandAPI
dodil k3 vector collection addAddVectorPipeline
dodil k3 vector collection add-manualAddVectorCollection
dodil k3 vector collection getGetCollection
dodil k3 vector collection listListCollections
dodil k3 vector collection deleteDeleteCollection

dodil k3 vector collection add — pipeline-mode

dodil k3 vector collection add [name] -b BUCKET -t TEMPLATE_ID [-d DESC]

Creates a template-driven collection. K3 spawns the index + search Scriptum scripts; the Milvus collection materializes lazily on first ingest. Schema (dimensions, metric, sparse mode, embedding type, embed_model) is owned by the template’s ScriptContract — caller cannot override.

FlagShortTypeDescription
--template-tstringRequired. Scriptum template ID (e.g. text_embedding_index)
--description-dstringHuman-readable description
# Text / PDF / docx → embeddings (canonical RAG) dodil k3 vector collection add docs -b kb-prod \ --description "RAG corpus" \ --template text_embedding_index # Code → embeddings (AST-aware chunking) dodil k3 vector collection add code -b kb-prod \ --description "Source-code search" \ --template code_embedding_index # Multimodal (images / video / audio / PDF page renders) dodil k3 vector collection add assets -b kb-prod \ --description "Mixed-media library" \ --template visual_embedding_index

What K3 creates atomically:

  1. The collection row (Milvus collection materializes lazily on first ingest)
  2. A Scriptum pipeline bound to the index template
  3. An auto-generated ingest rule with globs from the template’s acceptedExtensions

template_inputs are not on the CLI today. Some templates (e.g. object_embedding_index) require runtime inputs like labels. For those, use the API directly with the templateInputs field.

Browse available templates with dodil k3 vector templates — see templates.mdx.

dodil k3 vector collection add-manual — external-mode

dodil k3 vector collection add-manual [name] -b BUCKET \ --dimensions N [--metric M] [--embed-model MODEL] [-d DESC]

Creates an external-mode collection — caller declares the schema, K3 creates the Milvus collection eagerly. No Scriptum binding; you push vectors via InsertVectors / UpsertVectors. The collection is recorded with embedding_source = EXTERNAL.

FlagTypeDefaultDescription
--description / -dstringHuman-readable description
--dimensionsint321536Vector dimensions (must match what you’ll embed with)
--metricstringcosinecosine · euclidean · dot_product · hamming · jaccard
--embed-modelstringEmbed model name (e.g. jina-embeddings-v4, openai/text-embedding-3-large). Set this so K3 can route future text queries through the matching embedding service. Leave empty if you’ll pre-embed every query yourself.
# OpenAI ada-002 shaped (1536 dims, cosine) dodil k3 vector collection add-manual ada -b kb-prod \ --dimensions 1536 \ --metric cosine \ --embed-model openai/text-embedding-ada-002 # Jina shaped (1024 dims) dodil k3 vector collection add-manual jina-docs -b kb-prod \ --dimensions 1024 \ --embed-model jina-embeddings-v4

CLI gaps for add-manual:

  • --embedding-type not exposed → CLI always creates EMBEDDING_TYPE_FLOAT collections. For binary / float16 / bfloat16 / int8 embeddings, use the API.
  • --sparse-mode not exposed → CLI always creates SPARSE_MODE_NONE (dense-only). For BM25 or EXTERNAL sparse, use the API.

For the full breadth of add-manual (all five dense types + three sparse modes), see API Reference → Collections → AddVectorCollection.

dodil k3 vector collection get

dodil k3 vector collection get [collection_id_or_name] -b BUCKET

Returns the full collection row — status, schema, embedding source, pipeline binding (pipeline-mode), template inputs (pipeline-mode).

dodil k3 vector collection get docs -b kb-prod -o json \ | jq '{ name, status, dimensions, distanceMetric, embeddingType, sparseMode, embedModel, modality, embeddingSource, embedPipelineId, templateId }'

Useful for confirming the schema before doing direct vector writes (embedding_type and dimensions must match VectorRecord.dense.*).

dodil k3 vector collection list

dodil k3 vector collection list -b BUCKET

Lists every collection in the bucket.

dodil k3 vector collection list -b kb-prod -o json \ | jq '.collections[] | {name, status, embeddingSource, dimensions, embedModel}'

dodil k3 vector collection delete

dodil k3 vector collection delete [collection_id] -b BUCKET

Removes the K3 collection row + the underlying Milvus collection. Does not cascade to pipeline-mode collections’ bound Scriptum pipeline or auto-generated ingest rule — clean those up via Pipelines → DeleteRule + DeletePipeline.

dodil k3 vector collection delete col_a1b2... -b kb-prod

For pipeline-mode collections, the standard cleanup is:

# 1. Capture the bound pipeline + auto-rule before deleting COLLECTION_ID="col_a1b2..." PIPELINE_ID=$(dodil k3 vector collection get "$COLLECTION_ID" -b kb-prod -o json | jq -r '.embedPipelineId') RULE_ID=$(dodil k3 ingest list -b kb-prod -p "$PIPELINE_ID" -o json | jq -r '.rules[0].ruleId') # 2. Delete the rule, then the pipeline, then the collection (or any order) dodil k3 ingest delete "$RULE_ID" -b kb-prod dodil k3 pipeline delete "$PIPELINE_ID" -b kb-prod dodil k3 vector collection delete "$COLLECTION_ID" -b kb-prod

Common gotchas

SymptomCauseFix
add returns INVALID_ARGUMENT: template requires field 'labels'Picked a template with required template_inputs not on the CLIUse the API with templateInputs
add rejects with “engine not active”Engine still PROVISIONINGWait — dodil k3 vector store get -b BUCKET -o json | jq .status
add-manual creates a FLOAT collection even though you wanted BINARYCLI doesn’t expose --embedding-typeUse the API
Need BM25 hybrid → can’t get it via add-manual--sparse-mode not on the CLIUse the API
delete succeeds but ingest jobs for the collection keep landing as FAILEDThe bound pipeline + ingest rule weren’t cleaned up — they reference a missing destinationUse the cleanup sequence above OR list and delete via the Pipelines API

See also