From f8eaa4058084edc16cf738b194edd410f7a00cb7 Mon Sep 17 00:00:00 2001 From: ehhuang Date: Wed, 22 Oct 2025 14:33:13 -0700 Subject: [PATCH] chore: better error messages for moderations API (#3887) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit # What does this PR do? ## Test Plan ``` ~/projects/lst3 remotes/origin/HEAD* .venv ❯ curl http://localhost:8321/v1/moderations \ -H "Content-Type: application/json" \ -d '{ "model": "gpt-4o-mini", "input": [ "hello" ] }' {"detail":"Invalid value: No shield associated with provider_resource id gpt-4o-mini: choose from ['together/meta-llama/Llama-Guard-4-12B']"} ``` --- llama_stack/core/routers/safety.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/llama_stack/core/routers/safety.py b/llama_stack/core/routers/safety.py index 9ba3327f1..d171c9721 100644 --- a/llama_stack/core/routers/safety.py +++ b/llama_stack/core/routers/safety.py @@ -65,12 +65,16 @@ class SafetyRouter(Safety): """Get Shield id from model (provider_resource_id) of shield.""" list_shields_response = await self.routing_table.list_shields() - matches = [s.identifier for s in list_shields_response.data if model == s.provider_resource_id] + matches: list[str] = [s.identifier for s in list_shields_response.data if model == s.provider_resource_id] if not matches: - raise ValueError(f"No shield associated with provider_resource id {model}") + raise ValueError( + f"No shield associated with provider_resource id {model}: choose from {[s.provider_resource_id for s in list_shields_response.data]}" + ) if len(matches) > 1: - raise ValueError(f"Multiple shields associated with provider_resource id {model}") + raise ValueError( + f"Multiple shields associated with provider_resource id {model}: matched shields {matches}" + ) return matches[0] shield_id = await get_shield_id(self, model)