Skip to content

Release Notes

2026.9.26-0821a55

Native App


Version 2026.9.26-0821a55 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.

Bug Fixes

  • Fixed an issue where incremental maintenance, an opt-in preview feature, could return incorrect results or fail with DeltaProcessingError or FDError.

  • Fixed a bug where predictive reasoner tasks ignored the ICLConfig.random_state seed.

1.33.0

Python SDK


Version 1.33.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 install the relationalai package on Python 3.14. It supports Python 3.10 through 3.14.

  • You can now apply your own Snowflake masking policies and projection policies to the columns of a model you deploy to Snowflake, in addition to the row access policies added in the previous release. A deployment now validates every configured policy up front and reports any that are missing or inaccessible. See Configure access policies for setup instructions.

    Here is an example configuration for applying masking and projection policies to a deployed output:

    deployment:
      outputs:
        overrides:
          - objects: [CUSTOMERS]         # the deployed output to protect
            policies:
              masking_policies:          # mask values for some roles
                - fqn: GOVERNANCE.POLICIES.PII_MASK
                  columns: [EMAIL, PHONE]
              projection_policies:        # hide a column from some roles
                - fqn: GOVERNANCE.POLICIES.HIDE_SSN
                  columns: [SSN]
    
  • Installing relationalai no longer includes OpenTelemetry by default. If you already use its optional handler with the older v0 PyRel API to send traces for troubleshooting, run pip install 'relationalai[otel]' when you upgrade to keep tracing working. Otherwise, you don't need the extra.

Bug Fixes

  • Running several queries on one model at the same time, such as calling to_df() from multiple threads, no longer fails with an "Unground Variable" error, returns empty results, or hangs. You still cannot change the model while these queries run, and running an export or an optimization solve at the same time is also unsupported.

  • If a concept inherits from more than one concept, or uses identify_by with more than one property, its queries and exports no longer put values in the wrong columns or return empty results. These problems only showed up for models deployed to Snowflake, which is a Public Preview feature.

  • Fixed a bug that caused local copies of a shared model to diverge from the original when collaborating with rai models pull and rai models merge. These commands are in Public Preview.

  • When your Snowflake connection does not specify a database, deployment now uses the database in a fully qualified deployment.schema instead of failing with Database '"default"' does not exist or not authorized. Set the option to <DATABASE>.<SCHEMA>; if neither the connection nor this setting specifies a database, deployment reports a clear configuration error.

  • You can now deploy a model into a Snowflake transient database or schema without an Unknown domain: TRANSIENT error. Set oplog.table_type: standard in your configuration first, because Snowflake cannot create the default Hybrid Tables in a transient location.

  • If the role set by the deployment.role configuration option cannot set Snowflake's trace level, the deploy warning now tells you to grant MODIFY TRACE LEVEL.

  • The rai debugger no longer freezes or crashes on large traces or refresh logs. Big traces render as plain, scrollable text, the Refresh Log handles bigger dependency graphs and shows an error instead of going blank when one is too large, and it opens on the timeline view instead of the graph.

2026.9.19-cde4001

Native App


Version 2026.9.19-cde4001 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.

Bug Fixes

  • With incremental maintenance enabled, the logic reasoner no longer recomputes a query from scratch when you redefine a rule it depends on without changing the source data. Incremental maintenance is a preview feature.

  • If a model is deleted while a transaction is running against it, that transaction now fails with a clear reason (such as "database not found") instead of a generic internal error.

  • Running many queries at the same time no longer crashes the logic reasoner while it compiles them.

1.32.0

Python SDK


Version 1.32.0 of the relationalai Python package is now available!

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

pip install --upgrade relationalai

Breaking Changes

  • This breaking change affects only prescriptive reasoning, which is a Public Preview feature available by request. When you create an optimization problem in your Python code, some constraints and objectives that used to be accepted now raise a clear error, so review your existing problems after you upgrade. For example, applying count directly to a decision variable is now rejected because it counts rows rather than the values the solver chooses. A few others still build but now describe a different problem. To check them, print the problem with Problem.display() and confirm the formalized constraints and objectives match what you intended.

New Features and Enhancements

  • You can now use the percentile and median aggregates to summarize your data. You can group either one with per() like any other aggregate.

  • When you deploy a model to Snowflake, you can now apply your own existing Snowflake object tags to every object the deploy creates by listing them under deployment.tags. On a redeploy, each object keeps only the tags you list.

    deployment:
      tags:
        GOVERNANCE.TAGS.COST_CENTER: engineering
    
  • You can now attach an existing Snowflake row-access policy to the tables, views, and dynamic tables a deploy creates by adding a per-output policies override under deployment.outputs. RelationalAI does not fully check the policy first, so an invalid one can still fail when the deploy runs.

    deployment:
      outputs:
        overrides:
          - objects: [ORDERS]
            policies:
              row_access_policy:
                fqn: GOVERNANCE.POLICIES.TENANT_ACCESS
                columns: [TENANT_ID]
    
  • You can now point RelationalAI at a Snowflake tag you already created for object ownership with deployment.managed_tag. A governed account can then deploy a model without the Snowflake CREATE TAG privilege. The deploying role needs APPLY on the tag and USAGE on the database and schema that hold it.

    deployment:
      managed_tag: GOVERNANCE.TAGS.RELATIONALAI_MANAGED
    
  • You can now open a rai doctor report in the rai debugger offline, without access to the Snowflake account it came from. The trace, Refresh Log, and deployment graphs all work from the unzipped report.

Bug Fixes

  • A model with a wide concept, roughly 43 or more nullable properties, that failed to deploy with a RecursionError now deploys again. This fixes a regression introduced after version 1.29.1.

  • Fixed an issue that caused some models to fail to deploy with an "object already exists" error.

  • If you place a model's metadata and operation log in a custom schema with deployment.meta_schema, RelationalAI now uses that location consistently for deploys, teardown, and branch operations. Changing the setting later does not move existing metadata, so set it before your first deploy.

  • Redeploying a model now recreates every changed Snowflake object consistently, and it preserves the grants you added to its procedures and functions. Because objects are recreated rather than altered, you may need to restore other object-level state yourself.

  • Deploying a model to Snowflake is faster, because RelationalAI now runs its two metadata setup phases in parallel.

  • Two deployment records that claim the same model identity no longer break rai models listing or teardown for the whole database. The conflicted model stays listed with a warning that explains how to repair it.

  • For models deployed to Snowflake, the variance and variance_samp aggregates no longer lose precision on whole-number input. Expressions that raise a value to a power with **, such as math.haversine, no longer fail. This does not fix geometric_mean over negative input on Snowflake, which is still unsupported.

  • For models deployed to Snowflake, comparing two entity types with == no longer errors when their identities are stored differently, for example a generated hash versus an integer identify_by key. Because the two kinds of identity can never be equal, the comparison now returns False.

  • A where() filter whose condition is a Python builtin call with a literal argument, such as abs(-1) == 2, now filters when the condition is false, as expected.

  • For models deployed to Snowflake, queries that compute several aggregate measures over the same grouping now run in a single pass instead of re-scanning the data once per measure. The results are unchanged.

  • Calling inspect() or to_df() on a define or require fragment now raises a clear error, "Cannot inspect a define" instead of crashing. A define or require adds to your model rather than running as a query, so there is nothing to inspect.

  • When a configuration file that RelationalAI discovers automatically, such as ~/.rai, the Snowflake CLI config, or a dbt config, fails to load, RelationalAI now reports the real error and names the file that failed, instead of a generic "no configuration found" message. A commented-out {{ env_var(...) }} line is also no longer evaluated, so it can no longer fail on an unset variable.

2026.9.11-438c741-1

Native App


Version 2026.9.11-438c741-1 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

  • Write-write conflicts between transactions on the same model now return a clear, actionable error instead of a confusing system error. The message reads The model is currently locked by active write transaction(s) and includes the RAI CLI command to cancel the blocking transaction.

Bug Fixes

  • Incremental maintenance no longer fails with a DeltaProcessingError or reads back the wrong string value for a relationship with a functional dependency whose values come from more than one rule and include long strings.

  • Prescriptive problems that repeat a decision variable or coefficient are now rejected with an InvalidModel error instead of silently solving a different problem than the one you defined. Re-run any such problems solved before this version to confirm their results.

  • In a prescriptive problem, a count over something other than conditions the solver decides, such as decision variables directly, now fails with a clear InvalidModel error instead of an opaque OTHER_ERROR.