Current section

Files

Jump to
oapi_open_ai test mocks assistant.ex
Raw

test/mocks/assistant.ex

defmodule OpenAi.Mocks.Assistant do
@moduledoc """
Mocks for Assistant schema
"""
def object(data) do
%{
created_at: 123,
description: "Assistant description",
id: "a_abc1234",
instructions: "Assistant instructions",
metadata: %{"key" => "value"},
model: "gpt-4",
name: "Assistant name",
object: "assistant",
temperature: 0.5,
top_p: 123
}
|> Map.merge(data)
|> Map.merge(%{
response_format: data |> Map.get(:response_format, %{}) |> response_format(),
tool_resources: data |> Map.get(:tool_resources, %{}) |> tool_resources(),
tools:
data
|> Map.get(:tools, [%{type: "file_search"}, %{type: "function"}, %{}])
|> Enum.map(&tool(&1))
})
end
def response_format(data) when data |> is_map do
%{
type: "text"
}
|> Map.merge(data)
end
def response_format(data) do
data
end
def tool_resources(data) do
%{
code_interpreter:
data |> Map.get(:code_interpreter, %{}) |> tool_resources_code_interpreter(),
file_search: data |> Map.get(:file_search, %{}) |> tool_resources_file_search()
}
end
def tool_resources_code_interpreter(data) do
%{
file_ids: data |> Map.get(:file_ids, ["file_id", "file_id"])
}
end
def tool_resources_file_search(data) do
%{
vector_store_ids: data |> Map.get(:vector_store_ids, ["vs_abc123", "vs_abc124"])
}
end
def tool_choice(data) do
%{
function: data |> Map.get(:function, %{}) |> tool_choice_function(),
type: "function"
}
|> Map.merge(data)
end
def tool_choice_function(data) do
%{
name: "tool_choice_function"
}
|> Map.merge(data)
end
def tool(%{type: "file_search"} = data) do
%{
type: "file_search"
}
|> Map.merge(data)
|> Map.merge(%{
file_search: data |> Map.get(:file_search, %{}) |> tool_file_search()
})
end
def tool(%{type: "function"} = data) do
%{
type: "function"
}
|> Map.merge(data)
|> Map.merge(%{
function: data |> Map.get(:function, %{}) |> OpenAi.Mocks.Function.object()
})
end
def tool(data) do
%{
type: "code_interpreter"
}
|> Map.merge(data)
end
def tool_file_search(data) do
%{
max_num_results: 10
}
|> Map.merge(data)
end
def delete_response(data) do
%{
id: "a_abc1234",
object: "assistant.deleted",
deleted: true
}
|> Map.merge(data)
end
def cancel_run(data \\ %{}) do
%HTTPoison.Response{
status_code: 200,
body:
data
|> OpenAi.Mocks.Run.object()
|> Poison.encode!()
}
end
def create(data \\ %{}) do
%HTTPoison.Response{
status_code: 200,
body:
data
|> object()
|> Poison.encode!()
}
end
def message_create(data \\ %{}) do
%HTTPoison.Response{
status_code: 200,
body:
data
|> OpenAi.Mocks.Message.object()
|> Poison.encode!()
}
end
def run_create(data \\ %{}) do
%HTTPoison.Response{
status_code: 200,
body:
data
|> OpenAi.Mocks.Run.object()
|> Poison.encode!()
}
end
def thread_create(data \\ %{}) do
%HTTPoison.Response{
status_code: 200,
body:
data
|> OpenAi.Mocks.Thread.object()
|> Poison.encode!()
}
end
def thread_create_and_run(data \\ %{}) do
%HTTPoison.Response{
status_code: 200,
body:
data
|> OpenAi.Mocks.Run.object()
|> Poison.encode!()
}
end
def delete(data \\ %{}) do
%HTTPoison.Response{
status_code: 200,
body:
data
|> delete_response()
|> Poison.encode!()
}
end
def delete_message(data \\ %{}) do
%HTTPoison.Response{
status_code: 200,
body:
data
|> OpenAi.Mocks.Message.delete_response()
|> Poison.encode!()
}
end
def delete_thread(data \\ %{}) do
%HTTPoison.Response{
status_code: 200,
body:
data
|> OpenAi.Mocks.Thread.delete_response()
|> Poison.encode!()
}
end
def get(data \\ %{}) do
%HTTPoison.Response{
status_code: 200,
body:
data
|> object()
|> Poison.encode!()
}
end
def get_message(data \\ %{}) do
%HTTPoison.Response{
status_code: 200,
body:
data
|> OpenAi.Mocks.Message.object()
|> Poison.encode!()
}
end
def get_run(data \\ %{}) do
%HTTPoison.Response{
status_code: 200,
body:
data
|> OpenAi.Mocks.Run.object()
|> Poison.encode!()
}
end
def get_run_step(data \\ %{}) do
%HTTPoison.Response{
status_code: 200,
body:
data
|> OpenAi.Mocks.Run.step()
|> Poison.encode!()
}
end
def get_thread(data \\ %{}) do
%HTTPoison.Response{
status_code: 200,
body:
data
|> OpenAi.Mocks.Thread.object()
|> Poison.encode!()
}
end
def list(data \\ [], count \\ 2) do
data =
Enum.map(1..count, fn index ->
object(data |> Enum.at(index - 1, %{}))
end)
%HTTPoison.Response{
status_code: 200,
body:
%{
object: "list",
data: data,
first_id: data |> List.first() |> Map.get(:id),
last_id: data |> List.last() |> Map.get(:id),
has_more: false
}
|> Poison.encode!()
}
end
def list_messages(data \\ [], count \\ 2) do
data =
Enum.map(1..count, fn index ->
OpenAi.Mocks.Message.object(data |> Enum.at(index - 1, %{}))
end)
%HTTPoison.Response{
status_code: 200,
body:
%{
object: "list",
data: data,
first_id: data |> List.first() |> Map.get(:id),
last_id: data |> List.last() |> Map.get(:id),
has_more: false
}
|> Poison.encode!()
}
end
def list_run_steps(data \\ [], count \\ 2) do
data =
Enum.map(1..count, fn index ->
OpenAi.Mocks.Run.step(data |> Enum.at(index - 1, %{}))
end)
%HTTPoison.Response{
status_code: 200,
body:
%{
object: "list",
data: data,
first_id: data |> List.first() |> Map.get(:id),
last_id: data |> List.last() |> Map.get(:id),
has_more: false
}
|> Poison.encode!()
}
end
def list_runs(data \\ [], count \\ 2) do
data =
Enum.map(1..count, fn index ->
OpenAi.Mocks.Run.object(data |> Enum.at(index - 1, %{}))
end)
%HTTPoison.Response{
status_code: 200,
body:
%{
object: "list",
data: data,
first_id: data |> List.first() |> Map.get(:id),
last_id: data |> List.last() |> Map.get(:id),
has_more: false
}
|> Poison.encode!()
}
end
def update(data \\ %{}) do
%HTTPoison.Response{
status_code: 200,
body:
data
|> object()
|> Poison.encode!()
}
end
def message_update(data \\ %{}) do
%HTTPoison.Response{
status_code: 200,
body:
data
|> OpenAi.Mocks.Message.object()
|> Poison.encode!()
}
end
def run_update(data \\ %{}) do
%HTTPoison.Response{
status_code: 200,
body:
data
|> OpenAi.Mocks.Run.object()
|> Poison.encode!()
}
end
def thread_update(data \\ %{}) do
%HTTPoison.Response{
status_code: 200,
body:
data
|> OpenAi.Mocks.Thread.object()
|> Poison.encode!()
}
end
def submit_tool_outputs(data \\ %{}) do
%HTTPoison.Response{
status_code: 200,
body:
data
|> OpenAi.Mocks.Run.object()
|> Poison.encode!()
}
end
end