Current section

Files

Jump to
oapi_open_ai lib operations projects.ex
Raw

lib/operations/projects.ex

defmodule OpenAi.Projects do
@moduledoc """
Provides API endpoints related to projects
"""
@default_client OpenAi.Client
@doc """
Archives a project in the organization. Archived projects cannot be used or updated.
"""
@spec archive_project(project_id :: String.t(), opts :: keyword) ::
{:ok, OpenAi.Project.t()} | {:error, OpenAi.Error.error()}
def archive_project(project_id, opts \\ []) do
client = opts[:client] || @default_client
client.request(%{
args: [project_id: project_id],
call: {OpenAi.Projects, :archive_project},
url: "/organization/projects/#{project_id}/archive",
method: :post,
response: [{200, {OpenAi.Project, :t}}],
opts: opts
})
end
@doc """
Create a new project in the organization. Projects can be created and archived, but cannot be deleted.
"""
@spec create_project(body :: OpenAi.Project.CreateRequest.t(), opts :: keyword) ::
{:ok, OpenAi.Project.t()} | {:error, OpenAi.Error.error()}
def create_project(body, opts \\ []) do
client = opts[:client] || @default_client
client.request(%{
args: [body: body],
call: {OpenAi.Projects, :create_project},
url: "/organization/projects",
body: body,
method: :post,
request: [{"application/json", {OpenAi.Project.CreateRequest, :t}}],
response: [{200, {OpenAi.Project, :t}}],
opts: opts
})
end
@doc """
Creates a new service account in the project. This also returns an unredacted API key for the service account.
"""
@spec create_project_service_account(
project_id :: String.t(),
body :: OpenAi.Project.ServiceAccount.CreateRequest.t(),
opts :: keyword
) ::
{:ok, OpenAi.Project.ServiceAccount.CreateResponse.t()} | {:error, OpenAi.Error.error()}
def create_project_service_account(project_id, body, opts \\ []) do
client = opts[:client] || @default_client
client.request(%{
args: [project_id: project_id, body: body],
call: {OpenAi.Projects, :create_project_service_account},
url: "/organization/projects/#{project_id}/service_accounts",
body: body,
method: :post,
request: [{"application/json", {OpenAi.Project.ServiceAccount.CreateRequest, :t}}],
response: [
{200, {OpenAi.Project.ServiceAccount.CreateResponse, :t}},
{400, {OpenAi.ErrorResponse, :t}}
],
opts: opts
})
end
@doc """
Adds a user to the project. Users must already be members of the organization to be added to a project.
"""
@spec create_project_user(
project_id :: String.t(),
body :: OpenAi.Project.User.CreateRequest.t(),
opts :: keyword
) :: {:ok, OpenAi.Project.User.t()} | {:error, OpenAi.Error.error()}
def create_project_user(project_id, body, opts \\ []) do
client = opts[:client] || @default_client
client.request(%{
args: [project_id: project_id, body: body],
call: {OpenAi.Projects, :create_project_user},
url: "/organization/projects/#{project_id}/users",
body: body,
method: :post,
request: [{"application/json", {OpenAi.Project.User.CreateRequest, :t}}],
response: [{200, {OpenAi.Project.User, :t}}, {400, {OpenAi.ErrorResponse, :t}}],
opts: opts
})
end
@doc """
Deletes an API key from the project.
"""
@spec delete_project_api_key(project_id :: String.t(), key_id :: String.t(), opts :: keyword) ::
{:ok, OpenAi.Project.ApiKey.DeleteResponse.t()} | {:error, OpenAi.Error.error()}
def delete_project_api_key(project_id, key_id, opts \\ []) do
client = opts[:client] || @default_client
client.request(%{
args: [project_id: project_id, key_id: key_id],
call: {OpenAi.Projects, :delete_project_api_key},
url: "/organization/projects/#{project_id}/api_keys/#{key_id}",
method: :delete,
response: [
{200, {OpenAi.Project.ApiKey.DeleteResponse, :t}},
{400, {OpenAi.ErrorResponse, :t}}
],
opts: opts
})
end
@doc """
Deletes a service account from the project.
"""
@spec delete_project_service_account(
project_id :: String.t(),
service_account_id :: String.t(),
opts :: keyword
) ::
{:ok, OpenAi.Project.ServiceAccount.DeleteResponse.t()} | {:error, OpenAi.Error.error()}
def delete_project_service_account(project_id, service_account_id, opts \\ []) do
client = opts[:client] || @default_client
client.request(%{
args: [project_id: project_id, service_account_id: service_account_id],
call: {OpenAi.Projects, :delete_project_service_account},
url: "/organization/projects/#{project_id}/service_accounts/#{service_account_id}",
method: :delete,
response: [{200, {OpenAi.Project.ServiceAccount.DeleteResponse, :t}}],
opts: opts
})
end
@doc """
Deletes a user from the project.
"""
@spec delete_project_user(project_id :: String.t(), user_id :: String.t(), opts :: keyword) ::
{:ok, OpenAi.Project.User.DeleteResponse.t()} | {:error, OpenAi.Error.error()}
def delete_project_user(project_id, user_id, opts \\ []) do
client = opts[:client] || @default_client
client.request(%{
args: [project_id: project_id, user_id: user_id],
call: {OpenAi.Projects, :delete_project_user},
url: "/organization/projects/#{project_id}/users/#{user_id}",
method: :delete,
response: [
{200, {OpenAi.Project.User.DeleteResponse, :t}},
{400, {OpenAi.ErrorResponse, :t}}
],
opts: opts
})
end
@doc """
Returns a list of API keys in the project.
## Options
* `limit`: A limit on the number of objects to be returned. Limit can range between 1 and 100, and the default is 20.
* `after`: A cursor for use in pagination. `after` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with obj_foo, your subsequent call can include after=obj_foo in order to fetch the next page of the list.
"""
@spec list_project_api_keys(project_id :: String.t(), opts :: keyword) ::
{:ok, OpenAi.Project.ApiKey.ListResponse.t()} | {:error, OpenAi.Error.error()}
def list_project_api_keys(project_id, opts \\ []) do
client = opts[:client] || @default_client
query = Keyword.take(opts, [:after, :limit])
client.request(%{
args: [project_id: project_id],
call: {OpenAi.Projects, :list_project_api_keys},
url: "/organization/projects/#{project_id}/api_keys",
method: :get,
query: query,
response: [{200, {OpenAi.Project.ApiKey.ListResponse, :t}}],
opts: opts
})
end
@doc """
Returns the rate limits per model for a project.
## Options
* `limit`: A limit on the number of objects to be returned. The default is 100.
* `after`: A cursor for use in pagination. `after` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with obj_foo, your subsequent call can include after=obj_foo in order to fetch the next page of the list.
* `before`: A cursor for use in pagination. `before` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, beginning with obj_foo, your subsequent call can include before=obj_foo in order to fetch the previous page of the list.
"""
@spec list_project_rate_limits(project_id :: String.t(), opts :: keyword) ::
{:ok, OpenAi.Project.RateLimitListResponse.t()} | {:error, OpenAi.Error.error()}
def list_project_rate_limits(project_id, opts \\ []) do
client = opts[:client] || @default_client
query = Keyword.take(opts, [:after, :before, :limit])
client.request(%{
args: [project_id: project_id],
call: {OpenAi.Projects, :list_project_rate_limits},
url: "/organization/projects/#{project_id}/rate_limits",
method: :get,
query: query,
response: [{200, {OpenAi.Project.RateLimitListResponse, :t}}],
opts: opts
})
end
@doc """
Returns a list of service accounts in the project.
## Options
* `limit`: A limit on the number of objects to be returned. Limit can range between 1 and 100, and the default is 20.
* `after`: A cursor for use in pagination. `after` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with obj_foo, your subsequent call can include after=obj_foo in order to fetch the next page of the list.
"""
@spec list_project_service_accounts(project_id :: String.t(), opts :: keyword) ::
{:ok, OpenAi.Project.ServiceAccount.ListResponse.t()} | {:error, OpenAi.Error.error()}
def list_project_service_accounts(project_id, opts \\ []) do
client = opts[:client] || @default_client
query = Keyword.take(opts, [:after, :limit])
client.request(%{
args: [project_id: project_id],
call: {OpenAi.Projects, :list_project_service_accounts},
url: "/organization/projects/#{project_id}/service_accounts",
method: :get,
query: query,
response: [
{200, {OpenAi.Project.ServiceAccount.ListResponse, :t}},
{400, {OpenAi.ErrorResponse, :t}}
],
opts: opts
})
end
@doc """
Returns a list of users in the project.
## Options
* `limit`: A limit on the number of objects to be returned. Limit can range between 1 and 100, and the default is 20.
* `after`: A cursor for use in pagination. `after` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with obj_foo, your subsequent call can include after=obj_foo in order to fetch the next page of the list.
"""
@spec list_project_users(project_id :: String.t(), opts :: keyword) ::
{:ok, OpenAi.Project.User.ListResponse.t()} | {:error, OpenAi.Error.error()}
def list_project_users(project_id, opts \\ []) do
client = opts[:client] || @default_client
query = Keyword.take(opts, [:after, :limit])
client.request(%{
args: [project_id: project_id],
call: {OpenAi.Projects, :list_project_users},
url: "/organization/projects/#{project_id}/users",
method: :get,
query: query,
response: [{200, {OpenAi.Project.User.ListResponse, :t}}, {400, {OpenAi.ErrorResponse, :t}}],
opts: opts
})
end
@doc """
Returns a list of projects.
## Options
* `limit`: A limit on the number of objects to be returned. Limit can range between 1 and 100, and the default is 20.
* `after`: A cursor for use in pagination. `after` is an object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with obj_foo, your subsequent call can include after=obj_foo in order to fetch the next page of the list.
* `include_archived`: If `true` returns all projects including those that have been `archived`. Archived projects are not included by default.
"""
@spec list_projects(opts :: keyword) ::
{:ok, OpenAi.Project.ListResponse.t()} | {:error, OpenAi.Error.error()}
def list_projects(opts \\ []) do
client = opts[:client] || @default_client
query = Keyword.take(opts, [:after, :include_archived, :limit])
client.request(%{
args: [],
call: {OpenAi.Projects, :list_projects},
url: "/organization/projects",
method: :get,
query: query,
response: [{200, {OpenAi.Project.ListResponse, :t}}],
opts: opts
})
end
@doc """
Modifies a project in the organization.
"""
@spec modify_project(
project_id :: String.t(),
body :: OpenAi.Project.UpdateRequest.t(),
opts :: keyword
) :: {:ok, OpenAi.Project.t()} | {:error, OpenAi.Error.error()}
def modify_project(project_id, body, opts \\ []) do
client = opts[:client] || @default_client
client.request(%{
args: [project_id: project_id, body: body],
call: {OpenAi.Projects, :modify_project},
url: "/organization/projects/#{project_id}",
body: body,
method: :post,
request: [{"application/json", {OpenAi.Project.UpdateRequest, :t}}],
response: [{200, {OpenAi.Project, :t}}, {400, {OpenAi.ErrorResponse, :t}}],
opts: opts
})
end
@doc """
Modifies a user's role in the project.
"""
@spec modify_project_user(
project_id :: String.t(),
user_id :: String.t(),
body :: OpenAi.Project.User.UpdateRequest.t(),
opts :: keyword
) :: {:ok, OpenAi.Project.User.t()} | {:error, OpenAi.Error.error()}
def modify_project_user(project_id, user_id, body, opts \\ []) do
client = opts[:client] || @default_client
client.request(%{
args: [project_id: project_id, user_id: user_id, body: body],
call: {OpenAi.Projects, :modify_project_user},
url: "/organization/projects/#{project_id}/users/#{user_id}",
body: body,
method: :post,
request: [{"application/json", {OpenAi.Project.User.UpdateRequest, :t}}],
response: [{200, {OpenAi.Project.User, :t}}, {400, {OpenAi.ErrorResponse, :t}}],
opts: opts
})
end
@doc """
Retrieves a project.
"""
@spec retrieve_project(project_id :: String.t(), opts :: keyword) ::
{:ok, OpenAi.Project.t()} | {:error, OpenAi.Error.error()}
def retrieve_project(project_id, opts \\ []) do
client = opts[:client] || @default_client
client.request(%{
args: [project_id: project_id],
call: {OpenAi.Projects, :retrieve_project},
url: "/organization/projects/#{project_id}",
method: :get,
response: [{200, {OpenAi.Project, :t}}],
opts: opts
})
end
@doc """
Retrieves an API key in the project.
"""
@spec retrieve_project_api_key(project_id :: String.t(), key_id :: String.t(), opts :: keyword) ::
{:ok, OpenAi.Project.ApiKey.t()} | {:error, OpenAi.Error.error()}
def retrieve_project_api_key(project_id, key_id, opts \\ []) do
client = opts[:client] || @default_client
client.request(%{
args: [project_id: project_id, key_id: key_id],
call: {OpenAi.Projects, :retrieve_project_api_key},
url: "/organization/projects/#{project_id}/api_keys/#{key_id}",
method: :get,
response: [{200, {OpenAi.Project.ApiKey, :t}}],
opts: opts
})
end
@doc """
Retrieves a service account in the project.
"""
@spec retrieve_project_service_account(
project_id :: String.t(),
service_account_id :: String.t(),
opts :: keyword
) :: {:ok, OpenAi.Project.ServiceAccount.t()} | {:error, OpenAi.Error.error()}
def retrieve_project_service_account(project_id, service_account_id, opts \\ []) do
client = opts[:client] || @default_client
client.request(%{
args: [project_id: project_id, service_account_id: service_account_id],
call: {OpenAi.Projects, :retrieve_project_service_account},
url: "/organization/projects/#{project_id}/service_accounts/#{service_account_id}",
method: :get,
response: [{200, {OpenAi.Project.ServiceAccount, :t}}],
opts: opts
})
end
@doc """
Retrieves a user in the project.
"""
@spec retrieve_project_user(project_id :: String.t(), user_id :: String.t(), opts :: keyword) ::
{:ok, OpenAi.Project.User.t()} | {:error, OpenAi.Error.error()}
def retrieve_project_user(project_id, user_id, opts \\ []) do
client = opts[:client] || @default_client
client.request(%{
args: [project_id: project_id, user_id: user_id],
call: {OpenAi.Projects, :retrieve_project_user},
url: "/organization/projects/#{project_id}/users/#{user_id}",
method: :get,
response: [{200, {OpenAi.Project.User, :t}}],
opts: opts
})
end
@doc """
Updates a project rate limit.
"""
@spec update_project_rate_limits(
project_id :: String.t(),
rate_limit_id :: String.t(),
body :: OpenAi.Project.RateLimitUpdateRequest.t(),
opts :: keyword
) :: {:ok, OpenAi.Project.RateLimit.t()} | {:error, OpenAi.Error.error()}
def update_project_rate_limits(project_id, rate_limit_id, body, opts \\ []) do
client = opts[:client] || @default_client
client.request(%{
args: [project_id: project_id, rate_limit_id: rate_limit_id, body: body],
call: {OpenAi.Projects, :update_project_rate_limits},
url: "/organization/projects/#{project_id}/rate_limits/#{rate_limit_id}",
body: body,
method: :post,
request: [{"application/json", {OpenAi.Project.RateLimitUpdateRequest, :t}}],
response: [{200, {OpenAi.Project.RateLimit, :t}}, {400, {OpenAi.ErrorResponse, :t}}],
opts: opts
})
end
end