Files
music_library/lib/open_ai.ex
T
Claudio Ortolina 7cf9b4e7f8 First pass at uniformed types, specs and docs
- spec public functions (skipping controllers, views, live views and
components)
- use types instead of explanations in docs
- remove redundant docs
- fix typos
2026-03-06 08:33:11 +00:00

36 lines
1.1 KiB
Elixir

defmodule OpenAI do
alias OpenAI.API
@type chat_stream_opts :: [
model: String.t(),
temperature: float(),
instructions: String.t(),
on_chunk: (String.t() -> any())
]
@spec gpt(OpenAI.Completion.t()) :: {:ok, map()} | {:error, term()}
def gpt(completion) do
API.gpt(completion, config())
end
@spec chat_stream([map()], chat_stream_opts()) :: :ok | {:error, String.t()}
def chat_stream(messages, opts \\ []) when is_list(messages) do
model = Keyword.get(opts, :model, "gpt-4.1")
temperature = Keyword.get(opts, :temperature, 0.7)
instructions = Keyword.get(opts, :instructions, "")
on_chunk = Keyword.fetch!(opts, :on_chunk)
case API.chat_stream(messages, instructions, model, temperature, config(), on_chunk) do
:ok -> :ok
{:error, _reason} = error -> error
end
end
@spec embeddings(String.t()) :: {:ok, [float()]} | {:error, term()}
def embeddings(text) do
API.get_embeddings(text, config())
end
defp config, do: OpenAI.Config.resolve(:music_library)
end