You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
"entirely outside map", "outside map", "model is outside",
54
+
"model entirely outside", "stopping as model",
55
+
]
56
+
ifany(s in _rl for s in _outside_signals):
57
+
# Hard evidence: model is not in the map at all
58
+
info["placement_probed"] =True
59
+
info["placement_probe_result"] ="needs_dock"
60
+
elifnot info.get("placement_probed"):
61
+
# Unknown failure — prevent infinite probe retry
62
+
info["placement_probed"] =True
63
+
# Leave placement_probe_result as None (inconclusive)
64
+
continue
65
+
```
66
+
67
+
Three outcomes:
68
+
-**"outside map" crash** → `placement_probed=True, result="needs_dock"` → routes to `dock_model`
69
+
-**Other crash** → `placement_probed=True, result=None` → inconclusive, falls through to `obtain_model`
70
+
-**Second failed probe** → `placement_probed` already set, no overwrite; guard on `not info.get("placement_probed")` prevents the inconclusive case from clobbering an earlier definitive result
71
+
72
+
### Fix 2 — Client-side model cell transport (S2L-b)
73
+
74
+
The client reads the model's CRYST1 cell (which it has access to) and transmits
75
+
it in `session_state["unplaced_model_cell"]`. The server uses this pre-read cell
76
+
in `_check_cell_mismatch` instead of trying to open the file:
77
+
78
+
**Client side** (`programs/ai_agent.py`): Before assembling `session_info`,
79
+
read the CRYST1 cell from the first unplaced PDB in `active_files` and add it
80
+
to `session_info["unplaced_model_cell"]`. Only populated when placement hasn't
81
+
been confirmed by history (no `dock_done`, no `refine_done`).
0 commit comments