Skip to Content
We are live but in Staging 🎉
PipelinesCLI Guidedodil data object destination

dodil data object destination

Manage object-pipeline destinations. Five subcommands — create, list, get, update, delete (dest is an accepted alias). An object pipeline is the facet whose destination writes derived files back into a bucket: a summarizer that drops .md files under summaries/, a transcriber that writes .txt next to each media file. Like the vector facet, the destination is a pipeline, so get, update and delete take a pipeline id.

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

SubcommandRPC
dodil data object destination createCreateObjectPipelinePOST /:bucket/pipelines/object
dodil data object destination listListPipelinesGET /:bucket/pipelines?facet=object
dodil data object destination getGetPipelineGET /:bucket/pipelines/:pipeline_id
dodil data object destination updateUpdatePipelinePATCH /:bucket/pipelines/:pipeline_id
dodil data object destination deleteDeletePipelineDELETE /:bucket/pipelines/:pipeline_id

The old objects/destinations route tree is gone. The pillar split folded object destinations into pipeline facets — creating one is POST /:bucket/pipelines/object, listing is ?facet=object. The predecessor dodil.data.object.v1.ObjectService.CreateObjectDestination (which made a bare destination and left binding a pipeline to a second call) no longer exists; template_id is now required and both rows are written together.

dodil data object destination create

dodil data object destination create [name] -b BUCKET \ -t TEMPLATE_ID --target-prefix PREFIX \ [--target-bucket BUCKET] [--excluded-prefix PREFIX] [-d DESC]

Creates an object pipeline + its destination in one call (template-driven). K3 writes the store_entities destination row and the pipelines row bound to it together — if the pipeline row fails, the destination is rolled back. The pipeline runs the template against each matching object and writes the derived blob to a deterministic key derived from the source key plus target_prefix.

FlagShortTypeDescription
--template-tstringRequired. Object pipeline template id (a template producing a blob-shaped output)
--target-prefixstringRequired. Folder/prefix outputs are written under. A blank one is rejected — a blob writer with no prefix has nowhere to put the blob. Trailing slash optional (normalized off).
--target-bucketstringSibling bucket to write to. Defaults to the same bucket; must belong to the same org.
--excluded-prefixstringPrefix ingest rules skip on the source side. Empty falls back to _pipeline-out/. Set it to target_prefix to self-exclude a destination that writes into the folder it reads from.
--description-dstringHuman-readable description
# Summarize every uploaded doc, write the summary back under summaries/ # (this is what `recipe install summarize-to-markdown` does under the hood) dodil data object destination create doc-summaries -b kb-prod \ --template summarization \ --target-prefix summaries/ \ --description "Markdown summaries of uploaded documents"

--excluded-prefix exists to stop an ingest cycle. Without it, a destination that writes back into the same bucket re-ingests its own output forever. Ingest rules skip any source object under a destination’s excluded_prefix; when unset the server uses _pipeline-out/. If your target_prefix is a folder your rules also read from, set --excluded-prefix to the same value.

The response is a Pipeline with its destination attached. Capture pipelineIdget, update, delete and every ingest command key off it.

It does not create an ingest rule

Like every facet creator, CreateObjectPipeline derives no ingest rule — callers own rule scope. Nothing is ever processed until you bind one:

dodil data ingest add doc-rule -b kb-prod \ --source "$SOURCE_ID" \ --collection "$PIPELINE_ID" \ --include '**/*.pdf' --include '**/*.docx'

--collection on ingest add sets CreateRuleRequest.pipeline_id — pass the pipeline id regardless of facet. See dodil data ingest. The one shortcut that binds the rule for you is dodil data recipe install — e.g. the summarize-to-markdown recipe wires an object pipeline and its rule in one command.

dodil data object destination list

dodil data object destination list -b BUCKET

ListPipelines with facet = PIPELINE_FACET_OBJECT (?facet=object over HTTP). The response key is pipelines.

dodil data object destination list -b kb-prod -o json \ | jq '.pipelines[] | {pipelineId, name: .destination.name, targetPrefix: .destination.object.targetPrefix, targetBucket: .destination.object.targetBucket}'

dodil data object destination get

dodil data object destination get [pipeline-id] -b BUCKET

Takes a pipeline id. Read .destination.object for the targetPrefix / targetBucket / excludedPrefix the pipeline writes with.

dodil data object destination update

dodil data object destination update [pipeline-id] -b BUCKET \ [--target-prefix PREFIX] [--target-bucket BUCKET] \ [--excluded-prefix PREFIX] [-d DESC]

Edits the bound destination in place — only the flags you pass change; the rest are left alone. Per-facet validation applies exactly as on create, so a blank --target-prefix is rejected here too — update cannot walk a destination into a state create would have refused. The destination’s facet is immutable: an object destination stays an object destination.

FlagShortDescription
--target-prefixNew target prefix
--target-bucketNew target bucket
--excluded-prefixNew excluded prefix
--description-dNew description

dodil data object destination delete

dodil data object destination delete [pipeline-id] -b BUCKET

Deletes the pipeline row (and its destination). This is wiring only — it does not delete the derived files already written under target_prefix; those are ordinary objects you remove yourself. Delete the ingest rule first, or use POST /:bucket/pipelines/_batch-delete (BatchDeleteArtifacts) to unwind rules → pipelines → destinations in dependency order.

RULE_ID=$(dodil data ingest list -b kb-prod -p "$PIPELINE_ID" -o json | jq -r '.rules[0].ruleId') dodil data ingest delete "$RULE_ID" -b kb-prod dodil data object destination delete "$PIPELINE_ID" -b kb-prod

See also