dayhoff-tools 1.14.1__py3-none-any.whl → 1.14.2__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- dayhoff_tools/batch/__init__.py +8 -0
- dayhoff_tools/batch/workers/__init__.py +12 -0
- dayhoff_tools/batch/workers/base.py +150 -0
- dayhoff_tools/batch/workers/boltz.py +407 -0
- dayhoff_tools/batch/workers/embed_t5.py +92 -0
- dayhoff_tools/cli/batch/__init__.py +85 -0
- dayhoff_tools/cli/batch/aws_batch.py +401 -0
- dayhoff_tools/cli/batch/commands/__init__.py +25 -0
- dayhoff_tools/cli/batch/commands/boltz.py +362 -0
- dayhoff_tools/cli/batch/commands/cancel.py +82 -0
- dayhoff_tools/cli/batch/commands/embed_t5.py +303 -0
- dayhoff_tools/cli/batch/commands/finalize.py +206 -0
- dayhoff_tools/cli/batch/commands/list_jobs.py +78 -0
- dayhoff_tools/cli/batch/commands/local.py +95 -0
- dayhoff_tools/cli/batch/commands/logs.py +142 -0
- dayhoff_tools/cli/batch/commands/retry.py +142 -0
- dayhoff_tools/cli/batch/commands/status.py +214 -0
- dayhoff_tools/cli/batch/commands/submit.py +215 -0
- dayhoff_tools/cli/batch/job_id.py +151 -0
- dayhoff_tools/cli/batch/manifest.py +293 -0
- dayhoff_tools/cli/engines_studios/engine-studio-cli.md +26 -21
- dayhoff_tools/cli/engines_studios/engine_commands.py +16 -89
- dayhoff_tools/cli/engines_studios/ssh_config.py +96 -0
- dayhoff_tools/cli/engines_studios/studio_commands.py +13 -2
- dayhoff_tools/cli/main.py +14 -0
- {dayhoff_tools-1.14.1.dist-info → dayhoff_tools-1.14.2.dist-info}/METADATA +6 -1
- {dayhoff_tools-1.14.1.dist-info → dayhoff_tools-1.14.2.dist-info}/RECORD +29 -8
- {dayhoff_tools-1.14.1.dist-info → dayhoff_tools-1.14.2.dist-info}/WHEEL +0 -0
- {dayhoff_tools-1.14.1.dist-info → dayhoff_tools-1.14.2.dist-info}/entry_points.txt +0 -0
|
@@ -430,10 +430,13 @@ code tunnel --name my-engine
|
|
|
430
430
|
- SSH agent forwarding: `-A` flag
|
|
431
431
|
- Config file options: ControlMaster, compression, etc.
|
|
432
432
|
|
|
433
|
-
**
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
433
|
+
**Note:** SSH config is automatically updated after `dh engine launch`, `dh engine start`, and `dh studio attach`. You typically don't need to run `config-ssh` manually.
|
|
434
|
+
|
|
435
|
+
**When to use `config-ssh` manually:**
|
|
436
|
+
- After restarting your terminal/shell
|
|
437
|
+
- If SSH entries are missing for some reason
|
|
438
|
+
- When using `--all` to add other users' engines
|
|
439
|
+
- When using `--admin` for ec2-user access
|
|
437
440
|
|
|
438
441
|
---
|
|
439
442
|
|
|
@@ -785,12 +788,17 @@ Attach your studio to an engine with real-time progress tracking through all 6 a
|
|
|
785
788
|
|
|
786
789
|
**Usage:**
|
|
787
790
|
```bash
|
|
788
|
-
dh studio2 attach <engine-name-or-id> [
|
|
791
|
+
dh studio2 attach <engine-name-or-id> [options]
|
|
789
792
|
```
|
|
790
793
|
|
|
791
794
|
**Arguments:**
|
|
792
795
|
- `engine-name-or-id` - Engine name or EC2 instance ID
|
|
793
796
|
|
|
797
|
+
**Options:**
|
|
798
|
+
- `--skip-ssh-config` - Don't automatically update SSH config
|
|
799
|
+
- `--user <username>` - User whose studio to attach (defaults to current user, use for testing/admin)
|
|
800
|
+
- `--env <env>` - Target environment
|
|
801
|
+
|
|
794
802
|
**Examples:**
|
|
795
803
|
```bash
|
|
796
804
|
dh studio2 attach my-engine
|
|
@@ -811,6 +819,7 @@ Progress ████████████████████ 100%
|
|
|
811
819
|
Update State
|
|
812
820
|
|
|
813
821
|
✓ Studio attached successfully!
|
|
822
|
+
✓ SSH config updated
|
|
814
823
|
|
|
815
824
|
Your files are now available at:
|
|
816
825
|
/studios/alice/
|
|
@@ -819,6 +828,8 @@ Connect with:
|
|
|
819
828
|
ssh my-engine
|
|
820
829
|
```
|
|
821
830
|
|
|
831
|
+
**Note:** SSH config is automatically updated after successful attachment, so you can immediately `ssh my-engine` without running `dh engine config-ssh` first. Use `--skip-ssh-config` to disable this behavior.
|
|
832
|
+
|
|
822
833
|
**6-step attachment process:**
|
|
823
834
|
1. **Validate Engine** - Ensure engine is ready (~250ms)
|
|
824
835
|
2. **Find Device Slot** - Locate available `/dev/sd[f-p]` (~150ms)
|
|
@@ -971,19 +982,16 @@ Reset studio status to 'available'? [y/N]: y
|
|
|
971
982
|
### Daily Development
|
|
972
983
|
|
|
973
984
|
```bash
|
|
974
|
-
# Launch engine
|
|
985
|
+
# Launch engine (SSH config updated automatically)
|
|
975
986
|
dh engine2 launch dev-work --type cpu
|
|
976
987
|
|
|
977
|
-
# Add to SSH config
|
|
978
|
-
dh engine2 config-ssh
|
|
979
|
-
|
|
980
988
|
# Create studio (first time only)
|
|
981
989
|
dh studio2 create --size 100
|
|
982
990
|
|
|
983
|
-
# Attach studio
|
|
991
|
+
# Attach studio (SSH config updated automatically)
|
|
984
992
|
dh studio2 attach dev-work
|
|
985
993
|
|
|
986
|
-
# Connect with native SSH
|
|
994
|
+
# Connect with native SSH - works immediately!
|
|
987
995
|
ssh dev-work
|
|
988
996
|
|
|
989
997
|
# When done, detach and terminate
|
|
@@ -994,16 +1002,13 @@ dh engine2 terminate dev-work -y
|
|
|
994
1002
|
### GPU Training with Coffee Lock
|
|
995
1003
|
|
|
996
1004
|
```bash
|
|
997
|
-
# Launch GPU engine
|
|
1005
|
+
# Launch GPU engine (SSH config updated automatically)
|
|
998
1006
|
dh engine2 launch training --type a10g
|
|
999
1007
|
|
|
1000
|
-
# Add to SSH config
|
|
1001
|
-
dh engine2 config-ssh
|
|
1002
|
-
|
|
1003
1008
|
# Set coffee lock for long job
|
|
1004
1009
|
dh engine2 coffee training 8h
|
|
1005
1010
|
|
|
1006
|
-
# Attach and start work
|
|
1011
|
+
# Attach and start work (SSH config updated automatically)
|
|
1007
1012
|
dh studio2 attach training
|
|
1008
1013
|
ssh training
|
|
1009
1014
|
|
|
@@ -1017,18 +1022,18 @@ dh engine2 terminate training -y
|
|
|
1017
1022
|
### Multi-Engine Development
|
|
1018
1023
|
|
|
1019
1024
|
```bash
|
|
1020
|
-
# Launch multiple engines
|
|
1025
|
+
# Launch multiple engines (each updates SSH config)
|
|
1021
1026
|
dh engine2 launch frontend --type cpu
|
|
1022
1027
|
dh engine2 launch backend --type cpu
|
|
1023
1028
|
dh engine2 launch ml --type t4
|
|
1024
1029
|
|
|
1025
|
-
#
|
|
1026
|
-
dh engine2 config-ssh
|
|
1027
|
-
|
|
1028
|
-
# Now use direct SSH
|
|
1030
|
+
# SSH config already updated - connect directly
|
|
1029
1031
|
ssh frontend
|
|
1030
1032
|
ssh backend
|
|
1031
1033
|
ssh ml
|
|
1034
|
+
|
|
1035
|
+
# Or manually refresh if needed
|
|
1036
|
+
dh engine2 config-ssh
|
|
1032
1037
|
```
|
|
1033
1038
|
|
|
1034
1039
|
### Monitoring Idle Detection
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
"""Engine CLI commands for engines_studios system."""
|
|
2
2
|
|
|
3
3
|
import os
|
|
4
|
-
import subprocess
|
|
5
4
|
from typing import Optional
|
|
6
5
|
|
|
7
6
|
import click
|
|
@@ -9,89 +8,7 @@ import click
|
|
|
9
8
|
from .api_client import StudioManagerClient
|
|
10
9
|
from .auth import check_aws_auth, detect_aws_environment, get_aws_username
|
|
11
10
|
from .progress import format_idle_state, format_time_ago, wait_with_progress
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
def _update_ssh_config_silent(client: StudioManagerClient, env: str) -> bool:
|
|
15
|
-
"""Update SSH config silently. Returns True if successful."""
|
|
16
|
-
ssh_config_path = os.path.expanduser("~/.ssh/config")
|
|
17
|
-
|
|
18
|
-
try:
|
|
19
|
-
# Read existing config
|
|
20
|
-
if os.path.exists(ssh_config_path):
|
|
21
|
-
with open(ssh_config_path, "r") as f:
|
|
22
|
-
lines = f.readlines()
|
|
23
|
-
else:
|
|
24
|
-
lines = []
|
|
25
|
-
|
|
26
|
-
# Remove managed entries
|
|
27
|
-
managed_start = "# BEGIN DAYHOFF ENGINES\n"
|
|
28
|
-
managed_end = "# END DAYHOFF ENGINES\n"
|
|
29
|
-
|
|
30
|
-
new_lines = []
|
|
31
|
-
skip = False
|
|
32
|
-
for line in lines:
|
|
33
|
-
if line == managed_start:
|
|
34
|
-
skip = True
|
|
35
|
-
elif line == managed_end:
|
|
36
|
-
skip = False
|
|
37
|
-
continue
|
|
38
|
-
elif not skip:
|
|
39
|
-
new_lines.append(line)
|
|
40
|
-
|
|
41
|
-
# Get engines
|
|
42
|
-
result = client.list_engines()
|
|
43
|
-
engines = result.get("engines", [])
|
|
44
|
-
|
|
45
|
-
if not engines:
|
|
46
|
-
return False
|
|
47
|
-
|
|
48
|
-
# Generate new entries
|
|
49
|
-
config_entries = [managed_start]
|
|
50
|
-
|
|
51
|
-
try:
|
|
52
|
-
current_user = get_aws_username()
|
|
53
|
-
except RuntimeError:
|
|
54
|
-
# Not authenticated - can't determine user, skip filtering
|
|
55
|
-
current_user = None
|
|
56
|
-
|
|
57
|
-
for engine in engines:
|
|
58
|
-
user = engine.get("user", "unknown")
|
|
59
|
-
|
|
60
|
-
# Skip engines owned by other users (unless user is unknown or we can't determine current user)
|
|
61
|
-
if current_user and user != "unknown" and user != current_user:
|
|
62
|
-
continue
|
|
63
|
-
|
|
64
|
-
instance_id = engine.get("instance_id")
|
|
65
|
-
name = engine.get("name", instance_id)
|
|
66
|
-
state = engine.get("state", "unknown")
|
|
67
|
-
|
|
68
|
-
# Only add running engines
|
|
69
|
-
if state != "running":
|
|
70
|
-
continue
|
|
71
|
-
|
|
72
|
-
# Map environment to AWS profile
|
|
73
|
-
profile = f"{env}-devaccess"
|
|
74
|
-
|
|
75
|
-
config_entries.append(f"\nHost {name}\n")
|
|
76
|
-
config_entries.append(f" HostName {instance_id}\n")
|
|
77
|
-
config_entries.append(f" User {user}\n")
|
|
78
|
-
config_entries.append(f" ForwardAgent yes\n")
|
|
79
|
-
config_entries.append(
|
|
80
|
-
f" ProxyCommand aws ssm start-session --target %h --document-name AWS-StartSSHSession --parameters 'portNumber=%p' --profile {profile}\n"
|
|
81
|
-
)
|
|
82
|
-
|
|
83
|
-
config_entries.append(managed_end)
|
|
84
|
-
|
|
85
|
-
# Write back
|
|
86
|
-
new_lines.extend(config_entries)
|
|
87
|
-
|
|
88
|
-
with open(ssh_config_path, "w") as f:
|
|
89
|
-
f.writelines(new_lines)
|
|
90
|
-
|
|
91
|
-
return True
|
|
92
|
-
|
|
93
|
-
except Exception:
|
|
94
|
-
return False
|
|
11
|
+
from .ssh_config import update_ssh_config_silent
|
|
95
12
|
|
|
96
13
|
|
|
97
14
|
@click.group()
|
|
@@ -207,7 +124,7 @@ def launch_engine(
|
|
|
207
124
|
|
|
208
125
|
# Update SSH config unless skipped
|
|
209
126
|
if not skip_ssh_config:
|
|
210
|
-
if
|
|
127
|
+
if update_ssh_config_silent(client, env):
|
|
211
128
|
click.echo("✓ SSH config updated")
|
|
212
129
|
|
|
213
130
|
click.echo(f"\nConnect with:")
|
|
@@ -215,15 +132,20 @@ def launch_engine(
|
|
|
215
132
|
click.echo(f" ssh {name}")
|
|
216
133
|
|
|
217
134
|
except TimeoutError:
|
|
218
|
-
click.echo(
|
|
135
|
+
click.echo("\n⚠ Engine is still initializing. Check status with:")
|
|
219
136
|
click.echo(f" dh engine status {name}")
|
|
220
137
|
|
|
138
|
+
# Still update SSH config on timeout - engine is likely running
|
|
139
|
+
if not skip_ssh_config:
|
|
140
|
+
if update_ssh_config_silent(client, env):
|
|
141
|
+
click.echo("✓ SSH config updated")
|
|
142
|
+
|
|
221
143
|
except Exception as e:
|
|
222
144
|
error_msg = str(e)
|
|
223
145
|
|
|
224
146
|
# Check for quota/limit errors
|
|
225
147
|
if "VcpuLimitExceeded" in error_msg or "vCPU limit" in error_msg:
|
|
226
|
-
click.echo(
|
|
148
|
+
click.echo("✗ Failed to launch engine: vCPU quota exceeded", err=True)
|
|
227
149
|
click.echo("", err=True)
|
|
228
150
|
click.echo(
|
|
229
151
|
f"The {env} AWS account has insufficient vCPU quota for {engine_type} instances.",
|
|
@@ -405,7 +327,7 @@ def start_engine(
|
|
|
405
327
|
|
|
406
328
|
# Update SSH config unless skipped
|
|
407
329
|
if not skip_ssh_config:
|
|
408
|
-
if
|
|
330
|
+
if update_ssh_config_silent(client, env):
|
|
409
331
|
click.echo("✓ SSH config updated")
|
|
410
332
|
|
|
411
333
|
click.echo(f"\nConnect with:")
|
|
@@ -413,9 +335,14 @@ def start_engine(
|
|
|
413
335
|
click.echo(f" ssh {engine_name}")
|
|
414
336
|
|
|
415
337
|
except TimeoutError:
|
|
416
|
-
click.echo(
|
|
338
|
+
click.echo("\n⚠ Engine is still starting. Check status with:")
|
|
417
339
|
click.echo(f" dh engine status {engine_name}")
|
|
418
340
|
|
|
341
|
+
# Still update SSH config on timeout - engine is likely running
|
|
342
|
+
if not skip_ssh_config:
|
|
343
|
+
if update_ssh_config_silent(client, env):
|
|
344
|
+
click.echo("✓ SSH config updated")
|
|
345
|
+
|
|
419
346
|
except Exception as e:
|
|
420
347
|
click.echo(f"✗ Error: {e}", err=True)
|
|
421
348
|
raise click.Abort()
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
"""SSH config management utilities for engines_studios CLI."""
|
|
2
|
+
|
|
3
|
+
import os
|
|
4
|
+
from typing import TYPE_CHECKING
|
|
5
|
+
|
|
6
|
+
if TYPE_CHECKING:
|
|
7
|
+
from .api_client import StudioManagerClient
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def update_ssh_config_silent(client: "StudioManagerClient", env: str) -> bool:
|
|
11
|
+
"""Update SSH config with engine entries silently.
|
|
12
|
+
|
|
13
|
+
Returns True if successful, False otherwise.
|
|
14
|
+
Does not raise exceptions - intended for silent background updates.
|
|
15
|
+
"""
|
|
16
|
+
from .auth import get_aws_username
|
|
17
|
+
|
|
18
|
+
ssh_config_path = os.path.expanduser("~/.ssh/config")
|
|
19
|
+
|
|
20
|
+
try:
|
|
21
|
+
# Read existing config
|
|
22
|
+
if os.path.exists(ssh_config_path):
|
|
23
|
+
with open(ssh_config_path, "r") as f:
|
|
24
|
+
lines = f.readlines()
|
|
25
|
+
else:
|
|
26
|
+
lines = []
|
|
27
|
+
|
|
28
|
+
# Remove managed entries
|
|
29
|
+
managed_start = "# BEGIN DAYHOFF ENGINES\n"
|
|
30
|
+
managed_end = "# END DAYHOFF ENGINES\n"
|
|
31
|
+
|
|
32
|
+
new_lines = []
|
|
33
|
+
skip = False
|
|
34
|
+
for line in lines:
|
|
35
|
+
if line == managed_start:
|
|
36
|
+
skip = True
|
|
37
|
+
elif line == managed_end:
|
|
38
|
+
skip = False
|
|
39
|
+
continue
|
|
40
|
+
elif not skip:
|
|
41
|
+
new_lines.append(line)
|
|
42
|
+
|
|
43
|
+
# Get engines
|
|
44
|
+
result = client.list_engines()
|
|
45
|
+
engines = result.get("engines", [])
|
|
46
|
+
|
|
47
|
+
if not engines:
|
|
48
|
+
return False
|
|
49
|
+
|
|
50
|
+
# Generate new entries
|
|
51
|
+
config_entries = [managed_start]
|
|
52
|
+
|
|
53
|
+
try:
|
|
54
|
+
current_user = get_aws_username()
|
|
55
|
+
except RuntimeError:
|
|
56
|
+
# Not authenticated - can't determine user, skip filtering
|
|
57
|
+
current_user = None
|
|
58
|
+
|
|
59
|
+
for engine in engines:
|
|
60
|
+
user = engine.get("user", "unknown")
|
|
61
|
+
|
|
62
|
+
# Skip engines owned by other users (unless user is unknown or we can't determine current user)
|
|
63
|
+
if current_user and user != "unknown" and user != current_user:
|
|
64
|
+
continue
|
|
65
|
+
|
|
66
|
+
instance_id = engine.get("instance_id")
|
|
67
|
+
name = engine.get("name", instance_id)
|
|
68
|
+
state = engine.get("state", "unknown")
|
|
69
|
+
|
|
70
|
+
# Only add running engines
|
|
71
|
+
if state != "running":
|
|
72
|
+
continue
|
|
73
|
+
|
|
74
|
+
# Map environment to AWS profile
|
|
75
|
+
profile = f"{env}-devaccess"
|
|
76
|
+
|
|
77
|
+
config_entries.append(f"\nHost {name}\n")
|
|
78
|
+
config_entries.append(f" HostName {instance_id}\n")
|
|
79
|
+
config_entries.append(f" User {user}\n")
|
|
80
|
+
config_entries.append(f" ForwardAgent yes\n")
|
|
81
|
+
config_entries.append(
|
|
82
|
+
f" ProxyCommand aws ssm start-session --target %h --document-name AWS-StartSSHSession --parameters 'portNumber=%p' --profile {profile}\n"
|
|
83
|
+
)
|
|
84
|
+
|
|
85
|
+
config_entries.append(managed_end)
|
|
86
|
+
|
|
87
|
+
# Write back
|
|
88
|
+
new_lines.extend(config_entries)
|
|
89
|
+
|
|
90
|
+
with open(ssh_config_path, "w") as f:
|
|
91
|
+
f.writelines(new_lines)
|
|
92
|
+
|
|
93
|
+
return True
|
|
94
|
+
|
|
95
|
+
except Exception:
|
|
96
|
+
return False
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
"""Studio CLI commands for engines_studios system."""
|
|
2
2
|
|
|
3
|
-
import os
|
|
4
3
|
from typing import Optional
|
|
5
4
|
|
|
6
5
|
import click
|
|
@@ -8,6 +7,7 @@ import click
|
|
|
8
7
|
from .api_client import StudioManagerClient
|
|
9
8
|
from .auth import check_aws_auth, detect_aws_environment, get_aws_username
|
|
10
9
|
from .progress import format_time_ago, wait_with_progress
|
|
10
|
+
from .ssh_config import update_ssh_config_silent
|
|
11
11
|
|
|
12
12
|
|
|
13
13
|
@click.group()
|
|
@@ -420,6 +420,9 @@ def list_studios(env: Optional[str]):
|
|
|
420
420
|
|
|
421
421
|
@studio_cli.command("attach")
|
|
422
422
|
@click.argument("engine_name_or_id")
|
|
423
|
+
@click.option(
|
|
424
|
+
"--skip-ssh-config", is_flag=True, help="Don't automatically update SSH config"
|
|
425
|
+
)
|
|
423
426
|
@click.option(
|
|
424
427
|
"--user",
|
|
425
428
|
default=None,
|
|
@@ -430,7 +433,9 @@ def list_studios(env: Optional[str]):
|
|
|
430
433
|
default=None,
|
|
431
434
|
help="Environment (dev, sand, prod) - auto-detected if not specified",
|
|
432
435
|
)
|
|
433
|
-
def attach_studio(
|
|
436
|
+
def attach_studio(
|
|
437
|
+
engine_name_or_id: str, skip_ssh_config: bool, user: Optional[str], env: Optional[str]
|
|
438
|
+
):
|
|
434
439
|
"""Attach your studio to an engine with progress tracking."""
|
|
435
440
|
|
|
436
441
|
# Check AWS auth first to provide clear error messages
|
|
@@ -501,6 +506,12 @@ def attach_studio(engine_name_or_id: str, user: Optional[str], env: Optional[str
|
|
|
501
506
|
)
|
|
502
507
|
|
|
503
508
|
click.echo(f"\n✓ Studio attached successfully!")
|
|
509
|
+
|
|
510
|
+
# Update SSH config unless skipped
|
|
511
|
+
if not skip_ssh_config:
|
|
512
|
+
if update_ssh_config_silent(client, env):
|
|
513
|
+
click.echo("✓ SSH config updated")
|
|
514
|
+
|
|
504
515
|
click.echo(f"\nYour files are now available at:")
|
|
505
516
|
click.echo(f" /studios/{studio['user']}/")
|
|
506
517
|
click.echo(f"\nConnect with:")
|
dayhoff_tools/cli/main.py
CHANGED
|
@@ -98,6 +98,20 @@ def studio_cmd(ctx: typer.Context):
|
|
|
98
98
|
studio_cli(ctx.args, standalone_mode=False)
|
|
99
99
|
|
|
100
100
|
|
|
101
|
+
# Batch job management (Click-based CLI)
|
|
102
|
+
@app.command(
|
|
103
|
+
"batch",
|
|
104
|
+
context_settings={"allow_extra_args": True, "ignore_unknown_options": True},
|
|
105
|
+
add_help_option=False,
|
|
106
|
+
)
|
|
107
|
+
def batch_cmd(ctx: typer.Context):
|
|
108
|
+
"""Manage batch jobs on AWS Batch."""
|
|
109
|
+
from dayhoff_tools.cli.batch import batch_cli
|
|
110
|
+
|
|
111
|
+
# Pass arguments directly to Click CLI
|
|
112
|
+
batch_cli(ctx.args, standalone_mode=False)
|
|
113
|
+
|
|
114
|
+
|
|
101
115
|
# Engine and Studio commands (v1 - legacy, uses old infrastructure)
|
|
102
116
|
app.add_typer(engine1_app, name="engine1", help="[Legacy v1] Manage engines.")
|
|
103
117
|
app.add_typer(studio1_app, name="studio1", help="[Legacy v1] Manage studios.")
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dayhoff-tools
|
|
3
|
-
Version: 1.14.
|
|
3
|
+
Version: 1.14.2
|
|
4
4
|
Summary: Common tools for all the repos at Dayhoff Labs
|
|
5
5
|
Author: Daniel Martin-Alarcon
|
|
6
6
|
Author-email: dma@dayhofflabs.com
|
|
@@ -11,11 +11,14 @@ Classifier: Programming Language :: Python :: 3.11
|
|
|
11
11
|
Classifier: Programming Language :: Python :: 3.12
|
|
12
12
|
Classifier: Programming Language :: Python :: 3.13
|
|
13
13
|
Classifier: Programming Language :: Python :: 3.14
|
|
14
|
+
Provides-Extra: batch
|
|
15
|
+
Provides-Extra: boltz
|
|
14
16
|
Provides-Extra: embedders
|
|
15
17
|
Provides-Extra: full
|
|
16
18
|
Requires-Dist: biopython (>=1.84) ; extra == "full"
|
|
17
19
|
Requires-Dist: biopython (>=1.85) ; extra == "embedders"
|
|
18
20
|
Requires-Dist: boto3 (>=1.36.8)
|
|
21
|
+
Requires-Dist: click (>=8.0.0) ; extra == "batch"
|
|
19
22
|
Requires-Dist: docker (>=7.1.0) ; extra == "full"
|
|
20
23
|
Requires-Dist: fair-esm (>=2.0.0) ; extra == "embedders"
|
|
21
24
|
Requires-Dist: fair-esm (>=2.0.0) ; extra == "full"
|
|
@@ -25,10 +28,12 @@ Requires-Dist: h5py (>=3.13.0) ; extra == "embedders"
|
|
|
25
28
|
Requires-Dist: numpy (>=1.26.4) ; extra == "embedders"
|
|
26
29
|
Requires-Dist: pandas (>=2.2.0,<2.2.3) ; extra == "embedders"
|
|
27
30
|
Requires-Dist: pandas (>=2.2.0,<2.2.3) ; extra == "full"
|
|
31
|
+
Requires-Dist: pydantic (>=2.0.0) ; extra == "batch"
|
|
28
32
|
Requires-Dist: pyyaml (>=6.0)
|
|
29
33
|
Requires-Dist: questionary (>=2.0.1)
|
|
30
34
|
Requires-Dist: rdkit-pypi (>=2022.9.5) ; extra == "full"
|
|
31
35
|
Requires-Dist: requests (>=2.31.0)
|
|
36
|
+
Requires-Dist: ruamel.yaml (>=0.17.0) ; extra == "boltz"
|
|
32
37
|
Requires-Dist: sentencepiece (>=0.2.0) ; extra == "embedders"
|
|
33
38
|
Requires-Dist: sentencepiece (>=0.2.0) ; extra == "full"
|
|
34
39
|
Requires-Dist: sqlalchemy (>=2.0.40,<3.0.0) ; extra == "full"
|
|
@@ -1,7 +1,27 @@
|
|
|
1
1
|
dayhoff_tools/__init__.py,sha256=M5zThPyEBRYa5CfwlzKhcqTevWn3OKu62cjV6Zqie2A,469
|
|
2
|
+
dayhoff_tools/batch/__init__.py,sha256=N7v1pUg3rp68W6J7cX2Gssxdfp57Z7G0WeFJh7gKeiM,163
|
|
3
|
+
dayhoff_tools/batch/workers/__init__.py,sha256=DJTtiBSE5k9J6qwG_MsXDn8hgz_lvEdaMwqKa6YyqXo,369
|
|
4
|
+
dayhoff_tools/batch/workers/base.py,sha256=eimShYucbCVs8MlLXdtPsxwQRPgXFXqABXIBE5kieJI,4305
|
|
5
|
+
dayhoff_tools/batch/workers/boltz.py,sha256=QTIqMWuV_o3v1tYaZhvjyCl5F65ZlPcc0-TXtitMaFQ,14663
|
|
6
|
+
dayhoff_tools/batch/workers/embed_t5.py,sha256=A5WqsQa1WZ7_la5X5wt0XUP-VwOglH04WyEINhwipeY,2750
|
|
2
7
|
dayhoff_tools/chemistry/standardizer.py,sha256=uMn7VwHnx02nc404eO6fRuS4rsl4dvSPf2ElfZDXEpY,11188
|
|
3
8
|
dayhoff_tools/chemistry/utils.py,sha256=jt-7JgF-GeeVC421acX-bobKbLU_X94KNOW24p_P-_M,2257
|
|
4
9
|
dayhoff_tools/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
10
|
+
dayhoff_tools/cli/batch/__init__.py,sha256=gEuiDPWio8ihrIfF_Q6-5hKOnliPTxDKQrKN8-4Y3Ac,2320
|
|
11
|
+
dayhoff_tools/cli/batch/aws_batch.py,sha256=L6lNpUaxyhMvLcM3dF8yEi2yCgTNdviaNMmG75bpBIc,12719
|
|
12
|
+
dayhoff_tools/cli/batch/commands/__init__.py,sha256=1xRzzL_mc1hz1Pv0OWNr-g6fkL5XbEsOTGHzrqddLCA,458
|
|
13
|
+
dayhoff_tools/cli/batch/commands/boltz.py,sha256=M7UNebaV7EAoHY_Fhml7JGnTZjM5o1nkYL22pSmqnWA,10422
|
|
14
|
+
dayhoff_tools/cli/batch/commands/cancel.py,sha256=5FHLRoq8nvOr8HuKxXUZqAyAdjQP8seaNSaeAdhOoE8,2890
|
|
15
|
+
dayhoff_tools/cli/batch/commands/embed_t5.py,sha256=D56Hyamzm-peVEiA3tDzotfpHd2bVsKfMprpoj_ADR8,9627
|
|
16
|
+
dayhoff_tools/cli/batch/commands/finalize.py,sha256=2kQTtHxdW52s0lrLUlc7tx7Ab092sxs8uSc9-f2utUg,7198
|
|
17
|
+
dayhoff_tools/cli/batch/commands/list_jobs.py,sha256=y90_XqFI2qcvV2XUC01P3P2aIdtl5hXP3cBDEofsRtU,2432
|
|
18
|
+
dayhoff_tools/cli/batch/commands/local.py,sha256=vOTojTAp4YZXIMLKNqc76oIE0oWMjB1mtTe6r19LrEc,3075
|
|
19
|
+
dayhoff_tools/cli/batch/commands/logs.py,sha256=FOYpANQCsQTJKigq77k1xbhgOqtRPw9hyHkljILWlmo,5241
|
|
20
|
+
dayhoff_tools/cli/batch/commands/retry.py,sha256=FQMi77oh61i-JOD77OmoJECw03aWQIVS-MizKggSu1g,4481
|
|
21
|
+
dayhoff_tools/cli/batch/commands/status.py,sha256=BZyCF115XNqx4KXyLASsowY_e4R29BYQJyaK_EulPL8,7553
|
|
22
|
+
dayhoff_tools/cli/batch/commands/submit.py,sha256=9Ur2PFkb5vbWv8Xebqs8dsGDh28uAkOQBaMuZsLgnec,6752
|
|
23
|
+
dayhoff_tools/cli/batch/job_id.py,sha256=mqr8SwcPlUWIYLaR_C4kACmL2ZFK8jaddd7B-45-XaQ,4246
|
|
24
|
+
dayhoff_tools/cli/batch/manifest.py,sha256=2js-vbLkRipStN6_89T-wVUjgITA32EhN4eMdcw41hw,8610
|
|
5
25
|
dayhoff_tools/cli/cloud_commands.py,sha256=xrWQZm48e09GTh8RmYh3JqXUzW8mMy07dHk_77LqZx8,41199
|
|
6
26
|
dayhoff_tools/cli/engine1/__init__.py,sha256=RE45X2IPCNUvQp6_OHI2lbjwoqexkH3roUPccIHkeJo,9540
|
|
7
27
|
dayhoff_tools/cli/engine1/engine_core.py,sha256=TECO6766GCZTtbxOY7QRggwmjpMH9JZSuxjbwF46unU,27061
|
|
@@ -13,8 +33,8 @@ dayhoff_tools/cli/engine1/studio_commands.py,sha256=VwTQujz32-uMcYusDRE73SdzRpgv
|
|
|
13
33
|
dayhoff_tools/cli/engines_studios/__init__.py,sha256=E6aG0C6qjJnJuClemSKRFlYvLUL49MQZOvfqNQ7SDKs,159
|
|
14
34
|
dayhoff_tools/cli/engines_studios/api_client.py,sha256=9mCVRjPUCYa7cFx29uVwYxmHPAM5FwsU9xdplvgftxs,13444
|
|
15
35
|
dayhoff_tools/cli/engines_studios/auth.py,sha256=rwetV5hp4jSvK8FyvKgXCnezLOZx1aW8oiSDc6U83iE,5189
|
|
16
|
-
dayhoff_tools/cli/engines_studios/engine-studio-cli.md,sha256
|
|
17
|
-
dayhoff_tools/cli/engines_studios/engine_commands.py,sha256=
|
|
36
|
+
dayhoff_tools/cli/engines_studios/engine-studio-cli.md,sha256=Z9u8m8eGEuMoBba8v-bkkPAT2DqK5FhwiUtoyEWzbyI,30646
|
|
37
|
+
dayhoff_tools/cli/engines_studios/engine_commands.py,sha256=OQJ4WdmTilUbsLIcrd_E8kxabNRZ7HzxdwFEDP8JqCE,36765
|
|
18
38
|
dayhoff_tools/cli/engines_studios/progress.py,sha256=VW70t7sEHlbLpCi6LOaY19Rp1Kx6Rt9CKNnmaZWFteA,9496
|
|
19
39
|
dayhoff_tools/cli/engines_studios/simulators/cli-simulators.md,sha256=FZJl6nehdr2Duht2cx3yijcak0yKyOaHTrTzvFTAfZs,4976
|
|
20
40
|
dayhoff_tools/cli/engines_studios/simulators/demo.sh,sha256=8tYABSCxLNXqGs-4r071V9mpKNZ5DTQ34WZ-v3d5s94,5364
|
|
@@ -24,9 +44,10 @@ dayhoff_tools/cli/engines_studios/simulators/idle_status_simulator.py,sha256=F_M
|
|
|
24
44
|
dayhoff_tools/cli/engines_studios/simulators/simulator_utils.py,sha256=HA08pIMJWV3OFrWj3Ca8GldvgJZfFoTOloyLK0UWMgA,6729
|
|
25
45
|
dayhoff_tools/cli/engines_studios/simulators/studio_list_simulator.py,sha256=ntizeR0BJLdJOwCRBKPajc2xT-BL7SNnONxfgxXDgr8,11609
|
|
26
46
|
dayhoff_tools/cli/engines_studios/simulators/studio_status_simulator.py,sha256=6WvpnRawJVaQf_H81zuR1_66igRRVxPxjAt8e69xjp4,5394
|
|
27
|
-
dayhoff_tools/cli/engines_studios/
|
|
47
|
+
dayhoff_tools/cli/engines_studios/ssh_config.py,sha256=UCv-jf_zSuk7FUStkCQBAJz1QkxiSEwZbdSrwt_9SMU,2932
|
|
48
|
+
dayhoff_tools/cli/engines_studios/studio_commands.py,sha256=YM81roRzpLpc6XkL4XsO5rmWA-L1aJdOvPmGZFoMPGs,25966
|
|
28
49
|
dayhoff_tools/cli/github_commands.py,sha256=pfrxI68LObGm_gtPlQN-gHPahHV4l9k9T4GqO99NNL0,8948
|
|
29
|
-
dayhoff_tools/cli/main.py,sha256=
|
|
50
|
+
dayhoff_tools/cli/main.py,sha256=6W-fdRfjkPGx4fnfAhmEKyFl6Ou1VOxy4IYFpcFWkrA,8489
|
|
30
51
|
dayhoff_tools/cli/swarm_commands.py,sha256=5EyKj8yietvT5lfoz8Zx0iQvVaNgc3SJX1z2zQR6o6M,5614
|
|
31
52
|
dayhoff_tools/cli/utility_commands.py,sha256=e2P4dCCtoqMUGNyb0lFBZ6GZpl5Zslm1qqE5qIvsy38,50765
|
|
32
53
|
dayhoff_tools/deployment/base.py,sha256=uZnFvnPQx6pH_HmJbdThweAs3BrxMaDohpE3iX_-yk4,18377
|
|
@@ -49,7 +70,7 @@ dayhoff_tools/intake/uniprot.py,sha256=BZYJQF63OtPcBBnQ7_P9gulxzJtqyorgyuDiPeOJq
|
|
|
49
70
|
dayhoff_tools/logs.py,sha256=DKdeP0k0kliRcilwvX0mUB2eipO5BdWUeHwh-VnsICs,838
|
|
50
71
|
dayhoff_tools/sqlite.py,sha256=jV55ikF8VpTfeQqqlHSbY8OgfyfHj8zgHNpZjBLos_E,18672
|
|
51
72
|
dayhoff_tools/warehouse.py,sha256=UETBtZD3r7WgvURqfGbyHlT7cxoiVq8isjzMuerKw8I,24475
|
|
52
|
-
dayhoff_tools-1.14.
|
|
53
|
-
dayhoff_tools-1.14.
|
|
54
|
-
dayhoff_tools-1.14.
|
|
55
|
-
dayhoff_tools-1.14.
|
|
73
|
+
dayhoff_tools-1.14.2.dist-info/METADATA,sha256=v0DhSbERngGi4BentS_cQjF3bDiyoxg9HAFIEhvAKTU,3184
|
|
74
|
+
dayhoff_tools-1.14.2.dist-info/WHEEL,sha256=zp0Cn7JsFoX2ATtOhtaFYIiE2rmFAD4OcMhtUki8W3U,88
|
|
75
|
+
dayhoff_tools-1.14.2.dist-info/entry_points.txt,sha256=iAf4jteNqW3cJm6CO6czLxjW3vxYKsyGLZ8WGmxamSc,49
|
|
76
|
+
dayhoff_tools-1.14.2.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|