Skip to main content
Manifests let you define Mixpeek resources in YAML files and apply them in a single operation. This enables version-controlled, reproducible infrastructure across environments.

Quick Start

Every collection needs a source and a feature_extractor; every retriever needs namespace, collections, and its stages pipeline. validate names any missing field, warns on unknown top-level keys (a typo like retreivers: won’t silently drop your search pipeline), and checks that references (namespace, bucket, collection names) resolve within the manifest.

Applying over resources that already exist

apply takes a mode query parameter. It defaults to create_only, which fails if any resource in the manifest already exists, because the manifest is treated as a closed world: a reference to a bucket that exists but is not declared is a validation error. Use create_missing to add to a namespace that already has resources. It creates what is missing, leaves what exists alone, and resolves references against the resources already in the namespace.
apply plans before it creates anything. It runs the same checks as validate, and any error refuses the whole manifest: nothing is created, and each error names the resource, the field and the fix. The plan refuses:
  • an extractor that no longer exists or is turned off on this deployment
  • a retriever stage that is not registered, such as a retired stage type
  • a feature URI that no collection in the manifest writes, such as one naming a renamed model
  • an alert application that does not map an input its alert’s retriever requires
A namespace budget above your organization’s budget is set to the organization’s budget, and apply reports the change in warnings. dry_run=true returns that plan and creates nothing. If a resource fails partway through, apply rolls back the ones it already created, and if the API is stopped in the middle of an apply, it rolls that apply back when it starts again.

Core Operations

Resource Types

Manifests support these resource types, applied in dependency order:
  1. Namespaces - Isolation boundaries with feature extractors and a budget
  2. Extractors - The extractors collections run, declared under extractors:
  3. Storage connections and buckets - Object storage with schemas
  4. Bucket syncs - Scheduled pulls from a connection
  5. Collections - Document stores with indexing
  6. Retrievers - Search pipelines
  7. Alerts - Retrievers or system conditions that notify you
  8. Clusters and taxonomies - Grouping and classification
  9. Triggers and webhooks - Automation

Extractors

An extractors: section declares the extractors the manifest’s collections run. Each entry has a name, a namespace, a version (default v1), a source and an optional compute_profile. Collections reference an entry by name in feature_extractor, and namespaces in feature_extractors. Once a manifest has an extractors: section, every extractor a collection or namespace names must be declared in it. Extractors apply before collections, so a collection never names an extractor that does not exist yet. source is one of:
  • marketplace: a feature extractor name from the registry, for example text_extractor. This is the default when source is omitted ({marketplace: <name>}).
  • model: a model your organization uploaded through POST /v1/models/uploads, as org:<model_id>. Apply validates the model if it has not been validated, then serves it as an extractor at zero replicas until the first call.
compute_profile carries the fields of a compute profile (resource_type, batch_size, max_concurrency, memory). Apply stores them as the namespace’s batch override for that extractor, merged over the extractor’s built-in profile when a batch is built. Two nested blocks are checked rather than stored:
  • batch.enabled: only true is accepted. A collection that names the extractor runs it in batch.
  • serve: the real-time serving block (enabled, min_replicas, max_replicas, min_reason, idle_timeout_s). Validate and apply check it; realtime still runs under the extractor’s built-in serve settings, and warnings says so. A min_replicas above 0 is refused with the monthly cost of the warm replicas named, because a template adds no always-on floor. Leave it at 0 and the first call after idle waits for a replica to start.
A collection naming an extractor the section does not declare is refused at plan with the name. Applying the same manifest again is a no-op for the extractors it declares.

Parameters

A parameters: section declares the values a manifest needs from whoever applies it, so a template ships without a hand edit or a secret inside it. Reference a parameter anywhere in the document as ${{ params.<name> }}. A reference that is the whole value takes the parameter’s type; one inside a longer string is formatted into it as text.
Pass the values on validate and apply as the parameters form field, a JSON object of name to value:
A missing required parameter, a value of the wrong type, a reference to an undeclared parameter, or a name declared twice is refused before any resource is created, naming parameters.<name>.

Budget

A namespace entry takes a budget with daily_usd and monthly_usd, the same fields the namespaces API takes as spend_budget. Omit it to use your organization’s namespace default. A value above your organization’s budget is set to the organization’s budget, and apply reports the clamp in warnings.
See Budgets for what happens when work reaches the limit.

Alerts

An alerts: section creates alerts beside the retrievers they watch. An alert mirrors the create request of the alerts API, plus namespace and retriever by name.
Plan refuses an alert that does not map an input its retriever requires. The alert fields are described on Alerts.

Track an apply

apply returns a task_id (absent on a dry run). GET /v1/tasks/{task_id} returns every resource of the plan with its states in order (planned, creating, created, exists, updated, or failed with the finding; a collection also passes warming and ready), each with the time it was reached. The same events arrive on the change feed and on a webhook.
The apply response also carries readiness: for each collection whose extractor needs a real-time serving app, whether that app is running. An app scaled to zero is running; its first call answers 503 with Retry-After while it warms.

Secret References

Use ${{ secrets.NAME }} to reference organization secrets:
Secrets must exist before applying. Use the validate endpoint to check for missing secrets.

Seed Data

A seed: section gives a namespace sample objects to answer its first query. After the resources are created, apply ingests them into the named bucket with one batch, bounded by max_objects (default 50, at most 500). Applying the manifest again finds that batch and ingests nothing more. Each object names a sample file for each blob property under blobs. Keys come from the Mixpeek sample set, samples/starter/<file>. When the bucket declares other properties, set them on the object beside blobs, the way the object create API takes them:
Validate and apply check every object against the bucket’s schema before anything is created. A missing required property, a property the bucket does not declare, a value of the wrong type, or a blob property given outside blobs is refused, and the error names the bucket, the object and the property.

Acceptance

A template can carry an acceptance: block: the steps that show its use case works and what each must return. Apply creates nothing from it. Mixpeek’s template acceptance harness runs the steps after an apply, in order, and reports the step that missed. Each kind reads its own expect fields: query reads min_results, top_field, top_equals and top_contains; documents reads min_documents; alert reads min_fires; realtime reads dims, the length of the returned vector.
Validate refuses a step whose retriever, collection or alert this manifest does not declare, an expect field the step’s kind does not read, and a step with no outcome, each naming acceptance.steps.<name>.

Dependency Resolution

Resources are created in topological order. The manifest engine:
  • Resolves cross-resource references automatically
  • Detects circular dependencies
  • Rolls back all changes if any creation fails

Workflows

Environment Replication

Pre-deployment Validation

CI/CD Integration

References