4.1 KiB
4.1 KiB
title, task, lineage_type, upstream_source, upstream_sha, imported_at, prompt_class, upstream_changes, author, validated
| title | task | lineage_type | upstream_source | upstream_sha | imported_at | prompt_class | upstream_changes | author | validated |
|---|---|---|---|---|---|---|---|---|---|
| API-Specific Fix Reference | import | https://github.com/mims-harvard/ToolUniverse/blob/e2520a96/skills/devtu-code-optimization/references/api-fixes.md | e2520a96 | 2026-06-26 | prompt | accepted | upstream | false |
API-Specific Fix Reference
Patterns discovered through rounds 52–78 of role-play debugging.
Quick Lookup Table
| Tool/API | Issue | Fix |
|---|---|---|
| GtoPdb | ?name=AR returns 13+ targets |
Use ?geneSymbol=AR first, fall back to ?name= |
| GtoPdb | Multi-word names return 0 | Add multi_word_hint suggesting first word only |
| CIViC | Fusion notation BCR-ABL1 → 0 results |
Normalize - → :: (but not for mutations like T790M) |
| CIViC | Therapy lowercase → 0 results | Auto .title() and disclose in normalization_note |
| CIViC | query + variant_name — one silently wins |
Apply AND logic client-side |
| CancerPrognosis | expression_units wrong | Prefer profile_name from API over inference from profile_id |
| CancerPrognosis | study_note wrong when explicit | Detect explicit specification, use different message |
| SYNERGxDB | cancer_type param silently ignored |
Add alias handling for cancer_type, tissue_name, tissue |
| GTEx | gtex_v10 returns empty |
Default to gtex_v8; note limitation when v10 requested |
| ENCODE | ChIP-seq → 0 results |
Map to TF ChIP-seq |
| ClinVar | [variant_id] field → error |
Use [uid] |
| KEGG find_genes | organism param ignored | Use /find/{organism}/{keyword} not /find/genes/{keyword} |
| MetabolomicsWorkbench | exactmass broken | Use moverz/REFMET/{mass}/M/{tolerance} |
| BindingDB | getLigands typo |
Use getLinds (actual API typo in URL) |
| PharmGKB | pharmgkbid → 404 |
Use clinpgxid from CPIC response |
| CPIC | Warfarin 0 recommendations | Route to /algorithm endpoint |
| CPIC | Bare value in PostgREST | Prepend eq. prefix |
| HPA | ppi column → error |
Remove; use enhanced/supported/approved |
| HMDB | No public API | Return status: error explaining alternatives |
| RegulomeDB | assembly=hg19 wrong |
Use genome=GRCh38 |
| DGIdb | interaction_types/sources ignored |
Filter client-side |
| GxA | geneId param ignored |
Filter client-side |
| MetaboLights | size/page ignored |
Paginate client-side |
| RCSB | type: null in schema |
Use ["array", "null"] |
| ProteomeXchange | title accessed as dict |
Access as plain string |
Detailed Patterns
GtoPdb Gene Symbol Disambiguation (Feature-54B-001)
# Try precise geneSymbol first
gs_resp = request_with_retry(f"{base_url}/targets?geneSymbol={gene_symbol}")
if gs_resp.status_code == 200 and gs_resp.json():
target_id = gs_resp.json()[0]["targetId"]
else:
# Fall back to name (may return multiple)
name_resp = request_with_retry(f"{base_url}/targets?name={gene_symbol}")
...
CIViC Fusion vs Mutation Regex (Feature-56A-001)
def _maybe_fuse(m):
second = m.group(2)
# Protein-change: single letter + digits + letter/asterisk (e.g. T790M, V600E)
if re.match(r"^[A-Z]\d+[A-Z*]?$", second):
return m.group(0) # leave unchanged — it's a mutation
return m.group(1) + "::" + second
normalized = re.sub(r"\b([A-Z][A-Z0-9]*)-([A-Z][A-Z0-9]+)\b", _maybe_fuse, mol_profile)
CPIC PostgREST Equality Filter (Feature-68A-004)
def _postgrest_eq(value):
v = str(value)
return v if v.startswith("eq.") else f"eq.{v}"
params["genesymbol"] = _postgrest_eq(gene_symbol)
ENCODE Assay Title Alias (Feature-73B)
ASSAY_ALIASES = {"ChIP-seq": "TF ChIP-seq", "CHIP": "TF ChIP-seq"}
assay_title = ASSAY_ALIASES.get(assay_title, assay_title)
GTEx Dataset Safety (Feature-69A-001)
dataset = arguments.get("dataset", "gtex_v8")
if dataset == "gtex_v10":
result["dataset_note"] = "gtex_v10 may return empty; gtex_v8 is recommended."
Broken API Response
# Wrong: return stub success data
# Right:
return {
"status": "error",
"message": "HMDB has no public REST API. Use MetabolomicsWorkbench or ChEBI instead."
}