messagebatch.go (333 lines of code) (raw):

// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. package anthropic import ( "context" "encoding/json" "errors" "fmt" "net/http" "net/url" "time" "github.com/anthropics/anthropic-sdk-go/internal/apijson" "github.com/anthropics/anthropic-sdk-go/internal/apiquery" "github.com/anthropics/anthropic-sdk-go/internal/requestconfig" "github.com/anthropics/anthropic-sdk-go/option" "github.com/anthropics/anthropic-sdk-go/packages/jsonl" "github.com/anthropics/anthropic-sdk-go/packages/pagination" "github.com/anthropics/anthropic-sdk-go/packages/param" "github.com/anthropics/anthropic-sdk-go/packages/resp" "github.com/anthropics/anthropic-sdk-go/shared" "github.com/anthropics/anthropic-sdk-go/shared/constant" ) // MessageBatchService contains methods and other services that help with // interacting with the anthropic 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 [NewMessageBatchService] method instead. type MessageBatchService struct { Options []option.RequestOption } // NewMessageBatchService 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 NewMessageBatchService(opts ...option.RequestOption) (r MessageBatchService) { r = MessageBatchService{} r.Options = opts return } // Send a batch of Message creation requests. // // The Message Batches API can be used to process multiple Messages API requests at // once. Once a Message Batch is created, it begins processing immediately. Batches // can take up to 24 hours to complete. // // Learn more about the Message Batches API in our // [user guide](/en/docs/build-with-claude/batch-processing) func (r *MessageBatchService) New(ctx context.Context, body MessageBatchNewParams, opts ...option.RequestOption) (res *MessageBatch, err error) { opts = append(r.Options[:], opts...) path := "v1/messages/batches" err = requestconfig.ExecuteNewRequest(ctx, http.MethodPost, path, body, &res, opts...) return } // This endpoint is idempotent and can be used to poll for Message Batch // completion. To access the results of a Message Batch, make a request to the // `results_url` field in the response. // // Learn more about the Message Batches API in our // [user guide](/en/docs/build-with-claude/batch-processing) func (r *MessageBatchService) Get(ctx context.Context, messageBatchID string, opts ...option.RequestOption) (res *MessageBatch, err error) { opts = append(r.Options[:], opts...) if messageBatchID == "" { err = errors.New("missing required message_batch_id parameter") return } path := fmt.Sprintf("v1/messages/batches/%s", messageBatchID) err = requestconfig.ExecuteNewRequest(ctx, http.MethodGet, path, nil, &res, opts...) return } // List all Message Batches within a Workspace. Most recently created batches are // returned first. // // Learn more about the Message Batches API in our // [user guide](/en/docs/build-with-claude/batch-processing) func (r *MessageBatchService) List(ctx context.Context, query MessageBatchListParams, opts ...option.RequestOption) (res *pagination.Page[MessageBatch], err error) { var raw *http.Response opts = append(r.Options[:], opts...) opts = append([]option.RequestOption{option.WithResponseInto(&raw)}, opts...) path := "v1/messages/batches" 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 } // List all Message Batches within a Workspace. Most recently created batches are // returned first. // // Learn more about the Message Batches API in our // [user guide](/en/docs/build-with-claude/batch-processing) func (r *MessageBatchService) ListAutoPaging(ctx context.Context, query MessageBatchListParams, opts ...option.RequestOption) *pagination.PageAutoPager[MessageBatch] { return pagination.NewPageAutoPager(r.List(ctx, query, opts...)) } // Delete a Message Batch. // // Message Batches can only be deleted once they've finished processing. If you'd // like to delete an in-progress batch, you must first cancel it. // // Learn more about the Message Batches API in our // [user guide](/en/docs/build-with-claude/batch-processing) func (r *MessageBatchService) Delete(ctx context.Context, messageBatchID string, opts ...option.RequestOption) (res *DeletedMessageBatch, err error) { opts = append(r.Options[:], opts...) if messageBatchID == "" { err = errors.New("missing required message_batch_id parameter") return } path := fmt.Sprintf("v1/messages/batches/%s", messageBatchID) err = requestconfig.ExecuteNewRequest(ctx, http.MethodDelete, path, nil, &res, opts...) return } // Batches may be canceled any time before processing ends. Once cancellation is // initiated, the batch enters a `canceling` state, at which time the system may // complete any in-progress, non-interruptible requests before finalizing // cancellation. // // The number of canceled requests is specified in `request_counts`. To determine // which requests were canceled, check the individual results within the batch. // Note that cancellation may not result in any canceled requests if they were // non-interruptible. // // Learn more about the Message Batches API in our // [user guide](/en/docs/build-with-claude/batch-processing) func (r *MessageBatchService) Cancel(ctx context.Context, messageBatchID string, opts ...option.RequestOption) (res *MessageBatch, err error) { opts = append(r.Options[:], opts...) if messageBatchID == "" { err = errors.New("missing required message_batch_id parameter") return } path := fmt.Sprintf("v1/messages/batches/%s/cancel", messageBatchID) err = requestconfig.ExecuteNewRequest(ctx, http.MethodPost, path, nil, &res, opts...) return } // Streams the results of a Message Batch as a `.jsonl` file. // // Each line in the file is a JSON object containing the result of a single request // in the Message Batch. Results are not guaranteed to be in the same order as // requests. Use the `custom_id` field to match results to requests. // // Learn more about the Message Batches API in our // [user guide](/en/docs/build-with-claude/batch-processing) func (r *MessageBatchService) ResultsStreaming(ctx context.Context, messageBatchID string, opts ...option.RequestOption) (stream *jsonl.Stream[MessageBatchIndividualResponse]) { var ( raw *http.Response err error ) opts = append(r.Options[:], opts...) opts = append([]option.RequestOption{option.WithHeader("Accept", "application/x-jsonl")}, opts...) if messageBatchID == "" { err = errors.New("missing required message_batch_id parameter") return } path := fmt.Sprintf("v1/messages/batches/%s/results", messageBatchID) err = requestconfig.ExecuteNewRequest(ctx, http.MethodGet, path, nil, &raw, opts...) return jsonl.NewStream[MessageBatchIndividualResponse](raw, err) } type DeletedMessageBatch struct { // ID of the Message Batch. ID string `json:"id,required"` // Deleted object type. // // For Message Batches, this is always `"message_batch_deleted"`. Type constant.MessageBatchDeleted `json:"type,required"` // Metadata for the response, check the presence of optional fields with the // [resp.Field.IsPresent] method. JSON struct { ID resp.Field Type resp.Field ExtraFields map[string]resp.Field raw string } `json:"-"` } // Returns the unmodified JSON received from the API func (r DeletedMessageBatch) RawJSON() string { return r.JSON.raw } func (r *DeletedMessageBatch) UnmarshalJSON(data []byte) error { return apijson.UnmarshalRoot(data, r) } type MessageBatch struct { // Unique object identifier. // // The format and length of IDs may change over time. ID string `json:"id,required"` // RFC 3339 datetime string representing the time at which the Message Batch was // archived and its results became unavailable. ArchivedAt time.Time `json:"archived_at,required" format:"date-time"` // RFC 3339 datetime string representing the time at which cancellation was // initiated for the Message Batch. Specified only if cancellation was initiated. CancelInitiatedAt time.Time `json:"cancel_initiated_at,required" format:"date-time"` // RFC 3339 datetime string representing the time at which the Message Batch was // created. CreatedAt time.Time `json:"created_at,required" format:"date-time"` // RFC 3339 datetime string representing the time at which processing for the // Message Batch ended. Specified only once processing ends. // // Processing ends when every request in a Message Batch has either succeeded, // errored, canceled, or expired. EndedAt time.Time `json:"ended_at,required" format:"date-time"` // RFC 3339 datetime string representing the time at which the Message Batch will // expire and end processing, which is 24 hours after creation. ExpiresAt time.Time `json:"expires_at,required" format:"date-time"` // Processing status of the Message Batch. // // Any of "in_progress", "canceling", "ended". ProcessingStatus MessageBatchProcessingStatus `json:"processing_status,required"` // Tallies requests within the Message Batch, categorized by their status. // // Requests start as `processing` and move to one of the other statuses only once // processing of the entire batch ends. The sum of all values always matches the // total number of requests in the batch. RequestCounts MessageBatchRequestCounts `json:"request_counts,required"` // URL to a `.jsonl` file containing the results of the Message Batch requests. // Specified only once processing ends. // // Results in the file are not guaranteed to be in the same order as requests. Use // the `custom_id` field to match results to requests. ResultsURL string `json:"results_url,required"` // Object type. // // For Message Batches, this is always `"message_batch"`. Type constant.MessageBatch `json:"type,required"` // Metadata for the response, check the presence of optional fields with the // [resp.Field.IsPresent] method. JSON struct { ID resp.Field ArchivedAt resp.Field CancelInitiatedAt resp.Field CreatedAt resp.Field EndedAt resp.Field ExpiresAt resp.Field ProcessingStatus resp.Field RequestCounts resp.Field ResultsURL resp.Field Type resp.Field ExtraFields map[string]resp.Field raw string } `json:"-"` } // Returns the unmodified JSON received from the API func (r MessageBatch) RawJSON() string { return r.JSON.raw } func (r *MessageBatch) UnmarshalJSON(data []byte) error { return apijson.UnmarshalRoot(data, r) } // Processing status of the Message Batch. type MessageBatchProcessingStatus string const ( MessageBatchProcessingStatusInProgress MessageBatchProcessingStatus = "in_progress" MessageBatchProcessingStatusCanceling MessageBatchProcessingStatus = "canceling" MessageBatchProcessingStatusEnded MessageBatchProcessingStatus = "ended" ) type MessageBatchCanceledResult struct { Type constant.Canceled `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 MessageBatchCanceledResult) RawJSON() string { return r.JSON.raw } func (r *MessageBatchCanceledResult) UnmarshalJSON(data []byte) error { return apijson.UnmarshalRoot(data, r) } type MessageBatchErroredResult struct { Error shared.ErrorResponse `json:"error,required"` Type constant.Errored `json:"type,required"` // Metadata for the response, check the presence of optional fields with the // [resp.Field.IsPresent] method. JSON struct { Error resp.Field Type resp.Field ExtraFields map[string]resp.Field raw string } `json:"-"` } // Returns the unmodified JSON received from the API func (r MessageBatchErroredResult) RawJSON() string { return r.JSON.raw } func (r *MessageBatchErroredResult) UnmarshalJSON(data []byte) error { return apijson.UnmarshalRoot(data, r) } type MessageBatchExpiredResult struct { Type constant.Expired `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 MessageBatchExpiredResult) RawJSON() string { return r.JSON.raw } func (r *MessageBatchExpiredResult) UnmarshalJSON(data []byte) error { return apijson.UnmarshalRoot(data, r) } // This is a single line in the response `.jsonl` file and does not represent the // response as a whole. type MessageBatchIndividualResponse struct { // Developer-provided ID created for each request in a Message Batch. Useful for // matching results to requests, as results may be given out of request order. // // Must be unique for each request within the Message Batch. CustomID string `json:"custom_id,required"` // Processing result for this request. // // Contains a Message output if processing was successful, an error response if // processing failed, or the reason why processing was not attempted, such as // cancellation or expiration. Result MessageBatchResultUnion `json:"result,required"` // Metadata for the response, check the presence of optional fields with the // [resp.Field.IsPresent] method. JSON struct { CustomID resp.Field Result resp.Field ExtraFields map[string]resp.Field raw string } `json:"-"` } // Returns the unmodified JSON received from the API func (r MessageBatchIndividualResponse) RawJSON() string { return r.JSON.raw } func (r *MessageBatchIndividualResponse) UnmarshalJSON(data []byte) error { return apijson.UnmarshalRoot(data, r) } type MessageBatchRequestCounts struct { // Number of requests in the Message Batch that have been canceled. // // This is zero until processing of the entire Message Batch has ended. Canceled int64 `json:"canceled,required"` // Number of requests in the Message Batch that encountered an error. // // This is zero until processing of the entire Message Batch has ended. Errored int64 `json:"errored,required"` // Number of requests in the Message Batch that have expired. // // This is zero until processing of the entire Message Batch has ended. Expired int64 `json:"expired,required"` // Number of requests in the Message Batch that are processing. Processing int64 `json:"processing,required"` // Number of requests in the Message Batch that have completed successfully. // // This is zero until processing of the entire Message Batch has ended. Succeeded int64 `json:"succeeded,required"` // Metadata for the response, check the presence of optional fields with the // [resp.Field.IsPresent] method. JSON struct { Canceled resp.Field Errored resp.Field Expired resp.Field Processing resp.Field Succeeded resp.Field ExtraFields map[string]resp.Field raw string } `json:"-"` } // Returns the unmodified JSON received from the API func (r MessageBatchRequestCounts) RawJSON() string { return r.JSON.raw } func (r *MessageBatchRequestCounts) UnmarshalJSON(data []byte) error { return apijson.UnmarshalRoot(data, r) } // MessageBatchResultUnion contains all possible properties and values from // [MessageBatchSucceededResult], [MessageBatchErroredResult], // [MessageBatchCanceledResult], [MessageBatchExpiredResult]. // // Use the [MessageBatchResultUnion.AsAny] method to switch on the variant. // // Use the methods beginning with 'As' to cast the union to one of its variants. type MessageBatchResultUnion struct { // This field is from variant [MessageBatchSucceededResult]. Message Message `json:"message"` // Any of "succeeded", "errored", "canceled", "expired". Type string `json:"type"` // This field is from variant [MessageBatchErroredResult]. Error shared.ErrorResponse `json:"error"` JSON struct { Message resp.Field Type resp.Field Error resp.Field raw string } `json:"-"` } // Use the following switch statement to find the correct variant // // switch variant := MessageBatchResultUnion.AsAny().(type) { // case MessageBatchSucceededResult: // case MessageBatchErroredResult: // case MessageBatchCanceledResult: // case MessageBatchExpiredResult: // default: // fmt.Errorf("no variant present") // } func (u MessageBatchResultUnion) AsAny() any { switch u.Type { case "succeeded": return u.AsSucceededResult() case "errored": return u.AsErroredResult() case "canceled": return u.AsCanceledResult() case "expired": return u.AsExpiredResult() } return nil } func (u MessageBatchResultUnion) AsSucceededResult() (v MessageBatchSucceededResult) { apijson.UnmarshalRoot(json.RawMessage(u.JSON.raw), &v) return } func (u MessageBatchResultUnion) AsErroredResult() (v MessageBatchErroredResult) { apijson.UnmarshalRoot(json.RawMessage(u.JSON.raw), &v) return } func (u MessageBatchResultUnion) AsCanceledResult() (v MessageBatchCanceledResult) { apijson.UnmarshalRoot(json.RawMessage(u.JSON.raw), &v) return } func (u MessageBatchResultUnion) AsExpiredResult() (v MessageBatchExpiredResult) { apijson.UnmarshalRoot(json.RawMessage(u.JSON.raw), &v) return } // Returns the unmodified JSON received from the API func (u MessageBatchResultUnion) RawJSON() string { return u.JSON.raw } func (r *MessageBatchResultUnion) UnmarshalJSON(data []byte) error { return apijson.UnmarshalRoot(data, r) } type MessageBatchSucceededResult struct { Message Message `json:"message,required"` Type constant.Succeeded `json:"type,required"` // Metadata for the response, check the presence of optional fields with the // [resp.Field.IsPresent] method. JSON struct { Message resp.Field Type resp.Field ExtraFields map[string]resp.Field raw string } `json:"-"` } // Returns the unmodified JSON received from the API func (r MessageBatchSucceededResult) RawJSON() string { return r.JSON.raw } func (r *MessageBatchSucceededResult) UnmarshalJSON(data []byte) error { return apijson.UnmarshalRoot(data, r) } type MessageBatchNewParams struct { // List of requests for prompt completion. Each is an individual request to create // a Message. Requests []MessageBatchNewParamsRequest `json:"requests,omitzero,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 MessageBatchNewParams) IsPresent() bool { return !param.IsOmitted(f) && !f.IsNull() } func (r MessageBatchNewParams) MarshalJSON() (data []byte, err error) { type shadow MessageBatchNewParams return param.MarshalObject(r, (*shadow)(&r)) } // The properties CustomID, Params are required. type MessageBatchNewParamsRequest struct { // Developer-provided ID created for each request in a Message Batch. Useful for // matching results to requests, as results may be given out of request order. // // Must be unique for each request within the Message Batch. CustomID string `json:"custom_id,required"` // Messages API creation parameters for the individual request. // // See the [Messages API reference](/en/api/messages) for full documentation on // available parameters. Params MessageBatchNewParamsRequestParams `json:"params,omitzero,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 MessageBatchNewParamsRequest) IsPresent() bool { return !param.IsOmitted(f) && !f.IsNull() } func (r MessageBatchNewParamsRequest) MarshalJSON() (data []byte, err error) { type shadow MessageBatchNewParamsRequest return param.MarshalObject(r, (*shadow)(&r)) } // Messages API creation parameters for the individual request. // // See the [Messages API reference](/en/api/messages) for full documentation on // available parameters. // // The properties MaxTokens, Messages, Model are required. type MessageBatchNewParamsRequestParams struct { // The maximum number of tokens to generate before stopping. // // Note that our models may stop _before_ reaching this maximum. This parameter // only specifies the absolute maximum number of tokens to generate. // // Different models have different maximum values for this parameter. See // [models](https://docs.anthropic.com/en/docs/models-overview) for details. MaxTokens int64 `json:"max_tokens,required"` // Input messages. // // Our models are trained to operate on alternating `user` and `assistant` // conversational turns. When creating a new `Message`, you specify the prior // conversational turns with the `messages` parameter, and the model then generates // the next `Message` in the conversation. Consecutive `user` or `assistant` turns // in your request will be combined into a single turn. // // Each input message must be an object with a `role` and `content`. You can // specify a single `user`-role message, or you can include multiple `user` and // `assistant` messages. // // If the final message uses the `assistant` role, the response content will // continue immediately from the content in that message. This can be used to // constrain part of the model's response. // // Example with a single `user` message: // // ```json // [{ "role": "user", "content": "Hello, Claude" }] // ``` // // Example with multiple conversational turns: // // ```json // [ // // { "role": "user", "content": "Hello there." }, // { "role": "assistant", "content": "Hi, I'm Claude. How can I help you?" }, // { "role": "user", "content": "Can you explain LLMs in plain English?" } // // ] // ``` // // Example with a partially-filled response from Claude: // // ```json // [ // // { // "role": "user", // "content": "What's the Greek name for Sun? (A) Sol (B) Helios (C) Sun" // }, // { "role": "assistant", "content": "The best answer is (" } // // ] // ``` // // Each input message `content` may be either a single `string` or an array of // content blocks, where each block has a specific `type`. Using a `string` for // `content` is shorthand for an array of one content block of type `"text"`. The // following input messages are equivalent: // // ```json // { "role": "user", "content": "Hello, Claude" } // ``` // // ```json // { "role": "user", "content": [{ "type": "text", "text": "Hello, Claude" }] } // ``` // // Starting with Claude 3 models, you can also send image content blocks: // // ```json // // { // "role": "user", // "content": [ // { // "type": "image", // "source": { // "type": "base64", // "media_type": "image/jpeg", // "data": "/9j/4AAQSkZJRg..." // } // }, // { "type": "text", "text": "What is in this image?" } // ] // } // // ``` // // We currently support the `base64` source type for images, and the `image/jpeg`, // `image/png`, `image/gif`, and `image/webp` media types. // // See [examples](https://docs.anthropic.com/en/api/messages-examples#vision) for // more input examples. // // Note that if you want to include a // [system prompt](https://docs.anthropic.com/en/docs/system-prompts), you can use // the top-level `system` parameter — there is no `"system"` role for input // messages in the Messages API. Messages []MessageParam `json:"messages,omitzero,required"` // The model that will complete your prompt.\n\nSee // [models](https://docs.anthropic.com/en/docs/models-overview) for additional // details and options. Model Model `json:"model,omitzero,required"` // Whether to incrementally stream the response using server-sent events. // // See [streaming](https://docs.anthropic.com/en/api/messages-streaming) for // details. Stream param.Opt[bool] `json:"stream,omitzero"` // Amount of randomness injected into the response. // // Defaults to `1.0`. Ranges from `0.0` to `1.0`. Use `temperature` closer to `0.0` // for analytical / multiple choice, and closer to `1.0` for creative and // generative tasks. // // Note that even with `temperature` of `0.0`, the results will not be fully // deterministic. Temperature param.Opt[float64] `json:"temperature,omitzero"` // Only sample from the top K options for each subsequent token. // // Used to remove "long tail" low probability responses. // [Learn more technical details here](https://towardsdatascience.com/how-to-sample-from-language-models-682bceb97277). // // Recommended for advanced use cases only. You usually only need to use // `temperature`. TopK param.Opt[int64] `json:"top_k,omitzero"` // Use nucleus sampling. // // In nucleus sampling, we compute the cumulative distribution over all the options // for each subsequent token in decreasing probability order and cut it off once it // reaches a particular probability specified by `top_p`. You should either alter // `temperature` or `top_p`, but not both. // // Recommended for advanced use cases only. You usually only need to use // `temperature`. TopP param.Opt[float64] `json:"top_p,omitzero"` // An object describing metadata about the request. Metadata MetadataParam `json:"metadata,omitzero"` // Custom text sequences that will cause the model to stop generating. // // Our models will normally stop when they have naturally completed their turn, // which will result in a response `stop_reason` of `"end_turn"`. // // If you want the model to stop generating when it encounters custom strings of // text, you can use the `stop_sequences` parameter. If the model encounters one of // the custom sequences, the response `stop_reason` value will be `"stop_sequence"` // and the response `stop_sequence` value will contain the matched stop sequence. StopSequences []string `json:"stop_sequences,omitzero"` // System prompt. // // A system prompt is a way of providing context and instructions to Claude, such // as specifying a particular goal or role. See our // [guide to system prompts](https://docs.anthropic.com/en/docs/system-prompts). System []TextBlockParam `json:"system,omitzero"` // Configuration for enabling Claude's extended thinking. // // When enabled, responses include `thinking` content blocks showing Claude's // thinking process before the final answer. Requires a minimum budget of 1,024 // tokens and counts towards your `max_tokens` limit. // // See // [extended thinking](https://docs.anthropic.com/en/docs/build-with-claude/extended-thinking) // for details. Thinking ThinkingConfigParamUnion `json:"thinking,omitzero"` // How the model should use the provided tools. The model can use a specific tool, // any available tool, decide by itself, or not use tools at all. ToolChoice ToolChoiceUnionParam `json:"tool_choice,omitzero"` // Definitions of tools that the model may use. // // If you include `tools` in your API request, the model may return `tool_use` // content blocks that represent the model's use of those tools. You can then run // those tools using the tool input generated by the model and then optionally // return results back to the model using `tool_result` content blocks. // // Each tool definition includes: // // - `name`: Name of the tool. // - `description`: Optional, but strongly-recommended description of the tool. // - `input_schema`: [JSON schema](https://json-schema.org/draft/2020-12) for the // tool `input` shape that the model will produce in `tool_use` output content // blocks. // // For example, if you defined `tools` as: // // ```json // [ // // { // "name": "get_stock_price", // "description": "Get the current stock price for a given ticker symbol.", // "input_schema": { // "type": "object", // "properties": { // "ticker": { // "type": "string", // "description": "The stock ticker symbol, e.g. AAPL for Apple Inc." // } // }, // "required": ["ticker"] // } // } // // ] // ``` // // And then asked the model "What's the S&P 500 at today?", the model might produce // `tool_use` content blocks in the response like this: // // ```json // [ // // { // "type": "tool_use", // "id": "toolu_01D7FLrfh4GYq7yT1ULFeyMV", // "name": "get_stock_price", // "input": { "ticker": "^GSPC" } // } // // ] // ``` // // You might then run your `get_stock_price` tool with `{"ticker": "^GSPC"}` as an // input, and return the following back to the model in a subsequent `user` // message: // // ```json // [ // // { // "type": "tool_result", // "tool_use_id": "toolu_01D7FLrfh4GYq7yT1ULFeyMV", // "content": "259.75 USD" // } // // ] // ``` // // Tools can be used for workflows that include running client-side tools and // functions, or more generally whenever you want the model to produce a particular // JSON structure of output. // // See our [guide](https://docs.anthropic.com/en/docs/tool-use) for more details. Tools []ToolUnionParam `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 MessageBatchNewParamsRequestParams) IsPresent() bool { return !param.IsOmitted(f) && !f.IsNull() } func (r MessageBatchNewParamsRequestParams) MarshalJSON() (data []byte, err error) { type shadow MessageBatchNewParamsRequestParams return param.MarshalObject(r, (*shadow)(&r)) } type MessageBatchListParams struct { // ID of the object to use as a cursor for pagination. When provided, returns the // page of results immediately after this object. AfterID param.Opt[string] `query:"after_id,omitzero" json:"-"` // ID of the object to use as a cursor for pagination. When provided, returns the // page of results immediately before this object. BeforeID param.Opt[string] `query:"before_id,omitzero" json:"-"` // Number of items to return per page. // // Defaults to `20`. Ranges from `1` to `1000`. Limit param.Opt[int64] `query:"limit,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 MessageBatchListParams) IsPresent() bool { return !param.IsOmitted(f) && !f.IsNull() } // URLQuery serializes [MessageBatchListParams]'s query parameters as `url.Values`. func (r MessageBatchListParams) URLQuery() (v url.Values) { return apiquery.MarshalWithSettings(r, apiquery.QuerySettings{ ArrayFormat: apiquery.ArrayQueryFormatComma, NestedFormat: apiquery.NestedQueryFormatBrackets, }) }