betathreadmessage.go (1,101 lines of code) (raw):
// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
package openai
import (
"context"
"encoding/json"
"errors"
"fmt"
"net/http"
"net/url"
"reflect"
"github.com/openai/openai-go/internal/apijson"
"github.com/openai/openai-go/internal/apiquery"
"github.com/openai/openai-go/internal/requestconfig"
"github.com/openai/openai-go/option"
"github.com/openai/openai-go/packages/pagination"
"github.com/openai/openai-go/packages/param"
"github.com/openai/openai-go/packages/resp"
"github.com/openai/openai-go/shared"
"github.com/openai/openai-go/shared/constant"
"github.com/tidwall/gjson"
)
// BetaThreadMessageService 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 [NewBetaThreadMessageService] method instead.
type BetaThreadMessageService struct {
Options []option.RequestOption
}
// NewBetaThreadMessageService 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 NewBetaThreadMessageService(opts ...option.RequestOption) (r BetaThreadMessageService) {
r = BetaThreadMessageService{}
r.Options = opts
return
}
// Create a message.
func (r *BetaThreadMessageService) New(ctx context.Context, threadID string, body BetaThreadMessageNewParams, opts ...option.RequestOption) (res *Message, err error) {
opts = append(r.Options[:], opts...)
opts = append([]option.RequestOption{option.WithHeader("OpenAI-Beta", "assistants=v2")}, opts...)
if threadID == "" {
err = errors.New("missing required thread_id parameter")
return
}
path := fmt.Sprintf("threads/%s/messages", threadID)
err = requestconfig.ExecuteNewRequest(ctx, http.MethodPost, path, body, &res, opts...)
return
}
// Retrieve a message.
func (r *BetaThreadMessageService) Get(ctx context.Context, threadID string, messageID string, opts ...option.RequestOption) (res *Message, err error) {
opts = append(r.Options[:], opts...)
opts = append([]option.RequestOption{option.WithHeader("OpenAI-Beta", "assistants=v2")}, opts...)
if threadID == "" {
err = errors.New("missing required thread_id parameter")
return
}
if messageID == "" {
err = errors.New("missing required message_id parameter")
return
}
path := fmt.Sprintf("threads/%s/messages/%s", threadID, messageID)
err = requestconfig.ExecuteNewRequest(ctx, http.MethodGet, path, nil, &res, opts...)
return
}
// Modifies a message.
func (r *BetaThreadMessageService) Update(ctx context.Context, threadID string, messageID string, body BetaThreadMessageUpdateParams, opts ...option.RequestOption) (res *Message, err error) {
opts = append(r.Options[:], opts...)
opts = append([]option.RequestOption{option.WithHeader("OpenAI-Beta", "assistants=v2")}, opts...)
if threadID == "" {
err = errors.New("missing required thread_id parameter")
return
}
if messageID == "" {
err = errors.New("missing required message_id parameter")
return
}
path := fmt.Sprintf("threads/%s/messages/%s", threadID, messageID)
err = requestconfig.ExecuteNewRequest(ctx, http.MethodPost, path, body, &res, opts...)
return
}
// Returns a list of messages for a given thread.
func (r *BetaThreadMessageService) List(ctx context.Context, threadID string, query BetaThreadMessageListParams, opts ...option.RequestOption) (res *pagination.CursorPage[Message], err error) {
var raw *http.Response
opts = append(r.Options[:], opts...)
opts = append([]option.RequestOption{option.WithHeader("OpenAI-Beta", "assistants=v2"), option.WithResponseInto(&raw)}, opts...)
if threadID == "" {
err = errors.New("missing required thread_id parameter")
return
}
path := fmt.Sprintf("threads/%s/messages", threadID)
cfg, err := requestconfig.NewRequestConfig(ctx, http.MethodGet, path, query, &res, opts...)
if err != nil {
return nil, err
}
err = cfg.Execute()
if err != nil {
return nil, err
}
res.SetPageConfig(cfg, raw)
return res, nil
}
// Returns a list of messages for a given thread.
func (r *BetaThreadMessageService) ListAutoPaging(ctx context.Context, threadID string, query BetaThreadMessageListParams, opts ...option.RequestOption) *pagination.CursorPageAutoPager[Message] {
return pagination.NewCursorPageAutoPager(r.List(ctx, threadID, query, opts...))
}
// Deletes a message.
func (r *BetaThreadMessageService) Delete(ctx context.Context, threadID string, messageID string, opts ...option.RequestOption) (res *MessageDeleted, err error) {
opts = append(r.Options[:], opts...)
opts = append([]option.RequestOption{option.WithHeader("OpenAI-Beta", "assistants=v2")}, opts...)
if threadID == "" {
err = errors.New("missing required thread_id parameter")
return
}
if messageID == "" {
err = errors.New("missing required message_id parameter")
return
}
path := fmt.Sprintf("threads/%s/messages/%s", threadID, messageID)
err = requestconfig.ExecuteNewRequest(ctx, http.MethodDelete, path, nil, &res, opts...)
return
}
// AnnotationUnion contains all possible properties and values from
// [FileCitationAnnotation], [FilePathAnnotation].
//
// Use the [AnnotationUnion.AsAny] method to switch on the variant.
//
// Use the methods beginning with 'As' to cast the union to one of its variants.
type AnnotationUnion struct {
EndIndex int64 `json:"end_index"`
// This field is from variant [FileCitationAnnotation].
FileCitation FileCitationAnnotationFileCitation `json:"file_citation"`
StartIndex int64 `json:"start_index"`
Text string `json:"text"`
// Any of "file_citation", "file_path".
Type string `json:"type"`
// This field is from variant [FilePathAnnotation].
FilePath FilePathAnnotationFilePath `json:"file_path"`
JSON struct {
EndIndex resp.Field
FileCitation resp.Field
StartIndex resp.Field
Text resp.Field
Type resp.Field
FilePath resp.Field
raw string
} `json:"-"`
}
// anyAnnotation is implemented by each variant of [AnnotationUnion] to add type
// safety for the return type of [AnnotationUnion.AsAny]
type anyAnnotation interface {
implAnnotationUnion()
}
func (FileCitationAnnotation) implAnnotationUnion() {}
func (FilePathAnnotation) implAnnotationUnion() {}
// Use the following switch statement to find the correct variant
//
// switch variant := AnnotationUnion.AsAny().(type) {
// case FileCitationAnnotation:
// case FilePathAnnotation:
// default:
// fmt.Errorf("no variant present")
// }
func (u AnnotationUnion) AsAny() anyAnnotation {
switch u.Type {
case "file_citation":
return u.AsFileCitation()
case "file_path":
return u.AsFilePath()
}
return nil
}
func (u AnnotationUnion) AsFileCitation() (v FileCitationAnnotation) {
apijson.UnmarshalRoot(json.RawMessage(u.JSON.raw), &v)
return
}
func (u AnnotationUnion) AsFilePath() (v FilePathAnnotation) {
apijson.UnmarshalRoot(json.RawMessage(u.JSON.raw), &v)
return
}
// Returns the unmodified JSON received from the API
func (u AnnotationUnion) RawJSON() string { return u.JSON.raw }
func (r *AnnotationUnion) UnmarshalJSON(data []byte) error {
return apijson.UnmarshalRoot(data, r)
}
// AnnotationDeltaUnion contains all possible properties and values from
// [FileCitationDeltaAnnotation], [FilePathDeltaAnnotation].
//
// Use the [AnnotationDeltaUnion.AsAny] method to switch on the variant.
//
// Use the methods beginning with 'As' to cast the union to one of its variants.
type AnnotationDeltaUnion struct {
Index int64 `json:"index"`
// Any of "file_citation", "file_path".
Type string `json:"type"`
EndIndex int64 `json:"end_index"`
// This field is from variant [FileCitationDeltaAnnotation].
FileCitation FileCitationDeltaAnnotationFileCitation `json:"file_citation"`
StartIndex int64 `json:"start_index"`
Text string `json:"text"`
// This field is from variant [FilePathDeltaAnnotation].
FilePath FilePathDeltaAnnotationFilePath `json:"file_path"`
JSON struct {
Index resp.Field
Type resp.Field
EndIndex resp.Field
FileCitation resp.Field
StartIndex resp.Field
Text resp.Field
FilePath resp.Field
raw string
} `json:"-"`
}
// anyAnnotationDelta is implemented by each variant of [AnnotationDeltaUnion] to
// add type safety for the return type of [AnnotationDeltaUnion.AsAny]
type anyAnnotationDelta interface {
implAnnotationDeltaUnion()
}
func (FileCitationDeltaAnnotation) implAnnotationDeltaUnion() {}
func (FilePathDeltaAnnotation) implAnnotationDeltaUnion() {}
// Use the following switch statement to find the correct variant
//
// switch variant := AnnotationDeltaUnion.AsAny().(type) {
// case FileCitationDeltaAnnotation:
// case FilePathDeltaAnnotation:
// default:
// fmt.Errorf("no variant present")
// }
func (u AnnotationDeltaUnion) AsAny() anyAnnotationDelta {
switch u.Type {
case "file_citation":
return u.AsFileCitation()
case "file_path":
return u.AsFilePath()
}
return nil
}
func (u AnnotationDeltaUnion) AsFileCitation() (v FileCitationDeltaAnnotation) {
apijson.UnmarshalRoot(json.RawMessage(u.JSON.raw), &v)
return
}
func (u AnnotationDeltaUnion) AsFilePath() (v FilePathDeltaAnnotation) {
apijson.UnmarshalRoot(json.RawMessage(u.JSON.raw), &v)
return
}
// Returns the unmodified JSON received from the API
func (u AnnotationDeltaUnion) RawJSON() string { return u.JSON.raw }
func (r *AnnotationDeltaUnion) UnmarshalJSON(data []byte) error {
return apijson.UnmarshalRoot(data, r)
}
// A citation within the message that points to a specific quote from a specific
// File associated with the assistant or the message. Generated when the assistant
// uses the "file_search" tool to search files.
type FileCitationAnnotation struct {
EndIndex int64 `json:"end_index,required"`
FileCitation FileCitationAnnotationFileCitation `json:"file_citation,required"`
StartIndex int64 `json:"start_index,required"`
// The text in the message content that needs to be replaced.
Text string `json:"text,required"`
// Always `file_citation`.
Type constant.FileCitation `json:"type,required"`
// Metadata for the response, check the presence of optional fields with the
// [resp.Field.IsPresent] method.
JSON struct {
EndIndex resp.Field
FileCitation resp.Field
StartIndex resp.Field
Text resp.Field
Type resp.Field
ExtraFields map[string]resp.Field
raw string
} `json:"-"`
}
// Returns the unmodified JSON received from the API
func (r FileCitationAnnotation) RawJSON() string { return r.JSON.raw }
func (r *FileCitationAnnotation) UnmarshalJSON(data []byte) error {
return apijson.UnmarshalRoot(data, r)
}
type FileCitationAnnotationFileCitation struct {
// The ID of the specific File the citation is from.
FileID string `json:"file_id,required"`
// Metadata for the response, check the presence of optional fields with the
// [resp.Field.IsPresent] method.
JSON struct {
FileID resp.Field
ExtraFields map[string]resp.Field
raw string
} `json:"-"`
}
// Returns the unmodified JSON received from the API
func (r FileCitationAnnotationFileCitation) RawJSON() string { return r.JSON.raw }
func (r *FileCitationAnnotationFileCitation) UnmarshalJSON(data []byte) error {
return apijson.UnmarshalRoot(data, r)
}
// A citation within the message that points to a specific quote from a specific
// File associated with the assistant or the message. Generated when the assistant
// uses the "file_search" tool to search files.
type FileCitationDeltaAnnotation struct {
// The index of the annotation in the text content part.
Index int64 `json:"index,required"`
// Always `file_citation`.
Type constant.FileCitation `json:"type,required"`
EndIndex int64 `json:"end_index"`
FileCitation FileCitationDeltaAnnotationFileCitation `json:"file_citation"`
StartIndex int64 `json:"start_index"`
// The text in the message content that needs to be replaced.
Text string `json:"text"`
// Metadata for the response, check the presence of optional fields with the
// [resp.Field.IsPresent] method.
JSON struct {
Index resp.Field
Type resp.Field
EndIndex resp.Field
FileCitation resp.Field
StartIndex resp.Field
Text resp.Field
ExtraFields map[string]resp.Field
raw string
} `json:"-"`
}
// Returns the unmodified JSON received from the API
func (r FileCitationDeltaAnnotation) RawJSON() string { return r.JSON.raw }
func (r *FileCitationDeltaAnnotation) UnmarshalJSON(data []byte) error {
return apijson.UnmarshalRoot(data, r)
}
type FileCitationDeltaAnnotationFileCitation struct {
// The ID of the specific File the citation is from.
FileID string `json:"file_id"`
// The specific quote in the file.
Quote string `json:"quote"`
// Metadata for the response, check the presence of optional fields with the
// [resp.Field.IsPresent] method.
JSON struct {
FileID resp.Field
Quote resp.Field
ExtraFields map[string]resp.Field
raw string
} `json:"-"`
}
// Returns the unmodified JSON received from the API
func (r FileCitationDeltaAnnotationFileCitation) RawJSON() string { return r.JSON.raw }
func (r *FileCitationDeltaAnnotationFileCitation) UnmarshalJSON(data []byte) error {
return apijson.UnmarshalRoot(data, r)
}
// A URL for the file that's generated when the assistant used the
// `code_interpreter` tool to generate a file.
type FilePathAnnotation struct {
EndIndex int64 `json:"end_index,required"`
FilePath FilePathAnnotationFilePath `json:"file_path,required"`
StartIndex int64 `json:"start_index,required"`
// The text in the message content that needs to be replaced.
Text string `json:"text,required"`
// Always `file_path`.
Type constant.FilePath `json:"type,required"`
// Metadata for the response, check the presence of optional fields with the
// [resp.Field.IsPresent] method.
JSON struct {
EndIndex resp.Field
FilePath resp.Field
StartIndex resp.Field
Text resp.Field
Type resp.Field
ExtraFields map[string]resp.Field
raw string
} `json:"-"`
}
// Returns the unmodified JSON received from the API
func (r FilePathAnnotation) RawJSON() string { return r.JSON.raw }
func (r *FilePathAnnotation) UnmarshalJSON(data []byte) error {
return apijson.UnmarshalRoot(data, r)
}
type FilePathAnnotationFilePath struct {
// The ID of the file that was generated.
FileID string `json:"file_id,required"`
// Metadata for the response, check the presence of optional fields with the
// [resp.Field.IsPresent] method.
JSON struct {
FileID resp.Field
ExtraFields map[string]resp.Field
raw string
} `json:"-"`
}
// Returns the unmodified JSON received from the API
func (r FilePathAnnotationFilePath) RawJSON() string { return r.JSON.raw }
func (r *FilePathAnnotationFilePath) UnmarshalJSON(data []byte) error {
return apijson.UnmarshalRoot(data, r)
}
// A URL for the file that's generated when the assistant used the
// `code_interpreter` tool to generate a file.
type FilePathDeltaAnnotation struct {
// The index of the annotation in the text content part.
Index int64 `json:"index,required"`
// Always `file_path`.
Type constant.FilePath `json:"type,required"`
EndIndex int64 `json:"end_index"`
FilePath FilePathDeltaAnnotationFilePath `json:"file_path"`
StartIndex int64 `json:"start_index"`
// The text in the message content that needs to be replaced.
Text string `json:"text"`
// Metadata for the response, check the presence of optional fields with the
// [resp.Field.IsPresent] method.
JSON struct {
Index resp.Field
Type resp.Field
EndIndex resp.Field
FilePath resp.Field
StartIndex resp.Field
Text resp.Field
ExtraFields map[string]resp.Field
raw string
} `json:"-"`
}
// Returns the unmodified JSON received from the API
func (r FilePathDeltaAnnotation) RawJSON() string { return r.JSON.raw }
func (r *FilePathDeltaAnnotation) UnmarshalJSON(data []byte) error {
return apijson.UnmarshalRoot(data, r)
}
type FilePathDeltaAnnotationFilePath struct {
// The ID of the file that was generated.
FileID string `json:"file_id"`
// Metadata for the response, check the presence of optional fields with the
// [resp.Field.IsPresent] method.
JSON struct {
FileID resp.Field
ExtraFields map[string]resp.Field
raw string
} `json:"-"`
}
// Returns the unmodified JSON received from the API
func (r FilePathDeltaAnnotationFilePath) RawJSON() string { return r.JSON.raw }
func (r *FilePathDeltaAnnotationFilePath) UnmarshalJSON(data []byte) error {
return apijson.UnmarshalRoot(data, r)
}
type ImageFile struct {
// The [File](https://platform.openai.com/docs/api-reference/files) ID of the image
// in the message content. Set `purpose="vision"` when uploading the File if you
// need to later display the file content.
FileID string `json:"file_id,required"`
// Specifies the detail level of the image if specified by the user. `low` uses
// fewer tokens, you can opt in to high resolution using `high`.
//
// Any of "auto", "low", "high".
Detail ImageFileDetail `json:"detail"`
// Metadata for the response, check the presence of optional fields with the
// [resp.Field.IsPresent] method.
JSON struct {
FileID resp.Field
Detail resp.Field
ExtraFields map[string]resp.Field
raw string
} `json:"-"`
}
// Returns the unmodified JSON received from the API
func (r ImageFile) RawJSON() string { return r.JSON.raw }
func (r *ImageFile) UnmarshalJSON(data []byte) error {
return apijson.UnmarshalRoot(data, r)
}
// ToParam converts this ImageFile to a ImageFileParam.
//
// Warning: the fields of the param type will not be present. ToParam should only
// be used at the last possible moment before sending a request. Test for this with
// ImageFileParam.IsOverridden()
func (r ImageFile) ToParam() ImageFileParam {
return param.OverrideObj[ImageFileParam](r.RawJSON())
}
// Specifies the detail level of the image if specified by the user. `low` uses
// fewer tokens, you can opt in to high resolution using `high`.
type ImageFileDetail string
const (
ImageFileDetailAuto ImageFileDetail = "auto"
ImageFileDetailLow ImageFileDetail = "low"
ImageFileDetailHigh ImageFileDetail = "high"
)
// The property FileID is required.
type ImageFileParam struct {
// The [File](https://platform.openai.com/docs/api-reference/files) ID of the image
// in the message content. Set `purpose="vision"` when uploading the File if you
// need to later display the file content.
FileID string `json:"file_id,required"`
// Specifies the detail level of the image if specified by the user. `low` uses
// fewer tokens, you can opt in to high resolution using `high`.
//
// Any of "auto", "low", "high".
Detail ImageFileDetail `json:"detail,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 ImageFileParam) IsPresent() bool { return !param.IsOmitted(f) && !f.IsNull() }
func (r ImageFileParam) MarshalJSON() (data []byte, err error) {
type shadow ImageFileParam
return param.MarshalObject(r, (*shadow)(&r))
}
// References an image [File](https://platform.openai.com/docs/api-reference/files)
// in the content of a message.
type ImageFileContentBlock struct {
ImageFile ImageFile `json:"image_file,required"`
// Always `image_file`.
Type constant.ImageFile `json:"type,required"`
// Metadata for the response, check the presence of optional fields with the
// [resp.Field.IsPresent] method.
JSON struct {
ImageFile resp.Field
Type resp.Field
ExtraFields map[string]resp.Field
raw string
} `json:"-"`
}
// Returns the unmodified JSON received from the API
func (r ImageFileContentBlock) RawJSON() string { return r.JSON.raw }
func (r *ImageFileContentBlock) UnmarshalJSON(data []byte) error {
return apijson.UnmarshalRoot(data, r)
}
// ToParam converts this ImageFileContentBlock to a ImageFileContentBlockParam.
//
// Warning: the fields of the param type will not be present. ToParam should only
// be used at the last possible moment before sending a request. Test for this with
// ImageFileContentBlockParam.IsOverridden()
func (r ImageFileContentBlock) ToParam() ImageFileContentBlockParam {
return param.OverrideObj[ImageFileContentBlockParam](r.RawJSON())
}
// References an image [File](https://platform.openai.com/docs/api-reference/files)
// in the content of a message.
//
// The properties ImageFile, Type are required.
type ImageFileContentBlockParam struct {
ImageFile ImageFileParam `json:"image_file,omitzero,required"`
// Always `image_file`.
//
// This field can be elided, and will marshal its zero value as "image_file".
Type constant.ImageFile `json:"type,required"`
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 ImageFileContentBlockParam) IsPresent() bool { return !param.IsOmitted(f) && !f.IsNull() }
func (r ImageFileContentBlockParam) MarshalJSON() (data []byte, err error) {
type shadow ImageFileContentBlockParam
return param.MarshalObject(r, (*shadow)(&r))
}
type ImageFileDelta struct {
// Specifies the detail level of the image if specified by the user. `low` uses
// fewer tokens, you can opt in to high resolution using `high`.
//
// Any of "auto", "low", "high".
Detail ImageFileDeltaDetail `json:"detail"`
// The [File](https://platform.openai.com/docs/api-reference/files) ID of the image
// in the message content. Set `purpose="vision"` when uploading the File if you
// need to later display the file content.
FileID string `json:"file_id"`
// Metadata for the response, check the presence of optional fields with the
// [resp.Field.IsPresent] method.
JSON struct {
Detail resp.Field
FileID resp.Field
ExtraFields map[string]resp.Field
raw string
} `json:"-"`
}
// Returns the unmodified JSON received from the API
func (r ImageFileDelta) RawJSON() string { return r.JSON.raw }
func (r *ImageFileDelta) UnmarshalJSON(data []byte) error {
return apijson.UnmarshalRoot(data, r)
}
// Specifies the detail level of the image if specified by the user. `low` uses
// fewer tokens, you can opt in to high resolution using `high`.
type ImageFileDeltaDetail string
const (
ImageFileDeltaDetailAuto ImageFileDeltaDetail = "auto"
ImageFileDeltaDetailLow ImageFileDeltaDetail = "low"
ImageFileDeltaDetailHigh ImageFileDeltaDetail = "high"
)
// References an image [File](https://platform.openai.com/docs/api-reference/files)
// in the content of a message.
type ImageFileDeltaBlock struct {
// The index of the content part in the message.
Index int64 `json:"index,required"`
// Always `image_file`.
Type constant.ImageFile `json:"type,required"`
ImageFile ImageFileDelta `json:"image_file"`
// Metadata for the response, check the presence of optional fields with the
// [resp.Field.IsPresent] method.
JSON struct {
Index resp.Field
Type resp.Field
ImageFile resp.Field
ExtraFields map[string]resp.Field
raw string
} `json:"-"`
}
// Returns the unmodified JSON received from the API
func (r ImageFileDeltaBlock) RawJSON() string { return r.JSON.raw }
func (r *ImageFileDeltaBlock) UnmarshalJSON(data []byte) error {
return apijson.UnmarshalRoot(data, r)
}
type ImageURL struct {
// The external URL of the image, must be a supported image types: jpeg, jpg, png,
// gif, webp.
URL string `json:"url,required" format:"uri"`
// Specifies the detail level of the image. `low` uses fewer tokens, you can opt in
// to high resolution using `high`. Default value is `auto`
//
// Any of "auto", "low", "high".
Detail ImageURLDetail `json:"detail"`
// Metadata for the response, check the presence of optional fields with the
// [resp.Field.IsPresent] method.
JSON struct {
URL resp.Field
Detail resp.Field
ExtraFields map[string]resp.Field
raw string
} `json:"-"`
}
// Returns the unmodified JSON received from the API
func (r ImageURL) RawJSON() string { return r.JSON.raw }
func (r *ImageURL) UnmarshalJSON(data []byte) error {
return apijson.UnmarshalRoot(data, r)
}
// ToParam converts this ImageURL to a ImageURLParam.
//
// Warning: the fields of the param type will not be present. ToParam should only
// be used at the last possible moment before sending a request. Test for this with
// ImageURLParam.IsOverridden()
func (r ImageURL) ToParam() ImageURLParam {
return param.OverrideObj[ImageURLParam](r.RawJSON())
}
// Specifies the detail level of the image. `low` uses fewer tokens, you can opt in
// to high resolution using `high`. Default value is `auto`
type ImageURLDetail string
const (
ImageURLDetailAuto ImageURLDetail = "auto"
ImageURLDetailLow ImageURLDetail = "low"
ImageURLDetailHigh ImageURLDetail = "high"
)
// The property URL is required.
type ImageURLParam struct {
// The external URL of the image, must be a supported image types: jpeg, jpg, png,
// gif, webp.
URL string `json:"url,required" format:"uri"`
// Specifies the detail level of the image. `low` uses fewer tokens, you can opt in
// to high resolution using `high`. Default value is `auto`
//
// Any of "auto", "low", "high".
Detail ImageURLDetail `json:"detail,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 ImageURLParam) IsPresent() bool { return !param.IsOmitted(f) && !f.IsNull() }
func (r ImageURLParam) MarshalJSON() (data []byte, err error) {
type shadow ImageURLParam
return param.MarshalObject(r, (*shadow)(&r))
}
// References an image URL in the content of a message.
type ImageURLContentBlock struct {
ImageURL ImageURL `json:"image_url,required"`
// The type of the content part.
Type constant.ImageURL `json:"type,required"`
// Metadata for the response, check the presence of optional fields with the
// [resp.Field.IsPresent] method.
JSON struct {
ImageURL resp.Field
Type resp.Field
ExtraFields map[string]resp.Field
raw string
} `json:"-"`
}
// Returns the unmodified JSON received from the API
func (r ImageURLContentBlock) RawJSON() string { return r.JSON.raw }
func (r *ImageURLContentBlock) UnmarshalJSON(data []byte) error {
return apijson.UnmarshalRoot(data, r)
}
// ToParam converts this ImageURLContentBlock to a ImageURLContentBlockParam.
//
// Warning: the fields of the param type will not be present. ToParam should only
// be used at the last possible moment before sending a request. Test for this with
// ImageURLContentBlockParam.IsOverridden()
func (r ImageURLContentBlock) ToParam() ImageURLContentBlockParam {
return param.OverrideObj[ImageURLContentBlockParam](r.RawJSON())
}
// References an image URL in the content of a message.
//
// The properties ImageURL, Type are required.
type ImageURLContentBlockParam struct {
ImageURL ImageURLParam `json:"image_url,omitzero,required"`
// The type of the content part.
//
// This field can be elided, and will marshal its zero value as "image_url".
Type constant.ImageURL `json:"type,required"`
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 ImageURLContentBlockParam) IsPresent() bool { return !param.IsOmitted(f) && !f.IsNull() }
func (r ImageURLContentBlockParam) MarshalJSON() (data []byte, err error) {
type shadow ImageURLContentBlockParam
return param.MarshalObject(r, (*shadow)(&r))
}
type ImageURLDelta struct {
// Specifies the detail level of the image. `low` uses fewer tokens, you can opt in
// to high resolution using `high`.
//
// Any of "auto", "low", "high".
Detail ImageURLDeltaDetail `json:"detail"`
// The URL of the image, must be a supported image types: jpeg, jpg, png, gif,
// webp.
URL string `json:"url"`
// Metadata for the response, check the presence of optional fields with the
// [resp.Field.IsPresent] method.
JSON struct {
Detail resp.Field
URL resp.Field
ExtraFields map[string]resp.Field
raw string
} `json:"-"`
}
// Returns the unmodified JSON received from the API
func (r ImageURLDelta) RawJSON() string { return r.JSON.raw }
func (r *ImageURLDelta) UnmarshalJSON(data []byte) error {
return apijson.UnmarshalRoot(data, r)
}
// Specifies the detail level of the image. `low` uses fewer tokens, you can opt in
// to high resolution using `high`.
type ImageURLDeltaDetail string
const (
ImageURLDeltaDetailAuto ImageURLDeltaDetail = "auto"
ImageURLDeltaDetailLow ImageURLDeltaDetail = "low"
ImageURLDeltaDetailHigh ImageURLDeltaDetail = "high"
)
// References an image URL in the content of a message.
type ImageURLDeltaBlock struct {
// The index of the content part in the message.
Index int64 `json:"index,required"`
// Always `image_url`.
Type constant.ImageURL `json:"type,required"`
ImageURL ImageURLDelta `json:"image_url"`
// Metadata for the response, check the presence of optional fields with the
// [resp.Field.IsPresent] method.
JSON struct {
Index resp.Field
Type resp.Field
ImageURL resp.Field
ExtraFields map[string]resp.Field
raw string
} `json:"-"`
}
// Returns the unmodified JSON received from the API
func (r ImageURLDeltaBlock) RawJSON() string { return r.JSON.raw }
func (r *ImageURLDeltaBlock) UnmarshalJSON(data []byte) error {
return apijson.UnmarshalRoot(data, r)
}
// Represents a message within a
// [thread](https://platform.openai.com/docs/api-reference/threads).
type Message struct {
// The identifier, which can be referenced in API endpoints.
ID string `json:"id,required"`
// If applicable, the ID of the
// [assistant](https://platform.openai.com/docs/api-reference/assistants) that
// authored this message.
AssistantID string `json:"assistant_id,required"`
// A list of files attached to the message, and the tools they were added to.
Attachments []MessageAttachment `json:"attachments,required"`
// The Unix timestamp (in seconds) for when the message was completed.
CompletedAt int64 `json:"completed_at,required"`
// The content of the message in array of text and/or images.
Content []MessageContentUnion `json:"content,required"`
// The Unix timestamp (in seconds) for when the message was created.
CreatedAt int64 `json:"created_at,required"`
// The Unix timestamp (in seconds) for when the message was marked as incomplete.
IncompleteAt int64 `json:"incomplete_at,required"`
// On an incomplete message, details about why the message is incomplete.
IncompleteDetails MessageIncompleteDetails `json:"incomplete_details,required"`
// Set of 16 key-value pairs that can be attached to an object. This can be useful
// for storing additional information about the object in a structured format, and
// querying for objects via API or the dashboard.
//
// Keys are strings with a maximum length of 64 characters. Values are strings with
// a maximum length of 512 characters.
Metadata shared.Metadata `json:"metadata,required"`
// The object type, which is always `thread.message`.
Object constant.ThreadMessage `json:"object,required"`
// The entity that produced the message. One of `user` or `assistant`.
//
// Any of "user", "assistant".
Role MessageRole `json:"role,required"`
// The ID of the [run](https://platform.openai.com/docs/api-reference/runs)
// associated with the creation of this message. Value is `null` when messages are
// created manually using the create message or create thread endpoints.
RunID string `json:"run_id,required"`
// The status of the message, which can be either `in_progress`, `incomplete`, or
// `completed`.
//
// Any of "in_progress", "incomplete", "completed".
Status MessageStatus `json:"status,required"`
// The [thread](https://platform.openai.com/docs/api-reference/threads) ID that
// this message belongs to.
ThreadID string `json:"thread_id,required"`
// Metadata for the response, check the presence of optional fields with the
// [resp.Field.IsPresent] method.
JSON struct {
ID resp.Field
AssistantID resp.Field
Attachments resp.Field
CompletedAt resp.Field
Content resp.Field
CreatedAt resp.Field
IncompleteAt resp.Field
IncompleteDetails resp.Field
Metadata resp.Field
Object resp.Field
Role resp.Field
RunID resp.Field
Status resp.Field
ThreadID resp.Field
ExtraFields map[string]resp.Field
raw string
} `json:"-"`
}
// Returns the unmodified JSON received from the API
func (r Message) RawJSON() string { return r.JSON.raw }
func (r *Message) UnmarshalJSON(data []byte) error {
return apijson.UnmarshalRoot(data, r)
}
type MessageAttachment struct {
// The ID of the file to attach to the message.
FileID string `json:"file_id"`
// The tools to add this file to.
Tools []MessageAttachmentToolUnion `json:"tools"`
// Metadata for the response, check the presence of optional fields with the
// [resp.Field.IsPresent] method.
JSON struct {
FileID resp.Field
Tools resp.Field
ExtraFields map[string]resp.Field
raw string
} `json:"-"`
}
// Returns the unmodified JSON received from the API
func (r MessageAttachment) RawJSON() string { return r.JSON.raw }
func (r *MessageAttachment) UnmarshalJSON(data []byte) error {
return apijson.UnmarshalRoot(data, r)
}
// MessageAttachmentToolUnion contains all possible properties and values from
// [CodeInterpreterTool], [MessageAttachmentToolAssistantToolsFileSearchTypeOnly].
//
// Use the methods beginning with 'As' to cast the union to one of its variants.
type MessageAttachmentToolUnion struct {
Type string `json:"type"`
JSON struct {
Type resp.Field
raw string
} `json:"-"`
}
func (u MessageAttachmentToolUnion) AsCodeInterpreterTool() (v CodeInterpreterTool) {
apijson.UnmarshalRoot(json.RawMessage(u.JSON.raw), &v)
return
}
func (u MessageAttachmentToolUnion) AsFileSearchTool() (v MessageAttachmentToolAssistantToolsFileSearchTypeOnly) {
apijson.UnmarshalRoot(json.RawMessage(u.JSON.raw), &v)
return
}
// Returns the unmodified JSON received from the API
func (u MessageAttachmentToolUnion) RawJSON() string { return u.JSON.raw }
func (r *MessageAttachmentToolUnion) UnmarshalJSON(data []byte) error {
return apijson.UnmarshalRoot(data, r)
}
type MessageAttachmentToolAssistantToolsFileSearchTypeOnly struct {
// The type of tool being defined: `file_search`
Type constant.FileSearch `json:"type,required"`
// Metadata for the response, check the presence of optional fields with the
// [resp.Field.IsPresent] method.
JSON struct {
Type resp.Field
ExtraFields map[string]resp.Field
raw string
} `json:"-"`
}
// Returns the unmodified JSON received from the API
func (r MessageAttachmentToolAssistantToolsFileSearchTypeOnly) RawJSON() string { return r.JSON.raw }
func (r *MessageAttachmentToolAssistantToolsFileSearchTypeOnly) UnmarshalJSON(data []byte) error {
return apijson.UnmarshalRoot(data, r)
}
// On an incomplete message, details about why the message is incomplete.
type MessageIncompleteDetails struct {
// The reason the message is incomplete.
//
// Any of "content_filter", "max_tokens", "run_cancelled", "run_expired",
// "run_failed".
Reason string `json:"reason,required"`
// Metadata for the response, check the presence of optional fields with the
// [resp.Field.IsPresent] method.
JSON struct {
Reason resp.Field
ExtraFields map[string]resp.Field
raw string
} `json:"-"`
}
// Returns the unmodified JSON received from the API
func (r MessageIncompleteDetails) RawJSON() string { return r.JSON.raw }
func (r *MessageIncompleteDetails) UnmarshalJSON(data []byte) error {
return apijson.UnmarshalRoot(data, r)
}
// The entity that produced the message. One of `user` or `assistant`.
type MessageRole string
const (
MessageRoleUser MessageRole = "user"
MessageRoleAssistant MessageRole = "assistant"
)
// The status of the message, which can be either `in_progress`, `incomplete`, or
// `completed`.
type MessageStatus string
const (
MessageStatusInProgress MessageStatus = "in_progress"
MessageStatusIncomplete MessageStatus = "incomplete"
MessageStatusCompleted MessageStatus = "completed"
)
// MessageContentUnion contains all possible properties and values from
// [ImageFileContentBlock], [ImageURLContentBlock], [TextContentBlock],
// [RefusalContentBlock].
//
// Use the [MessageContentUnion.AsAny] method to switch on the variant.
//
// Use the methods beginning with 'As' to cast the union to one of its variants.
type MessageContentUnion struct {
// This field is from variant [ImageFileContentBlock].
ImageFile ImageFile `json:"image_file"`
// Any of "image_file", "image_url", "text", "refusal".
Type string `json:"type"`
// This field is from variant [ImageURLContentBlock].
ImageURL ImageURL `json:"image_url"`
// This field is from variant [TextContentBlock].
Text Text `json:"text"`
// This field is from variant [RefusalContentBlock].
Refusal string `json:"refusal"`
JSON struct {
ImageFile resp.Field
Type resp.Field
ImageURL resp.Field
Text resp.Field
Refusal resp.Field
raw string
} `json:"-"`
}
// anyMessageContent is implemented by each variant of [MessageContentUnion] to add
// type safety for the return type of [MessageContentUnion.AsAny]
type anyMessageContent interface {
implMessageContentUnion()
}
func (ImageFileContentBlock) implMessageContentUnion() {}
func (ImageURLContentBlock) implMessageContentUnion() {}
func (TextContentBlock) implMessageContentUnion() {}
func (RefusalContentBlock) implMessageContentUnion() {}
// Use the following switch statement to find the correct variant
//
// switch variant := MessageContentUnion.AsAny().(type) {
// case ImageFileContentBlock:
// case ImageURLContentBlock:
// case TextContentBlock:
// case RefusalContentBlock:
// default:
// fmt.Errorf("no variant present")
// }
func (u MessageContentUnion) AsAny() anyMessageContent {
switch u.Type {
case "image_file":
return u.AsImageFile()
case "image_url":
return u.AsImageURL()
case "text":
return u.AsText()
case "refusal":
return u.AsRefusal()
}
return nil
}
func (u MessageContentUnion) AsImageFile() (v ImageFileContentBlock) {
apijson.UnmarshalRoot(json.RawMessage(u.JSON.raw), &v)
return
}
func (u MessageContentUnion) AsImageURL() (v ImageURLContentBlock) {
apijson.UnmarshalRoot(json.RawMessage(u.JSON.raw), &v)
return
}
func (u MessageContentUnion) AsText() (v TextContentBlock) {
apijson.UnmarshalRoot(json.RawMessage(u.JSON.raw), &v)
return
}
func (u MessageContentUnion) AsRefusal() (v RefusalContentBlock) {
apijson.UnmarshalRoot(json.RawMessage(u.JSON.raw), &v)
return
}
// Returns the unmodified JSON received from the API
func (u MessageContentUnion) RawJSON() string { return u.JSON.raw }
func (r *MessageContentUnion) UnmarshalJSON(data []byte) error {
return apijson.UnmarshalRoot(data, r)
}
// MessageContentDeltaUnion contains all possible properties and values from
// [ImageFileDeltaBlock], [TextDeltaBlock], [RefusalDeltaBlock],
// [ImageURLDeltaBlock].
//
// Use the [MessageContentDeltaUnion.AsAny] method to switch on the variant.
//
// Use the methods beginning with 'As' to cast the union to one of its variants.
type MessageContentDeltaUnion struct {
Index int64 `json:"index"`
// Any of "image_file", "text", "refusal", "image_url".
Type string `json:"type"`
// This field is from variant [ImageFileDeltaBlock].
ImageFile ImageFileDelta `json:"image_file"`
// This field is from variant [TextDeltaBlock].
Text TextDelta `json:"text"`
// This field is from variant [RefusalDeltaBlock].
Refusal string `json:"refusal"`
// This field is from variant [ImageURLDeltaBlock].
ImageURL ImageURLDelta `json:"image_url"`
JSON struct {
Index resp.Field
Type resp.Field
ImageFile resp.Field
Text resp.Field
Refusal resp.Field
ImageURL resp.Field
raw string
} `json:"-"`
}
// anyMessageContentDelta is implemented by each variant of
// [MessageContentDeltaUnion] to add type safety for the return type of
// [MessageContentDeltaUnion.AsAny]
type anyMessageContentDelta interface {
implMessageContentDeltaUnion()
}
func (ImageFileDeltaBlock) implMessageContentDeltaUnion() {}
func (TextDeltaBlock) implMessageContentDeltaUnion() {}
func (RefusalDeltaBlock) implMessageContentDeltaUnion() {}
func (ImageURLDeltaBlock) implMessageContentDeltaUnion() {}
// Use the following switch statement to find the correct variant
//
// switch variant := MessageContentDeltaUnion.AsAny().(type) {
// case ImageFileDeltaBlock:
// case TextDeltaBlock:
// case RefusalDeltaBlock:
// case ImageURLDeltaBlock:
// default:
// fmt.Errorf("no variant present")
// }
func (u MessageContentDeltaUnion) AsAny() anyMessageContentDelta {
switch u.Type {
case "image_file":
return u.AsImageFile()
case "text":
return u.AsText()
case "refusal":
return u.AsRefusal()
case "image_url":
return u.AsImageURL()
}
return nil
}
func (u MessageContentDeltaUnion) AsImageFile() (v ImageFileDeltaBlock) {
apijson.UnmarshalRoot(json.RawMessage(u.JSON.raw), &v)
return
}
func (u MessageContentDeltaUnion) AsText() (v TextDeltaBlock) {
apijson.UnmarshalRoot(json.RawMessage(u.JSON.raw), &v)
return
}
func (u MessageContentDeltaUnion) AsRefusal() (v RefusalDeltaBlock) {
apijson.UnmarshalRoot(json.RawMessage(u.JSON.raw), &v)
return
}
func (u MessageContentDeltaUnion) AsImageURL() (v ImageURLDeltaBlock) {
apijson.UnmarshalRoot(json.RawMessage(u.JSON.raw), &v)
return
}
// Returns the unmodified JSON received from the API
func (u MessageContentDeltaUnion) RawJSON() string { return u.JSON.raw }
func (r *MessageContentDeltaUnion) UnmarshalJSON(data []byte) error {
return apijson.UnmarshalRoot(data, r)
}
func MessageContentPartParamOfImageFile(imageFile ImageFileParam) MessageContentPartParamUnion {
var variant ImageFileContentBlockParam
variant.ImageFile = imageFile
return MessageContentPartParamUnion{OfImageFile: &variant}
}
func MessageContentPartParamOfImageURL(imageURL ImageURLParam) MessageContentPartParamUnion {
var variant ImageURLContentBlockParam
variant.ImageURL = imageURL
return MessageContentPartParamUnion{OfImageURL: &variant}
}
func MessageContentPartParamOfText(text string) MessageContentPartParamUnion {
var variant TextContentBlockParam
variant.Text = text
return MessageContentPartParamUnion{OfText: &variant}
}
// Only one field can be non-zero.
//
// Use [param.IsOmitted] to confirm if a field is set.
type MessageContentPartParamUnion struct {
OfImageFile *ImageFileContentBlockParam `json:",omitzero,inline"`
OfImageURL *ImageURLContentBlockParam `json:",omitzero,inline"`
OfText *TextContentBlockParam `json:",omitzero,inline"`
paramUnion
}
// 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 (u MessageContentPartParamUnion) IsPresent() bool { return !param.IsOmitted(u) && !u.IsNull() }
func (u MessageContentPartParamUnion) MarshalJSON() ([]byte, error) {
return param.MarshalUnion[MessageContentPartParamUnion](u.OfImageFile, u.OfImageURL, u.OfText)
}
func (u *MessageContentPartParamUnion) asAny() any {
if !param.IsOmitted(u.OfImageFile) {
return u.OfImageFile
} else if !param.IsOmitted(u.OfImageURL) {
return u.OfImageURL
} else if !param.IsOmitted(u.OfText) {
return u.OfText
}
return nil
}
// Returns a pointer to the underlying variant's property, if present.
func (u MessageContentPartParamUnion) GetImageFile() *ImageFileParam {
if vt := u.OfImageFile; vt != nil {
return &vt.ImageFile
}
return nil
}
// Returns a pointer to the underlying variant's property, if present.
func (u MessageContentPartParamUnion) GetImageURL() *ImageURLParam {
if vt := u.OfImageURL; vt != nil {
return &vt.ImageURL
}
return nil
}
// Returns a pointer to the underlying variant's property, if present.
func (u MessageContentPartParamUnion) GetText() *string {
if vt := u.OfText; vt != nil {
return &vt.Text
}
return nil
}
// Returns a pointer to the underlying variant's property, if present.
func (u MessageContentPartParamUnion) GetType() *string {
if vt := u.OfImageFile; vt != nil {
return (*string)(&vt.Type)
} else if vt := u.OfImageURL; vt != nil {
return (*string)(&vt.Type)
} else if vt := u.OfText; vt != nil {
return (*string)(&vt.Type)
}
return nil
}
func init() {
apijson.RegisterUnion[MessageContentPartParamUnion](
"type",
apijson.UnionVariant{
TypeFilter: gjson.JSON,
Type: reflect.TypeOf(ImageFileContentBlockParam{}),
DiscriminatorValue: "image_file",
},
apijson.UnionVariant{
TypeFilter: gjson.JSON,
Type: reflect.TypeOf(ImageURLContentBlockParam{}),
DiscriminatorValue: "image_url",
},
apijson.UnionVariant{
TypeFilter: gjson.JSON,
Type: reflect.TypeOf(TextContentBlockParam{}),
DiscriminatorValue: "text",
},
)
}
type MessageDeleted struct {
ID string `json:"id,required"`
Deleted bool `json:"deleted,required"`
Object constant.ThreadMessageDeleted `json:"object,required"`
// Metadata for the response, check the presence of optional fields with the
// [resp.Field.IsPresent] method.
JSON struct {
ID resp.Field
Deleted resp.Field
Object resp.Field
ExtraFields map[string]resp.Field
raw string
} `json:"-"`
}
// Returns the unmodified JSON received from the API
func (r MessageDeleted) RawJSON() string { return r.JSON.raw }
func (r *MessageDeleted) UnmarshalJSON(data []byte) error {
return apijson.UnmarshalRoot(data, r)
}
// The delta containing the fields that have changed on the Message.
type MessageDelta struct {
// The content of the message in array of text and/or images.
Content []MessageContentDeltaUnion `json:"content"`
// The entity that produced the message. One of `user` or `assistant`.
//
// Any of "user", "assistant".
Role MessageDeltaRole `json:"role"`
// Metadata for the response, check the presence of optional fields with the
// [resp.Field.IsPresent] method.
JSON struct {
Content resp.Field
Role resp.Field
ExtraFields map[string]resp.Field
raw string
} `json:"-"`
}
// Returns the unmodified JSON received from the API
func (r MessageDelta) RawJSON() string { return r.JSON.raw }
func (r *MessageDelta) UnmarshalJSON(data []byte) error {
return apijson.UnmarshalRoot(data, r)
}
// The entity that produced the message. One of `user` or `assistant`.
type MessageDeltaRole string
const (
MessageDeltaRoleUser MessageDeltaRole = "user"
MessageDeltaRoleAssistant MessageDeltaRole = "assistant"
)
// Represents a message delta i.e. any changed fields on a message during
// streaming.
type MessageDeltaEvent struct {
// The identifier of the message, which can be referenced in API endpoints.
ID string `json:"id,required"`
// The delta containing the fields that have changed on the Message.
Delta MessageDelta `json:"delta,required"`
// The object type, which is always `thread.message.delta`.
Object constant.ThreadMessageDelta `json:"object,required"`
// Metadata for the response, check the presence of optional fields with the
// [resp.Field.IsPresent] method.
JSON struct {
ID resp.Field
Delta resp.Field
Object resp.Field
ExtraFields map[string]resp.Field
raw string
} `json:"-"`
}
// Returns the unmodified JSON received from the API
func (r MessageDeltaEvent) RawJSON() string { return r.JSON.raw }
func (r *MessageDeltaEvent) UnmarshalJSON(data []byte) error {
return apijson.UnmarshalRoot(data, r)
}
// The refusal content generated by the assistant.
type RefusalContentBlock struct {
Refusal string `json:"refusal,required"`
// Always `refusal`.
Type constant.Refusal `json:"type,required"`
// Metadata for the response, check the presence of optional fields with the
// [resp.Field.IsPresent] method.
JSON struct {
Refusal resp.Field
Type resp.Field
ExtraFields map[string]resp.Field
raw string
} `json:"-"`
}
// Returns the unmodified JSON received from the API
func (r RefusalContentBlock) RawJSON() string { return r.JSON.raw }
func (r *RefusalContentBlock) UnmarshalJSON(data []byte) error {
return apijson.UnmarshalRoot(data, r)
}
// The refusal content that is part of a message.
type RefusalDeltaBlock struct {
// The index of the refusal part in the message.
Index int64 `json:"index,required"`
// Always `refusal`.
Type constant.Refusal `json:"type,required"`
Refusal string `json:"refusal"`
// Metadata for the response, check the presence of optional fields with the
// [resp.Field.IsPresent] method.
JSON struct {
Index resp.Field
Type resp.Field
Refusal resp.Field
ExtraFields map[string]resp.Field
raw string
} `json:"-"`
}
// Returns the unmodified JSON received from the API
func (r RefusalDeltaBlock) RawJSON() string { return r.JSON.raw }
func (r *RefusalDeltaBlock) UnmarshalJSON(data []byte) error {
return apijson.UnmarshalRoot(data, r)
}
type Text struct {
Annotations []AnnotationUnion `json:"annotations,required"`
// The data that makes up the text.
Value string `json:"value,required"`
// Metadata for the response, check the presence of optional fields with the
// [resp.Field.IsPresent] method.
JSON struct {
Annotations resp.Field
Value resp.Field
ExtraFields map[string]resp.Field
raw string
} `json:"-"`
}
// Returns the unmodified JSON received from the API
func (r Text) RawJSON() string { return r.JSON.raw }
func (r *Text) UnmarshalJSON(data []byte) error {
return apijson.UnmarshalRoot(data, r)
}
// The text content that is part of a message.
type TextContentBlock struct {
Text Text `json:"text,required"`
// Always `text`.
Type constant.Text `json:"type,required"`
// Metadata for the response, check the presence of optional fields with the
// [resp.Field.IsPresent] method.
JSON struct {
Text resp.Field
Type resp.Field
ExtraFields map[string]resp.Field
raw string
} `json:"-"`
}
// Returns the unmodified JSON received from the API
func (r TextContentBlock) RawJSON() string { return r.JSON.raw }
func (r *TextContentBlock) UnmarshalJSON(data []byte) error {
return apijson.UnmarshalRoot(data, r)
}
// The text content that is part of a message.
//
// The properties Text, Type are required.
type TextContentBlockParam struct {
// Text content to be sent to the model
Text string `json:"text,required"`
// Always `text`.
//
// This field can be elided, and will marshal its zero value as "text".
Type constant.Text `json:"type,required"`
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 TextContentBlockParam) IsPresent() bool { return !param.IsOmitted(f) && !f.IsNull() }
func (r TextContentBlockParam) MarshalJSON() (data []byte, err error) {
type shadow TextContentBlockParam
return param.MarshalObject(r, (*shadow)(&r))
}
type TextDelta struct {
Annotations []AnnotationDeltaUnion `json:"annotations"`
// The data that makes up the text.
Value string `json:"value"`
// Metadata for the response, check the presence of optional fields with the
// [resp.Field.IsPresent] method.
JSON struct {
Annotations resp.Field
Value resp.Field
ExtraFields map[string]resp.Field
raw string
} `json:"-"`
}
// Returns the unmodified JSON received from the API
func (r TextDelta) RawJSON() string { return r.JSON.raw }
func (r *TextDelta) UnmarshalJSON(data []byte) error {
return apijson.UnmarshalRoot(data, r)
}
// The text content that is part of a message.
type TextDeltaBlock struct {
// The index of the content part in the message.
Index int64 `json:"index,required"`
// Always `text`.
Type constant.Text `json:"type,required"`
Text TextDelta `json:"text"`
// Metadata for the response, check the presence of optional fields with the
// [resp.Field.IsPresent] method.
JSON struct {
Index resp.Field
Type resp.Field
Text resp.Field
ExtraFields map[string]resp.Field
raw string
} `json:"-"`
}
// Returns the unmodified JSON received from the API
func (r TextDeltaBlock) RawJSON() string { return r.JSON.raw }
func (r *TextDeltaBlock) UnmarshalJSON(data []byte) error {
return apijson.UnmarshalRoot(data, r)
}
type BetaThreadMessageNewParams struct {
// The text contents of the message.
Content BetaThreadMessageNewParamsContentUnion `json:"content,omitzero,required"`
// The role of the entity that is creating the message. Allowed values include:
//
// - `user`: Indicates the message is sent by an actual user and should be used in
// most cases to represent user-generated messages.
// - `assistant`: Indicates the message is generated by the assistant. Use this
// value to insert messages from the assistant into the conversation.
//
// Any of "user", "assistant".
Role BetaThreadMessageNewParamsRole `json:"role,omitzero,required"`
// A list of files attached to the message, and the tools they should be added to.
Attachments []BetaThreadMessageNewParamsAttachment `json:"attachments,omitzero"`
// Set of 16 key-value pairs that can be attached to an object. This can be useful
// for storing additional information about the object in a structured format, and
// querying for objects via API or the dashboard.
//
// Keys are strings with a maximum length of 64 characters. Values are strings with
// a maximum length of 512 characters.
Metadata shared.MetadataParam `json:"metadata,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 BetaThreadMessageNewParams) IsPresent() bool { return !param.IsOmitted(f) && !f.IsNull() }
func (r BetaThreadMessageNewParams) MarshalJSON() (data []byte, err error) {
type shadow BetaThreadMessageNewParams
return param.MarshalObject(r, (*shadow)(&r))
}
// Only one field can be non-zero.
//
// Use [param.IsOmitted] to confirm if a field is set.
type BetaThreadMessageNewParamsContentUnion struct {
OfString param.Opt[string] `json:",omitzero,inline"`
OfArrayOfContentParts []MessageContentPartParamUnion `json:",omitzero,inline"`
paramUnion
}
// 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 (u BetaThreadMessageNewParamsContentUnion) IsPresent() bool {
return !param.IsOmitted(u) && !u.IsNull()
}
func (u BetaThreadMessageNewParamsContentUnion) MarshalJSON() ([]byte, error) {
return param.MarshalUnion[BetaThreadMessageNewParamsContentUnion](u.OfString, u.OfArrayOfContentParts)
}
func (u *BetaThreadMessageNewParamsContentUnion) asAny() any {
if !param.IsOmitted(u.OfString) {
return &u.OfString.Value
} else if !param.IsOmitted(u.OfArrayOfContentParts) {
return &u.OfArrayOfContentParts
}
return nil
}
// The role of the entity that is creating the message. Allowed values include:
//
// - `user`: Indicates the message is sent by an actual user and should be used in
// most cases to represent user-generated messages.
// - `assistant`: Indicates the message is generated by the assistant. Use this
// value to insert messages from the assistant into the conversation.
type BetaThreadMessageNewParamsRole string
const (
BetaThreadMessageNewParamsRoleUser BetaThreadMessageNewParamsRole = "user"
BetaThreadMessageNewParamsRoleAssistant BetaThreadMessageNewParamsRole = "assistant"
)
type BetaThreadMessageNewParamsAttachment struct {
// The ID of the file to attach to the message.
FileID param.Opt[string] `json:"file_id,omitzero"`
// The tools to add this file to.
Tools []BetaThreadMessageNewParamsAttachmentToolUnion `json:"tools,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 BetaThreadMessageNewParamsAttachment) IsPresent() bool {
return !param.IsOmitted(f) && !f.IsNull()
}
func (r BetaThreadMessageNewParamsAttachment) MarshalJSON() (data []byte, err error) {
type shadow BetaThreadMessageNewParamsAttachment
return param.MarshalObject(r, (*shadow)(&r))
}
// Only one field can be non-zero.
//
// Use [param.IsOmitted] to confirm if a field is set.
type BetaThreadMessageNewParamsAttachmentToolUnion struct {
OfCodeInterpreter *CodeInterpreterToolParam `json:",omitzero,inline"`
OfFileSearch *BetaThreadMessageNewParamsAttachmentToolFileSearch `json:",omitzero,inline"`
paramUnion
}
// 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 (u BetaThreadMessageNewParamsAttachmentToolUnion) IsPresent() bool {
return !param.IsOmitted(u) && !u.IsNull()
}
func (u BetaThreadMessageNewParamsAttachmentToolUnion) MarshalJSON() ([]byte, error) {
return param.MarshalUnion[BetaThreadMessageNewParamsAttachmentToolUnion](u.OfCodeInterpreter, u.OfFileSearch)
}
func (u *BetaThreadMessageNewParamsAttachmentToolUnion) asAny() any {
if !param.IsOmitted(u.OfCodeInterpreter) {
return u.OfCodeInterpreter
} else if !param.IsOmitted(u.OfFileSearch) {
return u.OfFileSearch
}
return nil
}
// Returns a pointer to the underlying variant's property, if present.
func (u BetaThreadMessageNewParamsAttachmentToolUnion) GetType() *string {
if vt := u.OfCodeInterpreter; vt != nil {
return (*string)(&vt.Type)
} else if vt := u.OfFileSearch; vt != nil {
return (*string)(&vt.Type)
}
return nil
}
func init() {
apijson.RegisterUnion[BetaThreadMessageNewParamsAttachmentToolUnion](
"type",
apijson.UnionVariant{
TypeFilter: gjson.JSON,
Type: reflect.TypeOf(CodeInterpreterToolParam{}),
DiscriminatorValue: "code_interpreter",
},
apijson.UnionVariant{
TypeFilter: gjson.JSON,
Type: reflect.TypeOf(BetaThreadMessageNewParamsAttachmentToolFileSearch{}),
DiscriminatorValue: "file_search",
},
)
}
// The property Type is required.
type BetaThreadMessageNewParamsAttachmentToolFileSearch struct {
// The type of tool being defined: `file_search`
//
// This field can be elided, and will marshal its zero value as "file_search".
Type constant.FileSearch `json:"type,required"`
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 BetaThreadMessageNewParamsAttachmentToolFileSearch) IsPresent() bool {
return !param.IsOmitted(f) && !f.IsNull()
}
func (r BetaThreadMessageNewParamsAttachmentToolFileSearch) MarshalJSON() (data []byte, err error) {
type shadow BetaThreadMessageNewParamsAttachmentToolFileSearch
return param.MarshalObject(r, (*shadow)(&r))
}
type BetaThreadMessageUpdateParams struct {
// Set of 16 key-value pairs that can be attached to an object. This can be useful
// for storing additional information about the object in a structured format, and
// querying for objects via API or the dashboard.
//
// Keys are strings with a maximum length of 64 characters. Values are strings with
// a maximum length of 512 characters.
Metadata shared.MetadataParam `json:"metadata,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 BetaThreadMessageUpdateParams) IsPresent() bool { return !param.IsOmitted(f) && !f.IsNull() }
func (r BetaThreadMessageUpdateParams) MarshalJSON() (data []byte, err error) {
type shadow BetaThreadMessageUpdateParams
return param.MarshalObject(r, (*shadow)(&r))
}
type BetaThreadMessageListParams struct {
// 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.
After param.Opt[string] `query:"after,omitzero" json:"-"`
// 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,
// starting with obj_foo, your subsequent call can include before=obj_foo in order
// to fetch the previous page of the list.
Before param.Opt[string] `query:"before,omitzero" json:"-"`
// A limit on the number of objects to be returned. Limit can range between 1 and
// 100, and the default is 20.
Limit param.Opt[int64] `query:"limit,omitzero" json:"-"`
// Filter messages by the run ID that generated them.
RunID param.Opt[string] `query:"run_id,omitzero" json:"-"`
// Sort order by the `created_at` timestamp of the objects. `asc` for ascending
// order and `desc` for descending order.
//
// Any of "asc", "desc".
Order BetaThreadMessageListParamsOrder `query:"order,omitzero" json:"-"`
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 BetaThreadMessageListParams) IsPresent() bool { return !param.IsOmitted(f) && !f.IsNull() }
// URLQuery serializes [BetaThreadMessageListParams]'s query parameters as
// `url.Values`.
func (r BetaThreadMessageListParams) URLQuery() (v url.Values, err error) {
return apiquery.MarshalWithSettings(r, apiquery.QuerySettings{
ArrayFormat: apiquery.ArrayQueryFormatBrackets,
NestedFormat: apiquery.NestedQueryFormatBrackets,
})
}
// Sort order by the `created_at` timestamp of the objects. `asc` for ascending
// order and `desc` for descending order.
type BetaThreadMessageListParamsOrder string
const (
BetaThreadMessageListParamsOrderAsc BetaThreadMessageListParamsOrder = "asc"
BetaThreadMessageListParamsOrderDesc BetaThreadMessageListParamsOrder = "desc"
)