108 lines
2.5 KiB
Go
108 lines
2.5 KiB
Go
package openai
|
|
|
|
import (
|
|
"context"
|
|
"net/http"
|
|
)
|
|
|
|
const (
|
|
threadsSuffix = "/threads"
|
|
)
|
|
|
|
type Thread struct {
|
|
ID string `json:"id"`
|
|
Object string `json:"object"`
|
|
CreatedAt int64 `json:"created_at"`
|
|
Metadata map[string]any `json:"metadata"`
|
|
|
|
httpHeader
|
|
}
|
|
|
|
type ThreadRequest struct {
|
|
Messages []ThreadMessage `json:"messages,omitempty"`
|
|
Metadata map[string]any `json:"metadata,omitempty"`
|
|
}
|
|
|
|
type ModifyThreadRequest struct {
|
|
Metadata map[string]any `json:"metadata"`
|
|
}
|
|
|
|
type ThreadMessageRole string
|
|
|
|
const (
|
|
ThreadMessageRoleUser ThreadMessageRole = "user"
|
|
)
|
|
|
|
type ThreadMessage struct {
|
|
Role ThreadMessageRole `json:"role"`
|
|
Content string `json:"content"`
|
|
FileIDs []string `json:"file_ids,omitempty"`
|
|
Metadata map[string]any `json:"metadata,omitempty"`
|
|
}
|
|
|
|
type ThreadDeleteResponse struct {
|
|
ID string `json:"id"`
|
|
Object string `json:"object"`
|
|
Deleted bool `json:"deleted"`
|
|
|
|
httpHeader
|
|
}
|
|
|
|
// CreateThread creates a new thread.
|
|
func (c *Client) CreateThread(ctx context.Context, request ThreadRequest) (response Thread, err error) {
|
|
req, err := c.newRequest(ctx, http.MethodPost, c.fullURL(threadsSuffix), withBody(request),
|
|
withBetaAssistantVersion(c.config.AssistantVersion))
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
err = c.sendRequest(req, &response)
|
|
return
|
|
}
|
|
|
|
// RetrieveThread retrieves a thread.
|
|
func (c *Client) RetrieveThread(ctx context.Context, threadID string) (response Thread, err error) {
|
|
urlSuffix := threadsSuffix + "/" + threadID
|
|
req, err := c.newRequest(ctx, http.MethodGet, c.fullURL(urlSuffix),
|
|
withBetaAssistantVersion(c.config.AssistantVersion))
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
err = c.sendRequest(req, &response)
|
|
return
|
|
}
|
|
|
|
// ModifyThread modifies a thread.
|
|
func (c *Client) ModifyThread(
|
|
ctx context.Context,
|
|
threadID string,
|
|
request ModifyThreadRequest,
|
|
) (response Thread, err error) {
|
|
urlSuffix := threadsSuffix + "/" + threadID
|
|
req, err := c.newRequest(ctx, http.MethodPost, c.fullURL(urlSuffix), withBody(request),
|
|
withBetaAssistantVersion(c.config.AssistantVersion))
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
err = c.sendRequest(req, &response)
|
|
return
|
|
}
|
|
|
|
// DeleteThread deletes a thread.
|
|
func (c *Client) DeleteThread(
|
|
ctx context.Context,
|
|
threadID string,
|
|
) (response ThreadDeleteResponse, err error) {
|
|
urlSuffix := threadsSuffix + "/" + threadID
|
|
req, err := c.newRequest(ctx, http.MethodDelete, c.fullURL(urlSuffix),
|
|
withBetaAssistantVersion(c.config.AssistantVersion))
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
err = c.sendRequest(req, &response)
|
|
return
|
|
}
|