Skip to main content
Docs

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

    Tools · Custom Modeling

    Target Rescorer

    Learn a target-specific score from Vina, GNINA, Boltz-2, MM-GBSA and PLIP signals on your measured compounds, and see which signals predict activity
    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.

    Target Rescorer Training train-rescorer

    Job type
    train-rescorer
    Hardware
    cpu (default)
    Typical runtime
    10 min on CPU

    Payload

    Payload fields
    FieldTypeDescription
    model_namerequiredstring

    Limits: min length 1

    model_descriptionstring
    tags[]string[]
    unitstring
    labelsstring | object[] | artifactRef
    featuresstring | object[] | artifactRef
    feature_columns[]string[]

    Limits: min items 1

    id_columnstring

    Default: "ligand_id"Limits: min length 1

    smiles_columnstring

    Default: "smiles"Limits: min length 1

    target_columnstring

    Default: "p_activity"Limits: min length 1

    split_columnstring

    Limits: min length 1

    joinstring

    Default: "auto"One of: "auto", "id", "smiles"

    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
    taskstring

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

    binary_thresholdnumber
    algorithms[]string[]

    One of: "linear", "lightgbm", "gp"Limits: min items 1

    monotonicboolean

    Default: true

    descriptorsboolean

    Default: true

    fingerprintsboolean

    Default: false

    delta_learningboolean

    Default: false

    delta_basestring

    Limits: min length 1

    pose_aggregationstring

    Default: "best"One of: "best", "mean_top_k"

    top_kinteger

    Default: 3Limits: ≥ 1, ≤ 20

    selection_metricstring

    One of: "spearman", "rmse", "mae", "r2", "roc_auc", "pr_auc", "ef1", "ef5", "bedroc"

    split_methodstring

    Default: "scaffold"One of: "scaffold", "cluster", "random", "provided"

    cv_foldsinteger

    Default: 5Limits: ≥ 3, ≤ 10

    test_sizenumber

    Default: 0Limits: ≥ 0, ≤ 0.5

    random_seedinteger

    Limits: ≥ 0

    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_name": "mr912-rescorer-tiny",
        "features": [
            {
                "ligand_id": "lig-001",
                "smiles": "CCO",
                "vina_affinity_kcal_mol": -8.56,
                "gnina_affinity_kcal_mol": -8.8,
                "gnina_cnn_score": 0.547,
                "p_activity": 6.65,
            },
            {
                "ligand_id": "lig-002",
                "smiles": "CCCO",
                "vina_affinity_kcal_mol": -7.13,
                "gnina_affinity_kcal_mol": -6.25,
                "gnina_cnn_score": 0.644,
                "p_activity": 6.53,
            },
            {
                "ligand_id": "lig-003",
                "smiles": "CCCCO",
                "vina_affinity_kcal_mol": -8.58,
                "gnina_affinity_kcal_mol": -9.2,
                "gnina_cnn_score": 0.631,
                "p_activity": 6.51,
            },
            {
                "ligand_id": "lig-004",
                "smiles": "CCCCCO",
                "vina_affinity_kcal_mol": -6.27,
                "gnina_affinity_kcal_mol": -6.42,
                "gnina_cnn_score": 0.601,
                "p_activity": 5.62,
            },
            {
                "ligand_id": "lig-005",
                "smiles": "CC(C)O",
                "vina_affinity_kcal_mol": -5.02,
                "gnina_affinity_kcal_mol": -5.37,
                "gnina_cnn_score": 0.134,
                "p_activity": 4.78,
            },
            "… 35 more",
        ],
        "task": "regression",
        "split_method": "scaffold",
        "cv_folds": 3,
        "random_seed": 7,
    }
    
    estimate = client.jobs.estimate(job_type="train-rescorer", payload=payload, resource="cpu")
    print(f"Reserves ${estimate.cost:.2f}")
    
    job = client.jobs.submit(
        job_name="my-train-rescorer-run",
        job_type="train-rescorer",
        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
    • Table (list) · optionalCSV, TSV, JSON
    • Docked poses (list) · optionalSDF
    • Table (list) · optionalCSV, TSV, JSON
    • Table (list) · optionalCSV
    • Table (list) · optionalCSV
    • Docked poses (list) · optionalSDF
    • Docked poses (list) · optionalPDBQT, SDF

    Workflow outputs

    • ArchiveZIP
    • TableCSV
    • TableCSV
    • TableCSV
    • Trained modelOPAQUE