Skip to main content
Docs

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

    Concepts

    Inference

    Predict molecular properties with a public MPNN model or one you trained, counted per molecule against a monthly allowance.

    Updated October 12, 2026

    On this page

    Inference runs a trained property-prediction model on your molecules. There are four model families: MPNN (message-passing neural networks, Chemprop-style; model_type: "mpnn"), QSAR (classical models on fingerprints and descriptors, chosen by cross-validation from a panel; model_type: "qsar"), physics-hybrid (a Joback or Hansen group-contribution estimate plus a correction learned from your measurements; model_type: "thermo_hybrid") and mixture (a property of a solute in a solvent, or of one molecule, across temperatures and other conditions; model_type: "thermo_mixture"). QSAR, physics-hybrid and mixture predictions, and those of recently trained MPNN models, also return a 90% interval and whether each input is like the training data. MPNN and QSAR models can also return a signed value per atom showing which atoms raise or lower the prediction (return_contributions). A mixture request takes solutes, solvents and condition values (for example a temperature grid) and predicts every combination. Reaction models (model_type: "reaction_mpnn") predict a property of atom-mapped reactions, such as a yield, from the reaction and its conditions; send input_format: "reaction_smiles" and the model's condition components. You can use:

    Like utilities, inference is not charged to your wallet. Each molecule counts toward your plan's monthly inference allowance, and at the limit submits return 403.

    Run a prediction

    Submit an inference request with model_type, model_name, and a payload (set is_public_model to true for a public model; leave it false for one you trained), then poll Get inference status and read Get an inference result. Submit a batch of inference requests sends several requests at once.

    from cognichem_client import CogniChem
     
    client = CogniChem.from_env()
    print(client.inference.models.mpnn.public())  # pick a model_name
     
    result = client.inference.run(
        "mpnn",
        "MODEL_NAME",
        {"input_data": ["CCO", "c1ccccc1O"], "input_format": "smiles", "is_public_model": True},
    )
    print(result.data)

    Payload

    mpnn Property prediction with a trained MPNN (Chemprop-style) model: a public model or one you trained with the train-mpnn job. predictions has one value per molecule: the value (regression; the first target of a multi-target model, with every target in predictions_by_target), P(class 1) for binary models (labels at 0.5), or the predicted class's probability for multiclass (labels, and probabilities in output_spec.classes order). output_spec.task says which. Where the model has them (#908 Phase 3): uncertainty (an ensemble's member spread), intervals (90% conformal prediction interval of a regression model; intervals_by_target for several targets), ad_similarity (max Tanimoto similarity to the training set) and in_domain (inside the model's calibrated applicability domain). With return_contributions (#908 Phase 4): atom_contributions, one signed value per atom in input atom order (positive atoms raise the prediction, negative atoms lower it; Integrated Gradients through the whole model, ensembles averaged), attribution_base (a molecule's values add up to its prediction minus this baseline), attribution_method, and atom_contributions_by_target / attribution_base_by_target for several targets.

    Payload fields
    FieldTypeDescription
    input_data[]requiredstring[]

    Limits: min items 1, max items 1000

    input_formatrequiredstring

    One of: "fasta", "helm", "mol2block", "molblock", "mrvblock", "pdbblock", "scsrblock", "selfies", "sequence", "smarts", "smiles", "tplblock", "xyzblock", "inchi"

    is_public_modelboolean

    Default: false

    return_contributionsboolean

    Default: false

    return_coordinatesboolean

    Default: false

    generate_3dboolean
    add_hydrogensboolean
    remove_hydrogensboolean
    batch_sizeinteger

    Default: 32Limits: ≥ 1, ≤ 512

    qsar Property prediction with a classical QSAR model you trained with the train-qsar job: the value (regression) or the probability of class 1 (binary), a 90% conformal interval or standard deviation where the model has one, the nearest-neighbour Tanimoto similarity to the training set, and optional signed per-atom attributions.

    Payload fields
    FieldTypeDescription
    input_data[]requiredstring[]

    Limits: min items 1, max items 1000

    input_formatrequiredstring

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

    is_public_modelboolean

    Default: false

    return_contributionsboolean

    Default: false

    reaction_mpnn Reaction property prediction (yield, selectivity, barrier or rate constant) with a reaction model you trained with the train-reaction-mpnn job. input_data holds atom-mapped reaction SMILES (map them with reaction-map); a model trained with condition components (ligand, base, solvent, ...) also needs components with one SMILES per reaction under the same names. predictions has one value per reaction: the value (regression, clipped to the model's target_bounds; the first target of a multi-target model, with every target in predictions_by_target), P(class 1) for binary models (labels at 0.5), or the predicted class's probability for multiclass (labels, and probabilities in output_spec.classes order). Where the model has them: uncertainty (an ensemble's member spread), intervals (90% conformal prediction interval of a regression model), ad_similarity (max Tanimoto similarity of the reaction-plus-components fingerprint to the training set) and in_domain (inside the model's calibrated applicability domain).

    Payload fields
    FieldTypeDescription
    input_data[]requiredstring[]

    Limits: min items 1, max items 1000

    input_formatrequiredstring

    One of: "reaction_smiles"

    componentsmap<string, string[]>
    is_public_modelboolean

    Default: false

    batch_sizeinteger

    Default: 32Limits: ≥ 1, ≤ 512

    thermo_hybrid Property prediction with a physics-hybrid model you trained with the train-thermo-hybrid job: for each corrected property, the group-contribution estimate (Joback or Stefanis-Panayiotou), the learned correction, their sum in the model's unit with a 90% conformal interval, and whether the molecule is in the applicability domain. Outside the domain the estimate is returned and flagged unless fallback is none.

    Payload fields
    FieldTypeDescription
    input_data[]requiredstring[]

    Limits: min items 1, max items 1000

    input_formatrequiredstring

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

    is_public_modelboolean

    Default: false

    fallbackstring

    One of: "baseline", "none"

    thermo_mixture Solution and mixture property prediction with a model you trained with the train-thermo-mixture job: every solute (input_data) with every solvent (or row by row), at every combination of the condition values (e.g. a temperature grid), so one request gives a solvent screen or a property-versus-temperature curve. Each prediction carries its unit, a 90% conformal interval, and whether the solute is similar to training, the solvent was seen in training and the conditions lie in the training range.

    Payload fields
    FieldTypeDescription
    input_data[]requiredstring[]

    Limits: min items 1, max items 100

    input_formatrequiredstring

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

    solvents[]string[]

    Limits: min items 1, max items 100

    pairingstring

    Default: "grid"One of: "grid", "rows"

    conditionsobject
    conditions.temperatureobject
    conditions.temperature.values[]requirednumber[]

    Limits: min items 1, max items 50

    conditions.temperature.unitrequiredstring

    One of: "K", "°C", "°F", "°R"

    conditions.pressureobject
    conditions.pressure.values[]requirednumber[]

    Limits: min items 1, max items 50

    conditions.pressure.unitrequiredstring

    One of: "Pa", "kPa", "MPa", "bar", "atm", "psi", "mmHg"

    conditions.mole_fractionobject
    conditions.mole_fraction.values[]requirednumber[]

    Limits: min items 1, max items 50

    conditions.mole_fraction.unitrequiredstring

    One of: "mol/mol"

    is_public_modelboolean

    Default: false