betathreadrunstep.go (856 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" "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" ) // BetaThreadRunStepService 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 [NewBetaThreadRunStepService] method instead. type BetaThreadRunStepService struct { Options []option.RequestOption } // NewBetaThreadRunStepService 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 NewBetaThreadRunStepService(opts ...option.RequestOption) (r BetaThreadRunStepService) { r = BetaThreadRunStepService{} r.Options = opts return } // Retrieves a run step. func (r *BetaThreadRunStepService) Get(ctx context.Context, threadID string, runID string, stepID string, query BetaThreadRunStepGetParams, opts ...option.RequestOption) (res *RunStep, 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 runID == "" { err = errors.New("missing required run_id parameter") return } if stepID == "" { err = errors.New("missing required step_id parameter") return } path := fmt.Sprintf("threads/%s/runs/%s/steps/%s", threadID, runID, stepID) err = requestconfig.ExecuteNewRequest(ctx, http.MethodGet, path, query, &res, opts...) return } // Returns a list of run steps belonging to a run. func (r *BetaThreadRunStepService) List(ctx context.Context, threadID string, runID string, query BetaThreadRunStepListParams, opts ...option.RequestOption) (res *pagination.CursorPage[RunStep], 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 } if runID == "" { err = errors.New("missing required run_id parameter") return } path := fmt.Sprintf("threads/%s/runs/%s/steps", threadID, runID) 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 run steps belonging to a run. func (r *BetaThreadRunStepService) ListAutoPaging(ctx context.Context, threadID string, runID string, query BetaThreadRunStepListParams, opts ...option.RequestOption) *pagination.CursorPageAutoPager[RunStep] { return pagination.NewCursorPageAutoPager(r.List(ctx, threadID, runID, query, opts...)) } // Text output from the Code Interpreter tool call as part of a run step. type CodeInterpreterLogs struct { // The index of the output in the outputs array. Index int64 `json:"index,required"` // Always `logs`. Type constant.Logs `json:"type,required"` // The text output from the Code Interpreter tool call. Logs string `json:"logs"` // Metadata for the response, check the presence of optional fields with the // [resp.Field.IsPresent] method. JSON struct { Index resp.Field Type resp.Field Logs resp.Field ExtraFields map[string]resp.Field raw string } `json:"-"` } // Returns the unmodified JSON received from the API func (r CodeInterpreterLogs) RawJSON() string { return r.JSON.raw } func (r *CodeInterpreterLogs) UnmarshalJSON(data []byte) error { return apijson.UnmarshalRoot(data, r) } type CodeInterpreterOutputImage struct { // The index of the output in the outputs array. Index int64 `json:"index,required"` // Always `image`. Type constant.Image `json:"type,required"` Image CodeInterpreterOutputImageImage `json:"image"` // Metadata for the response, check the presence of optional fields with the // [resp.Field.IsPresent] method. JSON struct { Index resp.Field Type resp.Field Image resp.Field ExtraFields map[string]resp.Field raw string } `json:"-"` } // Returns the unmodified JSON received from the API func (r CodeInterpreterOutputImage) RawJSON() string { return r.JSON.raw } func (r *CodeInterpreterOutputImage) UnmarshalJSON(data []byte) error { return apijson.UnmarshalRoot(data, r) } type CodeInterpreterOutputImageImage struct { // The [file](https://platform.openai.com/docs/api-reference/files) ID of the // image. 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 CodeInterpreterOutputImageImage) RawJSON() string { return r.JSON.raw } func (r *CodeInterpreterOutputImageImage) UnmarshalJSON(data []byte) error { return apijson.UnmarshalRoot(data, r) } // Details of the Code Interpreter tool call the run step was involved in. type CodeInterpreterToolCall struct { // The ID of the tool call. ID string `json:"id,required"` // The Code Interpreter tool call definition. CodeInterpreter CodeInterpreterToolCallCodeInterpreter `json:"code_interpreter,required"` // The type of tool call. This is always going to be `code_interpreter` for this // type of tool call. Type constant.CodeInterpreter `json:"type,required"` // Metadata for the response, check the presence of optional fields with the // [resp.Field.IsPresent] method. JSON struct { ID resp.Field CodeInterpreter resp.Field Type resp.Field ExtraFields map[string]resp.Field raw string } `json:"-"` } // Returns the unmodified JSON received from the API func (r CodeInterpreterToolCall) RawJSON() string { return r.JSON.raw } func (r *CodeInterpreterToolCall) UnmarshalJSON(data []byte) error { return apijson.UnmarshalRoot(data, r) } // The Code Interpreter tool call definition. type CodeInterpreterToolCallCodeInterpreter struct { // The input to the Code Interpreter tool call. Input string `json:"input,required"` // The outputs from the Code Interpreter tool call. Code Interpreter can output one // or more items, including text (`logs`) or images (`image`). Each of these are // represented by a different object type. Outputs []CodeInterpreterToolCallCodeInterpreterOutputUnion `json:"outputs,required"` // Metadata for the response, check the presence of optional fields with the // [resp.Field.IsPresent] method. JSON struct { Input resp.Field Outputs resp.Field ExtraFields map[string]resp.Field raw string } `json:"-"` } // Returns the unmodified JSON received from the API func (r CodeInterpreterToolCallCodeInterpreter) RawJSON() string { return r.JSON.raw } func (r *CodeInterpreterToolCallCodeInterpreter) UnmarshalJSON(data []byte) error { return apijson.UnmarshalRoot(data, r) } // CodeInterpreterToolCallCodeInterpreterOutputUnion contains all possible // properties and values from [CodeInterpreterToolCallCodeInterpreterOutputLogs], // [CodeInterpreterToolCallCodeInterpreterOutputImage]. // // Use the [CodeInterpreterToolCallCodeInterpreterOutputUnion.AsAny] method to // switch on the variant. // // Use the methods beginning with 'As' to cast the union to one of its variants. type CodeInterpreterToolCallCodeInterpreterOutputUnion struct { // This field is from variant [CodeInterpreterToolCallCodeInterpreterOutputLogs]. Logs string `json:"logs"` // Any of "logs", "image". Type string `json:"type"` // This field is from variant [CodeInterpreterToolCallCodeInterpreterOutputImage]. Image CodeInterpreterToolCallCodeInterpreterOutputImageImage `json:"image"` JSON struct { Logs resp.Field Type resp.Field Image resp.Field raw string } `json:"-"` } // anyCodeInterpreterToolCallCodeInterpreterOutput is implemented by each variant // of [CodeInterpreterToolCallCodeInterpreterOutputUnion] to add type safety for // the return type of [CodeInterpreterToolCallCodeInterpreterOutputUnion.AsAny] type anyCodeInterpreterToolCallCodeInterpreterOutput interface { implCodeInterpreterToolCallCodeInterpreterOutputUnion() } func (CodeInterpreterToolCallCodeInterpreterOutputLogs) implCodeInterpreterToolCallCodeInterpreterOutputUnion() { } func (CodeInterpreterToolCallCodeInterpreterOutputImage) implCodeInterpreterToolCallCodeInterpreterOutputUnion() { } // Use the following switch statement to find the correct variant // // switch variant := CodeInterpreterToolCallCodeInterpreterOutputUnion.AsAny().(type) { // case CodeInterpreterToolCallCodeInterpreterOutputLogs: // case CodeInterpreterToolCallCodeInterpreterOutputImage: // default: // fmt.Errorf("no variant present") // } func (u CodeInterpreterToolCallCodeInterpreterOutputUnion) AsAny() anyCodeInterpreterToolCallCodeInterpreterOutput { switch u.Type { case "logs": return u.AsLogs() case "image": return u.AsImage() } return nil } func (u CodeInterpreterToolCallCodeInterpreterOutputUnion) AsLogs() (v CodeInterpreterToolCallCodeInterpreterOutputLogs) { apijson.UnmarshalRoot(json.RawMessage(u.JSON.raw), &v) return } func (u CodeInterpreterToolCallCodeInterpreterOutputUnion) AsImage() (v CodeInterpreterToolCallCodeInterpreterOutputImage) { apijson.UnmarshalRoot(json.RawMessage(u.JSON.raw), &v) return } // Returns the unmodified JSON received from the API func (u CodeInterpreterToolCallCodeInterpreterOutputUnion) RawJSON() string { return u.JSON.raw } func (r *CodeInterpreterToolCallCodeInterpreterOutputUnion) UnmarshalJSON(data []byte) error { return apijson.UnmarshalRoot(data, r) } // Text output from the Code Interpreter tool call as part of a run step. type CodeInterpreterToolCallCodeInterpreterOutputLogs struct { // The text output from the Code Interpreter tool call. Logs string `json:"logs,required"` // Always `logs`. Type constant.Logs `json:"type,required"` // Metadata for the response, check the presence of optional fields with the // [resp.Field.IsPresent] method. JSON struct { Logs resp.Field Type resp.Field ExtraFields map[string]resp.Field raw string } `json:"-"` } // Returns the unmodified JSON received from the API func (r CodeInterpreterToolCallCodeInterpreterOutputLogs) RawJSON() string { return r.JSON.raw } func (r *CodeInterpreterToolCallCodeInterpreterOutputLogs) UnmarshalJSON(data []byte) error { return apijson.UnmarshalRoot(data, r) } type CodeInterpreterToolCallCodeInterpreterOutputImage struct { Image CodeInterpreterToolCallCodeInterpreterOutputImageImage `json:"image,required"` // Always `image`. Type constant.Image `json:"type,required"` // Metadata for the response, check the presence of optional fields with the // [resp.Field.IsPresent] method. JSON struct { Image resp.Field Type resp.Field ExtraFields map[string]resp.Field raw string } `json:"-"` } // Returns the unmodified JSON received from the API func (r CodeInterpreterToolCallCodeInterpreterOutputImage) RawJSON() string { return r.JSON.raw } func (r *CodeInterpreterToolCallCodeInterpreterOutputImage) UnmarshalJSON(data []byte) error { return apijson.UnmarshalRoot(data, r) } type CodeInterpreterToolCallCodeInterpreterOutputImageImage struct { // The [file](https://platform.openai.com/docs/api-reference/files) ID of the // image. 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 CodeInterpreterToolCallCodeInterpreterOutputImageImage) RawJSON() string { return r.JSON.raw } func (r *CodeInterpreterToolCallCodeInterpreterOutputImageImage) UnmarshalJSON(data []byte) error { return apijson.UnmarshalRoot(data, r) } // Details of the Code Interpreter tool call the run step was involved in. type CodeInterpreterToolCallDelta struct { // The index of the tool call in the tool calls array. Index int64 `json:"index,required"` // The type of tool call. This is always going to be `code_interpreter` for this // type of tool call. Type constant.CodeInterpreter `json:"type,required"` // The ID of the tool call. ID string `json:"id"` // The Code Interpreter tool call definition. CodeInterpreter CodeInterpreterToolCallDeltaCodeInterpreter `json:"code_interpreter"` // Metadata for the response, check the presence of optional fields with the // [resp.Field.IsPresent] method. JSON struct { Index resp.Field Type resp.Field ID resp.Field CodeInterpreter resp.Field ExtraFields map[string]resp.Field raw string } `json:"-"` } // Returns the unmodified JSON received from the API func (r CodeInterpreterToolCallDelta) RawJSON() string { return r.JSON.raw } func (r *CodeInterpreterToolCallDelta) UnmarshalJSON(data []byte) error { return apijson.UnmarshalRoot(data, r) } // The Code Interpreter tool call definition. type CodeInterpreterToolCallDeltaCodeInterpreter struct { // The input to the Code Interpreter tool call. Input string `json:"input"` // The outputs from the Code Interpreter tool call. Code Interpreter can output one // or more items, including text (`logs`) or images (`image`). Each of these are // represented by a different object type. Outputs []CodeInterpreterToolCallDeltaCodeInterpreterOutputUnion `json:"outputs"` // Metadata for the response, check the presence of optional fields with the // [resp.Field.IsPresent] method. JSON struct { Input resp.Field Outputs resp.Field ExtraFields map[string]resp.Field raw string } `json:"-"` } // Returns the unmodified JSON received from the API func (r CodeInterpreterToolCallDeltaCodeInterpreter) RawJSON() string { return r.JSON.raw } func (r *CodeInterpreterToolCallDeltaCodeInterpreter) UnmarshalJSON(data []byte) error { return apijson.UnmarshalRoot(data, r) } // CodeInterpreterToolCallDeltaCodeInterpreterOutputUnion contains all possible // properties and values from [CodeInterpreterLogs], [CodeInterpreterOutputImage]. // // Use the [CodeInterpreterToolCallDeltaCodeInterpreterOutputUnion.AsAny] method to // switch on the variant. // // Use the methods beginning with 'As' to cast the union to one of its variants. type CodeInterpreterToolCallDeltaCodeInterpreterOutputUnion struct { Index int64 `json:"index"` // Any of "logs", "image". Type string `json:"type"` // This field is from variant [CodeInterpreterLogs]. Logs string `json:"logs"` // This field is from variant [CodeInterpreterOutputImage]. Image CodeInterpreterOutputImageImage `json:"image"` JSON struct { Index resp.Field Type resp.Field Logs resp.Field Image resp.Field raw string } `json:"-"` } // anyCodeInterpreterToolCallDeltaCodeInterpreterOutput is implemented by each // variant of [CodeInterpreterToolCallDeltaCodeInterpreterOutputUnion] to add type // safety for the return type of // [CodeInterpreterToolCallDeltaCodeInterpreterOutputUnion.AsAny] type anyCodeInterpreterToolCallDeltaCodeInterpreterOutput interface { implCodeInterpreterToolCallDeltaCodeInterpreterOutputUnion() } func (CodeInterpreterLogs) implCodeInterpreterToolCallDeltaCodeInterpreterOutputUnion() {} func (CodeInterpreterOutputImage) implCodeInterpreterToolCallDeltaCodeInterpreterOutputUnion() {} // Use the following switch statement to find the correct variant // // switch variant := CodeInterpreterToolCallDeltaCodeInterpreterOutputUnion.AsAny().(type) { // case CodeInterpreterLogs: // case CodeInterpreterOutputImage: // default: // fmt.Errorf("no variant present") // } func (u CodeInterpreterToolCallDeltaCodeInterpreterOutputUnion) AsAny() anyCodeInterpreterToolCallDeltaCodeInterpreterOutput { switch u.Type { case "logs": return u.AsLogs() case "image": return u.AsImage() } return nil } func (u CodeInterpreterToolCallDeltaCodeInterpreterOutputUnion) AsLogs() (v CodeInterpreterLogs) { apijson.UnmarshalRoot(json.RawMessage(u.JSON.raw), &v) return } func (u CodeInterpreterToolCallDeltaCodeInterpreterOutputUnion) AsImage() (v CodeInterpreterOutputImage) { apijson.UnmarshalRoot(json.RawMessage(u.JSON.raw), &v) return } // Returns the unmodified JSON received from the API func (u CodeInterpreterToolCallDeltaCodeInterpreterOutputUnion) RawJSON() string { return u.JSON.raw } func (r *CodeInterpreterToolCallDeltaCodeInterpreterOutputUnion) UnmarshalJSON(data []byte) error { return apijson.UnmarshalRoot(data, r) } type FileSearchToolCall struct { // The ID of the tool call object. ID string `json:"id,required"` // For now, this is always going to be an empty object. FileSearch FileSearchToolCallFileSearch `json:"file_search,required"` // The type of tool call. This is always going to be `file_search` for this type of // tool call. Type constant.FileSearch `json:"type,required"` // Metadata for the response, check the presence of optional fields with the // [resp.Field.IsPresent] method. JSON struct { ID resp.Field FileSearch resp.Field Type resp.Field ExtraFields map[string]resp.Field raw string } `json:"-"` } // Returns the unmodified JSON received from the API func (r FileSearchToolCall) RawJSON() string { return r.JSON.raw } func (r *FileSearchToolCall) UnmarshalJSON(data []byte) error { return apijson.UnmarshalRoot(data, r) } // For now, this is always going to be an empty object. type FileSearchToolCallFileSearch struct { // The ranking options for the file search. RankingOptions FileSearchToolCallFileSearchRankingOptions `json:"ranking_options"` // The results of the file search. Results []FileSearchToolCallFileSearchResult `json:"results"` // Metadata for the response, check the presence of optional fields with the // [resp.Field.IsPresent] method. JSON struct { RankingOptions resp.Field Results resp.Field ExtraFields map[string]resp.Field raw string } `json:"-"` } // Returns the unmodified JSON received from the API func (r FileSearchToolCallFileSearch) RawJSON() string { return r.JSON.raw } func (r *FileSearchToolCallFileSearch) UnmarshalJSON(data []byte) error { return apijson.UnmarshalRoot(data, r) } // The ranking options for the file search. type FileSearchToolCallFileSearchRankingOptions struct { // The ranker to use for the file search. If not specified will use the `auto` // ranker. // // Any of "auto", "default_2024_08_21". Ranker string `json:"ranker,required"` // The score threshold for the file search. All values must be a floating point // number between 0 and 1. ScoreThreshold float64 `json:"score_threshold,required"` // Metadata for the response, check the presence of optional fields with the // [resp.Field.IsPresent] method. JSON struct { Ranker resp.Field ScoreThreshold resp.Field ExtraFields map[string]resp.Field raw string } `json:"-"` } // Returns the unmodified JSON received from the API func (r FileSearchToolCallFileSearchRankingOptions) RawJSON() string { return r.JSON.raw } func (r *FileSearchToolCallFileSearchRankingOptions) UnmarshalJSON(data []byte) error { return apijson.UnmarshalRoot(data, r) } // A result instance of the file search. type FileSearchToolCallFileSearchResult struct { // The ID of the file that result was found in. FileID string `json:"file_id,required"` // The name of the file that result was found in. FileName string `json:"file_name,required"` // The score of the result. All values must be a floating point number between 0 // and 1. Score float64 `json:"score,required"` // The content of the result that was found. The content is only included if // requested via the include query parameter. Content []FileSearchToolCallFileSearchResultContent `json:"content"` // Metadata for the response, check the presence of optional fields with the // [resp.Field.IsPresent] method. JSON struct { FileID resp.Field FileName resp.Field Score resp.Field Content resp.Field ExtraFields map[string]resp.Field raw string } `json:"-"` } // Returns the unmodified JSON received from the API func (r FileSearchToolCallFileSearchResult) RawJSON() string { return r.JSON.raw } func (r *FileSearchToolCallFileSearchResult) UnmarshalJSON(data []byte) error { return apijson.UnmarshalRoot(data, r) } type FileSearchToolCallFileSearchResultContent struct { // The text content of the file. Text string `json:"text"` // The type of the content. // // Any of "text". Type string `json:"type"` // 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 FileSearchToolCallFileSearchResultContent) RawJSON() string { return r.JSON.raw } func (r *FileSearchToolCallFileSearchResultContent) UnmarshalJSON(data []byte) error { return apijson.UnmarshalRoot(data, r) } type FileSearchToolCallDelta struct { // For now, this is always going to be an empty object. FileSearch interface{} `json:"file_search,required"` // The index of the tool call in the tool calls array. Index int64 `json:"index,required"` // The type of tool call. This is always going to be `file_search` for this type of // tool call. Type constant.FileSearch `json:"type,required"` // The ID of the tool call object. ID string `json:"id"` // Metadata for the response, check the presence of optional fields with the // [resp.Field.IsPresent] method. JSON struct { FileSearch resp.Field Index resp.Field Type resp.Field ID resp.Field ExtraFields map[string]resp.Field raw string } `json:"-"` } // Returns the unmodified JSON received from the API func (r FileSearchToolCallDelta) RawJSON() string { return r.JSON.raw } func (r *FileSearchToolCallDelta) UnmarshalJSON(data []byte) error { return apijson.UnmarshalRoot(data, r) } type FunctionToolCall struct { // The ID of the tool call object. ID string `json:"id,required"` // The definition of the function that was called. Function FunctionToolCallFunction `json:"function,required"` // The type of tool call. This is always going to be `function` for this type of // tool call. Type constant.Function `json:"type,required"` // Metadata for the response, check the presence of optional fields with the // [resp.Field.IsPresent] method. JSON struct { ID resp.Field Function resp.Field Type resp.Field ExtraFields map[string]resp.Field raw string } `json:"-"` } // Returns the unmodified JSON received from the API func (r FunctionToolCall) RawJSON() string { return r.JSON.raw } func (r *FunctionToolCall) UnmarshalJSON(data []byte) error { return apijson.UnmarshalRoot(data, r) } // The definition of the function that was called. type FunctionToolCallFunction struct { // The arguments passed to the function. Arguments string `json:"arguments,required"` // The name of the function. Name string `json:"name,required"` // The output of the function. This will be `null` if the outputs have not been // [submitted](https://platform.openai.com/docs/api-reference/runs/submitToolOutputs) // yet. Output string `json:"output,required"` // Metadata for the response, check the presence of optional fields with the // [resp.Field.IsPresent] method. JSON struct { Arguments resp.Field Name resp.Field Output resp.Field ExtraFields map[string]resp.Field raw string } `json:"-"` } // Returns the unmodified JSON received from the API func (r FunctionToolCallFunction) RawJSON() string { return r.JSON.raw } func (r *FunctionToolCallFunction) UnmarshalJSON(data []byte) error { return apijson.UnmarshalRoot(data, r) } type FunctionToolCallDelta struct { // The index of the tool call in the tool calls array. Index int64 `json:"index,required"` // The type of tool call. This is always going to be `function` for this type of // tool call. Type constant.Function `json:"type,required"` // The ID of the tool call object. ID string `json:"id"` // The definition of the function that was called. Function FunctionToolCallDeltaFunction `json:"function"` // Metadata for the response, check the presence of optional fields with the // [resp.Field.IsPresent] method. JSON struct { Index resp.Field Type resp.Field ID resp.Field Function resp.Field ExtraFields map[string]resp.Field raw string } `json:"-"` } // Returns the unmodified JSON received from the API func (r FunctionToolCallDelta) RawJSON() string { return r.JSON.raw } func (r *FunctionToolCallDelta) UnmarshalJSON(data []byte) error { return apijson.UnmarshalRoot(data, r) } // The definition of the function that was called. type FunctionToolCallDeltaFunction struct { // The arguments passed to the function. Arguments string `json:"arguments"` // The name of the function. Name string `json:"name"` // The output of the function. This will be `null` if the outputs have not been // [submitted](https://platform.openai.com/docs/api-reference/runs/submitToolOutputs) // yet. Output string `json:"output,nullable"` // Metadata for the response, check the presence of optional fields with the // [resp.Field.IsPresent] method. JSON struct { Arguments resp.Field Name resp.Field Output resp.Field ExtraFields map[string]resp.Field raw string } `json:"-"` } // Returns the unmodified JSON received from the API func (r FunctionToolCallDeltaFunction) RawJSON() string { return r.JSON.raw } func (r *FunctionToolCallDeltaFunction) UnmarshalJSON(data []byte) error { return apijson.UnmarshalRoot(data, r) } // Details of the message creation by the run step. type MessageCreationStepDetails struct { MessageCreation MessageCreationStepDetailsMessageCreation `json:"message_creation,required"` // Always `message_creation`. Type constant.MessageCreation `json:"type,required"` // Metadata for the response, check the presence of optional fields with the // [resp.Field.IsPresent] method. JSON struct { MessageCreation resp.Field Type resp.Field ExtraFields map[string]resp.Field raw string } `json:"-"` } // Returns the unmodified JSON received from the API func (r MessageCreationStepDetails) RawJSON() string { return r.JSON.raw } func (r *MessageCreationStepDetails) UnmarshalJSON(data []byte) error { return apijson.UnmarshalRoot(data, r) } type MessageCreationStepDetailsMessageCreation struct { // The ID of the message that was created by this run step. MessageID string `json:"message_id,required"` // Metadata for the response, check the presence of optional fields with the // [resp.Field.IsPresent] method. JSON struct { MessageID resp.Field ExtraFields map[string]resp.Field raw string } `json:"-"` } // Returns the unmodified JSON received from the API func (r MessageCreationStepDetailsMessageCreation) RawJSON() string { return r.JSON.raw } func (r *MessageCreationStepDetailsMessageCreation) UnmarshalJSON(data []byte) error { return apijson.UnmarshalRoot(data, r) } // Represents a step in execution of a run. type RunStep struct { // The identifier of the run step, which can be referenced in API endpoints. ID string `json:"id,required"` // The ID of the // [assistant](https://platform.openai.com/docs/api-reference/assistants) // associated with the run step. AssistantID string `json:"assistant_id,required"` // The Unix timestamp (in seconds) for when the run step was cancelled. CancelledAt int64 `json:"cancelled_at,required"` // The Unix timestamp (in seconds) for when the run step completed. CompletedAt int64 `json:"completed_at,required"` // The Unix timestamp (in seconds) for when the run step was created. CreatedAt int64 `json:"created_at,required"` // The Unix timestamp (in seconds) for when the run step expired. A step is // considered expired if the parent run is expired. ExpiredAt int64 `json:"expired_at,required"` // The Unix timestamp (in seconds) for when the run step failed. FailedAt int64 `json:"failed_at,required"` // The last error associated with this run step. Will be `null` if there are no // errors. LastError RunStepLastError `json:"last_error,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.run.step`. Object constant.ThreadRunStep `json:"object,required"` // The ID of the [run](https://platform.openai.com/docs/api-reference/runs) that // this run step is a part of. RunID string `json:"run_id,required"` // The status of the run step, which can be either `in_progress`, `cancelled`, // `failed`, `completed`, or `expired`. // // Any of "in_progress", "cancelled", "failed", "completed", "expired". Status RunStepStatus `json:"status,required"` // The details of the run step. StepDetails RunStepStepDetailsUnion `json:"step_details,required"` // The ID of the [thread](https://platform.openai.com/docs/api-reference/threads) // that was run. ThreadID string `json:"thread_id,required"` // The type of run step, which can be either `message_creation` or `tool_calls`. // // Any of "message_creation", "tool_calls". Type RunStepType `json:"type,required"` // Usage statistics related to the run step. This value will be `null` while the // run step's status is `in_progress`. Usage RunStepUsage `json:"usage,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 CancelledAt resp.Field CompletedAt resp.Field CreatedAt resp.Field ExpiredAt resp.Field FailedAt resp.Field LastError resp.Field Metadata resp.Field Object resp.Field RunID resp.Field Status resp.Field StepDetails resp.Field ThreadID resp.Field Type resp.Field Usage resp.Field ExtraFields map[string]resp.Field raw string } `json:"-"` } // Returns the unmodified JSON received from the API func (r RunStep) RawJSON() string { return r.JSON.raw } func (r *RunStep) UnmarshalJSON(data []byte) error { return apijson.UnmarshalRoot(data, r) } // The last error associated with this run step. Will be `null` if there are no // errors. type RunStepLastError struct { // One of `server_error` or `rate_limit_exceeded`. // // Any of "server_error", "rate_limit_exceeded". Code string `json:"code,required"` // A human-readable description of the error. Message string `json:"message,required"` // Metadata for the response, check the presence of optional fields with the // [resp.Field.IsPresent] method. JSON struct { Code resp.Field Message resp.Field ExtraFields map[string]resp.Field raw string } `json:"-"` } // Returns the unmodified JSON received from the API func (r RunStepLastError) RawJSON() string { return r.JSON.raw } func (r *RunStepLastError) UnmarshalJSON(data []byte) error { return apijson.UnmarshalRoot(data, r) } // The status of the run step, which can be either `in_progress`, `cancelled`, // `failed`, `completed`, or `expired`. type RunStepStatus string const ( RunStepStatusInProgress RunStepStatus = "in_progress" RunStepStatusCancelled RunStepStatus = "cancelled" RunStepStatusFailed RunStepStatus = "failed" RunStepStatusCompleted RunStepStatus = "completed" RunStepStatusExpired RunStepStatus = "expired" ) // RunStepStepDetailsUnion contains all possible properties and values from // [MessageCreationStepDetails], [ToolCallsStepDetails]. // // Use the [RunStepStepDetailsUnion.AsAny] method to switch on the variant. // // Use the methods beginning with 'As' to cast the union to one of its variants. type RunStepStepDetailsUnion struct { // This field is from variant [MessageCreationStepDetails]. MessageCreation MessageCreationStepDetailsMessageCreation `json:"message_creation"` // Any of "message_creation", "tool_calls". Type string `json:"type"` // This field is from variant [ToolCallsStepDetails]. ToolCalls []ToolCallUnion `json:"tool_calls"` JSON struct { MessageCreation resp.Field Type resp.Field ToolCalls resp.Field raw string } `json:"-"` } // anyRunStepStepDetails is implemented by each variant of // [RunStepStepDetailsUnion] to add type safety for the return type of // [RunStepStepDetailsUnion.AsAny] type anyRunStepStepDetails interface { implRunStepStepDetailsUnion() } func (MessageCreationStepDetails) implRunStepStepDetailsUnion() {} func (ToolCallsStepDetails) implRunStepStepDetailsUnion() {} // Use the following switch statement to find the correct variant // // switch variant := RunStepStepDetailsUnion.AsAny().(type) { // case MessageCreationStepDetails: // case ToolCallsStepDetails: // default: // fmt.Errorf("no variant present") // } func (u RunStepStepDetailsUnion) AsAny() anyRunStepStepDetails { switch u.Type { case "message_creation": return u.AsMessageCreation() case "tool_calls": return u.AsToolCalls() } return nil } func (u RunStepStepDetailsUnion) AsMessageCreation() (v MessageCreationStepDetails) { apijson.UnmarshalRoot(json.RawMessage(u.JSON.raw), &v) return } func (u RunStepStepDetailsUnion) AsToolCalls() (v ToolCallsStepDetails) { apijson.UnmarshalRoot(json.RawMessage(u.JSON.raw), &v) return } // Returns the unmodified JSON received from the API func (u RunStepStepDetailsUnion) RawJSON() string { return u.JSON.raw } func (r *RunStepStepDetailsUnion) UnmarshalJSON(data []byte) error { return apijson.UnmarshalRoot(data, r) } // The type of run step, which can be either `message_creation` or `tool_calls`. type RunStepType string const ( RunStepTypeMessageCreation RunStepType = "message_creation" RunStepTypeToolCalls RunStepType = "tool_calls" ) // Usage statistics related to the run step. This value will be `null` while the // run step's status is `in_progress`. type RunStepUsage struct { // Number of completion tokens used over the course of the run step. CompletionTokens int64 `json:"completion_tokens,required"` // Number of prompt tokens used over the course of the run step. PromptTokens int64 `json:"prompt_tokens,required"` // Total number of tokens used (prompt + completion). TotalTokens int64 `json:"total_tokens,required"` // Metadata for the response, check the presence of optional fields with the // [resp.Field.IsPresent] method. JSON struct { CompletionTokens resp.Field PromptTokens resp.Field TotalTokens resp.Field ExtraFields map[string]resp.Field raw string } `json:"-"` } // Returns the unmodified JSON received from the API func (r RunStepUsage) RawJSON() string { return r.JSON.raw } func (r *RunStepUsage) UnmarshalJSON(data []byte) error { return apijson.UnmarshalRoot(data, r) } // The delta containing the fields that have changed on the run step. type RunStepDelta struct { // The details of the run step. StepDetails RunStepDeltaStepDetailsUnion `json:"step_details"` // Metadata for the response, check the presence of optional fields with the // [resp.Field.IsPresent] method. JSON struct { StepDetails resp.Field ExtraFields map[string]resp.Field raw string } `json:"-"` } // Returns the unmodified JSON received from the API func (r RunStepDelta) RawJSON() string { return r.JSON.raw } func (r *RunStepDelta) UnmarshalJSON(data []byte) error { return apijson.UnmarshalRoot(data, r) } // RunStepDeltaStepDetailsUnion contains all possible properties and values from // [RunStepDeltaMessageDelta], [ToolCallDeltaObject]. // // Use the [RunStepDeltaStepDetailsUnion.AsAny] method to switch on the variant. // // Use the methods beginning with 'As' to cast the union to one of its variants. type RunStepDeltaStepDetailsUnion struct { // Any of "message_creation", "tool_calls". Type string `json:"type"` // This field is from variant [RunStepDeltaMessageDelta]. MessageCreation RunStepDeltaMessageDeltaMessageCreation `json:"message_creation"` // This field is from variant [ToolCallDeltaObject]. ToolCalls []ToolCallDeltaUnion `json:"tool_calls"` JSON struct { Type resp.Field MessageCreation resp.Field ToolCalls resp.Field raw string } `json:"-"` } // anyRunStepDeltaStepDetails is implemented by each variant of // [RunStepDeltaStepDetailsUnion] to add type safety for the return type of // [RunStepDeltaStepDetailsUnion.AsAny] type anyRunStepDeltaStepDetails interface { implRunStepDeltaStepDetailsUnion() } func (RunStepDeltaMessageDelta) implRunStepDeltaStepDetailsUnion() {} func (ToolCallDeltaObject) implRunStepDeltaStepDetailsUnion() {} // Use the following switch statement to find the correct variant // // switch variant := RunStepDeltaStepDetailsUnion.AsAny().(type) { // case RunStepDeltaMessageDelta: // case ToolCallDeltaObject: // default: // fmt.Errorf("no variant present") // } func (u RunStepDeltaStepDetailsUnion) AsAny() anyRunStepDeltaStepDetails { switch u.Type { case "message_creation": return u.AsMessageCreation() case "tool_calls": return u.AsToolCalls() } return nil } func (u RunStepDeltaStepDetailsUnion) AsMessageCreation() (v RunStepDeltaMessageDelta) { apijson.UnmarshalRoot(json.RawMessage(u.JSON.raw), &v) return } func (u RunStepDeltaStepDetailsUnion) AsToolCalls() (v ToolCallDeltaObject) { apijson.UnmarshalRoot(json.RawMessage(u.JSON.raw), &v) return } // Returns the unmodified JSON received from the API func (u RunStepDeltaStepDetailsUnion) RawJSON() string { return u.JSON.raw } func (r *RunStepDeltaStepDetailsUnion) UnmarshalJSON(data []byte) error { return apijson.UnmarshalRoot(data, r) } // Represents a run step delta i.e. any changed fields on a run step during // streaming. type RunStepDeltaEvent struct { // The identifier of the run step, which can be referenced in API endpoints. ID string `json:"id,required"` // The delta containing the fields that have changed on the run step. Delta RunStepDelta `json:"delta,required"` // The object type, which is always `thread.run.step.delta`. Object constant.ThreadRunStepDelta `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 RunStepDeltaEvent) RawJSON() string { return r.JSON.raw } func (r *RunStepDeltaEvent) UnmarshalJSON(data []byte) error { return apijson.UnmarshalRoot(data, r) } // Details of the message creation by the run step. type RunStepDeltaMessageDelta struct { // Always `message_creation`. Type constant.MessageCreation `json:"type,required"` MessageCreation RunStepDeltaMessageDeltaMessageCreation `json:"message_creation"` // Metadata for the response, check the presence of optional fields with the // [resp.Field.IsPresent] method. JSON struct { Type resp.Field MessageCreation resp.Field ExtraFields map[string]resp.Field raw string } `json:"-"` } // Returns the unmodified JSON received from the API func (r RunStepDeltaMessageDelta) RawJSON() string { return r.JSON.raw } func (r *RunStepDeltaMessageDelta) UnmarshalJSON(data []byte) error { return apijson.UnmarshalRoot(data, r) } type RunStepDeltaMessageDeltaMessageCreation struct { // The ID of the message that was created by this run step. MessageID string `json:"message_id"` // Metadata for the response, check the presence of optional fields with the // [resp.Field.IsPresent] method. JSON struct { MessageID resp.Field ExtraFields map[string]resp.Field raw string } `json:"-"` } // Returns the unmodified JSON received from the API func (r RunStepDeltaMessageDeltaMessageCreation) RawJSON() string { return r.JSON.raw } func (r *RunStepDeltaMessageDeltaMessageCreation) UnmarshalJSON(data []byte) error { return apijson.UnmarshalRoot(data, r) } type RunStepInclude string const ( RunStepIncludeStepDetailsToolCallsFileSearchResultsContent RunStepInclude = "step_details.tool_calls[*].file_search.results[*].content" ) // ToolCallUnion contains all possible properties and values from // [CodeInterpreterToolCall], [FileSearchToolCall], [FunctionToolCall]. // // Use the [ToolCallUnion.AsAny] method to switch on the variant. // // Use the methods beginning with 'As' to cast the union to one of its variants. type ToolCallUnion struct { ID string `json:"id"` // This field is from variant [CodeInterpreterToolCall]. CodeInterpreter CodeInterpreterToolCallCodeInterpreter `json:"code_interpreter"` // Any of "code_interpreter", "file_search", "function". Type string `json:"type"` // This field is from variant [FileSearchToolCall]. FileSearch FileSearchToolCallFileSearch `json:"file_search"` // This field is from variant [FunctionToolCall]. Function FunctionToolCallFunction `json:"function"` JSON struct { ID resp.Field CodeInterpreter resp.Field Type resp.Field FileSearch resp.Field Function resp.Field raw string } `json:"-"` } // anyToolCall is implemented by each variant of [ToolCallUnion] to add type safety // for the return type of [ToolCallUnion.AsAny] type anyToolCall interface { implToolCallUnion() } func (CodeInterpreterToolCall) implToolCallUnion() {} func (FileSearchToolCall) implToolCallUnion() {} func (FunctionToolCall) implToolCallUnion() {} // Use the following switch statement to find the correct variant // // switch variant := ToolCallUnion.AsAny().(type) { // case CodeInterpreterToolCall: // case FileSearchToolCall: // case FunctionToolCall: // default: // fmt.Errorf("no variant present") // } func (u ToolCallUnion) AsAny() anyToolCall { switch u.Type { case "code_interpreter": return u.AsCodeInterpreter() case "file_search": return u.AsFileSearch() case "function": return u.AsFunction() } return nil } func (u ToolCallUnion) AsCodeInterpreter() (v CodeInterpreterToolCall) { apijson.UnmarshalRoot(json.RawMessage(u.JSON.raw), &v) return } func (u ToolCallUnion) AsFileSearch() (v FileSearchToolCall) { apijson.UnmarshalRoot(json.RawMessage(u.JSON.raw), &v) return } func (u ToolCallUnion) AsFunction() (v FunctionToolCall) { apijson.UnmarshalRoot(json.RawMessage(u.JSON.raw), &v) return } // Returns the unmodified JSON received from the API func (u ToolCallUnion) RawJSON() string { return u.JSON.raw } func (r *ToolCallUnion) UnmarshalJSON(data []byte) error { return apijson.UnmarshalRoot(data, r) } // ToolCallDeltaUnion contains all possible properties and values from // [CodeInterpreterToolCallDelta], [FileSearchToolCallDelta], // [FunctionToolCallDelta]. // // Use the [ToolCallDeltaUnion.AsAny] method to switch on the variant. // // Use the methods beginning with 'As' to cast the union to one of its variants. type ToolCallDeltaUnion struct { Index int64 `json:"index"` // Any of "code_interpreter", "file_search", "function". Type string `json:"type"` ID string `json:"id"` // This field is from variant [CodeInterpreterToolCallDelta]. CodeInterpreter CodeInterpreterToolCallDeltaCodeInterpreter `json:"code_interpreter"` // This field is from variant [FileSearchToolCallDelta]. FileSearch interface{} `json:"file_search"` // This field is from variant [FunctionToolCallDelta]. Function FunctionToolCallDeltaFunction `json:"function"` JSON struct { Index resp.Field Type resp.Field ID resp.Field CodeInterpreter resp.Field FileSearch resp.Field Function resp.Field raw string } `json:"-"` } // anyToolCallDelta is implemented by each variant of [ToolCallDeltaUnion] to add // type safety for the return type of [ToolCallDeltaUnion.AsAny] type anyToolCallDelta interface { implToolCallDeltaUnion() } func (CodeInterpreterToolCallDelta) implToolCallDeltaUnion() {} func (FileSearchToolCallDelta) implToolCallDeltaUnion() {} func (FunctionToolCallDelta) implToolCallDeltaUnion() {} // Use the following switch statement to find the correct variant // // switch variant := ToolCallDeltaUnion.AsAny().(type) { // case CodeInterpreterToolCallDelta: // case FileSearchToolCallDelta: // case FunctionToolCallDelta: // default: // fmt.Errorf("no variant present") // } func (u ToolCallDeltaUnion) AsAny() anyToolCallDelta { switch u.Type { case "code_interpreter": return u.AsCodeInterpreter() case "file_search": return u.AsFileSearch() case "function": return u.AsFunction() } return nil } func (u ToolCallDeltaUnion) AsCodeInterpreter() (v CodeInterpreterToolCallDelta) { apijson.UnmarshalRoot(json.RawMessage(u.JSON.raw), &v) return } func (u ToolCallDeltaUnion) AsFileSearch() (v FileSearchToolCallDelta) { apijson.UnmarshalRoot(json.RawMessage(u.JSON.raw), &v) return } func (u ToolCallDeltaUnion) AsFunction() (v FunctionToolCallDelta) { apijson.UnmarshalRoot(json.RawMessage(u.JSON.raw), &v) return } // Returns the unmodified JSON received from the API func (u ToolCallDeltaUnion) RawJSON() string { return u.JSON.raw } func (r *ToolCallDeltaUnion) UnmarshalJSON(data []byte) error { return apijson.UnmarshalRoot(data, r) } // Details of the tool call. type ToolCallDeltaObject struct { // Always `tool_calls`. Type constant.ToolCalls `json:"type,required"` // An array of tool calls the run step was involved in. These can be associated // with one of three types of tools: `code_interpreter`, `file_search`, or // `function`. ToolCalls []ToolCallDeltaUnion `json:"tool_calls"` // Metadata for the response, check the presence of optional fields with the // [resp.Field.IsPresent] method. JSON struct { Type resp.Field ToolCalls resp.Field ExtraFields map[string]resp.Field raw string } `json:"-"` } // Returns the unmodified JSON received from the API func (r ToolCallDeltaObject) RawJSON() string { return r.JSON.raw } func (r *ToolCallDeltaObject) UnmarshalJSON(data []byte) error { return apijson.UnmarshalRoot(data, r) } // Details of the tool call. type ToolCallsStepDetails struct { // An array of tool calls the run step was involved in. These can be associated // with one of three types of tools: `code_interpreter`, `file_search`, or // `function`. ToolCalls []ToolCallUnion `json:"tool_calls,required"` // Always `tool_calls`. Type constant.ToolCalls `json:"type,required"` // Metadata for the response, check the presence of optional fields with the // [resp.Field.IsPresent] method. JSON struct { ToolCalls resp.Field Type resp.Field ExtraFields map[string]resp.Field raw string } `json:"-"` } // Returns the unmodified JSON received from the API func (r ToolCallsStepDetails) RawJSON() string { return r.JSON.raw } func (r *ToolCallsStepDetails) UnmarshalJSON(data []byte) error { return apijson.UnmarshalRoot(data, r) } type BetaThreadRunStepGetParams struct { // A list of additional fields to include in the response. Currently the only // supported value is `step_details.tool_calls[*].file_search.results[*].content` // to fetch the file search result content. // // See the // [file search tool documentation](https://platform.openai.com/docs/assistants/tools/file-search#customizing-file-search-settings) // for more information. Include []RunStepInclude `query:"include,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 BetaThreadRunStepGetParams) IsPresent() bool { return !param.IsOmitted(f) && !f.IsNull() } // URLQuery serializes [BetaThreadRunStepGetParams]'s query parameters as // `url.Values`. func (r BetaThreadRunStepGetParams) URLQuery() (v url.Values, err error) { return apiquery.MarshalWithSettings(r, apiquery.QuerySettings{ ArrayFormat: apiquery.ArrayQueryFormatBrackets, NestedFormat: apiquery.NestedQueryFormatBrackets, }) } type BetaThreadRunStepListParams 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:"-"` // A list of additional fields to include in the response. Currently the only // supported value is `step_details.tool_calls[*].file_search.results[*].content` // to fetch the file search result content. // // See the // [file search tool documentation](https://platform.openai.com/docs/assistants/tools/file-search#customizing-file-search-settings) // for more information. Include []RunStepInclude `query:"include,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 BetaThreadRunStepListParamsOrder `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 BetaThreadRunStepListParams) IsPresent() bool { return !param.IsOmitted(f) && !f.IsNull() } // URLQuery serializes [BetaThreadRunStepListParams]'s query parameters as // `url.Values`. func (r BetaThreadRunStepListParams) 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 BetaThreadRunStepListParamsOrder string const ( BetaThreadRunStepListParamsOrderAsc BetaThreadRunStepListParamsOrder = "asc" BetaThreadRunStepListParamsOrderDesc BetaThreadRunStepListParamsOrder = "desc" )