NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #3968 most downloaded on PyPI
Open-source tools to analyze, monitor, and debug machine learning model in production.
Last release 22 days ago
11 Sep 2026
Ships unpredictably
gaps range from 8 days to 6 months
Nearly every release is documented
notes for 60 of the last 60 stable releases
3 versions withdrawn
withdrawn after publishing
6 years old
153 releases · first in 2020
One column per quarter.
Fix stattest example by @mike0sv in https://github.com/evidentlyai/evidently/pull/924
Full Changelog: https://github.com/evidentlyai/evidently/compare/v0.4.12...v0.4.13
Fix type error in ColumnValueListMetric by @Liraim in https://github.com/evidentlyai/evidently/pull/893
Full Changelog: https://github.com/evidentlyai/evidently/compare/v0.4.11...v0.4.12
Remove explicit pyarrow dep by @mike0sv in https://github.com/evidentlyai/evidently/pull/885
Full Changelog: https://github.com/evidentlyai/evidently/compare/v0.4.10...v0.4.11
Docs by @elenasamuylova in https://github.com/evidentlyai/evidently/pull/857
--demo-project flag with --demo-projects all by @DimaAmega in https://github.com/evidentlyai/evidently/pull/858Full Changelog: https://github.com/evidentlyai/evidently/compare/v0.4.9...v0.4.10
add some return type hints by @jameslamb in https://github.com/evidentlyai/evidently/pull/834
evidently-ui-lib ts package + a few UI changes by @DimaAmega in https://github.com/evidentlyai/evidently/pull/847Full Changelog: https://github.com/evidentlyai/evidently/compare/v0.4.8...v0.4.9
feature/ui update dependencies by @DimaAmega in https://github.com/evidentlyai/evidently/pull/818
verify by @vlin-lgtm in https://github.com/evidentlyai/evidently/pull/823Full Changelog: https://github.com/evidentlyai/evidently/compare/v0.4.7...v0.4.8
Deprecate _as_pandas by @mike0sv in https://github.com/evidentlyai/evidently/pull/816
Updates:
Fixes:
Full Changelog: https://github.com/evidentlyai/evidently/compare/v0.4.6...v0.4.7
Updates: #775 #777 #778 #787 #788 #789 #790 #791 #796 #797 #798 #803 Fixes: #769 #776 #774 #792 #801 #808
Updates: #775 #777 #778 #787 #788 #789 #790 #791 #796 #797 #798 #803
Fixes: #769 #776 #774 #792 #801 #808
Updates: #746 #751 #755 #759 #762 Fixes: #750 #753 #758 #760 #761 #764 #765
Updates: #746 #751 #755 #759 #762
Fixes: #750 #753 #758 #760 #761 #764 #765
Updates: #734 Fixes: #743 #744
Updates: #734
Fixes: #743 #744
Nothing published for this version
Updates: #720 #727 #728 #729 #730 Fixes: #721 #723
Updates: #720 #727 #728 #729 #730
Fixes: #721 #723
Updates: #711 #714 Fixes: #681 #692 #695 #696 #698 #704 #707 #712 #713
Updates: #711 #714
Fixes: #681 #692 #695 #696 #698 #704 #707 #712 #713
Updates: #631 #634 #633 #668 #672 #677 #684 #687 #690 Fixes: #641 #651 #665 Breaking Changes: #644
Updates: #631 #634 #633 #668 #672 #677 #684 #687 #690
Fixes: #641 #651 #665
Breaking Changes: #644
Breaking Changes: Renamed parameter `lemmatisize -> lemmatize in TriggerWordsPresence` text descriptor
Updates: #619 #622 #628 #629
Experimental: #600
Breaking Changes:
Renamed parameter lemmatisize -> lemmatize in TriggerWordsPresence text descriptor
Fixes: #607 #611 #613 #615 #618 #617 #623 #624 #625 #626 #630
Nothing published for this version
Since this version, the following metrics will render aggregated plots instead of raw data plots:
Breaking Changes: #601 Since this version, the following metrics will render aggregated plots instead of raw data plots:
To return raw data plots use render option :
report = Report(
metrics=[
RegressionPredictedVsActualScatter(options={"render": {"raw_data": True}}),
])
report = Report(
metrics=[
RegressionQualityMetric(),
RegressionPredictedVsActualScatter(),
],
options={"render": {"raw_data": True}}
)
Updates: #588 #589 #597
Fixes: #593
Drift detection method `text_content_drift was renamed to perc_text_content_drift This happened because an additional text data drift detection method
Breaking Changes:
#585
Drift detection method
text_content_drift was renamed to perc_text_content_drift
This happened because an additional text data drift detection method was added: abs_text_content_drift. This drift detection technique works more efficiently with large datasets.
Updates: #562 #564 #566 #567 #569 #570 #587
Fixes: #568 #572 #573 #574 #575 #579 #580 #582 #583 #586
Breaking Changes: Old API is no longer supported! There are no more Dashboards, Model Profiles, Tabs, and Profile Sections!
Breaking Changes: Old API is no longer supported! There are no more Dashboards, Model Profiles, Tabs, and Profile Sections! #550
Updates: JSON output customisation: #543 #545 #548
Text descriptors support in column metrics and tests: #542 #546 #553 #557
Embeddings Drift Metric #558
Fixes: #560
New Examples: How to customize JSON output for Reports and TestSuites? How to calculate drift for embeddings? How to apply column metrics for text descriptors?
Nothing published for this version
Updates: #517 #533 Streamlit Integration Example: #531 Fixes: #523 #528 #529 #532 #534 #535
Updates: #517 #533
Streamlit Integration Example: #531
Fixes: #523 #528 #529 #532 #534 #535
Added text descriptor `TriggerWordsPresence`
Updates:
TriggerWordsPresenceTextDescriptorsDriftMetricTextDescriptorsDistributionTextDescriptorsCorrelationMetricTextOverviewPresetFixes: #512 #519 #520 #521 #522
Updates: Instead of using just Pearson correlation, the following tests automatically choose the correlation method depending on target and prediction
Updates: Instead of using just Pearson correlation, the following tests automatically choose the correlation method depending on target and prediction types:
Fixes: #446 #499 #504 #505 #511
Updated project build to be compatible with python 3.11
Updated project build to be compatible with python 3.11
Conda-compatible project build: prebuilt UI is stored in the repo; there is no need to build it locally.
Conda-compatible project build: prebuilt UI is stored in the repo; there is no need to build it locally.
Python 3.6 is no longer supported
Breaking Changes:
Updates:
Changes:
Fixes:
Updates: Added Maximum-Mean-Discrepancy (MMD) test #383 Added an example of the integration with Metaflow #468
Updates: Added Maximum-Mean-Discrepancy (MMD) test #383 Added an example of the integration with Metaflow #468
Fixes: #463 #471 #472 #473 #474 #476
NOTE: Dashboards, Profiles, Tabs and Profile Sections are now DEPRECATED and will be completely REMOVED in the nearest releases.
NOTE: Dashboards, Profiles, Tabs and Profile Sections are now DEPRECATED and will be completely REMOVED in the nearest releases.
Deleted NumTargetDriftPreset (use TargetDriftPreset instead)
Deleted CatTargetDriftPreset (use TargetDriftPreset instead)
Renamed Parameters:
classification_threshold -> probas_threshold
this afects:
ClassificationQualityMetric , TestAccuracyScore, TestPrecisionScore, TestRecallScore, TestF1Score, TestTPR, TestTNR, TestFPR, TestFNR, TestPrecisionByClass, TestRecallByClass, TestF1ByClass, ClassificationPreset, BinaryClassificationTestPreset
threshold-> stattest_threshold
this afects:
ColumnDriftMetric, TestColumnValueDrift, BinaryClassificationTestPreset, BinaryClassificationTopKTestPreset, MulticlassClassificationTestPreset
all_features_stattest -> stattest & all_features_threshold -> stattest_threshold
this afects:
DataDriftTable, DatasetDriftMetric, TestNumberOfDriftedColumns, TestShareOfDriftedColumns, DataDriftPreset, TargetDriftPreset, DataDriftTestPreset, NoTargetPerformanceTestPreset
cat_features_stattest -> cat_stattest & cat_features_threshold -> cat_stattest_threshold
this afects:
DataDriftTable, DatasetDriftMetric, TestNumberOfDriftedColumns, TestShareOfDriftedColumns, DataDriftPreset, TargetDriftPreset, DataDriftTestPreset, NoTargetPerformanceTestPreset
num_features_stattest -> num_stattest & num_features_stattest -> num_stattest_threshold
this afects:
DataDriftTable, DatasetDriftMetric, TestNumberOfDriftedColumns, TestShareOfDriftedColumns, DataDriftPreset, TargetDriftPreset, DataDriftTestPreset, NoTargetPerformanceTestPreset
per_feature_stattest -> per_column_stattest & per_feature_stattest -> per_column_stattest_threshold
this afects:
DataDriftTable, DatasetDriftMetric, TestNumberOfDriftedColumns, TestShareOfDriftedColumns, DataDriftPreset, TargetDriftPreset, DataDriftTestPreset, NoTargetPerformanceTestPreset
Renamed Tests:
TestColumnValueDrift -> TestColumnDriftTestColumnValueRegExp -> TestColumnRegExpTestValueQuantile -> TestColumnQuantileAdded top_error parameter to RegressionErrorBiasTable metric #422
Added ClassificationDummyMetric metric #445
Added RegressionDummyMetric metric #445
Added ConflictPredictionMetric metric #455
Added ConflictTargetMetric metric #455
Added API reference DRAFT https://docs.evidentlyai.com/reference/api-reference
Added new Statistical Tests:
#431 #438 #451 #458
Nothing published for this version
Breaking Changes: Metrics Rename: `ClassificationQuality -> ClassificationQualityMetric ProbabilityDistribution -> ClassificationProbDistribution`
Breaking Changes:
Metrics Rename:
ClassificationQuality -> ClassificationQualityMetric
ProbabilityDistribution -> ClassificationProbDistribution
Tests Rename:
TestHighlyCorrelatedFeatures -> TestHighlyCorrelatedColumns
TestFeatureValueMin -> TestColumnValueMin
TestFeatureValueMax -> TestColumnValueMax
TestFeatureValueMean -> TestColumnValueMean
TestFeatureValueMedian -> TestColumnValueMedian
TestFeatureValueStd -> TestColumnValueStd
TestNumberOfDriftedFeatures -> TestNumberOfDriftedColumns
TestShareOfDriftedFeatures -> TestShareOfDriftedColumns
TestFeatureValueDrift -> TestColumnValueDrift
Updates: #400 #373
Fixes: #371 #421 #419 #418 #417 #416 #415
All Test Presets were renamed. `TestPreset` suffix was added to original names:
All Test Presets were renamed.
TestPreset suffix was added to original names:
Added DataDrift metrics:
Added DataQuality metrics:
Added DataIntegrity metrics:
Added Classification metrics:
Added Regression metrics:
Added MetricPresets:
Added New Statistical Tests
Fixes: #334 #353 #361 #367
Replaced BaseWidgetInfo with helpers: https://github.com/evidentlyai/evidently/pull/326
Updates:
Fixes:
Introduced `Report - an object, that unites Dashboard and Profile` functionality
Updates:
Report - an object, that unites Dashboard and Profile functionalityMetricPreset - an object, that replaces Tab and ProfileSectionDataDrift, DataQuality (limited content), CatTargetDrift, NumTargetDrift, RegressionPerformance, ClassificationPerformanceFixes:
Implemented function `generate_column_tests()` to generate similar tests for many columns automatically
Updates:
generate_column_tests() to generate similar tests for many columns automaticallyDataset Null-related tests
Column Null-related tests
Fixes:
added TPR, TNR, FPR, FNR Tests for Binary Classification Model Performance
Updates:
Fixes:
Updated the UI to let users group tests by the following properties:
Updates:
added default configurations for Data Quality Tests
Nothing published for this version
Implemented new interfaces to test data and models in a batch: Test Suite.
Implemented new interfaces to test data and models in a batch: Test Suite.
Implemented the following Individual tests:
Implemented the following test presets:
Updated DataDriftTab: added target and prediction rows in DataDrift Table widget
Updates:
Fixes:
Stat test auto selection algorithm update: https://docs.evidentlyai.com/reports/data-drift#how-it-works
Release scope:
For small data with <= 1000 observations in the reference dataset:
For larger data with > 1000 observations in the reference dataset:
Added options for setting custom statistical test for Categorical and Numerical Target Drift Dashboard/Profile:
cat_target_stattest_func: Defines a custom statistical test to detect target drift in CatTargetDrift.
num_target_stattest_func: Defines a custom statistical test to detect target drift in NumTargetDrift.
Added options for setting custom threshold for drift detection for Categorical and Numerical Target Drift Dashboard/Profile:
cat_target_threshold: Optional[float] = None
num_target_threshold: Optional[float] = None
These thresholds highly depends on selected stattest, generally it is either threshold for p_value or threshold for a distance.
Fixes:
#207
StatTests The following statistical tests now can be used for both numerical and categorical features:
StatTests The following statistical tests now can be used for both numerical and categorical features:
Grafana monitoring example
Colour Scheme Support for custom colours in the `Dashboards`:
Colour Scheme
Support for custom colours in the Dashboards:
Statistical Test:
Support for user implemented statistical tests
Support for custom statistical tests in Dashboards and Profiles
Available tests:
Fixes: #193
Nothing published for this version
Custom Text Comments in Dashboards
Custom Text Comments in Dashboards
type="text” for BaseWidgetInfo (for text widgets implementation)see the example: https://github.com/evidentlyai/evidently/blob/main/examples/how_to_questions/text_widget_usage_iris.ipynb
Data Quality Dashboard: add dataset overview widget
`DataQualityTab()` is now available for Dashboards! The Tab helps to observe data columns, explore their properties and compare datasets.
DataQualityTab() is now available for Dashboards! The Tab helps to observe data columns, explore their properties and compare datasets.DataQualityProfileSection() is available for Profiles as well.ColumnMapping update: added task parameter to specify the type of machine learning problem. This parameter is used by DataQualityAnalyzer and some data quality widgets to calculate metrics and visuals with the respect to the task.Added monitors for NumTargetDrift, CatTargetDrift, ClassificationPerformance, ProbClassificationPerformance
Nothing published for this version
Analyzers Refactoring: analyzer result became a structured object instead of a dictionary for all Analyzers
Analyzers Refactoring: analyzer result became a structured object instead of a dictionary for all Analyzers
The following Quality Metrics Options are added:
Widgets and Tabs can be imported from evidently directly, but this is deprecated behavior and cause warning
Added backward compatibility for imports:
Library source code is moved to the `src/evidently` folder
src/evidently foldersrc/evidently/dashboard folder, as those are parts of the Dashboardsrc/evidently/model_profile folder, as those are parts of the Model_profilesdocs/book folderfixed: input DataFrames cannot be changed during any calculations (fixed by making shallow copies)
Created `confidence: Union[float, Dict[str, float]]` - option can take a float or a dict as an argument. If float has passed, then this confidence lev
Data Drift Options:
confidence: Union[float, Dict[str, float]] - option can take a float or a dict as an argument. If float has passed, then this confidence level will be used for all features. If dict has passed, then specified features will have a custom confidence levels (all the rest will have default confidence level = 0.95)nbinsx: Union[int, Dict[str, int]] - option can take an int or a dict as an argument. If int has passed, then this number of bins will be used for all features. If dict has passed, then specified features will have a custom number of bins (all the rest will have default number of bins = 10)feature_stattest_func: Union[None, Callable, Dict[str, Callable]] - option can take a function or a dict as an argument. If a function has passed, then this function will be used to measure drift for all features. If dict has passed, then for specified features custom functions will be used (all the rest features will be processed by an internal algorithm of drift measurement)Package building:
Nothing published for this version
Nothing published for this version
Nothing published for this version
Support widgets order for `include_widgets` parameter
include_widgets parameterinclude_widgets parameteroptions to a separate moduleWidgets and Tabs for simpler customisationNothing published for this version
Supported custom list of `Widgets for Tabs in Dashboard with help of verbose_level and include_widgets ` parameters
Widgets for Tabs in Dashboard with help of verbose_level and include_widgets parametersverbose_level: 0 - to create a Tab with the shortest list of Widgets, 1 - to create a full Tabinclude_widgets : ["Widget Name 1", "Widget Name 2", etc]. This parameter overwrites verbose_level (if both are specified) and allows to set a custom list of WidgetsTab.list_widgets() method to list all the available Widgets for the current TabOptions entity to specify Widgets and Tabs customisable settingsColumnMapping entity instead column_mapping python dictionaryYour coding agent can read these notes before it upgrades. Set up the MCP server →