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.
Files changed (378) hide show
  1. {validmind-2.12.4 → validmind-2.13.0}/PKG-INFO +1 -1
  2. {validmind-2.12.4 → validmind-2.13.0}/pyproject.toml +1 -1
  3. {validmind-2.12.4 → validmind-2.13.0}/validmind/__init__.py +6 -0
  4. validmind-2.13.0/validmind/__version__.py +1 -0
  5. {validmind-2.12.4 → validmind-2.13.0}/validmind/api_client.py +186 -19
  6. {validmind-2.12.4 → validmind-2.13.0}/validmind/client.py +147 -1
  7. validmind-2.13.0/validmind/datasets/classification/config.json +121 -0
  8. {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/classification/customer_churn.py +32 -0
  9. {validmind-2.12.4 → validmind-2.13.0}/validmind/experimental/agents.py +11 -1
  10. {validmind-2.12.4 → validmind-2.13.0}/validmind/models/r_model.py +1 -2
  11. {validmind-2.12.4 → validmind-2.13.0}/validmind/template.py +48 -1
  12. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/run.py +1 -1
  13. {validmind-2.12.4 → validmind-2.13.0}/validmind/utils.py +9 -4
  14. {validmind-2.12.4 → validmind-2.13.0}/validmind/vm_models/html_renderer.py +23 -14
  15. {validmind-2.12.4 → validmind-2.13.0}/validmind/vm_models/result/result.py +76 -8
  16. validmind-2.13.0/validmind/vm_models/text_generation_summary.py +146 -0
  17. validmind-2.12.4/validmind/__version__.py +0 -1
  18. {validmind-2.12.4 → validmind-2.13.0}/LICENSE +0 -0
  19. {validmind-2.12.4 → validmind-2.13.0}/README.pypi.md +0 -0
  20. {validmind-2.12.4 → validmind-2.13.0}/validmind/ai/test_descriptions.py +0 -0
  21. {validmind-2.12.4 → validmind-2.13.0}/validmind/ai/utils.py +0 -0
  22. {validmind-2.12.4 → validmind-2.13.0}/validmind/client_config.py +0 -0
  23. {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/__init__.py +0 -0
  24. {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/classification/__init__.py +0 -0
  25. {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/classification/datasets/bank_customer_churn.csv +0 -0
  26. {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/classification/datasets/taiwan_credit.csv +0 -0
  27. {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/classification/taiwan_credit.py +0 -0
  28. {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/cluster/digits.py +0 -0
  29. {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/credit_risk/__init__.py +0 -0
  30. {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/credit_risk/datasets/lending_club_biased.csv.gz +0 -0
  31. {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/credit_risk/datasets/lending_club_loan_data_2007_2014_clean.csv.gz +0 -0
  32. {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/credit_risk/lending_club.py +0 -0
  33. {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/credit_risk/lending_club_bias.py +0 -0
  34. {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/llm/__init__.py +0 -0
  35. {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/llm/agent_dataset.py +0 -0
  36. {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/llm/rag/__init__.py +0 -0
  37. {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/llm/rag/datasets/rfp_existing_questions_client_1.csv +0 -0
  38. {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/llm/rag/datasets/rfp_existing_questions_client_2.csv +0 -0
  39. {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/llm/rag/datasets/rfp_existing_questions_client_3.csv +0 -0
  40. {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/llm/rag/datasets/rfp_existing_questions_client_4.csv +0 -0
  41. {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/llm/rag/datasets/rfp_existing_questions_client_5.csv +0 -0
  42. {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/llm/rag/rfp.py +0 -0
  43. {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/nlp/__init__.py +0 -0
  44. {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/nlp/cnn_dailymail.py +0 -0
  45. {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/nlp/datasets/Covid_19.csv +0 -0
  46. {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/nlp/datasets/cnn_dailymail_100_with_predictions.csv +0 -0
  47. {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/nlp/datasets/cnn_dailymail_500_with_predictions.csv +0 -0
  48. {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/nlp/datasets/sentiments_with_predictions.csv +0 -0
  49. {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/nlp/twitter_covid_19.py +0 -0
  50. {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/regression/__init__.py +0 -0
  51. {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/regression/california_housing.py +0 -0
  52. {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/regression/datasets/california_housing.csv +0 -0
  53. {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/regression/datasets/fred/CPIAUCSL.csv +0 -0
  54. {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/regression/datasets/fred/CSUSHPISA.csv +0 -0
  55. {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/regression/datasets/fred/DRSFRMACBS.csv +0 -0
  56. {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/regression/datasets/fred/FEDFUNDS.csv +0 -0
  57. {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/regression/datasets/fred/GDP.csv +0 -0
  58. {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/regression/datasets/fred/GDPC1.csv +0 -0
  59. {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/regression/datasets/fred/GS10.csv +0 -0
  60. {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/regression/datasets/fred/GS3.csv +0 -0
  61. {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/regression/datasets/fred/GS5.csv +0 -0
  62. {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/regression/datasets/fred/MORTGAGE30US.csv +0 -0
  63. {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/regression/datasets/fred/UNRATE.csv +0 -0
  64. {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/regression/datasets/fred_loan_rates.csv +0 -0
  65. {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/regression/datasets/fred_loan_rates_test_1.csv +0 -0
  66. {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/regression/datasets/fred_loan_rates_test_2.csv +0 -0
  67. {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/regression/datasets/fred_loan_rates_test_3.csv +0 -0
  68. {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/regression/datasets/fred_loan_rates_test_4.csv +0 -0
  69. {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/regression/datasets/fred_loan_rates_test_5.csv +0 -0
  70. {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/regression/datasets/leanding_club_loan_rates.csv +0 -0
  71. {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/regression/fred.py +0 -0
  72. {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/regression/fred_timeseries.py +0 -0
  73. {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/regression/generate_california_housing_csv.py +0 -0
  74. {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/regression/lending_club.py +0 -0
  75. {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/regression/models/fred_loan_rates_model_1.pkl +0 -0
  76. {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/regression/models/fred_loan_rates_model_2.pkl +0 -0
  77. {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/regression/models/fred_loan_rates_model_3.pkl +0 -0
  78. {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/regression/models/fred_loan_rates_model_4.pkl +0 -0
  79. {validmind-2.12.4 → validmind-2.13.0}/validmind/datasets/regression/models/fred_loan_rates_model_5.pkl +0 -0
  80. {validmind-2.12.4 → validmind-2.13.0}/validmind/errors.py +0 -0
  81. {validmind-2.12.4 → validmind-2.13.0}/validmind/experimental/__init__.py +0 -0
  82. {validmind-2.12.4 → validmind-2.13.0}/validmind/html_templates/__init__.py +0 -0
  83. {validmind-2.12.4 → validmind-2.13.0}/validmind/html_templates/content_blocks.py +0 -0
  84. {validmind-2.12.4 → validmind-2.13.0}/validmind/input_registry.py +0 -0
  85. {validmind-2.12.4 → validmind-2.13.0}/validmind/logging.py +0 -0
  86. {validmind-2.12.4 → validmind-2.13.0}/validmind/models/__init__.py +0 -0
  87. {validmind-2.12.4 → validmind-2.13.0}/validmind/models/foundation.py +0 -0
  88. {validmind-2.12.4 → validmind-2.13.0}/validmind/models/function.py +0 -0
  89. {validmind-2.12.4 → validmind-2.13.0}/validmind/models/huggingface.py +0 -0
  90. {validmind-2.12.4 → validmind-2.13.0}/validmind/models/metadata.py +0 -0
  91. {validmind-2.12.4 → validmind-2.13.0}/validmind/models/pipeline.py +0 -0
  92. {validmind-2.12.4 → validmind-2.13.0}/validmind/models/pytorch.py +0 -0
  93. {validmind-2.12.4 → validmind-2.13.0}/validmind/models/sklearn.py +0 -0
  94. {validmind-2.12.4 → validmind-2.13.0}/validmind/scorers/__init__.py +0 -0
  95. {validmind-2.12.4 → validmind-2.13.0}/validmind/scorers/classification/AbsoluteError.py +0 -0
  96. {validmind-2.12.4 → validmind-2.13.0}/validmind/scorers/classification/BrierScore.py +0 -0
  97. {validmind-2.12.4 → validmind-2.13.0}/validmind/scorers/classification/CalibrationError.py +0 -0
  98. {validmind-2.12.4 → validmind-2.13.0}/validmind/scorers/classification/ClassBalance.py +0 -0
  99. {validmind-2.12.4 → validmind-2.13.0}/validmind/scorers/classification/Confidence.py +0 -0
  100. {validmind-2.12.4 → validmind-2.13.0}/validmind/scorers/classification/Correctness.py +0 -0
  101. {validmind-2.12.4 → validmind-2.13.0}/validmind/scorers/classification/LogLoss.py +0 -0
  102. {validmind-2.12.4 → validmind-2.13.0}/validmind/scorers/classification/OutlierScore.py +0 -0
  103. {validmind-2.12.4 → validmind-2.13.0}/validmind/scorers/classification/ProbabilityError.py +0 -0
  104. {validmind-2.12.4 → validmind-2.13.0}/validmind/scorers/classification/Uncertainty.py +0 -0
  105. {validmind-2.12.4 → validmind-2.13.0}/validmind/scorers/classification/__init__.py +0 -0
  106. {validmind-2.12.4 → validmind-2.13.0}/validmind/scorers/llm/deepeval/AnswerRelevancy.py +0 -0
  107. {validmind-2.12.4 → validmind-2.13.0}/validmind/scorers/llm/deepeval/ArgumentCorrectness.py +0 -0
  108. {validmind-2.12.4 → validmind-2.13.0}/validmind/scorers/llm/deepeval/Bias.py +0 -0
  109. {validmind-2.12.4 → validmind-2.13.0}/validmind/scorers/llm/deepeval/ContextualPrecision.py +0 -0
  110. {validmind-2.12.4 → validmind-2.13.0}/validmind/scorers/llm/deepeval/ContextualRecall.py +0 -0
  111. {validmind-2.12.4 → validmind-2.13.0}/validmind/scorers/llm/deepeval/ContextualRelevancy.py +0 -0
  112. {validmind-2.12.4 → validmind-2.13.0}/validmind/scorers/llm/deepeval/Faithfulness.py +0 -0
  113. {validmind-2.12.4 → validmind-2.13.0}/validmind/scorers/llm/deepeval/GEval.py +0 -0
  114. {validmind-2.12.4 → validmind-2.13.0}/validmind/scorers/llm/deepeval/Hallucination.py +0 -0
  115. {validmind-2.12.4 → validmind-2.13.0}/validmind/scorers/llm/deepeval/PlanAdherence.py +0 -0
  116. {validmind-2.12.4 → validmind-2.13.0}/validmind/scorers/llm/deepeval/PlanQuality.py +0 -0
  117. {validmind-2.12.4 → validmind-2.13.0}/validmind/scorers/llm/deepeval/Summarization.py +0 -0
  118. {validmind-2.12.4 → validmind-2.13.0}/validmind/scorers/llm/deepeval/TaskCompletion.py +0 -0
  119. {validmind-2.12.4 → validmind-2.13.0}/validmind/scorers/llm/deepeval/ToolCorrectness.py +0 -0
  120. {validmind-2.12.4 → validmind-2.13.0}/validmind/scorers/llm/deepeval/__init__.py +0 -0
  121. {validmind-2.12.4 → validmind-2.13.0}/validmind/test_suites/__init__.py +0 -0
  122. {validmind-2.12.4 → validmind-2.13.0}/validmind/test_suites/classifier.py +0 -0
  123. {validmind-2.12.4 → validmind-2.13.0}/validmind/test_suites/cluster.py +0 -0
  124. {validmind-2.12.4 → validmind-2.13.0}/validmind/test_suites/embeddings.py +0 -0
  125. {validmind-2.12.4 → validmind-2.13.0}/validmind/test_suites/llm.py +0 -0
  126. {validmind-2.12.4 → validmind-2.13.0}/validmind/test_suites/nlp.py +0 -0
  127. {validmind-2.12.4 → validmind-2.13.0}/validmind/test_suites/parameters_optimization.py +0 -0
  128. {validmind-2.12.4 → validmind-2.13.0}/validmind/test_suites/regression.py +0 -0
  129. {validmind-2.12.4 → validmind-2.13.0}/validmind/test_suites/statsmodels_timeseries.py +0 -0
  130. {validmind-2.12.4 → validmind-2.13.0}/validmind/test_suites/summarization.py +0 -0
  131. {validmind-2.12.4 → validmind-2.13.0}/validmind/test_suites/tabular_datasets.py +0 -0
  132. {validmind-2.12.4 → validmind-2.13.0}/validmind/test_suites/text_data.py +0 -0
  133. {validmind-2.12.4 → validmind-2.13.0}/validmind/test_suites/time_series.py +0 -0
  134. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/__init__.py +0 -0
  135. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/__types__.py +0 -0
  136. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/_store.py +0 -0
  137. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/comparison.py +0 -0
  138. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/ACFandPACFPlot.py +0 -0
  139. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/ADF.py +0 -0
  140. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/AutoAR.py +0 -0
  141. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/AutoMA.py +0 -0
  142. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/AutoStationarity.py +0 -0
  143. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/BivariateScatterPlots.py +0 -0
  144. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/BoxPierce.py +0 -0
  145. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/ChiSquaredFeaturesTable.py +0 -0
  146. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/ClassImbalance.py +0 -0
  147. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/DatasetDescription.py +0 -0
  148. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/DatasetSplit.py +0 -0
  149. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/DescriptiveStatistics.py +0 -0
  150. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/DickeyFullerGLS.py +0 -0
  151. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/Duplicates.py +0 -0
  152. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/EngleGrangerCoint.py +0 -0
  153. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/FeatureTargetCorrelationPlot.py +0 -0
  154. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/HighCardinality.py +0 -0
  155. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/HighPearsonCorrelation.py +0 -0
  156. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/IQROutliersBarPlot.py +0 -0
  157. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/IQROutliersTable.py +0 -0
  158. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/IsolationForestOutliers.py +0 -0
  159. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/JarqueBera.py +0 -0
  160. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/KPSS.py +0 -0
  161. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/LJungBox.py +0 -0
  162. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/LaggedCorrelationHeatmap.py +0 -0
  163. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/MissingValues.py +0 -0
  164. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/MissingValuesBarPlot.py +0 -0
  165. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/MutualInformation.py +0 -0
  166. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/PearsonCorrelationMatrix.py +0 -0
  167. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/PhillipsPerronArch.py +0 -0
  168. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/ProtectedClassesCombination.py +0 -0
  169. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/ProtectedClassesDescription.py +0 -0
  170. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/ProtectedClassesDisparity.py +0 -0
  171. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/ProtectedClassesThresholdOptimizer.py +0 -0
  172. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/RollingStatsPlot.py +0 -0
  173. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/RunsTest.py +0 -0
  174. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/ScatterPlot.py +0 -0
  175. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/ScoreBandDefaultRates.py +0 -0
  176. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/SeasonalDecompose.py +0 -0
  177. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/ShapiroWilk.py +0 -0
  178. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/Skewness.py +0 -0
  179. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/SpreadPlot.py +0 -0
  180. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/TabularCategoricalBarPlots.py +0 -0
  181. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/TabularDateTimeHistograms.py +0 -0
  182. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/TabularDescriptionTables.py +0 -0
  183. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/TabularNumericalHistograms.py +0 -0
  184. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/TargetRateBarPlots.py +0 -0
  185. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/TimeSeriesDescription.py +0 -0
  186. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/TimeSeriesDescriptiveStatistics.py +0 -0
  187. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/TimeSeriesFrequency.py +0 -0
  188. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/TimeSeriesHistogram.py +0 -0
  189. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/TimeSeriesLinePlot.py +0 -0
  190. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/TimeSeriesMissingValues.py +0 -0
  191. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/TimeSeriesOutliers.py +0 -0
  192. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/TooManyZeroValues.py +0 -0
  193. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/UniqueRows.py +0 -0
  194. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/WOEBinPlots.py +0 -0
  195. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/WOEBinTable.py +0 -0
  196. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/ZivotAndrewsArch.py +0 -0
  197. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/__init__.py +0 -0
  198. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/nlp/CommonWords.py +0 -0
  199. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/nlp/Hashtags.py +0 -0
  200. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/nlp/LanguageDetection.py +0 -0
  201. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/nlp/Mentions.py +0 -0
  202. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/nlp/PolarityAndSubjectivity.py +0 -0
  203. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/nlp/Punctuations.py +0 -0
  204. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/nlp/Sentiment.py +0 -0
  205. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/nlp/StopWords.py +0 -0
  206. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/nlp/TextDescription.py +0 -0
  207. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/nlp/Toxicity.py +0 -0
  208. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/data_validation/nlp/__init__.py +0 -0
  209. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/decorator.py +0 -0
  210. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/load.py +0 -0
  211. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/BertScore.py +0 -0
  212. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/BleuScore.py +0 -0
  213. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/ClusterSizeDistribution.py +0 -0
  214. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/ContextualRecall.py +0 -0
  215. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/FeaturesAUC.py +0 -0
  216. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/MeteorScore.py +0 -0
  217. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/ModelMetadata.py +0 -0
  218. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/ModelPredictionResiduals.py +0 -0
  219. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/RegardScore.py +0 -0
  220. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/RegressionResidualsPlot.py +0 -0
  221. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/RougeScore.py +0 -0
  222. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/TimeSeriesPredictionWithCI.py +0 -0
  223. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/TimeSeriesPredictionsPlot.py +0 -0
  224. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/TimeSeriesR2SquareBySegments.py +0 -0
  225. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/TokenDisparity.py +0 -0
  226. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/ToxicityScore.py +0 -0
  227. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/__init__.py +0 -0
  228. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/embeddings/ClusterDistribution.py +0 -0
  229. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/embeddings/CosineSimilarityComparison.py +0 -0
  230. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/embeddings/CosineSimilarityDistribution.py +0 -0
  231. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/embeddings/CosineSimilarityHeatmap.py +0 -0
  232. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/embeddings/DescriptiveAnalytics.py +0 -0
  233. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/embeddings/EmbeddingsVisualization2D.py +0 -0
  234. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/embeddings/EuclideanDistanceComparison.py +0 -0
  235. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/embeddings/EuclideanDistanceHeatmap.py +0 -0
  236. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/embeddings/PCAComponentsPairwisePlots.py +0 -0
  237. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/embeddings/StabilityAnalysisKeyword.py +0 -0
  238. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/embeddings/StabilityAnalysisRandomNoise.py +0 -0
  239. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/embeddings/StabilityAnalysisSynonyms.py +0 -0
  240. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/embeddings/StabilityAnalysisTranslation.py +0 -0
  241. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/embeddings/TSNEComponentsPairwisePlots.py +0 -0
  242. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/embeddings/utils.py +0 -0
  243. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/ragas/AnswerCorrectness.py +0 -0
  244. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/ragas/AspectCritic.py +0 -0
  245. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/ragas/ContextEntityRecall.py +0 -0
  246. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/ragas/ContextPrecision.py +0 -0
  247. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/ragas/ContextPrecisionWithoutReference.py +0 -0
  248. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/ragas/ContextRecall.py +0 -0
  249. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/ragas/Faithfulness.py +0 -0
  250. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/ragas/NoiseSensitivity.py +0 -0
  251. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/ragas/ResponseRelevancy.py +0 -0
  252. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/ragas/SemanticSimilarity.py +0 -0
  253. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/ragas/utils.py +0 -0
  254. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/sklearn/AdjustedMutualInformation.py +0 -0
  255. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/sklearn/AdjustedRandIndex.py +0 -0
  256. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/sklearn/CalibrationCurve.py +0 -0
  257. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/sklearn/ClassifierPerformance.py +0 -0
  258. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/sklearn/ClassifierThresholdOptimization.py +0 -0
  259. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/sklearn/ClusterCosineSimilarity.py +0 -0
  260. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/sklearn/ClusterPerformanceMetrics.py +0 -0
  261. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/sklearn/CompletenessScore.py +0 -0
  262. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/sklearn/ConfusionMatrix.py +0 -0
  263. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/sklearn/FeatureImportance.py +0 -0
  264. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/sklearn/FowlkesMallowsScore.py +0 -0
  265. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/sklearn/HomogeneityScore.py +0 -0
  266. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/sklearn/HyperParametersTuning.py +0 -0
  267. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/sklearn/KMeansClustersOptimization.py +0 -0
  268. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/sklearn/MinimumAccuracy.py +0 -0
  269. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/sklearn/MinimumF1Score.py +0 -0
  270. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/sklearn/MinimumROCAUCScore.py +0 -0
  271. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/sklearn/ModelParameters.py +0 -0
  272. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/sklearn/ModelsPerformanceComparison.py +0 -0
  273. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/sklearn/OverfitDiagnosis.py +0 -0
  274. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/sklearn/PermutationFeatureImportance.py +0 -0
  275. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/sklearn/PopulationStabilityIndex.py +0 -0
  276. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/sklearn/PrecisionRecallCurve.py +0 -0
  277. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/sklearn/ROCCurve.py +0 -0
  278. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/sklearn/RegressionErrors.py +0 -0
  279. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/sklearn/RegressionErrorsComparison.py +0 -0
  280. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/sklearn/RegressionPerformance.py +0 -0
  281. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/sklearn/RegressionR2Square.py +0 -0
  282. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/sklearn/RegressionR2SquareComparison.py +0 -0
  283. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/sklearn/RobustnessDiagnosis.py +0 -0
  284. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/sklearn/SHAPGlobalImportance.py +0 -0
  285. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/sklearn/ScoreProbabilityAlignment.py +0 -0
  286. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/sklearn/SilhouettePlot.py +0 -0
  287. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/sklearn/TrainingTestDegradation.py +0 -0
  288. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/sklearn/VMeasure.py +0 -0
  289. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/sklearn/WeakspotsDiagnosis.py +0 -0
  290. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/sklearn/__init__.py +0 -0
  291. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/statsmodels/AutoARIMA.py +0 -0
  292. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/statsmodels/CumulativePredictionProbabilities.py +0 -0
  293. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/statsmodels/DurbinWatsonTest.py +0 -0
  294. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/statsmodels/GINITable.py +0 -0
  295. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/statsmodels/KolmogorovSmirnov.py +0 -0
  296. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/statsmodels/Lilliefors.py +0 -0
  297. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/statsmodels/PredictionProbabilitiesHistogram.py +0 -0
  298. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/statsmodels/RegressionCoeffs.py +0 -0
  299. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/statsmodels/RegressionFeatureSignificance.py +0 -0
  300. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/statsmodels/RegressionModelForecastPlot.py +0 -0
  301. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/statsmodels/RegressionModelForecastPlotLevels.py +0 -0
  302. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/statsmodels/RegressionModelSensitivityPlot.py +0 -0
  303. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/statsmodels/RegressionModelSummary.py +0 -0
  304. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/statsmodels/RegressionPermutationFeatureImportance.py +0 -0
  305. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/statsmodels/ScorecardHistogram.py +0 -0
  306. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/statsmodels/__init__.py +0 -0
  307. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/model_validation/statsmodels/statsutils.py +0 -0
  308. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/ongoing_monitoring/CalibrationCurveDrift.py +0 -0
  309. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/ongoing_monitoring/ClassDiscriminationDrift.py +0 -0
  310. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/ongoing_monitoring/ClassImbalanceDrift.py +0 -0
  311. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/ongoing_monitoring/ClassificationAccuracyDrift.py +0 -0
  312. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/ongoing_monitoring/ConfusionMatrixDrift.py +0 -0
  313. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/ongoing_monitoring/CumulativePredictionProbabilitiesDrift.py +0 -0
  314. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/ongoing_monitoring/FeatureDrift.py +0 -0
  315. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/ongoing_monitoring/PredictionAcrossEachFeature.py +0 -0
  316. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/ongoing_monitoring/PredictionCorrelation.py +0 -0
  317. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/ongoing_monitoring/PredictionProbabilitiesHistogramDrift.py +0 -0
  318. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/ongoing_monitoring/PredictionQuantilesAcrossFeatures.py +0 -0
  319. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/ongoing_monitoring/ROCCurveDrift.py +0 -0
  320. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/ongoing_monitoring/ScoreBandsDrift.py +0 -0
  321. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/ongoing_monitoring/ScorecardHistogramDrift.py +0 -0
  322. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/ongoing_monitoring/TargetPredictionDistributionPlot.py +0 -0
  323. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/output.py +0 -0
  324. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/plots/BoxPlot.py +0 -0
  325. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/plots/CorrelationHeatmap.py +0 -0
  326. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/plots/HistogramPlot.py +0 -0
  327. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/plots/ViolinPlot.py +0 -0
  328. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/plots/__init__.py +0 -0
  329. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/prompt_validation/Bias.py +0 -0
  330. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/prompt_validation/Clarity.py +0 -0
  331. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/prompt_validation/Conciseness.py +0 -0
  332. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/prompt_validation/Delimitation.py +0 -0
  333. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/prompt_validation/NegativeInstruction.py +0 -0
  334. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/prompt_validation/Robustness.py +0 -0
  335. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/prompt_validation/Specificity.py +0 -0
  336. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/prompt_validation/__init__.py +0 -0
  337. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/prompt_validation/ai_powered_test.py +0 -0
  338. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/stats/CorrelationAnalysis.py +0 -0
  339. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/stats/DescriptiveStats.py +0 -0
  340. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/stats/NormalityTests.py +0 -0
  341. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/stats/OutlierDetection.py +0 -0
  342. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/stats/__init__.py +0 -0
  343. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/test_providers.py +0 -0
  344. {validmind-2.12.4 → validmind-2.13.0}/validmind/tests/utils.py +0 -0
  345. {validmind-2.12.4 → validmind-2.13.0}/validmind/unit_metrics/__init__.py +0 -0
  346. {validmind-2.12.4 → validmind-2.13.0}/validmind/unit_metrics/classification/Accuracy.py +0 -0
  347. {validmind-2.12.4 → validmind-2.13.0}/validmind/unit_metrics/classification/F1.py +0 -0
  348. {validmind-2.12.4 → validmind-2.13.0}/validmind/unit_metrics/classification/Precision.py +0 -0
  349. {validmind-2.12.4 → validmind-2.13.0}/validmind/unit_metrics/classification/ROC_AUC.py +0 -0
  350. {validmind-2.12.4 → validmind-2.13.0}/validmind/unit_metrics/classification/Recall.py +0 -0
  351. {validmind-2.12.4 → validmind-2.13.0}/validmind/unit_metrics/regression/AdjustedRSquaredScore.py +0 -0
  352. {validmind-2.12.4 → validmind-2.13.0}/validmind/unit_metrics/regression/GiniCoefficient.py +0 -0
  353. {validmind-2.12.4 → validmind-2.13.0}/validmind/unit_metrics/regression/HuberLoss.py +0 -0
  354. {validmind-2.12.4 → validmind-2.13.0}/validmind/unit_metrics/regression/KolmogorovSmirnovStatistic.py +0 -0
  355. {validmind-2.12.4 → validmind-2.13.0}/validmind/unit_metrics/regression/MeanAbsoluteError.py +0 -0
  356. {validmind-2.12.4 → validmind-2.13.0}/validmind/unit_metrics/regression/MeanAbsolutePercentageError.py +0 -0
  357. {validmind-2.12.4 → validmind-2.13.0}/validmind/unit_metrics/regression/MeanBiasDeviation.py +0 -0
  358. {validmind-2.12.4 → validmind-2.13.0}/validmind/unit_metrics/regression/MeanSquaredError.py +0 -0
  359. {validmind-2.12.4 → validmind-2.13.0}/validmind/unit_metrics/regression/QuantileLoss.py +0 -0
  360. {validmind-2.12.4 → validmind-2.13.0}/validmind/unit_metrics/regression/RSquaredScore.py +0 -0
  361. {validmind-2.12.4 → validmind-2.13.0}/validmind/unit_metrics/regression/RootMeanSquaredError.py +0 -0
  362. {validmind-2.12.4 → validmind-2.13.0}/validmind/vm_models/__init__.py +0 -0
  363. {validmind-2.12.4 → validmind-2.13.0}/validmind/vm_models/dataset/__init__.py +0 -0
  364. {validmind-2.12.4 → validmind-2.13.0}/validmind/vm_models/dataset/dataset.py +0 -0
  365. {validmind-2.12.4 → validmind-2.13.0}/validmind/vm_models/dataset/utils.py +0 -0
  366. {validmind-2.12.4 → validmind-2.13.0}/validmind/vm_models/figure.py +0 -0
  367. {validmind-2.12.4 → validmind-2.13.0}/validmind/vm_models/html_progress.py +0 -0
  368. {validmind-2.12.4 → validmind-2.13.0}/validmind/vm_models/input.py +0 -0
  369. {validmind-2.12.4 → validmind-2.13.0}/validmind/vm_models/model.py +0 -0
  370. {validmind-2.12.4 → validmind-2.13.0}/validmind/vm_models/result/__init__.py +0 -0
  371. {validmind-2.12.4 → validmind-2.13.0}/validmind/vm_models/result/pii_filter.py +0 -0
  372. {validmind-2.12.4 → validmind-2.13.0}/validmind/vm_models/result/result.jinja +0 -0
  373. {validmind-2.12.4 → validmind-2.13.0}/validmind/vm_models/result/utils.py +0 -0
  374. {validmind-2.12.4 → validmind-2.13.0}/validmind/vm_models/test_suite/__init__.py +0 -0
  375. {validmind-2.12.4 → validmind-2.13.0}/validmind/vm_models/test_suite/runner.py +0 -0
  376. {validmind-2.12.4 → validmind-2.13.0}/validmind/vm_models/test_suite/summary.py +0 -0
  377. {validmind-2.12.4 → validmind-2.13.0}/validmind/vm_models/test_suite/test.py +0 -0
  378. {validmind-2.12.4 → validmind-2.13.0}/validmind/vm_models/test_suite/test_suite.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: validmind
3
- Version: 2.12.4
3
+ Version: 2.13.0
4
4
  Summary: ValidMind Library
5
5
  License: DUAL LICENSE NOTICE
6
6
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "validmind"
3
- version = "2.12.4"
3
+ version = "2.13.0"
4
4
  description = "ValidMind Library"
5
5
  readme = "README.pypi.md"
6
6
  requires-python = ">=3.9,<3.15"
@@ -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 log_text(content_id: str, text: str, _json: Optional[Dict[str, Any]] = None) -> str:
449
- """Logs free-form text to ValidMind API.
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 MathML support.
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 content_id or text are empty or not strings.
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
- if not content_id or not isinstance(content_id, str):
464
- raise ValueError("`content_id` must be a non-empty string")
465
- if not text or not isinstance(text, str):
466
- raise ValueError("`text` must be a non-empty string")
467
-
468
- if not is_html(text):
469
- text = md_to_html(text, mathml=True)
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