Skip to main content

Breaking change in arize-phoenix-client 2.6.0+ (Python) and arize-phoenix 15.0.0+ (server)

client.datasets.create_dataset() now defaults to upsert semantics: if a dataset with the given name already exists, incoming examples are merged into the latest version rather than returning a 409 Conflict. New examples are created; existing examples matched by their stable id are updated. This is a breaking change for callers that relied on the old fail-on-duplicate behavior.

Upsert behavior#

  • New dataset — created as before; no behavior change.
  • Existing dataset, no id on examples — examples are appended as new examples in a new version.
  • Existing dataset, id supplied — examples whose id matches an existing example are updated in place; unmatched ids are inserted as new examples.

To opt back in to the strict create-only behavior, pass action="create" directly on the REST endpoint — the Python client does not expose this option, as upsert is now the recommended default.

Supply stable example IDs for deterministic updates#

Provide an id field on each example so re-uploads update the same row rather than inserting duplicates: