-module(glean@models@gemini). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]). -define(FILEPATH, "src/glean/models/gemini.gleam"). -export([max_output_tokens/2, temperature/2, top_p/2, top_k/2, seed/2, stop_sequences/2, build/1, pro_3_1/1, flash_3/1, flash_lite_3_1/1, pro_2_5/1, flash_2_5/1, flash_lite_2_5/1, flash_image_3_1/1, pro_image_3/1, pro_3/1, flash_2/1, flash_lite_2/1]). -export_type([gemini/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( " Google Gemini chat models.\n" "\n" " Covers Gemini Pro, Flash, and Flash Lite families.\n" " Supported parameters: max_output_tokens, temperature, top_p, top_k,\n" " seed, stop_sequences.\n" "\n" " No penalty parameters are available.\n" ). -opaque gemini() :: {gemini, binary(), binary(), gleam@option:option(integer()), gleam@option:option(float()), gleam@option:option(float()), gleam@option:option(integer()), gleam@option:option(integer()), gleam@option:option(list(binary())), gleam@option:option({binary(), binary()})}. -file("src/glean/models/gemini.gleam", 117). ?DOC(" Set the maximum number of output tokens.\n"). -spec max_output_tokens(gemini(), integer()) -> gemini(). max_output_tokens(M, N) -> {gemini, 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)}. -file("src/glean/models/gemini.gleam", 122). ?DOC(" Set the sampling temperature (0-2).\n"). -spec temperature(gemini(), float()) -> gemini(). temperature(M, T) -> {gemini, 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)}. -file("src/glean/models/gemini.gleam", 127). ?DOC(" Set the top-p (nucleus sampling) value.\n"). -spec top_p(gemini(), float()) -> gemini(). top_p(M, P) -> {gemini, 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)}. -file("src/glean/models/gemini.gleam", 132). ?DOC(" Set the top-k sampling value.\n"). -spec top_k(gemini(), integer()) -> gemini(). top_k(M, K) -> {gemini, erlang:element(2, M), erlang:element(3, M), erlang:element(4, M), erlang:element(5, M), erlang:element(6, M), {some, K}, erlang:element(8, M), erlang:element(9, M), erlang:element(10, M)}. -file("src/glean/models/gemini.gleam", 137). ?DOC(" Set the random seed for deterministic generation.\n"). -spec seed(gemini(), integer()) -> gemini(). seed(M, S) -> {gemini, 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, S}, erlang:element(9, M), erlang:element(10, M)}. -file("src/glean/models/gemini.gleam", 143). ?DOC( " Set stop sequences — the model will stop generating when it encounters\n" " any of these strings.\n" ). -spec stop_sequences(gemini(), list(binary())) -> gemini(). stop_sequences(M, Stops) -> {gemini, 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, Stops}, erlang:element(10, M)}. -file("src/glean/models/gemini.gleam", 155). ?DOC( " Build a `Model` from this Gemini configuration.\n" "\n" " If the model is deprecated, a warning is printed and the replacement\n" " model ID is used instead.\n" ). -spec build(gemini()) -> glean@model:model(). build(M) -> Actual_model_id = case erlang:element(10, 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@gemini:new(erlang:element(2, M), Actual_model_id), Settings = {model_settings, erlang:element(4, M), erlang:element(5, M), erlang:element(6, M), erlang:element(7, M), erlang:element(9, M), erlang:element(8, M), none, none}, {model, Provider, Settings}. -file("src/glean/models/gemini.gleam", 186). -spec new_gemini(binary(), binary()) -> gemini(). new_gemini(Api_key, Model_id) -> {gemini, Api_key, Model_id, none, none, none, none, none, none, none}. -file("src/glean/models/gemini.gleam", 36). ?DOC(" Gemini 3.1 Pro — latest flagship model.\n"). -spec pro_3_1(binary()) -> gemini(). pro_3_1(Key) -> new_gemini(Key, <<"gemini-3.1-pro-preview"/utf8>>). -file("src/glean/models/gemini.gleam", 41). ?DOC(" Gemini 3 Flash — fast next-gen model.\n"). -spec flash_3(binary()) -> gemini(). flash_3(Key) -> new_gemini(Key, <<"gemini-3-flash-preview"/utf8>>). -file("src/glean/models/gemini.gleam", 46). ?DOC(" Gemini 3.1 Flash Lite — lightweight next-gen model.\n"). -spec flash_lite_3_1(binary()) -> gemini(). flash_lite_3_1(Key) -> new_gemini(Key, <<"gemini-3.1-flash-lite-preview"/utf8>>). -file("src/glean/models/gemini.gleam", 51). ?DOC(" Gemini 2.5 Pro — high-capability model.\n"). -spec pro_2_5(binary()) -> gemini(). pro_2_5(Key) -> new_gemini(Key, <<"gemini-2.5-pro"/utf8>>). -file("src/glean/models/gemini.gleam", 56). ?DOC(" Gemini 2.5 Flash — balanced performance and speed.\n"). -spec flash_2_5(binary()) -> gemini(). flash_2_5(Key) -> new_gemini(Key, <<"gemini-2.5-flash"/utf8>>). -file("src/glean/models/gemini.gleam", 61). ?DOC(" Gemini 2.5 Flash Lite — cost-effective model.\n"). -spec flash_lite_2_5(binary()) -> gemini(). flash_lite_2_5(Key) -> new_gemini(Key, <<"gemini-2.5-flash-lite"/utf8>>). -file("src/glean/models/gemini.gleam", 66). ?DOC(" Gemini 3.1 Flash Image — image generation model.\n"). -spec flash_image_3_1(binary()) -> gemini(). flash_image_3_1(Key) -> new_gemini(Key, <<"gemini-3.1-flash-image-preview"/utf8>>). -file("src/glean/models/gemini.gleam", 71). ?DOC(" Gemini 3 Pro Image — pro image generation model.\n"). -spec pro_image_3(binary()) -> gemini(). pro_image_3(Key) -> new_gemini(Key, <<"gemini-3-pro-image-preview"/utf8>>). -file("src/glean/models/gemini.gleam", 200). -spec new_deprecated_gemini(binary(), binary(), binary(), binary()) -> gemini(). new_deprecated_gemini(Api_key, Model_id, Replacement, Shutdown) -> {gemini, Api_key, Model_id, none, none, none, none, none, none, {some, {Replacement, Shutdown}}}. -file("src/glean/models/gemini.gleam", 81). ?DOC(" Gemini 3 Pro — deprecated, will be replaced by gemini-3.1-pro-preview.\n"). -spec pro_3(binary()) -> gemini(). pro_3(Key) -> new_deprecated_gemini( Key, <<"gemini-3-pro-preview"/utf8>>, <<"gemini-3.1-pro-preview"/utf8>>, <<"Mar 9, 2026"/utf8>> ). -file("src/glean/models/gemini.gleam", 92). ?DOC(" Gemini 2.0 Flash — deprecated, will be replaced by gemini-2.5-flash.\n"). -spec flash_2(binary()) -> gemini(). flash_2(Key) -> new_deprecated_gemini( Key, <<"gemini-2.0-flash"/utf8>>, <<"gemini-2.5-flash"/utf8>>, <<"Jun 1, 2026"/utf8>> ). -file("src/glean/models/gemini.gleam", 103). ?DOC(" Gemini 2.0 Flash Lite — deprecated, will be replaced by gemini-2.5-flash-lite.\n"). -spec flash_lite_2(binary()) -> gemini(). flash_lite_2(Key) -> new_deprecated_gemini( Key, <<"gemini-2.0-flash-lite"/utf8>>, <<"gemini-2.5-flash-lite"/utf8>>, <<"Jun 1, 2026"/utf8>> ).