mirror of
https://github.com/meta-llama/llama-stack.git
synced 2025-10-07 04:45:44 +00:00
Simplify and generalize llama api build
yay
This commit is contained in:
parent
297d51b183
commit
f8517e4688
9 changed files with 103 additions and 151 deletions
|
@ -11,15 +11,15 @@ from llama_toolchain.cli.subcommand import Subcommand
|
|||
from llama_toolchain.core.datatypes import * # noqa: F403
|
||||
|
||||
|
||||
def parse_dependencies(
|
||||
dependencies: str, parser: argparse.ArgumentParser
|
||||
def parse_api_provider_tuples(
|
||||
tuples: str, parser: argparse.ArgumentParser
|
||||
) -> Dict[str, ProviderSpec]:
|
||||
from llama_toolchain.core.distribution import api_providers
|
||||
|
||||
all_providers = api_providers()
|
||||
|
||||
deps = {}
|
||||
for dep in dependencies.split(","):
|
||||
for dep in tuples.split(","):
|
||||
dep = dep.strip()
|
||||
if not dep:
|
||||
continue
|
||||
|
@ -48,29 +48,13 @@ class ApiBuild(Subcommand):
|
|||
self.parser.set_defaults(func=self._run_api_build_command)
|
||||
|
||||
def _add_arguments(self):
|
||||
from llama_toolchain.core.distribution import stack_apis
|
||||
from llama_toolchain.core.package import (
|
||||
BuildType,
|
||||
)
|
||||
|
||||
allowed_args = [a.name for a in stack_apis()]
|
||||
self.parser.add_argument(
|
||||
"api",
|
||||
choices=allowed_args,
|
||||
help="Stack API (one of: {})".format(", ".join(allowed_args)),
|
||||
)
|
||||
|
||||
self.parser.add_argument(
|
||||
"--provider",
|
||||
type=str,
|
||||
help="The provider to package into the container",
|
||||
required=True,
|
||||
)
|
||||
self.parser.add_argument(
|
||||
"--dependencies",
|
||||
type=str,
|
||||
help="Comma separated list of (downstream_api=provider) dependencies needed for the API",
|
||||
required=False,
|
||||
"api_providers",
|
||||
help="Comma separated list of (api=provider) tuples",
|
||||
)
|
||||
self.parser.add_argument(
|
||||
"--name",
|
||||
|
@ -92,14 +76,23 @@ class ApiBuild(Subcommand):
|
|||
build_package,
|
||||
)
|
||||
|
||||
api_input = ApiInput(
|
||||
api=Api(args.api),
|
||||
provider=args.provider,
|
||||
dependencies=parse_dependencies(args.dependencies or "", self.parser),
|
||||
)
|
||||
parsed = parse_api_provider_tuples(args.api_providers, self.parser)
|
||||
api_inputs = []
|
||||
for api, provider_spec in parsed.items():
|
||||
for dep in provider_spec.api_dependencies:
|
||||
if dep not in parsed:
|
||||
self.parser.error(f"API {api} needs dependency {dep} provided also")
|
||||
return
|
||||
|
||||
api_inputs.append(
|
||||
ApiInput(
|
||||
api=api,
|
||||
provider=provider_spec.provider_id,
|
||||
)
|
||||
)
|
||||
|
||||
build_package(
|
||||
[api_input],
|
||||
api_inputs,
|
||||
build_type=BuildType(args.type),
|
||||
name=args.name,
|
||||
)
|
||||
|
|
|
@ -31,36 +31,16 @@ class ApiConfigure(Subcommand):
|
|||
self.parser.set_defaults(func=self._run_api_configure_cmd)
|
||||
|
||||
def _add_arguments(self):
|
||||
from llama_toolchain.core.distribution import stack_apis
|
||||
from llama_toolchain.core.package import BuildType
|
||||
|
||||
allowed_args = [a.name for a in stack_apis()]
|
||||
self.parser.add_argument(
|
||||
"api",
|
||||
choices=allowed_args,
|
||||
help="Stack API (one of: {})".format(", ".join(allowed_args)),
|
||||
)
|
||||
self.parser.add_argument(
|
||||
"--build-name",
|
||||
type=str,
|
||||
help="(Fully qualified) name of the API build to configure. Alternatively, specify the --provider and --name options.",
|
||||
required=False,
|
||||
)
|
||||
|
||||
self.parser.add_argument(
|
||||
"--provider",
|
||||
type=str,
|
||||
help="The provider chosen for the API",
|
||||
required=False,
|
||||
help="Name of the build",
|
||||
required=True,
|
||||
)
|
||||
self.parser.add_argument(
|
||||
"--name",
|
||||
type=str,
|
||||
help="Name of the build target (image, conda env)",
|
||||
required=False,
|
||||
)
|
||||
self.parser.add_argument(
|
||||
"--type",
|
||||
"--build-type",
|
||||
type=str,
|
||||
default="conda_env",
|
||||
choices=[v.value for v in BuildType],
|
||||
|
@ -69,15 +49,11 @@ class ApiConfigure(Subcommand):
|
|||
def _run_api_configure_cmd(self, args: argparse.Namespace) -> None:
|
||||
from llama_toolchain.core.package import BuildType
|
||||
|
||||
if args.build_name:
|
||||
name = args.build_name
|
||||
if name.endswith(".yaml"):
|
||||
name = name.replace(".yaml", "")
|
||||
else:
|
||||
build_type = BuildType(args.type)
|
||||
name = f"{build_type.descriptor()}-{args.provider}-{args.name}"
|
||||
|
||||
config_file = BUILDS_BASE_DIR / args.api / f"{name}.yaml"
|
||||
build_type = BuildType(args.build_type)
|
||||
name = args.build_name
|
||||
config_file = (
|
||||
BUILDS_BASE_DIR / "adhoc" / build_type.descriptor() / f"{name}.yaml"
|
||||
)
|
||||
if not config_file.exists():
|
||||
self.parser.error(
|
||||
f"Could not find {config_file}. Please run `llama api build` first"
|
||||
|
|
|
@ -13,6 +13,7 @@ import yaml
|
|||
|
||||
from llama_toolchain.cli.subcommand import Subcommand
|
||||
from llama_toolchain.core.datatypes import * # noqa: F403
|
||||
from llama_toolchain.common.config_dirs import BUILDS_BASE_DIR
|
||||
|
||||
|
||||
class ApiStart(Subcommand):
|
||||
|
@ -28,10 +29,18 @@ class ApiStart(Subcommand):
|
|||
self.parser.set_defaults(func=self._run_api_start_cmd)
|
||||
|
||||
def _add_arguments(self):
|
||||
from llama_toolchain.core.package import BuildType
|
||||
|
||||
self.parser.add_argument(
|
||||
"yaml_config",
|
||||
"build_name",
|
||||
type=str,
|
||||
help="Yaml config containing the API build configuration",
|
||||
help="Name of the API build you want to start",
|
||||
)
|
||||
self.parser.add_argument(
|
||||
"--build-type",
|
||||
type=str,
|
||||
default="conda_env",
|
||||
choices=[v.value for v in BuildType],
|
||||
)
|
||||
self.parser.add_argument(
|
||||
"--port",
|
||||
|
@ -48,8 +57,16 @@ class ApiStart(Subcommand):
|
|||
|
||||
def _run_api_start_cmd(self, args: argparse.Namespace) -> None:
|
||||
from llama_toolchain.common.exec import run_with_pty
|
||||
from llama_toolchain.core.package import BuildType
|
||||
|
||||
config_file = Path(args.yaml_config)
|
||||
if args.build_name.endswith(".yaml"):
|
||||
path = args.build_name
|
||||
else:
|
||||
build_type = BuildType(args.build_type)
|
||||
build_dir = BUILDS_BASE_DIR / "adhoc" / build_type.descriptor()
|
||||
path = build_dir / f"{args.build_name}.yaml"
|
||||
|
||||
config_file = Path(path)
|
||||
if not config_file.exists():
|
||||
self.parser.error(
|
||||
f"Could not find {config_file}. Please run `llama api build` first"
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue