Tools · Custom Modeling
Custom ADMET Models
On this page
Prices, workflows, and method papersOpen in the app
Run it from the API
Submit with Submit a job and the job_type below. Price it first with Estimate job reservation cost: submitting reserves that amount from your wallet, and the charge settles at the actual runtime.
Custom ADMET Model Training train-admet-custom
- Job type
train-admet-custom- Hardware
cpu(default)- Typical runtime
- 10 min on CPU
Payload
| Field | Type | Description |
|---|---|---|
model_namerequired | string | Limits: |
admet_endpointrequired | string | The ADMET-AI endpoint (an admet-predict column) to adapt: recalibrated onto your assay's scale, and used with the other 40 as stacking features. One of: |
task | string | Regression only for now. Default: |
methods[] | string[] | Candidates compared by cross-validation: linear / isotonic recalibration of the chosen endpoint, and stacked models on fingerprints, descriptors and all 41 ADMET-AI predictions. Defaults to all. One of: |
features[] | string[] | Feature kinds a stacked model sees besides the 41 ADMET-AI predictions; empty to stack on the predictions alone. Default: |
prediction_transform | string | Applied to the chosen endpoint's prediction before a recalibration; use log10 when your assay is reported on a log scale and the endpoint is not (for example clearance). Default: |
morgan_radius | integer | Morgan fingerprint radius. Default: |
morgan_bits | integer | Morgan fingerprint size. Default: |
input_data[] | string[] | Training SMILES. Limits: |
input_format | string | QSAR features are computed from SMILES. Default: |
targets[] | number[] | One measured value per input_data entry, in the assay's own units (for example log10 CLint). Limits: |
splits[] | string[] | Fold label per input_data entry for split_method 'provided'. One of: |
activity_table | string | object[] | artifactRef | Training table instead of input_data + targets: CSV/JSON rows or a closed $artifact ref (e.g. bioactivity-curate's curated table). |
smiles_column | string | activity_table column with SMILES. Default: |
target_column | string | activity_table column with the training target (p_activity is -log10 M). Default: |
split_column | string | activity_table column with train / val / test labels; expanded into splits for split_method 'provided'. Limits: |
endpoint | string | Train on rows of this endpoint only (e.g. IC50); required when the table mixes endpoints. Limits: |
include_censored | boolean | Keep censored rows (relation > or <); dropped by default. Default: |
training_data_sources[] | object[] | Set by CogniChem when the activity table carries ChEMBL identifiers (CC BY-SA 3.0), so the model card names ChEMBL as a training-data source. Do not send. Limits: |
training_data_sources.sourcerequired | "chembl" | |
training_data_sources.release | string | null | |
selection_metric | string | Cross-validated metric that picks the saved method. Default: |
cv_folds | integer | Cross-validation folds on the training data; scaffold and cluster splits keep each group in one fold. Default: |
split_method | string | How the held-out test set is drawn (default random, or provided when splits are sent): random, scaffold (Bemis-Murcko groups), cluster (Butina on Morgan fingerprints at Tanimoto 0.4) or provided. One of: |
test_size | number | Fraction held out as the test set and scored against mean and kNN-Tanimoto baselines (0 skips it). Default: |
random_seed | integer | Seed for the split, folds and models; drawn and recorded when omitted. Limits: |
unit | string | Unit of the targets (regression); returned with every prediction from the trained model. |
model_description | string | Free-text description stored with the trained model. |
tags[] | string[] | Labels stored with the trained model. |
Example
from cognichem_client import CogniChem
client = CogniChem.from_env() # reads COGNICHEM_API_KEY
payload = {
"model_name": "admet-custom-tiny",
"admet_endpoint": "admet_lipophilicity_astrazeneca",
"input_data": ["CCO", "CCCO", "CCCCO", "CCCCCO", "CC(C)O", "… 35 more"],
"targets": [-0.001, 0.389, 0.779, 1.169, 0.387, "… 35 more"],
"methods": ["recal_linear", "recal_isotonic", "stack_linear"],
"features": ["morgan_counts"],
"morgan_bits": 512,
"cv_folds": 3,
"test_size": 0.2,
"random_seed": 0,
"unit": "logD",
}
estimate = client.jobs.estimate(job_type="train-admet-custom", payload=payload, resource="cpu")
print(f"Reserves ${estimate.cost:.2f}")
job = client.jobs.submit(
job_name="my-train-admet-custom-run",
job_type="train-admet-custom",
payload=payload,
resource="cpu",
)
status = client.jobs.wait(job.process_id)
if status.status == "completed":
client.jobs.result(job.process_id, save_path=".")curl -X POST "https://api.cognichem.com/api/v1/jobs/submit" \
-H "X-Api-Key: $COGNICHEM_API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"job_name": "my-train-admet-custom-run",
"job_type": "train-admet-custom",
"payload": {
"model_name": "admet-custom-tiny",
"admet_endpoint": "admet_lipophilicity_astrazeneca",
"input_data": [
"CCO",
"CCCO",
"CCCCO",
"CCCCCO",
"CC(C)O",
"… 35 more"
],
"targets": [
-0.001,
0.389,
0.779,
1.169,
0.387,
"… 35 more"
],
"methods": [
"recal_linear",
"recal_isotonic",
"stack_linear"
],
"features": [
"morgan_counts"
],
"morgan_bits": 512,
"cv_folds": 3,
"test_size": 0.2,
"random_seed": 0,
"unit": "logD"
},
"resource": "cpu"
}'{
"model_name": "admet-custom-tiny",
"admet_endpoint": "admet_lipophilicity_astrazeneca",
"input_data": [
"CCO",
"CCCO",
"CCCCO",
"CCCCCO",
"CC(C)O",
"… 35 more"
],
"targets": [
-0.001,
0.389,
0.779,
1.169,
0.387,
"… 35 more"
],
"methods": [
"recal_linear",
"recal_isotonic",
"stack_linear"
],
"features": [
"morgan_counts"
],
"morgan_bits": 512,
"cv_folds": 3,
"test_size": 0.2,
"random_seed": 0,
"unit": "logD"
}Sample data from the job catalog; long values are shortened here. Each job_name must be unique among your jobs.
Workflow inputs
- Table (list) · optionalCSV, TSV, JSON
- Molecules (list) · optionalSMILES
Workflow outputs
- ArchiveZIP
- TableCSV
- Trained modelOPAQUE