dodil data recipe
Recipes are deterministic, one-command bundles — pipeline(s) + rule(s), plus a tables engine or object destination where the flow needs one — for common use cases. They are the fast path to everything the Quickstart and the cross-primitive recipes wire up by hand: instead of creating a collection, a pipeline, and an ingest rule in three commands, recipe install does it in one.
recipe show <id> prints the exact ordered steps before you run anything, so you (or an agent) can inspect — or replicate — what a recipe does under the hood.
The catalog
Eight recipes ship, and these ids are the complete list — dodil data recipe list returns exactly these and nothing else. An unknown id fails with unknown recipe "…".
| Recipe ID | Group | What it stands up |
|---|---|---|
document-rag | rag | Index PDFs, office docs and markdown for semantic search (text_embedding_index + doc-glob rule) |
code-rag | rag | Index source code for semantic search (code_embedding_index + source-extension rule) |
image-rag | rag | Index images for visual similarity search (visual_embedding_index + image-glob rule) |
invoice-intake | intake | Parse invoices into a structured table (invoice_parsing → Tables) |
transcription | intake | Transcribe audio/video (audio_transcription → Tables) and index the text (text_embedding_index → Vector) |
summarize-to-markdown | processing | Summarize documents and write results back to summaries/ (object destination + summarization) |
summarize-then-rag | combo | Summarize documents, then index the summaries for search (object destination + summarization, then text_embedding_index over summaries/) |
generic | generic | A vector index plus classification/summarization tables for mixed files |
dodil data recipe list
dodil data recipe list [-o json]Prints the catalog — ID, group, and tagline per recipe.
dodil data recipe show
dodil data recipe show <recipe-id> [-b BUCKET] [-o json]Prints the ordered steps the recipe will run (the underlying commands), resolved against the bucket and flags you pass. Nothing is provisioned.
dodil data recipe show document-rag -b kb-prod
# Recipe "document-rag" — Index PDFs, office docs and markdown for semantic search
#
# 1. vector collection add "document_rag_docs" --template text_embedding_index
# 2. ingest add "document_rag_docs_rule" --source <internal-s3> --collection <last-vector> --include **/*.pdf,**/*.docx,**/*.md,**/*.txt,**/*.htmlNote step 2: recipe install binds the ingest rule for you. This is the one path where you get a pipeline that actually runs from a single command — every other route (vector collection add, table pipeline create, pipeline create, or the raw API) leaves rule creation to you. The rule’s --source resolves to the bucket’s internal S3 source at install time, and --collection binds to the pipeline the previous step created.
Recipes carrying the legacy ensure-tables-engine step print (engine step retired — engines are implicit; skipped) and do nothing — the engine plane was retired. Object-destination steps show as (object destination folded into the pipeline; prefix …) because CreateObjectPipeline now writes the destination and its pipeline together.
dodil data recipe install
dodil data recipe install <recipe-id> -b BUCKET \
[--name-prefix PREFIX] [--folder SUBFOLDER/] \
[--set key=value ...] [--dry-run]Provisions the recipe against the bucket. Collections and tables are created on demand — no engine setup or polling step precedes this.
| Flag | Type | Description |
|---|---|---|
--bucket / -b | string | Required. Bucket to provision against. |
--name-prefix | string | Prefix for created resource names. Default is the recipe id with hyphens replaced by underscores (document-rag → document_rag). Collections/tables become <prefix>_<suffix>. |
--folder | string | Only ingest from this bucket subfolder; scopes rule globs (e.g. --folder invoices/). |
--set | key=value (repeatable) | Template inputs / pipeline options, e.g. --set llm_model=kimi-k2.6 --set language=en. |
--dry-run | bool | Print the resolved plan without provisioning anything. |
Examples:
# One command to a working RAG stack — then just upload documents
dodil data recipe install document-rag -b kb-prod
# Invoice parsing scoped to one folder, with a custom name prefix
dodil data recipe install invoice-intake -b finance \
--folder invoices/ --name-prefix ap
# Inspect first, then commit
dodil data recipe install summarize-then-rag -b kb-prod --dry-runInstall is all-or-nothing per run: each step is a stage, and a failure aborts the recipe with recipe "<id>" failed at step N/M. The recipe is not installed at that point — fix the cause and re-run the same install; already-provisioned resources are reused.
After install, the stack behaves exactly like a hand-built one: uploads matching the rule globs spawn ingest jobs (dodil data ingest jobs -b <bucket>), and the created pipelines / rules / collections are managed with the regular pipeline, ingest, and per-primitive commands. Everything a recipe creates is stamped with recipeName (the resolved name prefix) on the Pipeline and IngestRule rows, so you can find it later:
dodil data pipeline list -b kb-prod -o json \
| jq '[.pipelines[] | select(.recipeName == "document_rag") | .pipelineId]'To tear one down, delete the rules first, then the pipelines — or use BatchDeleteArtifacts (POST /:bucket/pipelines/_batch-delete), the idempotent multi-artifact inverse built for exactly this. It removes only the wiring K3 owns; the physical collection or table is plane state you drop yourself.
See also
- Quickstart — the same chain wired step by step
- Cross-primitive Recipes — full worked walkthroughs of the flows these bundles provision
dodil data pipeline— manage the pipelines a recipe createsdodil data ingest— the rules and jobs behind an installed recipe