diff --git a/assistant.go b/assistant.go index d75eebef..de49be68 100644 --- a/assistant.go +++ b/assistant.go @@ -10,46 +10,43 @@ import ( const ( assistantsSuffix = "/assistants" assistantsFilesSuffix = "/files" + openaiAssistantsV1 = "assistants=v1" ) type Assistant struct { - ID string `json:"id"` - Object string `json:"object"` - CreatedAt int64 `json:"created_at"` - Name *string `json:"name,omitempty"` - Description *string `json:"description,omitempty"` - Model string `json:"model"` - Instructions *string `json:"instructions,omitempty"` - Tools []any `json:"tools,omitempty"` + ID string `json:"id"` + Object string `json:"object"` + CreatedAt int64 `json:"created_at"` + Name *string `json:"name,omitempty"` + Description *string `json:"description,omitempty"` + Model string `json:"model"` + Instructions *string `json:"instructions,omitempty"` + Tools []AssistantTool `json:"tools,omitempty"` httpHeader } -type AssistantTool struct { - Type string `json:"type"` -} - -type AssistantToolCodeInterpreter struct { - AssistantTool -} +type AssistantToolType string -type AssistantToolRetrieval struct { - AssistantTool -} +const ( + AssistantToolTypeCodeInterpreter AssistantToolType = "code_interpreter" + AssistantToolTypeRetrieval AssistantToolType = "retrieval" + AssistantToolTypeFunction AssistantToolType = "function" +) -type AssistantToolFunction struct { - AssistantTool - Function FunctionDefinition `json:"function"` +type AssistantTool struct { + Type AssistantToolType `json:"type"` + Function *FunctionDefinition `json:"function,omitempty"` } type AssistantRequest struct { - Model string `json:"model"` - Name *string `json:"name,omitempty"` - Description *string `json:"description,omitempty"` - Instructions *string `json:"instructions,omitempty"` - Tools []any `json:"tools,omitempty"` - FileIDs []string `json:"file_ids,omitempty"` - Metadata map[string]any `json:"metadata,omitempty"` + Model string `json:"model"` + Name *string `json:"name,omitempty"` + Description *string `json:"description,omitempty"` + Instructions *string `json:"instructions,omitempty"` + Tools []AssistantTool `json:"tools,omitempty"` + FileIDs []string `json:"file_ids,omitempty"` + Metadata map[string]any `json:"metadata,omitempty"` } // AssistantsList is a list of assistants. @@ -59,6 +56,14 @@ type AssistantsList struct { httpHeader } +type AssistantDeleteResponse struct { + ID string `json:"id"` + Object string `json:"object"` + Deleted bool `json:"deleted"` + + httpHeader +} + type AssistantFile struct { ID string `json:"id"` Object string `json:"object"` @@ -80,7 +85,8 @@ type AssistantFilesList struct { // CreateAssistant creates a new assistant. func (c *Client) CreateAssistant(ctx context.Context, request AssistantRequest) (response Assistant, err error) { - req, err := c.newRequest(ctx, http.MethodPost, c.fullURL(assistantsSuffix), withBody(request)) + req, err := c.newRequest(ctx, http.MethodPost, c.fullURL(assistantsSuffix), withBody(request), + withBetaAssistantV1()) if err != nil { return } @@ -95,7 +101,8 @@ func (c *Client) RetrieveAssistant( assistantID string, ) (response Assistant, err error) { urlSuffix := fmt.Sprintf("%s/%s", assistantsSuffix, assistantID) - req, err := c.newRequest(ctx, http.MethodGet, c.fullURL(urlSuffix)) + req, err := c.newRequest(ctx, http.MethodGet, c.fullURL(urlSuffix), + withBetaAssistantV1()) if err != nil { return } @@ -111,7 +118,8 @@ func (c *Client) ModifyAssistant( request AssistantRequest, ) (response Assistant, err error) { urlSuffix := fmt.Sprintf("%s/%s", assistantsSuffix, assistantID) - req, err := c.newRequest(ctx, http.MethodPost, c.fullURL(urlSuffix), withBody(request)) + req, err := c.newRequest(ctx, http.MethodPost, c.fullURL(urlSuffix), withBody(request), + withBetaAssistantV1()) if err != nil { return } @@ -124,9 +132,10 @@ func (c *Client) ModifyAssistant( func (c *Client) DeleteAssistant( ctx context.Context, assistantID string, -) (response Assistant, err error) { +) (response AssistantDeleteResponse, err error) { urlSuffix := fmt.Sprintf("%s/%s", assistantsSuffix, assistantID) - req, err := c.newRequest(ctx, http.MethodDelete, c.fullURL(urlSuffix)) + req, err := c.newRequest(ctx, http.MethodDelete, c.fullURL(urlSuffix), + withBetaAssistantV1()) if err != nil { return } @@ -163,7 +172,8 @@ func (c *Client) ListAssistants( } urlSuffix := fmt.Sprintf("%s%s", assistantsSuffix, encodedValues) - req, err := c.newRequest(ctx, http.MethodGet, c.fullURL(urlSuffix)) + req, err := c.newRequest(ctx, http.MethodGet, c.fullURL(urlSuffix), + withBetaAssistantV1()) if err != nil { return } @@ -180,7 +190,8 @@ func (c *Client) CreateAssistantFile( ) (response AssistantFile, err error) { urlSuffix := fmt.Sprintf("%s/%s%s", assistantsSuffix, assistantID, assistantsFilesSuffix) req, err := c.newRequest(ctx, http.MethodPost, c.fullURL(urlSuffix), - withBody(request)) + withBody(request), + withBetaAssistantV1()) if err != nil { return } @@ -196,7 +207,8 @@ func (c *Client) RetrieveAssistantFile( fileID string, ) (response AssistantFile, err error) { urlSuffix := fmt.Sprintf("%s/%s%s/%s", assistantsSuffix, assistantID, assistantsFilesSuffix, fileID) - req, err := c.newRequest(ctx, http.MethodGet, c.fullURL(urlSuffix)) + req, err := c.newRequest(ctx, http.MethodGet, c.fullURL(urlSuffix), + withBetaAssistantV1()) if err != nil { return } @@ -212,7 +224,8 @@ func (c *Client) DeleteAssistantFile( fileID string, ) (err error) { urlSuffix := fmt.Sprintf("%s/%s%s/%s", assistantsSuffix, assistantID, assistantsFilesSuffix, fileID) - req, err := c.newRequest(ctx, http.MethodDelete, c.fullURL(urlSuffix)) + req, err := c.newRequest(ctx, http.MethodDelete, c.fullURL(urlSuffix), + withBetaAssistantV1()) if err != nil { return } @@ -250,7 +263,8 @@ func (c *Client) ListAssistantFiles( } urlSuffix := fmt.Sprintf("%s/%s%s%s", assistantsSuffix, assistantID, assistantsFilesSuffix, encodedValues) - req, err := c.newRequest(ctx, http.MethodGet, c.fullURL(urlSuffix)) + req, err := c.newRequest(ctx, http.MethodGet, c.fullURL(urlSuffix), + withBetaAssistantV1()) if err != nil { return } diff --git a/client.go b/client.go index 65ece812..056226c6 100644 --- a/client.go +++ b/client.go @@ -83,6 +83,12 @@ func withContentType(contentType string) requestOption { } } +func withBetaAssistantV1() requestOption { + return func(args *requestOptions) { + args.header.Set("OpenAI-Beta", "assistants=v1") + } +} + func (c *Client) newRequest(ctx context.Context, method, url string, setters ...requestOption) (*http.Request, error) { // Default Options args := &requestOptions{