From da5ea107fcf68f6d235477e4a5f32830337c3254 Mon Sep 17 00:00:00 2001 From: Matthew Farrellee Date: Fri, 26 Sep 2025 16:18:32 -0400 Subject: [PATCH 1/4] fix: ensure ModelRegistryHelper init for together and fireworks (#3572) # What does this PR do? address - ``` ERROR 2025-09-26 10:44:29,450 main:527 core::server: Error creating app: 'FireworksInferenceAdapter' object has no attribute 'alias_to_provider_id_map' ``` ## Test Plan manual startup w/ valid together & fireworks api keys --- llama_stack/providers/remote/inference/fireworks/fireworks.py | 1 + llama_stack/providers/remote/inference/together/together.py | 1 + 2 files changed, 2 insertions(+) diff --git a/llama_stack/providers/remote/inference/fireworks/fireworks.py b/llama_stack/providers/remote/inference/fireworks/fireworks.py index cf7e93974..1025bfb53 100644 --- a/llama_stack/providers/remote/inference/fireworks/fireworks.py +++ b/llama_stack/providers/remote/inference/fireworks/fireworks.py @@ -64,6 +64,7 @@ class FireworksInferenceAdapter(OpenAIMixin, ModelRegistryHelper, Inference, Nee } def __init__(self, config: FireworksImplConfig) -> None: + ModelRegistryHelper.__init__(self) self.config = config self.allowed_models = config.allowed_models diff --git a/llama_stack/providers/remote/inference/together/together.py b/llama_stack/providers/remote/inference/together/together.py index 37973d635..c199677be 100644 --- a/llama_stack/providers/remote/inference/together/together.py +++ b/llama_stack/providers/remote/inference/together/together.py @@ -70,6 +70,7 @@ class TogetherInferenceAdapter(OpenAIMixin, ModelRegistryHelper, Inference, Need } def __init__(self, config: TogetherImplConfig) -> None: + ModelRegistryHelper.__init__(self) self.config = config self.allowed_models = config.allowed_models self._model_cache: dict[str, Model] = {} From 7a25be633c457c09391d1a16d663617fe9df36ee Mon Sep 17 00:00:00 2001 From: Matthew Farrellee Date: Fri, 26 Sep 2025 16:19:21 -0400 Subject: [PATCH 2/4] fix: Revert "fix: Added a bug fix when registering new models" (#3473) the commit to be reverted is an public api behavior change to something we should not support. instead of allowing silent updates (the caller cannot see the log messages), we should be sending an error to the caller that they must first unregister the model before reusing the same name w/ a different backend. --- llama_stack/core/store/registry.py | 8 +++----- tests/unit/registry/test_registry.py | 13 ++++--------- 2 files changed, 7 insertions(+), 14 deletions(-) diff --git a/llama_stack/core/store/registry.py b/llama_stack/core/store/registry.py index a764d692a..5f4abe9aa 100644 --- a/llama_stack/core/store/registry.py +++ b/llama_stack/core/store/registry.py @@ -96,11 +96,9 @@ class DiskDistributionRegistry(DistributionRegistry): async def register(self, obj: RoutableObjectWithProvider) -> bool: existing_obj = await self.get(obj.type, obj.identifier) - # warn if the object's providerid is different but proceed with registration - if existing_obj and existing_obj.provider_id != obj.provider_id: - logger.warning( - f"Object {existing_obj.type}:{existing_obj.identifier}'s {existing_obj.provider_id} provider is being replaced with {obj.provider_id}" - ) + # dont register if the object's providerid already exists + if existing_obj and existing_obj.provider_id == obj.provider_id: + return False await self.kvstore.set( KEY_FORMAT.format(type=obj.type, identifier=obj.identifier), diff --git a/tests/unit/registry/test_registry.py b/tests/unit/registry/test_registry.py index 9873bec5b..4ea4a20b9 100644 --- a/tests/unit/registry/test_registry.py +++ b/tests/unit/registry/test_registry.py @@ -129,7 +129,7 @@ async def test_duplicate_provider_registration(cached_disk_dist_registry): result = await cached_disk_dist_registry.get("vector_db", "test_vector_db_2") assert result is not None - assert result.embedding_model == duplicate_vector_db.embedding_model # Original values preserved + assert result.embedding_model == original_vector_db.embedding_model # Original values preserved async def test_get_all_objects(cached_disk_dist_registry): @@ -174,14 +174,10 @@ async def test_parse_registry_values_error_handling(sqlite_kvstore): ) await sqlite_kvstore.set( - KEY_FORMAT.format(type="vector_db", identifier="valid_vector_db"), - valid_db.model_dump_json(), + KEY_FORMAT.format(type="vector_db", identifier="valid_vector_db"), valid_db.model_dump_json() ) - await sqlite_kvstore.set( - KEY_FORMAT.format(type="vector_db", identifier="corrupted_json"), - "{not valid json", - ) + await sqlite_kvstore.set(KEY_FORMAT.format(type="vector_db", identifier="corrupted_json"), "{not valid json") await sqlite_kvstore.set( KEY_FORMAT.format(type="vector_db", identifier="missing_fields"), @@ -216,8 +212,7 @@ async def test_cached_registry_error_handling(sqlite_kvstore): ) await sqlite_kvstore.set( - KEY_FORMAT.format(type="vector_db", identifier="valid_cached_db"), - valid_db.model_dump_json(), + KEY_FORMAT.format(type="vector_db", identifier="valid_cached_db"), valid_db.model_dump_json() ) await sqlite_kvstore.set( From 4487b88ffe7521cd167aca48bf6b3ab9eea3bfd7 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Fri, 26 Sep 2025 21:11:51 +0000 Subject: [PATCH 3/4] build: Bump version to 0.2.23 --- llama_stack/ui/package-lock.json | 8 ++++---- llama_stack/ui/package.json | 2 +- pyproject.toml | 6 +++--- uv.lock | 12 ++++++------ 4 files changed, 14 insertions(+), 14 deletions(-) diff --git a/llama_stack/ui/package-lock.json b/llama_stack/ui/package-lock.json index 638655639..21dec59c3 100644 --- a/llama_stack/ui/package-lock.json +++ b/llama_stack/ui/package-lock.json @@ -18,7 +18,7 @@ "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "framer-motion": "^12.23.12", - "llama-stack-client": "^0.2.22", + "llama-stack-client": "^0.2.23", "lucide-react": "^0.542.0", "next": "15.5.3", "next-auth": "^4.24.11", @@ -10172,9 +10172,9 @@ "license": "MIT" }, "node_modules/llama-stack-client": { - "version": "0.2.22", - "resolved": "https://registry.npmjs.org/llama-stack-client/-/llama-stack-client-0.2.22.tgz", - "integrity": "sha512-7aW3UQj5MwjV73Brd+yQ1e4W1W33nhozyeHM5tzOgbsVZ88tL78JNiNvyFqDR5w6V9XO4/uSGGiQVG6v83yR4w==", + "version": "0.2.23", + "resolved": "https://registry.npmjs.org/llama-stack-client/-/llama-stack-client-0.2.23.tgz", + "integrity": "sha512-J3YFH1HW2K70capejQxGlCyTgKdfx+sQf8Ab+HFi1j2Q00KtpHXB79RxejvBxjWC3X2E++P9iU57KdU2Tp/rIQ==", "license": "MIT", "dependencies": { "@types/node": "^18.11.18", diff --git a/llama_stack/ui/package.json b/llama_stack/ui/package.json index 2ba81ea84..70462b534 100644 --- a/llama_stack/ui/package.json +++ b/llama_stack/ui/package.json @@ -23,7 +23,7 @@ "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "framer-motion": "^12.23.12", - "llama-stack-client": "^0.2.22", + "llama-stack-client": "^0.2.23", "lucide-react": "^0.542.0", "next": "15.5.3", "next-auth": "^4.24.11", diff --git a/pyproject.toml b/pyproject.toml index a26c4d645..98bae47c5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -7,7 +7,7 @@ required-version = ">=0.7.0" [project] name = "llama_stack" -version = "0.2.22" +version = "0.2.23" authors = [{ name = "Meta Llama", email = "llama-oss@meta.com" }] description = "Llama Stack" readme = "README.md" @@ -31,7 +31,7 @@ dependencies = [ "huggingface-hub>=0.34.0,<1.0", "jinja2>=3.1.6", "jsonschema", - "llama-stack-client>=0.2.22", + "llama-stack-client>=0.2.23", "openai>=1.100.0", # for expires_after support "prompt-toolkit", "python-dotenv", @@ -55,7 +55,7 @@ dependencies = [ ui = [ "streamlit", "pandas", - "llama-stack-client>=0.2.22", + "llama-stack-client>=0.2.23", "streamlit-option-menu", ] diff --git a/uv.lock b/uv.lock index 0833a9d77..63639ee4a 100644 --- a/uv.lock +++ b/uv.lock @@ -1749,7 +1749,7 @@ wheels = [ [[package]] name = "llama-stack" -version = "0.2.22" +version = "0.2.23" source = { editable = "." } dependencies = [ { name = "aiohttp" }, @@ -1885,8 +1885,8 @@ requires-dist = [ { name = "huggingface-hub", specifier = ">=0.34.0,<1.0" }, { name = "jinja2", specifier = ">=3.1.6" }, { name = "jsonschema" }, - { name = "llama-stack-client", specifier = ">=0.2.22" }, - { name = "llama-stack-client", marker = "extra == 'ui'", specifier = ">=0.2.22" }, + { name = "llama-stack-client", specifier = ">=0.2.23" }, + { name = "llama-stack-client", marker = "extra == 'ui'", specifier = ">=0.2.23" }, { name = "openai", specifier = ">=1.100.0" }, { name = "opentelemetry-exporter-otlp-proto-http", specifier = ">=1.30.0" }, { name = "opentelemetry-sdk", specifier = ">=1.30.0" }, @@ -1993,7 +1993,7 @@ unit = [ [[package]] name = "llama-stack-client" -version = "0.2.22" +version = "0.2.23" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "anyio" }, @@ -2012,9 +2012,9 @@ dependencies = [ { name = "tqdm" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/60/80/4260816bfaaa889d515206c9df4906d08d405bf94c9b4d1be399b1923e46/llama_stack_client-0.2.22.tar.gz", hash = "sha256:9a0bc756b91ebd539858eeaf1f231c5e5c6900e1ea4fcced726c6717f3d27ca7", size = 318309, upload-time = "2025-09-16T19:43:33.212Z" } +sdist = { url = "https://files.pythonhosted.org/packages/9f/8f/306d5fcf2f97b3a6251219b03c194836a2ff4e0fcc8146c9970e50a72cd3/llama_stack_client-0.2.23.tar.gz", hash = "sha256:68f34e8ac8eea6a73ed9d4977d849992b2d8bd835804d770a11843431cd5bf74", size = 322288, upload-time = "2025-09-26T21:11:08.342Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/d1/8e/1ebf6ac0dbb62b81038e856ed00768e283d927b14fcd614e3018a227092b/llama_stack_client-0.2.22-py3-none-any.whl", hash = "sha256:b260d73aec56fcfd8fa601b3b34c2f83c4fbcfb7261a246b02bbdf6c2da184fe", size = 369901, upload-time = "2025-09-16T19:43:32.089Z" }, + { url = "https://files.pythonhosted.org/packages/fa/75/3eb58e092a681804013dbec7b7f549d18f55acf6fd6e6b27de7e249766d8/llama_stack_client-0.2.23-py3-none-any.whl", hash = "sha256:eee42c74eee8f218f9455e5a06d5d4be43f8a8c82a7937ef51ce367f916df847", size = 379809, upload-time = "2025-09-26T21:11:06.856Z" }, ] [[package]] From 7004ac27b51c7b59effe74fcfc1ec7a65db9573d Mon Sep 17 00:00:00 2001 From: Eric Huang Date: Fri, 26 Sep 2025 14:44:17 -0700 Subject: [PATCH 4/4] chore: remove extra logging # What does this PR do? ## Test Plan --- .../providers/inline/telemetry/meta_reference/telemetry.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/llama_stack/providers/inline/telemetry/meta_reference/telemetry.py b/llama_stack/providers/inline/telemetry/meta_reference/telemetry.py index 9224c3792..2a4032543 100644 --- a/llama_stack/providers/inline/telemetry/meta_reference/telemetry.py +++ b/llama_stack/providers/inline/telemetry/meta_reference/telemetry.py @@ -224,10 +224,6 @@ class TelemetryAdapter(TelemetryDatasetMixin, Telemetry): return _GLOBAL_STORAGE["gauges"][name] def _log_metric(self, event: MetricEvent) -> None: - # Always log to console if console sink is enabled (debug) - if TelemetrySink.CONSOLE in self.config.sinks: - logger.debug(f"METRIC: {event.metric}={event.value} {event.unit} {event.attributes}") - # Add metric as an event to the current span try: with self._lock: