Packages
openai_ex
0.9.14
0.9.21
0.9.20
0.9.19
0.9.18
0.9.17
0.9.16
0.9.15
0.9.14
0.9.13
0.9.12
0.9.11
0.9.10
0.9.9
0.9.8
0.9.7
0.9.6
0.9.5
0.9.4
0.9.3
0.9.2
0.9.1
0.9.0
0.8.6
0.8.5
0.8.4
0.8.3
0.8.2
0.8.1
0.8.0
0.7.0
0.6.5
0.6.4
0.6.3
0.6.2
0.6.1
0.6.0
0.5.9
0.5.8
0.5.7
0.5.6
0.5.5
0.5.4
0.5.3
0.5.2
0.5.1
0.5.0
0.4.2
0.4.1
0.4.0
0.3.0
0.2.3
0.2.2
0.2.1
0.2.0
0.1.9
0.1.8
0.1.7
0.1.6
0.1.5
0.1.4
0.1.3
0.1.2
0.1.1
0.1.0
Community maintained Elixir library for OpenAI API
Current section
Files
Jump to
Current section
Files
lib/openai_ex/responses.ex
defmodule OpenaiEx.Responses do
@moduledoc """
This module provides an implementation of the OpenAI Responses API.
The API reference can be found at https://platform.openai.com/docs/api-reference/responses.
"""
alias OpenaiEx.{Http, HttpSse}
@api_fields [
:model,
:background,
:include,
:input,
:instructions,
:max_output_tokens,
:max_tool_calls,
:metadata,
:parallel_tool_calls,
:previous_response_id,
:prompt,
:prompt_cache_key,
:reasoning,
:safety_identifier,
:service_tier,
:store,
:stream_options,
:temperature,
:text,
:tool_choice,
:tools,
:top_logprobs,
:top_p,
:truncation,
:user
]
@query_params [
:include
]
defp ep_url(response_id \\ nil) do
"/responses" <> if(is_nil(response_id), do: "", else: "/#{response_id}")
end
@doc """
Creates a new response.
https://platform.openai.com/docs/api-reference/responses/create
"""
def create!(openai = %OpenaiEx{}, params, stream: true) do
openai |> create(params, stream: true) |> Http.bang_it!()
end
def create(openai = %OpenaiEx{}, params, stream: true) do
request_body = params |> Map.take(@api_fields) |> Map.put(:stream, true)
openai |> HttpSse.post(ep_url(), json: request_body)
end
def create!(openai = %OpenaiEx{}, params) do
openai |> create(params) |> Http.bang_it!()
end
def create(openai = %OpenaiEx{}, params) do
request_body = params |> Map.take(@api_fields)
openai |> Http.post(ep_url(), json: request_body)
end
@doc """
Retrieves a response.
https://platform.openai.com/docs/api-reference/responses/retrieve
"""
def retrieve!(openai = %OpenaiEx{}, opts) when is_list(opts) do
openai |> retrieve(opts) |> Http.bang_it!()
end
def retrieve(openai = %OpenaiEx{}, opts) when is_list(opts) do
response_id = Keyword.fetch!(opts, :response_id)
params = opts |> Keyword.drop([:response_id]) |> Enum.into(%{}) |> Map.take(@query_params)
openai |> Http.get(ep_url(response_id), params)
end
@doc """
Deletes a response.
See https://platform.openai.com/docs/api-reference/responses/delete
"""
def delete!(openai = %OpenaiEx{}, response_id: response_id) do
openai |> delete(response_id: response_id) |> Http.bang_it!()
end
def delete(openai = %OpenaiEx{}, response_id: response_id) do
openai |> Http.delete(ep_url(response_id))
end
@doc """
Lists input items from a response. See https://platform.openai.com/docs/api-reference/responses/input-items
"""
def input_items_list!(openai = %OpenaiEx{}, opts) when is_list(opts) do
openai |> input_items_list(opts) |> Http.bang_it!()
end
def input_items_list(openai = %OpenaiEx{}, opts) when is_list(opts) do
response_id = Keyword.fetch!(opts, :response_id)
p =
opts
|> Keyword.drop([:response_id])
|> Enum.into(%{})
|> Map.take(OpenaiEx.list_query_fields())
openai |> Http.get(ep_url(response_id) <> "/input_items", p)
end
end