42 lines
1.6 KiB
Python
42 lines
1.6 KiB
Python
import webbrowser
|
|
|
|
import typer
|
|
|
|
from src.aws import mlflow as aws_mlflow
|
|
from src.commands.utils import CONFIG_OPT, CONSOLE, load_cfg
|
|
|
|
app = typer.Typer(help="Manage MLflow tracking server access")
|
|
|
|
|
|
@app.command(name="open")
|
|
def open_mlflow(config: str = CONFIG_OPT) -> None:
|
|
"""Open a presigned URL for the configured MLflow tracking server."""
|
|
cfg = load_cfg(config)
|
|
tracking_server_name = cfg.effective_mlflow_tracking_server_name
|
|
if not tracking_server_name:
|
|
CONSOLE.print("[red]MLflow is disabled in config.yaml.[/red]")
|
|
raise typer.Exit(1)
|
|
|
|
try:
|
|
url = aws_mlflow.create_presigned_tracking_server_url(
|
|
cfg.aws.region,
|
|
cfg.aws.profile,
|
|
tracking_server_name,
|
|
)
|
|
except Exception as e:
|
|
CONSOLE.print("[yellow]Could not create a SageMaker MLflow UI URL.[/yellow]")
|
|
CONSOLE.print(f"Tracking server: [cyan]{tracking_server_name}[/cyan]")
|
|
CONSOLE.print(f"Reason: {e}")
|
|
CONSOLE.print(
|
|
"This command can create presigned URLs only for MLflow tracking servers managed by "
|
|
"Amazon SageMaker. If this is an external MLflow server, open it with that server's own URL."
|
|
)
|
|
raise typer.Exit(1)
|
|
|
|
CONSOLE.print(f"MLflow tracking server: [cyan]{tracking_server_name}[/cyan]")
|
|
CONSOLE.print(f"MLflow UI: {url}")
|
|
if webbrowser.open(url):
|
|
CONSOLE.print("[green]✓[/green] Opened MLflow UI in your browser.")
|
|
else:
|
|
CONSOLE.print("[yellow]Could not open a browser automatically. Open the URL above manually.[/yellow]")
|