1// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
3package openai
4
5import (
6 "context"
7 "errors"
8 "fmt"
9 "net/http"
10 "net/url"
11
12 "github.com/openai/openai-go/internal/apiquery"
13 "github.com/openai/openai-go/internal/requestconfig"
14 "github.com/openai/openai-go/option"
15 "github.com/openai/openai-go/packages/pagination"
16 "github.com/openai/openai-go/packages/param"
17)
18
19// ChatCompletionMessageService contains methods and other services that help with
20// interacting with the openai API.
21//
22// Note, unlike clients, this service does not read variables from the environment
23// automatically. You should not instantiate this service directly, and instead use
24// the [NewChatCompletionMessageService] method instead.
25type ChatCompletionMessageService struct {
26 Options []option.RequestOption
27}
28
29// NewChatCompletionMessageService generates a new service that applies the given
30// options to each request. These options are applied after the parent client's
31// options (if there is one), and before any request-specific options.
32func NewChatCompletionMessageService(opts ...option.RequestOption) (r ChatCompletionMessageService) {
33 r = ChatCompletionMessageService{}
34 r.Options = opts
35 return
36}
37
38// Get the messages in a stored chat completion. Only Chat Completions that have
39// been created with the `store` parameter set to `true` will be returned.
40func (r *ChatCompletionMessageService) List(ctx context.Context, completionID string, query ChatCompletionMessageListParams, opts ...option.RequestOption) (res *pagination.CursorPage[ChatCompletionStoreMessage], err error) {
41 var raw *http.Response
42 opts = append(r.Options[:], opts...)
43 opts = append([]option.RequestOption{option.WithResponseInto(&raw)}, opts...)
44 if completionID == "" {
45 err = errors.New("missing required completion_id parameter")
46 return
47 }
48 path := fmt.Sprintf("chat/completions/%s/messages", completionID)
49 cfg, err := requestconfig.NewRequestConfig(ctx, http.MethodGet, path, query, &res, opts...)
50 if err != nil {
51 return nil, err
52 }
53 err = cfg.Execute()
54 if err != nil {
55 return nil, err
56 }
57 res.SetPageConfig(cfg, raw)
58 return res, nil
59}
60
61// Get the messages in a stored chat completion. Only Chat Completions that have
62// been created with the `store` parameter set to `true` will be returned.
63func (r *ChatCompletionMessageService) ListAutoPaging(ctx context.Context, completionID string, query ChatCompletionMessageListParams, opts ...option.RequestOption) *pagination.CursorPageAutoPager[ChatCompletionStoreMessage] {
64 return pagination.NewCursorPageAutoPager(r.List(ctx, completionID, query, opts...))
65}
66
67type ChatCompletionMessageListParams struct {
68 // Identifier for the last message from the previous pagination request.
69 After param.Opt[string] `query:"after,omitzero" json:"-"`
70 // Number of messages to retrieve.
71 Limit param.Opt[int64] `query:"limit,omitzero" json:"-"`
72 // Sort order for messages by timestamp. Use `asc` for ascending order or `desc`
73 // for descending order. Defaults to `asc`.
74 //
75 // Any of "asc", "desc".
76 Order ChatCompletionMessageListParamsOrder `query:"order,omitzero" json:"-"`
77 paramObj
78}
79
80// URLQuery serializes [ChatCompletionMessageListParams]'s query parameters as
81// `url.Values`.
82func (r ChatCompletionMessageListParams) URLQuery() (v url.Values, err error) {
83 return apiquery.MarshalWithSettings(r, apiquery.QuerySettings{
84 ArrayFormat: apiquery.ArrayQueryFormatBrackets,
85 NestedFormat: apiquery.NestedQueryFormatBrackets,
86 })
87}
88
89// Sort order for messages by timestamp. Use `asc` for ascending order or `desc`
90// for descending order. Defaults to `asc`.
91type ChatCompletionMessageListParamsOrder string
92
93const (
94 ChatCompletionMessageListParamsOrderAsc ChatCompletionMessageListParamsOrder = "asc"
95 ChatCompletionMessageListParamsOrderDesc ChatCompletionMessageListParamsOrder = "desc"
96)