-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>> ).