Skip to main content

CogniChem Logo

CogniChem Python Client

PyPI version GitHub license

Official Python SDK for the CogniChem compute API (/api/v1).

Installation

pip install cognichem-client

Requires Python 3.10+.

Quick start

from cognichem_client import CogniChem

client = CogniChem(api_key="YOUR_API_KEY")
# or: CogniChem.from_env()  # reads COGNICHEM_API_KEY / COGNICHEM_BASE_URL

# Short utility
result = client.utils.run(
    "convert",
    {
        "input_data": "CCO",
        "input_format": "smiles",
        "output_format": "pdbblock",
    },
)
print(result.data)

# Long-running job: submit → wait → download
submitted = client.jobs.submit(
    job_name="my-padel-run",
    job_type="padel-descriptor",
    payload={
        "input_data": ["CCO", "CCC"],
        "input_format": "smiles",
        "descriptor_types": ["ALOGP", "AtomCount"],
    },
)
status = client.jobs.wait(submitted.process_id)  # completed | error | cancelled
if status.status == "completed":
    artifact = client.jobs.result(submitted.process_id, save_path="./")
    print(artifact.filename)

Authentication

Mode How
API key (recommended for scripts) CogniChem(api_key=...) → X-Api-Key header
JWT (API key management, Assistant chat) client.auth.login_email(email, password) or CogniChem(access_token=...)

API keys carry read and/or write scopes. Submitting jobs, workflow runs, or uploads needs write. API-key mutations must send an Idempotency-Key; the client generates one per call unless you pass idempotency_key= (pass your own to make retries safe).

Environment variables:

  • COGNICHEM_API_KEY
  • COGNICHEM_ACCESS_TOKEN (optional Bearer)
  • COGNICHEM_BASE_URL (default https://api.cognichem.com)

Create and manage keys in your CogniChem account. Collection endpoints under /auth/api-keys require JWT.

API surface

Resource Methods
client.jobs submit, submit_many, estimate, wait, run, result, result_many, info, status, list (paginated, filters), cancel, delete
client.workflows validate, estimate, templates, template, node_ports
client.workflows.runs create, list, get, artifacts, resume, cancel, delete, wait, run
client.workflows.definitions create, list, get, update, delete, download, share, unshare, get_shared, fork_shared, versions, get_version, restore_version
client.artifacts list, usage, upload, get, download (whole zip or one record=), delete
client.events list, listen (long-poll completion events for jobs and workflow runs)
client.wallet balance
client.lookup pubchem, chembl, targets (Open Targets), uniprot, pdb, properties
client.reference search, get, neighborhood (literature / method papers)
client.chat (JWT) estimate, stream, send, stop, spend_cap, continue_spend_cap, plus sessions.* and proposals.*
client.inference submit, submit_batch, wait, run, result, list, cancel, delete
client.inference.models.mpnn public(), user(name=None), delete(name)
client.utils submit, wait, run, result, list, cancel, delete
client.usage limits(month=None)
client.auth / client.api_keys login, check, refresh, logout; list/create/get/update/rename/rotate/delete keys
client health(), ready()

Async twin: AsyncCogniChem with the same method names (await client.jobs.run(...), async for event in client.chat.stream(...)).

Workflows

from cognichem_client import CogniChem, artifact_ref

client = CogniChem.from_env()

spec = client.workflows.template("smiles-embed-dock").spec
target = client.artifacts.upload("target.pdb", data_kind="protein_structure", data_format="pdb")
params = {
    "ligands": ["CCO", "c1ccccc1O"],
    "target_structure": artifact_ref(target.id, "structure"),
}

assert client.workflows.validate(spec, params=params).valid
estimate = client.workflows.estimate(spec, params=params)  # USD hold at your tier

run = client.workflows.runs.run("dock-demo", spec, params=params, max_run_cost=estimate.total * 1.5)
# run.status is "completed" (or "paused" if it hit max_run_cost; call runs.resume)
for item in client.workflows.runs.artifacts(run.id).items:
    print(item.step_key, item.port, item.artifact_id, item.record_count)

runs.wait stops on completed, failed, cancelled, or paused (a paused run needs you to resume it). runs.run raises ProcessFailedError / ProcessCancelledError on failure.

Job and run outputs are durable artifacts: client.jobs.status(pid).result_artifact_id points at one. Inspect the manifest with client.artifacts.get(...) and fetch single records with download(..., record=...) instead of whole zips. Bind artifacts into workflow params or job payloads with artifact_ref(id, port).

Completion events

for event in client.events.listen(kind="workflow_run"):
    print(event.subject_id, event.status)  # re-read the run for detail

CogniChem Assistant (JWT)

client = CogniChem(access_token=token)
session = client.chat.sessions.create("Docking plan")
reply = client.chat.send(session.id, "Dock aspirin against COX-1", reasoning_effort="low")
print(reply.content, reply.billed_usd)
for proposal in client.chat.proposals.list(session.id).items:
    client.chat.proposals.approve(session.id, proposal.id, proposal.estimate_usd)

Each turn holds wallet funds at your tier's token rate and bills the metered tokens. A thread at its spend cap raises ConflictError (code == "session-spend-cap"); continue_spend_cap raises the cap.

Errors

API failures raise subclasses of CogniChemError parsed from RFC 7807 problem details (detail, title, status, type, request_id, retryability, errors). code is the problem type slug (for example missing-idempotency-key, insufficient-scope, spend-ceiling-exceeded, insufficient-wallet, session-spend-cap, estimate-changed), and body holds any extra fields.

Status Exception
400 BadRequestError
401 AuthenticationError
402 PaymentRequiredError
403 ForbiddenError
404 NotFoundError
409 ConflictError
410 GoneError
413 PayloadTooLargeError
422 ValidationError (WorkflowSpec diagnostics in errors)
429 RateLimitError
5xx ServerError

Polling helpers raise PollTimeoutError, ProcessFailedError, or ProcessCancelledError when appropriate.

Examples

See examples/ for scripts covering utilities, inference, job submission, workflow templates, artifact records, science lookups, and the Assistant.

Live OpenAPI docs: https://api.cognichem.com/docs

Development

python3.12 -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"
ruff check src tests
mypy
pytest
python scripts/sync_routes.py
# refresh the ROUTE_MAP snapshot from a monorepo checkout:
python scripts/sync_routes.py --backend-config ../cognichem/apps/back-end-api/src/core/config.py --write-snapshot

Migrating from 0.1.x

1.0 is a clean break. There is no compatibility shim for CogniChemClient / client.utility. See CHANGELOG.md.

License

Apache 2.0

Metadata

Release files for cognichem-client 1.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for cognichem-client 1.1.0
File Size Uploaded
cognichem_client-1.1.0.tar.gz 80.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for cognichem-client 1.1.0
File Interpreter ABI Platform
cognichem_client-1.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 160.2 kB

Release files / cognichem_client-1.1.0.tar.gz

Download URL cognichem_client-1.1.0.tar.gz
Size 80.8 kB
Tags Source
SHA-256 checksum
How to use checksums
3c4289f379418c34eaff2f8a95362ca4b26a738216b0cb70f9498c8e3113ab78
BLAKE2b-256 checksum
How to use checksums
e03a73c93623bd590604c4faa87010cadd874e3b2f8916e6f9ff1767c6642f5a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / cognichem_client-1.1.0-py3-none-any.whl

Download URL cognichem_client-1.1.0-py3-none-any.whl
Size 79.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
a5c0cdd6544fcd2dc6fe6d7d1f49d6784eafc6fa48d62e7720f9dd687e031d27
BLAKE2b-256 checksum
How to use checksums
2c89e2332748db60db60d3db804a821e0cf25cb0252057c5523ee903900d8cc8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release history Release notifications | RSS feed

This release

1.1.0 This release

2 release files

1.0.0

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page