File size: 7,711 Bytes
30cc31a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
/**
 * Two registries live here:
 *
 * 1. TOOL_NAME_MAP (below) β€” demo engine short names β†’ Hub endpoint names.
 *    Some of these target endpoints that are NOT yet registered on the live
 *    Hub (`hub-api.hound-bass.ts.net/api/registry/tools`). They'll start
 *    resolving as the build pipeline ships those images. Until then the
 *    mapping is aspirational for those lines (marked `NOT LIVE`).
 *
 * 2. LIVE_HUB_ENDPOINTS β€” a build-time SNAPSHOT of Hub endpoints (may drift). The tools page
 *    Hub as of 2026-04-16. Exported so the UI can browse / chip / plan
 *    against real, runnable tools (including Proteinea's proprietary Fc
 *    receptor panel, Ankh, RaGene, CRPS Fc-DMS, Boltz, RosettaFold3).
 */

/** Maps demo engine short tool names β†’ Hub endpoint names */
export const TOOL_NAME_MAP: Record<string, string> = {
  // ---- Design tools (research-reproduction catalog, not yet live on Hub) ----
  "RFdiffusion":  "design/rfantibody",              // NOT LIVE
  "ProteinMPNN":  "design/proteinmpnn",             // NOT LIVE
  "ColabDesign":  "design/colabdesign",             // NOT LIVE
  "BindCraft":    "design/bindcraft",               // NOT LIVE
  "AntiFold":     "design/antifold",                // NOT LIVE
  "EvoProtGrad":  "design/evoprotgrad",             // NOT LIVE
  "AbMPNN":       "design/abmpnn",                  // NOT LIVE
  "IgLM":         "design/iglm",                    // NOT LIVE
  "Germinal":     "design/germinal",                // NOT LIVE
  "mBER":         "design/mber",                    // NOT LIVE
  "Mosaic":       "design/mosaic",                  // NOT LIVE

  // ---- Structure prediction β€” pointed at REAL live endpoints where possible ----
  "AF2":          "structure/alphafold",            // LIVE
  "Chai-1":       "structure/parallel_chai",        // LIVE
  "Boltz":        "structure/boltz",                // LIVE
  "RF3":          "structure/rosettafold3",         // LIVE (RosettaFold3)
  "RF2":          "structure/rosettafold3",         // LIVE β€” best available RF-family endpoint
  "MSA":          "structure/msa_generation",       // LIVE
  "ESMFold":      "structure/esmfold",              // NOT LIVE (in tools.yaml, not deployed)
  "ABodyBuilder3":"structure/abodybuilder3",        // NOT LIVE
  "Protenix":     "structure/protenix",             // NOT LIVE

  // ---- Sequence generation & fitness β€” LIVE proprietary stack ----
  "Ankh":         "fitness/ankh_sequence_generation",   // LIVE β€” Proteinea PLM
  "D3PM":         "fitness/d3pm_sequence_generation",   // LIVE
  "InverseFold":  "fitness/inverse_fold_d3pm",          // LIVE (D3PM inverse fold)
  "ESM-Fc":       "fitness/esm_predictions_fc",         // LIVE
  "GP-Fc":        "fitness/gp_predictions_fc",          // LIVE
  "CRPS-Fc-DMS":  "fitness/crps_fc_dms_binding",        // LIVE
  "CRPS-ESM":     "fitness/crps_esm_ensemble",          // LIVE

  // ---- Fc receptor panel β€” LIVE proprietary binders ----
  "FcgR2A":       "fc/human_fcgr2a_131r_binding_v1.1",  // LIVE
  "FcgR2B":       "fc/human_fcgr2b_binding_v1.1",       // LIVE
  "FcRn-pH6":     "fc/human_fcrn_ph6_binding_v1.1",     // LIVE β€” half-life
  "FcRn-pH7":     "fc/human_fcrn_ph7_binding_v1.1",     // LIVE β€” release kinetics
  "Fc-Convert":   "fc/human_fc_format_converter",       // LIVE

  // ---- MD validation β€” LIVE ----
  "MD-Validate":  "md/physical_validation",             // LIVE
  "MD-Bench":     "md/benchmarking",                    // LIVE

  // ---- Scoring tools (build-catalog, not yet live) ----
  "DeepImmuno":   "scoring/deepimmuno",             // NOT LIVE
  "pDockQ2":      "scoring/pdockq2",                // NOT LIVE
  "PyRosetta":    "scoring/pyrosetta_scoring",      // NOT LIVE
  "ThermoMPNN":   "scoring/thermompnn",             // NOT LIVE
  "ProteinMPNN-ddG": "scoring/proteinmpnn_ddg",     // NOT LIVE
  "NetSolP":      "scoring/netsolp",                // NOT LIVE
  "DeepStabP":    "scoring/deepstabp",              // NOT LIVE

  // ---- Analysis tools ----
  "ANARCI":       "analysis/anarci",                // NOT LIVE
  "Agmata":       "agonist/agmata",                 // LIVE β€” aggregation propensity
  "Agmata-Ξ”":     "agonist/agmata-delta",           // LIVE
  "PTM":          "quality/ptm",                    // LIVE β€” post-translational modification QC
  "Struct-Filter":"sa/structural_filtration",       // LIVE
};

/**
 * Live Hub endpoints (2026-04-16), grouped by namespace.
 * Source of truth: https://hub-api.hound-bass.ts.net/api/registry/tools
 *
 * Use these for category chips, plan-proposal tools, and browser surfaces.
 * Anything not listed here is NOT runnable right now.
 */
export const LIVE_HUB_ENDPOINTS = {
  fc: [
    "fc/human_fc_format_converter",
    "fc/human_fcgr2a_131r_binding_v1.1",
    "fc/human_fcgr2b_binding_v1.1",
    "fc/human_fcrn_ph6_binding_v1.0",
    "fc/human_fcrn_ph6_binding_v1.1",
    "fc/human_fcrn_ph7_binding_v1.0",
    "fc/human_fcrn_ph7_binding_v1.1",
    "fc/id_creation",
    "fc/undo_id_creation",
  ],
  fitness: [
    "fitness/ankh_sequence_generation",
    "fitness/cfm_generation",
    "fitness/conditional_autoencoder_generation",
    "fitness/crps_esm_ensemble",
    "fitness/crps_fc_dms_binding",
    "fitness/d3pm_sequence_generation",
    "fitness/esm_predictions_fc",
    "fitness/fc_canine_bind_rank",
    "fitness/fold_to_seq_gen",
    "fitness/gp_predictions_fc",
    "fitness/inverse_fold_d3pm",
    "fitness/inverse_fold_d3pm_single",
    "fitness/multinomial_diffusion_generation",
    "fitness/scbd_generation",
    "fitness/wj_sequence_generation",
  ],
  structure: [
    "structure/alphafold",
    "structure/alphafold-old",
    "structure/boltz",
    "structure/msa_generation",
    "structure/parallel_chai",
    "structure/rosettafold3",
  ],
  ragene: [
    "ragene/inference/list_models",
    "ragene/inference/v2",
    "ragene/inference/v3",
    "ragene/inference/v4",
    "ragene/inference/v5",
    "ragene/train/v2",
    "ragene/train/v3",
    "ragene/train/v4",
    "ragene/train/v5",
  ],
  training: [
    "training/cfm_training",
    "training/conditional_autoencoder_training",
    "training/d3pm_model_training",
    "training/denoise_bytenet_training",
    "training/multinomial_diffusion_training",
    "training/scbd_training",
  ],
  md: [
    "md/benchmarking",
    "md/optimized_standard",
    "md/physical_validation",
  ],
  agonist: ["agonist/agmata", "agonist/agmata-delta"],
  analysis: ["analysis/generative_benchmark", "analysis/regression_benchmark"],
  misc: [
    "fep/glycoprotein",
    "generation/brute_force",
    "botied/scores",
    "sa/structural_filtration",
    "quality/ptm",
  ],
} as const;

/** Human-readable labels for each namespace. Used by the tool browser UI. */
export const LIVE_HUB_CATEGORY_LABELS: Record<keyof typeof LIVE_HUB_ENDPOINTS, string> = {
  fc: "Fc receptor panel",
  fitness: "Sequence generation & fitness",
  structure: "Structure prediction",
  ragene: "RaGene",
  training: "Model training",
  md: "Molecular dynamics",
  agonist: "Aggregation",
  analysis: "Benchmarks",
  misc: "Other",
};

/** Flat list of all runnable live-Hub endpoint names (2026-04-16). */
export const LIVE_HUB_ENDPOINT_LIST: string[] = Object.values(LIVE_HUB_ENDPOINTS).flat();

/** Is this endpoint currently live on the Hub? */
export function isLiveHubEndpoint(endpoint: string): boolean {
  return LIVE_HUB_ENDPOINT_LIST.includes(endpoint);
}

/**
 * Resolve a short tool name to its Hub API endpoint name.
 * Falls back to lowercase if the name is not in the map.
 */
export function resolveToolEndpoint(shortName: string): string {
  return TOOL_NAME_MAP[shortName] ?? shortName.toLowerCase();
}