kopia lustrzana https://github.com/gd3kr/BlenderGPT
243 wiersze
6.1 KiB
Python
243 wiersze
6.1 KiB
Python
# WARNING: This interface is considered experimental and may changed in the future without warning.
|
|
from typing import Any, List
|
|
|
|
import openai
|
|
from openai import api_requestor, util
|
|
from openai.api_resources.abstract import APIResource
|
|
|
|
|
|
class Image(APIResource):
|
|
OBJECT_NAME = "images"
|
|
|
|
@classmethod
|
|
def _get_url(cls, action):
|
|
return cls.class_url() + f"/{action}"
|
|
|
|
@classmethod
|
|
def create(
|
|
cls,
|
|
api_key=None,
|
|
api_base=None,
|
|
api_type=None,
|
|
api_version=None,
|
|
organization=None,
|
|
**params,
|
|
):
|
|
requestor = api_requestor.APIRequestor(
|
|
api_key,
|
|
api_base=api_base or openai.api_base,
|
|
api_type=api_type,
|
|
api_version=api_version,
|
|
organization=organization,
|
|
)
|
|
|
|
_, api_version = cls._get_api_type_and_version(api_type, api_version)
|
|
|
|
response, _, api_key = requestor.request(
|
|
"post", cls._get_url("generations"), params
|
|
)
|
|
|
|
return util.convert_to_openai_object(
|
|
response, api_key, api_version, organization
|
|
)
|
|
|
|
@classmethod
|
|
async def acreate(
|
|
cls,
|
|
api_key=None,
|
|
api_base=None,
|
|
api_type=None,
|
|
api_version=None,
|
|
organization=None,
|
|
**params,
|
|
):
|
|
|
|
requestor = api_requestor.APIRequestor(
|
|
api_key,
|
|
api_base=api_base or openai.api_base,
|
|
api_type=api_type,
|
|
api_version=api_version,
|
|
organization=organization,
|
|
)
|
|
|
|
_, api_version = cls._get_api_type_and_version(api_type, api_version)
|
|
|
|
response, _, api_key = await requestor.arequest(
|
|
"post", cls._get_url("generations"), params
|
|
)
|
|
|
|
return util.convert_to_openai_object(
|
|
response, api_key, api_version, organization
|
|
)
|
|
|
|
@classmethod
|
|
def _prepare_create_variation(
|
|
cls,
|
|
image,
|
|
api_key=None,
|
|
api_base=None,
|
|
api_type=None,
|
|
api_version=None,
|
|
organization=None,
|
|
**params,
|
|
):
|
|
requestor = api_requestor.APIRequestor(
|
|
api_key,
|
|
api_base=api_base or openai.api_base,
|
|
api_type=api_type,
|
|
api_version=api_version,
|
|
organization=organization,
|
|
)
|
|
_, api_version = cls._get_api_type_and_version(api_type, api_version)
|
|
|
|
url = cls._get_url("variations")
|
|
|
|
files: List[Any] = []
|
|
for key, value in params.items():
|
|
files.append((key, (None, value)))
|
|
files.append(("image", ("image", image, "application/octet-stream")))
|
|
return requestor, url, files
|
|
|
|
@classmethod
|
|
def create_variation(
|
|
cls,
|
|
image,
|
|
api_key=None,
|
|
api_base=None,
|
|
api_type=None,
|
|
api_version=None,
|
|
organization=None,
|
|
**params,
|
|
):
|
|
requestor, url, files = cls._prepare_create_variation(
|
|
image,
|
|
api_key,
|
|
api_base,
|
|
api_type,
|
|
api_version,
|
|
organization,
|
|
**params,
|
|
)
|
|
|
|
response, _, api_key = requestor.request("post", url, files=files)
|
|
|
|
return util.convert_to_openai_object(
|
|
response, api_key, api_version, organization
|
|
)
|
|
|
|
@classmethod
|
|
async def acreate_variation(
|
|
cls,
|
|
image,
|
|
api_key=None,
|
|
api_base=None,
|
|
api_type=None,
|
|
api_version=None,
|
|
organization=None,
|
|
**params,
|
|
):
|
|
requestor, url, files = cls._prepare_create_variation(
|
|
image,
|
|
api_key,
|
|
api_base,
|
|
api_type,
|
|
api_version,
|
|
organization,
|
|
**params,
|
|
)
|
|
|
|
response, _, api_key = await requestor.arequest("post", url, files=files)
|
|
|
|
return util.convert_to_openai_object(
|
|
response, api_key, api_version, organization
|
|
)
|
|
|
|
@classmethod
|
|
def _prepare_create_edit(
|
|
cls,
|
|
image,
|
|
mask=None,
|
|
api_key=None,
|
|
api_base=None,
|
|
api_type=None,
|
|
api_version=None,
|
|
organization=None,
|
|
**params,
|
|
):
|
|
requestor = api_requestor.APIRequestor(
|
|
api_key,
|
|
api_base=api_base or openai.api_base,
|
|
api_type=api_type,
|
|
api_version=api_version,
|
|
organization=organization,
|
|
)
|
|
_, api_version = cls._get_api_type_and_version(api_type, api_version)
|
|
|
|
url = cls._get_url("edits")
|
|
|
|
files: List[Any] = []
|
|
for key, value in params.items():
|
|
files.append((key, (None, value)))
|
|
files.append(("image", ("image", image, "application/octet-stream")))
|
|
if mask is not None:
|
|
files.append(("mask", ("mask", mask, "application/octet-stream")))
|
|
return requestor, url, files
|
|
|
|
@classmethod
|
|
def create_edit(
|
|
cls,
|
|
image,
|
|
mask=None,
|
|
api_key=None,
|
|
api_base=None,
|
|
api_type=None,
|
|
api_version=None,
|
|
organization=None,
|
|
**params,
|
|
):
|
|
requestor, url, files = cls._prepare_create_edit(
|
|
image,
|
|
mask,
|
|
api_key,
|
|
api_base,
|
|
api_type,
|
|
api_version,
|
|
organization,
|
|
**params,
|
|
)
|
|
|
|
response, _, api_key = requestor.request("post", url, files=files)
|
|
|
|
return util.convert_to_openai_object(
|
|
response, api_key, api_version, organization
|
|
)
|
|
|
|
@classmethod
|
|
async def acreate_edit(
|
|
cls,
|
|
image,
|
|
mask=None,
|
|
api_key=None,
|
|
api_base=None,
|
|
api_type=None,
|
|
api_version=None,
|
|
organization=None,
|
|
**params,
|
|
):
|
|
requestor, url, files = cls._prepare_create_edit(
|
|
image,
|
|
mask,
|
|
api_key,
|
|
api_base,
|
|
api_type,
|
|
api_version,
|
|
organization,
|
|
**params,
|
|
)
|
|
|
|
response, _, api_key = await requestor.arequest("post", url, files=files)
|
|
|
|
return util.convert_to_openai_object(
|
|
response, api_key, api_version, organization
|
|
)
|