From 04af470adda28ac73dfb1320c09f04532d556c42 Mon Sep 17 00:00:00 2001 From: Matthew Farrellee Date: Thu, 9 Oct 2025 07:28:38 -0400 Subject: [PATCH] fix: only prevent double registration with differences we allow registration of something if it already exists we reject registration of the same identifier if there are differences closes #3749 --- llama_stack/core/routing_tables/common.py | 4 ++-- llama_stack/core/store/registry.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/llama_stack/core/routing_tables/common.py b/llama_stack/core/routing_tables/common.py index ca2f3af42..0800b909b 100644 --- a/llama_stack/core/routing_tables/common.py +++ b/llama_stack/core/routing_tables/common.py @@ -9,7 +9,6 @@ from typing import Any from llama_stack.apis.common.errors import ModelNotFoundError from llama_stack.apis.models import Model from llama_stack.apis.resource import ResourceType -from llama_stack.apis.scoring_functions import ScoringFn from llama_stack.core.access_control.access_control import AccessDeniedError, is_action_allowed from llama_stack.core.access_control.datatypes import Action from llama_stack.core.datatypes import ( @@ -17,6 +16,7 @@ from llama_stack.core.datatypes import ( RoutableObject, RoutableObjectWithProvider, RoutedProtocol, + ScoringFnWithOwner, ) from llama_stack.core.request_headers import get_authenticated_user from llama_stack.core.store import DistributionRegistry @@ -114,7 +114,7 @@ class CommonRoutingTableImpl(RoutingTable): elif api == Api.scoring: p.scoring_function_store = self scoring_functions = await p.list_scoring_functions() - await add_objects(scoring_functions, pid, ScoringFn) + await add_objects(scoring_functions, pid, ScoringFnWithOwner) elif api == Api.eval: p.benchmark_store = self elif api == Api.tool_runtime: diff --git a/llama_stack/core/store/registry.py b/llama_stack/core/store/registry.py index 0486553d5..2daac9be4 100644 --- a/llama_stack/core/store/registry.py +++ b/llama_stack/core/store/registry.py @@ -97,9 +97,9 @@ class DiskDistributionRegistry(DistributionRegistry): async def register(self, obj: RoutableObjectWithProvider) -> bool: existing_obj = await self.get(obj.type, obj.identifier) # dont register if the object's providerid already exists - if existing_obj and existing_obj.provider_id == obj.provider_id: + if existing_obj and existing_obj != obj: raise ValueError( - f"Provider '{obj.provider_id}' is already registered." + f"Provider '{obj.provider_id}' is already registered. " f"Unregister the existing provider first before registering it again." )