Skip to content

Commit 643286f

Browse files
authored
chore: Add usage examples for jig commands (#361)
1 parent cc61be0 commit 643286f

2 files changed

Lines changed: 220 additions & 13 deletions

File tree

src/together/lib/cli/__init__.py

Lines changed: 83 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -27,20 +27,35 @@
2727
from together.lib.cli.utils._api_error import try_handle_server_error_message
2828
from together.lib.cli.utils._completion import install_completion
2929
from together.lib.cli.utils._help_examples import (
30+
JIG_HELP_EXAMPLES,
3031
EVALS_HELP_EXAMPLES,
3132
FILES_HELP_EXAMPLES,
3233
MODELS_HELP_EXAMPLES,
34+
JIG_LOGS_HELP_EXAMPLES,
35+
JIG_PUSH_HELP_EXAMPLES,
3336
ENDPOINTS_HELP_EXAMPLES,
37+
JIG_BUILD_HELP_EXAMPLES,
3438
TOP_LEVEL_HELP_EXAMPLES,
39+
JIG_DEPLOY_HELP_EXAMPLES,
40+
JIG_SUBMIT_HELP_EXAMPLES,
3541
FINE_TUNING_HELP_EXAMPLES,
42+
JIG_DESTROY_HELP_EXAMPLES,
43+
JIG_SECRETS_HELP_EXAMPLES,
44+
JIG_VOLUMES_HELP_EXAMPLES,
3645
EVALS_CREATE_HELP_EXAMPLES,
3746
FILES_UPLOAD_HELP_EXAMPLES,
3847
BETA_CLUSTERS_HELP_EXAMPLES,
3948
MODELS_UPLOAD_HELP_EXAMPLES,
49+
JIG_JOB_STATUS_HELP_EXAMPLES,
50+
JIG_SECRETS_SET_HELP_EXAMPLES,
4051
ENDPOINTS_CREATE_HELP_EXAMPLES,
4152
ENDPOINTS_UPDATE_HELP_EXAMPLES,
53+
JIG_SECRETS_UNSET_HELP_EXAMPLES,
4254
ENDPOINTS_HARDWARE_HELP_EXAMPLES,
4355
FINE_TUNING_CREATE_HELP_EXAMPLES,
56+
JIG_SECRETS_DELETE_HELP_EXAMPLES,
57+
JIG_VOLUMES_CREATE_HELP_EXAMPLES,
58+
JIG_VOLUMES_UPDATE_HELP_EXAMPLES,
4459
BETA_CLUSTERS_CREATE_HELP_EXAMPLES,
4560
BETA_CLUSTERS_UPDATE_HELP_EXAMPLES,
4661
FINE_TUNING_DOWNLOAD_HELP_EXAMPLES,
@@ -471,48 +486,103 @@ async def run_command() -> None:
471486
storage_app.command((f"{_CLI}.beta.clusters.storage.delete:delete"), help="Delete a storage volume", alias="-d")
472487

473488
### Jig commands
474-
jig_app = beta_app.command(App(name="jig", help="Build, deploy, and manage custom containers"))
489+
jig_app = beta_app.command(
490+
App(name="jig", help="Build, deploy, and manage custom containers", help_epilogue=JIG_HELP_EXAMPLES)
491+
)
475492
jig_app.command((f"{_CLI}.beta.jig.jig:init"), help="Initialize configuration for a Jig deployment")
476493
jig_app.command(
477494
(f"{_CLI}.beta.jig.jig:dockerfile_cli"), name="dockerfile", help="Generate Dockerfile from jig configuration"
478495
)
479-
jig_app.command((f"{_CLI}.beta.jig.jig:build_cli"), name="build", help="Build container image")
480-
jig_app.command((f"{_CLI}.beta.jig.jig:push_cli"), name="push", help="Push image to registry")
481-
jig_app.command((f"{_CLI}.beta.jig.jig:deploy_cli"), name="deploy", help="Deploy model to Together")
496+
jig_app.command(
497+
(f"{_CLI}.beta.jig.jig:build_cli"),
498+
name="build",
499+
help="Build container image",
500+
help_epilogue=JIG_BUILD_HELP_EXAMPLES,
501+
)
502+
jig_app.command(
503+
(f"{_CLI}.beta.jig.jig:push_cli"), name="push", help="Push image to registry", help_epilogue=JIG_PUSH_HELP_EXAMPLES
504+
)
505+
jig_app.command(
506+
(f"{_CLI}.beta.jig.jig:deploy_cli"),
507+
name="deploy",
508+
help="Deploy model to Together",
509+
help_epilogue=JIG_DEPLOY_HELP_EXAMPLES,
510+
)
482511
jig_app.command((f"{_CLI}.beta.jig.jig:status_cli"), name="status", help="Get deployment status")
483512
jig_app.command((f"{_CLI}.beta.jig.jig:endpoint_cli"), name="endpoint", help="Get deployment endpoint URL")
484-
jig_app.command((f"{_CLI}.beta.jig.jig:logs_cli"), name="logs", help="Get deployment logs")
485-
jig_app.command((f"{_CLI}.beta.jig.jig:destroy_cli"), name="destroy", help="Destroy deployment")
486-
jig_app.command((f"{_CLI}.beta.jig.jig:submit_cli"), name="submit", help="Submit a job to the deployment")
487-
jig_app.command((f"{_CLI}.beta.jig.jig:job_status_cli"), name="job-status", help="Get status of a specific job")
513+
jig_app.command(
514+
(f"{_CLI}.beta.jig.jig:logs_cli"), name="logs", help="Get deployment logs", help_epilogue=JIG_LOGS_HELP_EXAMPLES
515+
)
516+
jig_app.command(
517+
(f"{_CLI}.beta.jig.jig:destroy_cli"),
518+
name="destroy",
519+
help="Destroy deployment",
520+
help_epilogue=JIG_DESTROY_HELP_EXAMPLES,
521+
)
522+
jig_app.command(
523+
(f"{_CLI}.beta.jig.jig:submit_cli"),
524+
name="submit",
525+
help="Submit a job to the deployment",
526+
help_epilogue=JIG_SUBMIT_HELP_EXAMPLES,
527+
)
528+
jig_app.command(
529+
(f"{_CLI}.beta.jig.jig:job_status_cli"),
530+
name="job-status",
531+
help="Get status of a specific job",
532+
help_epilogue=JIG_JOB_STATUS_HELP_EXAMPLES,
533+
)
488534
jig_app.command(
489535
(f"{_CLI}.beta.jig.jig:queue_status_cli"), name="queue-status", help="Get queue metrics for the deployment"
490536
)
491537
jig_app.command((f"{_CLI}.beta.jig.jig:list_deployments_cli"), name="list", alias="ls", help="List all deployments")
492538

493-
secrets_app = jig_app.command(App(name="secrets", help="Manage deployment secrets", group="Subcommands"))
494-
secrets_app.command((f"{_CLI}.beta.jig.jig:secrets_set_cli"), name="set", help="Set a secret (create or update)")
495-
secrets_app.command((f"{_CLI}.beta.jig.jig:secrets_unset_cli"), name="unset", help="Remove a secret from local state")
539+
secrets_app = jig_app.command(
540+
App(name="secrets", help="Manage deployment secrets", group="Subcommands", help_epilogue=JIG_SECRETS_HELP_EXAMPLES)
541+
)
542+
secrets_app.command(
543+
(f"{_CLI}.beta.jig.jig:secrets_set_cli"),
544+
name="set",
545+
help="Set a secret (create or update)",
546+
help_epilogue=JIG_SECRETS_SET_HELP_EXAMPLES,
547+
)
548+
secrets_app.command(
549+
(f"{_CLI}.beta.jig.jig:secrets_unset_cli"),
550+
name="unset",
551+
help="Remove a secret from local state",
552+
help_epilogue=JIG_SECRETS_UNSET_HELP_EXAMPLES,
553+
)
496554
secrets_app.command(
497555
(f"{_CLI}.beta.jig.jig:secrets_delete_cli"),
498556
name="delete",
499557
help="Delete a secret and unset it locally",
500558
alias="-d",
559+
help_epilogue=JIG_SECRETS_DELETE_HELP_EXAMPLES,
501560
)
502561
secrets_app.command(
503562
(f"{_CLI}.beta.jig.jig:secrets_list_cli"), name="list", alias="ls", help="List all secrets with sync status"
504563
)
505564

506565
### Jig > volumes
507-
storage_app = jig_app.command(App(name="volumes", help="Manage volumes for Jig deployments", group="Subcommands"))
566+
storage_app = jig_app.command(
567+
App(
568+
name="volumes",
569+
help="Manage volumes for Jig deployments",
570+
group="Subcommands",
571+
help_epilogue=JIG_VOLUMES_HELP_EXAMPLES,
572+
)
573+
)
508574
storage_app.command(
509575
(f"{_CLI}.beta.jig.jig:jig_volumes_create_cli"),
510576
name="create",
511577
alias="-c",
512578
help="Create a new volume for a Jig deployment",
579+
help_epilogue=JIG_VOLUMES_CREATE_HELP_EXAMPLES,
513580
)
514581
storage_app.command(
515-
(f"{_CLI}.beta.jig.jig:jig_volumes_update_cli"), name="update", help="Update a volume and re-upload files"
582+
(f"{_CLI}.beta.jig.jig:jig_volumes_update_cli"),
583+
name="update",
584+
help="Update a volume and re-upload files",
585+
help_epilogue=JIG_VOLUMES_UPDATE_HELP_EXAMPLES,
516586
)
517587
storage_app.command((f"{_CLI}.beta.jig.jig:jig_volumes_delete_cli"), name="delete", help="Delete a volume", alias="-d")
518588
storage_app.command(

src/together/lib/cli/utils/_help_examples.py

Lines changed: 137 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -328,3 +328,140 @@
328328
[dim]-[/dim] Grow a volume to 4 TiB:
329329
[primary]tg beta clusters storage update <volume-id> --size-tib 4[/primary]
330330
"""
331+
332+
## Beta > Jig commands
333+
334+
JIG_HELP_EXAMPLES = """[dim]Examples:[/dim]
335+
[dim]-[/dim] Bootstrap config and deploy from the current directory:
336+
[primary]tg beta jig init[/primary]
337+
[primary]tg beta jig deploy[/primary]
338+
339+
[dim]-[/dim] Inspect a deployment and stream logs:
340+
[primary]tg beta jig status[/primary]
341+
[primary]tg beta jig logs --follow[/primary]
342+
343+
[dim]-[/dim] List deployments or tear one down:
344+
[primary]tg beta jig list[/primary]
345+
[primary]tg beta jig destroy[/primary]
346+
"""
347+
348+
JIG_SECRETS_HELP_EXAMPLES = """[dim]Examples:[/dim]
349+
[dim]-[/dim] Add or rotate a secret for this deployment:
350+
[primary]tg beta jig secrets set HF_TOKEN "$HF_TOKEN"[/primary]
351+
352+
[dim]-[/dim] List secrets and sync status:
353+
[primary]tg beta jig secrets list[/primary]
354+
355+
[dim]-[/dim] Remove a secret remotely and locally:
356+
[primary]tg beta jig secrets delete OLD_KEY[/primary]
357+
"""
358+
359+
JIG_VOLUMES_HELP_EXAMPLES = """[dim]Examples:[/dim]
360+
[dim]-[/dim] Create a volume and upload a directory:
361+
[primary]tg beta jig volumes create --name model-weights --source ./weights[/primary]
362+
363+
[dim]-[/dim] List volumes for the deployment:
364+
[primary]tg beta jig volumes list[/primary]
365+
366+
[dim]-[/dim] Refresh volume contents from disk:
367+
[primary]tg beta jig volumes update --name model-weights --source ./weights[/primary]
368+
"""
369+
370+
JIG_BUILD_HELP_EXAMPLES = """[dim]Examples:[/dim]
371+
[dim]-[/dim] Build with default tag ([primary]latest[/primary]):
372+
[primary]tg beta jig build[/primary]
373+
374+
[dim]-[/dim] Build a tagged image with warmup (torch compile cache):
375+
[primary]tg beta jig build --tag v1 --warmup[/primary]
376+
377+
[dim]-[/dim] Pass extra Docker build arguments:
378+
[primary]tg beta jig build --docker-args '--no-cache'[/primary]
379+
"""
380+
381+
JIG_PUSH_HELP_EXAMPLES = """[dim]Examples:[/dim]
382+
[dim]-[/dim] Push the default ([primary]latest[/primary]) image:
383+
[primary]tg beta jig push[/primary]
384+
385+
[dim]-[/dim] Push a specific tag:
386+
[primary]tg beta jig push --tag v1[/primary]
387+
"""
388+
389+
JIG_DEPLOY_HELP_EXAMPLES = """[dim]Examples:[/dim]
390+
[dim]-[/dim] Build, push, and deploy from config in the current directory:
391+
[primary]tg beta jig deploy[/primary]
392+
393+
[dim]-[/dim] Deploy using an image that is already in the registry (skip build/push):
394+
[primary]tg beta jig deploy --image my-registry.example.com/my-org/my-model:abc123[/primary]
395+
396+
[dim]-[/dim] Only build and push; do not update the deployment:
397+
[primary]tg beta jig deploy --build-only[/primary]
398+
399+
[dim]-[/dim] Start deploy and return immediately without waiting:
400+
[primary]tg beta jig deploy --detach[/primary]
401+
"""
402+
403+
JIG_DESTROY_HELP_EXAMPLES = """[dim]Examples:[/dim]
404+
[dim]-[/dim] Tear down the deployment for this project ([primary]jig.toml[/primary] / [primary]pyproject.toml[/primary]):
405+
[primary]tg beta jig destroy[/primary]
406+
"""
407+
408+
JIG_LOGS_HELP_EXAMPLES = """[dim]Examples:[/dim]
409+
[dim]-[/dim] Print recent logs once:
410+
[primary]tg beta jig logs[/primary]
411+
412+
[dim]-[/dim] Stream logs ([primary]Ctrl+C[/primary] to stop):
413+
[primary]tg beta jig logs --follow[/primary]
414+
"""
415+
416+
JIG_SUBMIT_HELP_EXAMPLES = """[dim]Examples:[/dim]
417+
[dim]-[/dim] Submit a simple prompt job:
418+
[primary]tg beta jig submit --prompt "Hello, world!"[/primary]
419+
420+
[dim]-[/dim] Submit with a JSON payload (advanced request body):
421+
[primary]tg beta jig submit --payload '{"prompt":"Explain transformers","max_tokens":256}'[/primary]
422+
423+
[dim]-[/dim] Submit and poll until the job finishes:
424+
[primary]tg beta jig submit --prompt "Summarize this README." --watch[/primary]
425+
"""
426+
427+
JIG_JOB_STATUS_HELP_EXAMPLES = """[dim]Examples:[/dim]
428+
[dim]-[/dim] Look up a job by request ID (from submit output):
429+
[primary]tg beta jig job-status --request-id <request-id>[/primary]
430+
431+
[dim]-[/dim] Machine-readable status:
432+
[primary]tg beta jig job-status --request-id <request-id> --json[/primary]
433+
"""
434+
435+
JIG_SECRETS_SET_HELP_EXAMPLES = """[dim]Examples:[/dim]
436+
[dim]-[/dim] Create or update a secret from the shell:
437+
[primary]tg beta jig secrets set HF_TOKEN "$HF_TOKEN"[/primary]
438+
439+
[dim]-[/dim] Set a secret with a description (shown in listings):
440+
[primary]tg beta jig secrets set API_KEY "$API_KEY" --description "Third-party API credentials"[/primary]
441+
"""
442+
443+
JIG_SECRETS_UNSET_HELP_EXAMPLES = """[dim]Examples:[/dim]
444+
[dim]-[/dim] Drop a secret from local state only (does not delete remotely):
445+
[primary]tg beta jig secrets unset OLD_KEY[/primary]
446+
"""
447+
448+
JIG_SECRETS_DELETE_HELP_EXAMPLES = """[dim]Examples:[/dim]
449+
[dim]-[/dim] Delete the secret on the server and remove it locally:
450+
[primary]tg beta jig secrets delete REVOKED_KEY[/primary]
451+
"""
452+
453+
JIG_VOLUMES_CREATE_HELP_EXAMPLES = """[dim]Examples:[/dim]
454+
[dim]-[/dim] Create a volume and upload files from a directory:
455+
[primary]tg beta jig volumes create --name model-weights --source ./weights[/primary]
456+
457+
[dim]-[/dim] Same using positional arguments:
458+
[primary]tg beta jig volumes create model-weights ./weights[/primary]
459+
"""
460+
461+
JIG_VOLUMES_UPDATE_HELP_EXAMPLES = """[dim]Examples:[/dim]
462+
[dim]-[/dim] Upload a new directory tree as the next volume version:
463+
[primary]tg beta jig volumes update --name model-weights --source ./weights[/primary]
464+
465+
[dim]-[/dim] Positional form:
466+
[primary]tg beta jig volumes update model-weights ./weights[/primary]
467+
"""

0 commit comments

Comments
 (0)