> ## Documentation Index
> Fetch the complete documentation index at: https://docs.activeviam.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Changelog

> Detailed list of all changes.

Read the [release notes](./release_notes) for a higher level view.

Atoti Python SDK implements [Atoti version policy](https://docs.activeviam.com/eos).

<Update label="6.2.0" description="2026-07-27">
  <Note>
    The changes below are relative to Atoti Python SDK
    [0.9.16](https://docs.activeviam.com/engine/python-sdk/0.9/changelog#0-9-16).
  </Note>

  ### Added

  * [`atoti-limits`](./api/atoti_limits) <sup>LIM-2228</sup>.
  * [`atoti.Session.chat`](./api/atoti.Session.chat) <sup>PIVOT-14122</sup>.
  * [`atoti.Cube.auto_explain`](./api/atoti.Cube.auto_explain) <sup>PYTHON-824</sup>.
  * [`atoti_ai.AiConfig.disclaimer`](./api/atoti_ai.AiConfig#atoti_ai.AiConfig.disclaimer) <sup>PIVOT-14426</sup>.
  * [`atoti.SessionConfig.base_path`](./api/atoti.config.SessionConfig#atoti.SessionConfig.base_path) <sup>PYTHON-917</sup>.
  * [`atoti.Cube.dimensions`](./api/atoti.Cube.dimensions) and [`Dimension`](./api/atoti.Dimension) <sup>PIVOT-14220</sup>.
    Use [`atoti.Dimension.description`](./api/atoti.Dimension.description) to provide more context to the [`Chat`](./api/atoti_ai.Chat).
  * [`atoti.aggregate_provider.AggregateProviders.recommender`](./api/atoti.aggregate_provider.AggregateProviders.recommender) <sup>PYTHON-668</sup>.
  * The history of executed queries is recorded when the [`observability plugin`](./api/atoti_observability) plugin is enabled and [`atoti.SessionConfig.user_content_storage`](./api/atoti.config.session_config#atoti.SessionConfig.user_content_storage) is not `None` <sup>PYTHON-876</sup>.
    It is accessible in Admin UI (`f"{session.url}/admin"`)'s **Query history** tab.

  ### Changed

  * [`AiConfig`](./api/atoti_ai.AiConfig), [`atoti_ai_amazon_bedrock.ConnectionConfig`](./api/atoti_ai_amazon_bedrock.ConnectionConfig), [`atoti_ai_amazon_bedrock.ChatConfig`](./api/atoti_ai_amazon_bedrock.ChatConfig), [`atoti_ai_openai.ConnectionConfig`](./api/atoti_ai_openai.ConnectionConfig), and [`atoti_ai_openai.ChatConfig`](./api/atoti_ai_openai.ChatConfig) have been stabilized:

    ```python theme={"languages":{"custom":["/engine/python-sdk/0.9/languages/pycon.tmLanguage.json"]}}
    with tt.experimental({"ai"}):  # [!code --]
        ai_config = AiConfig(
            connection=ConnectionConfig(...),
            chat=ChatConfig(...),
        )
    session_config = tt.SessionConfig(ai=ai_config)
    ```

  * [`atoti.Table.load(error_handling)`](./api/atoti.Table.load#atoti.Table.load.error_handling) defaults to `"fail"` instead of `"log"` <sup>PIVOT-9937</sup>.

    To restore the previous behavior:

    ```python theme={"languages":{"custom":["/engine/python-sdk/0.9/languages/pycon.tmLanguage.json"]}}
    table.load(
        csv_load,
        error_handling="log",  # [!code ++]
    )
    ```

  * [`atoti.NaturalOrder`](./api/atoti.order.NaturalOrder) compares digit sequences in strings by their numeric value instead of character by character <sup>PYTHON-908</sup>.
    [`String`](./api/atoti.type#atoti.type.STRING) or [`Object`](./api/atoti.type#atoti.type.OBJECT) levels default to the new [`atoti.LexicographicalOrder`](./api/atoti.order.LexicographicalOrder), which preserves the previous ordering.

  * [`atoti-storage-aws`](./api/atoti_storage_aws)'s commitment policy changed to [REQUIRE\_ENCRYPT\_REQUIRE\_DECRYPT](https://docs.aws.amazon.com/encryption-sdk/latest/developer-guide/python-example-code.html) <sup>PIVOT-13185</sup>.
    Existing data on S3 encrypted with older AWS encryption clients (v1 and v2) must be re-encrypted before [`loading`](./api/atoti.Table.load) it.

  #### Dependencies

  <Tip>
    Atoti Python SDK is versioned in lockstep with Atoti Server.

    Each `6.2.x` Python SDK release depends on the matching `6.2.x` Server release.
  </Tip>

  * Upgraded Atoti Server to [6.2.0](https://docs.activeviam.com/products/atoti/server/6.2/docs/release/whats_new/#620).
  * Upgraded Atoti UI to [5.2.26](https://docs.activeviam.com/data-visualization/atoti-ui/5.2/releases-and-upgrades/release-notes#5-2-26).
  * Bumped minimum required Python version to [3.12](https://docs.python.org/3/whatsnew/3.12.html) as per [NEP 29](https://numpy.org/neps/nep-0029-deprecation_policy.html#support-table) <sup>PYTHON-810</sup>.
  * Bumped [`atoti`](./api/atoti)'s minimum required Pandas version to [3.0.3](https://pandas.pydata.org/pandas-docs/version/3.0/whatsnew/v3.0.3.html) <sup>PYTHON-740</sup>.
    * [`DataFrame`](https://pandas.pydata.org/pandas-docs/version/3.0/reference/api/pandas.DataFrame.html#pandas.DataFrame)s returned by [`atoti.Table.query()`](./api/atoti.Table.query), [`atoti.Table.head()`](./api/atoti.Table.head), [`atoti.Session.query_mdx()`](./api/atoti.Session.query_mdx), and [`atoti.Cube.query()`](./api/atoti.Cube.query) use `datetime64[us]` (microsecond precision) instead of `datetime64[ns]` (nanosecond precision).
    * [`pyarrow.large_string()`](https://arrow.apache.org/docs/python/generated/pyarrow.large_string.html#pyarrow.large_string) columns are supported by [`atoti.Table.load()`](./api/atoti.Table.load).
  * Bumped [`atoti-jupyter`](./api/atoti_jupyterlab)'s minimum required JupyterLab version to [4.6.0](https://jupyterlab.readthedocs.io/en/4.6.x/getting_started/changelog.html#v4-6).
  * Migrated [`atoti.Client.http_client`](./api/atoti.Client.http_client) from httpx to [httpx2](https://httpx2.pydantic.dev) <sup>PYTHON-903</sup>.
  * The [`atoti-parquet`](./api/atoti_parquet) plugin is not installed by default anymore.
    Add its extra to import [`ParquetLoad`](./api/atoti_parquet.ParquetLoad):

    ```bash theme={"languages":{"custom":["/engine/python-sdk/0.9/languages/pycon.tmLanguage.json"]}}
    uv add atoti # [!code --]
    uv add atoti[parquet] # [!code ++]
    ```

  ### Deprecated

  * `atoti.Hierarchy.dimension_default` <sup>PIVOT-14220</sup>.
    Use [`atoti.Dimension.default_hierarchy`](./api/atoti.Dimension.default_hierarchy) instead:

  ```python theme={"languages":{"custom":["/engine/python-sdk/0.9/languages/pycon.tmLanguage.json"]}}
  d, h = cube.dimensions, cube.hierarchies
  h["Geo", "Country"].dimension_default = True  # [!code --]
  d["Geo"].default_hierarchy = h["Geo", "Country"]  # [!code ++]
  ```

  ### Removed

  <Warning>
    Everything deprecated in the [0.9.0 to 0.9.16 releases](https://docs.activeviam.com/engine/python-sdk/0.9/changelog) has been removed.

    Upgrade to `0.9.16` and resolve all deprecation warnings before upgrading to `6.2.0`.
  </Warning>

  * Support for [connecting](./api/atoti.Session.connect) to Atoti servers older than [6.0.0-M1](https://assets.activeviam.com/products/atoti/server/6.0/docs/release/changelog/#600).

  * `"Object[]"` data type.
    Use `"Object"` or the other strongly typed array data types instead.

  * `atoti.QueryCube.unload_members_from_data_cube()` <sup>PIVOT-14028</sup>.

  * `atoti_ai_openai.ChatConfig.completions_path`:

    ```python theme={"languages":{"custom":["/engine/python-sdk/0.9/languages/pycon.tmLanguage.json"]}}
    chat_config = ChatConfig(
        model="gpt-5",
        completions_path="/chat/completions",  # [!code --]
    )
    ```

  * `atoti_ai_openai.ChatConfig.http_headers`.
    Use [`atoti_ai_openai.ConnectionConfig.custom_headers`](./api/atoti_ai_openai.ConnectionConfig#atoti_ai_openai.ConnectionConfig.custom_headers) instead:

    ```python theme={"languages":{"custom":["/engine/python-sdk/0.9/languages/pycon.tmLanguage.json"]}}
    chat_config = ChatConfig(
        model="gpt-5",
        http_headers={"X-Header": "value"},  # [!code --]
    )
    connection_config = ConnectionConfig(
        custom_headers={"X-Header": "value"},  # [!code ++]
    )
    ```

  * `atoti_ai_openai.ChatConfig.retry_max_attempts` and the other `retry_*` attributes.
    Use [`atoti_ai_openai.ConnectionConfig.max_retries`](./api/atoti_ai_openai.ConnectionConfig#atoti_ai_openai.ConnectionConfig.max_retries) and [`atoti_ai_openai.ConnectionConfig.timeout`](./api/atoti_ai_openai.ConnectionConfig#atoti_ai_openai.ConnectionConfig.timeout) instead:

    ```python theme={"languages":{"custom":["/engine/python-sdk/0.9/languages/pycon.tmLanguage.json"]}}
    chat_config = ChatConfig(
        model="gpt-5",
        retry_max_attempts=3,  # [!code --]
    )
    connection_config = ConnectionConfig(
        max_retries=3,  # [!code ++]
        timeout=datetime.timedelta(seconds=30),  # [!code ++]
    )
    ```

  * `atoti_ai_openai.ConnectionConfig.project_id`.

  * `atoti_directquery_snowflake.ConnectionConfig.array_agg_wrapper_function_name` <sup>PIVOT-10231</sup>.
    Snowflake's built-in `ARRAY_AGG` function is faster, so the wrapper UDF is no longer needed.
</Update>
