Skip to content

Commit c7f9e92

Browse files
committed
Improved the daemon start and run cli
Signed-off-by: Michael Engel <[email protected]>
1 parent 55d08ee commit c7f9e92

File tree

2 files changed

+82
-26
lines changed

2 files changed

+82
-26
lines changed

ramalama/cli.py

Lines changed: 81 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
from pathlib import Path
1111
from typing import get_args
1212

13-
from ramalama.config import COLOR_OPTIONS, SUPPORTED_RUNTIMES
13+
from ramalama.config import COLOR_OPTIONS, SUPPORTED_ENGINES, SUPPORTED_RUNTIMES
1414

1515
# if autocomplete doesn't exist, just do nothing, don't break
1616
try:
@@ -205,6 +205,7 @@ def configure_arguments(parser):
205205
"--engine",
206206
dest="engine",
207207
default=CONFIG.engine,
208+
choices=get_args(SUPPORTED_ENGINES),
208209
help="""run RamaLama using the specified container engine.
209210
The RAMALAMA_CONTAINER_ENGINE environment variable modifies default behaviour.""",
210211
)
@@ -1089,49 +1090,104 @@ def stop_container(args):
10891090

10901091

10911092
def daemon_parser(subparsers):
1092-
parser = subparsers.add_parser("daemon", help="daemon operations")
1093-
parser.set_defaults(func=daemon_setup_cli)
1093+
parser: ArgumentParserWithDefaults = subparsers.add_parser("daemon", help="daemon operations")
1094+
parser.set_defaults(func=lambda _: parser.print_help())
10941095

10951096
daemon_parsers = parser.add_subparsers(dest="daemon_command")
10961097

1097-
run_parser = daemon_parsers.add_parser("setup")
1098-
run_parser.set_defaults(func=daemon_setup_cli)
1098+
start_parser = daemon_parsers.add_parser("start")
1099+
start_parser.add_argument(
1100+
"--image",
1101+
default=accel_image(CONFIG),
1102+
help="OCI container image to run with the specified AI model",
1103+
action=OverrideDefaultAction,
1104+
completer=local_images,
1105+
)
1106+
start_parser.add_argument(
1107+
"--pull",
1108+
dest="pull",
1109+
type=str,
1110+
default=CONFIG.pull,
1111+
choices=["always", "missing", "never", "newer"],
1112+
help='pull image policy',
1113+
)
1114+
start_parser.add_argument(
1115+
"--host",
1116+
default=CONFIG.host,
1117+
help="IP address to listen",
1118+
completer=suppressCompleter,
1119+
)
1120+
start_parser.add_argument(
1121+
"-p",
1122+
"--port",
1123+
type=parse_port_option,
1124+
default=CONFIG.port,
1125+
help="port for AI Model server to listen on",
1126+
completer=suppressCompleter,
1127+
)
1128+
start_parser.set_defaults(func=daemon_start_cli)
10991129

1100-
cli_parser = daemon_parsers.add_parser("run")
1101-
cli_parser.set_defaults(func=daemon_run_cli)
1102-
cli_parser.add_argument("--store", default=CONFIG.store, type=abspath, help="path to store models")
1130+
run_parser = daemon_parsers.add_parser("run")
1131+
run_parser.add_argument(
1132+
"--host",
1133+
default=CONFIG.host,
1134+
help="IP address to listen",
1135+
completer=suppressCompleter,
1136+
)
1137+
run_parser.add_argument(
1138+
"-p",
1139+
"--port",
1140+
type=parse_port_option,
1141+
default=CONFIG.port,
1142+
help="port for AI Model server to listen on",
1143+
completer=suppressCompleter,
1144+
)
1145+
run_parser.set_defaults(func=daemon_run_cli)
11031146

11041147

1105-
def daemon_setup_cli(args):
1148+
def daemon_start_cli(args):
11061149
from ramalama.common import exec_cmd
11071150

1108-
exec_cmd(
1109-
[
1151+
daemon_cmd = []
1152+
daemon_model_store_dir = args.store
1153+
is_daemon_in_container = args.container and args.engine in get_args(SUPPORTED_ENGINES)
1154+
1155+
if is_daemon_in_container:
1156+
# If run inside a container, map the model store to the container internal directory
1157+
daemon_model_store_dir = "/ramalama/models"
1158+
1159+
daemon_cmd += [
11101160
"podman",
11111161
"run",
11121162
"--pull",
1113-
"never",
1114-
"-i",
1115-
"-t",
1163+
args.pull,
11161164
"-d",
11171165
"-p",
1118-
"8080:8080",
1166+
f"{args.port}:8080",
11191167
"-v",
1120-
f"{CONFIG.store}:/ramalama/models",
1121-
"quay.io/ramalama/rocm:latest",
1122-
"ramalama",
1123-
"daemon",
1124-
"run",
1125-
"--store",
1126-
"/ramalama/models",
1127-
],
1128-
)
1168+
f"{args.store}:{daemon_model_store_dir}",
1169+
args.image,
1170+
]
1171+
1172+
daemon_cmd += [
1173+
"ramalama",
1174+
"--store",
1175+
daemon_model_store_dir,
1176+
"daemon",
1177+
"run",
1178+
"--port",
1179+
"8080" if is_daemon_in_container else args.port,
1180+
"--host",
1181+
CONFIG.host if is_daemon_in_container else args.host,
1182+
]
1183+
1184+
exec_cmd(daemon_cmd)
11291185

11301186

11311187
def daemon_run_cli(args):
11321188
from ramalama.daemon.daemon import run
11331189

1134-
run(model_store_path=args.store)
1190+
run(host=args.host, port=args.port, model_store_path=args.store)
11351191

11361192

11371193
def version_parser(subparsers):

ramalama/config.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
DEFAULT_PORT: int = DEFAULT_PORT_RANGE[0]
1515
DEFAULT_IMAGE: str = "quay.io/ramalama/ramalama"
1616
DEFAULT_STACK_IMAGE: str = "quay.io/ramalama/llama-stack"
17-
SUPPORTED_ENGINES: TypeAlias = Literal["podman", "docker"] | PathStr
17+
SUPPORTED_ENGINES: TypeAlias = Literal["podman", "docker"]
1818
SUPPORTED_RUNTIMES: TypeAlias = Literal["llama.cpp", "vllm", "mlx"]
1919
COLOR_OPTIONS: TypeAlias = Literal["auto", "always", "never"]
2020

0 commit comments

Comments
 (0)