validmind 2.10.0rc2__tar.gz → 2.11.0__tar.gz

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