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)