Skip to content

upsert_commentary

Create or edit narrative analysis on a model run, or on one named output of the run (bt-p1opf.8: merges the former create_commentary and update_commentary tools). Omit commentary_id to CREATE a new row at version=1 — pass run_id (and optionally output_name).

NameTypeRequiredDefaultDescription
textAnnotated[str, Field(description='Commentary text content.')]Yes
commentary_idAnnotated[str, Field(description='UUID of an existing commentary row to UPDATE. Omit to CREATE a new row instead (run_id becomes required).')]No''
run_idAnnotated[str, Field(description='UUID of the model run to attach a new commentary row to. Required when commentary_id is omitted (create); ignored otherwise.')]No''
output_nameAnnotated[str, Field(description='Named output within the run that this commentary describes. Create-only; ignored when commentary_id is set.')]No''
expected_version`Annotated[intNone, Field(description=‘Expected current version, for optimistic concurrency control. Required when commentary_id is set (update); ignored otherwise.’)]`NoNone
change_noteAnnotated[str, Field(description='Optional brief note describing what changed in this version of the commentary.')]No''
workspace_id`Annotated[strNone, Field(description=ID_BACKED_WORKSPACE_ID_FIELD_DESCRIPTION)]`NoNone

Returns a structured object. Top-level fields:

  • commentary (object)

See the response example below for the full payload shape.

{
"name": "upsert_commentary",
"arguments": {
"commentary_id": "ffffffff-ffff-ffff-ffff-ffffffffffff",
"text": "Revenue beat plan by 14% after FX rebase; SaaS expansion remains the primary driver.",
"expected_version": 1,
"change_note": "Revised after FX rebase"
}
}
{
"commentary": {
"commentary_id": "ffffffff-ffff-ffff-ffff-ffffffffffff",
"tenant_id": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
"model_name": "forecasts",
"run_id": "eeeeeeee-eeee-eeee-eeee-eeeeeeeeeeee",
"output_name": "revenue",
"author_id": "22222222-2222-2222-2222-222222222222",
"text": "Revenue beat plan by 14% after FX rebase; SaaS expansion remains the primary driver.",
"version": 2,
"archived_at": null,
"archived_by": null,
"created_at": "2026-04-28T10:00:00+00:00",
"updated_at": "2026-04-28T10:05:00+00:00"
}
}
  • Module: Run Commentary
  • Requires authentication via API token or Auth0 JWT.