Packages
fnord
0.9.33
0.9.40
0.9.39
0.9.38
0.9.37
0.9.36
0.9.35
0.9.34
0.9.33
0.9.32
0.9.31
0.9.30
0.9.29
0.9.28
0.9.27
0.9.26
0.9.25
0.9.24
0.9.23
0.9.22
0.9.21
0.9.20
0.9.19
0.9.18
0.9.17
0.9.16
0.9.15
0.9.14
0.9.13
0.9.12
0.9.11
0.9.10
0.9.9
0.9.8
0.9.7
0.9.6
0.9.5
0.9.4
0.9.3
0.9.2
0.9.1
0.9.0
0.8.99
0.8.98
0.8.97
0.8.96
0.8.95
0.8.94
0.8.93
0.8.92
0.8.91
0.8.90
0.8.89
0.8.88
0.8.87
0.8.86
0.8.85
0.8.84
0.8.83
0.8.82
0.8.81
0.8.80
0.8.79
0.8.78
0.8.77
0.8.76
0.8.75
0.8.74
0.8.73
0.8.72
0.8.71
0.8.70
0.8.69
0.8.68
0.8.67
0.8.66
0.8.65
0.8.64
0.8.63
0.8.62
0.8.61
0.8.60
0.8.59
0.8.58
0.8.57
0.8.56
0.8.55
0.8.54
0.8.53
0.8.52
0.8.51
0.8.50
0.8.49
0.8.48
0.8.47
0.8.46
0.8.45
0.8.44
0.8.43
0.8.42
0.8.41
0.8.40
0.8.39
0.8.38
0.8.37
0.8.36
0.8.35
0.8.34
0.8.33
0.8.32
0.8.31
0.8.30
0.8.29
0.8.27
0.8.26
0.8.25
0.8.24
0.8.23
0.8.22
0.8.21
0.8.20
0.8.19
0.8.18
0.8.17
0.8.16
0.8.15
0.8.14
0.8.13
0.8.12
0.8.11
0.8.1
0.8.0
0.7.24
0.7.23
0.7.22
0.7.21
0.7.20
0.7.19
0.7.18
0.7.17
0.7.16
0.7.15
0.7.14
0.7.13
0.7.12
0.7.11
0.7.10
0.7.9
0.7.8
0.7.7
0.7.6
0.7.5
0.7.3
0.7.2
0.7.1
0.7.0
0.6.9
0.6.8
0.6.7
0.6.6
0.6.5
0.6.4
0.6.3
0.6.1
0.6.0
0.5.9
0.5.8
0.5.7
0.5.6
0.5.5
0.5.4
0.5.3
0.5.2
0.5.1
0.5.0
0.4.44
0.4.43
0.4.42
0.4.41
0.4.40
0.4.39
0.4.38
0.4.37
0.4.36
0.4.35
0.4.34
0.4.33
0.4.32
0.4.30
0.4.29
0.4.28
0.4.27
0.4.26
0.4.25
0.4.24
0.4.23
0.4.22
0.4.21
0.4.20
0.4.19
0.4.18
0.4.17
0.4.16
0.4.15
0.4.14
0.4.13
0.4.12
0.4.11
0.4.10
0.4.9
0.4.8
0.4.7
0.4.6
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.3.0
0.2.0
0.1.0
AI code archaeology
Current section
Files
Jump to
Current section
Files
lib/ai/model.ex
defmodule AI.Model do
defstruct [
:model,
:context,
:reasoning,
:verbosity
]
@type reasoning_level ::
:none
| :minimal
| :low
| :medium
| :high
| :default
@type verbosity_level :: :low | :medium | :high
@type speed ::
:smart
| :balanced
| :fast
@type t :: %__MODULE__{
model: String.t(),
context: non_neg_integer,
reasoning: reasoning_level,
verbosity: verbosity_level | nil
}
@spec new(String.t(), non_neg_integer) :: t
@spec new(String.t(), non_neg_integer, reasoning_level) :: t
def new(model, context, reasoning \\ :medium) do
%AI.Model{
model: model,
context: context,
reasoning: reasoning,
verbosity: nil
}
end
@spec with_reasoning(t(), reasoning_level()) :: t()
def with_reasoning(model = %__MODULE__{}, lvl) do
case lvl do
nil -> model
"" -> model
lvl when is_atom(lvl) -> %AI.Model{model | reasoning: lvl}
lvl when is_binary(lvl) -> %AI.Model{model | reasoning: String.to_existing_atom(lvl)}
end
end
@spec with_verbosity(t(), verbosity_level() | binary | nil) :: t()
def with_verbosity(model = %__MODULE__{}, lvl) do
case lvl do
nil -> model
"" -> model
lvl when is_atom(lvl) -> %AI.Model{model | verbosity: lvl}
lvl when is_binary(lvl) -> %AI.Model{model | verbosity: String.to_existing_atom(lvl)}
end
end
@doc """
Return a provider-agnostic "smart" profile.
Delegates to the configured provider implementation.
"""
@spec smart() :: t()
def smart(), do: apply(provider_model_mod(), :smart, [])
@doc """
Return a provider-agnostic "smarter" profile.
Delegates to the configured provider implementation.
"""
@spec smarter() :: t()
def smarter(), do: apply(provider_model_mod(), :smarter, [])
@doc """
Return a provider-agnostic "balanced" profile.
Delegates to the configured provider implementation.
"""
@spec balanced() :: t()
def balanced(), do: apply(provider_model_mod(), :balanced, [])
@doc """
Return a provider-agnostic "fast" profile.
Delegates to the configured provider implementation.
"""
@spec fast() :: t()
def fast(), do: apply(provider_model_mod(), :fast, [])
@doc """
Shortcut for coding; currently equals balanced().
"""
@spec coding() :: t()
def coding(), do: balanced()
@doc """
Provider-agnostic web_search profile.
Delegates to provider implementation.
"""
@spec web_search() :: t()
def web_search(), do: apply(provider_model_mod(), :web_search, [])
@doc """
Provider-agnostic large_context; default tier :smart.
Delegates to provider implementation.
"""
@spec large_context() :: t()
def large_context(), do: large_context(:smart)
@spec large_context(:smart | :balanced | :fast) :: t()
def large_context(tier), do: apply(provider_model_mod(), :large_context, [tier])
# Provider resolution for model profiles
@spec provider_model_mod() :: module
defp provider_model_mod(), do: AI.Provider.module_for(:model)
end