# Python Client SDK

[![PyPI](https://img.shields.io/pypi/v/fiddler-client)](https://pypi.org/project/fiddler-client/)

## 3.11

### **3.11.0**

* **New Features**
  * Added `Model.add_column()` method to dynamically add columns to existing model schemas after initial onboarding. Supports adding input features, outputs, targets, and metadata columns.
    * **Parameters**:
      * `column` (Column): The column definition to add to the model
      * `column_type` (str): Type of column - one of 'inputs', 'outputs', 'targets', or 'metadata' (default)
    * **Important**: New columns have null values for historical events; future events must include the new column
    * **Validation**: Prevents duplicate column names (raises ValueError)

## 3.10

### **3.10.0**

* **New Features**
  * Added a helper function `create_columns_from_df` to create a `ModelSchema` from a pandas `Dataframe`.

## 3.9

### **3.9.2**

* **New Features**
  * Added ability to specify `auto_threshold_params` while creating/updating alert rules.

### **3.9.1**

* **Modifications**
  * Updated minimum required version of pyarrow from 'pyarrow>=7.0.0' to 'pyarrow>=15.0.0' to address potential security issues from CVE-2025-30065.

### **3.9.0**

* **New Features**
  * Added the ability to create and use Microsoft Teams Webhooks.

## 3.8

### **3.8.3**

* **Bug Fixes**
  * Fixed pydantic validation error for `Webhook` object.

### **3.8.2**

* **Modifications**
  * Improved log message for timeout failure on how timeout can be increased.

### **3.8.1**

* **Bug Fixes**
  * Added missing support for specifying `category` while creating Alert Rule.

### **3.8.0**

* **New Features**
  * Added a new `update` method to the `AlertRule` object, allowing updates to the following fields: `warning_threshold`, `critical_threshold`, and `evaluation_delay`.
  * Added ability to create alert rules with Fiddler-determined automatic thresholds.
* **Modifications**
  * **Project Deletion Uses v3 API**:
    * `project.delete()` now utilizes the v3 API for deleting projects.
    * The method signature remains unchanged.

## 3.7

### **3.7.1**

* **Modifications**
  * **Connection Timeout Settings**: You can now configure network timeout settings when [initializing](https://app.gitbook.com/s/jZC6ysdlGhDKECaPCjwm/client-library-reference/installation-and-setup) the Python client. The new timeout parameter in init() accepts:
    * A single number (in seconds) to set the connection timeout
    * A tuple of two numbers (in seconds) to set both connection and read timeouts separately

### **3.7.0**

Release highlights:

* **Robustness via retrying**: this release introduces a persistent HTTP request retrying strategy to enhance fault tolerance in view of transient network problems and retryable HTTP request errors. You can take control of the maximum duration for which an HTTP request is retried by setting the environment variable `FIDDLER_CLIENT_RETRY_MAX_DURATION_SECONDS`.
* **AWS SageMaker authentication support**: to enable that, install version 2.236.0+ of the [AWS Python SageMaker SDK](https://pypi.org/project/sagemaker/). Then, before calling `init()`, set the environment variable `AWS_PARTNER_APP_AUTH` to `true` and set `AWS_PARTNER_APP_ARN`/`AWS_PARTNER_APP_URL` to meaningful values.
* **Logging improvements**: messages are now emitted to `stderr` instead of `stdout`. Only if the calling context does not configure a root logger this library will actively declare a handler for its own log messages (this automation can be disabled by setting `auto_attach_log_handler=False` during `init()`).

Compatibility changes:

* Pydantic 2.x is now supported (and compatibility with Pydantic 1.x has been retained).
* Support for Python 3.8 has been dropped.

API surface additions:

* Introduced `Project.get_or_create()` to reduce code required for instantiating a project.
* Introduced `model.remove_column()` to allow for removing a column from a model object.

Fixes:

* A transient error during a job status update does not prematurely terminate waiting for a job anymore.
* GET requests do not contain the `Content-Type` header anymore.

## 3.6

### **3.6.0**

* **Removed**
  * The `get_slice` and `download_slice` methods are removed. Please use `download_data` to retrieve some data.
  * The `get_mutual_info` method is removed.
  * The `SqlSliceQueryDataSource` option is removed from explain, feature impact and importance. Please use the `DatasetDataSource` instead or the UI.

## 3.5

### **3.5.0**

* **New Features**
  * New `download_data` method, to download a slice of data given an environment, time range and segment. Resulted file can be downloaded either as a CSV or a Parquet file.

## 3.4

### **3.4.0**

* **Removed**
  * The `get_fairness` method is removed. Please use charts and custom metrics to track / compute fairness metrics on your model.

## 3.3

### **3.3.2**

* **Modifications**
  * Fixed the error while setting notification config for alert rule.

***

### **3.3.1**

* **Modifications**
  * Added validation while adding notifications to alert rules.
  * Upgraded dependencies to resolve known vulnerabilities - deepdiff, mypy, pytest, pytest-mock, python-decouple, types-requests and types-simplejson.

***

### **3.3.0**

* **New Features**
  * Introduced `upload_feature_impact()` method to upload or update feature impact manually.

***

## 3.2

### **3.2.0**

* **New Features**
  * Introduced evaluation delay in Alerts Rule.
    * Optional `evaluation_delay` parameter added to `AlertRule.__init__` method.
    * It is used to introduce a delay in the evaluation of the alert.
* **Modifications**
  * Fix windows file permission error bug with publish method.

***

## 3.1

### **3.1.2**

* **Modifications**
  * Adds support to get schema of Column object by `fdl.Column`

### **3.1.1**

* **Modifications**
  * Updated `pydantic` and `typing-extensions` dependencies to support Python 3.12.

### **3.1.0**

* **New Features**
  * Introduced the native support for model versions.
    * Optional `version` parameter added to `Model`, `Model.from_data`, `Model.from_name` methods.
    * New `duplicate()` method to seamlessly create new version from existing model.
    * Optional `name` parameter added to `Model.list` to offer the ability to list all the versions of a model.

***

## 3.0

### **3.0.5**

* **New Features**
  * Allowed usage of `group_by()` to form the grouped data for ranking models.

### **3.0.4**

* **Modifications**
  * Return Job in ModelDeployment update.

### **3.0.3**

* **New Features**
  * Added `Webhook.from_name()`
* **Modifications**
  * Import path fix for packtools.

### **3.0.2**

* **Modifications**
  * Fix pydantic issue with typing-extensions versions > 4.5.0

### **3.0.1**

* **New Features**
  * General
    * Moving all functions of client to an Object oriented approach
    * Methods return resource object or a deserialized object wherever possible.
    * Support to search model, project, dataset, baselines by their names using `from_name()` method.
    * List methods will return iterator which handles pagination internally.
  * Data
    * Concept of environments was introduced.
    * Ability to download slice data to a parquet file.
    * Publish dataframe as stream instead of batch.
    * New methods for baselines.
    * Multiple datasets can be added to a single model. Ability to choose which dataset to use for computing feature impact / importance, surrogate generation etc.
    * Model can be added without dataset.
    * Ability to generate schema for a model.
    * Model delete is async and returns job details.
    * Added cached properties for `model`: `datasets`, `model_deployment`.
  * Alerts
    * New methods for alerts: `enable_notification`, `disable_notification`, `set_notification_config` and `get_notification_config`.
  * Explainability
    * New methods in explainability: `precompute_feature_impact`, `precompute_feature_importance`, `get_precomputed_feature_importance`, `get_precomputed_feature_impact`, `precompute_predictions`.
    * Decoupled model artifact / surrogate upload and feature impact / importance pre-computation.
* **Modifications**
  * All IDs will be UUIDs instead of strings
  * Dataset delete is not allowed anymore
