Skip to content

What's New in Version 1.30.4

September 15, 20265:43 PM UTC

Version 1.30.4 of the relationalai Python package is now available!

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

Terminal window
pip install --upgrade relationalai
  • You can now use the geometric_mean aggregate to average rates and ratios, and group it with per() like any other aggregate. It expects non-negative numbers.

  • Run the new rai config check command to catch configuration mistakes before they cause errors later. It checks that your configured reasoners have valid names and sizes for your Snowflake account’s cloud.

  • Queries in a deployed model that read from a Snowflake source table now run faster automatically. RelationalAI no longer sorts the table when your query doesn’t use its row order.

  • Aggregates over a relationship chain, such as min(Customer.transaction.pay_date).per(Customer), now run faster automatically. RelationalAI no longer adds an unnecessary join.

  • You can now deploy a model into a Snowflake schema named after a SQL reserved word, such as ORDER or SCHEMA. Before this release, the deploy failed with an error saying the object did not exist.

  • You can now deploy a model with a Snowflake role that only has USAGE on a schema your administrator created for you, with its tags already in place. RelationalAI no longer creates an account-wide management schema.

  • If your deploy role can’t create a schema it needs, the deploy now stops early with a clear error that gives you the exact grants and CREATE SCHEMA statements to run, instead of failing partway through.

  • Redeploying a model now keeps the Snowflake grants and compatible object and column tags you applied to its tables. Before this release, a redeploy could drop them.

  • math.haversine now returns the correct distance. Before this release, it returned a wrong value, so recompute any distances you calculated with it.

  • A select whose only content is a single function call on a literal, such as select(parse_number("abc", 19, 0)), now returns one row with a null value when the call produces nothing, instead of no rows. If any of your logic treats an empty result as a signal, review it, since these queries now return a null row you can handle with null-safe logic.

  • When you deploy a model, a rule whose condition matches no rows no longer adds any facts. Before this release, a rule that defined two or more fixed facts added them anyway, leaving facts in your model that shouldn’t be there.

  • When you deploy a model, a grouped aggregate whose default value sits behind an unreachable branch no longer duplicates rows. Before this release, it could return two rows per group instead of one.

  • Deploying, branching, and pulling a model through its op log is more reliable. A model that uses a standard-library function, such as parse_float, now loads consistently in any Python session, and a model that sets the preserve_column_case deployment option no longer regenerates invalid Python.