validmind 2.10.0rc2__tar.gz → 2.11.0__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.10.0rc2 → validmind-2.11.0}/PKG-INFO +11 -5
- {validmind-2.10.0rc2 → validmind-2.11.0}/pyproject.toml +8 -5
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/__init__.py +6 -1
- validmind-2.11.0/validmind/__version__.py +1 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/ai/test_descriptions.py +113 -37
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/ai/utils.py +2 -2
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/api_client.py +22 -30
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/client.py +5 -1
- validmind-2.11.0/validmind/datasets/llm/__init__.py +14 -0
- validmind-2.11.0/validmind/datasets/llm/agent_dataset.py +432 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/logging.py +1 -60
- validmind-2.11.0/validmind/scorer/__init__.py +69 -0
- {validmind-2.10.0rc2/validmind/unit_metrics/classification/individual → validmind-2.11.0/validmind/scorer/classification}/AbsoluteError.py +3 -2
- {validmind-2.10.0rc2/validmind/unit_metrics/classification/individual → validmind-2.11.0/validmind/scorer/classification}/BrierScore.py +3 -2
- {validmind-2.10.0rc2/validmind/unit_metrics/classification/individual → validmind-2.11.0/validmind/scorer/classification}/CalibrationError.py +3 -2
- {validmind-2.10.0rc2/validmind/unit_metrics/classification/individual → validmind-2.11.0/validmind/scorer/classification}/ClassBalance.py +3 -2
- {validmind-2.10.0rc2/validmind/unit_metrics/classification/individual → validmind-2.11.0/validmind/scorer/classification}/Confidence.py +3 -2
- {validmind-2.10.0rc2/validmind/unit_metrics/classification/individual → validmind-2.11.0/validmind/scorer/classification}/Correctness.py +3 -2
- {validmind-2.10.0rc2/validmind/unit_metrics/classification/individual → validmind-2.11.0/validmind/scorer/classification}/LogLoss.py +3 -4
- validmind-2.11.0/validmind/scorer/classification/OutlierScore.py +157 -0
- {validmind-2.10.0rc2/validmind/unit_metrics/classification/individual → validmind-2.11.0/validmind/scorer/classification}/ProbabilityError.py +3 -2
- {validmind-2.10.0rc2/validmind/unit_metrics/classification/individual → validmind-2.11.0/validmind/scorer/classification}/Uncertainty.py +3 -2
- validmind-2.11.0/validmind/scorer/llm/deepeval/AnswerRelevancy.py +96 -0
- validmind-2.11.0/validmind/scorer/llm/deepeval/Bias.py +103 -0
- validmind-2.11.0/validmind/scorer/llm/deepeval/ContextualPrecision.py +110 -0
- validmind-2.11.0/validmind/scorer/llm/deepeval/ContextualRecall.py +110 -0
- validmind-2.11.0/validmind/scorer/llm/deepeval/ContextualRelevancy.py +110 -0
- validmind-2.11.0/validmind/scorer/llm/deepeval/Faithfulness.py +110 -0
- validmind-2.11.0/validmind/scorer/llm/deepeval/GEval.py +145 -0
- validmind-2.11.0/validmind/scorer/llm/deepeval/Hallucination.py +110 -0
- validmind-2.11.0/validmind/scorer/llm/deepeval/Summarization.py +111 -0
- validmind-2.11.0/validmind/scorer/llm/deepeval/TaskCompletion.py +208 -0
- validmind-2.11.0/validmind/scorer/llm/deepeval/__init__.py +7 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/template.py +106 -60
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/__init__.py +2 -1
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/__types__.py +0 -10
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/_store.py +31 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/data_validation/ScoreBandDefaultRates.py +1 -1
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/data_validation/TooManyZeroValues.py +2 -2
- validmind-2.11.0/validmind/tests/decorator.py +298 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/load.py +15 -8
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/model_validation/embeddings/PCAComponentsPairwisePlots.py +1 -1
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/model_validation/embeddings/TSNEComponentsPairwisePlots.py +1 -1
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/model_validation/sklearn/OverfitDiagnosis.py +1 -1
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/model_validation/sklearn/PopulationStabilityIndex.py +2 -2
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/model_validation/sklearn/RobustnessDiagnosis.py +3 -1
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/model_validation/sklearn/TrainingTestDegradation.py +5 -5
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/model_validation/sklearn/WeakspotsDiagnosis.py +1 -1
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/model_validation/statsmodels/CumulativePredictionProbabilities.py +11 -16
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/model_validation/statsmodels/PredictionProbabilitiesHistogram.py +1 -1
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/model_validation/statsmodels/ScorecardHistogram.py +1 -1
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/ongoing_monitoring/CalibrationCurveDrift.py +1 -1
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/ongoing_monitoring/PredictionProbabilitiesHistogramDrift.py +1 -1
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/ongoing_monitoring/ScoreBandsDrift.py +1 -1
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/ongoing_monitoring/ScorecardHistogramDrift.py +1 -1
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/output.py +29 -9
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/plots/BoxPlot.py +25 -12
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/plots/HistogramPlot.py +4 -4
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/run.py +61 -4
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/stats/DescriptiveStats.py +2 -2
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/test_providers.py +16 -9
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/unit_metrics/regression/RootMeanSquaredError.py +1 -7
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/utils.py +9 -4
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/vm_models/__init__.py +12 -2
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/vm_models/dataset/dataset.py +280 -65
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/vm_models/figure.py +19 -27
- validmind-2.11.0/validmind/vm_models/html_progress.py +170 -0
- validmind-2.11.0/validmind/vm_models/html_renderer.py +450 -0
- validmind-2.11.0/validmind/vm_models/result/pii_filter.py +202 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/vm_models/result/result.py +170 -72
- validmind-2.11.0/validmind/vm_models/result/utils.py +86 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/vm_models/test_suite/runner.py +78 -33
- validmind-2.11.0/validmind/vm_models/test_suite/summary.py +136 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/vm_models/test_suite/test.py +2 -1
- validmind-2.10.0rc2/validmind/__version__.py +0 -1
- validmind-2.10.0rc2/validmind/tests/decorator.py +0 -167
- validmind-2.10.0rc2/validmind/unit_metrics/classification/individual/OutlierScore.py +0 -86
- validmind-2.10.0rc2/validmind/vm_models/result/utils.py +0 -141
- validmind-2.10.0rc2/validmind/vm_models/test_suite/summary.py +0 -187
- {validmind-2.10.0rc2 → validmind-2.11.0}/LICENSE +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/README.pypi.md +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/client_config.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/datasets/__init__.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/datasets/classification/__init__.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/datasets/classification/customer_churn.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/datasets/classification/datasets/bank_customer_churn.csv +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/datasets/classification/datasets/taiwan_credit.csv +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/datasets/classification/taiwan_credit.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/datasets/cluster/digits.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/datasets/credit_risk/__init__.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/datasets/credit_risk/datasets/lending_club_biased.csv.gz +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/datasets/credit_risk/datasets/lending_club_loan_data_2007_2014_clean.csv.gz +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/datasets/credit_risk/lending_club.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/datasets/credit_risk/lending_club_bias.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/datasets/llm/rag/__init__.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/datasets/llm/rag/datasets/rfp_existing_questions_client_1.csv +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/datasets/llm/rag/datasets/rfp_existing_questions_client_2.csv +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/datasets/llm/rag/datasets/rfp_existing_questions_client_3.csv +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/datasets/llm/rag/datasets/rfp_existing_questions_client_4.csv +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/datasets/llm/rag/datasets/rfp_existing_questions_client_5.csv +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/datasets/llm/rag/rfp.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/datasets/nlp/__init__.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/datasets/nlp/cnn_dailymail.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/datasets/nlp/datasets/Covid_19.csv +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/datasets/nlp/datasets/cnn_dailymail_100_with_predictions.csv +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/datasets/nlp/datasets/cnn_dailymail_500_with_predictions.csv +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/datasets/nlp/datasets/sentiments_with_predictions.csv +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/datasets/nlp/twitter_covid_19.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/datasets/regression/__init__.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/datasets/regression/california_housing.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/datasets/regression/datasets/fred/CPIAUCSL.csv +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/datasets/regression/datasets/fred/CSUSHPISA.csv +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/datasets/regression/datasets/fred/DRSFRMACBS.csv +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/datasets/regression/datasets/fred/FEDFUNDS.csv +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/datasets/regression/datasets/fred/GDP.csv +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/datasets/regression/datasets/fred/GDPC1.csv +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/datasets/regression/datasets/fred/GS10.csv +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/datasets/regression/datasets/fred/GS3.csv +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/datasets/regression/datasets/fred/GS5.csv +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/datasets/regression/datasets/fred/MORTGAGE30US.csv +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/datasets/regression/datasets/fred/UNRATE.csv +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/datasets/regression/datasets/fred_loan_rates.csv +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/datasets/regression/datasets/fred_loan_rates_test_1.csv +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/datasets/regression/datasets/fred_loan_rates_test_2.csv +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/datasets/regression/datasets/fred_loan_rates_test_3.csv +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/datasets/regression/datasets/fred_loan_rates_test_4.csv +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/datasets/regression/datasets/fred_loan_rates_test_5.csv +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/datasets/regression/datasets/leanding_club_loan_rates.csv +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/datasets/regression/fred.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/datasets/regression/fred_timeseries.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/datasets/regression/lending_club.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/datasets/regression/models/fred_loan_rates_model_1.pkl +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/datasets/regression/models/fred_loan_rates_model_2.pkl +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/datasets/regression/models/fred_loan_rates_model_3.pkl +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/datasets/regression/models/fred_loan_rates_model_4.pkl +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/datasets/regression/models/fred_loan_rates_model_5.pkl +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/errors.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/experimental/__init__.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/experimental/agents.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/html_templates/__init__.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/html_templates/content_blocks.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/input_registry.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/models/__init__.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/models/foundation.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/models/function.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/models/huggingface.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/models/metadata.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/models/pipeline.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/models/pytorch.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/models/r_model.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/models/sklearn.py +0 -0
- {validmind-2.10.0rc2/validmind/tests/data_validation → validmind-2.11.0/validmind/scorer/classification}/__init__.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/test_suites/__init__.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/test_suites/classifier.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/test_suites/cluster.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/test_suites/embeddings.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/test_suites/llm.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/test_suites/nlp.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/test_suites/parameters_optimization.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/test_suites/regression.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/test_suites/statsmodels_timeseries.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/test_suites/summarization.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/test_suites/tabular_datasets.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/test_suites/text_data.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/test_suites/time_series.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/comparison.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/data_validation/ACFandPACFPlot.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/data_validation/ADF.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/data_validation/AutoAR.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/data_validation/AutoMA.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/data_validation/AutoStationarity.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/data_validation/BivariateScatterPlots.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/data_validation/BoxPierce.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/data_validation/ChiSquaredFeaturesTable.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/data_validation/ClassImbalance.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/data_validation/DatasetDescription.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/data_validation/DatasetSplit.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/data_validation/DescriptiveStatistics.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/data_validation/DickeyFullerGLS.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/data_validation/Duplicates.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/data_validation/EngleGrangerCoint.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/data_validation/FeatureTargetCorrelationPlot.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/data_validation/HighCardinality.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/data_validation/HighPearsonCorrelation.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/data_validation/IQROutliersBarPlot.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/data_validation/IQROutliersTable.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/data_validation/IsolationForestOutliers.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/data_validation/JarqueBera.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/data_validation/KPSS.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/data_validation/LJungBox.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/data_validation/LaggedCorrelationHeatmap.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/data_validation/MissingValues.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/data_validation/MissingValuesBarPlot.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/data_validation/MutualInformation.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/data_validation/PearsonCorrelationMatrix.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/data_validation/PhillipsPerronArch.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/data_validation/ProtectedClassesCombination.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/data_validation/ProtectedClassesDescription.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/data_validation/ProtectedClassesDisparity.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/data_validation/ProtectedClassesThresholdOptimizer.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/data_validation/RollingStatsPlot.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/data_validation/RunsTest.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/data_validation/ScatterPlot.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/data_validation/SeasonalDecompose.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/data_validation/ShapiroWilk.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/data_validation/Skewness.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/data_validation/SpreadPlot.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/data_validation/TabularCategoricalBarPlots.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/data_validation/TabularDateTimeHistograms.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/data_validation/TabularDescriptionTables.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/data_validation/TabularNumericalHistograms.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/data_validation/TargetRateBarPlots.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/data_validation/TimeSeriesDescription.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/data_validation/TimeSeriesDescriptiveStatistics.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/data_validation/TimeSeriesFrequency.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/data_validation/TimeSeriesHistogram.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/data_validation/TimeSeriesLinePlot.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/data_validation/TimeSeriesMissingValues.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/data_validation/TimeSeriesOutliers.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/data_validation/UniqueRows.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/data_validation/WOEBinPlots.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/data_validation/WOEBinTable.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/data_validation/ZivotAndrewsArch.py +0 -0
- {validmind-2.10.0rc2/validmind/tests/data_validation/nlp → validmind-2.11.0/validmind/tests/data_validation}/__init__.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/data_validation/nlp/CommonWords.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/data_validation/nlp/Hashtags.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/data_validation/nlp/LanguageDetection.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/data_validation/nlp/Mentions.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/data_validation/nlp/PolarityAndSubjectivity.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/data_validation/nlp/Punctuations.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/data_validation/nlp/Sentiment.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/data_validation/nlp/StopWords.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/data_validation/nlp/TextDescription.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/data_validation/nlp/Toxicity.py +0 -0
- {validmind-2.10.0rc2/validmind/tests/model_validation → validmind-2.11.0/validmind/tests/data_validation/nlp}/__init__.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/model_validation/BertScore.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/model_validation/BleuScore.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/model_validation/ClusterSizeDistribution.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/model_validation/ContextualRecall.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/model_validation/FeaturesAUC.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/model_validation/MeteorScore.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/model_validation/ModelMetadata.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/model_validation/ModelPredictionResiduals.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/model_validation/RegardScore.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/model_validation/RegressionResidualsPlot.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/model_validation/RougeScore.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/model_validation/TimeSeriesPredictionWithCI.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/model_validation/TimeSeriesPredictionsPlot.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/model_validation/TimeSeriesR2SquareBySegments.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/model_validation/TokenDisparity.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/model_validation/ToxicityScore.py +0 -0
- {validmind-2.10.0rc2/validmind/tests/model_validation/sklearn → validmind-2.11.0/validmind/tests/model_validation}/__init__.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/model_validation/embeddings/ClusterDistribution.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/model_validation/embeddings/CosineSimilarityComparison.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/model_validation/embeddings/CosineSimilarityDistribution.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/model_validation/embeddings/CosineSimilarityHeatmap.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/model_validation/embeddings/DescriptiveAnalytics.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/model_validation/embeddings/EmbeddingsVisualization2D.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/model_validation/embeddings/EuclideanDistanceComparison.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/model_validation/embeddings/EuclideanDistanceHeatmap.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/model_validation/embeddings/StabilityAnalysisKeyword.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/model_validation/embeddings/StabilityAnalysisRandomNoise.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/model_validation/embeddings/StabilityAnalysisSynonyms.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/model_validation/embeddings/StabilityAnalysisTranslation.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/model_validation/embeddings/utils.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/model_validation/ragas/AnswerCorrectness.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/model_validation/ragas/AspectCritic.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/model_validation/ragas/ContextEntityRecall.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/model_validation/ragas/ContextPrecision.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/model_validation/ragas/ContextPrecisionWithoutReference.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/model_validation/ragas/ContextRecall.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/model_validation/ragas/Faithfulness.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/model_validation/ragas/NoiseSensitivity.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/model_validation/ragas/ResponseRelevancy.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/model_validation/ragas/SemanticSimilarity.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/model_validation/ragas/utils.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/model_validation/sklearn/AdjustedMutualInformation.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/model_validation/sklearn/AdjustedRandIndex.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/model_validation/sklearn/CalibrationCurve.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/model_validation/sklearn/ClassifierPerformance.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/model_validation/sklearn/ClassifierThresholdOptimization.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/model_validation/sklearn/ClusterCosineSimilarity.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/model_validation/sklearn/ClusterPerformanceMetrics.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/model_validation/sklearn/CompletenessScore.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/model_validation/sklearn/ConfusionMatrix.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/model_validation/sklearn/FeatureImportance.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/model_validation/sklearn/FowlkesMallowsScore.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/model_validation/sklearn/HomogeneityScore.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/model_validation/sklearn/HyperParametersTuning.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/model_validation/sklearn/KMeansClustersOptimization.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/model_validation/sklearn/MinimumAccuracy.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/model_validation/sklearn/MinimumF1Score.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/model_validation/sklearn/MinimumROCAUCScore.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/model_validation/sklearn/ModelParameters.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/model_validation/sklearn/ModelsPerformanceComparison.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/model_validation/sklearn/PermutationFeatureImportance.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/model_validation/sklearn/PrecisionRecallCurve.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/model_validation/sklearn/ROCCurve.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/model_validation/sklearn/RegressionErrors.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/model_validation/sklearn/RegressionErrorsComparison.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/model_validation/sklearn/RegressionPerformance.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/model_validation/sklearn/RegressionR2Square.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/model_validation/sklearn/RegressionR2SquareComparison.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/model_validation/sklearn/SHAPGlobalImportance.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/model_validation/sklearn/ScoreProbabilityAlignment.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/model_validation/sklearn/SilhouettePlot.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/model_validation/sklearn/VMeasure.py +0 -0
- {validmind-2.10.0rc2/validmind/tests/model_validation/statsmodels → validmind-2.11.0/validmind/tests/model_validation/sklearn}/__init__.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/model_validation/statsmodels/AutoARIMA.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/model_validation/statsmodels/DurbinWatsonTest.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/model_validation/statsmodels/GINITable.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/model_validation/statsmodels/KolmogorovSmirnov.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/model_validation/statsmodels/Lilliefors.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/model_validation/statsmodels/RegressionCoeffs.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/model_validation/statsmodels/RegressionFeatureSignificance.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/model_validation/statsmodels/RegressionModelForecastPlot.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/model_validation/statsmodels/RegressionModelForecastPlotLevels.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/model_validation/statsmodels/RegressionModelSensitivityPlot.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/model_validation/statsmodels/RegressionModelSummary.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/model_validation/statsmodels/RegressionPermutationFeatureImportance.py +0 -0
- {validmind-2.10.0rc2/validmind/tests/plots → validmind-2.11.0/validmind/tests/model_validation/statsmodels}/__init__.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/model_validation/statsmodels/statsutils.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/ongoing_monitoring/ClassDiscriminationDrift.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/ongoing_monitoring/ClassImbalanceDrift.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/ongoing_monitoring/ClassificationAccuracyDrift.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/ongoing_monitoring/ConfusionMatrixDrift.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/ongoing_monitoring/CumulativePredictionProbabilitiesDrift.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/ongoing_monitoring/FeatureDrift.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/ongoing_monitoring/PredictionAcrossEachFeature.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/ongoing_monitoring/PredictionCorrelation.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/ongoing_monitoring/PredictionQuantilesAcrossFeatures.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/ongoing_monitoring/ROCCurveDrift.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/ongoing_monitoring/TargetPredictionDistributionPlot.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/plots/CorrelationHeatmap.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/plots/ViolinPlot.py +0 -0
- {validmind-2.10.0rc2/validmind/tests/prompt_validation → validmind-2.11.0/validmind/tests/plots}/__init__.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/prompt_validation/Bias.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/prompt_validation/Clarity.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/prompt_validation/Conciseness.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/prompt_validation/Delimitation.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/prompt_validation/NegativeInstruction.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/prompt_validation/Robustness.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/prompt_validation/Specificity.py +0 -0
- {validmind-2.10.0rc2/validmind/tests/stats → validmind-2.11.0/validmind/tests/prompt_validation}/__init__.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/prompt_validation/ai_powered_test.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/stats/CorrelationAnalysis.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/stats/NormalityTests.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/stats/OutlierDetection.py +0 -0
- {validmind-2.10.0rc2/validmind/unit_metrics/classification/individual → validmind-2.11.0/validmind/tests/stats}/__init__.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/tests/utils.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/unit_metrics/__init__.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/unit_metrics/classification/Accuracy.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/unit_metrics/classification/F1.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/unit_metrics/classification/Precision.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/unit_metrics/classification/ROC_AUC.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/unit_metrics/classification/Recall.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/unit_metrics/regression/AdjustedRSquaredScore.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/unit_metrics/regression/GiniCoefficient.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/unit_metrics/regression/HuberLoss.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/unit_metrics/regression/KolmogorovSmirnovStatistic.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/unit_metrics/regression/MeanAbsoluteError.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/unit_metrics/regression/MeanAbsolutePercentageError.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/unit_metrics/regression/MeanBiasDeviation.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/unit_metrics/regression/MeanSquaredError.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/unit_metrics/regression/QuantileLoss.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/unit_metrics/regression/RSquaredScore.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/vm_models/dataset/__init__.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/vm_models/dataset/utils.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/vm_models/input.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/vm_models/model.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/vm_models/result/__init__.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/vm_models/result/result.jinja +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/vm_models/test_suite/__init__.py +0 -0
- {validmind-2.10.0rc2 → validmind-2.11.0}/validmind/vm_models/test_suite/test_suite.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: validmind
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.11.0
|
|
4
4
|
Summary: ValidMind Library
|
|
5
5
|
License: DUAL LICENSE NOTICE
|
|
6
6
|
|
|
@@ -689,6 +689,7 @@ License: DUAL LICENSE NOTICE
|
|
|
689
689
|
if any, to sign a "copyright disclaimer" for the program, if necessary.
|
|
690
690
|
For more information on this, and how to apply and follow the GNU AGPL, see
|
|
691
691
|
<https://www.gnu.org/licenses/>.
|
|
692
|
+
License-File: LICENSE
|
|
692
693
|
Author: Andres Rodriguez
|
|
693
694
|
Author-email: andres@validmind.ai
|
|
694
695
|
Requires-Python: >=3.9,<3.13
|
|
@@ -705,6 +706,7 @@ Provides-Extra: explainability
|
|
|
705
706
|
Provides-Extra: huggingface
|
|
706
707
|
Provides-Extra: llm
|
|
707
708
|
Provides-Extra: nlp
|
|
709
|
+
Provides-Extra: pii-detection
|
|
708
710
|
Provides-Extra: pytorch
|
|
709
711
|
Provides-Extra: stats
|
|
710
712
|
Provides-Extra: xgboost
|
|
@@ -716,6 +718,7 @@ Requires-Dist: beautifulsoup4
|
|
|
716
718
|
Requires-Dist: bert-score (>=0.3.13) ; extra == "all"
|
|
717
719
|
Requires-Dist: bert-score (>=0.3.13) ; extra == "nlp"
|
|
718
720
|
Requires-Dist: datasets (>=2.10.0,<3.0.0) ; extra == "datasets"
|
|
721
|
+
Requires-Dist: deepeval (>3.3.9) ; extra == "llm"
|
|
719
722
|
Requires-Dist: evaluate ; extra == "all"
|
|
720
723
|
Requires-Dist: evaluate ; extra == "nlp"
|
|
721
724
|
Requires-Dist: ipywidgets
|
|
@@ -729,10 +732,14 @@ Requires-Dist: mistune (>=3.0.2,<4.0.0)
|
|
|
729
732
|
Requires-Dist: nest-asyncio (>=1.6.0,<2.0.0)
|
|
730
733
|
Requires-Dist: nltk (>=3.8.1,<4.0.0) ; extra == "all"
|
|
731
734
|
Requires-Dist: nltk (>=3.8.1,<4.0.0) ; extra == "nlp"
|
|
735
|
+
Requires-Dist: numpy (>=1.23,<2.0.0)
|
|
732
736
|
Requires-Dist: openai (>=1)
|
|
733
737
|
Requires-Dist: pandas (>=2.0.3,<3.0.0)
|
|
734
|
-
Requires-Dist: plotly (>=5.0.0)
|
|
738
|
+
Requires-Dist: plotly (>=5.0.0,<6.0.0)
|
|
735
739
|
Requires-Dist: polars
|
|
740
|
+
Requires-Dist: presidio-analyzer ; extra == "pii-detection"
|
|
741
|
+
Requires-Dist: presidio-structured ; extra == "pii-detection"
|
|
742
|
+
Requires-Dist: pyarrow (<16) ; extra == "nlp"
|
|
736
743
|
Requires-Dist: pycocoevalcap ; extra == "all"
|
|
737
744
|
Requires-Dist: pycocoevalcap ; extra == "llm"
|
|
738
745
|
Requires-Dist: python-dotenv
|
|
@@ -749,12 +756,11 @@ Requires-Dist: seaborn
|
|
|
749
756
|
Requires-Dist: sentencepiece (>=0.2.0,<0.3.0) ; extra == "all"
|
|
750
757
|
Requires-Dist: sentencepiece (>=0.2.0,<0.3.0) ; extra == "huggingface"
|
|
751
758
|
Requires-Dist: sentencepiece (>=0.2.0,<0.3.0) ; extra == "llm"
|
|
752
|
-
Requires-Dist: sentry-sdk (>=1.24.0,<2.0.0)
|
|
753
759
|
Requires-Dist: shap (>=0.46.0) ; extra == "all"
|
|
754
760
|
Requires-Dist: shap (>=0.46.0) ; extra == "explainability"
|
|
755
761
|
Requires-Dist: statsmodels ; extra == "all"
|
|
756
762
|
Requires-Dist: statsmodels ; extra == "stats"
|
|
757
|
-
Requires-Dist: tabulate (>=0.
|
|
763
|
+
Requires-Dist: tabulate (>=0.9.0,<0.10.0)
|
|
758
764
|
Requires-Dist: textblob (>=0.18.0.post0,<0.19.0) ; extra == "all"
|
|
759
765
|
Requires-Dist: textblob (>=0.18.0.post0,<0.19.0) ; extra == "nlp"
|
|
760
766
|
Requires-Dist: tiktoken
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "validmind"
|
|
3
|
-
version = "2.
|
|
3
|
+
version = "2.11.0"
|
|
4
4
|
description = "ValidMind Library"
|
|
5
5
|
readme = "README.pypi.md"
|
|
6
6
|
requires-python = ">=3.9,<3.13"
|
|
@@ -19,15 +19,15 @@ dependencies = [
|
|
|
19
19
|
"matplotlib",
|
|
20
20
|
"mistune (>=3.0.2,<4.0.0)",
|
|
21
21
|
"nest-asyncio (>=1.6.0,<2.0.0)",
|
|
22
|
+
"numpy (>=1.23,<2.0.0)",
|
|
22
23
|
"openai (>=1)",
|
|
23
24
|
"pandas (>=2.0.3,<3.0.0)",
|
|
24
|
-
"plotly (>=5.0.0)",
|
|
25
|
+
"plotly (>=5.0.0,<6.0.0)",
|
|
25
26
|
"polars",
|
|
26
27
|
"python-dotenv",
|
|
27
28
|
"scikit-learn",
|
|
28
29
|
"seaborn",
|
|
29
|
-
"
|
|
30
|
-
"tabulate (>=0.8.9,<0.9.0)",
|
|
30
|
+
"tabulate (>=0.9.0,<0.10.0)",
|
|
31
31
|
"tiktoken",
|
|
32
32
|
"tqdm",
|
|
33
33
|
"anywidget",
|
|
@@ -66,6 +66,7 @@ llm = [
|
|
|
66
66
|
"ragas (>=0.2.3,<=0.2.7)",
|
|
67
67
|
"sentencepiece (>=0.2.0,<0.3.0)",
|
|
68
68
|
"langchain-openai (>=0.1.8)",
|
|
69
|
+
"deepeval (>3.3.9)",
|
|
69
70
|
]
|
|
70
71
|
nlp = [
|
|
71
72
|
"langdetect",
|
|
@@ -74,6 +75,7 @@ nlp = [
|
|
|
74
75
|
"evaluate",
|
|
75
76
|
"rouge (>=1)",
|
|
76
77
|
"bert-score (>=0.3.13)",
|
|
78
|
+
"pyarrow (<16)",
|
|
77
79
|
]
|
|
78
80
|
pytorch = ["torch (>=2.0.0)"]
|
|
79
81
|
stats = ["scipy", "statsmodels", "arch"]
|
|
@@ -81,13 +83,14 @@ xgboost = ["xgboost (>=1.5.2,<3)"]
|
|
|
81
83
|
explainability = ["shap (>=0.46.0)"]
|
|
82
84
|
credit_risk = ["scorecardpy (>=0.1.9.6,<0.2.0)"]
|
|
83
85
|
datasets = ["datasets (>=2.10.0,<3.0.0)"]
|
|
86
|
+
pii-detection = ["presidio-analyzer", "presidio-structured"]
|
|
84
87
|
|
|
85
88
|
[tool.poetry.group.dev.dependencies]
|
|
86
89
|
black = "^22.1.0"
|
|
87
90
|
click = "*"
|
|
88
91
|
cython = "^0.29.34"
|
|
89
92
|
docstring_parser = "*"
|
|
90
|
-
flake8 = "^
|
|
93
|
+
flake8 = "^7.0.0"
|
|
91
94
|
griffe = "*"
|
|
92
95
|
ipykernel = "^6.22.0"
|
|
93
96
|
isort = "^5.12.0"
|
|
@@ -21,7 +21,7 @@ To initialize the ValidMind Library, paste the code snippet with the model ident
|
|
|
21
21
|
import validmind as vm
|
|
22
22
|
|
|
23
23
|
vm.init(
|
|
24
|
-
api_host = "https://
|
|
24
|
+
api_host = "https://app.prod.validmind.ai/api/v1/tracking/tracking",
|
|
25
25
|
api_key = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
|
|
26
26
|
api_secret = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
|
|
27
27
|
project = "<project-identifier>"
|
|
@@ -48,6 +48,7 @@ try:
|
|
|
48
48
|
except ImportError:
|
|
49
49
|
...
|
|
50
50
|
|
|
51
|
+
from . import scorer
|
|
51
52
|
from .__version__ import __version__ # noqa: E402
|
|
52
53
|
from .api_client import init, log_metric, log_text, reload
|
|
53
54
|
from .client import ( # noqa: E402
|
|
@@ -60,6 +61,7 @@ from .client import ( # noqa: E402
|
|
|
60
61
|
run_test_suite,
|
|
61
62
|
)
|
|
62
63
|
from .experimental import agents as experimental_agent
|
|
64
|
+
from .tests.decorator import scorer as scorer_decorator
|
|
63
65
|
from .tests.decorator import tags, tasks, test
|
|
64
66
|
from .tests.run import print_env
|
|
65
67
|
from .utils import is_notebook, parse_version
|
|
@@ -128,6 +130,9 @@ __all__ = [ # noqa
|
|
|
128
130
|
"tags",
|
|
129
131
|
"tasks",
|
|
130
132
|
"test",
|
|
133
|
+
"scorer_decorator",
|
|
134
|
+
# scorer module
|
|
135
|
+
"scorer",
|
|
131
136
|
# raw data (for post-processing test results and building tests)
|
|
132
137
|
"RawData",
|
|
133
138
|
# submodules
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "2.11.0"
|
|
@@ -5,21 +5,39 @@
|
|
|
5
5
|
import json
|
|
6
6
|
import os
|
|
7
7
|
from concurrent.futures import ThreadPoolExecutor
|
|
8
|
-
from typing import List, Optional, Union
|
|
9
|
-
|
|
10
|
-
import tiktoken
|
|
8
|
+
from typing import Any, Dict, List, Optional, Union
|
|
11
9
|
|
|
12
10
|
from ..client_config import client_config
|
|
13
11
|
from ..logging import get_logger
|
|
14
12
|
from ..utils import NumpyEncoder, md_to_html, test_id_to_name
|
|
15
13
|
from ..vm_models.figure import Figure
|
|
16
14
|
from ..vm_models.result import ResultTable
|
|
15
|
+
from ..vm_models.result.pii_filter import (
|
|
16
|
+
PIIDetectionMode,
|
|
17
|
+
get_pii_detection_mode,
|
|
18
|
+
scan_df,
|
|
19
|
+
)
|
|
17
20
|
from .utils import DescriptionFuture
|
|
18
21
|
|
|
19
22
|
__executor = ThreadPoolExecutor()
|
|
20
23
|
|
|
21
24
|
logger = get_logger(__name__)
|
|
22
25
|
|
|
26
|
+
# Try to import tiktoken once at module load
|
|
27
|
+
# Cache the result to avoid repeated import attempts
|
|
28
|
+
_TIKTOKEN_AVAILABLE = False
|
|
29
|
+
_TIKTOKEN_ENCODING = None
|
|
30
|
+
|
|
31
|
+
try:
|
|
32
|
+
import tiktoken
|
|
33
|
+
|
|
34
|
+
_TIKTOKEN_ENCODING = tiktoken.encoding_for_model("gpt-4o")
|
|
35
|
+
_TIKTOKEN_AVAILABLE = True
|
|
36
|
+
except (ImportError, Exception) as e:
|
|
37
|
+
logger.debug(
|
|
38
|
+
f"tiktoken unavailable, will use character-based token estimation: {e}"
|
|
39
|
+
)
|
|
40
|
+
|
|
23
41
|
|
|
24
42
|
def _get_llm_global_context():
|
|
25
43
|
# Get the context from the environment variable
|
|
@@ -37,6 +55,29 @@ def _get_llm_global_context():
|
|
|
37
55
|
return context if context_enabled and context else None
|
|
38
56
|
|
|
39
57
|
|
|
58
|
+
def _estimate_tokens_simple(text: str) -> int:
|
|
59
|
+
"""Estimate token count using character-based heuristic.
|
|
60
|
+
|
|
61
|
+
Uses ~4 characters per token for English/JSON text.
|
|
62
|
+
This is a fallback when tiktoken is unavailable.
|
|
63
|
+
"""
|
|
64
|
+
return len(text) // 4
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
def _truncate_text_simple(text: str, max_tokens: int) -> str:
|
|
68
|
+
"""Truncate text using character-based estimation."""
|
|
69
|
+
estimated_chars = max_tokens * 4
|
|
70
|
+
if len(text) <= estimated_chars:
|
|
71
|
+
return text
|
|
72
|
+
|
|
73
|
+
# Keep first portion and last 100 tokens worth (~400 chars)
|
|
74
|
+
# But ensure we don't take more than 25% for the tail
|
|
75
|
+
last_chars = min(400, estimated_chars // 4)
|
|
76
|
+
first_chars = estimated_chars - last_chars
|
|
77
|
+
|
|
78
|
+
return text[:first_chars] + "...[truncated]" + text[-last_chars:]
|
|
79
|
+
|
|
80
|
+
|
|
40
81
|
def _truncate_summary(
|
|
41
82
|
summary: Union[str, None], test_id: str, max_tokens: int = 100_000
|
|
42
83
|
):
|
|
@@ -44,20 +85,30 @@ def _truncate_summary(
|
|
|
44
85
|
# since string itself is less than max_tokens, definitely small enough
|
|
45
86
|
return summary
|
|
46
87
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
88
|
+
if _TIKTOKEN_AVAILABLE:
|
|
89
|
+
# Use tiktoken for accurate token counting
|
|
90
|
+
summary_tokens = _TIKTOKEN_ENCODING.encode(summary)
|
|
50
91
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
92
|
+
if len(summary_tokens) > max_tokens:
|
|
93
|
+
logger.warning(
|
|
94
|
+
f"Truncating {test_id} due to context length restrictions..."
|
|
95
|
+
" Generated description may be inaccurate"
|
|
96
|
+
)
|
|
97
|
+
summary = (
|
|
98
|
+
_TIKTOKEN_ENCODING.decode(summary_tokens[:max_tokens])
|
|
99
|
+
+ "...[truncated]"
|
|
100
|
+
+ _TIKTOKEN_ENCODING.decode(summary_tokens[-100:])
|
|
101
|
+
)
|
|
102
|
+
else:
|
|
103
|
+
# Fallback to character-based estimation
|
|
104
|
+
estimated_tokens = _estimate_tokens_simple(summary)
|
|
105
|
+
|
|
106
|
+
if estimated_tokens > max_tokens:
|
|
107
|
+
logger.warning(
|
|
108
|
+
f"Truncating {test_id} (estimated) due to context length restrictions..."
|
|
109
|
+
" Generated description may be inaccurate"
|
|
110
|
+
)
|
|
111
|
+
summary = _truncate_text_simple(summary, max_tokens)
|
|
61
112
|
|
|
62
113
|
return summary
|
|
63
114
|
|
|
@@ -69,6 +120,9 @@ def generate_description(
|
|
|
69
120
|
metric: Union[float, int] = None,
|
|
70
121
|
figures: List[Figure] = None,
|
|
71
122
|
title: Optional[str] = None,
|
|
123
|
+
instructions: Optional[str] = None,
|
|
124
|
+
additional_context: Optional[str] = None,
|
|
125
|
+
params: Optional[Dict[str, Any]] = None,
|
|
72
126
|
):
|
|
73
127
|
"""Generate the description for the test results."""
|
|
74
128
|
from validmind.api_client import generate_test_result_description
|
|
@@ -92,6 +146,13 @@ def generate_description(
|
|
|
92
146
|
)
|
|
93
147
|
|
|
94
148
|
if tables:
|
|
149
|
+
if get_pii_detection_mode() in [
|
|
150
|
+
PIIDetectionMode.TEST_DESCRIPTIONS,
|
|
151
|
+
PIIDetectionMode.ALL,
|
|
152
|
+
]:
|
|
153
|
+
for table in tables:
|
|
154
|
+
scan_df(table.data)
|
|
155
|
+
|
|
95
156
|
summary = "\n---\n".join(
|
|
96
157
|
[
|
|
97
158
|
json.dumps(table.serialize(), cls=NumpyEncoder, separators=(",", ":"))
|
|
@@ -107,10 +168,10 @@ def generate_description(
|
|
|
107
168
|
"test_description": test_description,
|
|
108
169
|
"title": title,
|
|
109
170
|
"summary": _truncate_summary(summary, test_id),
|
|
110
|
-
"figures": [
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
"
|
|
171
|
+
"figures": [figure._get_b64_url() for figure in figures or []],
|
|
172
|
+
"additional_context": additional_context,
|
|
173
|
+
"instructions": instructions,
|
|
174
|
+
"params": params,
|
|
114
175
|
}
|
|
115
176
|
)["content"]
|
|
116
177
|
|
|
@@ -122,16 +183,25 @@ def background_generate_description(
|
|
|
122
183
|
figures: List[Figure] = None,
|
|
123
184
|
metric: Union[int, float] = None,
|
|
124
185
|
title: Optional[str] = None,
|
|
186
|
+
instructions: Optional[str] = None,
|
|
187
|
+
additional_context: Optional[str] = None,
|
|
188
|
+
params: Optional[Dict[str, Any]] = None,
|
|
125
189
|
):
|
|
126
190
|
def wrapped():
|
|
127
191
|
try:
|
|
128
|
-
return
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
192
|
+
return (
|
|
193
|
+
generate_description(
|
|
194
|
+
test_id=test_id,
|
|
195
|
+
test_description=test_description,
|
|
196
|
+
tables=tables,
|
|
197
|
+
figures=figures,
|
|
198
|
+
metric=metric,
|
|
199
|
+
title=title,
|
|
200
|
+
instructions=instructions,
|
|
201
|
+
additional_context=additional_context,
|
|
202
|
+
params=params,
|
|
203
|
+
),
|
|
204
|
+
True,
|
|
135
205
|
)
|
|
136
206
|
except Exception as e:
|
|
137
207
|
if "maximum context length" in str(e):
|
|
@@ -146,7 +216,7 @@ def background_generate_description(
|
|
|
146
216
|
logger.warning(f"Failed to generate description for {test_id}: {e}")
|
|
147
217
|
logger.warning(f"Using default description for {test_id}")
|
|
148
218
|
|
|
149
|
-
return test_description
|
|
219
|
+
return test_description, False
|
|
150
220
|
|
|
151
221
|
return DescriptionFuture(__executor.submit(wrapped))
|
|
152
222
|
|
|
@@ -159,6 +229,9 @@ def get_result_description(
|
|
|
159
229
|
metric: Union[int, float] = None,
|
|
160
230
|
should_generate: bool = True,
|
|
161
231
|
title: Optional[str] = None,
|
|
232
|
+
instructions: Optional[str] = None,
|
|
233
|
+
additional_context: Optional[str] = None,
|
|
234
|
+
params: Optional[Dict[str, Any]] = None,
|
|
162
235
|
):
|
|
163
236
|
"""Get the metadata dictionary for a test or metric result.
|
|
164
237
|
|
|
@@ -180,10 +253,18 @@ def get_result_description(
|
|
|
180
253
|
figures (List[Figure]): The figures to attach to the test suite result.
|
|
181
254
|
metric (Union[int, float]): Unit metrics attached to the test result.
|
|
182
255
|
should_generate (bool): Whether to generate the description or not. Defaults to True.
|
|
256
|
+
instructions (Optional[str]): Instructions for the LLM to generate the description.
|
|
257
|
+
additional_context (Optional[str]): Additional context for the LLM to generate the description.
|
|
258
|
+
params (Optional[Dict[str, Any]]): Test parameters used to customize test behavior.
|
|
183
259
|
|
|
184
260
|
Returns:
|
|
185
261
|
str: The description to be logged with the test results.
|
|
186
262
|
"""
|
|
263
|
+
# Backwards compatibility: parameter instructions override environment variable
|
|
264
|
+
env_instructions = _get_llm_global_context()
|
|
265
|
+
# Parameter instructions take precedence and override environment variable
|
|
266
|
+
_instructions = instructions if instructions is not None else env_instructions
|
|
267
|
+
|
|
187
268
|
# Check the feature flag first, then the environment variable
|
|
188
269
|
llm_descriptions_enabled = (
|
|
189
270
|
client_config.can_generate_llm_test_descriptions()
|
|
@@ -191,15 +272,7 @@ def get_result_description(
|
|
|
191
272
|
not in ["0", "false"]
|
|
192
273
|
)
|
|
193
274
|
|
|
194
|
-
|
|
195
|
-
from validmind.ai.utils import is_configured
|
|
196
|
-
|
|
197
|
-
if (
|
|
198
|
-
should_generate
|
|
199
|
-
and (tables or figures)
|
|
200
|
-
and llm_descriptions_enabled
|
|
201
|
-
and is_configured()
|
|
202
|
-
):
|
|
275
|
+
if should_generate and (tables or figures) and llm_descriptions_enabled:
|
|
203
276
|
# get description future and set it as the description in the metadata
|
|
204
277
|
# this will lazily retrieved so it can run in the background in parallel
|
|
205
278
|
description = background_generate_description(
|
|
@@ -209,6 +282,9 @@ def get_result_description(
|
|
|
209
282
|
figures=figures,
|
|
210
283
|
metric=metric,
|
|
211
284
|
title=title,
|
|
285
|
+
instructions=_instructions,
|
|
286
|
+
additional_context=additional_context,
|
|
287
|
+
params=params,
|
|
212
288
|
)
|
|
213
289
|
|
|
214
290
|
else:
|
|
@@ -35,13 +35,13 @@ class DescriptionFuture:
|
|
|
35
35
|
self._future = future
|
|
36
36
|
|
|
37
37
|
def get_description(self):
|
|
38
|
-
if isinstance(self._future,
|
|
38
|
+
if isinstance(self._future, tuple):
|
|
39
39
|
description = self._future
|
|
40
40
|
else:
|
|
41
41
|
# This will block until the future is completed
|
|
42
42
|
description = self._future.result()
|
|
43
43
|
|
|
44
|
-
return md_to_html(description, mathml=True)
|
|
44
|
+
return md_to_html(description[0], mathml=True), description[1]
|
|
45
45
|
|
|
46
46
|
|
|
47
47
|
def get_client_and_model():
|
|
@@ -18,13 +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
|
|
22
21
|
|
|
23
22
|
from .client_config import client_config
|
|
24
23
|
from .errors import MissingAPICredentialsError, MissingModelIdError, raise_api_error
|
|
25
|
-
from .logging import get_logger,
|
|
24
|
+
from .logging import get_logger, log_api_operation
|
|
26
25
|
from .utils import NumpyEncoder, is_html, md_to_html, run_async
|
|
27
|
-
from .vm_models import Figure
|
|
26
|
+
from .vm_models.figure import Figure
|
|
28
27
|
|
|
29
28
|
logger = get_logger(__name__)
|
|
30
29
|
|
|
@@ -40,8 +39,6 @@ __api_session: Optional[aiohttp.ClientSession] = None
|
|
|
40
39
|
@atexit.register
|
|
41
40
|
def _close_session():
|
|
42
41
|
"""Closes the async client session at exit."""
|
|
43
|
-
global __api_session
|
|
44
|
-
|
|
45
42
|
if __api_session and not __api_session.closed:
|
|
46
43
|
try:
|
|
47
44
|
loop = asyncio.get_event_loop()
|
|
@@ -86,6 +83,7 @@ def _get_session() -> aiohttp.ClientSession:
|
|
|
86
83
|
__api_session = aiohttp.ClientSession(
|
|
87
84
|
headers=_get_api_headers(),
|
|
88
85
|
timeout=aiohttp.ClientTimeout(total=int(os.getenv("VM_API_TIMEOUT", 30))),
|
|
86
|
+
trust_env=True,
|
|
89
87
|
)
|
|
90
88
|
|
|
91
89
|
return __api_session
|
|
@@ -167,7 +165,7 @@ def _ping() -> Dict[str, Any]:
|
|
|
167
165
|
|
|
168
166
|
client_info = r.json()
|
|
169
167
|
|
|
170
|
-
|
|
168
|
+
# Sentry removed: no telemetry initialization
|
|
171
169
|
|
|
172
170
|
# Only show this confirmation the first time we connect to the API
|
|
173
171
|
ack_connected = not client_config.model
|
|
@@ -245,14 +243,7 @@ def init(
|
|
|
245
243
|
|
|
246
244
|
def reload():
|
|
247
245
|
"""Reconnect to the ValidMind API and reload the project configuration."""
|
|
248
|
-
|
|
249
|
-
try:
|
|
250
|
-
_ping()
|
|
251
|
-
except Exception as e:
|
|
252
|
-
# if the api host is https, assume we're not in dev mode and send to sentry
|
|
253
|
-
if _api_host.startswith("https://"):
|
|
254
|
-
send_single_error(e)
|
|
255
|
-
raise e
|
|
246
|
+
_ping()
|
|
256
247
|
|
|
257
248
|
|
|
258
249
|
async def aget_metadata(content_id: str) -> Dict[str, Any]:
|
|
@@ -412,9 +403,7 @@ def log_input(input_id: str, type: str, metadata: Dict[str, Any]) -> Dict[str, A
|
|
|
412
403
|
return run_async(alog_input, input_id, type, metadata)
|
|
413
404
|
|
|
414
405
|
|
|
415
|
-
def log_text(
|
|
416
|
-
content_id: str, text: str, _json: Optional[Dict[str, Any]] = None
|
|
417
|
-
) -> Dict[str, Any]:
|
|
406
|
+
def log_text(content_id: str, text: str, _json: Optional[Dict[str, Any]] = None) -> str:
|
|
418
407
|
"""Logs free-form text to ValidMind API.
|
|
419
408
|
|
|
420
409
|
Args:
|
|
@@ -427,7 +416,7 @@ def log_text(
|
|
|
427
416
|
Exception: If the API call fails.
|
|
428
417
|
|
|
429
418
|
Returns:
|
|
430
|
-
|
|
419
|
+
str: HTML string containing the logged text in an accordion format.
|
|
431
420
|
"""
|
|
432
421
|
if not content_id or not isinstance(content_id, str):
|
|
433
422
|
raise ValueError("`content_id` must be a non-empty string")
|
|
@@ -439,8 +428,10 @@ def log_text(
|
|
|
439
428
|
|
|
440
429
|
log_text = run_async(alog_metadata, content_id, text, _json)
|
|
441
430
|
|
|
442
|
-
|
|
443
|
-
|
|
431
|
+
from .vm_models.html_renderer import StatefulHTMLRenderer
|
|
432
|
+
|
|
433
|
+
return StatefulHTMLRenderer.render_accordion(
|
|
434
|
+
items=[log_text["text"]],
|
|
444
435
|
titles=[f"Text Block: '{log_text['content_id']}'"],
|
|
445
436
|
)
|
|
446
437
|
|
|
@@ -461,11 +452,11 @@ async def alog_metric(
|
|
|
461
452
|
if value is None:
|
|
462
453
|
raise ValueError("Must provide a value for the metric")
|
|
463
454
|
|
|
455
|
+
# Validate that value is a scalar (int or float)
|
|
464
456
|
if not isinstance(value, (int, float)):
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
raise ValueError("`value` must be a scalar (int or float)")
|
|
457
|
+
raise ValueError(
|
|
458
|
+
"Only scalar values (int or float) are allowed for logging metrics."
|
|
459
|
+
)
|
|
469
460
|
|
|
470
461
|
if thresholds is not None and not isinstance(thresholds, dict):
|
|
471
462
|
raise ValueError("`thresholds` must be a dictionary or None")
|
|
@@ -494,7 +485,7 @@ async def alog_metric(
|
|
|
494
485
|
|
|
495
486
|
def log_metric(
|
|
496
487
|
key: str,
|
|
497
|
-
value: float,
|
|
488
|
+
value: Union[int, float],
|
|
498
489
|
inputs: Optional[List[str]] = None,
|
|
499
490
|
params: Optional[Dict[str, Any]] = None,
|
|
500
491
|
recorded_at: Optional[str] = None,
|
|
@@ -504,18 +495,19 @@ def log_metric(
|
|
|
504
495
|
"""Logs a unit metric.
|
|
505
496
|
|
|
506
497
|
Unit metrics are key-value pairs where the key is the metric name and the value is
|
|
507
|
-
a scalar (int or float). These key-value pairs are associated
|
|
508
|
-
selected model (inventory model in the ValidMind Platform) and keys
|
|
509
|
-
to over time to create a history of the metric. On the ValidMind Platform,
|
|
510
|
-
will be used to create plots/visualizations for documentation and dashboards etc.
|
|
498
|
+
a scalar (int or float). These key-value pairs are associated
|
|
499
|
+
with the currently selected model (inventory model in the ValidMind Platform) and keys
|
|
500
|
+
can be logged to over time to create a history of the metric. On the ValidMind Platform,
|
|
501
|
+
these metrics will be used to create plots/visualizations for documentation and dashboards etc.
|
|
511
502
|
|
|
512
503
|
Args:
|
|
513
504
|
key (str): The metric key
|
|
514
|
-
value (Union[int, float]): The metric value
|
|
505
|
+
value (Union[int, float]): The metric value (scalar)
|
|
515
506
|
inputs (List[str], optional): List of input IDs
|
|
516
507
|
params (Dict[str, Any], optional): Parameters used to generate the metric
|
|
517
508
|
recorded_at (str, optional): Timestamp when the metric was recorded
|
|
518
509
|
thresholds (Dict[str, Any], optional): Thresholds for the metric
|
|
510
|
+
passed (bool, optional): Whether the metric passed validation thresholds
|
|
519
511
|
"""
|
|
520
512
|
return run_async(
|
|
521
513
|
alog_metric,
|
|
@@ -11,7 +11,11 @@ from typing import Any, Callable, Dict, List, Optional, Union
|
|
|
11
11
|
import numpy as np
|
|
12
12
|
import pandas as pd
|
|
13
13
|
import polars as pl
|
|
14
|
-
|
|
14
|
+
|
|
15
|
+
try:
|
|
16
|
+
import torch # noqa: F401
|
|
17
|
+
except Exception:
|
|
18
|
+
torch = None # type: ignore # noqa: F401
|
|
15
19
|
|
|
16
20
|
from .api_client import log_input as log_input
|
|
17
21
|
from .client_config import client_config
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# Copyright © 2023-2024 ValidMind Inc. All rights reserved.
|
|
2
|
+
# See the LICENSE file in the root of this repository for details.
|
|
3
|
+
# SPDX-License-Identifier: AGPL-3.0 AND ValidMind Commercial
|
|
4
|
+
|
|
5
|
+
"""
|
|
6
|
+
Entrypoint for LLM datasets.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from .agent_dataset import LLMAgentDataset
|
|
10
|
+
|
|
11
|
+
__all__ = [
|
|
12
|
+
"rag",
|
|
13
|
+
"LLMAgentDataset",
|
|
14
|
+
]
|