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
This commit is contained in:
Matthew Farrellee 2025-10-09 07:28:38 -04:00
parent 96886afaca
commit 04af470add
2 changed files with 4 additions and 4 deletions

View file

@ -9,7 +9,6 @@ from typing import Any
from llama_stack.apis.common.errors import ModelNotFoundError from llama_stack.apis.common.errors import ModelNotFoundError
from llama_stack.apis.models import Model from llama_stack.apis.models import Model
from llama_stack.apis.resource import ResourceType 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.access_control import AccessDeniedError, is_action_allowed
from llama_stack.core.access_control.datatypes import Action from llama_stack.core.access_control.datatypes import Action
from llama_stack.core.datatypes import ( from llama_stack.core.datatypes import (
@ -17,6 +16,7 @@ from llama_stack.core.datatypes import (
RoutableObject, RoutableObject,
RoutableObjectWithProvider, RoutableObjectWithProvider,
RoutedProtocol, RoutedProtocol,
ScoringFnWithOwner,
) )
from llama_stack.core.request_headers import get_authenticated_user from llama_stack.core.request_headers import get_authenticated_user
from llama_stack.core.store import DistributionRegistry from llama_stack.core.store import DistributionRegistry
@ -114,7 +114,7 @@ class CommonRoutingTableImpl(RoutingTable):
elif api == Api.scoring: elif api == Api.scoring:
p.scoring_function_store = self p.scoring_function_store = self
scoring_functions = await p.list_scoring_functions() 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: elif api == Api.eval:
p.benchmark_store = self p.benchmark_store = self
elif api == Api.tool_runtime: elif api == Api.tool_runtime:

View file

@ -97,9 +97,9 @@ class DiskDistributionRegistry(DistributionRegistry):
async def register(self, obj: RoutableObjectWithProvider) -> bool: async def register(self, obj: RoutableObjectWithProvider) -> bool:
existing_obj = await self.get(obj.type, obj.identifier) existing_obj = await self.get(obj.type, obj.identifier)
# dont register if the object's providerid already exists # 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( 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." f"Unregister the existing provider first before registering it again."
) )