11defmodule HyperLLM.Models do
2+ @ moduledoc """
3+ Determine the provider and model for a given model name.
4+ """
5+
26 @ providers % {
37 "anthropic" => HyperLLM.Provider.Anthropic ,
48 "cloudflare" => HyperLLM.Provider.Cloudflare ,
@@ -18,22 +22,14 @@ defmodule HyperLLM.Models do
1822 {:ok, {HyperLLM.Provider.Anthropic, "claude-3-5-sonnet-20240620"}}
1923 """
2024 def get_provider ( model ) when is_binary ( model ) do
21- case String . split ( model , "/" , parts: 2 ) do
22- [ provider , model ] ->
23- case Map . get ( @ providers , provider ) do
24- nil ->
25- { :error , :invalid_provider }
26-
27- provider ->
28- if provider . has_model? ( model ) do
29- { :ok , { provider , model } }
30- else
31- { :error , :invalid_model }
32- end
33- end
34-
35- _ ->
36- { :error , :invalid_model_format }
25+ with [ provider , model ] <- String . split ( model , "/" , parts: 2 ) ,
26+ provider_module when not is_nil ( provider_module ) <- Map . get ( @ providers , provider ) ,
27+ true <- provider_module . has_model? ( model ) do
28+ { :ok , { provider_module , model } }
29+ else
30+ nil -> { :error , :invalid_provider }
31+ false -> { :error , :invalid_model }
32+ _ -> { :error , :invalid_model_format }
3733 end
3834 end
3935
0 commit comments