Skip to content

Commit c3d5f18

Browse files
committed
Refactor error mapping using pattern matching
1 parent dd950ae commit c3d5f18

1 file changed

Lines changed: 32 additions & 30 deletions

File tree

src/utils/agents/query.py

Lines changed: 32 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -84,18 +84,20 @@ def map_agent_inference_error(
8484
RuntimeError: Re-raised when ``exc`` is a non-agent ``RuntimeError`` that is
8585
not a recognized context-length failure.
8686
"""
87-
if isinstance(exc, AgentRunError):
88-
return map_pydantic_agent_run_error(exc, model_id)
89-
if isinstance(exc, APIStatusError):
90-
return handle_known_apistatus_errors(exc, model_id)
91-
if isinstance(exc, APIConnectionError):
92-
return ServiceUnavailableResponse(
93-
backend_name="Llama Stack",
94-
cause=str(exc),
95-
)
96-
if isinstance(exc, RuntimeError) and is_context_length_error(str(exc)):
97-
return PromptTooLongResponse(model=model_id)
98-
return InternalServerErrorResponse.generic()
87+
match exc:
88+
case AgentRunError() as agent_exc:
89+
return map_pydantic_agent_run_error(agent_exc, model_id)
90+
case APIStatusError() as status_exc:
91+
return handle_known_apistatus_errors(status_exc, model_id)
92+
case APIConnectionError() as connection_exc:
93+
return ServiceUnavailableResponse(
94+
backend_name="Llama Stack",
95+
cause=str(connection_exc),
96+
)
97+
case RuntimeError() as runtime_exc if is_context_length_error(str(runtime_exc)):
98+
return PromptTooLongResponse(model=model_id)
99+
case _:
100+
return InternalServerErrorResponse.generic()
99101

100102

101103
def map_pydantic_agent_run_error(
@@ -110,26 +112,26 @@ def map_pydantic_agent_run_error(
110112
Returns:
111113
Structured error response for HTTP or SSE error events.
112114
"""
113-
if isinstance(exc, ContentFilterError):
114-
return InternalServerErrorResponse.query_failed(str(exc))
115-
if isinstance(exc, IncompleteToolCall):
116-
return PromptTooLongResponse(model=model_id)
117-
if isinstance(exc, UnexpectedModelBehavior):
118-
return PromptTooLongResponse(model=model_id)
119-
if isinstance(exc, UsageLimitExceeded):
120-
return QuotaExceededResponse.model(model_id)
121-
if isinstance(exc, ModelHTTPError):
122-
if is_context_length_error(str(exc)):
115+
match exc:
116+
case ContentFilterError() as filter_exc:
117+
return InternalServerErrorResponse.query_failed(str(filter_exc))
118+
case IncompleteToolCall() | UnexpectedModelBehavior():
123119
return PromptTooLongResponse(model=model_id)
124-
if exc.status_code == 429:
120+
case UsageLimitExceeded():
125121
return QuotaExceededResponse.model(model_id)
126-
return InternalServerErrorResponse.generic()
127-
if isinstance(exc, ModelAPIError):
128-
return ServiceUnavailableResponse(
129-
backend_name="Llama Stack",
130-
cause=str(exc),
131-
)
132-
return InternalServerErrorResponse.query_failed(str(exc))
122+
case ModelHTTPError() as http_exc if is_context_length_error(str(http_exc)):
123+
return PromptTooLongResponse(model=model_id)
124+
case ModelHTTPError(status_code=429):
125+
return QuotaExceededResponse.model(model_id)
126+
case ModelHTTPError():
127+
return InternalServerErrorResponse.generic()
128+
case ModelAPIError() as api_exc:
129+
return ServiceUnavailableResponse(
130+
backend_name="Llama Stack",
131+
cause=str(api_exc),
132+
)
133+
case _:
134+
return InternalServerErrorResponse.query_failed(str(exc))
133135

134136

135137
def get_agent_finish_reason(response: ModelResponse) -> AgentFinishReason:

0 commit comments

Comments
 (0)