Chemical Compound Information Retrieval
Retrieve comprehensive chemical compound data with proper disambiguation and cross-database validation.
LOOK UP DON'T GUESS: Never assume a CID, ChEMBL ID, or molecular property value. Always retrieve from PubChem/ChEMBL.
English-first: Always use English compound names in tool calls. Respond in user's language.
Domain Reasoning: Disambiguation
"Aspirin" = one compound. "Vitamin D" = multiple forms (D2/D3/active metabolite). For generic class names (steroids, vitamins, acids), present candidates and confirm before proceeding.
Workflow
Phase 0: Clarify (only if highly ambiguous -- skip for unambiguous names or specific IDs)
Phase 1: Disambiguate → resolve PubChem CID + ChEMBL ID
Phase 2: Retrieve data (silent)
Phase 3: Report compound profile
Phase 1: Disambiguation
# By name
result = tu.tools.PubChem_get_CID_by_compound_name(compound_name=name)
# By SYSTEMATIC (IUPAC) name -> structure, deterministic parser (no DB lookup)
opsin = tu.tools.OPSIN_name_to_structure(name="2-acetoxybenzoic acid")
# Returns {parsed, smiles, inchi, inchikey}; use the SMILES/InChIKey to anchor a
# PubChem_get_CID_by_SMILES lookup. Trade/trivial names give parsed=false -> fall
# back to PubChem_get_CID_by_compound_name for those.
# By SMILES
result = tu.tools.PubChem_get_CID_by_SMILES(smiles=smiles)
# Cross-reference
chembl_result = tu.tools.ChEMBL_search_molecules(query=name, limit=5)
Verify: CID + ChEMBL ID + canonical SMILES + stereochemistry + salt forms.
Phase 2: Data Retrieval
PubChem: PubChemgetcompoundpropertiesbyCID, PubChemBioAssaygetassaysummary, PubChemToxgetacuteeffects, PubChemgetcompound2Dimageby_CID
ChEMBL: ChEMBLgetcompoundrecordactivities, ChEMBLgetmoleculetargets, ChEMBLgetassayactivities
Optional: PubChemgetassociatedpatentsbyCID, PubChemsearchcompoundsby_similarity
Phase 3: Report
Compound Profile with: Identity (CID, ChEMBL ID, IUPAC, SMILES), Chemical Properties (MW, LogP, HBD, HBA, PSA, Lipinski), Bioactivity (targets, IC50/Ki), Drug Info (if approved), Data Sources.
Fallback Chains
| Primary |
Fallback |
| PubChem name lookup (systematic name) |
OPSINnametostructure → SMILES/InChIKey → PubChemgetCIDby_SMILES |
| PubChem name lookup |
ChEMBL search → SMILES → PubChemgetCIDbySMILES |
| ChEMBL bioactivity |
PubChem bioassay summary |
| Drug label |
Note "unavailable" |
Evidence Grading
| Grade |
Criteria |
| Confirmed |
CID + ChEMBL cross-match, InChI/SMILES agree |
| Probable |
CID found, partial ChEMBL match |
| Uncertain |
Single database only, or multiple CIDs |
| Unverified |
No cross-reference, single-source |
Bioactivity: ChEMBL > PubChem BioAssay for curated data. IC50/Ki < 100nM = potent, 100nM-1uM = moderate, >10uM = weak. Lipinski violations reduce oral bioavailability but don't disqualify.
SMILES Verification
Always verify novel SMILES: python3 src/tooluniverse/tools/smilesverifier.py --smiles "SMILESSTRING". Invalid SMILES produce wrong results or cryptic errors.
Tool Reference
PubChem: PubChemgetCIDbycompoundname, PubChemgetCIDbySMILES, PubChemgetcompoundpropertiesbyCID, PubChemgetcompound2DimagebyCID, PubChemBioAssaygetassaysummary, PubChemToxgetacuteeffects, PubChemgetassociatedpatentsbyCID, PubChemsearchcompoundsbysimilarity, PubChemsearchcompoundsby_substructure
ChEMBL: ChEMBLsearchdrugs, ChEMBLgetmolecule, ChEMBLgetactivity, ChEMBLgettarget, ChEMBLsearchtargets, ChEMBLsearchassays
Name parsing: OPSINnameto_structure (param name) — deterministic IUPAC/systematic-name → SMILES/InChI/InChIKey parser; the go-to for resolving a systematic name to structure without a DB round-trip. Trade/trivial names return parsed=false (use PubChem name lookup for those).