lhallee commited on
Commit
f1ba145
·
verified ·
1 Parent(s): 4f3614e

Fix ESMFold2 prepared feature forwarding

Browse files

Add-only FastPLMs files-only publication. Checkpoint weights and complete-artifact attestations are unchanged.

README.md CHANGED
@@ -152,13 +152,15 @@ complex_result = model.fold(
152
  print(complex_result.ptm, complex_result.plddt.mean().item())
153
  ```
154
 
155
- The typed interface also supports RNA, modifications, covalent bonds, and
156
- distogram conditioning. Protein MSA inputs are not supported by this Fast
157
- checkpoint; every protein chain must use `msa=None`. The public schema recognizes
158
- `PocketConditioning`, but the pinned official runtime discards it and hard-codes
159
- a zero pocket feature. FastPLMs therefore rejects non-null pocket conditioning
160
- instead of silently ignoring it. Prepared `ref_pos` values are component
161
- reference geometries created during featurization, not target coordinates.
 
 
162
  Predicted coordinates and confidence scores are outputs and do not establish
163
  biochemical activity.
164
 
 
152
  print(complex_result.ptm, complex_result.plddt.mean().item())
153
  ```
154
 
155
+ The typed interface also supports RNA, modifications, and covalent bonds.
156
+ Protein MSA inputs are not supported by this Fast checkpoint; every protein
157
+ chain must use `msa=None`. The public schema recognizes `PocketConditioning` and
158
+ `DistogramConditioning`, but the pinned official forward consumes neither. Its
159
+ feature builder hard-codes a zero pocket feature and constructs distogram tensors
160
+ that the released model ignores. FastPLMs therefore rejects non-null pocket and
161
+ distogram conditioning instead of silently ignoring scientific inputs. Prepared
162
+ `ref_pos` values are component reference geometries created during featurization,
163
+ not target coordinates.
164
  Predicted coordinates and confidence scores are outputs and do not establish
165
  biochemical activity.
166
 
config.json CHANGED
@@ -29,11 +29,11 @@
29
  "fastplms_checkpoint_repo_id": "Synthyra/ESMFold2-Fast",
30
  "fastplms_checkpoint_revision": "407875bfcaa42552bfcb25acd67ee1888b790170",
31
  "fastplms_model_id": "esmfold2_fast",
32
- "fastplms_release_tool_revision": "e6dd397a9ad368c998d714f6bd64d40b533d1ed1",
33
- "fastplms_release_tool_sha256": "6d335c05aa49a232086a816deb25d248d1490529e5783acc3355b9bc6f03e0c2",
34
- "fastplms_runtime_bundle_sha256": "4646da0fba1e0aa8302ca3e78bbf9f00d1123144940f4f377010af0b21ab86b8",
35
- "fastplms_runtime_revision": "e6dd397a9ad368c998d714f6bd64d40b533d1ed1",
36
- "fastplms_source_tree_sha256": "332058883bd49a8bfda235a1d983bef21f36de1987e44c1f05ffd4247d0d67f1",
37
  "fastplms_weights_revision": "407875bfcaa42552bfcb25acd67ee1888b790170",
38
  "folding_trunk": {
39
  "dropout": 0.25,
 
29
  "fastplms_checkpoint_repo_id": "Synthyra/ESMFold2-Fast",
30
  "fastplms_checkpoint_revision": "407875bfcaa42552bfcb25acd67ee1888b790170",
31
  "fastplms_model_id": "esmfold2_fast",
32
+ "fastplms_release_tool_revision": "b5669feacd99580cab27c9e969092fe9c647b9c6",
33
+ "fastplms_release_tool_sha256": "19f8b87151866ea1bec0274bb99c98890bfbb70887276e57d3990a96d5c6b553",
34
+ "fastplms_runtime_bundle_sha256": "6e81dad15aa6df4f53633997daf8747aa49a4afbd030a65937a6f3a7d8159273",
35
+ "fastplms_runtime_revision": "b5669feacd99580cab27c9e969092fe9c647b9c6",
36
+ "fastplms_source_tree_sha256": "db6fe0054a134e77d111381b520917ffd0d795e4be0bc2cd0e97d43c59b5f3ee",
37
  "fastplms_weights_revision": "407875bfcaa42552bfcb25acd67ee1888b790170",
38
  "folding_trunk": {
39
  "dropout": 0.25,
fastplms/models/esmfold2/esmfold2_processor.py CHANGED
@@ -123,6 +123,12 @@ def clean_esmfold2_input(input: StructurePredictionInput) -> StructurePrediction
123
  "the published ESMFold2 feature pipeline drops it. FastPLMs refuses this "
124
  "input instead of silently emitting an all-zero pocket feature."
125
  )
 
 
 
 
 
 
126
 
127
  cleaned: list[Any] = []
128
  for item in input.sequences:
 
123
  "the published ESMFold2 feature pipeline drops it. FastPLMs refuses this "
124
  "input instead of silently emitting an all-zero pocket feature."
125
  )
126
+ if input.distogram_conditioning is not None:
127
+ raise NotImplementedError(
128
+ "ESMFold2 distogram conditioning is present in the upstream input schema but "
129
+ "the published ESMFold2 forward does not consume it. FastPLMs refuses this "
130
+ "input instead of silently ignoring the supplied distogram."
131
+ )
132
 
133
  cleaned: list[Any] = []
134
  for item in input.sequences:
fastplms/models/esmfold2/modeling_esmfold2.py CHANGED
@@ -74,6 +74,7 @@ from .modeling_esmfold2_common import (
74
  maybe_subsample_msa,
75
  validate_kernel_backend,
76
  validate_msa_conditioning_inputs,
 
77
  )
78
 
79
  _ESMC_FP8_LINEAR_SUFFIX = ".attn.out_proj"
@@ -1417,6 +1418,12 @@ class ESMFold2Model(
1417
  output_attentions: bool | None = None,
1418
  output_hidden_states: bool | None = None,
1419
  return_dict: bool | None = None,
 
 
 
 
 
 
1420
  ) -> ESMFold2Output | tuple[Any, ...]:
1421
  output_hidden_states, return_dict = _resolve_structure_output_controls(
1422
  self.config,
@@ -1432,6 +1439,12 @@ class ESMFold2Model(
1432
  deletion_value=deletion_value,
1433
  deletion_mean=deletion_mean,
1434
  )
 
 
 
 
 
 
1435
  tok_mask = token_attention_mask
1436
  atm_mask = atom_attention_mask
1437
  disto_idx = distogram_atom_idx
 
74
  maybe_subsample_msa,
75
  validate_kernel_backend,
76
  validate_msa_conditioning_inputs,
77
+ validate_prepared_auxiliary_inputs,
78
  )
79
 
80
  _ESMC_FP8_LINEAR_SUFFIX = ".attn.out_proj"
 
1418
  output_attentions: bool | None = None,
1419
  output_hidden_states: bool | None = None,
1420
  return_dict: bool | None = None,
1421
+ pocket_feature: Tensor | None = None,
1422
+ gt_coords: Tensor | None = None,
1423
+ is_resolved: Tensor | None = None,
1424
+ frames_idx: Tensor | None = None,
1425
+ disto_cond: Tensor | None = None,
1426
+ disto_cond_mask: Tensor | None = None,
1427
  ) -> ESMFold2Output | tuple[Any, ...]:
1428
  output_hidden_states, return_dict = _resolve_structure_output_controls(
1429
  self.config,
 
1439
  deletion_value=deletion_value,
1440
  deletion_mean=deletion_mean,
1441
  )
1442
+ validate_prepared_auxiliary_inputs(
1443
+ pocket_feature=pocket_feature,
1444
+ disto_cond=disto_cond,
1445
+ disto_cond_mask=disto_cond_mask,
1446
+ )
1447
+ del gt_coords, is_resolved, frames_idx
1448
  tok_mask = token_attention_mask
1449
  atm_mask = atom_attention_mask
1450
  disto_idx = distogram_atom_idx
fastplms/models/esmfold2/modeling_esmfold2_common.py CHANGED
@@ -57,6 +57,14 @@ MSA_CONDITIONING_INPUT_NAMES = (
57
  "deletion_value",
58
  "deletion_mean",
59
  )
 
 
 
 
 
 
 
 
60
 
61
 
62
  def validate_kernel_backend(backend: str | None) -> None:
@@ -105,6 +113,29 @@ def validate_msa_conditioning_inputs(
105
  )
106
 
107
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
108
  def _fused_active(module: nn.Module, tensor: Tensor) -> bool:
109
  """Return whether an optional fused implementation can handle this call."""
110
  return (
 
57
  "deletion_value",
58
  "deletion_mean",
59
  )
60
+ PREPARED_AUXILIARY_INPUT_NAMES = (
61
+ "pocket_feature",
62
+ "gt_coords",
63
+ "is_resolved",
64
+ "frames_idx",
65
+ "disto_cond",
66
+ "disto_cond_mask",
67
+ )
68
 
69
 
70
  def validate_kernel_backend(backend: str | None) -> None:
 
113
  )
114
 
115
 
116
+ def validate_prepared_auxiliary_inputs(
117
+ *,
118
+ pocket_feature: Tensor | None,
119
+ disto_cond: Tensor | None,
120
+ disto_cond_mask: Tensor | None,
121
+ ) -> None:
122
+ """Accept inert upstream features while rejecting unsupported conditioning."""
123
+
124
+ if pocket_feature is not None and torch.any(pocket_feature != 0).item():
125
+ raise NotImplementedError(
126
+ "The published ESMFold2 forward does not consume pocket conditioning; "
127
+ "nonzero pocket_feature values are unsupported."
128
+ )
129
+ distogram_is_active = (disto_cond is not None and torch.any(disto_cond != 0).item()) or (
130
+ disto_cond_mask is not None and torch.any(disto_cond_mask).item()
131
+ )
132
+ if distogram_is_active:
133
+ raise NotImplementedError(
134
+ "The published ESMFold2 forward does not consume distogram conditioning; "
135
+ "nonzero disto_cond or disto_cond_mask values are unsupported."
136
+ )
137
+
138
+
139
  def _fused_active(module: nn.Module, tensor: Tensor) -> bool:
140
  """Return whether an optional fused implementation can handle this call."""
141
  return (
fastplms/models/esmfold2/modeling_esmfold2_experimental.py CHANGED
@@ -59,6 +59,7 @@ from .modeling_esmfold2_common import (
59
  gather_token_to_atom,
60
  validate_kernel_backend,
61
  validate_msa_conditioning_inputs,
 
62
  )
63
 
64
  _EPS = 1e-5
@@ -689,6 +690,12 @@ class ESMFold2ExperimentalModel(ESMFold2EmbeddingMixin, ESMFold2AttentionMixin,
689
  output_attentions: bool | None = None,
690
  output_hidden_states: bool | None = None,
691
  return_dict: bool | None = None,
 
 
 
 
 
 
692
  ) -> ESMFold2Output | tuple[Any, ...]:
693
  output_hidden_states, return_dict = _resolve_structure_output_controls(
694
  self.config,
@@ -704,6 +711,12 @@ class ESMFold2ExperimentalModel(ESMFold2EmbeddingMixin, ESMFold2AttentionMixin,
704
  deletion_value=deletion_value,
705
  deletion_mean=deletion_mean,
706
  )
 
 
 
 
 
 
707
  tok_mask = token_attention_mask
708
  atm_mask = atom_attention_mask
709
  n_loops = num_loops if num_loops is not None else self.config.num_loops
 
59
  gather_token_to_atom,
60
  validate_kernel_backend,
61
  validate_msa_conditioning_inputs,
62
+ validate_prepared_auxiliary_inputs,
63
  )
64
 
65
  _EPS = 1e-5
 
690
  output_attentions: bool | None = None,
691
  output_hidden_states: bool | None = None,
692
  return_dict: bool | None = None,
693
+ pocket_feature: Tensor | None = None,
694
+ gt_coords: Tensor | None = None,
695
+ is_resolved: Tensor | None = None,
696
+ frames_idx: Tensor | None = None,
697
+ disto_cond: Tensor | None = None,
698
+ disto_cond_mask: Tensor | None = None,
699
  ) -> ESMFold2Output | tuple[Any, ...]:
700
  output_hidden_states, return_dict = _resolve_structure_output_controls(
701
  self.config,
 
711
  deletion_value=deletion_value,
712
  deletion_mean=deletion_mean,
713
  )
714
+ validate_prepared_auxiliary_inputs(
715
+ pocket_feature=pocket_feature,
716
+ disto_cond=disto_cond,
717
+ disto_cond_mask=disto_cond_mask,
718
+ )
719
+ del gt_coords, is_resolved, frames_idx
720
  tok_mask = token_attention_mask
721
  atm_mask = atom_attention_mask
722
  n_loops = num_loops if num_loops is not None else self.config.num_loops
fastplms_bundle.py CHANGED
The diff for this file is too large to render. See raw diff
 
modeling_fastplms.py CHANGED
@@ -12,7 +12,7 @@ from zipfile import ZIP_DEFLATED, ZipFile
12
 
13
  from .fastplms_bundle import RUNTIME_DATA, RUNTIME_HASH
14
 
15
- if RUNTIME_HASH != "4646da0fba1e0aa8302ca3e78bbf9f00d1123144940f4f377010af0b21ab86b8":
16
  raise RuntimeError("FastPLMs runtime identity differs from the bridge.")
17
 
18
  _RUNTIME_TEMPORARIES = []
 
12
 
13
  from .fastplms_bundle import RUNTIME_DATA, RUNTIME_HASH
14
 
15
+ if RUNTIME_HASH != "6e81dad15aa6df4f53633997daf8747aa49a4afbd030a65937a6f3a7d8159273":
16
  raise RuntimeError("FastPLMs runtime identity differs from the bridge.")
17
 
18
  _RUNTIME_TEMPORARIES = []
runtime-attestation.json CHANGED
@@ -6,9 +6,9 @@
6
  "LICENSES/biohub-transformers/LICENSE": "sha256:77fd4710def9ec3c0f6225800e0235f15a425abd4a8b03559127fcd782612049",
7
  "LICENSES/protein-ttt/LICENSE": "sha256:bb01e7d5554f9e2e117172e56551452f68a7818df7bc8e71cd7a776a1d4ba3df",
8
  "LICENSES/protein-ttt/PROVENANCE.md": "sha256:dc641c37353c2efd50ccbdb316ca4aae495ec02c1563e0e15bac92f75fc482e5",
9
- "README.md": "sha256:8eb4b722439ea0691e41111c33af8784bae13898595f121e7648ff28bac8a1e1",
10
  "THIRD_PARTY_NOTICES.md": "sha256:25704b3c76404696cae52e7fca13088d329f70f412687340351259e86cd62baa",
11
- "config.json": "sha256:0b2d1dc1a12593fa81777fd6da4c980017fb3ec18a1060f493fa53f299bcb4e9",
12
  "fastplms/__init__.py": "sha256:8503e02debf24abc6d33c1913ff3eb9f245e63f7e62017e220d072c7393fdf2c",
13
  "fastplms/attention/__init__.py": "sha256:ab3c0b6156968f418f3c97ea664959cb978f4137717b4362213bcfe25ab5e3d6",
14
  "fastplms/attention/_core.py": "sha256:09d0f71a5ea2ad2138c9441f6a2f72bbf8e72729be41d8db737b163f36ce47da",
@@ -46,7 +46,7 @@
46
  "fastplms/models/esmfold2/esmfold2_parsing.py": "sha256:6ca4a2d85d6158cadcde79bf8d1820c54eeb2160e00b99643c29e270d0a3f870",
47
  "fastplms/models/esmfold2/esmfold2_predicted_aligned_error.py": "sha256:b76577c9e17bdef5417fea35c6ac134cff2ba949a1c9cb389323134541e52d04",
48
  "fastplms/models/esmfold2/esmfold2_prepare_input.py": "sha256:f2b5f63a451555d41944e5abc8b85a978edfb456ce493821b313f8343d3eed19",
49
- "fastplms/models/esmfold2/esmfold2_processor.py": "sha256:c3be4ef4737f86c7f7969749ad1ad5e483fb6e2a7a2cb7eeef52afad28d3c40e",
50
  "fastplms/models/esmfold2/esmfold2_protein_chain.py": "sha256:e87d7cbfab56d0cd420d8ce8b15a23872cdfe6c1036f2467555e57691af172af",
51
  "fastplms/models/esmfold2/esmfold2_protein_complex.py": "sha256:ee78539192414000b78da7285175f0316d79f549c179678638d009054b4985f7",
52
  "fastplms/models/esmfold2/esmfold2_protein_structure.py": "sha256:d77254171dd7dc7e269693091e51aa04a7cd8dc4a442d425fab7d922c1b1308d",
@@ -55,28 +55,28 @@
55
  "fastplms/models/esmfold2/esmfold2_system.py": "sha256:4a0b339bc7446a9ca255f6005ecb8d385c69b7a3e57170c5a48e372bb2340d13",
56
  "fastplms/models/esmfold2/esmfold2_types.py": "sha256:8963440d40e3143b984679a716a5ac8327fa09692765836dea179c41e2bc9f5d",
57
  "fastplms/models/esmfold2/esmfold2_utils_types.py": "sha256:b846d61a383fc55091231ec8bc2b829045a4edb52dcd3907c30b81b6057fd4eb",
58
- "fastplms/models/esmfold2/modeling_esmfold2.py": "sha256:6b6e4629ad04c561ea8c5aa674eae59f7d4284e97c4d027a5a5ef50db258202c",
59
- "fastplms/models/esmfold2/modeling_esmfold2_common.py": "sha256:d9545f880ba6e92b7ed59a7894a4172fb7470bd4b2077fe8ed570ba7cf8bc614",
60
- "fastplms/models/esmfold2/modeling_esmfold2_experimental.py": "sha256:22e24d76869045f545ef192e748d5ba995078c8758becae62a284f68da82e718",
61
  "fastplms/models/esmfold2/protein_reference_geometry.json": "sha256:c726d81b928df0005b2d6877e2c0d5ef3ebfb11744e04ca8972388057dc565c0",
62
  "fastplms/models/esmfold2/protein_utils.py": "sha256:a51cdad1769620389ca58d6782bc787ed70cadb1f310689cf3dcd1d2d2fa92be",
63
  "fastplms/models/esmfold2/reproducibility.py": "sha256:2027064e3eea918f535d9b60734a3bc9288478f5b957847266d328dcfca88443",
64
  "fastplms/models/ttt.py": "sha256:f1d7f9298a930f4c40f8e321ffa08b09d1c5b8492bca623bdc7bfd03ec85774d",
65
  "fastplms/registry.py": "sha256:cb37799dae5a4c0c780089ab2cca4cc56300c1c5f515b275892aa4e1c4b97eb6",
66
  "fastplms/runtime.py": "sha256:9521c37fcd168bf9a4137277fb73672403ccf30d70d4845aa879fb22f42ddeb6",
67
- "fastplms_bundle.py": "sha256:4cf8de3fd1f7126663a22276e4fe16f75282e49089c027cbeb25987831ce6ca1",
68
- "modeling_fastplms.py": "sha256:a21e8b519dd202ac28208960221cc0264889425c0c71631003ae9422694ab181",
69
  "requirements.txt": "sha256:accda6ebc17b5bc073fff111d29a25fe8fbe0b66b77687aee51100737ccdd8a8"
70
  },
71
  "model_id": "esmfold2_fast",
72
  "redistributable": true,
73
- "release_tool_revision": "e6dd397a9ad368c998d714f6bd64d40b533d1ed1",
74
- "release_tool_sha256": "6d335c05aa49a232086a816deb25d248d1490529e5783acc3355b9bc6f03e0c2",
75
- "runtime_bundle_sha256": "4646da0fba1e0aa8302ca3e78bbf9f00d1123144940f4f377010af0b21ab86b8",
76
- "runtime_revision": "e6dd397a9ad368c998d714f6bd64d40b533d1ed1",
77
  "schema_version": 2,
78
  "scope": "runtime-only",
79
- "source_tree_sha256": "332058883bd49a8bfda235a1d983bef21f36de1987e44c1f05ffd4247d0d67f1",
80
  "weights": {
81
  "repo_id": "Synthyra/ESMFold2-Fast",
82
  "revision": "407875bfcaa42552bfcb25acd67ee1888b790170"
 
6
  "LICENSES/biohub-transformers/LICENSE": "sha256:77fd4710def9ec3c0f6225800e0235f15a425abd4a8b03559127fcd782612049",
7
  "LICENSES/protein-ttt/LICENSE": "sha256:bb01e7d5554f9e2e117172e56551452f68a7818df7bc8e71cd7a776a1d4ba3df",
8
  "LICENSES/protein-ttt/PROVENANCE.md": "sha256:dc641c37353c2efd50ccbdb316ca4aae495ec02c1563e0e15bac92f75fc482e5",
9
+ "README.md": "sha256:e294773edd87bf543956fae98b8ba012a24c9ad79df758beedbd856500cd0c40",
10
  "THIRD_PARTY_NOTICES.md": "sha256:25704b3c76404696cae52e7fca13088d329f70f412687340351259e86cd62baa",
11
+ "config.json": "sha256:a7311f496acad420a6e5499474b95fa4493f1086ef0372ab7226a958d4377370",
12
  "fastplms/__init__.py": "sha256:8503e02debf24abc6d33c1913ff3eb9f245e63f7e62017e220d072c7393fdf2c",
13
  "fastplms/attention/__init__.py": "sha256:ab3c0b6156968f418f3c97ea664959cb978f4137717b4362213bcfe25ab5e3d6",
14
  "fastplms/attention/_core.py": "sha256:09d0f71a5ea2ad2138c9441f6a2f72bbf8e72729be41d8db737b163f36ce47da",
 
46
  "fastplms/models/esmfold2/esmfold2_parsing.py": "sha256:6ca4a2d85d6158cadcde79bf8d1820c54eeb2160e00b99643c29e270d0a3f870",
47
  "fastplms/models/esmfold2/esmfold2_predicted_aligned_error.py": "sha256:b76577c9e17bdef5417fea35c6ac134cff2ba949a1c9cb389323134541e52d04",
48
  "fastplms/models/esmfold2/esmfold2_prepare_input.py": "sha256:f2b5f63a451555d41944e5abc8b85a978edfb456ce493821b313f8343d3eed19",
49
+ "fastplms/models/esmfold2/esmfold2_processor.py": "sha256:4eaed444d316bdb31a72b518c64ad11ede6554b88f22a68fd9bf109702529994",
50
  "fastplms/models/esmfold2/esmfold2_protein_chain.py": "sha256:e87d7cbfab56d0cd420d8ce8b15a23872cdfe6c1036f2467555e57691af172af",
51
  "fastplms/models/esmfold2/esmfold2_protein_complex.py": "sha256:ee78539192414000b78da7285175f0316d79f549c179678638d009054b4985f7",
52
  "fastplms/models/esmfold2/esmfold2_protein_structure.py": "sha256:d77254171dd7dc7e269693091e51aa04a7cd8dc4a442d425fab7d922c1b1308d",
 
55
  "fastplms/models/esmfold2/esmfold2_system.py": "sha256:4a0b339bc7446a9ca255f6005ecb8d385c69b7a3e57170c5a48e372bb2340d13",
56
  "fastplms/models/esmfold2/esmfold2_types.py": "sha256:8963440d40e3143b984679a716a5ac8327fa09692765836dea179c41e2bc9f5d",
57
  "fastplms/models/esmfold2/esmfold2_utils_types.py": "sha256:b846d61a383fc55091231ec8bc2b829045a4edb52dcd3907c30b81b6057fd4eb",
58
+ "fastplms/models/esmfold2/modeling_esmfold2.py": "sha256:0443ef06718c60b01a7a74874f9a33019926820ca512d99cd286eda958259929",
59
+ "fastplms/models/esmfold2/modeling_esmfold2_common.py": "sha256:f8c4f7349ecd8f2671be9ff2d58c8729d07426c0b8fc7ed047b05a168e50d29d",
60
+ "fastplms/models/esmfold2/modeling_esmfold2_experimental.py": "sha256:de8d215d137744bf4d2b1c7bdf98617d7c20a425ea25d9c74f88b34d3303ca84",
61
  "fastplms/models/esmfold2/protein_reference_geometry.json": "sha256:c726d81b928df0005b2d6877e2c0d5ef3ebfb11744e04ca8972388057dc565c0",
62
  "fastplms/models/esmfold2/protein_utils.py": "sha256:a51cdad1769620389ca58d6782bc787ed70cadb1f310689cf3dcd1d2d2fa92be",
63
  "fastplms/models/esmfold2/reproducibility.py": "sha256:2027064e3eea918f535d9b60734a3bc9288478f5b957847266d328dcfca88443",
64
  "fastplms/models/ttt.py": "sha256:f1d7f9298a930f4c40f8e321ffa08b09d1c5b8492bca623bdc7bfd03ec85774d",
65
  "fastplms/registry.py": "sha256:cb37799dae5a4c0c780089ab2cca4cc56300c1c5f515b275892aa4e1c4b97eb6",
66
  "fastplms/runtime.py": "sha256:9521c37fcd168bf9a4137277fb73672403ccf30d70d4845aa879fb22f42ddeb6",
67
+ "fastplms_bundle.py": "sha256:b09ae39e6ef318b847e3ff9ca8b5c0dd48a48bd1576994c71c0b5167189e40f2",
68
+ "modeling_fastplms.py": "sha256:c9a41e763b36487b36afb7ec4836a1dd60c75bd12b2a06dd020a16a4ebdcc912",
69
  "requirements.txt": "sha256:accda6ebc17b5bc073fff111d29a25fe8fbe0b66b77687aee51100737ccdd8a8"
70
  },
71
  "model_id": "esmfold2_fast",
72
  "redistributable": true,
73
+ "release_tool_revision": "b5669feacd99580cab27c9e969092fe9c647b9c6",
74
+ "release_tool_sha256": "19f8b87151866ea1bec0274bb99c98890bfbb70887276e57d3990a96d5c6b553",
75
+ "runtime_bundle_sha256": "6e81dad15aa6df4f53633997daf8747aa49a4afbd030a65937a6f3a7d8159273",
76
+ "runtime_revision": "b5669feacd99580cab27c9e969092fe9c647b9c6",
77
  "schema_version": 2,
78
  "scope": "runtime-only",
79
+ "source_tree_sha256": "db6fe0054a134e77d111381b520917ffd0d795e4be0bc2cd0e97d43c59b5f3ee",
80
  "weights": {
81
  "repo_id": "Synthyra/ESMFold2-Fast",
82
  "revision": "407875bfcaa42552bfcb25acd67ee1888b790170"