What's New in Version 1.30.3
Version 1.30.3 of the relationalai Python package is now available!
To upgrade, activate your virtual environment and run the following command:
pip install --upgrade relationalaiNew Features and Enhancements
Section titled “New Features and Enhancements”-
You can now sign in to Snowflake two new ways. Pass your private key to
JWTAuthin memory with a newprivate_keyfield instead of saving it to a file, or inject your own Snowpark session intocreate_configwithsnowflake_session=. -
Refreshing a deployed model is now faster when some of its outputs are independent of each other, because those outputs refresh in parallel instead of waiting for unrelated ones. This happens automatically.
-
The
rai debuggercan now show how long each part of a refresh took, so you can find the slow ones. Open a finished refresh run and select View Timeline to see the whole refresh and its parts laid out on a timeline. -
Added the floats module to the public
stdnamespace, making its functions available like other standard-library modules. You can now usestd.floats.float()to convert a value to a float, orstd.floats.parse_float()to turn a string into a float.
Bug Fixes
Section titled “Bug Fixes”-
An aggregate like a count or sum now respects a
unionfilter, or a unary relationship, applied to it inwhere(). Before this release, the aggregate ignored that filter and ran over every row, so it could return a wrong total or count with no error. -
aggregates.limitnow returns only the number of rows you asked for when you order it by the grouping keys of another aggregate in the same query. Before this release, it ignored the limit in that case and returned every row. -
A query that aggregates over a cycle of relationships, such as A knows B, B knows C, and C knows A, now returns a result. Before this release, a query like this could fail to complete, because the reasoner could not settle on a way to order it and gave up instead of returning a result.
-
Deploying a model that reads a relationship on a concept with a composite key now works. Before this release, the deploy could fail or the relationship could come back empty.
-
Deploying a model no longer fails when one of its output column names contains a hyphen, a space, or a reserved word. Before this release, the refresh stopped with an
invalid identifiererror. -
Filtering by calling a relationship with a value, such as
order.status("open"), now raises a clearAmbiguousRelationshipReaderror when the name matches more than one relationship, and tells you to compare with==instead, as inorder.status == "open". Before this release, it failed with a confusing internal error. -
Deploying a model no longer prints warnings that did not mean anything was wrong. A warning still appears when you force an output to a Snowflake object type it cannot use, and tells you how to fix it: set the output to
tableor remove the override. -
Redeploying a healthy model that sets
deployment.suspend_after_minsno longer suspends the refresh tasks it just created, so the model keeps refreshing after a deploy. The tasks still auto-suspend once the configured number of minutes has passed since the deploy. -
Deploying a model while someone is querying it no longer fails at the final step with an error asking you to pull and retry. Those queries write harmless background metadata that used to block the deploy, which now finishes on its own.
-
A deploy that is rejected before it applies its changes no longer leaves the model’s schema behind in Snowflake for you to clean up, because RelationalAI now creates Snowflake objects only when the deploy goes ahead.
-
Deploying into a schema or with ownership tags that already exist now reuses them instead of failing to re-create them, and errors only if creating something genuinely fails.