ai-critic 0.2.1__py3-none-any.whl → 0.2.3__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,50 +10,93 @@ 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 with visualizations.
13
+
14
+ Produces a multi-layered risk assessment including:
15
+ - Data integrity analysis
16
+ - Model configuration sanity checks
17
+ - Performance evaluation (CV + learning curves)
18
+ - Robustness & leakage heuristics
19
+ - Human-readable executive and technical summaries
14
20
  """
15
21
 
16
- def __init__(self, model, X, y):
22
+ def __init__(self, model, X, y, random_state=None):
23
+ """
24
+ Parameters
25
+ ----------
26
+ model : sklearn-compatible estimator
27
+ X : np.ndarray
28
+ Feature matrix
29
+ y : np.ndarray
30
+ Target vector
31
+ random_state : int or None
32
+ Global seed for reproducibility (optional)
33
+ """
17
34
  self.model = model
18
35
  self.X = X
19
36
  self.y = y
37
+ self.random_state = random_state
20
38
 
21
39
  def evaluate(self, view="all", plot=False):
22
40
  """
23
- view:
24
- - "all"
25
- - "executive"
26
- - "technical"
27
- - "details"
28
- - list of views
29
- plot:
30
- - True: gera gráficos de learning curve, heatmap e robustez
31
- - False: sem gráficos
41
+ Evaluate the model.
42
+
43
+ Parameters
44
+ ----------
45
+ view : str or list
46
+ - "all" : full payload (default)
47
+ - "executive" : executive summary only
48
+ - "technical" : technical summary only
49
+ - "details" : low-level evaluator outputs
50
+ - list : subset of views (e.g. ["executive", "details"])
51
+ plot : bool
52
+ - True : generate plots (learning curve, heatmap, robustness)
53
+ - False : no plots
54
+
55
+ Returns
56
+ -------
57
+ dict
58
+ Evaluation payload according to selected view
32
59
  """
33
60
 
34
61
  # =========================
35
- # Low-level technical details
62
+ # Low-level evaluator outputs
36
63
  # =========================
37
64
  details = {}
38
65
 
39
- # Data analysis + heatmap
40
- data_report = data(self.X, self.y, plot=plot)
66
+ # -------------------------
67
+ # Data analysis
68
+ # -------------------------
69
+ data_report = data.evaluate(
70
+ self.X,
71
+ self.y,
72
+ plot=plot
73
+ )
41
74
  details["data"] = data_report
42
75
 
43
- # Model configuration
44
- details["config"] = config(
76
+ # -------------------------
77
+ # Model configuration sanity
78
+ # -------------------------
79
+ details["config"] = config.evaluate(
45
80
  self.model,
46
81
  n_samples=data_report["n_samples"],
47
82
  n_features=data_report["n_features"]
48
83
  )
49
84
 
50
- # Performance + learning curve
51
- details["performance"] = performance(
52
- self.model, self.X, self.y, plot=plot
85
+ # -------------------------
86
+ # Performance evaluation
87
+ # (CV strategy inferred automatically)
88
+ # -------------------------
89
+ details["performance"] = performance.evaluate(
90
+ self.model,
91
+ self.X,
92
+ self.y,
93
+ plot=plot
53
94
  )
54
95
 
55
- # Robustness + CV clean vs noisy
56
- details["robustness"] = robustness(
96
+ # -------------------------
97
+ # Robustness & leakage analysis
98
+ # -------------------------
99
+ details["robustness"] = robustness.evaluate(
57
100
  self.model,
58
101
  self.X,
59
102
  self.y,
@@ -62,17 +105,19 @@ class AICritic:
62
105
  )
63
106
 
64
107
  # =========================
65
- # Human interpretation
108
+ # Human-centered summaries
66
109
  # =========================
67
- human = HumanSummary().generate(details)
110
+ human_summary = HumanSummary().generate(details)
68
111
 
69
112
  # =========================
70
- # Full payload
113
+ # Full payload (PUBLIC API)
71
114
  # =========================
72
115
  payload = {
73
- "executive": human["executive_summary"],
74
- "technical": human["technical_summary"],
75
- "details": details
116
+ "executive": human_summary["executive_summary"],
117
+ "technical": human_summary["technical_summary"],
118
+ "details": details,
119
+ # Convenience shortcut (prevents KeyError in user code)
120
+ "performance": details["performance"]
76
121
  }
77
122
 
78
123
  # =========================
@@ -1,4 +1,11 @@
1
- from .robustness import evaluate as robustness
2
- from .config import evaluate as config
3
- from .data import evaluate as data
4
- from .performance import evaluate as performance
1
+ from . import data
2
+ from . import performance
3
+ from . import robustness
4
+ from . import config
5
+
6
+ __all__ = [
7
+ "data",
8
+ "performance",
9
+ "robustness",
10
+ "config",
11
+ ]
@@ -2,9 +2,21 @@ from sklearn.model_selection import cross_val_score, learning_curve
2
2
  import matplotlib.pyplot as plt
3
3
  import numpy as np
4
4
 
5
+ from .validation import make_cv
6
+
7
+
5
8
  def evaluate(model, X, y, plot=False):
6
- # CV básico
7
- scores = cross_val_score(model, X, y, cv=3)
9
+ """
10
+ Avalia a performance do modelo usando validação cruzada
11
+ automaticamente adequada (StratifiedKFold ou KFold).
12
+ """
13
+
14
+ # =========================
15
+ # Cross-validation adaptativa
16
+ # =========================
17
+ cv = make_cv(y)
18
+
19
+ scores = cross_val_score(model, X, y, cv=cv)
8
20
  mean = float(scores.mean())
9
21
  std = float(scores.std())
10
22
  suspicious = mean > 0.995
@@ -13,9 +25,11 @@ def evaluate(model, X, y, plot=False):
13
25
  "cv_mean_score": mean,
14
26
  "cv_std": std,
15
27
  "suspiciously_perfect": suspicious,
28
+ "validation_strategy": type(cv).__name__,
16
29
  "message": (
17
30
  "Perfect CV score detected — possible data leakage."
18
- if suspicious else "CV performance within expected range."
31
+ if suspicious
32
+ else "CV performance within expected range."
19
33
  )
20
34
  }
21
35
 
@@ -24,15 +38,30 @@ def evaluate(model, X, y, plot=False):
24
38
  # =========================
25
39
  if plot:
26
40
  train_sizes, train_scores, test_scores = learning_curve(
27
- model, X, y, cv=3, train_sizes=np.linspace(0.1, 1.0, 5)
41
+ model,
42
+ X,
43
+ y,
44
+ cv=cv, # <- MESMA estratégia de validação
45
+ train_sizes=np.linspace(0.1, 1.0, 5)
46
+ )
47
+
48
+ plt.figure(figsize=(6, 4))
49
+ plt.plot(
50
+ train_sizes,
51
+ np.mean(train_scores, axis=1),
52
+ label="Treino"
53
+ )
54
+ plt.plot(
55
+ train_sizes,
56
+ np.mean(test_scores, axis=1),
57
+ label="Validação"
58
+ )
59
+ plt.fill_between(
60
+ train_sizes,
61
+ np.mean(test_scores, axis=1) - np.std(test_scores, axis=1),
62
+ np.mean(test_scores, axis=1) + np.std(test_scores, axis=1),
63
+ alpha=0.2
28
64
  )
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
65
  plt.xlabel("Amostra de treino")
37
66
  plt.ylabel("Score")
38
67
  plt.title("Learning Curve")
@@ -12,8 +12,13 @@ def evaluate(model, X, y, leakage_suspected=False, plot=False):
12
12
  model_clean = clone(model)
13
13
  model_noisy = clone(model)
14
14
 
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()
15
+ from .validation import make_cv
16
+
17
+ cv = make_cv(y)
18
+
19
+ score_clean = cross_val_score(model_clean, X, y, cv=cv, n_jobs=1).mean()
20
+ score_noisy = cross_val_score(model_noisy, X_noisy, y, cv=cv, n_jobs=1).mean()
21
+
17
22
  drop = score_clean - score_noisy
18
23
 
19
24
  # =========================
@@ -78,6 +78,13 @@ class HumanSummary:
78
78
  recommendations.append(
79
79
  "Fix baseline performance issues before trusting robustness metrics."
80
80
  )
81
+ elif robustness_verdict == "fragile":
82
+ key_risks.append(
83
+ "Model is fragile under noise perturbations."
84
+ )
85
+ recommendations.append(
86
+ "Consider regularization or simpler model architecture."
87
+ )
81
88
 
82
89
  technical_summary = {
83
90
  "key_risks": key_risks or ["No significant risks detected."],
@@ -0,0 +1,41 @@
1
+ # validation.py
2
+ import numpy as np
3
+ from sklearn.model_selection import KFold, StratifiedKFold
4
+
5
+ def infer_problem_type(y):
6
+ """
7
+ Infer whether the task is classification or regression.
8
+ """
9
+ y = np.asarray(y)
10
+
11
+ unique_values = np.unique(y)
12
+ n_unique = len(unique_values)
13
+
14
+ # Heurística conservadora
15
+ if (
16
+ np.issubdtype(y.dtype, np.integer)
17
+ or n_unique <= 20
18
+ ):
19
+ return "classification"
20
+
21
+ return "regression"
22
+
23
+
24
+ def make_cv(y, n_splits=3, random_state=42):
25
+ """
26
+ Automatically selects the correct CV strategy.
27
+ """
28
+ problem_type = infer_problem_type(y)
29
+
30
+ if problem_type == "classification":
31
+ return StratifiedKFold(
32
+ n_splits=n_splits,
33
+ shuffle=True,
34
+ random_state=random_state
35
+ )
36
+
37
+ return KFold(
38
+ n_splits=n_splits,
39
+ shuffle=True,
40
+ random_state=random_state
41
+ )
@@ -0,0 +1,76 @@
1
+ Metadata-Version: 2.4
2
+ Name: ai-critic
3
+ Version: 0.2.3
4
+ Summary: Fast AI evaluator for scikit-learn models
5
+ Author-email: Luiz Seabra <filipedemarco@yahoo.com>
6
+ Requires-Python: >=3.9
7
+ Description-Content-Type: text/markdown
8
+ Requires-Dist: numpy
9
+ Requires-Dist: scikit-learn
10
+
11
+ Performance under noise
12
+
13
+ > Visualizations are optional and do not affect the decision logic.
14
+
15
+ ---
16
+
17
+ ## ⚙️ Main API
18
+
19
+ ### `AICritic(model, X, y)`
20
+
21
+ * `model`: scikit-learn compatible estimator
22
+ * `X`: feature matrix
23
+ * `y`: target vector
24
+
25
+ ### `evaluate(view="all", plot=False)`
26
+
27
+ * `view`: `"executive"`, `"technical"`, `"details"`, `"all"` or custom list
28
+ * `plot`: generates graphs when `True`
29
+
30
+ ---
31
+
32
+ ## 🧠 What ai-critic Detects
33
+
34
+ | Category | Risks |
35
+
36
+ | ------------ | ---------------------------------------- |
37
+
38
+ | 🔍 Data | Target Leakage, NaNs, Imbalance |
39
+
40
+ | 🧱 Structure | Excessive Complexity, Overfitting |
41
+
42
+ | 📈 Validation | Perfect or Statistically Suspicious CV |
43
+
44
+ | 🧪 Robustness | Stable, Fragile, or Misleading |
45
+
46
+ ---
47
+
48
+ ## 🛡️ Best Practices
49
+
50
+ * **CI/CD:** Use executive output as a *quality gate*
51
+ * **Iteration:** Use technical output during tuning
52
+ * **Governance:** Log detailed output
53
+ * **Skepticism:** Never blindly trust a perfect CV
54
+
55
+ ---
56
+
57
+ ## 🧭 Use Cases
58
+
59
+ * Pre-deployment Audit
60
+ * ML Governance
61
+ * CI/CD Pipelines
62
+ * Risk Communication for Non-Technical Users
63
+
64
+ ---
65
+
66
+ ## 📄 License
67
+
68
+ Distributed under the **MIT License**.
69
+
70
+ ---
71
+
72
+ ## 🧠 Final Note
73
+
74
+ **ai-critic** is not a *benchmarking* tool. It's a **decision-making tool**.
75
+
76
+ If a model fails here, it doesn't mean it's bad—it means it **shouldn't be trusted yet**.
@@ -0,0 +1,13 @@
1
+ ai_critic/__init__.py,sha256=H6DlPMmbcFUamhsNULPLk9vHx81XCiXuKKf63EJ8eM0,53
2
+ ai_critic/critic.py,sha256=0fsMpvvV4JSp59vsj4ie9xUSJcTpzM1P8MBRtYKHzxc,3785
3
+ ai_critic/evaluators/__init__.py,sha256=ri6InmL8_LIcO-JZpU_gEFKLO4URdqo3z6rh7fV6M8Y,169
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=1CQx5DueK0XkelYyJnAGRJ3AjQtjsKeW8_1JQZqKVOI,1973
7
+ ai_critic/evaluators/robustness.py,sha256=mfVQ67Z6t6aRvtIq-XQEQYbwvyf8UefM1myeOGVrnAE,1869
8
+ ai_critic/evaluators/summary.py,sha256=O9ZCrph93VV6pFcMIx2a7DizPIccRUqbGcUZ6oDmOLs,3791
9
+ ai_critic/evaluators/validation.py,sha256=rnzRwD78Cugey33gl9geE8JoBURsKEEnqrIOhBZv0LY,904
10
+ ai_critic-0.2.3.dist-info/METADATA,sha256=znefvwZLLg1yHQSrlVyO0M_97T3gJrt0N_mN0xDKUiM,1615
11
+ ai_critic-0.2.3.dist-info/WHEEL,sha256=qELbo2s1Yzl39ZmrAibXA2jjPLUYfnVhUNTlyF1rq0Y,92
12
+ ai_critic-0.2.3.dist-info/top_level.txt,sha256=TRyZkm1vyLLcFDg_80yeg5cHvPis_oW1Ti170417jkw,10
13
+ ai_critic-0.2.3.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (80.9.0)
2
+ Generator: setuptools (80.10.1)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -1,258 +0,0 @@
1
- Metadata-Version: 2.4
2
- Name: ai-critic
3
- Version: 0.2.1
4
- Summary: Fast AI evaluator for scikit-learn models
5
- Author-email: Luiz Seabra <filipedemarco@yahoo.com>
6
- Requires-Python: >=3.9
7
- Description-Content-Type: text/markdown
8
- Requires-Dist: numpy
9
- Requires-Dist: scikit-learn
10
-
11
- # ai-critic: Automated Risk Auditor for Machine Learning Models**
12
-
13
- ---
14
-
15
- ## 🚀 What is ai-critic?
16
-
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.
18
-
19
- Em vez de apenas relatar métricas, o `ai-critic` responde à pergunta crítica:
20
-
21
- > “Este modelo pode ser implantado com segurança?”
22
-
23
- Ele faz isso analisando as principais áreas de risco:
24
-
25
- * **Integridade dos Dados:** (*data leakage*, desequilíbrio, NaNs)
26
- * **Estrutura do Modelo:** (risco de *overfitting*, complexidade)
27
- * **Comportamento de Validação:** (pontuações suspeitamente perfeitas)
28
- * **Robustez:** (sensibilidade a ruído)
29
-
30
- Os resultados são organizados em três camadas semânticas para diferentes *stakeholders*:
31
-
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
37
-
38
- A maioria das ferramentas de ML:
39
-
40
- * assume que métricas = verdade
41
- * confia cegamente na validação cruzada
42
- * despeja números brutos sem interpretação
43
-
44
- O `ai-critic` é cético por design.
45
-
46
- Ele trata:
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
51
-
52
- A filosofia central é: **Métricas não falham modelos — o contexto falha.**
53
-
54
- O `ai-critic` aplica heurísticas de raciocínio humano à avaliação de ML:
55
-
56
- * “Isso é bom demais para ser verdade?”
57
- * “Isso pode estar vazando o alvo (*target*)?”
58
- * “A robustez importa se a linha de base estiver errada?”
59
-
60
- ## 🛠️ Instalação
61
-
62
- Instale o `ai-critic` via pip:
63
-
64
- ```bash
65
- pip install ai-critic
66
- ```
67
-
68
- **Requisitos:**
69
-
70
- * Python ≥ 3.8
71
- * `scikit-learn`
72
-
73
- ## 💡 Início Rápido
74
-
75
- Audite seu modelo treinado em apenas algumas linhas:
76
-
77
- ```python
78
- from sklearn.datasets import load_breast_cancer
79
- from sklearn.ensemble import RandomForestClassifier
80
- from ai_critic import AICritic
81
-
82
- # 1. Carregar dados e treinar um modelo (exemplo)
83
- X, y = load_breast_cancer(return_X_y=True)
84
- model = RandomForestClassifier(max_depth=20, random_state=42)
85
- model.fit(X, y) # O modelo deve estar treinado
86
-
87
- # 2. Inicializar e avaliar com ai-critic
88
- critic = AICritic(model, X, y)
89
- report = critic.evaluate()
90
-
91
- # A visualização padrão é 'all' (todas as camadas)
92
- print(report)
93
- ```
94
-
95
- ## 🧩 Saída Multi-Camadas
96
-
97
- O `ai-critic` nunca despeja tudo de uma vez. Ele estrutura os resultados em camadas de decisão claras.
98
-
99
- ### 🔹 Visualização Executiva (`view="executive"`)
100
-
101
- Projetado para CTOs, gerentes e *stakeholders*. Sem jargão de ML.
102
-
103
- ```python
104
- critic.evaluate(view="executive")
105
- ```
106
-
107
- **Exemplo de Saída:**
108
-
109
- ```json
110
- {
111
- "verdict": "❌ Não Confiável",
112
- "risk_level": "high",
113
- "deploy_recommended": false,
114
- "main_reason": "Forte evidência de vazamento de dados inflando o desempenho do modelo."
115
- }
116
- ```
117
-
118
- ### 🔹 Visualização Técnica (`view="technical"`)
119
-
120
- Projetado para engenheiros de ML. Acionável, diagnóstico e focado no que precisa ser corrigido.
121
-
122
- ```python
123
- critic.evaluate(view="technical")
124
- ```
125
-
126
- **Exemplo de Saída:**
127
-
128
- ```json
129
- {
130
- "key_risks": [
131
- "Vazamento de dados suspeito devido à correlação quase perfeita entre recurso e alvo.",
132
- "Pontuação de validação cruzada perfeita detectada (estatisticamente improvável).",
133
- "A profundidade da árvore pode ser muito alta para o tamanho do conjunto de dados."
134
- ],
135
- "model_health": {
136
- "data_leakage": true,
137
- "suspicious_cv": true,
138
- "structural_risk": true,
139
- "robustness_verdict": "misleading"
140
- },
141
- "recommendations": [
142
- "Auditar e remover recursos com vazamento.",
143
- "Reduzir a complexidade do modelo.",
144
- "Executar novamente a validação após a mitigação do vazamento."
145
- ]
146
- }
147
- ```
148
-
149
- ### 🔹 Visualização Detalhada (`view="details"`)
150
-
151
- Projetado para auditoria, depuração e conformidade.
152
-
153
- ```python
154
- critic.evaluate(view="details")
155
- ```
156
-
157
- Inclui:
158
-
159
- * Métricas brutas
160
- * Correlações de recursos
161
- * Pontuações de robustez
162
- * Avisos estruturais
163
- * Rastreabilidade completa
164
-
165
- ### 🔹 Visualização Combinada (`view="all"`)
166
-
167
- Retorna todas as três camadas em um único dicionário.
168
-
169
- ```python
170
- critic.evaluate(view="all")
171
- ```
172
-
173
- **Retorna:**
174
-
175
- ```json
176
- {
177
- "executive": {...},
178
- "technical": {...},
179
- "details": {...}
180
- }
181
- ```
182
-
183
- ## ⚙️ API Principal
184
-
185
- ### `AICritic`
186
-
187
- | Parâmetro | Descrição |
188
- | :--- | :--- |
189
- | `model` | Modelo `scikit-learn` treinado |
190
- | `X` | Matriz de recursos |
191
- | `y` | Vetor alvo |
192
-
193
- **Uso:** `AICritic(model, X, y)`
194
-
195
- ### `evaluate()`
196
-
197
- | Parâmetro | Descrição |
198
- | :--- | :--- |
199
- | `view` | Camada de saída desejada: `"executive"`, `"technical"`, `"details"`, ou `"all"` (padrão) |
200
-
201
- **Uso:** `evaluate(view="all")`
202
-
203
- ## 🧠 O que o ai-critic Detecta
204
-
205
- | Categoria | Riscos Detectados |
206
- | :--- | :--- |
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 |
211
-
212
- ## 🧪 Exemplo: Detectando Vazamento de Dados
213
-
214
- ```python
215
- import numpy as np
216
- # ... (imports e código do modelo)
217
-
218
- # Vazamento artificial: adicionando o alvo como um recurso
219
- X_leaky = np.hstack([X, y.reshape(-1, 1)])
220
-
221
- critic = AICritic(model, X_leaky, y)
222
- executive_report = critic.evaluate(view="executive")
223
-
224
- print(executive_report)
225
- ```
226
-
227
- **Saída (Visualização Executiva):**
228
-
229
- ```
230
- ❌ Não Confiável
231
- Forte evidência de vazamento de dados inflando o desempenho do modelo.
232
- ```
233
-
234
- ## 🛡️ Melhores Práticas
235
-
236
- * Execute o `ai-critic` antes da implantação.
237
- * Nunca confie cegamente em pontuações de CV perfeitas.
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.
241
-
242
- ## 🧭 Casos de Uso Típicos
243
-
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
249
-
250
- ## 📄 Licença
251
-
252
- Distribuído sob a Licença MIT.
253
-
254
- ## 🧠 Nota Final
255
-
256
- O `ai-critic` não é uma ferramenta de *benchmarking*. É uma **ferramenta de decisão**.
257
-
258
- Se um modelo falhar aqui, não significa que seja ruim — significa que **não deve ser confiável ainda**.
@@ -1,12 +0,0 @@
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,,