Skip to content

Commit 668d7fa

Browse files
authored
fix: strip inline:: prefix from model in vector io tests (#4993)
Problem - The vector IO integration tests were using a non-standard model name: `inline::sentence-transformers/nomic-ai/nomic-embed-text-v1.5` The vector IO test setup in `conftest.py` and `fixtures/common.py` had hardcoded the same wrong value, masking the bug — lookups accidentally matched the incorrectly-prefixed key. Fix - **`stack.py`** — use the bare provider type without the `inline::`/`remote::` namespace as the routing-table key. **`fixtures/common.py`** — `QualifiedModel.provider_id` is used for a routing-table lookup; derive it from the bare portion of the `embedding_model` option string (`"sentence-transformers/model"` → `"sentence-transformers"`) rather than hardcoding `"inline::sentence-transformers"`. Cleanup - As a side effect, `conftest.py`'s `parse_vector_io_providers_from_config` (which manually re-parsed the `--stack-config` string) and an analogous substring check in `pytest_configure` are replaced with calls to `run_config_from_adhoc_config_spec`, reading provider IDs directly from the resulting `StackConfig` instead of duplicating the parsing logic. to read provider IDs directly.
1 parent 3a7306f commit 668d7fa

3 files changed

Lines changed: 22 additions & 45 deletions

File tree

src/llama_stack/core/stack.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -765,7 +765,7 @@ def run_config_from_adhoc_config_spec(
765765

766766
provider_configs_by_api[api_str] = [
767767
Provider(
768-
provider_id=provider,
768+
provider_id=provider_spec.provider_type.split("::")[-1],
769769
provider_type=provider_spec.provider_type,
770770
config=provider_config,
771771
)

tests/integration/conftest.py

Lines changed: 18 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import pytest
1616
from dotenv import load_dotenv
1717

18+
from llama_stack.core.stack import run_config_from_adhoc_config_spec
1819
from llama_stack.log import get_logger
1920
from llama_stack.testing.api_recorder import patch_httpx_for_test_id
2021

@@ -146,9 +147,11 @@ def pytest_configure(config):
146147
# Apply global fallback for embedding_model when using stack configs with embedding models
147148
if getattr(config.option, "embedding_model", None) is None:
148149
stack_config = config.getoption("--stack-config", default=None)
149-
if stack_config and "inference=inline::sentence-transformers" in stack_config:
150-
# Use the full qualified model ID that matches what's actually registered
151-
config.option.embedding_model = "inline::sentence-transformers/nomic-ai/nomic-embed-text-v1.5"
150+
if stack_config and "=" in stack_config:
151+
run_config = run_config_from_adhoc_config_spec(stack_config)
152+
inference_providers = run_config.providers.get("inference", [])
153+
if any("sentence-transformers" in p.provider_type for p in inference_providers):
154+
config.option.embedding_model = "sentence-transformers/nomic-ai/nomic-embed-text-v1.5"
152155

153156

154157
def pytest_addoption(parser):
@@ -241,28 +244,6 @@ def get_short_id(value):
241244
return MODEL_SHORT_IDS.get(value, value)
242245

243246

244-
def parse_vector_io_providers_from_config(config):
245-
"""Parse stack config to extract vector_io provider from command line."""
246-
config_str = config.getoption("--stack-config", default=None) or os.environ.get("LLAMA_STACK_CONFIG")
247-
248-
if not config_str:
249-
return None
250-
251-
try:
252-
# Handle stack-config format: "files=inline::localfs,inference=inline::sentence-transformers,vector_io=inline::milvus"
253-
for part in config_str.replace(";", ",").split(","):
254-
part = part.strip()
255-
if part.startswith("vector_io="):
256-
provider_spec = part.split("=", 1)[1].strip()
257-
# Return the full provider specification (e.g. "inline::milvus")
258-
# The runtime system expects full provider IDs
259-
return [provider_spec]
260-
except Exception as e:
261-
logger.debug(f"Failed to parse vector_io provider from config: {e}")
262-
263-
return None
264-
265-
266247
def pytest_generate_tests(metafunc):
267248
"""
268249
This is the main function which processes CLI arguments and generates various combinations of parameters.
@@ -272,22 +253,19 @@ def pytest_generate_tests(metafunc):
272253
"""
273254
# Handle vector_io_provider_id dynamically
274255
if "vector_io_provider_id" in metafunc.fixturenames:
275-
providers = parse_vector_io_providers_from_config(metafunc.config)
276-
if providers:
277-
# Use the configured provider instead of letting decorator handle it
278-
# Use short names in test IDs for readability
279-
test_ids = [f"vector_io={p.split('::')[-1] if '::' in p else p}" for p in providers]
280-
metafunc.parametrize("vector_io_provider_id", providers, ids=test_ids)
281-
else:
282-
# No stack config found, apply fallback parametrization here
256+
config_str = metafunc.config.getoption("--stack-config", default=None) or os.environ.get("LLAMA_STACK_CONFIG")
257+
providers = None
258+
if config_str and "=" in config_str:
259+
run_config = run_config_from_adhoc_config_spec(config_str)
260+
providers = [p.provider_id for p in run_config.providers.get("vector_io", [])]
261+
if providers is None:
283262
inference_mode = os.environ.get("LLAMA_STACK_TEST_INFERENCE_MODE")
284-
if inference_mode == "live":
285-
all_providers = ["faiss", "sqlite-vec", "milvus", "chromadb", "pgvector", "weaviate", "qdrant"]
286-
else:
287-
all_providers = ["faiss", "sqlite-vec"]
288-
289-
test_ids = [f"vector_io={p.split('::')[-1] if '::' in p else p}" for p in all_providers]
290-
metafunc.parametrize("vector_io_provider_id", all_providers, ids=test_ids)
263+
providers = (
264+
["faiss", "sqlite-vec", "milvus", "chromadb", "pgvector", "weaviate", "qdrant"]
265+
if inference_mode == "live"
266+
else ["faiss", "sqlite-vec"]
267+
)
268+
metafunc.parametrize("vector_io_provider_id", providers, ids=[f"vector_io={p}" for p in providers])
291269

292270
params = []
293271
param_values = {}

tests/integration/fixtures/common.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -325,10 +325,9 @@ def instantiate_llama_stack_client(session):
325325

326326
# --stack-config bypasses template so need this to set default embedding model
327327
if "vector_io" in config and "inference" in config:
328-
if "inline" in session.config.getoption("embedding_model"):
329-
provider_id = "inline::sentence-transformers"
330-
else:
331-
provider_id = parse_vector_io_provider(config)
328+
embedding_model_opt = session.config.getoption("embedding_model") or ""
329+
# Model identifiers are in provider_id/model_id format; extract the provider.
330+
provider_id = embedding_model_opt.split("/")[0] if "/" in embedding_model_opt else "sentence-transformers"
332331
passed_model = extract_model(session.config.getoption("embedding_model"), "nomic-ai/nomic-embed-text-v1.5")
333332
passed_emb = session.config.getoption("embedding_dimension")
334333

0 commit comments

Comments
 (0)