validmind 2.8.12__tar.gz → 2.8.22__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {validmind-2.8.12 → validmind-2.8.22}/PKG-INFO +3 -4
- {validmind-2.8.12 → validmind-2.8.22}/README.pypi.md +1 -1
- {validmind-2.8.12 → validmind-2.8.22}/pyproject.toml +5 -3
- {validmind-2.8.12 → validmind-2.8.22}/validmind/__init__.py +6 -5
- validmind-2.8.22/validmind/__version__.py +1 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/ai/test_descriptions.py +13 -9
- {validmind-2.8.12 → validmind-2.8.22}/validmind/ai/utils.py +2 -2
- {validmind-2.8.12 → validmind-2.8.22}/validmind/api_client.py +75 -32
- {validmind-2.8.12 → validmind-2.8.22}/validmind/client.py +111 -100
- {validmind-2.8.12 → validmind-2.8.22}/validmind/client_config.py +3 -3
- {validmind-2.8.12 → validmind-2.8.22}/validmind/datasets/classification/__init__.py +7 -3
- {validmind-2.8.12 → validmind-2.8.22}/validmind/datasets/credit_risk/lending_club.py +28 -16
- {validmind-2.8.12 → validmind-2.8.22}/validmind/datasets/nlp/cnn_dailymail.py +10 -4
- {validmind-2.8.12 → validmind-2.8.22}/validmind/datasets/regression/__init__.py +22 -5
- {validmind-2.8.12 → validmind-2.8.22}/validmind/errors.py +17 -7
- {validmind-2.8.12 → validmind-2.8.22}/validmind/input_registry.py +1 -1
- {validmind-2.8.12 → validmind-2.8.22}/validmind/logging.py +44 -35
- {validmind-2.8.12 → validmind-2.8.22}/validmind/models/foundation.py +2 -2
- {validmind-2.8.12 → validmind-2.8.22}/validmind/models/function.py +10 -3
- {validmind-2.8.12 → validmind-2.8.22}/validmind/template.py +33 -24
- {validmind-2.8.12 → validmind-2.8.22}/validmind/test_suites/__init__.py +2 -2
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/_store.py +13 -4
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/comparison.py +65 -33
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/data_validation/ClassImbalance.py +3 -1
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/data_validation/DatasetDescription.py +2 -23
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/data_validation/DescriptiveStatistics.py +1 -1
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/data_validation/Skewness.py +7 -6
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/decorator.py +14 -11
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/load.py +38 -24
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/model_validation/ragas/AnswerCorrectness.py +4 -2
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/model_validation/ragas/ContextEntityRecall.py +4 -2
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/model_validation/ragas/ContextPrecision.py +4 -2
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/model_validation/ragas/ContextPrecisionWithoutReference.py +4 -2
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/model_validation/ragas/ContextRecall.py +4 -2
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/model_validation/ragas/Faithfulness.py +4 -2
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/model_validation/ragas/ResponseRelevancy.py +4 -2
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/model_validation/ragas/SemanticSimilarity.py +4 -2
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/model_validation/sklearn/ClassifierThresholdOptimization.py +13 -3
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/model_validation/sklearn/OverfitDiagnosis.py +3 -1
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/model_validation/sklearn/SHAPGlobalImportance.py +28 -25
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/model_validation/sklearn/WeakspotsDiagnosis.py +15 -10
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/output.py +66 -11
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/run.py +28 -14
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/test_providers.py +28 -35
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/utils.py +17 -4
- {validmind-2.8.12 → validmind-2.8.22}/validmind/unit_metrics/__init__.py +1 -1
- {validmind-2.8.12 → validmind-2.8.22}/validmind/utils.py +295 -31
- {validmind-2.8.12 → validmind-2.8.22}/validmind/vm_models/dataset/dataset.py +83 -43
- {validmind-2.8.12 → validmind-2.8.22}/validmind/vm_models/dataset/utils.py +5 -3
- {validmind-2.8.12 → validmind-2.8.22}/validmind/vm_models/figure.py +6 -6
- {validmind-2.8.12 → validmind-2.8.22}/validmind/vm_models/input.py +6 -5
- {validmind-2.8.12 → validmind-2.8.22}/validmind/vm_models/model.py +5 -5
- {validmind-2.8.12 → validmind-2.8.22}/validmind/vm_models/result/result.py +122 -43
- {validmind-2.8.12 → validmind-2.8.22}/validmind/vm_models/result/utils.py +5 -5
- validmind-2.8.22/validmind/vm_models/test_suite/__init__.py +5 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/vm_models/test_suite/runner.py +5 -5
- {validmind-2.8.12 → validmind-2.8.22}/validmind/vm_models/test_suite/summary.py +20 -2
- {validmind-2.8.12 → validmind-2.8.22}/validmind/vm_models/test_suite/test.py +6 -6
- {validmind-2.8.12 → validmind-2.8.22}/validmind/vm_models/test_suite/test_suite.py +10 -10
- validmind-2.8.12/validmind/__version__.py +0 -1
- {validmind-2.8.12 → validmind-2.8.22}/LICENSE +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/datasets/__init__.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/datasets/classification/customer_churn.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/datasets/classification/datasets/bank_customer_churn.csv +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/datasets/classification/datasets/taiwan_credit.csv +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/datasets/classification/taiwan_credit.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/datasets/cluster/digits.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/datasets/credit_risk/__init__.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/datasets/credit_risk/datasets/lending_club_biased.csv.gz +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/datasets/credit_risk/datasets/lending_club_loan_data_2007_2014_clean.csv.gz +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/datasets/credit_risk/lending_club_bias.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/datasets/llm/rag/__init__.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/datasets/llm/rag/datasets/rfp_existing_questions_client_1.csv +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/datasets/llm/rag/datasets/rfp_existing_questions_client_2.csv +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/datasets/llm/rag/datasets/rfp_existing_questions_client_3.csv +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/datasets/llm/rag/datasets/rfp_existing_questions_client_4.csv +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/datasets/llm/rag/datasets/rfp_existing_questions_client_5.csv +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/datasets/llm/rag/rfp.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/datasets/nlp/__init__.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/datasets/nlp/datasets/Covid_19.csv +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/datasets/nlp/datasets/cnn_dailymail_100_with_predictions.csv +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/datasets/nlp/datasets/cnn_dailymail_500_with_predictions.csv +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/datasets/nlp/datasets/sentiments_with_predictions.csv +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/datasets/nlp/twitter_covid_19.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/datasets/regression/california_housing.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/datasets/regression/datasets/fred/CPIAUCSL.csv +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/datasets/regression/datasets/fred/CSUSHPISA.csv +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/datasets/regression/datasets/fred/DRSFRMACBS.csv +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/datasets/regression/datasets/fred/FEDFUNDS.csv +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/datasets/regression/datasets/fred/GDP.csv +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/datasets/regression/datasets/fred/GDPC1.csv +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/datasets/regression/datasets/fred/GS10.csv +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/datasets/regression/datasets/fred/GS3.csv +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/datasets/regression/datasets/fred/GS5.csv +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/datasets/regression/datasets/fred/MORTGAGE30US.csv +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/datasets/regression/datasets/fred/UNRATE.csv +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/datasets/regression/datasets/fred_loan_rates.csv +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/datasets/regression/datasets/fred_loan_rates_test_1.csv +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/datasets/regression/datasets/fred_loan_rates_test_2.csv +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/datasets/regression/datasets/fred_loan_rates_test_3.csv +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/datasets/regression/datasets/fred_loan_rates_test_4.csv +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/datasets/regression/datasets/fred_loan_rates_test_5.csv +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/datasets/regression/datasets/leanding_club_loan_rates.csv +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/datasets/regression/fred.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/datasets/regression/fred_timeseries.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/datasets/regression/lending_club.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/datasets/regression/models/fred_loan_rates_model_1.pkl +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/datasets/regression/models/fred_loan_rates_model_2.pkl +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/datasets/regression/models/fred_loan_rates_model_3.pkl +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/datasets/regression/models/fred_loan_rates_model_4.pkl +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/datasets/regression/models/fred_loan_rates_model_5.pkl +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/html_templates/__init__.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/html_templates/content_blocks.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/models/__init__.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/models/huggingface.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/models/metadata.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/models/pipeline.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/models/pytorch.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/models/r_model.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/models/sklearn.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/test_suites/classifier.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/test_suites/cluster.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/test_suites/embeddings.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/test_suites/llm.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/test_suites/nlp.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/test_suites/parameters_optimization.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/test_suites/regression.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/test_suites/statsmodels_timeseries.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/test_suites/summarization.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/test_suites/tabular_datasets.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/test_suites/text_data.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/test_suites/time_series.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/__init__.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/__types__.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/data_validation/ACFandPACFPlot.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/data_validation/ADF.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/data_validation/AutoAR.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/data_validation/AutoMA.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/data_validation/AutoStationarity.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/data_validation/BivariateScatterPlots.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/data_validation/BoxPierce.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/data_validation/ChiSquaredFeaturesTable.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/data_validation/DatasetSplit.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/data_validation/DickeyFullerGLS.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/data_validation/Duplicates.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/data_validation/EngleGrangerCoint.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/data_validation/FeatureTargetCorrelationPlot.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/data_validation/HighCardinality.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/data_validation/HighPearsonCorrelation.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/data_validation/IQROutliersBarPlot.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/data_validation/IQROutliersTable.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/data_validation/IsolationForestOutliers.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/data_validation/JarqueBera.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/data_validation/KPSS.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/data_validation/LJungBox.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/data_validation/LaggedCorrelationHeatmap.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/data_validation/MissingValues.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/data_validation/MissingValuesBarPlot.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/data_validation/MutualInformation.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/data_validation/PearsonCorrelationMatrix.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/data_validation/PhillipsPerronArch.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/data_validation/ProtectedClassesCombination.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/data_validation/ProtectedClassesDescription.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/data_validation/ProtectedClassesDisparity.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/data_validation/ProtectedClassesThresholdOptimizer.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/data_validation/RollingStatsPlot.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/data_validation/RunsTest.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/data_validation/ScatterPlot.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/data_validation/ScoreBandDefaultRates.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/data_validation/SeasonalDecompose.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/data_validation/ShapiroWilk.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/data_validation/SpreadPlot.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/data_validation/TabularCategoricalBarPlots.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/data_validation/TabularDateTimeHistograms.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/data_validation/TabularDescriptionTables.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/data_validation/TabularNumericalHistograms.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/data_validation/TargetRateBarPlots.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/data_validation/TimeSeriesDescription.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/data_validation/TimeSeriesDescriptiveStatistics.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/data_validation/TimeSeriesFrequency.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/data_validation/TimeSeriesHistogram.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/data_validation/TimeSeriesLinePlot.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/data_validation/TimeSeriesMissingValues.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/data_validation/TimeSeriesOutliers.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/data_validation/TooManyZeroValues.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/data_validation/UniqueRows.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/data_validation/WOEBinPlots.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/data_validation/WOEBinTable.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/data_validation/ZivotAndrewsArch.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/data_validation/__init__.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/data_validation/nlp/CommonWords.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/data_validation/nlp/Hashtags.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/data_validation/nlp/LanguageDetection.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/data_validation/nlp/Mentions.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/data_validation/nlp/PolarityAndSubjectivity.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/data_validation/nlp/Punctuations.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/data_validation/nlp/Sentiment.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/data_validation/nlp/StopWords.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/data_validation/nlp/TextDescription.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/data_validation/nlp/Toxicity.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/data_validation/nlp/__init__.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/model_validation/BertScore.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/model_validation/BleuScore.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/model_validation/ClusterSizeDistribution.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/model_validation/ContextualRecall.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/model_validation/FeaturesAUC.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/model_validation/MeteorScore.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/model_validation/ModelMetadata.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/model_validation/ModelPredictionResiduals.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/model_validation/RegardScore.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/model_validation/RegressionResidualsPlot.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/model_validation/RougeScore.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/model_validation/TimeSeriesPredictionWithCI.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/model_validation/TimeSeriesPredictionsPlot.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/model_validation/TimeSeriesR2SquareBySegments.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/model_validation/TokenDisparity.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/model_validation/ToxicityScore.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/model_validation/__init__.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/model_validation/embeddings/ClusterDistribution.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/model_validation/embeddings/CosineSimilarityComparison.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/model_validation/embeddings/CosineSimilarityDistribution.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/model_validation/embeddings/CosineSimilarityHeatmap.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/model_validation/embeddings/DescriptiveAnalytics.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/model_validation/embeddings/EmbeddingsVisualization2D.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/model_validation/embeddings/EuclideanDistanceComparison.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/model_validation/embeddings/EuclideanDistanceHeatmap.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/model_validation/embeddings/PCAComponentsPairwisePlots.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/model_validation/embeddings/StabilityAnalysisKeyword.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/model_validation/embeddings/StabilityAnalysisRandomNoise.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/model_validation/embeddings/StabilityAnalysisSynonyms.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/model_validation/embeddings/StabilityAnalysisTranslation.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/model_validation/embeddings/TSNEComponentsPairwisePlots.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/model_validation/embeddings/utils.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/model_validation/ragas/AspectCritic.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/model_validation/ragas/NoiseSensitivity.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/model_validation/ragas/utils.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/model_validation/sklearn/AdjustedMutualInformation.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/model_validation/sklearn/AdjustedRandIndex.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/model_validation/sklearn/CalibrationCurve.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/model_validation/sklearn/ClassifierPerformance.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/model_validation/sklearn/ClusterCosineSimilarity.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/model_validation/sklearn/ClusterPerformanceMetrics.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/model_validation/sklearn/CompletenessScore.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/model_validation/sklearn/ConfusionMatrix.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/model_validation/sklearn/FeatureImportance.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/model_validation/sklearn/FowlkesMallowsScore.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/model_validation/sklearn/HomogeneityScore.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/model_validation/sklearn/HyperParametersTuning.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/model_validation/sklearn/KMeansClustersOptimization.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/model_validation/sklearn/MinimumAccuracy.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/model_validation/sklearn/MinimumF1Score.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/model_validation/sklearn/MinimumROCAUCScore.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/model_validation/sklearn/ModelParameters.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/model_validation/sklearn/ModelsPerformanceComparison.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/model_validation/sklearn/PermutationFeatureImportance.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/model_validation/sklearn/PopulationStabilityIndex.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/model_validation/sklearn/PrecisionRecallCurve.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/model_validation/sklearn/ROCCurve.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/model_validation/sklearn/RegressionErrors.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/model_validation/sklearn/RegressionErrorsComparison.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/model_validation/sklearn/RegressionPerformance.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/model_validation/sklearn/RegressionR2Square.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/model_validation/sklearn/RegressionR2SquareComparison.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/model_validation/sklearn/RobustnessDiagnosis.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/model_validation/sklearn/ScoreProbabilityAlignment.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/model_validation/sklearn/SilhouettePlot.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/model_validation/sklearn/TrainingTestDegradation.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/model_validation/sklearn/VMeasure.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/model_validation/sklearn/__init__.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/model_validation/statsmodels/AutoARIMA.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/model_validation/statsmodels/CumulativePredictionProbabilities.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/model_validation/statsmodels/DurbinWatsonTest.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/model_validation/statsmodels/GINITable.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/model_validation/statsmodels/KolmogorovSmirnov.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/model_validation/statsmodels/Lilliefors.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/model_validation/statsmodels/PredictionProbabilitiesHistogram.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/model_validation/statsmodels/RegressionCoeffs.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/model_validation/statsmodels/RegressionFeatureSignificance.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/model_validation/statsmodels/RegressionModelForecastPlot.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/model_validation/statsmodels/RegressionModelForecastPlotLevels.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/model_validation/statsmodels/RegressionModelSensitivityPlot.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/model_validation/statsmodels/RegressionModelSummary.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/model_validation/statsmodels/RegressionPermutationFeatureImportance.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/model_validation/statsmodels/ScorecardHistogram.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/model_validation/statsmodels/__init__.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/model_validation/statsmodels/statsutils.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/ongoing_monitoring/CalibrationCurveDrift.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/ongoing_monitoring/ClassDiscriminationDrift.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/ongoing_monitoring/ClassImbalanceDrift.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/ongoing_monitoring/ClassificationAccuracyDrift.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/ongoing_monitoring/ConfusionMatrixDrift.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/ongoing_monitoring/CumulativePredictionProbabilitiesDrift.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/ongoing_monitoring/FeatureDrift.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/ongoing_monitoring/PredictionAcrossEachFeature.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/ongoing_monitoring/PredictionCorrelation.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/ongoing_monitoring/PredictionProbabilitiesHistogramDrift.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/ongoing_monitoring/PredictionQuantilesAcrossFeatures.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/ongoing_monitoring/ROCCurveDrift.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/ongoing_monitoring/ScoreBandsDrift.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/ongoing_monitoring/ScorecardHistogramDrift.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/ongoing_monitoring/TargetPredictionDistributionPlot.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/prompt_validation/Bias.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/prompt_validation/Clarity.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/prompt_validation/Conciseness.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/prompt_validation/Delimitation.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/prompt_validation/NegativeInstruction.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/prompt_validation/Robustness.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/prompt_validation/Specificity.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/prompt_validation/__init__.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/tests/prompt_validation/ai_powered_test.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/unit_metrics/classification/Accuracy.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/unit_metrics/classification/F1.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/unit_metrics/classification/Precision.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/unit_metrics/classification/ROC_AUC.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/unit_metrics/classification/Recall.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/unit_metrics/regression/AdjustedRSquaredScore.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/unit_metrics/regression/GiniCoefficient.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/unit_metrics/regression/HuberLoss.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/unit_metrics/regression/KolmogorovSmirnovStatistic.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/unit_metrics/regression/MeanAbsoluteError.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/unit_metrics/regression/MeanAbsolutePercentageError.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/unit_metrics/regression/MeanBiasDeviation.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/unit_metrics/regression/MeanSquaredError.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/unit_metrics/regression/QuantileLoss.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/unit_metrics/regression/RSquaredScore.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/unit_metrics/regression/RootMeanSquaredError.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/vm_models/__init__.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/vm_models/dataset/__init__.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/vm_models/result/__init__.py +0 -0
- {validmind-2.8.12 → validmind-2.8.22}/validmind/vm_models/result/result.jinja +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.3
|
2
2
|
Name: validmind
|
3
|
-
Version: 2.8.
|
3
|
+
Version: 2.8.22
|
4
4
|
Summary: ValidMind Library
|
5
5
|
License: Commercial License
|
6
6
|
Author: Andres Rodriguez
|
@@ -40,7 +40,7 @@ Requires-Dist: plotly-express
|
|
40
40
|
Requires-Dist: polars
|
41
41
|
Requires-Dist: pycocoevalcap (>=1.2,<2.0) ; extra == "all" or extra == "llm"
|
42
42
|
Requires-Dist: python-dotenv
|
43
|
-
Requires-Dist: ragas (>=0.2.3) ; extra == "all" or extra == "llm"
|
43
|
+
Requires-Dist: ragas (>=0.2.3,<=0.2.7) ; extra == "all" or extra == "llm"
|
44
44
|
Requires-Dist: rouge (>=1)
|
45
45
|
Requires-Dist: scikit-learn (<1.6.0)
|
46
46
|
Requires-Dist: scipy
|
@@ -57,7 +57,6 @@ Requires-Dist: torch (>=1.10.0) ; extra == "all" or extra == "llm" or extra == "
|
|
57
57
|
Requires-Dist: tqdm
|
58
58
|
Requires-Dist: transformers (>=4.32.0,<5.0.0) ; extra == "all" or extra == "huggingface" or extra == "llm"
|
59
59
|
Requires-Dist: xgboost (>=1.5.2,<3)
|
60
|
-
Requires-Dist: ydata-profiling
|
61
60
|
Requires-Dist: yfinance (>=0.2.48,<0.3.0)
|
62
61
|
Description-Content-Type: text/markdown
|
63
62
|
|
@@ -84,7 +83,7 @@ ValidMind helps developers, data scientists and risk and compliance stakeholders
|
|
84
83
|
>
|
85
84
|
> Signing up is FREE — **[Register with ValidMind](https://docs.validmind.ai/guide/configuration/register-with-validmind.html)**
|
86
85
|
|
87
|
-
That's right — you can run tests and log documentation even if you don't have a model available, so go ahead and
|
86
|
+
That's right — you can run tests and log documentation even if you don't have a model available, so go ahead and get started with the [**ValidMind Library**](https://docs.validmind.ai/developer/validmind-library.html)!
|
88
87
|
|
89
88
|
### How do I do more with the ValidMind Library?
|
90
89
|
|
@@ -21,7 +21,7 @@ ValidMind helps developers, data scientists and risk and compliance stakeholders
|
|
21
21
|
>
|
22
22
|
> Signing up is FREE — **[Register with ValidMind](https://docs.validmind.ai/guide/configuration/register-with-validmind.html)**
|
23
23
|
|
24
|
-
That's right — you can run tests and log documentation even if you don't have a model available, so go ahead and
|
24
|
+
That's right — you can run tests and log documentation even if you don't have a model available, so go ahead and get started with the [**ValidMind Library**](https://docs.validmind.ai/developer/validmind-library.html)!
|
25
25
|
|
26
26
|
### How do I do more with the ValidMind Library?
|
27
27
|
|
@@ -10,7 +10,7 @@ description = "ValidMind Library"
|
|
10
10
|
license = "Commercial License"
|
11
11
|
name = "validmind"
|
12
12
|
readme = "README.pypi.md"
|
13
|
-
version = "2.8.
|
13
|
+
version = "2.8.22"
|
14
14
|
|
15
15
|
[tool.poetry.dependencies]
|
16
16
|
aiohttp = {extras = ["speedups"], version = "*"}
|
@@ -39,7 +39,7 @@ polars = "*"
|
|
39
39
|
pycocoevalcap = {version = "^1.2", optional = true}
|
40
40
|
python = ">=3.8.1,<3.12"
|
41
41
|
python-dotenv = "*"
|
42
|
-
ragas = {version = ">=0.2.3", optional = true}
|
42
|
+
ragas = {version = ">=0.2.3,<=0.2.7", optional = true}
|
43
43
|
rouge = ">=1"
|
44
44
|
scikit-learn = "*,<1.6.0"
|
45
45
|
scipy = "*"
|
@@ -56,17 +56,19 @@ torch = {version = ">=1.10.0", optional = true}
|
|
56
56
|
tqdm = "*"
|
57
57
|
transformers = {version = "^4.32.0", optional = true}
|
58
58
|
xgboost = ">=1.5.2,<3"
|
59
|
-
ydata-profiling = "*"
|
60
59
|
yfinance = "^0.2.48"
|
61
60
|
|
62
61
|
[tool.poetry.group.dev.dependencies]
|
63
62
|
black = "^22.1.0"
|
64
63
|
click = "*"
|
65
64
|
cython = "^0.29.34"
|
65
|
+
docstring_parser = "*"
|
66
66
|
flake8 = "^4.0.1"
|
67
|
+
griffe = "*"
|
67
68
|
ipykernel = "^6.22.0"
|
68
69
|
isort = "^5.12.0"
|
69
70
|
jupyter = "^1.0.0"
|
71
|
+
mdformat = "*"
|
70
72
|
papermill = "^2.4.0"
|
71
73
|
pdoc = "^14.4.0"
|
72
74
|
pre-commit = "^3.3.3"
|
@@ -43,7 +43,7 @@ warnings.simplefilter("ignore", category=NumbaDeprecationWarning)
|
|
43
43
|
warnings.simplefilter("ignore", category=NumbaPendingDeprecationWarning)
|
44
44
|
|
45
45
|
from .__version__ import __version__ # noqa: E402
|
46
|
-
from .api_client import init, log_metric, reload
|
46
|
+
from .api_client import init, log_metric, log_text, reload
|
47
47
|
from .client import ( # noqa: E402
|
48
48
|
get_test_suite,
|
49
49
|
init_dataset,
|
@@ -99,19 +99,19 @@ __all__ = [ # noqa
|
|
99
99
|
"__version__",
|
100
100
|
# main library API
|
101
101
|
"init",
|
102
|
-
"reload",
|
103
102
|
"init_dataset",
|
104
103
|
"init_model",
|
105
104
|
"init_r_model",
|
105
|
+
"get_test_suite",
|
106
|
+
"log_metric",
|
106
107
|
"preview_template",
|
108
|
+
"print_env",
|
109
|
+
"reload",
|
107
110
|
"run_documentation_tests",
|
108
111
|
# log metric function (for direct/bulk/retroactive logging of metrics)
|
109
|
-
"log_metric",
|
110
112
|
# test suite functions (less common)
|
111
|
-
"get_test_suite",
|
112
113
|
"run_test_suite",
|
113
114
|
# helper functions (for troubleshooting)
|
114
|
-
"print_env",
|
115
115
|
# decorators (for building tests
|
116
116
|
"tags",
|
117
117
|
"tasks",
|
@@ -125,4 +125,5 @@ __all__ = [ # noqa
|
|
125
125
|
"tests",
|
126
126
|
"unit_metrics",
|
127
127
|
"test_suites",
|
128
|
+
"log_text",
|
128
129
|
]
|
@@ -0,0 +1 @@
|
|
1
|
+
__version__ = "2.8.22"
|
@@ -70,7 +70,7 @@ def generate_description(
|
|
70
70
|
figures: List[Figure] = None,
|
71
71
|
title: Optional[str] = None,
|
72
72
|
):
|
73
|
-
"""Generate the description for the test results"""
|
73
|
+
"""Generate the description for the test results."""
|
74
74
|
from validmind.api_client import generate_test_result_description
|
75
75
|
|
76
76
|
if not tables and not figures and not metric:
|
@@ -138,6 +138,10 @@ def background_generate_description(
|
|
138
138
|
logger.warning(
|
139
139
|
f"Test result {test_id} is too large to generate a description"
|
140
140
|
)
|
141
|
+
elif "Too many images" in str(e):
|
142
|
+
logger.warning(
|
143
|
+
f"Test result {test_id} has too many figures to generate a description"
|
144
|
+
)
|
141
145
|
else:
|
142
146
|
logger.warning(f"Failed to generate description for {test_id}: {e}")
|
143
147
|
logger.warning(f"Using default description for {test_id}")
|
@@ -156,7 +160,7 @@ def get_result_description(
|
|
156
160
|
should_generate: bool = True,
|
157
161
|
title: Optional[str] = None,
|
158
162
|
):
|
159
|
-
"""Get
|
163
|
+
"""Get the metadata dictionary for a test or metric result.
|
160
164
|
|
161
165
|
Generates an LLM interpretation of the test results or uses the default
|
162
166
|
description and returns a metadata object that can be logged with the test results.
|
@@ -170,15 +174,15 @@ def get_result_description(
|
|
170
174
|
Note: Either the tables or figures must be provided to generate the description.
|
171
175
|
|
172
176
|
Args:
|
173
|
-
test_id (str): The test ID
|
174
|
-
test_description (str): The default description for the test
|
175
|
-
tables (Any): The test tables or results to interpret
|
176
|
-
figures (List[Figure]): The figures to attach to the test suite result
|
177
|
-
metric (Union[int, float]): Unit metrics attached to the test result
|
178
|
-
should_generate (bool): Whether to generate the description or not
|
177
|
+
test_id (str): The test ID.
|
178
|
+
test_description (str): The default description for the test.
|
179
|
+
tables (Any): The test tables or results to interpret.
|
180
|
+
figures (List[Figure]): The figures to attach to the test suite result.
|
181
|
+
metric (Union[int, float]): Unit metrics attached to the test result.
|
182
|
+
should_generate (bool): Whether to generate the description or not. Defaults to True.
|
179
183
|
|
180
184
|
Returns:
|
181
|
-
str: The description to be logged with the test results
|
185
|
+
str: The description to be logged with the test results.
|
182
186
|
"""
|
183
187
|
# Check the feature flag first, then the environment variable
|
184
188
|
llm_descriptions_enabled = (
|
@@ -24,7 +24,7 @@ class DescriptionFuture:
|
|
24
24
|
the tests can continue to be run in parallel while the description is
|
25
25
|
retrieved asynchronously.
|
26
26
|
|
27
|
-
The value will be retrieved later and if
|
27
|
+
The value will be retrieved later and, if it is not ready yet, it should
|
28
28
|
block until it is.
|
29
29
|
"""
|
30
30
|
|
@@ -42,7 +42,7 @@ class DescriptionFuture:
|
|
42
42
|
|
43
43
|
|
44
44
|
def get_client_and_model():
|
45
|
-
"""Get model and client to use for generating interpretations
|
45
|
+
"""Get model and client to use for generating interpretations.
|
46
46
|
|
47
47
|
On first call, it will look in the environment for the API key endpoint, model etc.
|
48
48
|
and store them in a global variable to avoid loading them up again.
|
@@ -18,11 +18,12 @@ from urllib.parse import urlencode, urljoin
|
|
18
18
|
import aiohttp
|
19
19
|
import requests
|
20
20
|
from aiohttp import FormData
|
21
|
+
from ipywidgets import HTML, Accordion
|
21
22
|
|
22
23
|
from .client_config import client_config
|
23
24
|
from .errors import MissingAPICredentialsError, MissingModelIdError, raise_api_error
|
24
25
|
from .logging import get_logger, init_sentry, send_single_error
|
25
|
-
from .utils import NumpyEncoder, run_async
|
26
|
+
from .utils import NumpyEncoder, is_html, md_to_html, run_async
|
26
27
|
from .vm_models import Figure
|
27
28
|
|
28
29
|
logger = get_logger(__name__)
|
@@ -38,7 +39,7 @@ __api_session: Optional[aiohttp.ClientSession] = None
|
|
38
39
|
|
39
40
|
@atexit.register
|
40
41
|
def _close_session():
|
41
|
-
"""Closes the async client session at exit"""
|
42
|
+
"""Closes the async client session at exit."""
|
42
43
|
global __api_session
|
43
44
|
|
44
45
|
if __api_session and not __api_session.closed:
|
@@ -78,7 +79,7 @@ def _get_api_headers() -> Dict[str, str]:
|
|
78
79
|
|
79
80
|
|
80
81
|
def _get_session() -> aiohttp.ClientSession:
|
81
|
-
"""Initializes the async client session"""
|
82
|
+
"""Initializes the async client session."""
|
82
83
|
global __api_session
|
83
84
|
|
84
85
|
if not __api_session or __api_session.closed:
|
@@ -156,7 +157,7 @@ async def _post(
|
|
156
157
|
|
157
158
|
|
158
159
|
def _ping() -> Dict[str, Any]:
|
159
|
-
"""Validates that we can connect to the ValidMind API (does not use the async session)"""
|
160
|
+
"""Validates that we can connect to the ValidMind API (does not use the async session)."""
|
160
161
|
r = requests.get(
|
161
162
|
url=_get_url("ping"),
|
162
163
|
headers=_get_api_headers(),
|
@@ -243,7 +244,7 @@ def init(
|
|
243
244
|
|
244
245
|
|
245
246
|
def reload():
|
246
|
-
"""Reconnect to the ValidMind API and reload the project configuration"""
|
247
|
+
"""Reconnect to the ValidMind API and reload the project configuration."""
|
247
248
|
|
248
249
|
try:
|
249
250
|
_ping()
|
@@ -258,13 +259,13 @@ async def aget_metadata(content_id: str) -> Dict[str, Any]:
|
|
258
259
|
"""Gets a metadata object from ValidMind API.
|
259
260
|
|
260
261
|
Args:
|
261
|
-
content_id (str): Unique content identifier for the metadata
|
262
|
+
content_id (str): Unique content identifier for the metadata.
|
262
263
|
|
263
264
|
Raises:
|
264
|
-
Exception: If the API call fails
|
265
|
+
Exception: If the API call fails.
|
265
266
|
|
266
267
|
Returns:
|
267
|
-
dict: Metadata object
|
268
|
+
dict: Metadata object.
|
268
269
|
"""
|
269
270
|
return await _get(f"get_metadata/{content_id}")
|
270
271
|
|
@@ -277,15 +278,15 @@ async def alog_metadata(
|
|
277
278
|
"""Logs free-form metadata to ValidMind API.
|
278
279
|
|
279
280
|
Args:
|
280
|
-
content_id (str): Unique content identifier for the metadata
|
281
|
+
content_id (str): Unique content identifier for the metadata.
|
281
282
|
text (str, optional): Free-form text to assign to the metadata. Defaults to None.
|
282
283
|
_json (dict, optional): Free-form key-value pairs to assign to the metadata. Defaults to None.
|
283
284
|
|
284
285
|
Raises:
|
285
|
-
Exception: If the API call fails
|
286
|
+
Exception: If the API call fails.
|
286
287
|
|
287
288
|
Returns:
|
288
|
-
dict: The response from the API
|
289
|
+
dict: The response from the API.
|
289
290
|
"""
|
290
291
|
metadata_dict = {"content_id": content_id}
|
291
292
|
if text is not None:
|
@@ -304,16 +305,16 @@ async def alog_metadata(
|
|
304
305
|
|
305
306
|
|
306
307
|
async def alog_figure(figure: Figure) -> Dict[str, Any]:
|
307
|
-
"""Logs a figure
|
308
|
+
"""Logs a figure.
|
308
309
|
|
309
310
|
Args:
|
310
|
-
figure (Figure): The Figure object wrapper
|
311
|
+
figure (Figure): The Figure object wrapper.
|
311
312
|
|
312
313
|
Raises:
|
313
|
-
Exception: If the API call fails
|
314
|
+
Exception: If the API call fails.
|
314
315
|
|
315
316
|
Returns:
|
316
|
-
dict: The response from the API
|
317
|
+
dict: The response from the API.
|
317
318
|
"""
|
318
319
|
try:
|
319
320
|
return await _post(
|
@@ -330,22 +331,24 @@ async def alog_test_result(
|
|
330
331
|
result: Dict[str, Any],
|
331
332
|
section_id: str = None,
|
332
333
|
position: int = None,
|
334
|
+
unsafe: bool = False,
|
335
|
+
config: Dict[str, bool] = None,
|
333
336
|
) -> Dict[str, Any]:
|
334
|
-
"""Logs test results information
|
337
|
+
"""Logs test results information.
|
335
338
|
|
336
339
|
This method will be called automatically from any function running tests but
|
337
340
|
can also be called directly if the user wants to run tests on their own.
|
338
341
|
|
339
342
|
Args:
|
340
|
-
result (dict): A dictionary representing the test result
|
341
|
-
section_id (str, optional): The section ID add a test driven block to the documentation
|
342
|
-
position (int): The position in the section to add the test driven block
|
343
|
+
result (dict): A dictionary representing the test result.
|
344
|
+
section_id (str, optional): The section ID add a test driven block to the documentation.
|
345
|
+
position (int): The position in the section to add the test driven block.
|
343
346
|
|
344
347
|
Raises:
|
345
|
-
Exception: If the API call fails
|
348
|
+
Exception: If the API call fails.
|
346
349
|
|
347
350
|
Returns:
|
348
|
-
dict: The response from the API
|
351
|
+
dict: The response from the API.
|
349
352
|
"""
|
350
353
|
request_params = {}
|
351
354
|
if section_id:
|
@@ -357,7 +360,7 @@ async def alog_test_result(
|
|
357
360
|
"log_test_results",
|
358
361
|
params=request_params,
|
359
362
|
data=json.dumps(
|
360
|
-
result,
|
363
|
+
{**result, "config": config},
|
361
364
|
cls=NumpyEncoder,
|
362
365
|
allow_nan=False,
|
363
366
|
),
|
@@ -405,6 +408,39 @@ def log_input(input_id: str, type: str, metadata: Dict[str, Any]) -> Dict[str, A
|
|
405
408
|
return run_async(alog_input, input_id, type, metadata)
|
406
409
|
|
407
410
|
|
411
|
+
def log_text(
|
412
|
+
content_id: str, text: str, _json: Optional[Dict[str, Any]] = None
|
413
|
+
) -> Dict[str, Any]:
|
414
|
+
"""Logs free-form text to ValidMind API.
|
415
|
+
|
416
|
+
Args:
|
417
|
+
content_id (str): Unique content identifier for the text.
|
418
|
+
text (str): The text to log. Will be converted to HTML with MathML support.
|
419
|
+
_json (dict, optional): Additional metadata to associate with the text. Defaults to None.
|
420
|
+
|
421
|
+
Raises:
|
422
|
+
ValueError: If content_id or text are empty or not strings.
|
423
|
+
Exception: If the API call fails.
|
424
|
+
|
425
|
+
Returns:
|
426
|
+
ipywidgets.Accordion: An accordion widget containing the logged text as HTML.
|
427
|
+
"""
|
428
|
+
if not content_id or not isinstance(content_id, str):
|
429
|
+
raise ValueError("`content_id` must be a non-empty string")
|
430
|
+
if not text or not isinstance(text, str):
|
431
|
+
raise ValueError("`text` must be a non-empty string")
|
432
|
+
|
433
|
+
if not is_html(text):
|
434
|
+
text = md_to_html(text, mathml=True)
|
435
|
+
|
436
|
+
log_text = run_async(alog_metadata, content_id, text, _json)
|
437
|
+
|
438
|
+
return Accordion(
|
439
|
+
children=[HTML(log_text["text"])],
|
440
|
+
titles=[f"Text Block: '{log_text['content_id']}'"],
|
441
|
+
)
|
442
|
+
|
443
|
+
|
408
444
|
async def alog_metric(
|
409
445
|
key: str,
|
410
446
|
value: Union[int, float],
|
@@ -413,7 +449,7 @@ async def alog_metric(
|
|
413
449
|
recorded_at: Optional[str] = None,
|
414
450
|
thresholds: Optional[Dict[str, Any]] = None,
|
415
451
|
):
|
416
|
-
"""See log_metric for details"""
|
452
|
+
"""See log_metric for details."""
|
417
453
|
if not key or not isinstance(key, str):
|
418
454
|
raise ValueError("`key` must be a non-empty string")
|
419
455
|
|
@@ -458,7 +494,7 @@ def log_metric(
|
|
458
494
|
recorded_at: Optional[str] = None,
|
459
495
|
thresholds: Optional[Dict[str, Any]] = None,
|
460
496
|
):
|
461
|
-
"""Logs a unit metric
|
497
|
+
"""Logs a unit metric.
|
462
498
|
|
463
499
|
Unit metrics are key-value pairs where the key is the metric name and the value is
|
464
500
|
a scalar (int or float). These key-value pairs are associated with the currently
|
@@ -468,18 +504,25 @@ def log_metric(
|
|
468
504
|
|
469
505
|
Args:
|
470
506
|
key (str): The metric key
|
471
|
-
value (float): The metric value
|
472
|
-
inputs (
|
473
|
-
params (
|
474
|
-
recorded_at (str, optional):
|
475
|
-
|
476
|
-
thresholds (dict, optional): Dictionary of thresholds for the metric.
|
507
|
+
value (Union[int, float]): The metric value
|
508
|
+
inputs (List[str], optional): List of input IDs
|
509
|
+
params (Dict[str, Any], optional): Parameters used to generate the metric
|
510
|
+
recorded_at (str, optional): Timestamp when the metric was recorded
|
511
|
+
thresholds (Dict[str, Any], optional): Thresholds for the metric
|
477
512
|
"""
|
478
|
-
run_async(
|
513
|
+
return run_async(
|
514
|
+
alog_metric,
|
515
|
+
key=key,
|
516
|
+
value=value,
|
517
|
+
inputs=inputs,
|
518
|
+
params=params,
|
519
|
+
recorded_at=recorded_at,
|
520
|
+
thresholds=thresholds,
|
521
|
+
)
|
479
522
|
|
480
523
|
|
481
524
|
def get_ai_key() -> Dict[str, Any]:
|
482
|
-
"""Calls the
|
525
|
+
"""Calls the API to get an API key for our LLM proxy."""
|
483
526
|
r = requests.get(
|
484
527
|
url=_get_url("ai/key"),
|
485
528
|
headers=_get_api_headers(),
|