Current section
Files
Jump to
Current section
Files
lib/codex/config/option_normalizers.ex
defmodule Codex.Config.OptionNormalizers do
@moduledoc """
Shared validation for reasoning summary, verbosity, and history persistence.
"""
@type tagged_error :: {:error, {atom(), term()}}
@spec normalize_reasoning_summary(term(), atom()) :: {:ok, String.t() | nil} | tagged_error()
def normalize_reasoning_summary(value, error_tag \\ :invalid_model_reasoning_summary)
def normalize_reasoning_summary(nil, _error_tag), do: {:ok, nil}
def normalize_reasoning_summary(value, error_tag) when is_atom(value) do
value
|> Atom.to_string()
|> normalize_reasoning_summary(error_tag)
end
def normalize_reasoning_summary(value, error_tag) when is_binary(value) do
case String.downcase(String.trim(value)) do
"" -> {:ok, nil}
"auto" -> {:ok, "auto"}
"concise" -> {:ok, "concise"}
"detailed" -> {:ok, "detailed"}
"none" -> {:ok, "none"}
other -> {:error, {error_tag, other}}
end
end
def normalize_reasoning_summary(value, error_tag), do: {:error, {error_tag, value}}
@spec normalize_model_verbosity(term(), atom()) :: {:ok, String.t() | nil} | tagged_error()
def normalize_model_verbosity(value, error_tag \\ :invalid_model_verbosity)
def normalize_model_verbosity(nil, _error_tag), do: {:ok, nil}
def normalize_model_verbosity(value, error_tag) when is_atom(value) do
value
|> Atom.to_string()
|> normalize_model_verbosity(error_tag)
end
def normalize_model_verbosity(value, error_tag) when is_binary(value) do
case String.downcase(String.trim(value)) do
"" -> {:ok, nil}
"low" -> {:ok, "low"}
"medium" -> {:ok, "medium"}
"high" -> {:ok, "high"}
other -> {:error, {error_tag, other}}
end
end
def normalize_model_verbosity(value, error_tag), do: {:error, {error_tag, value}}
@spec normalize_history_persistence(term(), atom()) :: {:ok, String.t() | nil} | tagged_error()
def normalize_history_persistence(value, error_tag \\ :invalid_history_persistence)
def normalize_history_persistence(nil, _error_tag), do: {:ok, nil}
def normalize_history_persistence(value, error_tag) when is_atom(value) do
value
|> Atom.to_string()
|> normalize_history_persistence(error_tag)
end
def normalize_history_persistence(value, _error_tag) when is_binary(value) do
case String.trim(value) do
"" -> {:ok, nil}
trimmed -> {:ok, trimmed}
end
end
def normalize_history_persistence(value, error_tag), do: {:error, {error_tag, value}}
end