How an edit flows
1
Read the current model
The agent loads the live model with
get_graph — entities, relationships, and dimensions — and the tables and columns the model can be built on with sl_get_semantic_schema. To see how analysts actually query the data, it can pull the warehouse query history with fetch_qlh.2
Make the change
It composes an ordered list of typed operations — add an entity, change a relationship, declare a dimension — and submits it with
make_edit. Every operation is validated first: structure, table membership, a dry run of each SQL base query, and definition checks. Any error rejects the whole edit with issues keyed to the operation, and nothing is saved.On success, the response tells your agent which flow it is in:status: "committed"with abranch— the edit is a pending change. Your agent is switched to it, so its follow-up questions andget_graphrun against the pending change, not the live model. This is the flow on accounts with Model Versioning.status: "processing"with achangeset_id— the edit was submitted for review. Your agent pollssl_get_edit_stateuntil each operation isconfirmed, and a Data Expert then approves the resulting edit sessions in Jedify before they can be published.
3
Verify
Ask questions — they run against the pending change. Run a test set against it with
ask_benchmark to check that known answers did not regress. Where Model Versioning is enabled, compare_changes shows exactly what differs from the live model.4
Publish or discard
publish_change makes the change live. It requires explicit confirmation: the first call returns needs_confirmation and your agent asks you before calling again with confirm: true. discard_change abandons the pending change instead.Nothing goes live until you confirm. Your agent must ask before it publishes, and on accounts without Model Versioning a Data Expert also approves the edit in Jedify first.
Tools
Read the model
Make, publish, and discard changes
Verify and version
These tools are available when Model Versioning is enabled for your account. On other accounts they return an error saying the operation isn’t available —make_edit, publish_change, and discard_change are the editing flow there.
These match what you see in the app’s Versions menu and review screen.
Test sets
A test set is a saved group of questions with recorded answers. Re-running it re-asks every question and compares each new answer to the recorded one, so a change to the model or the data shows up as a failing case.
When you ask your agent to “create a test set for these questions”, it asks them all at once with
ask_questions, waits for them to finish, keeps the ones that report eligible_for_test_set: true, and creates the set from those — reporting any question that was not eligible and why.
Cross-source relationships
For accounts with more than one data source: relationships that join an entity in one source to an entity in another.API sources
Listed only when your account has a connected API source (such as HubSpot). API entities have their own authoring format and write tool; they share the same pending change andpublish_change as everything else.
What an edit can contain
make_edit takes an ordered list of operations. Each one carries a local_ref your agent chooses (echoed back in the results and in any issue) and references entities by label; an entity must be declared before an operation that references it.
Relationships specify a cardinality (
one_to_one, one_to_many, many_to_one, many_to_many), a join type (INNER, LEFT, RIGHT, FULL, CROSS), and join keys — equality by default, or between with a high bound.
Semantic dimensions are declared on an entity by column (from_column or semantic_id) with a name and a generic definition. They are shared: if the column already has a dimension, the existing one is linked and your name and definition are kept aside. Dimensions are add-only through make_edit; on accounts with Model Versioning, unlink_dimensions on update_node drops an entity’s link to a dimension.