Files
CHORUS/vendor/github.com/sashabaranov/go-openai/vector_store.go
anthonyrawlins 9bdcbe0447 Integrate BACKBEAT SDK and resolve KACHING license validation
Major integrations and fixes:
- Added BACKBEAT SDK integration for P2P operation timing
- Implemented beat-aware status tracking for distributed operations
- Added Docker secrets support for secure license management
- Resolved KACHING license validation via HTTPS/TLS
- Updated docker-compose configuration for clean stack deployment
- Disabled rollback policies to prevent deployment failures
- Added license credential storage (CHORUS-DEV-MULTI-001)

Technical improvements:
- BACKBEAT P2P operation tracking with phase management
- Enhanced configuration system with file-based secrets
- Improved error handling for license validation
- Clean separation of KACHING and CHORUS deployment stacks

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-06 07:56:26 +10:00

349 lines
10 KiB
Go

package openai
import (
"context"
"fmt"
"net/http"
"net/url"
)
const (
vectorStoresSuffix = "/vector_stores"
vectorStoresFilesSuffix = "/files"
vectorStoresFileBatchesSuffix = "/file_batches"
)
type VectorStoreFileCount struct {
InProgress int `json:"in_progress"`
Completed int `json:"completed"`
Failed int `json:"failed"`
Cancelled int `json:"cancelled"`
Total int `json:"total"`
}
type VectorStore struct {
ID string `json:"id"`
Object string `json:"object"`
CreatedAt int64 `json:"created_at"`
Name string `json:"name"`
UsageBytes int `json:"usage_bytes"`
FileCounts VectorStoreFileCount `json:"file_counts"`
Status string `json:"status"`
ExpiresAfter *VectorStoreExpires `json:"expires_after"`
ExpiresAt *int `json:"expires_at"`
Metadata map[string]any `json:"metadata"`
httpHeader
}
type VectorStoreExpires struct {
Anchor string `json:"anchor"`
Days int `json:"days"`
}
// VectorStoreRequest provides the vector store request parameters.
type VectorStoreRequest struct {
Name string `json:"name,omitempty"`
FileIDs []string `json:"file_ids,omitempty"`
ExpiresAfter *VectorStoreExpires `json:"expires_after,omitempty"`
Metadata map[string]any `json:"metadata,omitempty"`
}
// VectorStoresList is a list of vector store.
type VectorStoresList struct {
VectorStores []VectorStore `json:"data"`
LastID *string `json:"last_id"`
FirstID *string `json:"first_id"`
HasMore bool `json:"has_more"`
httpHeader
}
type VectorStoreDeleteResponse struct {
ID string `json:"id"`
Object string `json:"object"`
Deleted bool `json:"deleted"`
httpHeader
}
type VectorStoreFile struct {
ID string `json:"id"`
Object string `json:"object"`
CreatedAt int64 `json:"created_at"`
VectorStoreID string `json:"vector_store_id"`
UsageBytes int `json:"usage_bytes"`
Status string `json:"status"`
httpHeader
}
type VectorStoreFileRequest struct {
FileID string `json:"file_id"`
}
type VectorStoreFilesList struct {
VectorStoreFiles []VectorStoreFile `json:"data"`
FirstID *string `json:"first_id"`
LastID *string `json:"last_id"`
HasMore bool `json:"has_more"`
httpHeader
}
type VectorStoreFileBatch struct {
ID string `json:"id"`
Object string `json:"object"`
CreatedAt int64 `json:"created_at"`
VectorStoreID string `json:"vector_store_id"`
Status string `json:"status"`
FileCounts VectorStoreFileCount `json:"file_counts"`
httpHeader
}
type VectorStoreFileBatchRequest struct {
FileIDs []string `json:"file_ids"`
}
// CreateVectorStore creates a new vector store.
func (c *Client) CreateVectorStore(ctx context.Context, request VectorStoreRequest) (response VectorStore, err error) {
req, _ := c.newRequest(
ctx,
http.MethodPost,
c.fullURL(vectorStoresSuffix),
withBody(request),
withBetaAssistantVersion(c.config.AssistantVersion),
)
err = c.sendRequest(req, &response)
return
}
// RetrieveVectorStore retrieves an vector store.
func (c *Client) RetrieveVectorStore(
ctx context.Context,
vectorStoreID string,
) (response VectorStore, err error) {
urlSuffix := fmt.Sprintf("%s/%s", vectorStoresSuffix, vectorStoreID)
req, _ := c.newRequest(ctx, http.MethodGet, c.fullURL(urlSuffix),
withBetaAssistantVersion(c.config.AssistantVersion))
err = c.sendRequest(req, &response)
return
}
// ModifyVectorStore modifies a vector store.
func (c *Client) ModifyVectorStore(
ctx context.Context,
vectorStoreID string,
request VectorStoreRequest,
) (response VectorStore, err error) {
urlSuffix := fmt.Sprintf("%s/%s", vectorStoresSuffix, vectorStoreID)
req, _ := c.newRequest(ctx, http.MethodPost, c.fullURL(urlSuffix), withBody(request),
withBetaAssistantVersion(c.config.AssistantVersion))
err = c.sendRequest(req, &response)
return
}
// DeleteVectorStore deletes an vector store.
func (c *Client) DeleteVectorStore(
ctx context.Context,
vectorStoreID string,
) (response VectorStoreDeleteResponse, err error) {
urlSuffix := fmt.Sprintf("%s/%s", vectorStoresSuffix, vectorStoreID)
req, _ := c.newRequest(ctx, http.MethodDelete, c.fullURL(urlSuffix),
withBetaAssistantVersion(c.config.AssistantVersion))
err = c.sendRequest(req, &response)
return
}
// ListVectorStores Lists the currently available vector store.
func (c *Client) ListVectorStores(
ctx context.Context,
pagination Pagination,
) (response VectorStoresList, err error) {
urlValues := url.Values{}
if pagination.After != nil {
urlValues.Add("after", *pagination.After)
}
if pagination.Order != nil {
urlValues.Add("order", *pagination.Order)
}
if pagination.Limit != nil {
urlValues.Add("limit", fmt.Sprintf("%d", *pagination.Limit))
}
if pagination.Before != nil {
urlValues.Add("before", *pagination.Before)
}
encodedValues := ""
if len(urlValues) > 0 {
encodedValues = "?" + urlValues.Encode()
}
urlSuffix := fmt.Sprintf("%s%s", vectorStoresSuffix, encodedValues)
req, _ := c.newRequest(ctx, http.MethodGet, c.fullURL(urlSuffix),
withBetaAssistantVersion(c.config.AssistantVersion))
err = c.sendRequest(req, &response)
return
}
// CreateVectorStoreFile creates a new vector store file.
func (c *Client) CreateVectorStoreFile(
ctx context.Context,
vectorStoreID string,
request VectorStoreFileRequest,
) (response VectorStoreFile, err error) {
urlSuffix := fmt.Sprintf("%s/%s%s", vectorStoresSuffix, vectorStoreID, vectorStoresFilesSuffix)
req, _ := c.newRequest(ctx, http.MethodPost, c.fullURL(urlSuffix),
withBody(request),
withBetaAssistantVersion(c.config.AssistantVersion))
err = c.sendRequest(req, &response)
return
}
// RetrieveVectorStoreFile retrieves a vector store file.
func (c *Client) RetrieveVectorStoreFile(
ctx context.Context,
vectorStoreID string,
fileID string,
) (response VectorStoreFile, err error) {
urlSuffix := fmt.Sprintf("%s/%s%s/%s", vectorStoresSuffix, vectorStoreID, vectorStoresFilesSuffix, fileID)
req, _ := c.newRequest(ctx, http.MethodGet, c.fullURL(urlSuffix),
withBetaAssistantVersion(c.config.AssistantVersion))
err = c.sendRequest(req, &response)
return
}
// DeleteVectorStoreFile deletes an existing file.
func (c *Client) DeleteVectorStoreFile(
ctx context.Context,
vectorStoreID string,
fileID string,
) (err error) {
urlSuffix := fmt.Sprintf("%s/%s%s/%s", vectorStoresSuffix, vectorStoreID, vectorStoresFilesSuffix, fileID)
req, _ := c.newRequest(ctx, http.MethodDelete, c.fullURL(urlSuffix),
withBetaAssistantVersion(c.config.AssistantVersion))
err = c.sendRequest(req, nil)
return
}
// ListVectorStoreFiles Lists the currently available files for a vector store.
func (c *Client) ListVectorStoreFiles(
ctx context.Context,
vectorStoreID string,
pagination Pagination,
) (response VectorStoreFilesList, err error) {
urlValues := url.Values{}
if pagination.After != nil {
urlValues.Add("after", *pagination.After)
}
if pagination.Limit != nil {
urlValues.Add("limit", fmt.Sprintf("%d", *pagination.Limit))
}
if pagination.Before != nil {
urlValues.Add("before", *pagination.Before)
}
if pagination.Order != nil {
urlValues.Add("order", *pagination.Order)
}
encodedValues := ""
if len(urlValues) > 0 {
encodedValues = "?" + urlValues.Encode()
}
urlSuffix := fmt.Sprintf("%s/%s%s%s", vectorStoresSuffix, vectorStoreID, vectorStoresFilesSuffix, encodedValues)
req, _ := c.newRequest(ctx, http.MethodGet, c.fullURL(urlSuffix),
withBetaAssistantVersion(c.config.AssistantVersion))
err = c.sendRequest(req, &response)
return
}
// CreateVectorStoreFileBatch creates a new vector store file batch.
func (c *Client) CreateVectorStoreFileBatch(
ctx context.Context,
vectorStoreID string,
request VectorStoreFileBatchRequest,
) (response VectorStoreFileBatch, err error) {
urlSuffix := fmt.Sprintf("%s/%s%s", vectorStoresSuffix, vectorStoreID, vectorStoresFileBatchesSuffix)
req, _ := c.newRequest(ctx, http.MethodPost, c.fullURL(urlSuffix),
withBody(request),
withBetaAssistantVersion(c.config.AssistantVersion))
err = c.sendRequest(req, &response)
return
}
// RetrieveVectorStoreFileBatch retrieves a vector store file batch.
func (c *Client) RetrieveVectorStoreFileBatch(
ctx context.Context,
vectorStoreID string,
batchID string,
) (response VectorStoreFileBatch, err error) {
urlSuffix := fmt.Sprintf("%s/%s%s/%s", vectorStoresSuffix, vectorStoreID, vectorStoresFileBatchesSuffix, batchID)
req, _ := c.newRequest(ctx, http.MethodGet, c.fullURL(urlSuffix),
withBetaAssistantVersion(c.config.AssistantVersion))
err = c.sendRequest(req, &response)
return
}
// CancelVectorStoreFileBatch cancel a new vector store file batch.
func (c *Client) CancelVectorStoreFileBatch(
ctx context.Context,
vectorStoreID string,
batchID string,
) (response VectorStoreFileBatch, err error) {
urlSuffix := fmt.Sprintf("%s/%s%s/%s%s", vectorStoresSuffix,
vectorStoreID, vectorStoresFileBatchesSuffix, batchID, "/cancel")
req, _ := c.newRequest(ctx, http.MethodPost, c.fullURL(urlSuffix),
withBetaAssistantVersion(c.config.AssistantVersion))
err = c.sendRequest(req, &response)
return
}
// ListVectorStoreFiles Lists the currently available files for a vector store.
func (c *Client) ListVectorStoreFilesInBatch(
ctx context.Context,
vectorStoreID string,
batchID string,
pagination Pagination,
) (response VectorStoreFilesList, err error) {
urlValues := url.Values{}
if pagination.After != nil {
urlValues.Add("after", *pagination.After)
}
if pagination.Limit != nil {
urlValues.Add("limit", fmt.Sprintf("%d", *pagination.Limit))
}
if pagination.Before != nil {
urlValues.Add("before", *pagination.Before)
}
if pagination.Order != nil {
urlValues.Add("order", *pagination.Order)
}
encodedValues := ""
if len(urlValues) > 0 {
encodedValues = "?" + urlValues.Encode()
}
urlSuffix := fmt.Sprintf("%s/%s%s/%s%s%s", vectorStoresSuffix,
vectorStoreID, vectorStoresFileBatchesSuffix, batchID, "/files", encodedValues)
req, _ := c.newRequest(ctx, http.MethodGet, c.fullURL(urlSuffix),
withBetaAssistantVersion(c.config.AssistantVersion))
err = c.sendRequest(req, &response)
return
}