fix: tests should not use BuildConfig

test_distribution and test_conversations were using BuildConfig and improper StackConfig semantics

Signed-off-by: Charlie Doern <cdoern@redhat.com>
This commit is contained in:
Charlie Doern 2025-12-01 14:07:17 -05:00
parent 39ad54696c
commit 94506126ae
3 changed files with 48 additions and 56 deletions

View file

@ -113,7 +113,7 @@ jobs:
- name: Build container image - name: Build container image
run: | run: |
BASE_IMAGE=$(yq -r '.distribution_spec.container_image // "python:3.12-slim"' src/llama_stack/distributions/ci-tests/build.yaml) BASE_IMAGE=$(yq -r '.distribution_spec.container_image // "python:3.12-slim"' src/llama_stack/distributions/ci-tests/config.yaml)
BUILD_ARGS="--build-arg INSTALL_MODE=editable --build-arg DISTRO_NAME=ci-tests" BUILD_ARGS="--build-arg INSTALL_MODE=editable --build-arg DISTRO_NAME=ci-tests"
BUILD_ARGS="$BUILD_ARGS --build-arg BASE_IMAGE=$BASE_IMAGE" BUILD_ARGS="$BUILD_ARGS --build-arg BASE_IMAGE=$BASE_IMAGE"
BUILD_ARGS="$BUILD_ARGS --build-arg RUN_CONFIG_PATH=/workspace/src/llama_stack/distributions/ci-tests/config.yaml" BUILD_ARGS="$BUILD_ARGS --build-arg RUN_CONFIG_PATH=/workspace/src/llama_stack/distributions/ci-tests/config.yaml"
@ -155,11 +155,11 @@ jobs:
run: | run: |
yq -i ' yq -i '
.distribution_spec.container_image = "registry.access.redhat.com/ubi9:latest" .distribution_spec.container_image = "registry.access.redhat.com/ubi9:latest"
' src/llama_stack/distributions/ci-tests/build.yaml ' src/llama_stack/distributions/ci-tests/config.yaml
- name: Build UBI9 container image - name: Build UBI9 container image
run: | run: |
BASE_IMAGE=$(yq -r '.distribution_spec.container_image // "registry.access.redhat.com/ubi9:latest"' src/llama_stack/distributions/ci-tests/build.yaml) BASE_IMAGE=$(yq -r '.distribution_spec.container_image // "registry.access.redhat.com/ubi9:latest"' src/llama_stack/distributions/ci-tests/config.yaml)
BUILD_ARGS="--build-arg INSTALL_MODE=editable --build-arg DISTRO_NAME=ci-tests" BUILD_ARGS="--build-arg INSTALL_MODE=editable --build-arg DISTRO_NAME=ci-tests"
BUILD_ARGS="$BUILD_ARGS --build-arg BASE_IMAGE=$BASE_IMAGE" BUILD_ARGS="$BUILD_ARGS --build-arg BASE_IMAGE=$BASE_IMAGE"
BUILD_ARGS="$BUILD_ARGS --build-arg RUN_CONFIG_PATH=/workspace/src/llama_stack/distributions/ci-tests/config.yaml" BUILD_ARGS="$BUILD_ARGS --build-arg RUN_CONFIG_PATH=/workspace/src/llama_stack/distributions/ci-tests/config.yaml"

View file

@ -44,9 +44,9 @@ async def service():
), ),
) )
register_sqlstore_backends({"sql_test": storage.backends["sql_test"]}) register_sqlstore_backends({"sql_test": storage.backends["sql_test"]})
run_config = StackConfig(image_name="test", apis=[], providers={}, storage=storage) stack_config = StackConfig(image_name="test", apis=[], providers={}, storage=storage)
config = ConversationServiceConfig(run_config=run_config, policy=[]) config = ConversationServiceConfig(config=stack_config, policy=[])
service = ConversationServiceImpl(config, {}) service = ConversationServiceImpl(config, {})
await service.initialize() await service.initialize()
yield service yield service
@ -151,9 +151,9 @@ async def test_policy_configuration():
), ),
) )
register_sqlstore_backends({"sql_test": storage.backends["sql_test"]}) register_sqlstore_backends({"sql_test": storage.backends["sql_test"]})
run_config = StackConfig(image_name="test", apis=[], providers={}, storage=storage) stack_config = StackConfig(image_name="test", apis=[], providers={}, storage=storage)
config = ConversationServiceConfig(run_config=run_config, policy=restrictive_policy) config = ConversationServiceConfig(config=stack_config, policy=restrictive_policy)
service = ConversationServiceImpl(config, {}) service = ConversationServiceImpl(config, {})
await service.initialize() await service.initialize()

View file

@ -395,27 +395,25 @@ pip_packages:
def test_external_provider_from_module_building(self, mock_providers): def test_external_provider_from_module_building(self, mock_providers):
"""Test loading an external provider from a module during build (building=True, partial spec).""" """Test loading an external provider from a module during build (building=True, partial spec)."""
from llama_stack.core.datatypes import BuildConfig, BuildProvider, DistributionSpec from llama_stack.core.datatypes import StackConfig
from llama_stack_api import Api from llama_stack_api import Api
# No importlib patch needed, should not import module when type of `config` is BuildConfig or DistributionSpec # No importlib patch needed, should not import module when building
build_config = BuildConfig( config = StackConfig(
version=2,
image_type="container",
image_name="test_image", image_name="test_image",
distribution_spec=DistributionSpec( apis=[],
description="test", providers={
providers={ "inference": [
"inference": [ Provider(
BuildProvider( provider_id="external_test",
provider_type="external_test", provider_type="external_test",
module="external_test", config={},
) module="external_test",
] )
}, ]
), },
) )
registry = get_provider_registry(build_config) registry = get_provider_registry(config, building=True)
assert Api.inference in registry assert Api.inference in registry
assert "external_test" in registry[Api.inference] assert "external_test" in registry[Api.inference]
provider = registry[Api.inference]["external_test"] provider = registry[Api.inference]["external_test"]
@ -492,31 +490,29 @@ class TestGetExternalProvidersFromModule:
assert result[Api.inference]["versioned_test"].module == "versioned_test==1.0.0" assert result[Api.inference]["versioned_test"].module == "versioned_test==1.0.0"
def test_buildconfig_does_not_import_module(self, mock_providers): def test_buildconfig_does_not_import_module(self, mock_providers):
"""Test that BuildConfig does not import the module (building=True).""" """Test that StackConfig does not import the module when building (building=True)."""
from llama_stack.core.datatypes import BuildConfig, BuildProvider, DistributionSpec from llama_stack.core.datatypes import StackConfig
from llama_stack.core.distribution import get_external_providers_from_module from llama_stack.core.distribution import get_external_providers_from_module
build_config = BuildConfig( config = StackConfig(
version=2,
image_type="container",
image_name="test_image", image_name="test_image",
distribution_spec=DistributionSpec( apis=[],
description="test", providers={
providers={ "inference": [
"inference": [ Provider(
BuildProvider( provider_id="build_test",
provider_type="build_test", provider_type="build_test",
module="build_test==1.0.0", config={},
) module="build_test==1.0.0",
] )
}, ]
), },
) )
# Should not call import_module at all when building # Should not call import_module at all when building
with patch("importlib.import_module") as mock_import: with patch("importlib.import_module") as mock_import:
registry = {Api.inference: {}} registry = {Api.inference: {}}
result = get_external_providers_from_module(registry, build_config, building=True) result = get_external_providers_from_module(registry, config, building=True)
# Verify module was NOT imported # Verify module was NOT imported
mock_import.assert_not_called() mock_import.assert_not_called()
@ -530,28 +526,24 @@ class TestGetExternalProvidersFromModule:
assert provider.api == Api.inference assert provider.api == Api.inference
def test_buildconfig_multiple_providers(self, mock_providers): def test_buildconfig_multiple_providers(self, mock_providers):
"""Test BuildConfig with multiple providers for the same API.""" """Test StackConfig with multiple providers for the same API."""
from llama_stack.core.datatypes import BuildConfig, BuildProvider, DistributionSpec from llama_stack.core.datatypes import StackConfig
from llama_stack.core.distribution import get_external_providers_from_module from llama_stack.core.distribution import get_external_providers_from_module
build_config = BuildConfig( config = StackConfig(
version=2,
image_type="container",
image_name="test_image", image_name="test_image",
distribution_spec=DistributionSpec( apis=[],
description="test", providers={
providers={ "inference": [
"inference": [ Provider(provider_id="provider1", provider_type="provider1", config={}, module="provider1"),
BuildProvider(provider_type="provider1", module="provider1"), Provider(provider_id="provider2", provider_type="provider2", config={}, module="provider2"),
BuildProvider(provider_type="provider2", module="provider2"), ]
] },
},
),
) )
with patch("importlib.import_module") as mock_import: with patch("importlib.import_module") as mock_import:
registry = {Api.inference: {}} registry = {Api.inference: {}}
result = get_external_providers_from_module(registry, build_config, building=True) result = get_external_providers_from_module(registry, config, building=True)
mock_import.assert_not_called() mock_import.assert_not_called()
assert "provider1" in result[Api.inference] assert "provider1" in result[Api.inference]