Packages
openai_ex
0.9.0
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/http.ex
defmodule OpenaiEx.Http do
@moduledoc false
alias OpenaiEx.Http.Finch, as: Client
def post(openai = %OpenaiEx{}, url) do
post(openai, url, json: %{})
end
def post(openai = %OpenaiEx{}, url, multipart: multipart) do
Client.post(openai, url, multipart: multipart) |> handle_response()
end
def post(openai = %OpenaiEx{}, url, json: json) do
Client.post(openai, url, json: json) |> handle_response()
end
def post_no_decode(openai = %OpenaiEx{}, url, json: json) do
Client.post(openai, url, json: json) |> extract_body()
end
def get(openai = %OpenaiEx{}, base_url, params) do
query =
base_url
|> URI.new!()
|> URI.append_query(params |> URI.encode_query())
|> URI.to_string()
openai |> get(query)
end
def get(openai = %OpenaiEx{}, url) do
Client.get(openai, url) |> handle_response()
end
def get_no_decode(openai = %OpenaiEx{}, url) do
Client.get(openai, url) |> extract_body()
end
def delete(openai = %OpenaiEx{}, url) do
Client.delete(openai, url) |> handle_response()
end
def to_multi_part_form_data(req, file_fields) do
mp =
req
|> Map.drop(file_fields)
|> Enum.reduce(Multipart.new(), fn {k, v}, acc ->
acc |> Multipart.add_part(Multipart.Part.text_field(v, k))
end)
req
|> Map.take(file_fields)
|> Enum.reduce(mp, fn {k, v}, acc ->
acc |> Multipart.add_part(to_file_field_part(k, v))
end)
end
defp to_file_field_part(k, v) do
case v do
{path} ->
Multipart.Part.file_field(path, k)
{filename, content} ->
Multipart.Part.file_content_field(filename, content, k, filename: filename)
content ->
Multipart.Part.file_content_field("", content, k, filename: "")
end
end
defp handle_response(response) do
response |> extract_body() |> jsonify()
end
defp extract_body(response) do
case response do
{:ok, response} -> {:ok, response.body}
_ -> response
end
end
defp jsonify(response) do
case response do
{:ok, response} -> {:ok, Jason.decode!(response)}
_ -> response
end
end
def bang_it!(response) do
case response do
{:ok, response} -> response
{:error, error} -> raise error
end
end
end