Current section
Files
Jump to
Current section
Files
lib/operations/evals.ex
defmodule OpenAi.Evals do
@moduledoc """
Provides API endpoints related to evals
"""
@default_client OpenAi.Client
@doc """
Cancel an ongoing evaluation run.
"""
@spec cancel_eval_run(eval_id :: String.t(), run_id :: String.t(), opts :: keyword) ::
{:ok, OpenAi.Eval.Run.t()} | {:error, OpenAi.Error.error()}
def cancel_eval_run(eval_id, run_id, opts \\ []) do
client = opts[:client] || @default_client
client.request(%{
args: [eval_id: eval_id, run_id: run_id],
call: {OpenAi.Evals, :cancel_eval_run},
url: "/evals/#{eval_id}/runs/#{run_id}",
method: :post,
response: [{200, {OpenAi.Eval.Run, :t}}],
opts: opts
})
end
@doc """
Create the structure of an evaluation that can be used to test a model's performance.
An evaluation is a set of testing criteria and a datasource. After creating an evaluation, you can run it on different models and model parameters. We support several types of graders and datasources.
For more information, see the [Evals guide](/docs/guides/evals).
"""
@spec create_eval(body :: OpenAi.Eval.RequestCreate.t(), opts :: keyword) ::
{:ok, OpenAi.Eval.t()} | {:error, OpenAi.Error.error()}
def create_eval(body, opts \\ []) do
client = opts[:client] || @default_client
client.request(%{
args: [body: body],
call: {OpenAi.Evals, :create_eval},
url: "/evals",
body: body,
method: :post,
request: [{"application/json", {OpenAi.Eval.RequestCreate, :t}}],
response: [{201, {OpenAi.Eval, :t}}],
opts: opts
})
end
@doc """
Create a new evaluation run. This is the endpoint that will kick off grading.
"""
@spec create_eval_run(
eval_id :: String.t(),
body :: OpenAi.Eval.Run.CreateRequest.t(),
opts :: keyword
) :: {:ok, OpenAi.Eval.Run.t()} | {:error, OpenAi.Error.error()}
def create_eval_run(eval_id, body, opts \\ []) do
client = opts[:client] || @default_client
client.request(%{
args: [eval_id: eval_id, body: body],
call: {OpenAi.Evals, :create_eval_run},
url: "/evals/#{eval_id}/runs",
body: body,
method: :post,
request: [{"application/json", {OpenAi.Eval.Run.CreateRequest, :t}}],
response: [{201, {OpenAi.Eval.Run, :t}}, {400, {OpenAi.ResError, :t}}],
opts: opts
})
end
@type delete_eval_200_json_resp :: %{deleted: boolean, eval_id: String.t(), object: String.t()}
@doc """
Delete an evaluation.
"""
@spec delete_eval(eval_id :: String.t(), opts :: keyword) ::
{:ok, OpenAi.Evals.delete_eval_200_json_resp()} | {:error, OpenAi.Error.error()}
def delete_eval(eval_id, opts \\ []) do
client = opts[:client] || @default_client
client.request(%{
args: [eval_id: eval_id],
call: {OpenAi.Evals, :delete_eval},
url: "/evals/#{eval_id}",
method: :delete,
response: [{200, {OpenAi.Evals, :delete_eval_200_json_resp}}, {404, {OpenAi.ResError, :t}}],
opts: opts
})
end
@type delete_eval_run_200_json_resp :: %{
deleted: boolean | nil,
object: String.t() | nil,
run_id: String.t() | nil
}
@doc """
Delete an eval run.
"""
@spec delete_eval_run(eval_id :: String.t(), run_id :: String.t(), opts :: keyword) ::
{:ok, OpenAi.Evals.delete_eval_run_200_json_resp()} | {:error, OpenAi.Error.error()}
def delete_eval_run(eval_id, run_id, opts \\ []) do
client = opts[:client] || @default_client
client.request(%{
args: [eval_id: eval_id, run_id: run_id],
call: {OpenAi.Evals, :delete_eval_run},
url: "/evals/#{eval_id}/runs/#{run_id}",
method: :delete,
response: [
{200, {OpenAi.Evals, :delete_eval_run_200_json_resp}},
{404, {OpenAi.ResError, :t}}
],
opts: opts
})
end
@doc """
Get an evaluation by ID.
"""
@spec get_eval(eval_id :: String.t(), opts :: keyword) ::
{:ok, OpenAi.Eval.t()} | {:error, OpenAi.Error.error()}
def get_eval(eval_id, opts \\ []) do
client = opts[:client] || @default_client
client.request(%{
args: [eval_id: eval_id],
call: {OpenAi.Evals, :get_eval},
url: "/evals/#{eval_id}",
method: :get,
response: [{200, {OpenAi.Eval, :t}}],
opts: opts
})
end
@doc """
Get an evaluation run by ID.
"""
@spec get_eval_run(eval_id :: String.t(), run_id :: String.t(), opts :: keyword) ::
{:ok, OpenAi.Eval.Run.t()} | {:error, OpenAi.Error.error()}
def get_eval_run(eval_id, run_id, opts \\ []) do
client = opts[:client] || @default_client
client.request(%{
args: [eval_id: eval_id, run_id: run_id],
call: {OpenAi.Evals, :get_eval_run},
url: "/evals/#{eval_id}/runs/#{run_id}",
method: :get,
response: [{200, {OpenAi.Eval.Run, :t}}],
opts: opts
})
end
@doc """
Get an evaluation run output item by ID.
"""
@spec get_eval_run_output_item(
eval_id :: String.t(),
run_id :: String.t(),
output_item_id :: String.t(),
opts :: keyword
) :: {:ok, OpenAi.Eval.Run.OutputItem.t()} | {:error, OpenAi.Error.error()}
def get_eval_run_output_item(eval_id, run_id, output_item_id, opts \\ []) do
client = opts[:client] || @default_client
client.request(%{
args: [eval_id: eval_id, run_id: run_id, output_item_id: output_item_id],
call: {OpenAi.Evals, :get_eval_run_output_item},
url: "/evals/#{eval_id}/runs/#{run_id}/output_items/#{output_item_id}",
method: :get,
response: [{200, {OpenAi.Eval.Run.OutputItem, :t}}],
opts: opts
})
end
@doc """
Get a list of output items for an evaluation run.
## Options
* `after`: Identifier for the last output item from the previous pagination request.
* `limit`: Number of output items to retrieve.
* `status`: Filter output items by status. Use `failed` to filter by failed output
items or `pass` to filter by passed output items.
* `order`: Sort order for output items by timestamp. Use `asc` for ascending order or `desc` for descending order. Defaults to `asc`.
"""
@spec get_eval_run_output_items(eval_id :: String.t(), run_id :: String.t(), opts :: keyword) ::
{:ok, OpenAi.Eval.Run.OutputItem.List.t()} | {:error, OpenAi.Error.error()}
def get_eval_run_output_items(eval_id, run_id, opts \\ []) do
client = opts[:client] || @default_client
query = Keyword.take(opts, [:after, :limit, :order, :status])
client.request(%{
args: [eval_id: eval_id, run_id: run_id],
call: {OpenAi.Evals, :get_eval_run_output_items},
url: "/evals/#{eval_id}/runs/#{run_id}/output_items",
method: :get,
query: query,
response: [{200, {OpenAi.Eval.Run.OutputItem.List, :t}}],
opts: opts
})
end
@doc """
Get a list of runs for an evaluation.
## Options
* `after`: Identifier for the last run from the previous pagination request.
* `limit`: Number of runs to retrieve.
* `order`: Sort order for runs by timestamp. Use `asc` for ascending order or `desc` for descending order. Defaults to `asc`.
* `status`: Filter runs by status. One of `queued` | `in_progress` | `failed` | `completed` | `canceled`.
"""
@spec get_eval_runs(eval_id :: String.t(), opts :: keyword) ::
{:ok, OpenAi.Eval.Run.List.t()} | {:error, OpenAi.Error.error()}
def get_eval_runs(eval_id, opts \\ []) do
client = opts[:client] || @default_client
query = Keyword.take(opts, [:after, :limit, :order, :status])
client.request(%{
args: [eval_id: eval_id],
call: {OpenAi.Evals, :get_eval_runs},
url: "/evals/#{eval_id}/runs",
method: :get,
query: query,
response: [{200, {OpenAi.Eval.Run.List, :t}}],
opts: opts
})
end
@doc """
List evaluations for a project.
## Options
* `after`: Identifier for the last eval from the previous pagination request.
* `limit`: Number of evals to retrieve.
* `order`: Sort order for evals by timestamp. Use `asc` for ascending order or `desc` for descending order.
* `order_by`: Evals can be ordered by creation time or last updated time. Use
`created_at` for creation time or `updated_at` for last updated time.
"""
@spec list_evals(opts :: keyword) ::
{:ok, OpenAi.Eval.List.t()} | {:error, OpenAi.Error.error()}
def list_evals(opts \\ []) do
client = opts[:client] || @default_client
query = Keyword.take(opts, [:after, :limit, :order, :order_by])
client.request(%{
args: [],
call: {OpenAi.Evals, :list_evals},
url: "/evals",
method: :get,
query: query,
response: [{200, {OpenAi.Eval.List, :t}}],
opts: opts
})
end
@doc """
Update certain properties of an evaluation.
"""
@spec update_eval(eval_id :: String.t(), body :: map, opts :: keyword) ::
{:ok, OpenAi.Eval.t()} | {:error, OpenAi.Error.error()}
def update_eval(eval_id, body, opts \\ []) do
client = opts[:client] || @default_client
client.request(%{
args: [eval_id: eval_id, body: body],
call: {OpenAi.Evals, :update_eval},
url: "/evals/#{eval_id}",
body: body,
method: :post,
request: [{"application/json", :map}],
response: [{200, {OpenAi.Eval, :t}}],
opts: opts
})
end
@doc false
@spec __fields__(atom) :: keyword
def __fields__(:delete_eval_200_json_resp) do
[deleted: :boolean, eval_id: {:string, :generic}, object: {:string, :generic}]
end
def __fields__(:delete_eval_run_200_json_resp) do
[deleted: :boolean, object: {:string, :generic}, run_id: {:string, :generic}]
end
end