chore(refact)!: simplify config management (#1105)

# What does this PR do?

We are dropping configuration via CLI flag almost entirely. If any
server configuration has to be tweak it must be done through the server
section in the run.yaml.

This is unfortunately a breaking change for whover was using:

* `--tls-*`
* `--disable_ipv6`

`--port` stays around and get a special treatment since we believe, it's
common for user dev to change port for quick experimentations.

Closes: https://github.com/meta-llama/llama-stack/issues/1076

## Test Plan

Simply do `llama stack run <config>` nothing should break :)

Signed-off-by: Sébastien Han <seb@redhat.com>
This commit is contained in:
Sébastien Han 2025-05-07 18:18:12 +02:00 committed by GitHub
parent c91e3552a3
commit 6371bb1b33
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
37 changed files with 41 additions and 37 deletions

View file

@ -75,4 +75,5 @@ jobs:
fi fi
done done
echo "Provider failed to load" echo "Provider failed to load"
cat server.log
exit 1 exit 1

View file

@ -47,28 +47,12 @@ class StackRun(Subcommand):
default=os.environ.get("CONDA_DEFAULT_ENV"), default=os.environ.get("CONDA_DEFAULT_ENV"),
help="Name of the image to run. Defaults to the current environment", help="Name of the image to run. Defaults to the current environment",
) )
self.parser.add_argument(
"--disable-ipv6",
action="store_true",
help="Disable IPv6 support",
default=False,
)
self.parser.add_argument( self.parser.add_argument(
"--env", "--env",
action="append", action="append",
help="Environment variables to pass to the server in KEY=VALUE format. Can be specified multiple times.", help="Environment variables to pass to the server in KEY=VALUE format. Can be specified multiple times.",
metavar="KEY=VALUE", metavar="KEY=VALUE",
) )
self.parser.add_argument(
"--tls-keyfile",
type=str,
help="Path to TLS key file for HTTPS",
)
self.parser.add_argument(
"--tls-certfile",
type=str,
help="Path to TLS certificate file for HTTPS",
)
self.parser.add_argument( self.parser.add_argument(
"--image-type", "--image-type",
type=str, type=str,
@ -158,8 +142,6 @@ class StackRun(Subcommand):
run_args = formulate_run_args(image_type, image_name, config, template_name) run_args = formulate_run_args(image_type, image_name, config, template_name)
run_args.extend([str(config_file), str(args.port)]) run_args.extend([str(config_file), str(args.port)])
if args.disable_ipv6:
run_args.append("--disable-ipv6")
if args.env: if args.env:
for env_var in args.env: for env_var in args.env:
@ -172,6 +154,4 @@ class StackRun(Subcommand):
return return
run_args.extend(["--env", f"{key}={value}"]) run_args.extend(["--env", f"{key}={value}"])
if args.tls_keyfile and args.tls_certfile:
run_args.extend(["--tls-keyfile", args.tls_keyfile, "--tls-certfile", args.tls_certfile])
run_command(run_args) run_command(run_args)

View file

@ -253,6 +253,10 @@ class ServerConfig(BaseModel):
default=None, default=None,
description="Authentication configuration for the server", description="Authentication configuration for the server",
) )
disable_ipv6: bool = Field(
default=False,
description="Disable IPv6 support",
)
class StackRunConfig(BaseModel): class StackRunConfig(BaseModel):

View file

@ -343,16 +343,6 @@ def main(args: argparse.Namespace | None = None):
action="append", action="append",
help="Environment variables in KEY=value format. Can be specified multiple times.", help="Environment variables in KEY=value format. Can be specified multiple times.",
) )
parser.add_argument(
"--tls-keyfile",
help="Path to TLS key file for HTTPS",
required="--tls-certfile" in sys.argv,
)
parser.add_argument(
"--tls-certfile",
help="Path to TLS certificate file for HTTPS",
required="--tls-keyfile" in sys.argv,
)
# Determine whether the server args are being passed by the "run" command, if this is the case # Determine whether the server args are being passed by the "run" command, if this is the case
# the args will be passed as a Namespace object to the main function, otherwise they will be # the args will be passed as a Namespace object to the main function, otherwise they will be
@ -486,10 +476,6 @@ def main(args: argparse.Namespace | None = None):
port = args.port or config.server.port port = args.port or config.server.port
ssl_config = None ssl_config = None
if args.tls_keyfile:
keyfile = args.tls_keyfile
certfile = args.tls_certfile
else:
keyfile = config.server.tls_keyfile keyfile = config.server.tls_keyfile
certfile = config.server.tls_certfile certfile = config.server.tls_certfile
@ -500,7 +486,7 @@ def main(args: argparse.Namespace | None = None):
} }
logger.info(f"HTTPS enabled with certificates:\n Key: {keyfile}\n Cert: {certfile}") logger.info(f"HTTPS enabled with certificates:\n Key: {keyfile}\n Cert: {certfile}")
listen_host = ["::", "0.0.0.0"] if not args.disable_ipv6 else "0.0.0.0" listen_host = ["::", "0.0.0.0"] if not config.server.disable_ipv6 else "0.0.0.0"
logger.info(f"Listening on {listen_host}:{port}") logger.info(f"Listening on {listen_host}:{port}")
uvicorn_config = { uvicorn_config = {

View file

@ -139,3 +139,4 @@ tool_groups:
provider_id: rag-runtime provider_id: rag-runtime
server: server:
port: 8321 port: 8321
disable_ipv6: false

View file

@ -137,3 +137,4 @@ tool_groups:
provider_id: rag-runtime provider_id: rag-runtime
server: server:
port: 8321 port: 8321
disable_ipv6: false

View file

@ -235,3 +235,4 @@ tool_groups:
provider_id: rag-runtime provider_id: rag-runtime
server: server:
port: 8321 port: 8321
disable_ipv6: false

View file

@ -126,3 +126,4 @@ tool_groups:
provider_id: rag-runtime provider_id: rag-runtime
server: server:
port: 8321 port: 8321
disable_ipv6: false

View file

@ -117,3 +117,4 @@ tool_groups:
provider_id: rag-runtime provider_id: rag-runtime
server: server:
port: 8321 port: 8321
disable_ipv6: false

View file

@ -536,3 +536,4 @@ tool_groups:
provider_id: rag-runtime provider_id: rag-runtime
server: server:
port: 8321 port: 8321
disable_ipv6: false

View file

@ -254,3 +254,4 @@ tool_groups:
provider_id: rag-runtime provider_id: rag-runtime
server: server:
port: 8321 port: 8321
disable_ipv6: false

View file

@ -244,3 +244,4 @@ tool_groups:
provider_id: rag-runtime provider_id: rag-runtime
server: server:
port: 8321 port: 8321
disable_ipv6: false

View file

@ -202,3 +202,4 @@ tool_groups:
provider_id: rag-runtime provider_id: rag-runtime
server: server:
port: 8321 port: 8321
disable_ipv6: false

View file

@ -134,3 +134,4 @@ tool_groups:
provider_id: rag-runtime provider_id: rag-runtime
server: server:
port: 8321 port: 8321
disable_ipv6: false

View file

@ -124,3 +124,4 @@ tool_groups:
provider_id: rag-runtime provider_id: rag-runtime
server: server:
port: 8321 port: 8321
disable_ipv6: false

View file

@ -134,3 +134,4 @@ tool_groups:
provider_id: rag-runtime provider_id: rag-runtime
server: server:
port: 8321 port: 8321
disable_ipv6: false

View file

@ -124,3 +124,4 @@ tool_groups:
provider_id: rag-runtime provider_id: rag-runtime
server: server:
port: 8321 port: 8321
disable_ipv6: false

View file

@ -160,3 +160,4 @@ tool_groups:
provider_id: rag-runtime provider_id: rag-runtime
server: server:
port: 8321 port: 8321
disable_ipv6: false

View file

@ -144,3 +144,4 @@ tool_groups:
provider_id: rag-runtime provider_id: rag-runtime
server: server:
port: 8321 port: 8321
disable_ipv6: false

View file

@ -129,3 +129,4 @@ tool_groups:
provider_id: rag-runtime provider_id: rag-runtime
server: server:
port: 8321 port: 8321
disable_ipv6: false

View file

@ -113,3 +113,4 @@ tool_groups:
provider_id: rag-runtime provider_id: rag-runtime
server: server:
port: 8321 port: 8321
disable_ipv6: false

View file

@ -219,3 +219,4 @@ tool_groups:
provider_id: rag-runtime provider_id: rag-runtime
server: server:
port: 8321 port: 8321
disable_ipv6: false

View file

@ -137,3 +137,4 @@ tool_groups:
provider_id: wolfram-alpha provider_id: wolfram-alpha
server: server:
port: 8321 port: 8321
disable_ipv6: false

View file

@ -127,3 +127,4 @@ tool_groups:
provider_id: wolfram-alpha provider_id: wolfram-alpha
server: server:
port: 8321 port: 8321
disable_ipv6: false

View file

@ -241,3 +241,4 @@ tool_groups:
provider_id: rag-runtime provider_id: rag-runtime
server: server:
port: 8321 port: 8321
disable_ipv6: false

View file

@ -147,3 +147,4 @@ tool_groups:
provider_id: rag-runtime provider_id: rag-runtime
server: server:
port: 8321 port: 8321
disable_ipv6: false

View file

@ -137,3 +137,4 @@ tool_groups:
provider_id: rag-runtime provider_id: rag-runtime
server: server:
port: 8321 port: 8321
disable_ipv6: false

View file

@ -144,3 +144,4 @@ tool_groups:
provider_id: wolfram-alpha provider_id: wolfram-alpha
server: server:
port: 8321 port: 8321
disable_ipv6: false

View file

@ -132,3 +132,4 @@ tool_groups:
provider_id: wolfram-alpha provider_id: wolfram-alpha
server: server:
port: 8321 port: 8321
disable_ipv6: false

View file

@ -202,3 +202,4 @@ tool_groups:
provider_id: wolfram-alpha provider_id: wolfram-alpha
server: server:
port: 8321 port: 8321
disable_ipv6: false

View file

@ -124,3 +124,4 @@ tool_groups:
provider_id: rag-runtime provider_id: rag-runtime
server: server:
port: 8321 port: 8321
disable_ipv6: false

View file

@ -123,3 +123,4 @@ tool_groups:
provider_id: rag-runtime provider_id: rag-runtime
server: server:
port: 8321 port: 8321
disable_ipv6: false

View file

@ -271,3 +271,4 @@ tool_groups:
provider_id: wolfram-alpha provider_id: wolfram-alpha
server: server:
port: 8321 port: 8321
disable_ipv6: false

View file

@ -261,3 +261,4 @@ tool_groups:
provider_id: wolfram-alpha provider_id: wolfram-alpha
server: server:
port: 8321 port: 8321
disable_ipv6: false

View file

@ -639,3 +639,4 @@ tool_groups:
provider_id: rag-runtime provider_id: rag-runtime
server: server:
port: 8321 port: 8321
disable_ipv6: false

View file

@ -128,3 +128,4 @@ tool_groups:
provider_id: rag-runtime provider_id: rag-runtime
server: server:
port: 8321 port: 8321
disable_ipv6: false

View file

@ -203,3 +203,4 @@ tool_groups:
provider_id: rag-runtime provider_id: rag-runtime
server: server:
port: 8321 port: 8321
disable_ipv6: false