mirror of
https://github.com/openai/openai-go.git
synced 2026-03-31 16:47:11 +09:00
349 lines
13 KiB
Go
349 lines
13 KiB
Go
// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
|
|
|
package openai
|
|
|
|
import (
|
|
"bytes"
|
|
"context"
|
|
"io"
|
|
"mime/multipart"
|
|
"net/http"
|
|
|
|
"github.com/openai/openai-go/internal/apiform"
|
|
"github.com/openai/openai-go/internal/apijson"
|
|
"github.com/openai/openai-go/internal/requestconfig"
|
|
"github.com/openai/openai-go/option"
|
|
"github.com/openai/openai-go/packages/param"
|
|
"github.com/openai/openai-go/packages/resp"
|
|
)
|
|
|
|
// ImageService contains methods and other services that help with interacting with
|
|
// the openai API.
|
|
//
|
|
// Note, unlike clients, this service does not read variables from the environment
|
|
// automatically. You should not instantiate this service directly, and instead use
|
|
// the [NewImageService] method instead.
|
|
type ImageService struct {
|
|
Options []option.RequestOption
|
|
}
|
|
|
|
// NewImageService generates a new service that applies the given options to each
|
|
// request. These options are applied after the parent client's options (if there
|
|
// is one), and before any request-specific options.
|
|
func NewImageService(opts ...option.RequestOption) (r ImageService) {
|
|
r = ImageService{}
|
|
r.Options = opts
|
|
return
|
|
}
|
|
|
|
// Creates a variation of a given image.
|
|
func (r *ImageService) NewVariation(ctx context.Context, body ImageNewVariationParams, opts ...option.RequestOption) (res *ImagesResponse, err error) {
|
|
opts = append(r.Options[:], opts...)
|
|
path := "images/variations"
|
|
err = requestconfig.ExecuteNewRequest(ctx, http.MethodPost, path, body, &res, opts...)
|
|
return
|
|
}
|
|
|
|
// Creates an edited or extended image given an original image and a prompt.
|
|
func (r *ImageService) Edit(ctx context.Context, body ImageEditParams, opts ...option.RequestOption) (res *ImagesResponse, err error) {
|
|
opts = append(r.Options[:], opts...)
|
|
path := "images/edits"
|
|
err = requestconfig.ExecuteNewRequest(ctx, http.MethodPost, path, body, &res, opts...)
|
|
return
|
|
}
|
|
|
|
// Creates an image given a prompt.
|
|
func (r *ImageService) Generate(ctx context.Context, body ImageGenerateParams, opts ...option.RequestOption) (res *ImagesResponse, err error) {
|
|
opts = append(r.Options[:], opts...)
|
|
path := "images/generations"
|
|
err = requestconfig.ExecuteNewRequest(ctx, http.MethodPost, path, body, &res, opts...)
|
|
return
|
|
}
|
|
|
|
// Represents the url or the content of an image generated by the OpenAI API.
|
|
type Image struct {
|
|
// The base64-encoded JSON of the generated image, if `response_format` is
|
|
// `b64_json`.
|
|
B64JSON string `json:"b64_json"`
|
|
// The prompt that was used to generate the image, if there was any revision to the
|
|
// prompt.
|
|
RevisedPrompt string `json:"revised_prompt"`
|
|
// The URL of the generated image, if `response_format` is `url` (default).
|
|
URL string `json:"url"`
|
|
// Metadata for the response, check the presence of optional fields with the
|
|
// [resp.Field.IsPresent] method.
|
|
JSON struct {
|
|
B64JSON resp.Field
|
|
RevisedPrompt resp.Field
|
|
URL resp.Field
|
|
ExtraFields map[string]resp.Field
|
|
raw string
|
|
} `json:"-"`
|
|
}
|
|
|
|
// Returns the unmodified JSON received from the API
|
|
func (r Image) RawJSON() string { return r.JSON.raw }
|
|
func (r *Image) UnmarshalJSON(data []byte) error {
|
|
return apijson.UnmarshalRoot(data, r)
|
|
}
|
|
|
|
type ImageModel = string
|
|
|
|
const (
|
|
ImageModelDallE2 ImageModel = "dall-e-2"
|
|
ImageModelDallE3 ImageModel = "dall-e-3"
|
|
)
|
|
|
|
type ImagesResponse struct {
|
|
Created int64 `json:"created,required"`
|
|
Data []Image `json:"data,required"`
|
|
// Metadata for the response, check the presence of optional fields with the
|
|
// [resp.Field.IsPresent] method.
|
|
JSON struct {
|
|
Created resp.Field
|
|
Data resp.Field
|
|
ExtraFields map[string]resp.Field
|
|
raw string
|
|
} `json:"-"`
|
|
}
|
|
|
|
// Returns the unmodified JSON received from the API
|
|
func (r ImagesResponse) RawJSON() string { return r.JSON.raw }
|
|
func (r *ImagesResponse) UnmarshalJSON(data []byte) error {
|
|
return apijson.UnmarshalRoot(data, r)
|
|
}
|
|
|
|
type ImageNewVariationParams struct {
|
|
// The image to use as the basis for the variation(s). Must be a valid PNG file,
|
|
// less than 4MB, and square.
|
|
Image io.Reader `json:"image,required" format:"binary"`
|
|
// The number of images to generate. Must be between 1 and 10. For `dall-e-3`, only
|
|
// `n=1` is supported.
|
|
N param.Opt[int64] `json:"n,omitzero"`
|
|
// A unique identifier representing your end-user, which can help OpenAI to monitor
|
|
// and detect abuse.
|
|
// [Learn more](https://platform.openai.com/docs/guides/safety-best-practices#end-user-ids).
|
|
User param.Opt[string] `json:"user,omitzero"`
|
|
// The model to use for image generation. Only `dall-e-2` is supported at this
|
|
// time.
|
|
Model ImageModel `json:"model,omitzero"`
|
|
// The format in which the generated images are returned. Must be one of `url` or
|
|
// `b64_json`. URLs are only valid for 60 minutes after the image has been
|
|
// generated.
|
|
//
|
|
// Any of "url", "b64_json".
|
|
ResponseFormat ImageNewVariationParamsResponseFormat `json:"response_format,omitzero"`
|
|
// The size of the generated images. Must be one of `256x256`, `512x512`, or
|
|
// `1024x1024`.
|
|
//
|
|
// Any of "256x256", "512x512", "1024x1024".
|
|
Size ImageNewVariationParamsSize `json:"size,omitzero"`
|
|
paramObj
|
|
}
|
|
|
|
// IsPresent returns true if the field's value is not omitted and not the JSON
|
|
// "null". To check if this field is omitted, use [param.IsOmitted].
|
|
func (f ImageNewVariationParams) IsPresent() bool { return !param.IsOmitted(f) && !f.IsNull() }
|
|
|
|
func (r ImageNewVariationParams) MarshalMultipart() (data []byte, contentType string, err error) {
|
|
buf := bytes.NewBuffer(nil)
|
|
writer := multipart.NewWriter(buf)
|
|
err = apiform.MarshalRoot(r, writer)
|
|
if err != nil {
|
|
writer.Close()
|
|
return nil, "", err
|
|
}
|
|
err = writer.Close()
|
|
if err != nil {
|
|
return nil, "", err
|
|
}
|
|
return buf.Bytes(), writer.FormDataContentType(), nil
|
|
}
|
|
|
|
// The format in which the generated images are returned. Must be one of `url` or
|
|
// `b64_json`. URLs are only valid for 60 minutes after the image has been
|
|
// generated.
|
|
type ImageNewVariationParamsResponseFormat string
|
|
|
|
const (
|
|
ImageNewVariationParamsResponseFormatURL ImageNewVariationParamsResponseFormat = "url"
|
|
ImageNewVariationParamsResponseFormatB64JSON ImageNewVariationParamsResponseFormat = "b64_json"
|
|
)
|
|
|
|
// The size of the generated images. Must be one of `256x256`, `512x512`, or
|
|
// `1024x1024`.
|
|
type ImageNewVariationParamsSize string
|
|
|
|
const (
|
|
ImageNewVariationParamsSize256x256 ImageNewVariationParamsSize = "256x256"
|
|
ImageNewVariationParamsSize512x512 ImageNewVariationParamsSize = "512x512"
|
|
ImageNewVariationParamsSize1024x1024 ImageNewVariationParamsSize = "1024x1024"
|
|
)
|
|
|
|
type ImageEditParams struct {
|
|
// The image to edit. Must be a valid PNG file, less than 4MB, and square. If mask
|
|
// is not provided, image must have transparency, which will be used as the mask.
|
|
Image io.Reader `json:"image,required" format:"binary"`
|
|
// A text description of the desired image(s). The maximum length is 1000
|
|
// characters.
|
|
Prompt string `json:"prompt,required"`
|
|
// The number of images to generate. Must be between 1 and 10.
|
|
N param.Opt[int64] `json:"n,omitzero"`
|
|
// A unique identifier representing your end-user, which can help OpenAI to monitor
|
|
// and detect abuse.
|
|
// [Learn more](https://platform.openai.com/docs/guides/safety-best-practices#end-user-ids).
|
|
User param.Opt[string] `json:"user,omitzero"`
|
|
// The model to use for image generation. Only `dall-e-2` is supported at this
|
|
// time.
|
|
Model ImageModel `json:"model,omitzero"`
|
|
// The format in which the generated images are returned. Must be one of `url` or
|
|
// `b64_json`. URLs are only valid for 60 minutes after the image has been
|
|
// generated.
|
|
//
|
|
// Any of "url", "b64_json".
|
|
ResponseFormat ImageEditParamsResponseFormat `json:"response_format,omitzero"`
|
|
// The size of the generated images. Must be one of `256x256`, `512x512`, or
|
|
// `1024x1024`.
|
|
//
|
|
// Any of "256x256", "512x512", "1024x1024".
|
|
Size ImageEditParamsSize `json:"size,omitzero"`
|
|
// An additional image whose fully transparent areas (e.g. where alpha is zero)
|
|
// indicate where `image` should be edited. Must be a valid PNG file, less than
|
|
// 4MB, and have the same dimensions as `image`.
|
|
Mask io.Reader `json:"mask" format:"binary"`
|
|
paramObj
|
|
}
|
|
|
|
// IsPresent returns true if the field's value is not omitted and not the JSON
|
|
// "null". To check if this field is omitted, use [param.IsOmitted].
|
|
func (f ImageEditParams) IsPresent() bool { return !param.IsOmitted(f) && !f.IsNull() }
|
|
|
|
func (r ImageEditParams) MarshalMultipart() (data []byte, contentType string, err error) {
|
|
buf := bytes.NewBuffer(nil)
|
|
writer := multipart.NewWriter(buf)
|
|
err = apiform.MarshalRoot(r, writer)
|
|
if err != nil {
|
|
writer.Close()
|
|
return nil, "", err
|
|
}
|
|
err = writer.Close()
|
|
if err != nil {
|
|
return nil, "", err
|
|
}
|
|
return buf.Bytes(), writer.FormDataContentType(), nil
|
|
}
|
|
|
|
// The format in which the generated images are returned. Must be one of `url` or
|
|
// `b64_json`. URLs are only valid for 60 minutes after the image has been
|
|
// generated.
|
|
type ImageEditParamsResponseFormat string
|
|
|
|
const (
|
|
ImageEditParamsResponseFormatURL ImageEditParamsResponseFormat = "url"
|
|
ImageEditParamsResponseFormatB64JSON ImageEditParamsResponseFormat = "b64_json"
|
|
)
|
|
|
|
// The size of the generated images. Must be one of `256x256`, `512x512`, or
|
|
// `1024x1024`.
|
|
type ImageEditParamsSize string
|
|
|
|
const (
|
|
ImageEditParamsSize256x256 ImageEditParamsSize = "256x256"
|
|
ImageEditParamsSize512x512 ImageEditParamsSize = "512x512"
|
|
ImageEditParamsSize1024x1024 ImageEditParamsSize = "1024x1024"
|
|
)
|
|
|
|
type ImageGenerateParams struct {
|
|
// A text description of the desired image(s). The maximum length is 1000
|
|
// characters for `dall-e-2` and 4000 characters for `dall-e-3`.
|
|
Prompt string `json:"prompt,required"`
|
|
// The number of images to generate. Must be between 1 and 10. For `dall-e-3`, only
|
|
// `n=1` is supported.
|
|
N param.Opt[int64] `json:"n,omitzero"`
|
|
// A unique identifier representing your end-user, which can help OpenAI to monitor
|
|
// and detect abuse.
|
|
// [Learn more](https://platform.openai.com/docs/guides/safety-best-practices#end-user-ids).
|
|
User param.Opt[string] `json:"user,omitzero"`
|
|
// The model to use for image generation.
|
|
Model ImageModel `json:"model,omitzero"`
|
|
// The format in which the generated images are returned. Must be one of `url` or
|
|
// `b64_json`. URLs are only valid for 60 minutes after the image has been
|
|
// generated.
|
|
//
|
|
// Any of "url", "b64_json".
|
|
ResponseFormat ImageGenerateParamsResponseFormat `json:"response_format,omitzero"`
|
|
// The size of the generated images. Must be one of `256x256`, `512x512`, or
|
|
// `1024x1024` for `dall-e-2`. Must be one of `1024x1024`, `1792x1024`, or
|
|
// `1024x1792` for `dall-e-3` models.
|
|
//
|
|
// Any of "256x256", "512x512", "1024x1024", "1792x1024", "1024x1792".
|
|
Size ImageGenerateParamsSize `json:"size,omitzero"`
|
|
// The style of the generated images. Must be one of `vivid` or `natural`. Vivid
|
|
// causes the model to lean towards generating hyper-real and dramatic images.
|
|
// Natural causes the model to produce more natural, less hyper-real looking
|
|
// images. This param is only supported for `dall-e-3`.
|
|
//
|
|
// Any of "vivid", "natural".
|
|
Style ImageGenerateParamsStyle `json:"style,omitzero"`
|
|
// The quality of the image that will be generated. `hd` creates images with finer
|
|
// details and greater consistency across the image. This param is only supported
|
|
// for `dall-e-3`.
|
|
//
|
|
// Any of "standard", "hd".
|
|
Quality ImageGenerateParamsQuality `json:"quality,omitzero"`
|
|
paramObj
|
|
}
|
|
|
|
// IsPresent returns true if the field's value is not omitted and not the JSON
|
|
// "null". To check if this field is omitted, use [param.IsOmitted].
|
|
func (f ImageGenerateParams) IsPresent() bool { return !param.IsOmitted(f) && !f.IsNull() }
|
|
|
|
func (r ImageGenerateParams) MarshalJSON() (data []byte, err error) {
|
|
type shadow ImageGenerateParams
|
|
return param.MarshalObject(r, (*shadow)(&r))
|
|
}
|
|
|
|
// The quality of the image that will be generated. `hd` creates images with finer
|
|
// details and greater consistency across the image. This param is only supported
|
|
// for `dall-e-3`.
|
|
type ImageGenerateParamsQuality string
|
|
|
|
const (
|
|
ImageGenerateParamsQualityStandard ImageGenerateParamsQuality = "standard"
|
|
ImageGenerateParamsQualityHD ImageGenerateParamsQuality = "hd"
|
|
)
|
|
|
|
// The format in which the generated images are returned. Must be one of `url` or
|
|
// `b64_json`. URLs are only valid for 60 minutes after the image has been
|
|
// generated.
|
|
type ImageGenerateParamsResponseFormat string
|
|
|
|
const (
|
|
ImageGenerateParamsResponseFormatURL ImageGenerateParamsResponseFormat = "url"
|
|
ImageGenerateParamsResponseFormatB64JSON ImageGenerateParamsResponseFormat = "b64_json"
|
|
)
|
|
|
|
// The size of the generated images. Must be one of `256x256`, `512x512`, or
|
|
// `1024x1024` for `dall-e-2`. Must be one of `1024x1024`, `1792x1024`, or
|
|
// `1024x1792` for `dall-e-3` models.
|
|
type ImageGenerateParamsSize string
|
|
|
|
const (
|
|
ImageGenerateParamsSize256x256 ImageGenerateParamsSize = "256x256"
|
|
ImageGenerateParamsSize512x512 ImageGenerateParamsSize = "512x512"
|
|
ImageGenerateParamsSize1024x1024 ImageGenerateParamsSize = "1024x1024"
|
|
ImageGenerateParamsSize1792x1024 ImageGenerateParamsSize = "1792x1024"
|
|
ImageGenerateParamsSize1024x1792 ImageGenerateParamsSize = "1024x1792"
|
|
)
|
|
|
|
// The style of the generated images. Must be one of `vivid` or `natural`. Vivid
|
|
// causes the model to lean towards generating hyper-real and dramatic images.
|
|
// Natural causes the model to produce more natural, less hyper-real looking
|
|
// images. This param is only supported for `dall-e-3`.
|
|
type ImageGenerateParamsStyle string
|
|
|
|
const (
|
|
ImageGenerateParamsStyleVivid ImageGenerateParamsStyle = "vivid"
|
|
ImageGenerateParamsStyleNatural ImageGenerateParamsStyle = "natural"
|
|
)
|