ModelWorks logoModelWorks
JSON TransformObject

merge

Deep-merge one or more objects into the current object

merge

Deep-merges every object in objects (in order) into the current object. Nested objects are merged recursively; scalar and array values are overwritten.

Options

OptionTypeRequiredDefaultDescription
objectsarray<object>YesObjects to merge in. Selectors are resolved per object.

Example

Input

JSON
{
  "model": "gpt-4o-mini",
  "params": { "temperature": 0.2, "max_tokens": 1024 },
  "tags": ["base"]
}

Operation

JSON
{
  "type": "merge",
  "options": {
    "objects": [
      { "params": { "temperature": 0.7 }, "tags": ["override"] }
    ]
  }
}

Output

JSON
{
  "model": "gpt-4o-mini",
  "params": { "temperature": 0.7, "max_tokens": 1024 },
  "tags": ["override"]
}

In a Circuit Step

JSON
{
  "name": "apply_request_overrides",
  "description": "Layer the request's overrides on top of the default config",
  "function": "circuit.core.transform.json",
  "input": {
    "source": "${{ secrets.default_config }}",
    "operations": [
      {
        "type": "merge",
        "options": {
          "objects": [
            "${{ input.overrides }}"
          ]
        }
      }
    ]
  },
  "outputs": [
    {
      "name": "final_config",
      "description": "Merged config with request overrides applied",
      "value": "${{ apply_request_overrides.output.transformed_result }}"
    }
  ]
}

Notes & gotchas

  • Errors with merge: expected object if the input is not an object.
  • Merge is deep for objects only: params.temperature is merged into the existing params map. Arrays are overwrittentags becomes ["override"], not ["base", "override"]. Use concat on the array first if you want to combine.
  • Each entry in objects is selector-evaluated, so "objects": ["${{ input.overrides }}"] works.
  • Non-object entries are silently skipped (no error, no merge).
  • Order matters: later objects override earlier ones at scalar leaves.
On this page

On this page