validmind 2.5.25__tar.gz → 2.6.7__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 (388) hide show
  1. validmind-2.6.7/PKG-INFO +137 -0
  2. validmind-2.6.7/README.pypi.md +72 -0
  3. {validmind-2.5.25 → validmind-2.6.7}/pyproject.toml +4 -3
  4. {validmind-2.5.25 → validmind-2.6.7}/validmind/__init__.py +8 -17
  5. validmind-2.6.7/validmind/__version__.py +1 -0
  6. {validmind-2.5.25 → validmind-2.6.7}/validmind/ai/test_descriptions.py +66 -85
  7. {validmind-2.5.25 → validmind-2.6.7}/validmind/ai/test_result_description/context.py +2 -2
  8. {validmind-2.5.25 → validmind-2.6.7}/validmind/ai/utils.py +26 -1
  9. {validmind-2.5.25 → validmind-2.6.7}/validmind/api_client.py +43 -79
  10. {validmind-2.5.25 → validmind-2.6.7}/validmind/client.py +5 -7
  11. {validmind-2.5.25 → validmind-2.6.7}/validmind/client_config.py +1 -1
  12. {validmind-2.5.25 → validmind-2.6.7}/validmind/datasets/__init__.py +1 -1
  13. {validmind-2.5.25 → validmind-2.6.7}/validmind/datasets/classification/customer_churn.py +7 -5
  14. {validmind-2.5.25 → validmind-2.6.7}/validmind/datasets/nlp/__init__.py +2 -2
  15. {validmind-2.5.25 → validmind-2.6.7}/validmind/errors.py +6 -10
  16. {validmind-2.5.25 → validmind-2.6.7}/validmind/html_templates/content_blocks.py +18 -16
  17. {validmind-2.5.25 → validmind-2.6.7}/validmind/logging.py +21 -16
  18. validmind-2.6.7/validmind/tests/__init__.py +62 -0
  19. validmind-2.6.7/validmind/tests/__types__.py +198 -0
  20. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/_store.py +7 -21
  21. validmind-2.6.7/validmind/tests/comparison.py +362 -0
  22. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/data_validation/ACFandPACFPlot.py +44 -73
  23. validmind-2.6.7/validmind/tests/data_validation/ADF.py +100 -0
  24. validmind-2.6.7/validmind/tests/data_validation/AutoAR.py +116 -0
  25. validmind-2.6.7/validmind/tests/data_validation/AutoMA.py +119 -0
  26. validmind-2.6.7/validmind/tests/data_validation/AutoStationarity.py +137 -0
  27. validmind-2.6.7/validmind/tests/data_validation/ClassImbalance.py +107 -0
  28. validmind-2.6.7/validmind/tests/data_validation/DatasetDescription.py +236 -0
  29. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/data_validation/DatasetSplit.py +50 -75
  30. validmind-2.6.7/validmind/tests/data_validation/DescriptiveStatistics.py +114 -0
  31. validmind-2.5.25/validmind/tests/data_validation/DFGLSArch.py → validmind-2.6.7/validmind/tests/data_validation/DickeyFullerGLS.py +44 -76
  32. validmind-2.6.7/validmind/tests/data_validation/Duplicates.py +71 -0
  33. validmind-2.6.7/validmind/tests/data_validation/EngleGrangerCoint.py +105 -0
  34. validmind-2.6.7/validmind/tests/data_validation/HighCardinality.py +79 -0
  35. validmind-2.6.7/validmind/tests/data_validation/HighPearsonCorrelation.py +74 -0
  36. validmind-2.6.7/validmind/tests/data_validation/IQROutliersBarPlot.py +121 -0
  37. validmind-2.6.7/validmind/tests/data_validation/IQROutliersTable.py +92 -0
  38. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/data_validation/IsolationForestOutliers.py +41 -63
  39. validmind-2.6.7/validmind/tests/data_validation/KPSS.py +85 -0
  40. validmind-2.6.7/validmind/tests/data_validation/LaggedCorrelationHeatmap.py +104 -0
  41. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/data_validation/MissingValues.py +17 -58
  42. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/data_validation/MissingValuesBarPlot.py +61 -87
  43. validmind-2.6.7/validmind/tests/data_validation/PhillipsPerronArch.py +111 -0
  44. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/data_validation/RollingStatsPlot.py +50 -81
  45. validmind-2.6.7/validmind/tests/data_validation/SeasonalDecompose.py +159 -0
  46. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/data_validation/Skewness.py +27 -64
  47. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/data_validation/SpreadPlot.py +34 -57
  48. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/data_validation/TabularCategoricalBarPlots.py +46 -65
  49. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/data_validation/TabularDateTimeHistograms.py +23 -45
  50. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/data_validation/TabularNumericalHistograms.py +27 -46
  51. validmind-2.6.7/validmind/tests/data_validation/TargetRateBarPlots.py +110 -0
  52. validmind-2.6.7/validmind/tests/data_validation/TimeSeriesFrequency.py +106 -0
  53. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/data_validation/TimeSeriesHistogram.py +24 -3
  54. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/data_validation/TimeSeriesLinePlot.py +29 -47
  55. validmind-2.6.7/validmind/tests/data_validation/TimeSeriesMissingValues.py +113 -0
  56. validmind-2.6.7/validmind/tests/data_validation/TimeSeriesOutliers.py +118 -0
  57. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/data_validation/TooManyZeroValues.py +21 -70
  58. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/data_validation/UniqueRows.py +23 -62
  59. validmind-2.6.7/validmind/tests/data_validation/WOEBinPlots.py +143 -0
  60. validmind-2.6.7/validmind/tests/data_validation/WOEBinTable.py +72 -0
  61. validmind-2.6.7/validmind/tests/data_validation/ZivotAndrewsArch.py +86 -0
  62. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/data_validation/nlp/CommonWords.py +49 -57
  63. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/data_validation/nlp/Hashtags.py +27 -49
  64. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/data_validation/nlp/LanguageDetection.py +7 -13
  65. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/data_validation/nlp/Mentions.py +32 -63
  66. validmind-2.6.7/validmind/tests/data_validation/nlp/PolarityAndSubjectivity.py +147 -0
  67. validmind-2.6.7/validmind/tests/data_validation/nlp/Punctuations.py +113 -0
  68. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/data_validation/nlp/Sentiment.py +4 -0
  69. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/data_validation/nlp/StopWords.py +62 -91
  70. validmind-2.6.7/validmind/tests/data_validation/nlp/TextDescription.py +176 -0
  71. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/data_validation/nlp/Toxicity.py +12 -4
  72. validmind-2.6.7/validmind/tests/decorator.py +162 -0
  73. validmind-2.6.7/validmind/tests/load.py +343 -0
  74. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/model_validation/BertScore.py +13 -7
  75. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/model_validation/BleuScore.py +4 -0
  76. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/model_validation/ClusterSizeDistribution.py +24 -47
  77. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/model_validation/ContextualRecall.py +3 -0
  78. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/model_validation/FeaturesAUC.py +43 -74
  79. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/model_validation/MeteorScore.py +3 -0
  80. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/model_validation/RegardScore.py +5 -1
  81. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/model_validation/RegressionResidualsPlot.py +54 -75
  82. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/model_validation/embeddings/ClusterDistribution.py +10 -33
  83. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/model_validation/embeddings/CosineSimilarityDistribution.py +11 -29
  84. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/model_validation/embeddings/DescriptiveAnalytics.py +19 -31
  85. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/model_validation/embeddings/EmbeddingsVisualization2D.py +40 -49
  86. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/model_validation/embeddings/StabilityAnalysisKeyword.py +29 -15
  87. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/model_validation/embeddings/StabilityAnalysisRandomNoise.py +25 -11
  88. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/model_validation/embeddings/StabilityAnalysisSynonyms.py +28 -13
  89. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/model_validation/embeddings/StabilityAnalysisTranslation.py +67 -38
  90. validmind-2.6.7/validmind/tests/model_validation/embeddings/utils.py +53 -0
  91. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/model_validation/ragas/AnswerCorrectness.py +37 -32
  92. validmind-2.5.25/validmind/tests/model_validation/ragas/AspectCritique.py → validmind-2.6.7/validmind/tests/model_validation/ragas/AspectCritic.py +33 -27
  93. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/model_validation/ragas/ContextEntityRecall.py +44 -41
  94. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/model_validation/ragas/ContextPrecision.py +40 -35
  95. validmind-2.6.7/validmind/tests/model_validation/ragas/ContextPrecisionWithoutReference.py +133 -0
  96. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/model_validation/ragas/ContextRecall.py +40 -35
  97. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/model_validation/ragas/Faithfulness.py +42 -30
  98. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/model_validation/ragas/NoiseSensitivity.py +59 -35
  99. validmind-2.5.25/validmind/tests/model_validation/ragas/AnswerRelevance.py → validmind-2.6.7/validmind/tests/model_validation/ragas/ResponseRelevancy.py +52 -41
  100. validmind-2.5.25/validmind/tests/model_validation/ragas/AnswerSimilarity.py → validmind-2.6.7/validmind/tests/model_validation/ragas/SemanticSimilarity.py +39 -34
  101. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/model_validation/sklearn/AdjustedMutualInformation.py +13 -16
  102. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/model_validation/sklearn/AdjustedRandIndex.py +13 -16
  103. validmind-2.6.7/validmind/tests/model_validation/sklearn/ClassifierPerformance.py +110 -0
  104. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/model_validation/sklearn/ClusterCosineSimilarity.py +31 -61
  105. validmind-2.6.7/validmind/tests/model_validation/sklearn/ClusterPerformanceMetrics.py +167 -0
  106. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/model_validation/sklearn/CompletenessScore.py +13 -16
  107. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/model_validation/sklearn/ConfusionMatrix.py +62 -94
  108. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/model_validation/sklearn/FeatureImportance.py +7 -8
  109. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/model_validation/sklearn/FowlkesMallowsScore.py +12 -15
  110. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/model_validation/sklearn/HomogeneityScore.py +12 -15
  111. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/model_validation/sklearn/HyperParametersTuning.py +23 -53
  112. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/model_validation/sklearn/KMeansClustersOptimization.py +60 -74
  113. validmind-2.6.7/validmind/tests/model_validation/sklearn/MinimumAccuracy.py +59 -0
  114. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/model_validation/sklearn/MinimumF1Score.py +22 -72
  115. validmind-2.6.7/validmind/tests/model_validation/sklearn/MinimumROCAUCScore.py +80 -0
  116. validmind-2.6.7/validmind/tests/model_validation/sklearn/ModelsPerformanceComparison.py +110 -0
  117. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/model_validation/sklearn/OverfitDiagnosis.py +51 -145
  118. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/model_validation/sklearn/PermutationFeatureImportance.py +60 -78
  119. validmind-2.6.7/validmind/tests/model_validation/sklearn/PopulationStabilityIndex.py +209 -0
  120. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/model_validation/sklearn/PrecisionRecallCurve.py +26 -55
  121. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/model_validation/sklearn/ROCCurve.py +43 -77
  122. validmind-2.6.7/validmind/tests/model_validation/sklearn/RegressionPerformance.py +83 -0
  123. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/model_validation/sklearn/RobustnessDiagnosis.py +47 -136
  124. validmind-2.6.7/validmind/tests/model_validation/sklearn/SHAPGlobalImportance.py +232 -0
  125. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/model_validation/sklearn/SilhouettePlot.py +54 -99
  126. validmind-2.6.7/validmind/tests/model_validation/sklearn/TrainingTestDegradation.py +101 -0
  127. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/model_validation/sklearn/VMeasure.py +12 -15
  128. validmind-2.6.7/validmind/tests/model_validation/sklearn/WeakspotsDiagnosis.py +297 -0
  129. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/model_validation/statsmodels/AutoARIMA.py +40 -45
  130. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/model_validation/statsmodels/KolmogorovSmirnov.py +22 -47
  131. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/model_validation/statsmodels/Lilliefors.py +17 -28
  132. validmind-2.6.7/validmind/tests/model_validation/statsmodels/RegressionFeatureSignificance.py +93 -0
  133. validmind-2.6.7/validmind/tests/model_validation/statsmodels/RegressionModelForecastPlot.py +90 -0
  134. validmind-2.6.7/validmind/tests/model_validation/statsmodels/RegressionModelForecastPlotLevels.py +94 -0
  135. validmind-2.6.7/validmind/tests/model_validation/statsmodels/RegressionModelSensitivityPlot.py +114 -0
  136. validmind-2.6.7/validmind/tests/model_validation/statsmodels/RegressionModelSummary.py +61 -0
  137. validmind-2.6.7/validmind/tests/model_validation/statsmodels/RegressionPermutationFeatureImportance.py +100 -0
  138. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/ongoing_monitoring/PredictionCorrelation.py +2 -0
  139. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/ongoing_monitoring/TargetPredictionDistributionPlot.py +4 -2
  140. validmind-2.6.7/validmind/tests/output.py +120 -0
  141. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/prompt_validation/Bias.py +55 -98
  142. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/prompt_validation/Clarity.py +56 -99
  143. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/prompt_validation/Conciseness.py +63 -101
  144. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/prompt_validation/Delimitation.py +48 -89
  145. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/prompt_validation/NegativeInstruction.py +62 -96
  146. validmind-2.6.7/validmind/tests/prompt_validation/Robustness.py +130 -0
  147. validmind-2.6.7/validmind/tests/prompt_validation/Specificity.py +113 -0
  148. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/prompt_validation/ai_powered_test.py +2 -2
  149. validmind-2.6.7/validmind/tests/run.py +400 -0
  150. validmind-2.6.7/validmind/tests/test_providers.py +189 -0
  151. validmind-2.6.7/validmind/tests/utils.py +107 -0
  152. validmind-2.6.7/validmind/unit_metrics/__init__.py +32 -0
  153. {validmind-2.5.25 → validmind-2.6.7}/validmind/unit_metrics/classification/F1.py +1 -0
  154. {validmind-2.5.25 → validmind-2.6.7}/validmind/unit_metrics/classification/Precision.py +1 -0
  155. {validmind-2.5.25 → validmind-2.6.7}/validmind/unit_metrics/classification/ROC_AUC.py +1 -0
  156. {validmind-2.5.25 → validmind-2.6.7}/validmind/unit_metrics/classification/Recall.py +1 -0
  157. {validmind-2.5.25 → validmind-2.6.7}/validmind/unit_metrics/regression/AdjustedRSquaredScore.py +1 -0
  158. {validmind-2.5.25 → validmind-2.6.7}/validmind/unit_metrics/regression/GiniCoefficient.py +1 -0
  159. {validmind-2.5.25 → validmind-2.6.7}/validmind/unit_metrics/regression/HuberLoss.py +1 -0
  160. {validmind-2.5.25 → validmind-2.6.7}/validmind/unit_metrics/regression/KolmogorovSmirnovStatistic.py +1 -0
  161. {validmind-2.5.25 → validmind-2.6.7}/validmind/unit_metrics/regression/MeanAbsoluteError.py +1 -0
  162. {validmind-2.5.25 → validmind-2.6.7}/validmind/unit_metrics/regression/MeanAbsolutePercentageError.py +1 -0
  163. {validmind-2.5.25 → validmind-2.6.7}/validmind/unit_metrics/regression/MeanBiasDeviation.py +1 -0
  164. {validmind-2.5.25 → validmind-2.6.7}/validmind/unit_metrics/regression/MeanSquaredError.py +1 -0
  165. {validmind-2.5.25 → validmind-2.6.7}/validmind/unit_metrics/regression/QuantileLoss.py +1 -0
  166. {validmind-2.5.25 → validmind-2.6.7}/validmind/unit_metrics/regression/RSquaredScore.py +2 -1
  167. {validmind-2.5.25 → validmind-2.6.7}/validmind/unit_metrics/regression/RootMeanSquaredError.py +1 -0
  168. {validmind-2.5.25 → validmind-2.6.7}/validmind/utils.py +66 -17
  169. {validmind-2.5.25 → validmind-2.6.7}/validmind/vm_models/__init__.py +2 -17
  170. {validmind-2.5.25 → validmind-2.6.7}/validmind/vm_models/dataset/dataset.py +31 -4
  171. {validmind-2.5.25 → validmind-2.6.7}/validmind/vm_models/figure.py +7 -37
  172. {validmind-2.5.25 → validmind-2.6.7}/validmind/vm_models/model.py +3 -0
  173. validmind-2.6.7/validmind/vm_models/result/__init__.py +7 -0
  174. validmind-2.6.7/validmind/vm_models/result/result.jinja +21 -0
  175. validmind-2.6.7/validmind/vm_models/result/result.py +337 -0
  176. validmind-2.6.7/validmind/vm_models/result/utils.py +160 -0
  177. {validmind-2.5.25 → validmind-2.6.7}/validmind/vm_models/test_suite/runner.py +16 -54
  178. {validmind-2.5.25 → validmind-2.6.7}/validmind/vm_models/test_suite/summary.py +3 -3
  179. validmind-2.6.7/validmind/vm_models/test_suite/test.py +118 -0
  180. {validmind-2.5.25 → validmind-2.6.7}/validmind/vm_models/test_suite/test_suite.py +8 -40
  181. validmind-2.5.25/PKG-INFO +0 -118
  182. validmind-2.5.25/README.pypi.md +0 -54
  183. validmind-2.5.25/validmind/__version__.py +0 -1
  184. validmind-2.5.25/validmind/tests/__init__.py +0 -39
  185. validmind-2.5.25/validmind/tests/__types__.py +0 -182
  186. validmind-2.5.25/validmind/tests/data_validation/ADF.py +0 -134
  187. validmind-2.5.25/validmind/tests/data_validation/AutoAR.py +0 -153
  188. validmind-2.5.25/validmind/tests/data_validation/AutoMA.py +0 -156
  189. validmind-2.5.25/validmind/tests/data_validation/AutoSeasonality.py +0 -190
  190. validmind-2.5.25/validmind/tests/data_validation/AutoStationarity.py +0 -185
  191. validmind-2.5.25/validmind/tests/data_validation/ClassImbalance.py +0 -176
  192. validmind-2.5.25/validmind/tests/data_validation/DatasetDescription.py +0 -265
  193. validmind-2.5.25/validmind/tests/data_validation/DescriptiveStatistics.py +0 -140
  194. validmind-2.5.25/validmind/tests/data_validation/Duplicates.py +0 -140
  195. validmind-2.5.25/validmind/tests/data_validation/EngleGrangerCoint.py +0 -127
  196. validmind-2.5.25/validmind/tests/data_validation/HighCardinality.py +0 -127
  197. validmind-2.5.25/validmind/tests/data_validation/HighPearsonCorrelation.py +0 -142
  198. validmind-2.5.25/validmind/tests/data_validation/IQROutliersBarPlot.py +0 -152
  199. validmind-2.5.25/validmind/tests/data_validation/IQROutliersTable.py +0 -132
  200. validmind-2.5.25/validmind/tests/data_validation/KPSS.py +0 -133
  201. validmind-2.5.25/validmind/tests/data_validation/LaggedCorrelationHeatmap.py +0 -152
  202. validmind-2.5.25/validmind/tests/data_validation/PhillipsPerronArch.py +0 -134
  203. validmind-2.5.25/validmind/tests/data_validation/SeasonalDecompose.py +0 -241
  204. validmind-2.5.25/validmind/tests/data_validation/TargetRateBarPlots.py +0 -149
  205. validmind-2.5.25/validmind/tests/data_validation/TimeSeriesFrequency.py +0 -191
  206. validmind-2.5.25/validmind/tests/data_validation/TimeSeriesMissingValues.py +0 -189
  207. validmind-2.5.25/validmind/tests/data_validation/TimeSeriesOutliers.py +0 -235
  208. validmind-2.5.25/validmind/tests/data_validation/WOEBinPlots.py +0 -169
  209. validmind-2.5.25/validmind/tests/data_validation/WOEBinTable.py +0 -113
  210. validmind-2.5.25/validmind/tests/data_validation/ZivotAndrewsArch.py +0 -128
  211. validmind-2.5.25/validmind/tests/data_validation/nlp/PolarityAndSubjectivity.py +0 -72
  212. validmind-2.5.25/validmind/tests/data_validation/nlp/Punctuations.py +0 -97
  213. validmind-2.5.25/validmind/tests/data_validation/nlp/TextDescription.py +0 -219
  214. validmind-2.5.25/validmind/tests/decorator.py +0 -371
  215. validmind-2.5.25/validmind/tests/load.py +0 -284
  216. validmind-2.5.25/validmind/tests/metadata.py +0 -59
  217. validmind-2.5.25/validmind/tests/model_validation/embeddings/StabilityAnalysis.py +0 -176
  218. validmind-2.5.25/validmind/tests/model_validation/ragas/ContextUtilization.py +0 -161
  219. validmind-2.5.25/validmind/tests/model_validation/sklearn/ClassifierPerformance.py +0 -148
  220. validmind-2.5.25/validmind/tests/model_validation/sklearn/ClusterPerformance.py +0 -80
  221. validmind-2.5.25/validmind/tests/model_validation/sklearn/ClusterPerformanceMetrics.py +0 -132
  222. validmind-2.5.25/validmind/tests/model_validation/sklearn/MinimumAccuracy.py +0 -127
  223. validmind-2.5.25/validmind/tests/model_validation/sklearn/MinimumROCAUCScore.py +0 -129
  224. validmind-2.5.25/validmind/tests/model_validation/sklearn/ModelsPerformanceComparison.py +0 -140
  225. validmind-2.5.25/validmind/tests/model_validation/sklearn/PopulationStabilityIndex.py +0 -251
  226. validmind-2.5.25/validmind/tests/model_validation/sklearn/RegressionPerformance.py +0 -136
  227. validmind-2.5.25/validmind/tests/model_validation/sklearn/SHAPGlobalImportance.py +0 -276
  228. validmind-2.5.25/validmind/tests/model_validation/sklearn/TrainingTestDegradation.py +0 -175
  229. validmind-2.5.25/validmind/tests/model_validation/sklearn/WeakspotsDiagnosis.py +0 -353
  230. validmind-2.5.25/validmind/tests/model_validation/statsmodels/RegressionFeatureSignificance.py +0 -137
  231. validmind-2.5.25/validmind/tests/model_validation/statsmodels/RegressionModelForecastPlot.py +0 -158
  232. validmind-2.5.25/validmind/tests/model_validation/statsmodels/RegressionModelForecastPlotLevels.py +0 -198
  233. validmind-2.5.25/validmind/tests/model_validation/statsmodels/RegressionModelSensitivityPlot.py +0 -176
  234. validmind-2.5.25/validmind/tests/model_validation/statsmodels/RegressionModelSummary.py +0 -98
  235. validmind-2.5.25/validmind/tests/model_validation/statsmodels/RegressionPermutationFeatureImportance.py +0 -133
  236. validmind-2.5.25/validmind/tests/prompt_validation/Robustness.py +0 -171
  237. validmind-2.5.25/validmind/tests/prompt_validation/Specificity.py +0 -147
  238. validmind-2.5.25/validmind/tests/run.py +0 -582
  239. validmind-2.5.25/validmind/tests/test_providers.py +0 -159
  240. validmind-2.5.25/validmind/tests/utils.py +0 -16
  241. validmind-2.5.25/validmind/unit_metrics/__init__.py +0 -171
  242. validmind-2.5.25/validmind/unit_metrics/composite.py +0 -238
  243. validmind-2.5.25/validmind/vm_models/test/metric.py +0 -98
  244. validmind-2.5.25/validmind/vm_models/test/metric_result.py +0 -61
  245. validmind-2.5.25/validmind/vm_models/test/output_template.py +0 -55
  246. validmind-2.5.25/validmind/vm_models/test/result_summary.py +0 -76
  247. validmind-2.5.25/validmind/vm_models/test/result_wrapper.py +0 -488
  248. validmind-2.5.25/validmind/vm_models/test/test.py +0 -103
  249. validmind-2.5.25/validmind/vm_models/test/threshold_test.py +0 -106
  250. validmind-2.5.25/validmind/vm_models/test/threshold_test_result.py +0 -75
  251. validmind-2.5.25/validmind/vm_models/test_context.py +0 -259
  252. validmind-2.5.25/validmind/vm_models/test_suite/test.py +0 -152
  253. {validmind-2.5.25 → validmind-2.6.7}/LICENSE +0 -0
  254. {validmind-2.5.25 → validmind-2.6.7}/validmind/ai/test_result_description/config.yaml +0 -0
  255. {validmind-2.5.25 → validmind-2.6.7}/validmind/ai/test_result_description/image_processing.py +0 -0
  256. {validmind-2.5.25 → validmind-2.6.7}/validmind/ai/test_result_description/system.jinja +0 -0
  257. {validmind-2.5.25 → validmind-2.6.7}/validmind/ai/test_result_description/user.jinja +0 -0
  258. {validmind-2.5.25 → validmind-2.6.7}/validmind/datasets/classification/__init__.py +0 -0
  259. {validmind-2.5.25 → validmind-2.6.7}/validmind/datasets/classification/datasets/bank_customer_churn.csv +0 -0
  260. {validmind-2.5.25 → validmind-2.6.7}/validmind/datasets/classification/datasets/taiwan_credit.csv +0 -0
  261. {validmind-2.5.25 → validmind-2.6.7}/validmind/datasets/classification/taiwan_credit.py +0 -0
  262. {validmind-2.5.25 → validmind-2.6.7}/validmind/datasets/cluster/digits.py +0 -0
  263. {validmind-2.5.25 → validmind-2.6.7}/validmind/datasets/credit_risk/__init__.py +0 -0
  264. {validmind-2.5.25 → validmind-2.6.7}/validmind/datasets/credit_risk/datasets/lending_club_biased.csv.gz +0 -0
  265. {validmind-2.5.25 → validmind-2.6.7}/validmind/datasets/credit_risk/datasets/lending_club_loan_data_2007_2014_clean.csv.gz +0 -0
  266. {validmind-2.5.25 → validmind-2.6.7}/validmind/datasets/credit_risk/lending_club.py +0 -0
  267. {validmind-2.5.25 → validmind-2.6.7}/validmind/datasets/credit_risk/lending_club_bias.py +0 -0
  268. {validmind-2.5.25 → validmind-2.6.7}/validmind/datasets/llm/rag/__init__.py +0 -0
  269. {validmind-2.5.25 → validmind-2.6.7}/validmind/datasets/llm/rag/datasets/rfp_existing_questions_client_1.csv +0 -0
  270. {validmind-2.5.25 → validmind-2.6.7}/validmind/datasets/llm/rag/datasets/rfp_existing_questions_client_2.csv +0 -0
  271. {validmind-2.5.25 → validmind-2.6.7}/validmind/datasets/llm/rag/datasets/rfp_existing_questions_client_3.csv +0 -0
  272. {validmind-2.5.25 → validmind-2.6.7}/validmind/datasets/llm/rag/datasets/rfp_existing_questions_client_4.csv +0 -0
  273. {validmind-2.5.25 → validmind-2.6.7}/validmind/datasets/llm/rag/datasets/rfp_existing_questions_client_5.csv +0 -0
  274. {validmind-2.5.25 → validmind-2.6.7}/validmind/datasets/llm/rag/rfp.py +0 -0
  275. {validmind-2.5.25 → validmind-2.6.7}/validmind/datasets/nlp/cnn_dailymail.py +0 -0
  276. {validmind-2.5.25 → validmind-2.6.7}/validmind/datasets/nlp/datasets/Covid_19.csv +0 -0
  277. {validmind-2.5.25 → validmind-2.6.7}/validmind/datasets/nlp/datasets/cnn_dailymail_100_with_predictions.csv +0 -0
  278. {validmind-2.5.25 → validmind-2.6.7}/validmind/datasets/nlp/datasets/cnn_dailymail_500_with_predictions.csv +0 -0
  279. {validmind-2.5.25 → validmind-2.6.7}/validmind/datasets/nlp/datasets/sentiments_with_predictions.csv +0 -0
  280. {validmind-2.5.25 → validmind-2.6.7}/validmind/datasets/nlp/twitter_covid_19.py +0 -0
  281. {validmind-2.5.25 → validmind-2.6.7}/validmind/datasets/regression/__init__.py +0 -0
  282. {validmind-2.5.25 → validmind-2.6.7}/validmind/datasets/regression/california_housing.py +0 -0
  283. {validmind-2.5.25 → validmind-2.6.7}/validmind/datasets/regression/datasets/fred/CPIAUCSL.csv +0 -0
  284. {validmind-2.5.25 → validmind-2.6.7}/validmind/datasets/regression/datasets/fred/CSUSHPISA.csv +0 -0
  285. {validmind-2.5.25 → validmind-2.6.7}/validmind/datasets/regression/datasets/fred/DRSFRMACBS.csv +0 -0
  286. {validmind-2.5.25 → validmind-2.6.7}/validmind/datasets/regression/datasets/fred/FEDFUNDS.csv +0 -0
  287. {validmind-2.5.25 → validmind-2.6.7}/validmind/datasets/regression/datasets/fred/GDP.csv +0 -0
  288. {validmind-2.5.25 → validmind-2.6.7}/validmind/datasets/regression/datasets/fred/GDPC1.csv +0 -0
  289. {validmind-2.5.25 → validmind-2.6.7}/validmind/datasets/regression/datasets/fred/GS10.csv +0 -0
  290. {validmind-2.5.25 → validmind-2.6.7}/validmind/datasets/regression/datasets/fred/GS3.csv +0 -0
  291. {validmind-2.5.25 → validmind-2.6.7}/validmind/datasets/regression/datasets/fred/GS5.csv +0 -0
  292. {validmind-2.5.25 → validmind-2.6.7}/validmind/datasets/regression/datasets/fred/MORTGAGE30US.csv +0 -0
  293. {validmind-2.5.25 → validmind-2.6.7}/validmind/datasets/regression/datasets/fred/UNRATE.csv +0 -0
  294. {validmind-2.5.25 → validmind-2.6.7}/validmind/datasets/regression/datasets/fred_loan_rates.csv +0 -0
  295. {validmind-2.5.25 → validmind-2.6.7}/validmind/datasets/regression/datasets/fred_loan_rates_test_1.csv +0 -0
  296. {validmind-2.5.25 → validmind-2.6.7}/validmind/datasets/regression/datasets/fred_loan_rates_test_2.csv +0 -0
  297. {validmind-2.5.25 → validmind-2.6.7}/validmind/datasets/regression/datasets/fred_loan_rates_test_3.csv +0 -0
  298. {validmind-2.5.25 → validmind-2.6.7}/validmind/datasets/regression/datasets/fred_loan_rates_test_4.csv +0 -0
  299. {validmind-2.5.25 → validmind-2.6.7}/validmind/datasets/regression/datasets/fred_loan_rates_test_5.csv +0 -0
  300. {validmind-2.5.25 → validmind-2.6.7}/validmind/datasets/regression/datasets/leanding_club_loan_rates.csv +0 -0
  301. {validmind-2.5.25 → validmind-2.6.7}/validmind/datasets/regression/fred.py +0 -0
  302. {validmind-2.5.25 → validmind-2.6.7}/validmind/datasets/regression/fred_timeseries.py +0 -0
  303. {validmind-2.5.25 → validmind-2.6.7}/validmind/datasets/regression/lending_club.py +0 -0
  304. {validmind-2.5.25 → validmind-2.6.7}/validmind/datasets/regression/models/fred_loan_rates_model_1.pkl +0 -0
  305. {validmind-2.5.25 → validmind-2.6.7}/validmind/datasets/regression/models/fred_loan_rates_model_2.pkl +0 -0
  306. {validmind-2.5.25 → validmind-2.6.7}/validmind/datasets/regression/models/fred_loan_rates_model_3.pkl +0 -0
  307. {validmind-2.5.25 → validmind-2.6.7}/validmind/datasets/regression/models/fred_loan_rates_model_4.pkl +0 -0
  308. {validmind-2.5.25 → validmind-2.6.7}/validmind/datasets/regression/models/fred_loan_rates_model_5.pkl +0 -0
  309. {validmind-2.5.25 → validmind-2.6.7}/validmind/html_templates/__init__.py +0 -0
  310. {validmind-2.5.25 → validmind-2.6.7}/validmind/input_registry.py +0 -0
  311. {validmind-2.5.25 → validmind-2.6.7}/validmind/models/__init__.py +0 -0
  312. {validmind-2.5.25 → validmind-2.6.7}/validmind/models/foundation.py +0 -0
  313. {validmind-2.5.25 → validmind-2.6.7}/validmind/models/function.py +0 -0
  314. {validmind-2.5.25 → validmind-2.6.7}/validmind/models/huggingface.py +0 -0
  315. {validmind-2.5.25 → validmind-2.6.7}/validmind/models/metadata.py +0 -0
  316. {validmind-2.5.25 → validmind-2.6.7}/validmind/models/pipeline.py +0 -0
  317. {validmind-2.5.25 → validmind-2.6.7}/validmind/models/pytorch.py +0 -0
  318. {validmind-2.5.25 → validmind-2.6.7}/validmind/models/r_model.py +0 -0
  319. {validmind-2.5.25 → validmind-2.6.7}/validmind/models/sklearn.py +0 -0
  320. {validmind-2.5.25 → validmind-2.6.7}/validmind/template.py +0 -0
  321. {validmind-2.5.25 → validmind-2.6.7}/validmind/test_suites/__init__.py +0 -0
  322. {validmind-2.5.25 → validmind-2.6.7}/validmind/test_suites/classifier.py +0 -0
  323. {validmind-2.5.25 → validmind-2.6.7}/validmind/test_suites/cluster.py +0 -0
  324. {validmind-2.5.25 → validmind-2.6.7}/validmind/test_suites/embeddings.py +0 -0
  325. {validmind-2.5.25 → validmind-2.6.7}/validmind/test_suites/llm.py +0 -0
  326. {validmind-2.5.25 → validmind-2.6.7}/validmind/test_suites/nlp.py +0 -0
  327. {validmind-2.5.25 → validmind-2.6.7}/validmind/test_suites/parameters_optimization.py +0 -0
  328. {validmind-2.5.25 → validmind-2.6.7}/validmind/test_suites/regression.py +0 -0
  329. {validmind-2.5.25 → validmind-2.6.7}/validmind/test_suites/statsmodels_timeseries.py +0 -0
  330. {validmind-2.5.25 → validmind-2.6.7}/validmind/test_suites/summarization.py +0 -0
  331. {validmind-2.5.25 → validmind-2.6.7}/validmind/test_suites/tabular_datasets.py +0 -0
  332. {validmind-2.5.25 → validmind-2.6.7}/validmind/test_suites/text_data.py +0 -0
  333. {validmind-2.5.25 → validmind-2.6.7}/validmind/test_suites/time_series.py +0 -0
  334. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/data_validation/BivariateScatterPlots.py +0 -0
  335. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/data_validation/BoxPierce.py +0 -0
  336. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/data_validation/ChiSquaredFeaturesTable.py +0 -0
  337. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/data_validation/FeatureTargetCorrelationPlot.py +0 -0
  338. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/data_validation/JarqueBera.py +0 -0
  339. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/data_validation/LJungBox.py +0 -0
  340. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/data_validation/PearsonCorrelationMatrix.py +0 -0
  341. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/data_validation/ProtectedClassesCombination.py +0 -0
  342. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/data_validation/ProtectedClassesDescription.py +0 -0
  343. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/data_validation/ProtectedClassesDisparity.py +0 -0
  344. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/data_validation/ProtectedClassesThresholdOptimizer.py +0 -0
  345. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/data_validation/RunsTest.py +0 -0
  346. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/data_validation/ScatterPlot.py +0 -0
  347. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/data_validation/ShapiroWilk.py +0 -0
  348. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/data_validation/TabularDescriptionTables.py +0 -0
  349. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/data_validation/TimeSeriesDescription.py +0 -0
  350. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/data_validation/TimeSeriesDescriptiveStatistics.py +0 -0
  351. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/data_validation/__init__.py +0 -0
  352. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/data_validation/nlp/__init__.py +0 -0
  353. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/model_validation/ModelMetadata.py +0 -0
  354. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/model_validation/ModelPredictionResiduals.py +0 -0
  355. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/model_validation/RougeScore.py +0 -0
  356. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/model_validation/TimeSeriesPredictionWithCI.py +0 -0
  357. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/model_validation/TimeSeriesPredictionsPlot.py +0 -0
  358. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/model_validation/TimeSeriesR2SquareBySegments.py +0 -0
  359. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/model_validation/TokenDisparity.py +0 -0
  360. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/model_validation/ToxicityScore.py +0 -0
  361. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/model_validation/__init__.py +0 -0
  362. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/model_validation/embeddings/CosineSimilarityComparison.py +0 -0
  363. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/model_validation/embeddings/CosineSimilarityHeatmap.py +0 -0
  364. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/model_validation/embeddings/EuclideanDistanceComparison.py +0 -0
  365. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/model_validation/embeddings/EuclideanDistanceHeatmap.py +0 -0
  366. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/model_validation/embeddings/PCAComponentsPairwisePlots.py +0 -0
  367. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/model_validation/embeddings/TSNEComponentsPairwisePlots.py +0 -0
  368. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/model_validation/ragas/utils.py +0 -0
  369. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/model_validation/sklearn/RegressionErrors.py +0 -0
  370. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/model_validation/sklearn/RegressionErrorsComparison.py +0 -0
  371. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/model_validation/sklearn/RegressionR2Square.py +0 -0
  372. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/model_validation/sklearn/RegressionR2SquareComparison.py +0 -0
  373. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/model_validation/sklearn/__init__.py +0 -0
  374. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/model_validation/statsmodels/CumulativePredictionProbabilities.py +0 -0
  375. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/model_validation/statsmodels/DurbinWatsonTest.py +0 -0
  376. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/model_validation/statsmodels/GINITable.py +0 -0
  377. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/model_validation/statsmodels/PredictionProbabilitiesHistogram.py +0 -0
  378. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/model_validation/statsmodels/RegressionCoeffs.py +0 -0
  379. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/model_validation/statsmodels/ScorecardHistogram.py +0 -0
  380. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/model_validation/statsmodels/__init__.py +0 -0
  381. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/model_validation/statsmodels/statsutils.py +0 -0
  382. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/ongoing_monitoring/FeatureDrift.py +0 -0
  383. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/ongoing_monitoring/PredictionAcrossEachFeature.py +0 -0
  384. {validmind-2.5.25 → validmind-2.6.7}/validmind/tests/prompt_validation/__init__.py +0 -0
  385. {validmind-2.5.25 → validmind-2.6.7}/validmind/unit_metrics/classification/Accuracy.py +0 -0
  386. {validmind-2.5.25 → validmind-2.6.7}/validmind/vm_models/dataset/__init__.py +0 -0
  387. {validmind-2.5.25 → validmind-2.6.7}/validmind/vm_models/dataset/utils.py +0 -0
  388. {validmind-2.5.25 → validmind-2.6.7}/validmind/vm_models/input.py +0 -0
@@ -0,0 +1,137 @@
1
+ Metadata-Version: 2.1
2
+ Name: validmind
3
+ Version: 2.6.7
4
+ Summary: ValidMind Library
5
+ License: Commercial License
6
+ Author: Andres Rodriguez
7
+ Author-email: andres@validmind.ai
8
+ Requires-Python: >=3.8.1,<3.12
9
+ Classifier: License :: Other/Proprietary License
10
+ Classifier: Programming Language :: Python :: 3
11
+ Classifier: Programming Language :: Python :: 3.9
12
+ Classifier: Programming Language :: Python :: 3.10
13
+ Classifier: Programming Language :: Python :: 3.11
14
+ Provides-Extra: all
15
+ Provides-Extra: huggingface
16
+ Provides-Extra: llm
17
+ Provides-Extra: pytorch
18
+ Provides-Extra: r-support
19
+ Requires-Dist: aiohttp[speedups]
20
+ Requires-Dist: arch
21
+ Requires-Dist: bert-score (>=0.3.13)
22
+ Requires-Dist: catboost
23
+ Requires-Dist: datasets (>=2.10.0,<3.0.0)
24
+ Requires-Dist: evaluate
25
+ Requires-Dist: ipywidgets
26
+ Requires-Dist: kaleido (>=0.2.1,!=0.2.1.post1)
27
+ Requires-Dist: langchain-openai (>=0.1.8) ; extra == "all" or extra == "llm"
28
+ Requires-Dist: langdetect
29
+ Requires-Dist: latex2mathml (>=3.77.0)
30
+ Requires-Dist: llvmlite ; python_version >= "3.8" and python_full_version <= "3.11.0"
31
+ Requires-Dist: matplotlib
32
+ Requires-Dist: mistune (>=3.0.2,<4.0.0)
33
+ Requires-Dist: nest-asyncio (>=1.6.0,<2.0.0)
34
+ Requires-Dist: nltk (>=3.8.1,<4.0.0)
35
+ Requires-Dist: numba (<0.59.0)
36
+ Requires-Dist: numpy
37
+ Requires-Dist: openai (>=1)
38
+ Requires-Dist: pandas (>=1.1,<=2.0.3)
39
+ Requires-Dist: plotly
40
+ Requires-Dist: plotly-express
41
+ Requires-Dist: polars
42
+ Requires-Dist: pycocoevalcap (>=1.2,<2.0) ; extra == "all" or extra == "llm"
43
+ Requires-Dist: python-dotenv
44
+ Requires-Dist: ragas (>=0.2.3) ; extra == "all" or extra == "llm"
45
+ Requires-Dist: rouge (>=1)
46
+ Requires-Dist: rpy2 (>=3.5.10,<4.0.0) ; extra == "all" or extra == "r-support"
47
+ Requires-Dist: scikit-learn
48
+ Requires-Dist: scipy
49
+ Requires-Dist: scorecardpy (>=0.1.9.6,<0.2.0.0)
50
+ Requires-Dist: seaborn
51
+ Requires-Dist: sentencepiece (>=0.2.0,<0.3.0) ; extra == "all" or extra == "huggingface" or extra == "llm"
52
+ Requires-Dist: sentry-sdk (>=1.24.0,<2.0.0)
53
+ Requires-Dist: shap (==0.44.1)
54
+ Requires-Dist: statsmodels
55
+ Requires-Dist: tabulate (>=0.8.9,<0.9.0)
56
+ Requires-Dist: textblob (>=0.18.0.post0,<0.19.0)
57
+ Requires-Dist: torch (>=1.10.0) ; extra == "all" or extra == "llm" or extra == "pytorch"
58
+ Requires-Dist: tqdm
59
+ Requires-Dist: transformers (>=4.32.0,<5.0.0) ; extra == "all" or extra == "huggingface" or extra == "llm"
60
+ Requires-Dist: xgboost (>=1.5.2,<3)
61
+ Requires-Dist: ydata-profiling
62
+ Requires-Dist: yfinance (>=0.2.48,<0.3.0)
63
+ Description-Content-Type: text/markdown
64
+
65
+ # ValidMind Library
66
+
67
+ The ValidMind Library is a suite of developer tools and methods designed to automate the documentation and validation of your models.
68
+
69
+ Designed to be model agnostic, the ValidMind Library provides all the standard functionality without requiring you to rewrite any functions as long as your model is built in Python.
70
+
71
+ With a rich array of documentation tools and test suites, from documenting descriptions of your datasets to testing your models for weak spots and overfit areas, the ValidMind Library helps you automate model documentation by feeding the ValidMind Platform with documentation artifacts and test results.
72
+
73
+ ## What is ValidMind?
74
+
75
+ ValidMind helps developers, data scientists and risk and compliance stakeholders identify potential risks in their AI and large language models, and generate robust, high-quality model documentation that meets regulatory requirements.
76
+
77
+ [The ValidMind AI risk platform](https://docs.validmind.ai/about/overview.html) consists of two intertwined product offerings:
78
+
79
+ - **The ValidMind Library** — Designed to be incorporated into your existing model development environment, you use the ValidMind Library to run tests and log documentation to the ValidMind Platform. Driven by the power of open-source, the ValidMind Library welcomes contributions to our code and developer samples: [`validmind-library` @ GitHub](https://github.com/validmind/validmind-library)
80
+ - **The ValidMind Platform** — A cloud-hosted user interface allowing you to comprehensively track your model inventory throughout the entire model lifecycle according to the unique requirements of your organization. You use the ValidMind Platform to oversee your model risk management process via the customizable model inventory.
81
+
82
+ ### What do I need to get started with ValidMind?
83
+
84
+ > **All you need to get started with ValidMind is an account with us.**
85
+ >
86
+ > Signing up is FREE — **[Register with ValidMind](https://docs.validmind.ai/guide/configuration/register-with-validmind.html)**
87
+
88
+ That's right — you can run tests and log documentation even if you don't have a model available, so go ahead and [**Get started with the ValidMind Library**](https://docs.validmind.ai/developer/get-started-validmind-library.html)!
89
+
90
+ ### How do I do more with the ValidMind Library?
91
+
92
+ **[Explore our code samples!](https://docs.validmind.ai/developer/samples-jupyter-notebooks.html)**
93
+
94
+ Our selection of Jupyter Notebooks showcase the capabilities and features of the ValidMind Library, while also providing you with useful examples that you can build on and adapt for your own use cases.
95
+
96
+ ## Installation
97
+
98
+ To install the ValidMind Library and all optional dependencies, run:
99
+
100
+ ```bash
101
+ pip install validmind[all]
102
+ ```
103
+
104
+ To install the ValidMind Library without optional dependencies (core functionality only), run:
105
+
106
+ ```bash
107
+ pip install validmind
108
+ ```
109
+
110
+ ### Extra dependencies
111
+
112
+ The ValidMind Library has optional dependencies that can be installed separately to support additional model types and tests.
113
+
114
+ - **LLM Support**: To be able to run tests for Large Language Models (LLMs), install the `llm` extra:
115
+
116
+ ```bash
117
+ pip install validmind[llm]
118
+ ```
119
+
120
+ - **PyTorch Models**: To use pytorch models with the ValidMind Library, install the `torch` extra:
121
+
122
+ ```bash
123
+ pip install validmind[torch]
124
+ ```
125
+
126
+ - **Hugging Face Transformers**: To use Hugging Face Transformers models with the ValidMind Library, install the `transformers` extra:
127
+
128
+ ```bash
129
+ pip install validmind[transformers]
130
+ ```
131
+
132
+ - **R Models**: To use R models with the ValidMind Library, install the `r` extra:
133
+
134
+ ```bash
135
+ pip install validmind[r-support]
136
+ ```
137
+
@@ -0,0 +1,72 @@
1
+ # ValidMind Library
2
+
3
+ The ValidMind Library is a suite of developer tools and methods designed to automate the documentation and validation of your models.
4
+
5
+ Designed to be model agnostic, the ValidMind Library provides all the standard functionality without requiring you to rewrite any functions as long as your model is built in Python.
6
+
7
+ With a rich array of documentation tools and test suites, from documenting descriptions of your datasets to testing your models for weak spots and overfit areas, the ValidMind Library helps you automate model documentation by feeding the ValidMind Platform with documentation artifacts and test results.
8
+
9
+ ## What is ValidMind?
10
+
11
+ ValidMind helps developers, data scientists and risk and compliance stakeholders identify potential risks in their AI and large language models, and generate robust, high-quality model documentation that meets regulatory requirements.
12
+
13
+ [The ValidMind AI risk platform](https://docs.validmind.ai/about/overview.html) consists of two intertwined product offerings:
14
+
15
+ - **The ValidMind Library** — Designed to be incorporated into your existing model development environment, you use the ValidMind Library to run tests and log documentation to the ValidMind Platform. Driven by the power of open-source, the ValidMind Library welcomes contributions to our code and developer samples: [`validmind-library` @ GitHub](https://github.com/validmind/validmind-library)
16
+ - **The ValidMind Platform** — A cloud-hosted user interface allowing you to comprehensively track your model inventory throughout the entire model lifecycle according to the unique requirements of your organization. You use the ValidMind Platform to oversee your model risk management process via the customizable model inventory.
17
+
18
+ ### What do I need to get started with ValidMind?
19
+
20
+ > **All you need to get started with ValidMind is an account with us.**
21
+ >
22
+ > Signing up is FREE — **[Register with ValidMind](https://docs.validmind.ai/guide/configuration/register-with-validmind.html)**
23
+
24
+ That's right — you can run tests and log documentation even if you don't have a model available, so go ahead and [**Get started with the ValidMind Library**](https://docs.validmind.ai/developer/get-started-validmind-library.html)!
25
+
26
+ ### How do I do more with the ValidMind Library?
27
+
28
+ **[Explore our code samples!](https://docs.validmind.ai/developer/samples-jupyter-notebooks.html)**
29
+
30
+ Our selection of Jupyter Notebooks showcase the capabilities and features of the ValidMind Library, while also providing you with useful examples that you can build on and adapt for your own use cases.
31
+
32
+ ## Installation
33
+
34
+ To install the ValidMind Library and all optional dependencies, run:
35
+
36
+ ```bash
37
+ pip install validmind[all]
38
+ ```
39
+
40
+ To install the ValidMind Library without optional dependencies (core functionality only), run:
41
+
42
+ ```bash
43
+ pip install validmind
44
+ ```
45
+
46
+ ### Extra dependencies
47
+
48
+ The ValidMind Library has optional dependencies that can be installed separately to support additional model types and tests.
49
+
50
+ - **LLM Support**: To be able to run tests for Large Language Models (LLMs), install the `llm` extra:
51
+
52
+ ```bash
53
+ pip install validmind[llm]
54
+ ```
55
+
56
+ - **PyTorch Models**: To use pytorch models with the ValidMind Library, install the `torch` extra:
57
+
58
+ ```bash
59
+ pip install validmind[torch]
60
+ ```
61
+
62
+ - **Hugging Face Transformers**: To use Hugging Face Transformers models with the ValidMind Library, install the `transformers` extra:
63
+
64
+ ```bash
65
+ pip install validmind[transformers]
66
+ ```
67
+
68
+ - **R Models**: To use R models with the ValidMind Library, install the `r` extra:
69
+
70
+ ```bash
71
+ pip install validmind[r-support]
72
+ ```
@@ -10,7 +10,7 @@ description = "ValidMind Library"
10
10
  license = "Commercial License"
11
11
  name = "validmind"
12
12
  readme = "README.pypi.md"
13
- version = "2.5.25"
13
+ version = "2.6.7"
14
14
 
15
15
  [tool.poetry.dependencies]
16
16
  aiohttp = {extras = ["speedups"], version = "*"}
@@ -29,7 +29,7 @@ matplotlib = "*"
29
29
  mistune = "^3.0.2"
30
30
  nest-asyncio = "^1.6.0"
31
31
  nltk = "^3.8.1"
32
- numba = "<0.59.0" # TODO: https://github.com/validmind/developer-framework/pull/28
32
+ numba = "<0.59.0" # TODO: https://github.com/validmind/validmind-library/pull/28
33
33
  numpy = "*"
34
34
  openai = ">=1"
35
35
  pandas = ">=1.1,<=2.0.3"
@@ -39,7 +39,7 @@ polars = "*"
39
39
  pycocoevalcap = {version = "^1.2", optional = true}
40
40
  python = ">=3.8.1,<3.12"
41
41
  python-dotenv = "*"
42
- ragas = {version = ">=0.1.19,<0.1.22", optional = true}
42
+ ragas = {version = ">=0.2.3", optional = true}
43
43
  rouge = ">=1"
44
44
  rpy2 = {version = "^3.5.10", optional = true}
45
45
  scikit-learn = "*"
@@ -57,6 +57,7 @@ tqdm = "*"
57
57
  transformers = {version = "^4.32.0", optional = true}
58
58
  xgboost = ">=1.5.2,<3"
59
59
  ydata-profiling = "*"
60
+ yfinance = "^0.2.48"
60
61
 
61
62
  [tool.poetry.group.dev.dependencies]
62
63
  black = "^22.1.0"
@@ -3,25 +3,19 @@
3
3
  # SPDX-License-Identifier: AGPL-3.0 AND ValidMind Commercial
4
4
 
5
5
  """
6
- ValidMind’s Python Library is a library of developer tools and methods designed to automate
7
- the documentation and validation of your models.
6
+ The ValidMind Library is a suite of developer tools and methods designed to automate the documentation and validation of your models.
8
7
 
9
- The Library is designed to be model agnostic. If your model is built in Python, ValidMind's
10
- Python library will provide all the standard functionality without requiring your developers to rewrite any functions.
8
+ Designed to be model agnostic, the ValidMind Library provides all the standard functionality without requiring you to rewrite any functions as long as your model is built in Python.
11
9
 
12
- The Library provides a rich suite of documentation tools and test suites, from documenting
13
- descriptions of your dataset to testing your models for weak spots and overfit areas. The Library
14
- helps you automate the generation of model documentation by feeding the ValidMind platform with documentation
15
- artifacts and test results to the ValidMind platform.
10
+ With a rich array of documentation tools and test suites, from documenting descriptions of your datasets to testing your models for weak spots and overfit areas, the ValidMind Library helps you automate model documentation by feeding the ValidMind Platform with documentation artifacts and test results.
16
11
 
17
- To install the client library:
12
+ To install the ValidMind Library:
18
13
 
19
14
  ```bash
20
15
  pip install validmind
21
16
  ```
22
17
 
23
- To initialize the client library, paste the code snippet with the client integration details directly into your
24
- development source code, replacing this example with your own:
18
+ To initialize the ValidMind Library, paste the code snippet with the model identifier credentials directly into your development source code, replacing this example with your own:
25
19
 
26
20
  ```python
27
21
  import validmind as vm
@@ -34,9 +28,7 @@ vm.init(
34
28
  )
35
29
  ```
36
30
 
37
- After you have pasted the code snippet into your development source code and executed the code, the Python client
38
- library will register with ValidMind. You can now use the Library to document and test your models,
39
- and to upload to the ValidMind Platform.
31
+ After you have pasted the code snippet into your development source code and executed the code, the Python Library API will register with ValidMind. You can now use the ValidMind Library to document and test your models, and to upload to the ValidMind Platform.
40
32
  """
41
33
  import warnings
42
34
 
@@ -57,11 +49,11 @@ from .client import ( # noqa: E402
57
49
  run_documentation_tests,
58
50
  run_test_suite,
59
51
  )
60
- from .tests.decorator import metric, tags, tasks, test
52
+ from .tests.decorator import tags, tasks, test
61
53
 
62
54
  __all__ = [ # noqa
63
55
  "__version__",
64
- # Framework High Level API
56
+ # Python Library API
65
57
  "datasets",
66
58
  "errors",
67
59
  "get_test_suite",
@@ -69,7 +61,6 @@ __all__ = [ # noqa
69
61
  "init_dataset",
70
62
  "init_model",
71
63
  "init_r_model",
72
- "metric",
73
64
  "preview_template",
74
65
  "reload",
75
66
  "run_documentation_tests",
@@ -0,0 +1 @@
1
+ __version__ = "2.6.7"
@@ -2,17 +2,20 @@
2
2
  # See 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
6
7
  import re
7
8
  from concurrent.futures import ThreadPoolExecutor
8
- from typing import Union
9
+ from typing import List, Optional, Union
9
10
 
10
11
  from jinja2 import Template
11
12
 
12
- from validmind.utils import md_to_html
13
-
14
13
  from ..client_config import client_config
15
14
  from ..logging import get_logger
15
+ from ..utils import NumpyEncoder, md_to_html, test_id_to_name
16
+ from ..vm_models.figure import Figure
17
+ from ..vm_models.result import ResultTable
18
+ from .utils import DescriptionFuture, get_client_and_model
16
19
 
17
20
  __executor = ThreadPoolExecutor()
18
21
  __prompt = None
@@ -20,10 +23,6 @@ __prompt = None
20
23
  logger = get_logger(__name__)
21
24
 
22
25
 
23
- AI_REVISION_NAME = "Generated by ValidMind AI"
24
- DEFAULT_REVISION_NAME = "Default Description"
25
-
26
-
27
26
  def _load_prompt():
28
27
  global __prompt
29
28
 
@@ -55,7 +54,6 @@ def prompt_to_message(role, prompt):
55
54
  if start > last_index:
56
55
  content.append({"type": "text", "text": prompt[last_index:start]})
57
56
 
58
- # Image
59
57
  content.append({"type": "image_url", "image_url": {"url": match.group(1)}})
60
58
 
61
59
  last_index = end
@@ -67,79 +65,66 @@ def prompt_to_message(role, prompt):
67
65
  return {"role": role, "content": content}
68
66
 
69
67
 
70
- class DescriptionFuture:
71
- """This will be immediately returned from generate_description so that
72
- the tests can continue to be run in parallel while the description is
73
- retrieved asynchronously.
74
-
75
- The value will be retrieved later and if its not ready yet, it should
76
- block until it is.
77
- """
78
-
79
- def __init__(self, future):
80
- self._future = future
81
-
82
- def get_description(self):
83
- if isinstance(self._future, str):
84
- description = self._future
85
- else:
86
- # This will block until the future is completed
87
- description = self._future.result()
88
-
89
- return md_to_html(description, mathml=True)
90
-
91
-
92
68
  def generate_description(
93
69
  test_id: str,
94
70
  test_description: str,
95
- test_summary: str,
71
+ tables: List[ResultTable] = None,
96
72
  metric: Union[float, int] = None,
97
- figures: list = None,
73
+ figures: List[Figure] = None,
74
+ title: Optional[str] = None,
98
75
  ):
99
76
  """Generate the description for the test results"""
100
- if not test_summary and not figures and not metric:
77
+ if not tables and not figures and not metric:
101
78
  raise ValueError(
102
- "No summary, unit metric or figures provided - cannot generate description"
79
+ "No tables, unit metric or figures provided - cannot generate description"
103
80
  )
104
81
 
105
- # TODO: fix circular import
106
- from validmind.ai.utils import get_client_and_model
82
+ # # TODO: fix circular import
83
+ # from validmind.ai.utils import get_client_and_model
107
84
 
108
85
  client, model = get_client_and_model()
109
86
 
110
87
  # get last part of test id
111
- test_name = test_id.split(".")[-1]
112
- # truncate the test description to save time
113
- test_description = (
114
- f"{test_description[:500]}..."
115
- if len(test_description) > 500
116
- else test_description
117
- )
118
-
119
- if metric:
120
- metric_summary = f"**Metric Value**: {metric}"
121
- if test_summary:
122
- test_summary = metric_summary + "\n" + test_summary
123
- else:
124
- test_summary = metric_summary
88
+ test_name = title or test_id.split(".")[-1]
89
+
90
+ # TODO: fully support metrics
91
+ if metric is not None:
92
+ tables = [] if not tables else tables
93
+ tables.append(
94
+ ResultTable(
95
+ data=[
96
+ {"Metric": test_id_to_name(test_id), "Value": metric},
97
+ ],
98
+ )
99
+ )
125
100
 
126
- figures = [] if test_summary else figures
101
+ if tables:
102
+ summary = "\n---\n".join(
103
+ [
104
+ json.dumps(table.serialize(), cls=NumpyEncoder, separators=(",", ":"))
105
+ for table in tables
106
+ ]
107
+ )
108
+ else:
109
+ summary = None
127
110
 
128
111
  input_data = {
129
112
  "test_name": test_name,
130
113
  "test_description": test_description,
131
- "summary": test_summary,
132
- "figures": [figure._get_b64_url() for figure in figures],
114
+ "title": title,
115
+ "summary": summary,
116
+ "figures": [figure._get_b64_url() for figure in ([] if tables else figures)],
133
117
  }
134
118
  system, user = _load_prompt()
135
119
 
120
+ messages = [
121
+ prompt_to_message("system", system.render(input_data)),
122
+ prompt_to_message("user", user.render(input_data)),
123
+ ]
136
124
  response = client.chat.completions.create(
137
125
  model=model,
138
126
  temperature=0.0,
139
- messages=[
140
- prompt_to_message("system", system.render(input_data)),
141
- prompt_to_message("user", user.render(input_data)),
142
- ],
127
+ messages=messages,
143
128
  )
144
129
 
145
130
  return response.choices[0].message.content
@@ -148,18 +133,20 @@ def generate_description(
148
133
  def background_generate_description(
149
134
  test_id: str,
150
135
  test_description: str,
151
- test_summary: str,
152
- figures: list = None,
136
+ tables: List[ResultTable] = None,
137
+ figures: List[Figure] = None,
153
138
  metric: Union[int, float] = None,
139
+ title: Optional[str] = None,
154
140
  ):
155
141
  def wrapped():
156
142
  try:
157
143
  return generate_description(
158
144
  test_id=test_id,
159
145
  test_description=test_description,
160
- test_summary=test_summary,
146
+ tables=tables,
161
147
  figures=figures,
162
148
  metric=metric,
149
+ title=title,
163
150
  )
164
151
  except Exception as e:
165
152
  logger.error(f"Failed to generate description: {e}")
@@ -169,14 +156,14 @@ def background_generate_description(
169
156
  return DescriptionFuture(__executor.submit(wrapped))
170
157
 
171
158
 
172
- def get_description_metadata(
173
- test_id,
174
- default_description,
175
- summary=None,
176
- figures=None,
177
- metric=None,
178
- prefix="metric_description",
179
- should_generate=True,
159
+ def get_result_description(
160
+ test_id: str,
161
+ test_description: str,
162
+ tables: List[ResultTable] = None,
163
+ figures: List[Figure] = None,
164
+ metric: Union[int, float] = None,
165
+ should_generate: bool = True,
166
+ title: Optional[str] = None,
180
167
  ):
181
168
  """Get Metadata Dictionary for a Test or Metric Result
182
169
 
@@ -184,24 +171,23 @@ def get_description_metadata(
184
171
  description and returns a metadata object that can be logged with the test results.
185
172
 
186
173
  By default, the description is generated by an LLM that will interpret the test
187
- results and provide a human-readable description. If the summary or figures are
174
+ results and provide a human-readable description. If the tables or figures are
188
175
  not provided, or the `VALIDMIND_LLM_DESCRIPTIONS_ENABLED` environment variable is
189
176
  set to `0` or `false` or no LLM has been configured, the default description will
190
177
  be used as the test result description.
191
178
 
192
- Note: Either the summary or figures must be provided to generate the description.
179
+ Note: Either the tables or figures must be provided to generate the description.
193
180
 
194
181
  Args:
195
182
  test_id (str): The test ID
196
- default_description (str): The default description for the test
197
- summary (Any): The test summary or results to interpret
183
+ test_description (str): The default description for the test
184
+ tables (Any): The test tables or results to interpret
198
185
  figures (List[Figure]): The figures to attach to the test suite result
199
186
  metric (Union[int, float]): Unit metrics attached to the test result
200
- prefix (str): The prefix to use for the content ID (Default: "metric_description")
201
187
  should_generate (bool): Whether to generate the description or not (Default: True)
202
188
 
203
189
  Returns:
204
- dict: The metadata object to be logged with the test results
190
+ str: The description to be logged with the test results
205
191
  """
206
192
  # Check the feature flag first, then the environment variable
207
193
  llm_descriptions_enabled = (
@@ -214,27 +200,22 @@ def get_description_metadata(
214
200
 
215
201
  if (
216
202
  should_generate
217
- and (summary or figures)
203
+ and (tables or figures)
218
204
  and llm_descriptions_enabled
219
205
  and is_configured()
220
206
  ):
221
- revision_name = AI_REVISION_NAME
222
-
223
207
  # get description future and set it as the description in the metadata
224
208
  # this will lazily retrieved so it can run in the background in parallel
225
209
  description = background_generate_description(
226
210
  test_id=test_id,
227
- test_description=default_description,
228
- test_summary=summary,
211
+ test_description=test_description,
212
+ tables=tables,
229
213
  figures=figures,
230
214
  metric=metric,
215
+ title=title,
231
216
  )
232
217
 
233
218
  else:
234
- revision_name = DEFAULT_REVISION_NAME
235
- description = md_to_html(default_description, mathml=True)
219
+ description = md_to_html(test_description, mathml=True)
236
220
 
237
- return {
238
- "content_id": f"{prefix}:{test_id}::{revision_name}",
239
- "text": description,
240
- }
221
+ return description
@@ -37,11 +37,11 @@ class Context:
37
37
  pass
38
38
 
39
39
  def load(self, input_data):
40
- # this task can accept a dict or a test result object from the library
40
+ # this task can accept a dict or a test result object from the ValidMind Library
41
41
  if isinstance(input_data, dict):
42
42
  return input_data
43
43
 
44
- # we are likely running outside of the library and need to convert
44
+ # we are likely running outside of the ValidMind Library and need to convert
45
45
  # the test result object to a dictionary
46
46
  test_result = input_data
47
47
 
@@ -7,8 +7,8 @@ from urllib.parse import urljoin
7
7
 
8
8
  from openai import AzureOpenAI, Client, OpenAI
9
9
 
10
- from ..api_client import get_ai_key, get_api_host
11
10
  from ..logging import get_logger
11
+ from ..utils import md_to_html
12
12
 
13
13
  logger = get_logger(__name__)
14
14
 
@@ -19,6 +19,28 @@ __model = None
19
19
  __ack = None
20
20
 
21
21
 
22
+ class DescriptionFuture:
23
+ """This will be immediately returned from generate_description so that
24
+ the tests can continue to be run in parallel while the description is
25
+ retrieved asynchronously.
26
+
27
+ The value will be retrieved later and if its not ready yet, it should
28
+ block until it is.
29
+ """
30
+
31
+ def __init__(self, future):
32
+ self._future = future
33
+
34
+ def get_description(self):
35
+ if isinstance(self._future, str):
36
+ description = self._future
37
+ else:
38
+ # This will block until the future is completed
39
+ description = self._future.result()
40
+
41
+ return md_to_html(description, mathml=True)
42
+
43
+
22
44
  def get_client_and_model():
23
45
  """Get model and client to use for generating interpretations
24
46
 
@@ -58,6 +80,9 @@ def get_client_and_model():
58
80
 
59
81
  else:
60
82
  try:
83
+ # TODO: fix circular import
84
+ from ..api_client import get_ai_key, get_api_host
85
+
61
86
  response = get_ai_key()
62
87
  __client = Client(
63
88
  base_url=(