@@ -234,20 +234,24 @@ defmodule OuterBrain.ContextABI.Failure do
234234 defp owner ( _owner ) , do: { :error , :invalid_failure_owner }
235235
236236 defp infer_family ( reason_code ) do
237- cond do
238- String . contains? ( reason_code , ".context." ) -> { :ok , :context }
239- String . contains? ( reason_code , ".authority." ) -> { :ok , :authority }
240- String . contains? ( reason_code , ".route." ) -> { :ok , :router }
241- String . contains? ( reason_code , ".model_" ) -> { :ok , :model_execution }
242- String . contains? ( reason_code , ".inference." ) -> { :ok , :model_execution }
243- String . contains? ( reason_code , ".eval." ) -> { :ok , :eval }
244- String . contains? ( reason_code , ".memory." ) -> { :ok , :memory }
245- String . contains? ( reason_code , ".optimization." ) -> { :ok , :optimization }
246- String . contains? ( reason_code , ".promotion." ) -> { :ok , :promotion }
247- String . contains? ( reason_code , ".rollback." ) -> { :ok , :promotion }
248- String . contains? ( reason_code , ".evidence." ) -> { :ok , :evidence }
249- String . contains? ( reason_code , ".replay." ) -> { :ok , :evidence }
250- true -> { :error , :unknown_failure_family }
237+ case Enum . find ( @ family_prefixes , fn { prefix , _family } ->
238+ String . starts_with? ( reason_code , prefix )
239+ end ) do
240+ { _prefix , family } -> { :ok , family }
241+ nil -> infer_family_from_fragment ( reason_code )
242+ end
243+ end
244+
245+ defp infer_family_from_fragment ( reason_code ) do
246+ [
247+ { ".model_" , :model_execution } ,
248+ { ".inference." , :model_execution } ,
249+ { ".rollback." , :promotion }
250+ ]
251+ |> Enum . find ( fn { fragment , _family } -> String . contains? ( reason_code , fragment ) end )
252+ |> case do
253+ { _fragment , family } -> { :ok , family }
254+ nil -> { :error , :unknown_failure_family }
251255 end
252256 end
253257
0 commit comments