Packages

fnord

0.9.1

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
| :default
@type speed ::
:smart
| :balanced
| :fast
@type t :: %__MODULE__{
model: String.t(),
context: non_neg_integer,
reasoning: reasoning_level
}
@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
}
end
def smart(), do: gpt5(:minimal)
def balanced(), do: gpt5_mini(:high)
def fast(), do: gpt41_nano()
def coding(), do: o4_mini(:high)
def web_search(), do: gpt_4o_mini_search_preview()
def large_context(), do: large_context(:smart)
def large_context(:smart), do: gpt41()
def large_context(:balanced), do: gpt41_mini()
def large_context(:fast), do: gpt41_nano()
# ----------------------------------------------------------------------------
# OpenAI Models
# ----------------------------------------------------------------------------
def gpt5(reasoning \\ :medium), do: new("gpt-5.2", 400_000, reasoning)
def gpt5_mini(reasoning \\ :medium), do: new("gpt-5-mini", 400_000, reasoning)
def gpt5_nano(reasoning \\ :medium), do: new("gpt-5-nano", 400_000, reasoning)
def gpt41(), do: new("gpt-4.1", 1_000_000, :none)
def gpt41_mini(), do: new("gpt-4.1-mini", 1_000_000, :none)
def gpt41_nano(), do: new("gpt-4.1-nano", 1_000_000, :none)
def o4_mini(reasoning \\ :medium), do: new("o4-mini", 200_000, reasoning)
def gpt_4o_mini_search_preview(), do: new("gpt-4o-mini-search-preview", 128_000, :none)
end