Skip to content

Release Notes

1.26.2

Python SDK


Version 1.26.2 of the relationalai Python package is now available!

To upgrade, activate your virtual environment and run the following command:

pip install --upgrade relationalai

New Features and Enhancements

  • The new rai usage command reports your account's RAI consumption and estimated cost, broken down by compute pool, with date filters and table, JSON, CSV, or HTML output. Cost figures exclude storage and are estimates rather than invoices, and totals are lower bounds when PyRel can't identify a compute pool's machine family.

    For example, write a July 2026 usage report to a CSV file:

    rai usage --start 2026-07-01 --end 2026-07-31 --format csv --output-file usage.csv
    

    :::note The Snowflake role for your active profile needs access to SNOWFLAKE.ACCOUNT_USAGE in order to run the rai usage command. :::

  • Model deployment now builds large models faster by removing redundant work. In one model, the initial build was about 2.4× faster. Savings depend on your model and the size of your Snowflake warehouse.

Bug Fixes

  • A query that computes a value (such as a sum or a true/false flag) in one select() step and selects that same value again in a later select() now returns the correct rows. Previously, it could return too few rows or fail with an error.

  • In a deployed model, computing an aggregate value (such as a sum) and then filtering on it now returns the correct result. Previously, if the definition used a union to combine several alternatives, the value could be inflated due to over-counting.

  • If you compute an aggregate with .per() and use it only to filter rows without also selecting it, the query now returns the expected rows. Previously, it could return no rows at all.

  • Some not_() checks in a deployed model are now much faster. In one case, a query that ran for over 13 minutes now finishes in about 13 seconds.

  • PyRel now raises a clear UnsupportedOperation error when Louvain, Infomap, and label propagation algorithms are used in a deployed model. These algorithms are currently not supported.

  • Grouping an aggregate by a key that has no values now raises a clear GroupKeyHasNoDomain error instead of unexpectedly combining your per-group results into one overall total.

  • Deploying a model that uses quoted, case-sensitive Snowflake names no longer fails with an "Object does not exist or not authorized" error.

  • When more than one Snowpark session is active, PyRel now surfaces Snowflake's multiple-active-sessions error (1409) instead of quietly opening a new connection, so you can choose which session to use.

  • If you pass your own Snowpark session to create_config(), deployment now uses that session when it switches Snowflake roles, instead of creating a separate one.

  • Explicitly setting reasoners.logic.incremental_maintenance to "off" in Python now takes effect. Previously, PyRel could reset it to "auto", which turned incremental maintenance on.

  • Some match (|) expressions that used to fail with an is unground error (for example, 'pet' is unground) now work correctly.

  • Fixed a bug that could cause concept tables in a deployed model to be updated on the wrong schedule.

  • Fixed an edge case where a query could mix up similarly named properties on different kinds of entities.

  • Fixed an edge case where a deployed model could apply a definition even when its condition wasn't met.

  • Fixed an edge case where matching an entity by its identifying property could return a match even when no such entity existed.

  • Fixed an edge case where an equality between two values in a query condition could incorrectly return no rows.

2026.8.9-8d1935f

Native App


Version 2026.8.9-8d1935f of the RelationalAI Native App is now available!

Note that RelationalAI Native App upgrades are applied automatically and require no action on your part, unless you have opted-in to manual upgrades.

New Features and Enhancements

  • Deploying and refreshing a model is now faster. Each deploy and refresh reloads the tables your model produces, and that step now runs as a few batched operations instead of repeating the same work once per table. The improvement grows with the number of tables a model produces, so larger models benefit most while small models see little change.

Bug Fixes

  • Fixed some errors that could occur with incremental maintenance turned on, a preview feature (off by default) that reuses earlier work when you rerun a query after your data changes. In particular, certain aggregations could cause queries to fail with an internal error. They now work as expected.

1.26.1

Python SDK


Version 1.26.1 of the relationalai Python package is now available!

To upgrade, activate your virtual environment and run the following command:

pip install --upgrade relationalai

New Features and Enhancements

  • Your first rai models deploy on a new branch now works without a manual rai models pull first. rai models switch pulls the branch for you. A bare rai models pull also now defaults --path to the model.path in your raiconfig.yaml.

  • Tearing down a parent branch now removes its child branches too, instead of leaving them orphaned and unable to pull or merge. As a safeguard, rai models teardown --allow-children stops when a child has unmerged changes until you also pass --allow-unmerged. rai models list and rai doctor report now flag any branches orphaned by an earlier teardown.

  • The rai models commands now recognize when the schema you name is already your active model branch, instead of acting as if it changed. rai models switch no longer prints a false "Switched" message, rai models branch tells you to pick a different name instead of erroring, and rai models list marks your active schema with a *.

Bug Fixes

  • Fixed a bug that caused queries using union() to run slowly and, in some cases, hang indefinitely.

  • Fixed a bug that could cause aggregates grouped with per() to evaluate incorrectly when used solely as a filter and not selected in the query results.

Fixed a bug that caused aggregates grouped by an entity with a composite key to evaluate incorrectly.

  • Fixed an issue that could cause an "invalid identifier" error when deploying a model.

  • Fixed a bug that could case an "Object does not exist" error when deploying a model to a case-sensitive schema name.

  • Fixed a bug where a deploy could fail when a Snowflake view or dynamic table (an auto-refreshing Snowflake table) was created before another object it reads from.

  • Fixed a bug where deploying an unedited rai models init project could fail immediately with a "Symbol ... is already registered" error.

  • Fixed a bug that could cause redeploying a model without any changes could fail.

  • Fixed an issue that prevented model re-deploys from picking up changes to a data sources Snowflake object.

  • Fixed a model deployment bug that ignored a user-supplied Snowpark session passed to create_config(), which is supposed to override any auto-detected Snowpark session.

  • Fixed a bug that could cause rai models pull or rai models merge to generate a runnable shared_model.py file. If you encountered this bug, pull or merge again to regenerate a corrected shared_model.py.

1.26.0

Python SDK


Version 1.26.0 of the relationalai Python package is now available!

To upgrade, activate your virtual environment and run the following command:

pip install --upgrade relationalai

New Features and Enhancements

  • You can now deploy a model from Python with model.deploy() as a programmatic alternative to the CLI. It relies on the operation log, which is off by default, so set oplog.enabled to true to turn it on.

  • If you run PyRel inside Snowpark Container Services (SPCS) and connect via OAuth, use the new host option in your Snowflake connection configuration to the container's SNOWFLAKE_HOST endpoint. OAuth tokens in your configuration are validated against this host.

  • You can now cap how long PyRel waits for a reasoner to become ready or a query to finish by setting data.poll_timeout_mins in your raiconfig to a number of minutes so it raises a clear timeout error instead of hanging forever. It is off by default and only stops your Python client, not any work already running in Snowflake.

  • If your Snowflake account cannot use hybrid tables, such as a Tri-Secret Secure account, you can now set oplog.table_type: standard in your raiconfig to provision the operation log as a standard table instead of the hybrid default. Note that changing this setting after your first deployment does not update the existing oplog table. You'll need to delete the table and re-deploy in order for it to take effect.

  • The product() aggregation function, which multiplies values together, is now supported in deployed models.

  • The rai debugger has a new Refresh Log view that shows a deployed model's install plan and refresh history as a diagram, so you can watch a refresh as it runs. You can also start it with --no-show to skip opening a browser window when you restart it.

  • PyRel now catches a conflicting implicit_properties setting when you deploy, branch, merge, or pull with the operation log enabled, raising ModelConfigMismatchError when your current setting differs from the one recorded at the model's deploy, instead of letting the conflict break the model later. This setting (part of ModelConfig) controls whether using an undeclared property creates it or raises an error. To resolve the error, match the recorded setting or pass --force to override and record the new one.

  • Improved performance for refreshing a deployed model.

  • Improved generated output table name in deployed models. For example, tables with generated names like Number_38_0_datapoints will now be saved as simply datapoints. If downstream queries or dashboards referenced the old name, update them after you redeploy.

  • Improved the error message you get when a deploy can't start because another is already in progress.

Bug Fixes

  • Fixed a model deployment bug where a model that used Model.Enum() failed to deploy with the errorValueError: No SQL type for column 'x'.

  • Fixed a bug where ranking or limiting rows over a concept with a composite key in a query or definition would fail with an invalid identifier error.

  • PyRel now internally sorts entities with composite keys differently than it used to. You may see results for queries that involve rank() or top() return rows where the rank is tied in a slightly different order.

  • Fixed a model deployment bug where calling re.findall() or strings.split() on a Table column produced extra rows in the output table.

  • Fixed a bug where a query computed two count(...).per(key) values over the same text key, one for values in a list and one for values not in it. The in-list count silently returned NULL on every row. Both counts now return the correct number.

  • Fixed a bug that caused some aggregations over properties that are set for some entities but not others to include values from entities that should have been excluded.

  • Fixed a model deployment issue that caused some models to fail with aSQL object_name collision error when deployed.

  • Fixed a bug where an unresolved chained reference in a query (a multi-step property or relationship lookup that was never given a value) could silently produce incorrect query results. PyRel now raises an error.

  • Fixed a bug in the prescriptive reasoner where a count or a summed objective (a total or a tally aggregated over rows) could silently drop rows that shared a value, so the solver optimized the wrong total. For example, with costs of 5, 5, and 7, the two 5s collapsed into one, giving 12*x instead of 17*x. Each row now contributes its own term.

  • The prescriptive reasoner now rejects a non-numeric value, such as a text or date property, used where a number is expected, with a clear error when you build the problem. Before, the problem built successfully and failed only during the solve, with a confusing internal error.

  • Fixed several problems with tearing down a deployed model using rai models teardown. Leftover local state could be wrongly reused on a later redeploy, and a partial teardown could not be completed by re-running it. Teardown now cleans up reliably and can be safely re-run after a partial failure.

  • Fixed a bug where rai models teardown and rai models merge could act on a malformed schema. Both commands now always reject a malformed or ambiguous schema name with a clear error.

2026.8.3-49c7820

Native App


Version 2026.8.3-49c7820 of the RelationalAI Native App is now available!

Note that RelationalAI Native App upgrades are applied automatically and require no action on your part, unless you have opted-in to manual upgrades.

New Features and Enhancements

Bug Fixes

  • Fixed an issue that caused data streams to be quarantined during brief pauses in the CDC service.

  • Fixed an issue that could stop a data stream from syncing when the app's routine cleanup removed part of the internal data store that the CDC service uses to load your data.

  • Prevented the app from leaving Snowflake compute resources running indefinitely when an internal engine fails to start.