Packages

Generative AI Wrapper: access multiple apis through single standardized interface.

Current section

Files

Jump to
genai lib genai_providers open_ai models.ex
Raw

lib/genai_providers/open_ai/models.ex

defmodule GenAI.Provider.OpenAI.Models do
@api_base "https://api.openai.com"
@model_metadata_provider Application.compile_env(:genai, :openai)[:metadata_provider] ||
GenAI.ModelMetadata.DefaultProvider
import GenAI.InferenceProvider.Helpers
# โŸฆ๐“‹ฉ๐“‹บ๐“ˆœ๐“ƒ€โŸง load_metadata :: auto-generated pointer for public function load_metadata
def load_metadata(options \\ nil)
def load_metadata(_) do
:ok
end
# TODO allow local meta data merge
# โŸฆ๐“–๐“‹ฑ๐“ˆ๐“Ž“โŸง list :: auto-generated pointer for public function list
def list(options \\ nil) do
headers = GenAI.Provider.OpenAI.headers(options)
call = api_call(:get, "#{@api_base}/v1/models", headers)
with {:ok, %Finch.Response{status: 200, body: body}} <- call,
{:ok, json} <- Jason.decode(body, keys: :atoms) do
with %{data: models, object: "list"} <- json do
models =
models
|> Enum.map(&model_from_json/1)
{:ok, models}
else
_ -> {:error, {:response, json}}
end
end
end
# โŸฆ๐“€ˆ๐“€ท๐“…ป๐“…˜โŸง model :: auto-generated pointer for public function model
def model(model) do
%GenAI.Model{
model: model,
provider: GenAI.Provider.OpenAI,
encoder: GenAI.Provider.OpenAI.Encoder
}
end
# โŸฆ๐“ˆœ๐“ฏ๐“Žค๐“‚‹โŸง gpt_3_5_turbo :: auto-generated pointer for public function gpt_3_5_turbo
def gpt_3_5_turbo(), do: model("gpt-3.5-turbo")
# โŸฆ๐“†ž๐“…บ๐“‚๐“‡ปโŸง gpt_3_5_turbo_16k :: auto-generated pointer for public function gpt_3_5_turbo_16k
def gpt_3_5_turbo_16k(), do: model("gpt-3.5-turbo-16k")
# โŸฆ๐“„ต๐“ฃ๐“š๐“ƒšโŸง gpt_4 :: auto-generated pointer for public function gpt_4
def gpt_4(), do: model("gpt-4")
# โŸฆ๐“ƒœ๐“€‚๐“ˆ†๐“ˆฉโŸง gpt_4_turbo :: auto-generated pointer for public function gpt_4_turbo
def gpt_4_turbo(), do: model("gpt-4-turbo")
# โŸฆ๐“‡ฐ๐“พ๐“ˆฃ๐“ŒŸโŸง gpt_4_vision :: auto-generated pointer for public function gpt_4_vision
def gpt_4_vision(), do: model("gpt-4-vision")
# โŸฆ๐“Žฐ๐“Žต๐“ˆƒ๐“Ž…โŸง gpt_5_6 :: auto-generated pointer for public function gpt_5_6
def gpt_5_6(), do: model("gpt-5.6")
# โŸฆ๐“ฎ๐“”๐“๐“ˆ–โŸง gpt_5_6_sol :: auto-generated pointer for public function gpt_5_6_sol
def gpt_5_6_sol(), do: model("gpt-5.6-sol")
# โŸฆ๐“บ๐“š๐“‹—๐“‚œโŸง gpt_5_6_terra :: auto-generated pointer for public function gpt_5_6_terra
def gpt_5_6_terra(), do: model("gpt-5.6-terra")
# โŸฆ๐“บ๐“‹ด๐“ˆŒ๐“ƒ—โŸง gpt_5_6_luna :: auto-generated pointer for public function gpt_5_6_luna
def gpt_5_6_luna(), do: model("gpt-5.6-luna")
# โŸฆ๐“‰š๐“ซ๐“ž๐“€„โŸง gpt_5_4 :: auto-generated pointer for public function gpt_5_4
def gpt_5_4(), do: model("gpt-5.4")
# โŸฆ๐“†๐“Žธ๐“Šน๐“†ฝโŸง gpt_5_4_pro :: auto-generated pointer for public function gpt_5_4_pro
def gpt_5_4_pro(), do: model("gpt-5.4-pro")
# โŸฆ๐“‚œ๐“Œ’๐“Ž˜๐“ˆ…โŸง gpt_5_2 :: auto-generated pointer for public function gpt_5_2
def gpt_5_2(), do: model("gpt-5.2")
# โŸฆ๐“†ฒ๐“Šข๐“€ฏ๐“‰ธโŸง gpt_5 :: auto-generated pointer for public function gpt_5
def gpt_5(), do: model("gpt-5")
# โŸฆ๐“‰ซ๐“ˆœ๐“ฌ๐“ˆคโŸง gpt_5_mini :: auto-generated pointer for public function gpt_5_mini
def gpt_5_mini(), do: model("gpt-5-mini")
# โŸฆ๐“ฅ๐“Š—๐“„ฐ๐“ซโŸง gpt_5_nano :: auto-generated pointer for public function gpt_5_nano
def gpt_5_nano(), do: model("gpt-5-nano")
# โŸฆ๐“„ฃ๐“Ž‘๐“‚พ๐“‡‰โŸง gpt_4_1 :: auto-generated pointer for public function gpt_4_1
def gpt_4_1(), do: model("gpt-4.1")
# โŸฆ๐“ฉ๐“๐“ˆผ๐“œโŸง gpt_4_1_mini :: auto-generated pointer for public function gpt_4_1_mini
def gpt_4_1_mini(), do: model("gpt-4.1-mini")
# โŸฆ๐“… ๐“—๐“‰ฅ๐“‹‡โŸง gpt_4_1_nano :: auto-generated pointer for public function gpt_4_1_nano
def gpt_4_1_nano(), do: model("gpt-4.1-nano")
# โŸฆ๐“††๐“‡น๐“Šท๐“ŒชโŸง gpt_4o :: auto-generated pointer for public function gpt_4o
def gpt_4o(), do: model("gpt-4o")
# โŸฆ๐“€ฑ๐“…๐“‡Ÿ๐“‡ โŸง gpt_4o_audio :: auto-generated pointer for public function gpt_4o_audio
def gpt_4o_audio(), do: model("gpt-4o-audio-preview")
# โŸฆ๐“€ฟ๐“ˆ๐“ผ๐“ซโŸง gpt_4o_mini :: auto-generated pointer for public function gpt_4o_mini
def gpt_4o_mini(), do: model("gpt-4o-mini")
# โŸฆ๐“†•๐“‚˜๐“† ๐“ŽตโŸง gpt_4o_mini_audio :: auto-generated pointer for public function gpt_4o_mini_audio
def gpt_4o_mini_audio(), do: model("gpt-4o-mini-audio-preview")
# โŸฆ๐“Œฐ๐“•๐“Šจ๐“Œ‘โŸง gpt_audio_1_5 :: auto-generated pointer for public function gpt_audio_1_5
def gpt_audio_1_5(), do: model("gpt-audio-1.5")
# โŸฆ๐“‹Ÿ๐“†ฃ๐“„ฃ๐“ฎโŸง gpt_4o_realtime :: auto-generated pointer for public function gpt_4o_realtime
def gpt_4o_realtime(), do: model("gpt-4o-realtime-preview")
# โŸฆ๐“†ฎ๐“…น๐“Žฅ๐“‰‘โŸง gpt_4o_mini_realtime :: auto-generated pointer for public function gpt_4o_mini_realtime
def gpt_4o_mini_realtime(), do: model("gpt-4o-mini-realtime-preview")
# โŸฆ๐“‹‹๐“‹Ÿ๐“˜๐“ปโŸง gpt_realtime_2_1 :: auto-generated pointer for public function gpt_realtime_2_1
def gpt_realtime_2_1(), do: model("gpt-realtime-2.1")
# โŸฆ๐“™๐“‡ฝ๐“‚ญ๐“ˆšโŸง gpt_realtime_2_1_mini :: auto-generated pointer for public function gpt_realtime_2_1_mini
def gpt_realtime_2_1_mini(), do: model("gpt-realtime-2.1-mini")
# โŸฆ๐“‡ž๐“ƒ˜๐“‹ฏ๐“ˆ’โŸง gpt_realtime_2 :: auto-generated pointer for public function gpt_realtime_2
def gpt_realtime_2(), do: model("gpt-realtime-2")
# โŸฆ๐“…†๐“†ญ๐“‚ญ๐“›โŸง gpt_realtime_translate :: auto-generated pointer for public function gpt_realtime_translate
def gpt_realtime_translate(), do: model("gpt-realtime-translate")
# โŸฆ๐“›๐“Œ๐“†๐“‚ปโŸง gpt_realtime_1_5 :: auto-generated pointer for public function gpt_realtime_1_5
def gpt_realtime_1_5(), do: model("gpt-realtime-1.5")
# โŸฆ๐“ง๐“ˆน๐“ท๐“‚โŸง gpt_realtime_whisper :: auto-generated pointer for public function gpt_realtime_whisper
def gpt_realtime_whisper(), do: model("gpt-realtime-whisper")
# โŸฆ๐“‰Œ๐“ˆ–๐“ก๐“ปโŸง gpt_4o_mini_tts :: auto-generated pointer for public function gpt_4o_mini_tts
def gpt_4o_mini_tts(), do: model("gpt-4o-mini-tts")
# โŸฆ๐“„บ๐“’๐“ˆณ๐“ŽฆโŸง gtp_4o_mini_tts :: auto-generated pointer for public function gtp_4o_mini_tts
def gtp_4o_mini_tts(), do: gpt_4o_mini_tts()
# โŸฆ๐“ˆ๐“‰‚๐“„๐“ŠฉโŸง gpt_4o_transcribe :: auto-generated pointer for public function gpt_4o_transcribe
def gpt_4o_transcribe(), do: model("gpt-4o-transcribe")
# โŸฆ๐“„๐“‰ถ๐“ˆฆ๐“‰ŽโŸง gpt_4o_mini_transcribe :: auto-generated pointer for public function gpt_4o_mini_transcribe
def gpt_4o_mini_transcribe(), do: model("gpt-4o-mini-transcribe")
# โŸฆ๐“‡‚๐“Œ—๐“‡๐“‹ตโŸง gpt_4o_transcribe_diarize :: auto-generated pointer for public function gpt_4o_transcribe_diarize
def gpt_4o_transcribe_diarize(), do: model("gpt-4o-transcribe-diarize")
# โŸฆ๐“€ช๐“ถ๐“ƒ๐“ŠขโŸง gpt_image_2 :: auto-generated pointer for public function gpt_image_2
def gpt_image_2(), do: model("gpt-image-2")
# โŸฆ๐“‡œ๐“†ƒ๐“ŽŠ๐“‚ฑโŸง chatgpt_4o :: auto-generated pointer for public function chatgpt_4o
def chatgpt_4o(), do: model("chatgpt-4o-latest")
# โŸฆ๐“ƒž๐“‰ฆ๐“Œฎ๐“‰คโŸง gpt_o1 :: auto-generated pointer for public function gpt_o1
def gpt_o1(), do: model("o1")
# โŸฆ๐“‚’๐“Žจ๐“ค๐“„ณโŸง gpt_o1_mini :: auto-generated pointer for public function gpt_o1_mini
def gpt_o1_mini(), do: model("o1-mini")
# โŸฆ๐“‹ธ๐“ข๐“„ญ๐“ฑโŸง gpt_o1_pro :: auto-generated pointer for public function gpt_o1_pro
def gpt_o1_pro(), do: model("o1-pro")
# โŸฆ๐“ˆ“๐“Žฆ๐“‡€๐“ˆ…โŸง gpt_o3 :: auto-generated pointer for public function gpt_o3
def gpt_o3(), do: model("o3")
# โŸฆ๐“‹†๐“Ž•๐“‹–๐“‰โŸง gpt_o3_mini :: auto-generated pointer for public function gpt_o3_mini
def gpt_o3_mini(), do: model("o3-mini")
# โŸฆ๐“–๐“š๐“ถ๐“ŽคโŸง gpt_o4_mini :: auto-generated pointer for public function gpt_o4_mini
def gpt_o4_mini(), do: model("o4-mini")
# =============================================
# Private Methods
# =============================================
# ------------------
# Extract model from api request response.
# @TODO move into Model module
# ------------------
defp model_from_json(json) do
{:ok, entry} =
GenAI.ModelMetadata.ProviderBehaviour.get(
@model_metadata_provider,
GenAI.Provider.OpenAI,
json[:id]
)
entry
end
end