Skip to content

Release Notes

1.0.15

Python SDK


Version 1.0.15 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

  • Added support for a RAI_ACTIVE_PROFILE environment variable as a way to select the active profile. You can now set the active profile with RAI_ACTIVE_PROFILE=<profile_name> in addition to active_profile in raiconfig.yaml. See Use profiles to manage multiple configurations for details.

Performance and Reliability

  • Reduced Model.Table() overhead on large Snowflake schemas. Before, PyRel could scan the whole schema on each lookup. Now PyRel fetches metadata one table at a time, which reduces cold-start overhead when a model touches many tables in a large schema. For background on declaring Snowflake sources, see Declare data sources.

  • Improved behavior on read-only notebook and container file systems. Before, PyRel could fail while writing caches or trace files with misleading errors. Now it falls back to a writable temporary directory in those environments.

Bug Fixes

  • Fixed Snowflake authentication failures that could surface as a misleading No default Session error. PyRel now reports the underlying Snowflake auth failure when it cannot create a new session.

  • Fixed a startup crash in rai debugger. Before, some launches could fail with RuntimeError: You must call ui.run() to start the server. Now the debugger starts without that reload-related crash.

  • Fixed Model.data() so rows with mixed integer and floating-point columns preserve integer values. Before, some integer fields could be upcast and show up as values like 1.0 in query results.

1.0.14

Python SDK


Version 1.0.14 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

  • Improved notebook support. Before, rerunning notebook cells could leave behind earlier model state, and diagnostics were less notebook-aware. Now PyRel cleans up prior model declarations more reliably across reruns and renders diagnostics inline in notebooks when possible.

  • Added reasoner-specific connection overrides in raiconfig.yaml. You can now set reasoners.<type>.connection so a specific reasoner uses a different connection than the global default_connection. For broader reasoner configuration, see Configure reasoners.

  • Added the rai debugger CLI command.

  • Added pagination to jobs:list and reasoners:list. Use --limit and --offset to control large result sets.

Bug Fixes

  • Fixed model.data() so DataFrame columns with PyRel Int128 extension dtypes are inferred as Integer instead of falling back to Any. Before, DataFrames with those columns could fail type inference after round-tripping results back into model.data(). Now those inputs compile without requiring a manual cast.

  • Fixed correctness issues in unary relationships. Before, queries against unary relationships could produce incorrect results, such as over-counting.

  • Fixed rank_asc() and rank_desc() when used with distinct(). Before, duplicate values were not always deduplicated before ranking, so repeated values could still be ranked separately instead of once as unique values. Now queries that use these ranking functions with distinct() reliably rank unique values after deduplication.

  • Fixed an issue where property names could get renamed in query results if the property name contains spaces or special characters like parentheses. This happened when a property was auto-created from a table column name with spaces or parentheses, like height(cm) or full name. Previously, these names could get transformed to height_cm or full_name in results columns, which could cause confusion when working with the results. Now, property names are preserved as-is in results.

2026.4.13-d558733

Native App


Version 2026.4.13-d558733 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

  • Minor improvements to performance and stability.

2026.4.6-dde787d

Native App


Version 2026.4.6-dde787d 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

  • Minor improvements to performance and stability.

1.0.13

Python SDK


Version 1.0.13 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

  • Expanded graph APIs:

  • Added cumsum_asc() for cumulative sums over ascending keys.

  • Added global --json and --no-color options to the rai CLI to make output easier to handle in automation. --json returns structured output for reasoners:list, reasoners:get, jobs:list, and jobs:get. For example:

    rai --json jobs:list
    rai --no-color reasoners:list
    
  • Updated rai CLI wait flows so they make fewer unnecessary backend status and result checks before returning. These flows occur when you use --wait with commands like rai reasoners:create and rai reasoners:resume:

    rai reasoners:create --type Logic --name my_reasoner --wait
    rai reasoners:resume --type Logic --name my_reasoner --wait
    

    The same improvements also apply when PyRel waits on jobs and reasoners.

Upgrade Notes

  • If you work with multiple prescriptive solutions, keep the ProblemVariable returned by problem.solve_for(...) and query it directly instead of calling Problem.variable_values(). For example:

    var = problem.solve_for(...)
    sol_idx = Integer.ref()
    value = Float.ref()
    
    model.select(sol_idx, value).where(var.values(sol_idx, value))
    

    This returns (sol_idx, value) pairs, so you can inspect every solution or filter to one specific solution index. Problem.variable_values() still works, but it is deprecated and no longer preferred.

  • Problem.load_point() still works as a deprecated no-op for load_point(0), but load_point(k) for k > 0 is no longer supported.