defmodule OpenAI.Files do @moduledoc """ Files are used to upload documents that can be used with features like [Fine-tuning](https://platform.openai.com/docs/api-reference/fine-tunes). https://platform.openai.com/docs/api-reference/files """ alias OpenAI.Client @doc """ Returns a list of files that belong to the user's organization. """ @spec list(Client.t(), Keyword.t()) :: Client.result() def list(client, opts \\ []) do client |> Client.get("/v1/files", opts) |> Client.handle_response(opts) end @type upload_params :: %{ required(:file) => String.t(), required(:purpose) => String.t() } @doc """ Upload a file that contains document(s) to be used across various endpoints/features. Currently, the size of all the files uploaded by one organization can be up to 1 GB. Please contact us if you need to increase the storage limit. """ @spec upload(Client.t(), upload_params(), Keyword.t()) :: Client.result() def upload(client, params, opts \\ []) do client |> Client.post("/v1/files", params, opts) |> Client.handle_response(opts) end @doc """ Delete a file. """ @spec delete(Client.t(), String.t(), Keyword.t()) :: Client.result() def delete(client, id, opts \\ []) do client |> Client.delete("/v1/files/#{id}", opts) |> Client.handle_response(opts) end @doc """ Returns information about a specific file. """ @spec retrieve(Client.t(), String.t(), Keyword.t()) :: Client.result() def retrieve(client, id, opts \\ []) do client |> Client.get("/v1/files/#{id}", opts) |> Client.handle_response(opts) end @doc """ Returns the content of the specified file. """ @spec retrieve_content(Client.t(), String.t(), Keyword.t()) :: Client.result() def retrieve_content(client, id, opts \\ []) do client |> Client.get("/v1/files/#{id}/content", opts) |> Client.handle_response(opts) end end