Packages

fnord

0.8.45

AI code archaeology

Current section

Files

Jump to
fnord lib ai model.ex
Raw

lib/ai/model.ex

defmodule AI.Model do
defstruct [
:model,
:context,
:reasoning
]
@type reasoning_level ::
:none
| :minimal
| :low
| :medium
| :high
@type t :: %__MODULE__{
model: String.t(),
context: non_neg_integer,
reasoning: reasoning_level
}
@spec new(String.t(), non_neg_integer) :: t
def new(model, context, reasoning \\ :none) do
%AI.Model{
model: model,
context: context,
reasoning: reasoning
}
end
@spec smart() :: t
def smart() do
# %AI.Model{model: "gpt-4.1", context: 1_000_000, reasoning: :none}
%AI.Model{model: "gpt-5", context: 400_000, reasoning: :medium}
end
@spec balanced() :: t
def balanced() do
# %AI.Model{ model: "gpt-4.1-mini", context: 1_000_000, reasoning: :none }
%AI.Model{model: "gpt-5-mini", context: 400_000, reasoning: :medium}
end
@spec fast() :: t
def fast() do
%AI.Model{model: "gpt-4.1-nano", context: 1_000_000, reasoning: :none}
# %AI.Model{model: "gpt-5-nano", context: 400_000, reasoning: :minimal}
end
@spec large_context() :: t
def large_context() do
%AI.Model{model: "gpt-4.1", context: 1_000_000, reasoning: :none}
end
def large_context(:smart) do
%AI.Model{model: "gpt-4.1", context: 1_000_000, reasoning: :none}
end
def large_context(:balanced) do
%AI.Model{model: "gpt-4.1-mini", context: 1_000_000, reasoning: :none}
end
def large_context(:fast) do
%AI.Model{model: "gpt-4.1-nano", context: 1_000_000, reasoning: :none}
end
@spec reasoning(reasoning_level) :: t
def reasoning(level) do
%AI.Model{model: "o4-mini", context: 200_000, reasoning: level}
end
end