Skip to main content

Literature & Databases

Search PubMed, patent databases, and cross-reference multiple sources using direct tool calls.

PubMed literature search

Run a structured PubMed search and download the results as a BibTeX or CSV reference list.

from smartsbio import SmartsBio

client = SmartsBio(api_key="sk_live_...")
ws_id = client.workspaces.list()[0].id

# Direct PubMed search — structured output
result = client.tools.run(
    tool_id="ncbi_search",
    input={
        "database": "pubmed",
        "query": (
            "(CRISPR OR cas9) AND (cancer OR tumor) "
            "AND clinical[Title] AND 2022:2025[PDAT]"
        ),
        "maxResults": 20,
        "sort": "relevance",
        "workspace_id": ws_id,
        "output_path": "literature/",
        "output_format": "bibtex",
    },
)
print(f"Total hits : {result['total_hits']}")
print(f"Returned   : {result['n_returned']}")
for paper in result["articles"][:3]:
    print(f"  [{paper['pmid']}] {paper['title'][:70]}...")
    print(f"    {paper['journal']}  {paper['year']}  PMID:{paper['pmid']}")

# Download BibTeX file
bib = client.files.download(result["output_path"], workspace_id=ws_id, dest="./refs/")
print(f"BibTeX saved to {bib}")

Patent prior art search

Search Google Patents for prior art on a bioinformatics method and download a summary report.

from smartsbio import SmartsBio

client = SmartsBio(api_key="sk_live_...")
ws_id = client.workspaces.list()[0].id

# Patent prior art search
patents = client.tools.run(
    tool_id="patent_search",
    input={
        "query": "lipid nanoparticle mRNA delivery CRISPR",
        "offices": ["US", "EP", "WO"],
        "date_from": "2018-01-01",
        "date_to": "2025-01-01",
        "max_results": 25,
        "workspace_id": ws_id,
        "output_path": "patents/",
    },
)
print(f"Patents found: {patents['total_found']}")
for p in patents["results"][:3]:
    print(f"  [{p['patent_number']}] {p['title'][:60]}...")
    print(f"    Assignee: {p['assignee']}  Filed: {p['filing_date']}")

# Download patent summary report
report = client.files.download(patents["report_path"], workspace_id=ws_id, dest="./patents/")
print(f"Report saved to {report}")

Cross-database evidence synthesis

Gather evidence from PubMed, ClinVar, and STRING in separate tool calls, then stream the agent's synthesis into a single report.

from smartsbio import SmartsBio

client = SmartsBio(api_key="sk_live_...")
ws_id = client.workspaces.list()[0].id

gene = "IDH1"
variant = "R132H"

# Step 1: literature
lit = client.tools.run(
    tool_id="ncbi_search",
    input={"database": "pubmed", "query": f"{gene} {variant} glioma", "maxResults": 10},
)

# Step 2: clinical significance
clin = client.tools.run(
    tool_id="clinvar_search",
    input={"gene": gene, "variant_name": variant},
)

# Step 3: protein interactions
ppi = client.tools.run(
    tool_id="string_db_search",
    input={"protein": gene, "species": 9606, "limit": 10, "min_score": 700},
)

# Step 4: stream synthesis
print(f"\n=== {gene} {variant} Evidence Synthesis ===\n")
for chunk in client.query.stream(
    prompt=(
        f"Synthesize these findings for {gene} {variant}:\n"
        f"- {lit['total_hits']} PubMed papers, top title: {lit['articles'][0]['title'][:80]}\n"
        f"- ClinVar: {clin['clinical_significance']}, {clin['n_submissions']} submissions\n"
        f"- STRING: {len(ppi['interactions'])} interactors, top: {ppi['interactions'][0]['partner']}\n"
        "Provide a clinical summary and drug target assessment."
    ),
    workspace_id=ws_id,
):
    if chunk.type == "content":
        print(chunk.content, end="", flush=True)