validmind 2.12.4__tar.gz → 2.13.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.12.4 → validmind-2.13.0}/PKG-INFO +1 -1
- {validmind-2.12.4 → validmind-2.13.0}/pyproject.toml +1 -1
- {validmind-2.12.4 → validmind-2.13.0}/validmind/__init__.py +6 -0
- validmind-2.13.0/validmind/__version__.py +1 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/api_client.py +186 -19
- {validmind-2.12.4 → validmind-2.13.0}/validmind/client.py +147 -1
- validmind-2.13.0/validmind/datasets/classification/config.json +121 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/classification/customer_churn.py +32 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/experimental/agents.py +11 -1
- {validmind-2.12.4 → validmind-2.13.0}/validmind/models/r_model.py +1 -2
- {validmind-2.12.4 → validmind-2.13.0}/validmind/template.py +48 -1
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/run.py +1 -1
- {validmind-2.12.4 → validmind-2.13.0}/validmind/utils.py +9 -4
- {validmind-2.12.4 → validmind-2.13.0}/validmind/vm_models/html_renderer.py +23 -14
- {validmind-2.12.4 → validmind-2.13.0}/validmind/vm_models/result/result.py +76 -8
- validmind-2.13.0/validmind/vm_models/text_generation_summary.py +146 -0
- validmind-2.12.4/validmind/__version__.py +0 -1
- {validmind-2.12.4 → validmind-2.13.0}/LICENSE +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/README.pypi.md +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/ai/test_descriptions.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/ai/utils.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/client_config.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/__init__.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/classification/__init__.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/classification/datasets/bank_customer_churn.csv +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/classification/datasets/taiwan_credit.csv +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/classification/taiwan_credit.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/cluster/digits.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/credit_risk/__init__.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/credit_risk/datasets/lending_club_biased.csv.gz +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/credit_risk/datasets/lending_club_loan_data_2007_2014_clean.csv.gz +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/credit_risk/lending_club.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/credit_risk/lending_club_bias.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/llm/__init__.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/llm/agent_dataset.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/llm/rag/__init__.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/llm/rag/datasets/rfp_existing_questions_client_1.csv +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/llm/rag/datasets/rfp_existing_questions_client_2.csv +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/llm/rag/datasets/rfp_existing_questions_client_3.csv +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/llm/rag/datasets/rfp_existing_questions_client_4.csv +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/llm/rag/datasets/rfp_existing_questions_client_5.csv +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/llm/rag/rfp.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/nlp/__init__.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/nlp/cnn_dailymail.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/nlp/datasets/Covid_19.csv +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/nlp/datasets/cnn_dailymail_100_with_predictions.csv +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/nlp/datasets/cnn_dailymail_500_with_predictions.csv +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/nlp/datasets/sentiments_with_predictions.csv +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/nlp/twitter_covid_19.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/regression/__init__.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/regression/california_housing.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/regression/datasets/california_housing.csv +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/regression/datasets/fred/CPIAUCSL.csv +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/regression/datasets/fred/CSUSHPISA.csv +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/regression/datasets/fred/DRSFRMACBS.csv +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/regression/datasets/fred/FEDFUNDS.csv +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/regression/datasets/fred/GDP.csv +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/regression/datasets/fred/GDPC1.csv +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/regression/datasets/fred/GS10.csv +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/regression/datasets/fred/GS3.csv +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/regression/datasets/fred/GS5.csv +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/regression/datasets/fred/MORTGAGE30US.csv +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/regression/datasets/fred/UNRATE.csv +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/regression/datasets/fred_loan_rates.csv +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/regression/datasets/fred_loan_rates_test_1.csv +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/regression/datasets/fred_loan_rates_test_2.csv +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/regression/datasets/fred_loan_rates_test_3.csv +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/regression/datasets/fred_loan_rates_test_4.csv +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/regression/datasets/fred_loan_rates_test_5.csv +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/regression/datasets/leanding_club_loan_rates.csv +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/regression/fred.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/regression/fred_timeseries.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/regression/generate_california_housing_csv.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/regression/lending_club.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/regression/models/fred_loan_rates_model_1.pkl +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/regression/models/fred_loan_rates_model_2.pkl +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/regression/models/fred_loan_rates_model_3.pkl +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/regression/models/fred_loan_rates_model_4.pkl +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/regression/models/fred_loan_rates_model_5.pkl +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/errors.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/experimental/__init__.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/html_templates/__init__.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/html_templates/content_blocks.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/input_registry.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/logging.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/models/__init__.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/models/foundation.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/models/function.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/models/huggingface.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/models/metadata.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/models/pipeline.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/models/pytorch.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/models/sklearn.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/scorers/__init__.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/scorers/classification/AbsoluteError.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/scorers/classification/BrierScore.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/scorers/classification/CalibrationError.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/scorers/classification/ClassBalance.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/scorers/classification/Confidence.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/scorers/classification/Correctness.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/scorers/classification/LogLoss.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/scorers/classification/OutlierScore.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/scorers/classification/ProbabilityError.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/scorers/classification/Uncertainty.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/scorers/classification/__init__.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/scorers/llm/deepeval/AnswerRelevancy.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/scorers/llm/deepeval/ArgumentCorrectness.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/scorers/llm/deepeval/Bias.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/scorers/llm/deepeval/ContextualPrecision.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/scorers/llm/deepeval/ContextualRecall.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/scorers/llm/deepeval/ContextualRelevancy.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/scorers/llm/deepeval/Faithfulness.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/scorers/llm/deepeval/GEval.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/scorers/llm/deepeval/Hallucination.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/scorers/llm/deepeval/PlanAdherence.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/scorers/llm/deepeval/PlanQuality.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/scorers/llm/deepeval/Summarization.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/scorers/llm/deepeval/TaskCompletion.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/scorers/llm/deepeval/ToolCorrectness.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/scorers/llm/deepeval/__init__.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/test_suites/__init__.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/test_suites/classifier.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/test_suites/cluster.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/test_suites/embeddings.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/test_suites/llm.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/test_suites/nlp.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/test_suites/parameters_optimization.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/test_suites/regression.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/test_suites/statsmodels_timeseries.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/test_suites/summarization.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/test_suites/tabular_datasets.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/test_suites/text_data.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/test_suites/time_series.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/__init__.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/__types__.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/_store.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/comparison.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/ACFandPACFPlot.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/ADF.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/AutoAR.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/AutoMA.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/AutoStationarity.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/BivariateScatterPlots.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/BoxPierce.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/ChiSquaredFeaturesTable.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/ClassImbalance.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/DatasetDescription.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/DatasetSplit.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/DescriptiveStatistics.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/DickeyFullerGLS.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/Duplicates.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/EngleGrangerCoint.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/FeatureTargetCorrelationPlot.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/HighCardinality.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/HighPearsonCorrelation.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/IQROutliersBarPlot.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/IQROutliersTable.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/IsolationForestOutliers.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/JarqueBera.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/KPSS.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/LJungBox.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/LaggedCorrelationHeatmap.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/MissingValues.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/MissingValuesBarPlot.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/MutualInformation.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/PearsonCorrelationMatrix.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/PhillipsPerronArch.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/ProtectedClassesCombination.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/ProtectedClassesDescription.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/ProtectedClassesDisparity.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/ProtectedClassesThresholdOptimizer.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/RollingStatsPlot.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/RunsTest.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/ScatterPlot.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/ScoreBandDefaultRates.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/SeasonalDecompose.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/ShapiroWilk.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/Skewness.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/SpreadPlot.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/TabularCategoricalBarPlots.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/TabularDateTimeHistograms.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/TabularDescriptionTables.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/TabularNumericalHistograms.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/TargetRateBarPlots.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/TimeSeriesDescription.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/TimeSeriesDescriptiveStatistics.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/TimeSeriesFrequency.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/TimeSeriesHistogram.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/TimeSeriesLinePlot.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/TimeSeriesMissingValues.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/TimeSeriesOutliers.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/TooManyZeroValues.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/UniqueRows.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/WOEBinPlots.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/WOEBinTable.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/ZivotAndrewsArch.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/__init__.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/nlp/CommonWords.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/nlp/Hashtags.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/nlp/LanguageDetection.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/nlp/Mentions.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/nlp/PolarityAndSubjectivity.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/nlp/Punctuations.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/nlp/Sentiment.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/nlp/StopWords.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/nlp/TextDescription.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/nlp/Toxicity.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/nlp/__init__.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/decorator.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/load.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/BertScore.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/BleuScore.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/ClusterSizeDistribution.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/ContextualRecall.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/FeaturesAUC.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/MeteorScore.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/ModelMetadata.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/ModelPredictionResiduals.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/RegardScore.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/RegressionResidualsPlot.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/RougeScore.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/TimeSeriesPredictionWithCI.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/TimeSeriesPredictionsPlot.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/TimeSeriesR2SquareBySegments.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/TokenDisparity.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/ToxicityScore.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/__init__.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/embeddings/ClusterDistribution.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/embeddings/CosineSimilarityComparison.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/embeddings/CosineSimilarityDistribution.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/embeddings/CosineSimilarityHeatmap.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/embeddings/DescriptiveAnalytics.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/embeddings/EmbeddingsVisualization2D.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/embeddings/EuclideanDistanceComparison.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/embeddings/EuclideanDistanceHeatmap.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/embeddings/PCAComponentsPairwisePlots.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/embeddings/StabilityAnalysisKeyword.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/embeddings/StabilityAnalysisRandomNoise.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/embeddings/StabilityAnalysisSynonyms.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/embeddings/StabilityAnalysisTranslation.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/embeddings/TSNEComponentsPairwisePlots.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/embeddings/utils.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/ragas/AnswerCorrectness.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/ragas/AspectCritic.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/ragas/ContextEntityRecall.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/ragas/ContextPrecision.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/ragas/ContextPrecisionWithoutReference.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/ragas/ContextRecall.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/ragas/Faithfulness.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/ragas/NoiseSensitivity.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/ragas/ResponseRelevancy.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/ragas/SemanticSimilarity.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/ragas/utils.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/sklearn/AdjustedMutualInformation.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/sklearn/AdjustedRandIndex.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/sklearn/CalibrationCurve.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/sklearn/ClassifierPerformance.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/sklearn/ClassifierThresholdOptimization.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/sklearn/ClusterCosineSimilarity.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/sklearn/ClusterPerformanceMetrics.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/sklearn/CompletenessScore.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/sklearn/ConfusionMatrix.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/sklearn/FeatureImportance.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/sklearn/FowlkesMallowsScore.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/sklearn/HomogeneityScore.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/sklearn/HyperParametersTuning.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/sklearn/KMeansClustersOptimization.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/sklearn/MinimumAccuracy.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/sklearn/MinimumF1Score.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/sklearn/MinimumROCAUCScore.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/sklearn/ModelParameters.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/sklearn/ModelsPerformanceComparison.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/sklearn/OverfitDiagnosis.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/sklearn/PermutationFeatureImportance.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/sklearn/PopulationStabilityIndex.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/sklearn/PrecisionRecallCurve.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/sklearn/ROCCurve.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/sklearn/RegressionErrors.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/sklearn/RegressionErrorsComparison.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/sklearn/RegressionPerformance.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/sklearn/RegressionR2Square.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/sklearn/RegressionR2SquareComparison.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/sklearn/RobustnessDiagnosis.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/sklearn/SHAPGlobalImportance.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/sklearn/ScoreProbabilityAlignment.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/sklearn/SilhouettePlot.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/sklearn/TrainingTestDegradation.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/sklearn/VMeasure.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/sklearn/WeakspotsDiagnosis.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/sklearn/__init__.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/statsmodels/AutoARIMA.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/statsmodels/CumulativePredictionProbabilities.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/statsmodels/DurbinWatsonTest.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/statsmodels/GINITable.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/statsmodels/KolmogorovSmirnov.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/statsmodels/Lilliefors.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/statsmodels/PredictionProbabilitiesHistogram.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/statsmodels/RegressionCoeffs.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/statsmodels/RegressionFeatureSignificance.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/statsmodels/RegressionModelForecastPlot.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/statsmodels/RegressionModelForecastPlotLevels.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/statsmodels/RegressionModelSensitivityPlot.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/statsmodels/RegressionModelSummary.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/statsmodels/RegressionPermutationFeatureImportance.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/statsmodels/ScorecardHistogram.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/statsmodels/__init__.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/statsmodels/statsutils.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/ongoing_monitoring/CalibrationCurveDrift.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/ongoing_monitoring/ClassDiscriminationDrift.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/ongoing_monitoring/ClassImbalanceDrift.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/ongoing_monitoring/ClassificationAccuracyDrift.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/ongoing_monitoring/ConfusionMatrixDrift.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/ongoing_monitoring/CumulativePredictionProbabilitiesDrift.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/ongoing_monitoring/FeatureDrift.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/ongoing_monitoring/PredictionAcrossEachFeature.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/ongoing_monitoring/PredictionCorrelation.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/ongoing_monitoring/PredictionProbabilitiesHistogramDrift.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/ongoing_monitoring/PredictionQuantilesAcrossFeatures.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/ongoing_monitoring/ROCCurveDrift.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/ongoing_monitoring/ScoreBandsDrift.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/ongoing_monitoring/ScorecardHistogramDrift.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/ongoing_monitoring/TargetPredictionDistributionPlot.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/output.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/plots/BoxPlot.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/plots/CorrelationHeatmap.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/plots/HistogramPlot.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/plots/ViolinPlot.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/plots/__init__.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/prompt_validation/Bias.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/prompt_validation/Clarity.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/prompt_validation/Conciseness.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/prompt_validation/Delimitation.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/prompt_validation/NegativeInstruction.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/prompt_validation/Robustness.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/prompt_validation/Specificity.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/prompt_validation/__init__.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/prompt_validation/ai_powered_test.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/stats/CorrelationAnalysis.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/stats/DescriptiveStats.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/stats/NormalityTests.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/stats/OutlierDetection.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/stats/__init__.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/test_providers.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/utils.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/unit_metrics/__init__.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/unit_metrics/classification/Accuracy.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/unit_metrics/classification/F1.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/unit_metrics/classification/Precision.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/unit_metrics/classification/ROC_AUC.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/unit_metrics/classification/Recall.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/unit_metrics/regression/AdjustedRSquaredScore.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/unit_metrics/regression/GiniCoefficient.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/unit_metrics/regression/HuberLoss.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/unit_metrics/regression/KolmogorovSmirnovStatistic.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/unit_metrics/regression/MeanAbsoluteError.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/unit_metrics/regression/MeanAbsolutePercentageError.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/unit_metrics/regression/MeanBiasDeviation.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/unit_metrics/regression/MeanSquaredError.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/unit_metrics/regression/QuantileLoss.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/unit_metrics/regression/RSquaredScore.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/unit_metrics/regression/RootMeanSquaredError.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/vm_models/__init__.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/vm_models/dataset/__init__.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/vm_models/dataset/dataset.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/vm_models/dataset/utils.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/vm_models/figure.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/vm_models/html_progress.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/vm_models/input.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/vm_models/model.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/vm_models/result/__init__.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/vm_models/result/pii_filter.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/vm_models/result/result.jinja +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/vm_models/result/utils.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/vm_models/test_suite/__init__.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/vm_models/test_suite/runner.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/vm_models/test_suite/summary.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/vm_models/test_suite/test.py +0 -0
- {validmind-2.12.4 → validmind-2.13.0}/validmind/vm_models/test_suite/test_suite.py +0 -0
|
@@ -52,6 +52,8 @@ from . import scorers as scorer
|
|
|
52
52
|
from .__version__ import __version__ # noqa: E402
|
|
53
53
|
from .api_client import init, log_metric, log_test_result, log_text, reload
|
|
54
54
|
from .client import ( # noqa: E402
|
|
55
|
+
generate_documentation_text,
|
|
56
|
+
get_content_ids,
|
|
55
57
|
get_test_suite,
|
|
56
58
|
init_dataset,
|
|
57
59
|
init_model,
|
|
@@ -59,6 +61,7 @@ from .client import ( # noqa: E402
|
|
|
59
61
|
preview_template,
|
|
60
62
|
run_documentation_tests,
|
|
61
63
|
run_test_suite,
|
|
64
|
+
run_text_generation,
|
|
62
65
|
)
|
|
63
66
|
from .experimental import agents as experimental_agent
|
|
64
67
|
from .tests.decorator import scorer as scorer_decorator
|
|
@@ -116,11 +119,14 @@ __all__ = [ # noqa
|
|
|
116
119
|
"init_dataset",
|
|
117
120
|
"init_model",
|
|
118
121
|
"init_r_model",
|
|
122
|
+
"generate_documentation_text",
|
|
119
123
|
"get_test_suite",
|
|
124
|
+
"get_content_ids",
|
|
120
125
|
"log_metric",
|
|
121
126
|
"preview_template",
|
|
122
127
|
"print_env",
|
|
123
128
|
"reload",
|
|
129
|
+
"run_text_generation",
|
|
124
130
|
"run_documentation_tests",
|
|
125
131
|
# log metric function (for direct/bulk/retroactive logging of metrics)
|
|
126
132
|
# test suite functions (less common)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "2.13.0"
|
|
@@ -278,6 +278,7 @@ async def alog_metadata(
|
|
|
278
278
|
content_id: str,
|
|
279
279
|
text: Optional[str] = None,
|
|
280
280
|
_json: Optional[Dict[str, Any]] = None,
|
|
281
|
+
section_id: Optional[str] = None,
|
|
281
282
|
) -> Dict[str, Any]:
|
|
282
283
|
"""Logs free-form metadata to ValidMind API.
|
|
283
284
|
|
|
@@ -285,6 +286,8 @@ async def alog_metadata(
|
|
|
285
286
|
content_id (str): Unique content identifier for the metadata.
|
|
286
287
|
text (str, optional): Free-form text to assign to the metadata. Defaults to None.
|
|
287
288
|
_json (dict, optional): Free-form key-value pairs to assign to the metadata. Defaults to None.
|
|
289
|
+
section_id (str, optional): Section ID to append the text block to when the
|
|
290
|
+
content ID does not already exist.
|
|
288
291
|
|
|
289
292
|
Raises:
|
|
290
293
|
Exception: If the API call fails.
|
|
@@ -298,9 +301,14 @@ async def alog_metadata(
|
|
|
298
301
|
if _json is not None:
|
|
299
302
|
metadata_dict["json"] = _json
|
|
300
303
|
|
|
304
|
+
request_params = {}
|
|
305
|
+
if section_id:
|
|
306
|
+
request_params["section_id"] = section_id
|
|
307
|
+
|
|
301
308
|
try:
|
|
302
309
|
return await _post(
|
|
303
310
|
"log_metadata",
|
|
311
|
+
params=request_params,
|
|
304
312
|
data=json.dumps(metadata_dict, cls=NumpyEncoder, allow_nan=False),
|
|
305
313
|
)
|
|
306
314
|
except Exception as e:
|
|
@@ -445,37 +453,196 @@ def log_input(input_id: str, type: str, metadata: Dict[str, Any]) -> Dict[str, A
|
|
|
445
453
|
return run_async(alog_input, input_id, type, metadata)
|
|
446
454
|
|
|
447
455
|
|
|
448
|
-
def
|
|
449
|
-
|
|
456
|
+
def _validate_log_text_context(
|
|
457
|
+
context: Optional[Dict[str, Any]],
|
|
458
|
+
) -> Optional[Dict[str, List[str]]]:
|
|
459
|
+
"""Validate supported AI generation context for ``log_text``."""
|
|
460
|
+
if context is None:
|
|
461
|
+
return None
|
|
462
|
+
|
|
463
|
+
if not isinstance(context, dict):
|
|
464
|
+
raise ValueError("`context` must be a dictionary or None")
|
|
465
|
+
|
|
466
|
+
allowed_keys = {"content_ids"}
|
|
467
|
+
unknown_keys = set(context.keys()) - allowed_keys
|
|
468
|
+
if unknown_keys:
|
|
469
|
+
raise ValueError(
|
|
470
|
+
"Unsupported `context` keys: "
|
|
471
|
+
f"{', '.join(sorted(unknown_keys))}. Only `content_ids` is supported."
|
|
472
|
+
)
|
|
473
|
+
|
|
474
|
+
content_ids = context.get("content_ids")
|
|
475
|
+
if content_ids is None:
|
|
476
|
+
raise ValueError("`context` must include `content_ids` when provided")
|
|
477
|
+
if not isinstance(content_ids, list) or not content_ids:
|
|
478
|
+
raise ValueError("`context['content_ids']` must be a non-empty list")
|
|
479
|
+
if any(
|
|
480
|
+
not isinstance(content_id, str) or not content_id for content_id in content_ids
|
|
481
|
+
):
|
|
482
|
+
raise ValueError("`context['content_ids']` must contain only non-empty strings")
|
|
483
|
+
|
|
484
|
+
return {"content_ids": content_ids}
|
|
485
|
+
|
|
486
|
+
|
|
487
|
+
def generate_qualitative_text(text_generation_data: Dict[str, Any]) -> Dict[str, Any]:
|
|
488
|
+
"""Generate qualitative text using the ValidMind AI API."""
|
|
489
|
+
r = requests.post(
|
|
490
|
+
url=_get_url("ai/generate/qualitative_text_generation"),
|
|
491
|
+
headers=_get_api_headers(),
|
|
492
|
+
json=text_generation_data,
|
|
493
|
+
)
|
|
494
|
+
|
|
495
|
+
if r.status_code != 200:
|
|
496
|
+
raise_api_error(r.text)
|
|
497
|
+
|
|
498
|
+
return r.json()
|
|
499
|
+
|
|
500
|
+
|
|
501
|
+
def _normalize_logged_text(text: str, field_name: str) -> str:
|
|
502
|
+
"""Validate text content and convert Markdown to HTML when needed."""
|
|
503
|
+
if not isinstance(text, str) or not text:
|
|
504
|
+
raise ValueError(f"`{field_name}` must be a non-empty string")
|
|
505
|
+
|
|
506
|
+
if not is_html(text):
|
|
507
|
+
return md_to_html(text, mathml=True)
|
|
508
|
+
|
|
509
|
+
return text
|
|
510
|
+
|
|
511
|
+
|
|
512
|
+
def _validate_manual_log_text_args(
|
|
513
|
+
text: str, prompt: Optional[str], context: Optional[Dict[str, Any]]
|
|
514
|
+
) -> str:
|
|
515
|
+
"""Validate manual log_text arguments."""
|
|
516
|
+
if prompt is not None:
|
|
517
|
+
raise ValueError("`prompt` is only supported when `text` is omitted")
|
|
518
|
+
if context is not None:
|
|
519
|
+
raise ValueError("`context` is only supported when `text` is omitted")
|
|
520
|
+
|
|
521
|
+
return _normalize_logged_text(text, "text")
|
|
522
|
+
|
|
523
|
+
|
|
524
|
+
def _build_log_text_generation_request(
|
|
525
|
+
content_id: str,
|
|
526
|
+
prompt: Optional[str],
|
|
527
|
+
context: Optional[Dict[str, Any]],
|
|
528
|
+
section_id: Optional[str] = None,
|
|
529
|
+
) -> Dict[str, Any]:
|
|
530
|
+
"""Build the request payload for AI-assisted text generation."""
|
|
531
|
+
request_data = {
|
|
532
|
+
"content_id": content_id,
|
|
533
|
+
"generate": True,
|
|
534
|
+
}
|
|
535
|
+
|
|
536
|
+
if prompt is not None:
|
|
537
|
+
if not isinstance(prompt, str) or not prompt:
|
|
538
|
+
raise ValueError("`prompt` must be a non-empty string")
|
|
539
|
+
request_data["prompt"] = prompt
|
|
540
|
+
|
|
541
|
+
if section_id is not None:
|
|
542
|
+
if not isinstance(section_id, str) or not section_id:
|
|
543
|
+
raise ValueError("`section_id` must be a non-empty string")
|
|
544
|
+
request_data["section_id"] = section_id
|
|
545
|
+
|
|
546
|
+
validated_context = _validate_log_text_context(context)
|
|
547
|
+
if validated_context is not None:
|
|
548
|
+
request_data["context"] = validated_context
|
|
549
|
+
|
|
550
|
+
return request_data
|
|
551
|
+
|
|
552
|
+
|
|
553
|
+
def _generate_log_text(
|
|
554
|
+
content_id: str,
|
|
555
|
+
prompt: Optional[str],
|
|
556
|
+
context: Optional[Dict[str, Any]],
|
|
557
|
+
section_id: Optional[str] = None,
|
|
558
|
+
) -> str:
|
|
559
|
+
"""Generate text for log_text and normalize it to HTML."""
|
|
560
|
+
request_data = _build_log_text_generation_request(
|
|
561
|
+
content_id,
|
|
562
|
+
prompt,
|
|
563
|
+
context,
|
|
564
|
+
section_id=section_id,
|
|
565
|
+
)
|
|
566
|
+
generated_text = generate_qualitative_text(request_data)["content"]
|
|
567
|
+
return _normalize_logged_text(generated_text, "generated text")
|
|
568
|
+
|
|
569
|
+
|
|
570
|
+
def _render_logged_text(logged_text: Dict[str, Any]) -> str:
|
|
571
|
+
"""Render logged text as notebook-friendly HTML."""
|
|
572
|
+
from .vm_models.html_renderer import StatefulHTMLRenderer
|
|
573
|
+
|
|
574
|
+
return StatefulHTMLRenderer.render_accordion(
|
|
575
|
+
items=[logged_text["text"]],
|
|
576
|
+
titles=[f"Text Block: '{logged_text['content_id']}'"],
|
|
577
|
+
)
|
|
578
|
+
|
|
579
|
+
|
|
580
|
+
async def alog_text(
|
|
581
|
+
content_id: str,
|
|
582
|
+
text: Optional[str] = None,
|
|
583
|
+
prompt: Optional[str] = None,
|
|
584
|
+
context: Optional[Dict[str, Any]] = None,
|
|
585
|
+
_json: Optional[Dict[str, Any]] = None,
|
|
586
|
+
section_id: Optional[str] = None,
|
|
587
|
+
) -> Dict[str, Any]:
|
|
588
|
+
"""Async variant of ``log_text`` that logs or generates text."""
|
|
589
|
+
if not content_id or not isinstance(content_id, str):
|
|
590
|
+
raise ValueError("`content_id` must be a non-empty string")
|
|
591
|
+
|
|
592
|
+
if text is not None:
|
|
593
|
+
text = _validate_manual_log_text_args(text, prompt, context)
|
|
594
|
+
else:
|
|
595
|
+
text = _generate_log_text(
|
|
596
|
+
content_id,
|
|
597
|
+
prompt,
|
|
598
|
+
context,
|
|
599
|
+
section_id=section_id,
|
|
600
|
+
)
|
|
601
|
+
|
|
602
|
+
return await alog_metadata(content_id, text, _json, section_id=section_id)
|
|
603
|
+
|
|
604
|
+
|
|
605
|
+
def log_text(
|
|
606
|
+
content_id: str,
|
|
607
|
+
text: Optional[str] = None,
|
|
608
|
+
prompt: Optional[str] = None,
|
|
609
|
+
context: Optional[Dict[str, Any]] = None,
|
|
610
|
+
_json: Optional[Dict[str, Any]] = None,
|
|
611
|
+
section_id: Optional[str] = None,
|
|
612
|
+
) -> str:
|
|
613
|
+
"""Logs or generates free-form text to ValidMind API.
|
|
450
614
|
|
|
451
615
|
Args:
|
|
452
616
|
content_id (str): Unique content identifier for the text.
|
|
453
|
-
text (str): The text to log. Will be converted to HTML with
|
|
617
|
+
text (str, optional): The text to log. Will be converted to HTML with
|
|
618
|
+
MathML support when Markdown is provided. If omitted, text is
|
|
619
|
+
generated using the qualitative text generation backend.
|
|
620
|
+
prompt (str, optional): Custom prompt used for AI-assisted text
|
|
621
|
+
generation. Only supported when `text` is omitted.
|
|
622
|
+
context (dict, optional): Context object for AI-assisted text
|
|
623
|
+
generation. When omitted, the full document is used as context.
|
|
624
|
+
Currently only supports `{"content_ids": [<content_id>, ...]}`.
|
|
454
625
|
_json (dict, optional): Additional metadata to associate with the text. Defaults to None.
|
|
626
|
+
section_id (str, optional): Section ID to append the text block to when the
|
|
627
|
+
content ID does not already exist.
|
|
455
628
|
|
|
456
629
|
Raises:
|
|
457
|
-
ValueError: If
|
|
630
|
+
ValueError: If arguments are invalid or use incompatible combinations.
|
|
458
631
|
Exception: If the API call fails.
|
|
459
632
|
|
|
460
633
|
Returns:
|
|
461
634
|
str: HTML string containing the logged text in an accordion format.
|
|
462
635
|
"""
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
log_text = run_async(alog_metadata, content_id, text, _json)
|
|
472
|
-
|
|
473
|
-
from .vm_models.html_renderer import StatefulHTMLRenderer
|
|
474
|
-
|
|
475
|
-
return StatefulHTMLRenderer.render_accordion(
|
|
476
|
-
items=[log_text["text"]],
|
|
477
|
-
titles=[f"Text Block: '{log_text['content_id']}'"],
|
|
636
|
+
logged_text = run_async(
|
|
637
|
+
alog_text,
|
|
638
|
+
content_id=content_id,
|
|
639
|
+
text=text,
|
|
640
|
+
prompt=prompt,
|
|
641
|
+
context=context,
|
|
642
|
+
_json=_json,
|
|
643
|
+
section_id=section_id,
|
|
478
644
|
)
|
|
645
|
+
return _render_logged_text(logged_text)
|
|
479
646
|
|
|
480
647
|
|
|
481
648
|
async def alog_metric(
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
Client interface for all data and model validation functions
|
|
7
7
|
"""
|
|
8
8
|
|
|
9
|
+
import time
|
|
9
10
|
from typing import Any, Callable, Dict, List, Optional, Union
|
|
10
11
|
|
|
11
12
|
import numpy as np
|
|
@@ -17,6 +18,7 @@ try:
|
|
|
17
18
|
except Exception:
|
|
18
19
|
torch = None # type: ignore # noqa: F401
|
|
19
20
|
|
|
21
|
+
from . import api_client
|
|
20
22
|
from .api_client import log_input as log_input
|
|
21
23
|
from .client_config import client_config
|
|
22
24
|
from .errors import (
|
|
@@ -31,18 +33,23 @@ from .input_registry import input_registry
|
|
|
31
33
|
from .logging import get_logger
|
|
32
34
|
from .models.metadata import MetadataModel
|
|
33
35
|
from .models.r_model import RModel
|
|
34
|
-
from .template import get_template_test_suite
|
|
36
|
+
from .template import get_template_content_ids, get_template_test_suite
|
|
35
37
|
from .template import preview_template as _preview_template
|
|
36
38
|
from .test_suites import get_by_id as get_test_suite_by_id
|
|
39
|
+
from .tests.run import _get_run_metadata
|
|
40
|
+
from .utils import display as vm_display
|
|
37
41
|
from .utils import get_dataset_info, get_model_info
|
|
38
42
|
from .vm_models import TestSuite, TestSuiteRunner
|
|
39
43
|
from .vm_models.dataset import DataFrameDataset, PolarsDataset, TorchDataset, VMDataset
|
|
44
|
+
from .vm_models.html_progress import HTMLLabel, HTMLProgressBar
|
|
40
45
|
from .vm_models.model import (
|
|
41
46
|
ModelAttributes,
|
|
42
47
|
VMModel,
|
|
43
48
|
get_model_class,
|
|
44
49
|
is_model_metadata,
|
|
45
50
|
)
|
|
51
|
+
from .vm_models.result import TextGenerationResult
|
|
52
|
+
from .vm_models.text_generation_summary import DocumentationTextSummary
|
|
46
53
|
|
|
47
54
|
pd.option_context("format.precision", 2)
|
|
48
55
|
|
|
@@ -433,6 +440,145 @@ def preview_template() -> None:
|
|
|
433
440
|
_preview_template(client_config.documentation_template)
|
|
434
441
|
|
|
435
442
|
|
|
443
|
+
def get_content_ids(section_ids: Optional[Union[str, List[str]]] = None) -> List[str]:
|
|
444
|
+
"""Get content IDs for one or more documentation template sections.
|
|
445
|
+
|
|
446
|
+
Args:
|
|
447
|
+
section_ids: Section ID or list of section IDs. If omitted, all content
|
|
448
|
+
IDs in the current documentation template are returned.
|
|
449
|
+
|
|
450
|
+
Returns:
|
|
451
|
+
A list of content IDs in template order.
|
|
452
|
+
"""
|
|
453
|
+
if client_config.documentation_template is None:
|
|
454
|
+
raise MissingDocumentationTemplate(
|
|
455
|
+
"No documentation template found. Please run `vm.init()`"
|
|
456
|
+
)
|
|
457
|
+
|
|
458
|
+
return get_template_content_ids(client_config.documentation_template, section_ids)
|
|
459
|
+
|
|
460
|
+
|
|
461
|
+
def run_text_generation(
|
|
462
|
+
content_id: str,
|
|
463
|
+
prompt: Optional[str] = None,
|
|
464
|
+
section_id: Optional[str] = None,
|
|
465
|
+
context: Optional[Dict[str, Any]] = None,
|
|
466
|
+
show: bool = True,
|
|
467
|
+
) -> TextGenerationResult:
|
|
468
|
+
"""Generate qualitative text and return a loggable result object.
|
|
469
|
+
|
|
470
|
+
Args:
|
|
471
|
+
content_id: Content ID to generate text for.
|
|
472
|
+
prompt: Custom prompt for text generation.
|
|
473
|
+
section_id: Optional section ID used to guide generation for new content
|
|
474
|
+
and later placement during logging.
|
|
475
|
+
context: Optional context object for text generation.
|
|
476
|
+
show: Whether to display the generated result.
|
|
477
|
+
|
|
478
|
+
Returns:
|
|
479
|
+
A TextGenerationResult containing the generated text.
|
|
480
|
+
"""
|
|
481
|
+
start_time = time.perf_counter()
|
|
482
|
+
description = api_client._generate_log_text(
|
|
483
|
+
content_id, prompt, context, section_id=section_id
|
|
484
|
+
)
|
|
485
|
+
metadata = _get_run_metadata(duration_seconds=time.perf_counter() - start_time)
|
|
486
|
+
result = TextGenerationResult(
|
|
487
|
+
result_id=content_id,
|
|
488
|
+
result_type="qualitative_text_generation",
|
|
489
|
+
content_id=content_id,
|
|
490
|
+
title=f"Text Generation: {content_id}",
|
|
491
|
+
description=description,
|
|
492
|
+
metadata=metadata,
|
|
493
|
+
prompt=prompt,
|
|
494
|
+
section_id=section_id,
|
|
495
|
+
context=context,
|
|
496
|
+
_was_description_generated=True,
|
|
497
|
+
)
|
|
498
|
+
|
|
499
|
+
if show:
|
|
500
|
+
result.show()
|
|
501
|
+
|
|
502
|
+
return result
|
|
503
|
+
|
|
504
|
+
|
|
505
|
+
def generate_documentation_text(
|
|
506
|
+
config: Dict[str, Dict[str, Any]],
|
|
507
|
+
) -> Dict[str, TextGenerationResult]:
|
|
508
|
+
"""Generate and log document text blocks from a configuration dictionary.
|
|
509
|
+
|
|
510
|
+
The config is keyed by target content ID. Each value may contain:
|
|
511
|
+
- `section_id` (optional): Section to append the content block to when it
|
|
512
|
+
does not already exist in the template.
|
|
513
|
+
- `prompt` (optional): Prompt override for generation.
|
|
514
|
+
- `context` (optional): Context object passed to `run_text_generation()`,
|
|
515
|
+
e.g. `{"content_ids": [...]}`.
|
|
516
|
+
|
|
517
|
+
Args:
|
|
518
|
+
config: Mapping of content IDs to generation settings.
|
|
519
|
+
|
|
520
|
+
Returns:
|
|
521
|
+
A dictionary mapping content IDs to generated and logged results.
|
|
522
|
+
"""
|
|
523
|
+
results = {}
|
|
524
|
+
num_tasks = len(config) * 2
|
|
525
|
+
html_pbar = None
|
|
526
|
+
html_pbar_description = None
|
|
527
|
+
template = client_config.documentation_template or {}
|
|
528
|
+
|
|
529
|
+
if num_tasks:
|
|
530
|
+
html_pbar_description = HTMLLabel(value="Generating documentation text...")
|
|
531
|
+
html_pbar = HTMLProgressBar(
|
|
532
|
+
max_value=num_tasks,
|
|
533
|
+
description="Generating documentation text...",
|
|
534
|
+
)
|
|
535
|
+
html_pbar.display()
|
|
536
|
+
|
|
537
|
+
def _update_progress_message(message: str) -> None:
|
|
538
|
+
if html_pbar:
|
|
539
|
+
html_pbar.update(html_pbar.value, message)
|
|
540
|
+
if html_pbar_description:
|
|
541
|
+
html_pbar_description.update(message)
|
|
542
|
+
|
|
543
|
+
def _increment_progress() -> None:
|
|
544
|
+
if html_pbar:
|
|
545
|
+
html_pbar.update(html_pbar.value + 1)
|
|
546
|
+
|
|
547
|
+
try:
|
|
548
|
+
for content_id, spec in config.items():
|
|
549
|
+
progress_message = f"Sending result to ValidMind: {content_id}..."
|
|
550
|
+
_update_progress_message(progress_message)
|
|
551
|
+
result = run_text_generation(
|
|
552
|
+
content_id=content_id,
|
|
553
|
+
prompt=spec.get("prompt"),
|
|
554
|
+
section_id=spec.get("section_id"),
|
|
555
|
+
context=spec.get("context"),
|
|
556
|
+
show=False,
|
|
557
|
+
)
|
|
558
|
+
_increment_progress()
|
|
559
|
+
|
|
560
|
+
result.log()
|
|
561
|
+
_increment_progress()
|
|
562
|
+
results[content_id] = result
|
|
563
|
+
finally:
|
|
564
|
+
if html_pbar:
|
|
565
|
+
html_pbar.update(num_tasks, "Documentation text generation complete!")
|
|
566
|
+
html_pbar.close()
|
|
567
|
+
if html_pbar_description:
|
|
568
|
+
html_pbar_description.update("Documentation text generation complete!")
|
|
569
|
+
|
|
570
|
+
if results:
|
|
571
|
+
summary = DocumentationTextSummary(
|
|
572
|
+
title=template.get("template_name", "Documentation Text"),
|
|
573
|
+
description=template.get("description", ""),
|
|
574
|
+
results=results,
|
|
575
|
+
template_sections=template.get("sections"),
|
|
576
|
+
)
|
|
577
|
+
vm_display(summary)
|
|
578
|
+
|
|
579
|
+
return results
|
|
580
|
+
|
|
581
|
+
|
|
436
582
|
def run_documentation_tests(
|
|
437
583
|
section: Optional[str] = None,
|
|
438
584
|
send: bool = True,
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
{
|
|
2
|
+
"model_overview": {
|
|
3
|
+
"section_id": "model_overview",
|
|
4
|
+
"context": {
|
|
5
|
+
"content_ids": [
|
|
6
|
+
"validmind.data_validation.DatasetDescription",
|
|
7
|
+
"validmind.model_validation.sklearn.ClassifierPerformance:in_sample",
|
|
8
|
+
"validmind.model_validation.sklearn.ClassifierPerformance:out_of_sample"
|
|
9
|
+
]
|
|
10
|
+
}
|
|
11
|
+
},
|
|
12
|
+
"intended_use": {
|
|
13
|
+
"section_id": "intended_use"
|
|
14
|
+
},
|
|
15
|
+
"regulatory_requirements": {
|
|
16
|
+
"section_id": "regulatory_requirements",
|
|
17
|
+
"prompt": "Write a comprehensive paragraphs describing the regulatory requirements for this model, assuming SR 11-7 is the primary regulatory framework."
|
|
18
|
+
},
|
|
19
|
+
"model_limitations": {
|
|
20
|
+
"section_id": "model_limitations",
|
|
21
|
+
"context": {
|
|
22
|
+
"content_ids": [
|
|
23
|
+
"validmind.model_validation.sklearn.TrainingTestDegradation",
|
|
24
|
+
"validmind.model_validation.sklearn.MinimumAccuracy",
|
|
25
|
+
"validmind.model_validation.sklearn.MinimumF1Score",
|
|
26
|
+
"validmind.model_validation.sklearn.MinimumROCAUCScore"
|
|
27
|
+
]
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
"model_selection": {
|
|
31
|
+
"section_id": "model_selection",
|
|
32
|
+
"context": {
|
|
33
|
+
"content_ids": [
|
|
34
|
+
"validmind.model_validation.ModelMetadata",
|
|
35
|
+
"validmind.model_validation.sklearn.ClassifierPerformance:in_sample",
|
|
36
|
+
"validmind.model_validation.sklearn.ClassifierPerformance:out_of_sample"
|
|
37
|
+
]
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
"dataset_summary_text": {
|
|
41
|
+
"context": {
|
|
42
|
+
"content_ids": [
|
|
43
|
+
"validmind.data_validation.DatasetDescription"
|
|
44
|
+
]
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
"data_quality_tests_text": {
|
|
48
|
+
"context": {
|
|
49
|
+
"content_ids": [
|
|
50
|
+
"validmind.data_validation.ClassImbalance",
|
|
51
|
+
"validmind.data_validation.Duplicates",
|
|
52
|
+
"validmind.data_validation.HighCardinality",
|
|
53
|
+
"validmind.data_validation.MissingValues",
|
|
54
|
+
"validmind.data_validation.Skewness",
|
|
55
|
+
"validmind.data_validation.UniqueRows",
|
|
56
|
+
"validmind.data_validation.TooManyZeroValues",
|
|
57
|
+
"validmind.data_validation.IQROutliersTable",
|
|
58
|
+
"validmind.data_validation.IQROutliersBarPlot"
|
|
59
|
+
]
|
|
60
|
+
}
|
|
61
|
+
},
|
|
62
|
+
"feature_selection": {
|
|
63
|
+
"context": {
|
|
64
|
+
"content_ids": [
|
|
65
|
+
"validmind.data_validation.PearsonCorrelationMatrix",
|
|
66
|
+
"validmind.data_validation.HighPearsonCorrelation"
|
|
67
|
+
]
|
|
68
|
+
}
|
|
69
|
+
},
|
|
70
|
+
"model_validation_tests_text": {
|
|
71
|
+
"context": {
|
|
72
|
+
"content_ids": [
|
|
73
|
+
"validmind.model_validation.sklearn.ConfusionMatrix",
|
|
74
|
+
"validmind.model_validation.sklearn.ClassifierPerformance:in_sample",
|
|
75
|
+
"validmind.model_validation.sklearn.ClassifierPerformance:out_of_sample",
|
|
76
|
+
"validmind.model_validation.sklearn.PrecisionRecallCurve",
|
|
77
|
+
"validmind.model_validation.sklearn.ROCCurve",
|
|
78
|
+
"validmind.model_validation.sklearn.MinimumAccuracy",
|
|
79
|
+
"validmind.model_validation.sklearn.MinimumF1Score",
|
|
80
|
+
"validmind.model_validation.sklearn.MinimumROCAUCScore"
|
|
81
|
+
]
|
|
82
|
+
}
|
|
83
|
+
},
|
|
84
|
+
"validmind.model_validation.sklearn.SHAPGlobalImportance_global_importance_text": {
|
|
85
|
+
"context": {
|
|
86
|
+
"content_ids": [
|
|
87
|
+
"validmind.model_validation.sklearn.SHAPGlobalImportance"
|
|
88
|
+
]
|
|
89
|
+
}
|
|
90
|
+
},
|
|
91
|
+
"model_weak_spots_description": {
|
|
92
|
+
"context": {
|
|
93
|
+
"content_ids": [
|
|
94
|
+
"validmind.model_validation.sklearn.WeakspotsDiagnosis"
|
|
95
|
+
]
|
|
96
|
+
}
|
|
97
|
+
},
|
|
98
|
+
"model_overfit_regions_description": {
|
|
99
|
+
"context": {
|
|
100
|
+
"content_ids": [
|
|
101
|
+
"validmind.model_validation.sklearn.OverfitDiagnosis"
|
|
102
|
+
]
|
|
103
|
+
}
|
|
104
|
+
},
|
|
105
|
+
"model_robustness_description": {
|
|
106
|
+
"context": {
|
|
107
|
+
"content_ids": [
|
|
108
|
+
"validmind.model_validation.sklearn.RobustnessDiagnosis"
|
|
109
|
+
]
|
|
110
|
+
}
|
|
111
|
+
},
|
|
112
|
+
"monitoring_plan": {
|
|
113
|
+
"prompt": "Write two comprehensive paragraphs for the monitoring plan section."
|
|
114
|
+
},
|
|
115
|
+
"monitoring_implementation": {
|
|
116
|
+
"prompt": "Write two comprehensive paragraphs for the monitoring implementation section."
|
|
117
|
+
},
|
|
118
|
+
"governance_plan": {
|
|
119
|
+
"prompt": "Write two comprehensive paragraphs for the governance plan section."
|
|
120
|
+
}
|
|
121
|
+
}
|
|
@@ -2,7 +2,9 @@
|
|
|
2
2
|
# Refer to the LICENSE file in the root of this repository for details.
|
|
3
3
|
# SPDX-License-Identifier: AGPL-3.0 AND ValidMind Commercial
|
|
4
4
|
|
|
5
|
+
import json
|
|
5
6
|
import os
|
|
7
|
+
from typing import Any, Dict
|
|
6
8
|
|
|
7
9
|
import pandas as pd
|
|
8
10
|
from sklearn.model_selection import train_test_split
|
|
@@ -17,6 +19,7 @@ from . import (
|
|
|
17
19
|
|
|
18
20
|
current_path = os.path.dirname(os.path.abspath(__file__))
|
|
19
21
|
dataset_path = os.path.join(current_path, "datasets")
|
|
22
|
+
config_path = os.path.join(current_path, "config.json")
|
|
20
23
|
|
|
21
24
|
drop_columns = ["RowNumber", "CustomerId", "Surname"]
|
|
22
25
|
boolean_columns = ["Gender"]
|
|
@@ -60,6 +63,35 @@ def preprocess(df):
|
|
|
60
63
|
return train_df, validation_df, test_df
|
|
61
64
|
|
|
62
65
|
|
|
66
|
+
def get_demo_text_config() -> Dict[str, Dict[str, Any]]:
|
|
67
|
+
"""Return text generation config for the customer churn demo.
|
|
68
|
+
|
|
69
|
+
The config is keyed by target `content_id`. Each entry describes how
|
|
70
|
+
`vm.run_text_generation()` should populate that block.
|
|
71
|
+
|
|
72
|
+
Supported fields per content ID:
|
|
73
|
+
- `section_id` (optional): Only needed when the content block does not
|
|
74
|
+
already exist in the template and should be appended to a section.
|
|
75
|
+
- `prompt` (optional): Per-block prompt override for generation.
|
|
76
|
+
- `context` (optional): Context object passed through to
|
|
77
|
+
`vm.run_text_generation()`. When present, it follows the same shape
|
|
78
|
+
expected by the library, e.g. `{"content_ids": [...]}`.
|
|
79
|
+
|
|
80
|
+
Returns:
|
|
81
|
+
Dict[str, Dict[str, Any]]: A previewable text-generation configuration
|
|
82
|
+
dictionary for the customer churn documentation demo.
|
|
83
|
+
"""
|
|
84
|
+
with open(config_path, encoding="utf-8") as config_file:
|
|
85
|
+
config = json.load(config_file)
|
|
86
|
+
|
|
87
|
+
for _, spec in config.items():
|
|
88
|
+
context = spec.get("context")
|
|
89
|
+
if context is not None:
|
|
90
|
+
context.setdefault("content_ids", [])
|
|
91
|
+
|
|
92
|
+
return config
|
|
93
|
+
|
|
94
|
+
|
|
63
95
|
def get_demo_test_config(test_suite=None):
|
|
64
96
|
"""
|
|
65
97
|
Returns input configuration for the default documentation
|