Current section
Files
Jump to
Current section
Files
src/glean@models@openai.erl
-module(glean@models@openai).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/glean/models/openai.gleam").
-export([max_output_tokens/2, temperature/2, top_p/2, seed/2, presence_penalty/2, frequency_penalty/2, stop_sequences/2, build/1, gpt5_4/1, gpt5_4_pro/1, gpt5_3/1, gpt5_2/1, gpt5_2_pro/1, gpt5_1/1, gpt5/1, gpt5_pro/1, gpt_oss_120b/1, gpt_oss_20b/1, gpt4_1/1, gpt4_1_mini/1, gpt4_1_nano/1, gpt4o/1, gpt4o_mini/1]).
-export_type([gpt/0]).
-if(?OTP_RELEASE >= 27).
-define(MODULEDOC(Str), -moduledoc(Str)).
-define(DOC(Str), -doc(Str)).
-else.
-define(MODULEDOC(Str), -compile([])).
-define(DOC(Str), -compile([])).
-endif.
?MODULEDOC(
" Standard OpenAI GPT models.\n"
"\n"
" Covers GPT-5.x, GPT-OSS, and legacy GPT-4.x models.\n"
" Supported parameters: max_output_tokens, temperature, top_p, seed,\n"
" presence_penalty, frequency_penalty, stop_sequences.\n"
"\n"
" For reasoning models (o-series, gpt-5-mini, gpt-5-nano) see\n"
" `glean/models/openai_reasoning`.\n"
).
-opaque gpt() :: {gpt,
binary(),
binary(),
gleam@option:option(integer()),
gleam@option:option(float()),
gleam@option:option(float()),
gleam@option:option(integer()),
gleam@option:option(float()),
gleam@option:option(float()),
gleam@option:option(list(binary())),
gleam@option:option({binary(), binary()})}.
-file("src/glean/models/openai.gleam", 126).
?DOC(" Set the maximum number of output tokens.\n").
-spec max_output_tokens(gpt(), integer()) -> gpt().
max_output_tokens(M, N) ->
{gpt,
erlang:element(2, M),
erlang:element(3, M),
{some, N},
erlang:element(5, M),
erlang:element(6, M),
erlang:element(7, M),
erlang:element(8, M),
erlang:element(9, M),
erlang:element(10, M),
erlang:element(11, M)}.
-file("src/glean/models/openai.gleam", 131).
?DOC(" Set the sampling temperature.\n").
-spec temperature(gpt(), float()) -> gpt().
temperature(M, T) ->
{gpt,
erlang:element(2, M),
erlang:element(3, M),
erlang:element(4, M),
{some, T},
erlang:element(6, M),
erlang:element(7, M),
erlang:element(8, M),
erlang:element(9, M),
erlang:element(10, M),
erlang:element(11, M)}.
-file("src/glean/models/openai.gleam", 136).
?DOC(" Set the top-p (nucleus sampling) value.\n").
-spec top_p(gpt(), float()) -> gpt().
top_p(M, P) ->
{gpt,
erlang:element(2, M),
erlang:element(3, M),
erlang:element(4, M),
erlang:element(5, M),
{some, P},
erlang:element(7, M),
erlang:element(8, M),
erlang:element(9, M),
erlang:element(10, M),
erlang:element(11, M)}.
-file("src/glean/models/openai.gleam", 141).
?DOC(" Set the random seed for deterministic generation.\n").
-spec seed(gpt(), integer()) -> gpt().
seed(M, S) ->
{gpt,
erlang:element(2, M),
erlang:element(3, M),
erlang:element(4, M),
erlang:element(5, M),
erlang:element(6, M),
{some, S},
erlang:element(8, M),
erlang:element(9, M),
erlang:element(10, M),
erlang:element(11, M)}.
-file("src/glean/models/openai.gleam", 146).
?DOC(" Set the presence penalty.\n").
-spec presence_penalty(gpt(), float()) -> gpt().
presence_penalty(M, Pp) ->
{gpt,
erlang:element(2, M),
erlang:element(3, M),
erlang:element(4, M),
erlang:element(5, M),
erlang:element(6, M),
erlang:element(7, M),
{some, Pp},
erlang:element(9, M),
erlang:element(10, M),
erlang:element(11, M)}.
-file("src/glean/models/openai.gleam", 151).
?DOC(" Set the frequency penalty.\n").
-spec frequency_penalty(gpt(), float()) -> gpt().
frequency_penalty(M, Fp) ->
{gpt,
erlang:element(2, M),
erlang:element(3, M),
erlang:element(4, M),
erlang:element(5, M),
erlang:element(6, M),
erlang:element(7, M),
erlang:element(8, M),
{some, Fp},
erlang:element(10, M),
erlang:element(11, M)}.
-file("src/glean/models/openai.gleam", 157).
?DOC(
" Set stop sequences — the model will stop generating when it encounters\n"
" any of these strings.\n"
).
-spec stop_sequences(gpt(), list(binary())) -> gpt().
stop_sequences(M, Stops) ->
{gpt,
erlang:element(2, M),
erlang:element(3, M),
erlang:element(4, M),
erlang:element(5, M),
erlang:element(6, M),
erlang:element(7, M),
erlang:element(8, M),
erlang:element(9, M),
{some, Stops},
erlang:element(11, M)}.
-file("src/glean/models/openai.gleam", 169).
?DOC(
" Build a `Model` from this GPT configuration.\n"
"\n"
" If the model is deprecated, a warning is printed and the replacement\n"
" model ID is used instead.\n"
).
-spec build(gpt()) -> glean@model:model().
build(M) ->
Actual_model_id = case erlang:element(11, M) of
none ->
erlang:element(3, M);
{some, {Replacement, Shutdown}} ->
glean@model:deprecation_warning(
erlang:element(3, M),
Replacement,
Shutdown
),
Replacement
end,
Provider = glean@providers@openai:new(erlang:element(2, M), Actual_model_id),
Settings = {model_settings,
erlang:element(4, M),
erlang:element(5, M),
erlang:element(6, M),
none,
erlang:element(10, M),
erlang:element(7, M),
erlang:element(8, M),
erlang:element(9, M)},
{model, Provider, Settings}.
-file("src/glean/models/openai.gleam", 200).
-spec new_gpt(binary(), binary()) -> gpt().
new_gpt(Api_key, Model_id) ->
{gpt, Api_key, Model_id, none, none, none, none, none, none, none, none}.
-file("src/glean/models/openai.gleam", 38).
?DOC(" GPT-5.4\n").
-spec gpt5_4(binary()) -> gpt().
gpt5_4(Key) ->
new_gpt(Key, <<"gpt-5.4"/utf8>>).
-file("src/glean/models/openai.gleam", 43).
?DOC(" GPT-5.4 Pro\n").
-spec gpt5_4_pro(binary()) -> gpt().
gpt5_4_pro(Key) ->
new_gpt(Key, <<"gpt-5.4-pro"/utf8>>).
-file("src/glean/models/openai.gleam", 48).
?DOC(" GPT-5.3\n").
-spec gpt5_3(binary()) -> gpt().
gpt5_3(Key) ->
new_gpt(Key, <<"gpt-5.3-chat"/utf8>>).
-file("src/glean/models/openai.gleam", 53).
?DOC(" GPT-5.2\n").
-spec gpt5_2(binary()) -> gpt().
gpt5_2(Key) ->
new_gpt(Key, <<"gpt-5.2"/utf8>>).
-file("src/glean/models/openai.gleam", 58).
?DOC(" GPT-5.2 Pro\n").
-spec gpt5_2_pro(binary()) -> gpt().
gpt5_2_pro(Key) ->
new_gpt(Key, <<"gpt-5.2-pro"/utf8>>).
-file("src/glean/models/openai.gleam", 63).
?DOC(" GPT-5.1\n").
-spec gpt5_1(binary()) -> gpt().
gpt5_1(Key) ->
new_gpt(Key, <<"gpt-5.1"/utf8>>).
-file("src/glean/models/openai.gleam", 68).
?DOC(" GPT-5\n").
-spec gpt5(binary()) -> gpt().
gpt5(Key) ->
new_gpt(Key, <<"gpt-5"/utf8>>).
-file("src/glean/models/openai.gleam", 73).
?DOC(" GPT-5 Pro\n").
-spec gpt5_pro(binary()) -> gpt().
gpt5_pro(Key) ->
new_gpt(Key, <<"gpt-5-pro"/utf8>>).
-file("src/glean/models/openai.gleam", 78).
?DOC(" GPT-OSS 120B — open-source 120 billion parameter model\n").
-spec gpt_oss_120b(binary()) -> gpt().
gpt_oss_120b(Key) ->
new_gpt(Key, <<"gpt-oss-120b"/utf8>>).
-file("src/glean/models/openai.gleam", 83).
?DOC(" GPT-OSS 20B — open-source 20 billion parameter model\n").
-spec gpt_oss_20b(binary()) -> gpt().
gpt_oss_20b(Key) ->
new_gpt(Key, <<"gpt-oss-20b"/utf8>>).
-file("src/glean/models/openai.gleam", 215).
-spec new_deprecated_gpt(binary(), binary(), binary(), binary()) -> gpt().
new_deprecated_gpt(Api_key, Model_id, Replacement, Shutdown) ->
{gpt,
Api_key,
Model_id,
none,
none,
none,
none,
none,
none,
none,
{some, {Replacement, Shutdown}}}.
-file("src/glean/models/openai.gleam", 93).
?DOC(" GPT-4.1 — deprecated, will be replaced by gpt-5 at build time.\n").
-spec gpt4_1(binary()) -> gpt().
gpt4_1(Key) ->
new_deprecated_gpt(
Key,
<<"gpt-4.1"/utf8>>,
<<"gpt-5"/utf8>>,
<<"Feb 16, 2026"/utf8>>
).
-file("src/glean/models/openai.gleam", 99).
?DOC(" GPT-4.1 Mini — deprecated, will be replaced by gpt-5-mini at build time.\n").
-spec gpt4_1_mini(binary()) -> gpt().
gpt4_1_mini(Key) ->
new_deprecated_gpt(
Key,
<<"gpt-4.1-mini"/utf8>>,
<<"gpt-5-mini"/utf8>>,
<<"Feb 16, 2026"/utf8>>
).
-file("src/glean/models/openai.gleam", 105).
?DOC(" GPT-4.1 Nano — deprecated, will be replaced by gpt-5-nano at build time.\n").
-spec gpt4_1_nano(binary()) -> gpt().
gpt4_1_nano(Key) ->
new_deprecated_gpt(
Key,
<<"gpt-4.1-nano"/utf8>>,
<<"gpt-5-nano"/utf8>>,
<<"Feb 16, 2026"/utf8>>
).
-file("src/glean/models/openai.gleam", 111).
?DOC(" GPT-4o — deprecated, will be replaced by gpt-5 at build time.\n").
-spec gpt4o(binary()) -> gpt().
gpt4o(Key) ->
new_deprecated_gpt(
Key,
<<"gpt-4o"/utf8>>,
<<"gpt-5"/utf8>>,
<<"Feb 16, 2026"/utf8>>
).
-file("src/glean/models/openai.gleam", 117).
?DOC(" GPT-4o Mini — deprecated, will be replaced by gpt-5-mini at build time.\n").
-spec gpt4o_mini(binary()) -> gpt().
gpt4o_mini(Key) ->
new_deprecated_gpt(
Key,
<<"gpt-4o-mini"/utf8>>,
<<"gpt-5-mini"/utf8>>,
<<"Feb 16, 2026"/utf8>>
).