mirror of
https://github.com/meta-llama/llama-stack.git
synced 2025-12-12 12:06:04 +00:00
adding back relevant vector_db files
Signed-off-by: Francisco Javier Arceo <farceo@redhat.com> fix tests Signed-off-by: Francisco Javier Arceo <farceo@redhat.com> updating tests and fixing routing logic for single provider Signed-off-by: Francisco Javier Arceo <farceo@redhat.com> setting default provider to update tests Signed-off-by: Francisco Javier Arceo <farceo@redhat.com> updated provider_id Signed-off-by: Francisco Javier Arceo <farceo@redhat.com> updated VectorStoreConfig to use (provider_id, embedding_model_id) and add defautl vector store provider Signed-off-by: Francisco Javier Arceo <farceo@redhat.com> special handling for replay mode for available providers Signed-off-by: Francisco Javier Arceo <farceo@redhat.com>
This commit is contained in:
parent
accc4c437e
commit
b3addc94d1
23 changed files with 637 additions and 261 deletions
|
|
@ -50,85 +50,6 @@ from llama_stack.providers.utils.sqlstore.sqlstore import SqliteSqlStoreConfig
|
|||
DISTRIBS_PATH = Path(__file__).parent.parent.parent / "distributions"
|
||||
|
||||
|
||||
def _apply_single_provider_filter(build_config: BuildConfig, single_provider_arg: str) -> BuildConfig:
|
||||
"""Filter a distribution to only include specified providers for certain APIs."""
|
||||
# Parse the single-provider argument using the same logic as --providers
|
||||
provider_filters: dict[str, str] = {}
|
||||
for api_provider in single_provider_arg.split(","):
|
||||
if "=" not in api_provider:
|
||||
cprint(
|
||||
"Could not parse `--single-provider`. Please ensure the list is in the format api1=provider1,api2=provider2",
|
||||
color="red",
|
||||
file=sys.stderr,
|
||||
)
|
||||
sys.exit(1)
|
||||
api, provider_type = api_provider.split("=")
|
||||
provider_filters[api] = provider_type
|
||||
|
||||
# Create a copy of the build config to modify
|
||||
filtered_build_config = BuildConfig(
|
||||
image_type=build_config.image_type,
|
||||
image_name=build_config.image_name,
|
||||
external_providers_dir=build_config.external_providers_dir,
|
||||
external_apis_dir=build_config.external_apis_dir,
|
||||
distribution_spec=DistributionSpec(
|
||||
providers={},
|
||||
description=build_config.distribution_spec.description,
|
||||
),
|
||||
)
|
||||
|
||||
# Copy all providers, but filter the specified APIs
|
||||
for api, providers in build_config.distribution_spec.providers.items():
|
||||
if api in provider_filters:
|
||||
target_provider_type = provider_filters[api]
|
||||
filtered_providers = [p for p in providers if p.provider_type == target_provider_type]
|
||||
if not filtered_providers:
|
||||
cprint(
|
||||
f"Provider {target_provider_type} not found in distribution for API {api}",
|
||||
color="red",
|
||||
file=sys.stderr,
|
||||
)
|
||||
sys.exit(1)
|
||||
filtered_build_config.distribution_spec.providers[api] = filtered_providers
|
||||
else:
|
||||
# Keep all providers for unfiltered APIs
|
||||
filtered_build_config.distribution_spec.providers[api] = providers
|
||||
|
||||
return filtered_build_config
|
||||
|
||||
|
||||
def _generate_filtered_run_config(
|
||||
build_config: BuildConfig,
|
||||
build_dir: Path,
|
||||
distro_name: str,
|
||||
) -> Path:
|
||||
"""
|
||||
Generate a filtered run.yaml by starting with the original distribution's run.yaml
|
||||
and filtering the providers according to the build_config.
|
||||
"""
|
||||
# Load the original distribution's run.yaml
|
||||
distro_resource = importlib.resources.files("llama_stack") / f"distributions/{distro_name}/run.yaml"
|
||||
|
||||
with importlib.resources.as_file(distro_resource) as path:
|
||||
with open(path) as f:
|
||||
original_config = yaml.safe_load(f)
|
||||
|
||||
# Apply provider filtering to the loaded config
|
||||
for api, providers in build_config.distribution_spec.providers.items():
|
||||
if api in original_config.get("providers", {}):
|
||||
# Filter this API to only include the providers from build_config
|
||||
provider_types = {p.provider_type for p in providers}
|
||||
filtered_providers = [p for p in original_config["providers"][api] if p["provider_type"] in provider_types]
|
||||
original_config["providers"][api] = filtered_providers
|
||||
|
||||
# Write the filtered config
|
||||
run_config_file = build_dir / f"{distro_name}-filtered-run.yaml"
|
||||
with open(run_config_file, "w") as f:
|
||||
yaml.dump(original_config, f, sort_keys=False)
|
||||
|
||||
return run_config_file
|
||||
|
||||
|
||||
@lru_cache
|
||||
def available_distros_specs() -> dict[str, BuildConfig]:
|
||||
import yaml
|
||||
|
|
@ -172,11 +93,6 @@ def run_stack_build_command(args: argparse.Namespace) -> None:
|
|||
)
|
||||
sys.exit(1)
|
||||
build_config = available_distros[distro_name]
|
||||
|
||||
# Apply single-provider filtering if specified
|
||||
if args.single_provider:
|
||||
build_config = _apply_single_provider_filter(build_config, args.single_provider)
|
||||
|
||||
if args.image_type:
|
||||
build_config.image_type = args.image_type
|
||||
else:
|
||||
|
|
@ -329,7 +245,6 @@ def run_stack_build_command(args: argparse.Namespace) -> None:
|
|||
image_name=image_name,
|
||||
config_path=args.config,
|
||||
distro_name=distro_name,
|
||||
is_filtered=bool(args.single_provider),
|
||||
)
|
||||
|
||||
except (Exception, RuntimeError) as exc:
|
||||
|
|
@ -448,7 +363,6 @@ def _run_stack_build_command_from_build_config(
|
|||
image_name: str | None = None,
|
||||
distro_name: str | None = None,
|
||||
config_path: str | None = None,
|
||||
is_filtered: bool = False,
|
||||
) -> Path | Traversable:
|
||||
image_name = image_name or build_config.image_name
|
||||
if build_config.image_type == LlamaStackImageType.CONTAINER.value:
|
||||
|
|
@ -521,19 +435,12 @@ def _run_stack_build_command_from_build_config(
|
|||
raise RuntimeError(f"Failed to build image {image_name}")
|
||||
|
||||
if distro_name:
|
||||
# If single-provider filtering was applied, generate a filtered run config
|
||||
# Otherwise, copy run.yaml from distribution as before
|
||||
if is_filtered:
|
||||
run_config_file = _generate_filtered_run_config(build_config, build_dir, distro_name)
|
||||
distro_path = run_config_file # Use the generated file as the distro_path
|
||||
else:
|
||||
# copy run.yaml from distribution to build_dir instead of generating it again
|
||||
distro_resource = importlib.resources.files("llama_stack") / f"distributions/{distro_name}/run.yaml"
|
||||
run_config_file = build_dir / f"{distro_name}-run.yaml"
|
||||
# copy run.yaml from distribution to build_dir instead of generating it again
|
||||
distro_path = importlib.resources.files("llama_stack") / f"distributions/{distro_name}/run.yaml"
|
||||
run_config_file = build_dir / f"{distro_name}-run.yaml"
|
||||
|
||||
with importlib.resources.as_file(distro_resource) as path:
|
||||
shutil.copy(path, run_config_file)
|
||||
distro_path = run_config_file # Update distro_path to point to the copied file
|
||||
with importlib.resources.as_file(distro_path) as path:
|
||||
shutil.copy(path, run_config_file)
|
||||
|
||||
cprint("Build Successful!", color="green", file=sys.stderr)
|
||||
cprint(f"You can find the newly-built distribution here: {run_config_file}", color="blue", file=sys.stderr)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue