Skip to main content
Docs

Search guides and API endpoints, for example “Idempotency-Key” or “submit job”.

    Tools · Custom Modeling

    MPNN Models

    Fast structure-property inference that highlights key molecule substructures
    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.

    Saved Model Scoring model-score

    Job type
    model-score
    Hardware
    cpu (default)
    Typical runtime
    5 min on CPU

    Payload

    Provide at least one of: input_data + input_format, input_table, id_column, vina_poses, gnina_poses, surfdock_poses, diffdock_poses, boltz2_complexes, mm_gbsa_scores, plip_interactions.

    Payload fields
    FieldTypeDescription
    model_idrequiredstring

    Limits: pattern ^mdl-[0-9A-HJKMNP-TV-Z]{26}$

    score_targetstring

    Limits: min length 1, max length 200

    score_classstring | integer
    input_data[](string | artifactRef)[]

    Limits: min items 1, max items 10000

    input_formatstring

    One of: "smiles", "inchi", "molblock", "reaction_smiles"

    input_tablestring | object[] | artifactRef
    smiles_columnstring

    Default: "smiles"Limits: min length 1

    reaction_columnstring

    Limits: min length 1

    component_columnsmap<string, string>
    component_valuesmap<string, string>
    thresholdobject
    threshold.oprequiredstring

    One of: "lt", "le", "gt", "gte"

    threshold.valuerequirednumber
    explainboolean

    Default: false

    vina_posesfile_object[] | file_object
    gnina_posesfile_object[] | file_object
    surfdock_posesfile_object[] | file_object
    diffdock_posesfile_object[] | file_object
    boltz2_complexesfile_object[] | file_object
    mm_gbsa_scoresfile_object[] | file_object
    plip_interactionsfile_object[] | file_object
    id_columnstring

    Default: "ligand_id"Limits: min length 1

    File fields take {"name": "x.pdb", "content_b64": "…"} or a stored artifact, {"$artifact": {"id": "art-…", "port": "…"}}. Files are up to 25 MiB each.

    Example

    from cognichem_client import CogniChem
    
    client = CogniChem.from_env()  # reads COGNICHEM_API_KEY
    payload = {
        "model_id": "mdl-01JABCDEFGHJKMNPQRSTVWXYZ0",
        "input_data": ["CCO", "c1ccccc1"],
        "input_format": "smiles",
        "threshold": {"op": "gte", "value": 1},
    }
    
    estimate = client.jobs.estimate(job_type="model-score", payload=payload, resource="cpu")
    print(f"Reserves ${estimate.cost:.2f}")
    
    job = client.jobs.submit(
        job_name="my-model-score-run",
        job_type="model-score",
        payload=payload,
        resource="cpu",
    )
    status = client.jobs.wait(job.process_id)
    if status.status == "completed":
        client.jobs.result(job.process_id, save_path=".")

    Sample data from the job catalog; long values are shortened here. Each job_name must be unique among your jobs.

    Workflow inputs

    • Structures (list) · optionalCIF, PDB
    • Docked poses (list) · optionalSDF
    • Docked poses (list) · optionalSDF
    • Table (list) · optionalCSV
    • Trained model · optionalOPAQUE
    • Molecules (list) · optionalSMILES, INCHI, MOLBLOCK
    • Table (list) · optionalCSV
    • Docked poses (list) · optionalSDF
    • Table (list) · optionalCSV, TSV, JSON
    • Docked poses (list) · optionalPDBQT, SDF

    Workflow outputs

    • ArchiveZIP
    • MoleculesSMILES
    • TableCSV
    • MoleculesSMILES

    MPNN Model Training train-mpnn

    Job type
    train-mpnn
    Hardware
    cpu (default)t4l4a10
    Typical runtime
    1 h on CPU

    Payload

    Payload fields
    FieldTypeDescription
    model_namerequiredstring

    Limits: min length 1

    input_data[]string[]

    Limits: min items 1

    input_formatstring

    Limits: min length 1

    taskstring

    Default: "regression"One of: "regression", "binary", "multiclass"

    binary_thresholdnumber
    targets[](number | string | (number | null)[])[]

    Limits: min items 1

    target_names[]string[]

    Limits: min items 1, max items 20

    target_units[]string[]

    Limits: min items 1, max items 20

    splits[]string[]

    One of: "train", "training", "val", "valid", "validation", "test", "calibration", "calib", "cal"Limits: min items 1

    dates[](string | integer | number)[]

    Limits: min items 1

    activity_tablestring | object[] | artifactRef
    smiles_columnstring

    Default: "smiles"Limits: min length 1

    target_columnstring

    Default: "p_activity"Limits: min length 1

    target_columns[]string[]

    Limits: min items 1, max items 20

    split_columnstring

    Limits: min length 1

    date_columnstring

    Limits: min length 1

    endpointstring

    Limits: min length 1

    censored_policystring

    Default: "drop"One of: "drop", "as_threshold"

    include_censoredboolean

    Deprecated

    training_data_sources[]object[]

    Limits: max items 1

    training_data_sources.sourcerequired"chembl"
    training_data_sources.releasestring | null
    unitstring
    model_descriptionstring
    tags[]string[]
    model_paramsobject

    Example

    from cognichem_client import CogniChem
    
    client = CogniChem.from_env()  # reads COGNICHEM_API_KEY
    payload = {
        "model_name": "mr38-tiny",
        "input_data": ["CCO", "CCC", "CCN", "c1ccccc1", "CC", "… 3 more"],
        "input_format": "smiles",
        "targets": [1, 2, 1.5, 0.5, 1.1, "… 3 more"],
        "model_params": {
            "validation_size": 0.25,
            "mp_hidden_dim": 32,
            "mp_depth": 1,
            "n_ffn_layers": 1,
            "ffn_hidden_dim": 32,
            "learning_rate": 0.001,
            "n_epochs": 6,
            "batch_size": 2,
        },
    }
    
    estimate = client.jobs.estimate(job_type="train-mpnn", payload=payload, resource="cpu")
    print(f"Reserves ${estimate.cost:.2f}")
    
    job = client.jobs.submit(
        job_name="my-train-mpnn-run",
        job_type="train-mpnn",
        payload=payload,
        resource="cpu",
    )
    status = client.jobs.wait(job.process_id)
    if status.status == "completed":
        client.jobs.result(job.process_id, save_path=".")

    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
    • Trained modelOPAQUE