ai-critic 0.2.0__py3-none-any.whl → 0.2.1__py3-none-any.whl

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.
ai_critic/critic.py CHANGED
@@ -10,7 +10,7 @@ from ai_critic.evaluators.summary import HumanSummary
10
10
  class AICritic:
11
11
  """
12
12
  Automated reviewer for scikit-learn models.
13
- Produces a multi-layered risk assessment.
13
+ Produces a multi-layered risk assessment with visualizations.
14
14
  """
15
15
 
16
16
  def __init__(self, model, X, y):
@@ -18,7 +18,7 @@ class AICritic:
18
18
  self.X = X
19
19
  self.y = y
20
20
 
21
- def evaluate(self, view="all"):
21
+ def evaluate(self, view="all", plot=False):
22
22
  """
23
23
  view:
24
24
  - "all"
@@ -26,6 +26,9 @@ class AICritic:
26
26
  - "technical"
27
27
  - "details"
28
28
  - list of views
29
+ plot:
30
+ - True: gera gráficos de learning curve, heatmap e robustez
31
+ - False: sem gráficos
29
32
  """
30
33
 
31
34
  # =========================
@@ -33,24 +36,29 @@ class AICritic:
33
36
  # =========================
34
37
  details = {}
35
38
 
36
- data_report = data(self.X, self.y)
39
+ # Data analysis + heatmap
40
+ data_report = data(self.X, self.y, plot=plot)
37
41
  details["data"] = data_report
38
42
 
43
+ # Model configuration
39
44
  details["config"] = config(
40
45
  self.model,
41
46
  n_samples=data_report["n_samples"],
42
47
  n_features=data_report["n_features"]
43
48
  )
44
49
 
50
+ # Performance + learning curve
45
51
  details["performance"] = performance(
46
- self.model, self.X, self.y
52
+ self.model, self.X, self.y, plot=plot
47
53
  )
48
54
 
55
+ # Robustness + CV clean vs noisy
49
56
  details["robustness"] = robustness(
50
57
  self.model,
51
58
  self.X,
52
59
  self.y,
53
- leakage_suspected=data_report["data_leakage"]["suspected"]
60
+ leakage_suspected=data_report["data_leakage"]["suspected"],
61
+ plot=plot
54
62
  )
55
63
 
56
64
  # =========================
@@ -1,49 +1,57 @@
1
1
  import numpy as np
2
+ import matplotlib.pyplot as plt
3
+ import seaborn as sns
4
+ import pandas as pd
2
5
 
3
- def evaluate(X, y):
6
+ def evaluate(X, y, plot=False):
4
7
  report = {
5
8
  "n_samples": int(X.shape[0]),
6
9
  "n_features": int(X.shape[1]),
7
10
  "has_nan": bool(np.isnan(X).any() or np.isnan(y).any())
8
11
  }
9
12
 
10
- # Class balance (JSON-safe)
13
+ # Class balance
11
14
  if len(set(y)) < 20:
12
15
  values, counts = np.unique(y, return_counts=True)
13
- report["class_balance"] = {
14
- int(v): int(c) for v, c in zip(values, counts)
15
- }
16
+ report["class_balance"] = {int(v): int(c) for v, c in zip(values, counts)}
16
17
  else:
17
18
  report["class_balance"] = "many_classes"
18
19
 
19
- # 🔎 Data leakage detection (high correlation with target)
20
+ # Data leakage detection
20
21
  suspicious_features = []
21
-
22
22
  y_mean = np.mean(y)
23
23
  y_centered = y - y_mean
24
-
25
24
  for i in range(X.shape[1]):
26
25
  feature = X[:, i]
27
-
28
26
  if np.std(feature) == 0:
29
27
  continue
30
-
31
28
  corr = np.corrcoef(feature, y_centered)[0, 1]
32
-
33
29
  if abs(corr) > 0.98:
34
- suspicious_features.append({
35
- "feature_index": int(i),
36
- "correlation": float(corr)
37
- })
30
+ suspicious_features.append({"feature_index": int(i), "correlation": float(corr)})
38
31
 
39
32
  report["data_leakage"] = {
40
33
  "suspected": bool(len(suspicious_features) > 0),
41
34
  "details": suspicious_features,
42
35
  "message": (
43
36
  "Highly correlated features may reveal the target directly."
44
- if suspicious_features
45
- else "No obvious data leakage detected."
37
+ if suspicious_features else "No obvious data leakage detected."
46
38
  )
47
39
  }
48
40
 
41
+ # =========================
42
+ # Heatmap de correlação Features x Target
43
+ # =========================
44
+ if plot:
45
+ feature_names = [f"feat_{i}" for i in range(X.shape[1])]
46
+ df = pd.DataFrame(X, columns=feature_names)
47
+ df['target'] = y
48
+ corr_matrix = df.corr()
49
+
50
+ plt.figure(figsize=(10,8))
51
+ sns.heatmap(corr_matrix, annot=False, cmap="coolwarm") # <- removi os números
52
+ plt.title("Correlação Features x Target")
53
+ plt.tight_layout()
54
+ plt.savefig("heatmap_correlation.png", dpi=150) # Salva automaticamente
55
+ plt.show()
56
+
49
57
  return report
@@ -1,20 +1,43 @@
1
- from sklearn.model_selection import cross_val_score
1
+ from sklearn.model_selection import cross_val_score, learning_curve
2
+ import matplotlib.pyplot as plt
3
+ import numpy as np
2
4
 
3
- def evaluate(model, X, y):
5
+ def evaluate(model, X, y, plot=False):
6
+ # CV básico
4
7
  scores = cross_val_score(model, X, y, cv=3)
5
-
6
8
  mean = float(scores.mean())
7
9
  std = float(scores.std())
8
-
9
10
  suspicious = mean > 0.995
10
11
 
11
- return {
12
+ result = {
12
13
  "cv_mean_score": mean,
13
14
  "cv_std": std,
14
15
  "suspiciously_perfect": suspicious,
15
16
  "message": (
16
17
  "Perfect CV score detected — possible data leakage."
17
- if suspicious
18
- else "CV performance within expected range."
18
+ if suspicious else "CV performance within expected range."
19
19
  )
20
20
  }
21
+
22
+ # =========================
23
+ # Learning curve
24
+ # =========================
25
+ if plot:
26
+ train_sizes, train_scores, test_scores = learning_curve(
27
+ model, X, y, cv=3, train_sizes=np.linspace(0.1, 1.0, 5)
28
+ )
29
+ plt.figure(figsize=(6,4))
30
+ plt.plot(train_sizes, np.mean(train_scores, axis=1), label="Treino")
31
+ plt.plot(train_sizes, np.mean(test_scores, axis=1), label="Validação")
32
+ plt.fill_between(train_sizes,
33
+ np.mean(test_scores, axis=1)-np.std(test_scores, axis=1),
34
+ np.mean(test_scores, axis=1)+np.std(test_scores, axis=1),
35
+ alpha=0.2)
36
+ plt.xlabel("Amostra de treino")
37
+ plt.ylabel("Score")
38
+ plt.title("Learning Curve")
39
+ plt.legend()
40
+ plt.tight_layout()
41
+ plt.show()
42
+
43
+ return result
@@ -1,10 +1,10 @@
1
1
  import numpy as np
2
2
  from sklearn.base import clone
3
3
  from sklearn.model_selection import cross_val_score
4
+ import matplotlib.pyplot as plt
4
5
 
5
- def evaluate(model, X, y, leakage_suspected=False):
6
+ def evaluate(model, X, y, leakage_suspected=False, plot=False):
6
7
  noise_level = 0.02 # 2% relative noise
7
-
8
8
  scale = np.std(X)
9
9
  noise = np.random.normal(0, noise_level * scale, X.shape)
10
10
  X_noisy = X + noise
@@ -12,18 +12,12 @@ def evaluate(model, X, y, leakage_suspected=False):
12
12
  model_clean = clone(model)
13
13
  model_noisy = clone(model)
14
14
 
15
- score_clean = cross_val_score(
16
- model_clean, X, y, cv=3, n_jobs=1
17
- ).mean()
18
-
19
- score_noisy = cross_val_score(
20
- model_noisy, X_noisy, y, cv=3, n_jobs=1
21
- ).mean()
22
-
15
+ score_clean = cross_val_score(model_clean, X, y, cv=3, n_jobs=1).mean()
16
+ score_noisy = cross_val_score(model_noisy, X_noisy, y, cv=3, n_jobs=1).mean()
23
17
  drop = score_clean - score_noisy
24
18
 
25
19
  # =========================
26
- # Semantic robustness logic
20
+ # Verdict
27
21
  # =========================
28
22
  if leakage_suspected and score_clean > 0.98:
29
23
  verdict = "misleading"
@@ -38,6 +32,19 @@ def evaluate(model, X, y, leakage_suspected=False):
38
32
  verdict = "stable"
39
33
  message = "Model shows acceptable robustness to noise."
40
34
 
35
+ # =========================
36
+ # Plot CV Clean vs Noisy
37
+ # =========================
38
+ if plot:
39
+ plt.figure(figsize=(4,4))
40
+ plt.bar(["Original", "Com Ruído"], [score_clean, score_noisy], color=['green','red'])
41
+ plt.ylabel("CV Score")
42
+ plt.title("Robustez do Modelo")
43
+ plt.ylim(0, 1)
44
+ plt.tight_layout()
45
+ plt.savefig("robustness.png", dpi=150) # Salva automaticamente
46
+ plt.show()
47
+
41
48
  return {
42
49
  "cv_score_original": float(score_clean),
43
50
  "cv_score_noisy": float(score_noisy),
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ai-critic
3
- Version: 0.2.0
3
+ Version: 0.2.1
4
4
  Summary: Fast AI evaluator for scikit-learn models
5
5
  Author-email: Luiz Seabra <filipedemarco@yahoo.com>
6
6
  Requires-Python: >=3.9
@@ -8,68 +8,71 @@ Description-Content-Type: text/markdown
8
8
  Requires-Dist: numpy
9
9
  Requires-Dist: scikit-learn
10
10
 
11
- # ai-critic
11
+ # ai-critic: Automated Risk Auditor for Machine Learning Models**
12
12
 
13
- Automated Risk Auditor for Machine Learning Models
13
+ ---
14
14
 
15
- [![PyPI version](https://img.shields.io/pypi/v/ai-critic.svg)](https://pypi.org/project/ai-critic/)
16
- [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
15
+ ## 🚀 What is ai-critic?
17
16
 
18
- ## 🚀 O que é ai-critic?
17
+ `ai-critic` é um **auditor de risco automatizado baseado em heurísticas** para modelos de *machine learning*. Ele avalia modelos treinados antes da implantação e traduz riscos técnicos de ML em decisões claras e centradas no ser humano.
19
18
 
20
- **ai-critic** é um auditor de risco automatizado e baseado em heurísticas para modelos de *machine learning*. Ele avalia modelos treinados antes da implantação e traduz riscos técnicos de ML em decisões claras e centradas no ser humano.
21
-
22
- Em vez de apenas relatar métricas, **ai-critic** responde a uma pergunta crítica:
19
+ Em vez de apenas relatar métricas, o `ai-critic` responde à pergunta crítica:
23
20
 
24
21
  > “Este modelo pode ser implantado com segurança?”
25
22
 
26
- Ele faz isso analisando:
27
- * **Integridade dos Dados:** (vazamento de dados, desequilíbrio, valores NaNs)
23
+ Ele faz isso analisando as principais áreas de risco:
24
+
25
+ * **Integridade dos Dados:** (*data leakage*, desequilíbrio, NaNs)
28
26
  * **Estrutura do Modelo:** (risco de *overfitting*, complexidade)
29
27
  * **Comportamento de Validação:** (pontuações suspeitamente perfeitas)
30
28
  * **Robustez:** (sensibilidade a ruído)
31
29
 
32
30
  Os resultados são organizados em três camadas semânticas para diferentes *stakeholders*:
33
- 1. **Executiva:** (tomadores de decisão)
34
- 2. **Técnica:** (engenheiros de ML)
35
- 3. **Detalhes:** (auditores e depuração)
36
31
 
37
- ## 🎯 Por que ai-critic existe: Filosofia Central
32
+ * **Executiva:** (tomadores de decisão)
33
+ * **Técnica:** (engenheiros de ML)
34
+ * **Detalhada:** (auditores e depuração)
35
+
36
+ ## 🎯 Por que o ai-critic Existe: Filosofia Central
38
37
 
39
38
  A maioria das ferramentas de ML:
39
+
40
40
  * assume que métricas = verdade
41
41
  * confia cegamente na validação cruzada
42
- * expõe números brutos sem interpretação
42
+ * despeja números brutos sem interpretação
43
43
 
44
- **ai-critic é cético por design.**
44
+ O `ai-critic` é cético por design.
45
45
 
46
46
  Ele trata:
47
- * pontuações perfeitas como sinais, não como sucesso
48
- * métricas de robustez como dependentes do contexto
49
- * a implantação como uma decisão de risco, não um limite de métrica
47
+
48
+ * pontuações perfeitas como **sinais**, não sucesso
49
+ * métricas de robustez como **dependentes do contexto**
50
+ * implantação como uma **decisão de risco**, não um limite de métrica
50
51
 
51
52
  A filosofia central é: **Métricas não falham modelos — o contexto falha.**
52
53
 
53
- ai-critic aplica heurísticas de raciocínio humano à avaliação de *machine learning*:
54
+ O `ai-critic` aplica heurísticas de raciocínio humano à avaliação de ML:
55
+
54
56
  * “Isso é bom demais para ser verdade?”
55
- * “Isso pode estar vazando o alvo?”
56
- * “A robustez ainda importa se a linha de base estiver errada?”
57
+ * “Isso pode estar vazando o alvo (*target*)?”
58
+ * “A robustez importa se a linha de base estiver errada?”
57
59
 
58
60
  ## 🛠️ Instalação
59
61
 
60
- Você pode instalar `ai-critic` usando pip:
62
+ Instale o `ai-critic` via pip:
61
63
 
62
64
  ```bash
63
65
  pip install ai-critic
64
66
  ```
65
67
 
66
68
  **Requisitos:**
69
+
67
70
  * Python ≥ 3.8
68
- * scikit-learn
71
+ * `scikit-learn`
69
72
 
70
73
  ## 💡 Início Rápido
71
74
 
72
- Audite seu modelo treinado em poucas linhas de código:
75
+ Audite seu modelo treinado em apenas algumas linhas:
73
76
 
74
77
  ```python
75
78
  from sklearn.datasets import load_breast_cancer
@@ -79,29 +82,30 @@ from ai_critic import AICritic
79
82
  # 1. Carregar dados e treinar um modelo (exemplo)
80
83
  X, y = load_breast_cancer(return_X_y=True)
81
84
  model = RandomForestClassifier(max_depth=20, random_state=42)
82
- model.fit(X, y) # O modelo precisa estar treinado
85
+ model.fit(X, y) # O modelo deve estar treinado
83
86
 
84
87
  # 2. Inicializar e avaliar com ai-critic
85
88
  critic = AICritic(model, X, y)
86
89
  report = critic.evaluate()
87
90
 
88
- # O padrão é a visualização 'all' (todas as camadas)
91
+ # A visualização padrão é 'all' (todas as camadas)
89
92
  print(report)
90
93
  ```
91
94
 
92
95
  ## 🧩 Saída Multi-Camadas
93
96
 
94
- `ai-critic` nunca despeja tudo de uma vez. Ele estrutura os resultados em camadas de decisão claras.
97
+ O `ai-critic` nunca despeja tudo de uma vez. Ele estrutura os resultados em camadas de decisão claras.
95
98
 
96
- ### 🔹 Visão Executiva (`view="executive"`)
99
+ ### 🔹 Visualização Executiva (`view="executive"`)
97
100
 
98
- Projetada para CTOs, gerentes e *stakeholders*. Zero jargão de ML.
101
+ Projetado para CTOs, gerentes e *stakeholders*. Sem jargão de ML.
99
102
 
100
103
  ```python
101
104
  critic.evaluate(view="executive")
102
105
  ```
103
106
 
104
107
  **Exemplo de Saída:**
108
+
105
109
  ```json
106
110
  {
107
111
  "verdict": "❌ Não Confiável",
@@ -111,15 +115,16 @@ critic.evaluate(view="executive")
111
115
  }
112
116
  ```
113
117
 
114
- ### 🔹 Visão Técnica (`view="technical"`)
118
+ ### 🔹 Visualização Técnica (`view="technical"`)
115
119
 
116
- Projetada para engenheiros de ML. É acionável, diagnóstica e focada no que precisa ser corrigido.
120
+ Projetado para engenheiros de ML. Acionável, diagnóstico e focado no que precisa ser corrigido.
117
121
 
118
122
  ```python
119
123
  critic.evaluate(view="technical")
120
124
  ```
121
125
 
122
126
  **Exemplo de Saída:**
127
+
123
128
  ```json
124
129
  {
125
130
  "key_risks": [
@@ -141,22 +146,23 @@ critic.evaluate(view="technical")
141
146
  }
142
147
  ```
143
148
 
144
- ### 🔹 Visão Detalhada (`view="details"`)
149
+ ### 🔹 Visualização Detalhada (`view="details"`)
145
150
 
146
- Projetada para auditoria, depuração e conformidade.
151
+ Projetado para auditoria, depuração e conformidade.
147
152
 
148
153
  ```python
149
154
  critic.evaluate(view="details")
150
155
  ```
151
156
 
152
157
  Inclui:
158
+
153
159
  * Métricas brutas
154
- * Correlações
160
+ * Correlações de recursos
155
161
  * Pontuações de robustez
156
162
  * Avisos estruturais
157
163
  * Rastreabilidade completa
158
164
 
159
- ### 🔹 Visão Combinada (`view="all"`)
165
+ ### 🔹 Visualização Combinada (`view="all"`)
160
166
 
161
167
  Retorna todas as três camadas em um único dicionário.
162
168
 
@@ -165,6 +171,7 @@ critic.evaluate(view="all")
165
171
  ```
166
172
 
167
173
  **Retorna:**
174
+
168
175
  ```json
169
176
  {
170
177
  "executive": {...},
@@ -179,9 +186,9 @@ critic.evaluate(view="all")
179
186
 
180
187
  | Parâmetro | Descrição |
181
188
  | :--- | :--- |
182
- | `model` | Modelo `scikit-learn` treinado. |
183
- | `X` | Matriz de recursos (features). |
184
- | `y` | Vetor alvo (target). |
189
+ | `model` | Modelo `scikit-learn` treinado |
190
+ | `X` | Matriz de recursos |
191
+ | `y` | Vetor alvo |
185
192
 
186
193
  **Uso:** `AICritic(model, X, y)`
187
194
 
@@ -189,24 +196,24 @@ critic.evaluate(view="all")
189
196
 
190
197
  | Parâmetro | Descrição |
191
198
  | :--- | :--- |
192
- | `view` | A camada de saída desejada: `"executive"`, `"technical"`, `"details"`, ou `"all"` (padrão). |
199
+ | `view` | Camada de saída desejada: `"executive"`, `"technical"`, `"details"`, ou `"all"` (padrão) |
193
200
 
194
201
  **Uso:** `evaluate(view="all")`
195
202
 
196
- ## 🧠 O que ai-critic Detecta
203
+ ## 🧠 O que o ai-critic Detecta
197
204
 
198
205
  | Categoria | Riscos Detectados |
199
206
  | :--- | :--- |
200
- | **🔍 Riscos de Dados** | Vazamento de alvo via correlação, NaNs, Desequilíbrio de classe. |
201
- | **🧱 Riscos Estruturais** | Árvores excessivamente complexas, Altas proporções de recurso/amostra, *Configuration smells*. |
202
- | **📈 Riscos de Validação** | Pontuações de CV suspeitamente perfeitas, Variância irrealista. |
203
- | **🧪 Riscos de Robustez** | Sensibilidade a ruído, Robustez enganosa quando a linha de base está inflada. |
207
+ | **🔍 Riscos de Dados** | Vazamento de alvo via correlação, NaNs, desequilíbrio de classes |
208
+ | **🧱 Riscos Estruturais** | Árvores excessivamente complexas, altas taxas de recurso/amostra, *configuration smells* |
209
+ | **📈 Riscos de Validação** | Pontuações de CV suspeitosamente perfeitas, variância irreal |
210
+ | **🧪 Riscos de Robustez** | Sensibilidade a ruído, robustez enganosa se a linha de base estiver inflada |
204
211
 
205
- ### 🧪 Exemplo: Detecção de Vazamento de Dados
212
+ ## 🧪 Exemplo: Detectando Vazamento de Dados
206
213
 
207
214
  ```python
208
215
  import numpy as np
209
- # ... (código de importação e modelo)
216
+ # ... (imports e código do modelo)
210
217
 
211
218
  # Vazamento artificial: adicionando o alvo como um recurso
212
219
  X_leaky = np.hstack([X, y.reshape(-1, 1)])
@@ -217,7 +224,8 @@ executive_report = critic.evaluate(view="executive")
217
224
  print(executive_report)
218
225
  ```
219
226
 
220
- **Resultado (Executive View):**
227
+ **Saída (Visualização Executiva):**
228
+
221
229
  ```
222
230
  ❌ Não Confiável
223
231
  Forte evidência de vazamento de dados inflando o desempenho do modelo.
@@ -225,26 +233,26 @@ Forte evidência de vazamento de dados inflando o desempenho do modelo.
225
233
 
226
234
  ## 🛡️ Melhores Práticas
227
235
 
228
- * Execute `ai-critic` antes da implantação.
236
+ * Execute o `ai-critic` antes da implantação.
229
237
  * Nunca confie cegamente em pontuações de CV perfeitas.
230
- * Use a **Visão Executiva** no seu pipeline de CI/CD como um *gate* de modelo.
231
- * Use a **Visão Técnica** durante a iteração do modelo.
232
- * Use a **Visão Detalhada** para auditorias e conformidade.
238
+ * Use a Visualização Executiva em seu *pipeline* de CI/CD como um portão de modelo.
239
+ * Use a Visualização Técnica durante a iteração do modelo.
240
+ * Use a Visualização Detalhada para auditoria e conformidade.
233
241
 
234
242
  ## 🧭 Casos de Uso Típicos
235
243
 
236
- * Auditorias de modelo pré-implantação.
237
- * Governança e conformidade de ML.
238
- * *Gates* de modelo em CI/CD.
239
- * Ensino de ceticismo em ML.
240
- * Explicação de risco de ML para *stakeholders* não técnicos.
244
+ * Auditorias de modelo pré-implantação
245
+ * Governança e conformidade de ML
246
+ * Portões de modelo CI/CD
247
+ * Ensino de ceticismo em ML
248
+ * Explicação de risco de ML para *stakeholders* não técnicos
241
249
 
242
250
  ## 📄 Licença
243
251
 
244
- Distribuído sob a **Licença MIT**.
252
+ Distribuído sob a Licença MIT.
245
253
 
246
254
  ## 🧠 Nota Final
247
255
 
248
- `ai-critic` não é uma ferramenta de *benchmark*. **É uma ferramenta de decisão.**
256
+ O `ai-critic` não é uma ferramenta de *benchmarking*. É uma **ferramenta de decisão**.
249
257
 
250
- Se um modelo falhar aqui, isso não significa que ele é ruim — significa que ele não deve ser confiável **ainda**.
258
+ Se um modelo falhar aqui, não significa que seja ruim — significa que **não deve ser confiável ainda**.
@@ -0,0 +1,12 @@
1
+ ai_critic/__init__.py,sha256=H6DlPMmbcFUamhsNULPLk9vHx81XCiXuKKf63EJ8eM0,53
2
+ ai_critic/critic.py,sha256=4fKwR7LtXGlQihstZWqauBZT2BmbaSLpuO9FBV42tus,2287
3
+ ai_critic/evaluators/__init__.py,sha256=Jmmz9899YD__4Uj3bA6R7vYOwlH2giPc1wuCSLv7FVw,170
4
+ ai_critic/evaluators/config.py,sha256=gBXaS8Qxl14f40JnvMWgA0Z0SGEtbCuCHpTOPem0H90,1163
5
+ ai_critic/evaluators/data.py,sha256=YAK5NkwCeJOny_UueZ5ALwvEcRDIbEck404eV2oqWnc,1871
6
+ ai_critic/evaluators/performance.py,sha256=JpXM_7-RN_q_FvXga4TkSVBBo90Nk0AdBWbjmS-D1oI,1469
7
+ ai_critic/evaluators/robustness.py,sha256=UiGTpE-h2d2U19p1Ce4XpcMv4NMb2I4MmrlTrsPTIag,1808
8
+ ai_critic/evaluators/summary.py,sha256=drP43HrWu1WJfLiUIQVczJ5Qs8sfoywpXFdavd2ogQI,3516
9
+ ai_critic-0.2.1.dist-info/METADATA,sha256=TFYwZAG1AvWnvVweQpBS3p9obX11h_M_CNVFgzt6MLs,7064
10
+ ai_critic-0.2.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
11
+ ai_critic-0.2.1.dist-info/top_level.txt,sha256=TRyZkm1vyLLcFDg_80yeg5cHvPis_oW1Ti170417jkw,10
12
+ ai_critic-0.2.1.dist-info/RECORD,,
@@ -1,12 +0,0 @@
1
- ai_critic/__init__.py,sha256=H6DlPMmbcFUamhsNULPLk9vHx81XCiXuKKf63EJ8eM0,53
2
- ai_critic/critic.py,sha256=tGplbcJQgvXycuj9mIkYJkNQEMxHGC2Fpv946b05Ol4,1944
3
- ai_critic/evaluators/__init__.py,sha256=Jmmz9899YD__4Uj3bA6R7vYOwlH2giPc1wuCSLv7FVw,170
4
- ai_critic/evaluators/config.py,sha256=gBXaS8Qxl14f40JnvMWgA0Z0SGEtbCuCHpTOPem0H90,1163
5
- ai_critic/evaluators/data.py,sha256=CStPVKSNR9lXFtLNsNleH-uc52_RMKo2rc3cfFzeTTs,1315
6
- ai_critic/evaluators/performance.py,sha256=SWknmNiS9G7WWwmxJJNLL3R5i_I1ZLBIDLW_71jkKBQ,521
7
- ai_critic/evaluators/robustness.py,sha256=2xAZe-puoUE9tde5giKxlGpPs7oyU4y2t8DR4bGW0zs,1365
8
- ai_critic/evaluators/summary.py,sha256=drP43HrWu1WJfLiUIQVczJ5Qs8sfoywpXFdavd2ogQI,3516
9
- ai_critic-0.2.0.dist-info/METADATA,sha256=L78H-7HH9B47puaVCkTNfO44AqSOkPMzifVS2wQ6E98,7256
10
- ai_critic-0.2.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
11
- ai_critic-0.2.0.dist-info/top_level.txt,sha256=TRyZkm1vyLLcFDg_80yeg5cHvPis_oW1Ti170417jkw,10
12
- ai_critic-0.2.0.dist-info/RECORD,,