Skip to content

Adapt Sklearn

Adapt Scikit-learn — mvp.adapt_sklearn

Cluster: ML & Optimisation | Type: component | MCP Tools: 37

Overview

adapt_sklearn wraps scikit-learn estimators as AIBlocks, supporting fit, predict, fit_predict, and decision-tree explainability modes with configurable model selection via ModelConfig. The MCP sub-package adds 30 operations for training, prediction, evaluation, model persistence, pipeline composition, hyperparameter search, feature selection, vectorization, experiment tracking, heuristic storage, model comparison, and an advisory agentic estimator recommender (estimator_recommend + list_patterns).

When to use:

  • Training classifiers or regressors within a G6 pipeline
  • Cross-validation and model evaluation with stored experiment history
  • Preprocessing (scaling, encoding) and feature importance analysis

Production Caveats

Surface these caveats to users before they depend on this component:

  • AdaptSklearnBlock expects numeric X: list[list[float]]. It does not ingest CSV files, spreadsheets, text columns, categorical strings, missing values, or dates directly. Use adapt_pandas, preprocess_encode, preprocess_scale, or vectorize first.
  • The Tier 1 block keeps fitted models in process memory only. A predict call works only on the same block instance after fit or fit_predict. Use the MCP model_save and model_load operations when a model must survive restart or move between processes.
  • fit_predict reports training-set predictions and a training-set score for supervised estimators. Treat this as a smoke-test signal, not evidence of real-world accuracy. Use model_evaluate with cross-validation or an explicit holdout split before making claims.
  • Classification scores are labelled as accuracy, regression scores as r2, and KMeans-style clustering scores as inertia. These metrics are not interchangeable; compare models only within the same task and metric.
  • Supervised estimators require y. Clustering estimators do not require y, but their cluster IDs are arbitrary labels, not ground truth categories.
  • extract_rules and explain are decision-tree-only modes. They will fail on a block whose state contains a previously fitted non-tree estimator; use a fresh block or fit a decision tree first.
  • Hyperparameters are passed directly to scikit-learn constructors. Invalid parameter names or values return [SKLEARN_ERROR] rather than being auto-corrected.
  • This is a classical scikit-learn adapter, not full AutoML. For automatic model search over multiple backends, use adapt_automl or adapt_autosklearn.
  • For healthcare, legal, accounting, or other high-stakes workflows, outputs are decision support only. Keep human review and domain-specific validation gates in the workflow.

Example:

from mvp.adapt_sklearn import AdaptSklearnBlock, MLInput, ModelConfig

block = AdaptSklearnBlock(name="ml")
result = block.infer(MLInput(
    X=[[0, 0], [1, 1]], y=[0, 1],
    mode="fit_predict",
    model_config_data=ModelConfig(estimator_type="logistic_regression"),
))
# result.ok → True; result.value → MLOutput with predictions and score

Works well with: adapt_pandas, adapt_pygad, align_evals, grounding

Public API

ModelConfig(BaseModel)

Configuration for which scikit-learn estimator to use.

Field Type Default
estimator_type Literal['decision_tree', 'decision_tree_classifier', 'decision_tree_regressor', 'knn_classifier', 'gradient_boosting_classifier', 'gradient_boosting_regressor', 'logistic_regression', 'linear_regression', 'ridge_regression', 'lasso_regression', 'random_forest_classifier', 'random_forest_regressor', 'kmeans', 'dbscan', 'agglomerative', 'gaussian_mixture', 'mini_batch_kmeans', 'svm_classifier', 'svr'] 'decision_tree'
params dict[str, Any] Field(default_factory=dict)

MLInput(BaseModel)

Feature matrix X plus optional labels y.

Field Type Default
X list[list[float]] required
y list[float \| int \| str] \| None None
mode Literal['fit', 'predict', 'fit_predict', 'extract_rules', 'explain'] 'fit_predict'
model_config_data ModelConfig ModelConfig()
feature_names list[str] \| None None

MLOutput(BaseModel)

Predictions and optional score.

Field Type Default
predictions list[float \| int \| str] \| None None
score float \| None None
metric_name str ''
n_samples int 0
n_features int 0
estimator_type str ''
rules str \| None None
explanation dict[str, Any] \| None None
interpretation str ''
degraded bool False
degradation_reason str ''

AdaptSklearnBlock(AIBlock[MLInput, MLOutput, Any])

Wraps a scikit-learn estimator as an AIBlock.

Field Type Default
name str 'adapt_sklearn'
model_config_data ModelConfig field(default_factory=ModelConfig)
resource_bounds ResourceBounds \| None None
usage ResourceUsage field(default_factory=ResourceUsage)

Methods:

infer(data: MLInput) -> Result[MLOutput]

bias() -> dict

MCPSklearnInput(BaseModel)

Input schema for AdaptSklearnMCPBlock.

Field Type Default
op SklearnOp Field(..., description='Operation to perform')
model_name str Field('', description='Named model identifier')
estimator_type str Field('', description='Estimator type key')
task_type str Field('', description='classification / regression / clustering')
X list[list[float]] Field(default_factory=list, description='Feature matrix rows')
y list[Any] Field(default_factory=list, description='Target labels/values')
X_test list[list[float]] Field(default_factory=list, description='Test feature matrix')
params dict[str, Any] Field(default_factory=dict, description='Estimator hyperparams')
cv int Field(5, description='Cross-validation folds')
scoring str Field('', description='Scoring metric for CV')
scaler_type str Field('standard', description='standard | minmax')
name str Field('', description='Generic name field (experiments/heuristics/models)')
description str Field('', description='Description/notes')
domain str Field('', description='Domain for heuristics')
condition str Field('', description='Heuristic condition')
action str Field('', description='Heuristic action')
query str Field('', description='Search query')
score float Field(0.0, description='Score value')
min_score float Field(0.0, description='Minimum score filter')
n_samples int Field(0, description='Number of samples')
n_features int Field(0, description='Number of features')
tags str Field('', description='Comma-separated tags')
notes str Field('', description='Notes/metadata')
compare_name_a str Field('', description='First model for comparison')
compare_name_b str Field('', description='Second model for comparison')
feature_names list[str] Field(default_factory=list, description='Feature names for importance')
model_name_b str Field('', description='Alias for compare_name_b')
artifact_path str Field('', description='File path for model_save/model_load')
pipeline_steps list[dict[str, Any]] Field(default_factory=list, description="Pipeline steps: [{'type':'scale','scaler':'standard'}, {'type':'estimator','key':'random_forest_classifier','params':{}}]")
search_strategy str Field('grid', description='grid | random for hyperparameter_search')
param_grid dict[str, list[Any]] Field(default_factory=dict, description='Parameter grid for hyperparameter_search')
n_iter int Field(10, description='Iterations for RandomizedSearchCV')
select_strategy str Field('k_best', description='k_best | rfe | variance_threshold for feature_select')
k_features int Field(10, description='Number of features to select (k_best / rfe)')
variance_threshold float Field(0.0, description='Threshold for variance_threshold strategy')
text_data list[str] Field(default_factory=list, description='Raw text documents for vectorize op')
vectorizer_type str Field('tfidf', description='tfidf | count for vectorize op')
max_features int Field(0, description='Max vocabulary size for vectorize (0 = unlimited)')
test_size float Field(0.0, description='Fraction of data held out as test set (0 = no split)')
cv_strategy str Field('kfold', description='kfold | stratified | group for model_evaluate')
request_id str Field('', description='Caller request identifier for reliability envelope')
task_id str Field('', description='Caller task identifier for reliability envelope')
run_id str Field('', description='Caller run identifier for reliability envelope')
method str Field('', description='Allowlisted native method name')
metric_name str Field('', description='Allowlisted sklearn metric name')
transformer_type str Field('', description='Allowlisted native transformer key')
step_name str Field('', description='Pipeline step name for native_pipeline_step')
y_pred list[Any] Field(default_factory=list, description='Predicted labels/values for native metrics')
y_score list[Any] Field(default_factory=list, description='Scores/probabilities for native metrics')
baseline_score float Field(0.0, description='Optional contract threshold for model_evaluate. When > 0, the resulting cv_mean MUST clear this baseline or the output is marked degraded=True / degradation_reason=below_baseline.')

MCPSklearnOutput(BaseModel)

Output schema for AdaptSklearnMCPBlock.

Field Type Default
op str ''
success bool True
data dict[str, Any] Field(default_factory=dict)
error str ''
degraded bool False
degradation_reason str ''
request_id str ''
task_id str ''
run_id str ''
completion_state str 'qualified-draft'
warning_card dict[str, Any] \| None None
evidence dict[str, Any] Field(default_factory=dict)

MCPSklearnRecord(BaseModel)

A stored record from any sklearn MCP table.

Field Type Default
table str ''
record_id int 0
data dict[str, Any] Field(default_factory=dict)

AdaptSklearnMCPBlock(AIBlock[MCPSklearnInput, MCPSklearnOutput, dict])

Stateful sklearn MCP block: 30 ops, SQLite-backed.

Field Type Default
name str field(default='adapt_sklearn_mcp')
db_path str field(default='')
agentic_planner Any field(default=None)

Methods:

infer(inp: MCPSklearnInput) -> Result[MCPSklearnOutput]

MCP Tools

Operation Source
ops sklearn_mcp
help sklearn_mcp
model_fit sklearn_mcp
model_predict sklearn_mcp
model_fit_predict sklearn_mcp
model_evaluate sklearn_mcp
ml_status sklearn_mcp
model_store sklearn_mcp
model_retrieve sklearn_mcp
model_list sklearn_mcp
model_compare sklearn_mcp
estimator_list sklearn_mcp
estimator_recommend sklearn_mcp
estimator_info sklearn_mcp
preprocess_scale sklearn_mcp
preprocess_encode sklearn_mcp
feature_importance sklearn_mcp
experiment_store sklearn_mcp
experiment_query sklearn_mcp
heuristic_store sklearn_mcp
heuristic_retrieve sklearn_mcp
sklearn_info sklearn_mcp
model_save sklearn_mcp
model_load sklearn_mcp
pipeline_build sklearn_mcp
pipeline_fit sklearn_mcp
pipeline_predict sklearn_mcp
hyperparameter_search sklearn_mcp
feature_select sklearn_mcp
vectorize sklearn_mcp
partial_fit sklearn_mcp
list_patterns sklearn_mcp
native_capability_info sklearn_mcp
native_estimator_call sklearn_mcp
native_pipeline_step sklearn_mcp
native_metric_score sklearn_mcp
native_transform_call sklearn_mcp