Skip to content

What's New in Version 1.20.1

July 9, 20269:29 PM UTC

Version 1.20.1 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
  • Deployed Cortex tools now start returning results faster. Before this release, a deployed tool could spend noticeable time re-checking Snowflake schema information on every call before it ran the actual query. Now PyRel reuses that information across calls, which reduces startup delay for repeated requests.
  • Fixed a bug where ReasonersClient.ensure() and ReasonersClientSync.ensure() could silently reuse an existing prescriptive reasoner even after your configured settings had changed. Before this release, calling ensure("PRESCRIPTIVE") after changing your reasoner size or settings could return the old, mismatched reasoner without any warning. Now PyRel compares your configured settings against the existing reasoner before reusing it, and raises ReasonerConflictError when they do not match so you can resolve the conflict explicitly.

  • Fixed a bug where querying certain Snowflake columns returned NULL or a SQL error instead of your data. This affected columns whose names use capital letters, special characters such as ., or a word that SQL reserves for its own use, such as ORDER. Before this release, PyRel changed a name like PrimaryAssetId to all uppercase (PRIMARYASSETID) under the hood. Snowflake treats those as two different columns, so it looked for a column that didn’t exist and returned NULL. Now PyRel uses the column name exactly as it is stored, so these queries return the correct values.

  • Fixed a bug where a negated comparison could silently apply a different condition than the one you wrote. Before this release, an expression such as not_(Person.age > 18) could be stored and re-evaluated as not_(Person.age) instead. That selects entities with no recorded age, not entities under 18, and PyRel gave no indication that the condition had changed. Now the comparison is always preserved exactly as written.

  • Fixed a NameError that could occur when using Model.union() to collect values from multiple properties. Before this release, a union such as m.union(Employee.email, Employee.phone) could fail with NameError: name 'Any' is not defined. Now this expression executes correctly and returns the combined values.