 9bdcbe0447
			
		
	
	9bdcbe0447
	
	
	
		
			
			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>
		
			
				
	
	
		
			172 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			172 lines
		
	
	
		
			4.6 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"`
 | |
| 	ToolResources ToolResources  `json:"tool_resources,omitempty"`
 | |
| 
 | |
| 	httpHeader
 | |
| }
 | |
| 
 | |
| type ThreadRequest struct {
 | |
| 	Messages      []ThreadMessage       `json:"messages,omitempty"`
 | |
| 	Metadata      map[string]any        `json:"metadata,omitempty"`
 | |
| 	ToolResources *ToolResourcesRequest `json:"tool_resources,omitempty"`
 | |
| }
 | |
| 
 | |
| type ToolResources struct {
 | |
| 	CodeInterpreter *CodeInterpreterToolResources `json:"code_interpreter,omitempty"`
 | |
| 	FileSearch      *FileSearchToolResources      `json:"file_search,omitempty"`
 | |
| }
 | |
| 
 | |
| type CodeInterpreterToolResources struct {
 | |
| 	FileIDs []string `json:"file_ids,omitempty"`
 | |
| }
 | |
| 
 | |
| type FileSearchToolResources struct {
 | |
| 	VectorStoreIDs []string `json:"vector_store_ids,omitempty"`
 | |
| }
 | |
| 
 | |
| type ToolResourcesRequest struct {
 | |
| 	CodeInterpreter *CodeInterpreterToolResourcesRequest `json:"code_interpreter,omitempty"`
 | |
| 	FileSearch      *FileSearchToolResourcesRequest      `json:"file_search,omitempty"`
 | |
| }
 | |
| 
 | |
| type CodeInterpreterToolResourcesRequest struct {
 | |
| 	FileIDs []string `json:"file_ids,omitempty"`
 | |
| }
 | |
| 
 | |
| type FileSearchToolResourcesRequest struct {
 | |
| 	VectorStoreIDs []string                   `json:"vector_store_ids,omitempty"`
 | |
| 	VectorStores   []VectorStoreToolResources `json:"vector_stores,omitempty"`
 | |
| }
 | |
| 
 | |
| type VectorStoreToolResources struct {
 | |
| 	FileIDs          []string          `json:"file_ids,omitempty"`
 | |
| 	ChunkingStrategy *ChunkingStrategy `json:"chunking_strategy,omitempty"`
 | |
| 	Metadata         map[string]any    `json:"metadata,omitempty"`
 | |
| }
 | |
| 
 | |
| type ChunkingStrategy struct {
 | |
| 	Type   ChunkingStrategyType    `json:"type"`
 | |
| 	Static *StaticChunkingStrategy `json:"static,omitempty"`
 | |
| }
 | |
| 
 | |
| type StaticChunkingStrategy struct {
 | |
| 	MaxChunkSizeTokens int `json:"max_chunk_size_tokens"`
 | |
| 	ChunkOverlapTokens int `json:"chunk_overlap_tokens"`
 | |
| }
 | |
| 
 | |
| type ChunkingStrategyType string
 | |
| 
 | |
| const (
 | |
| 	ChunkingStrategyTypeAuto   ChunkingStrategyType = "auto"
 | |
| 	ChunkingStrategyTypeStatic ChunkingStrategyType = "static"
 | |
| )
 | |
| 
 | |
| type ModifyThreadRequest struct {
 | |
| 	Metadata      map[string]any `json:"metadata"`
 | |
| 	ToolResources *ToolResources `json:"tool_resources,omitempty"`
 | |
| }
 | |
| 
 | |
| type ThreadMessageRole string
 | |
| 
 | |
| const (
 | |
| 	ThreadMessageRoleAssistant ThreadMessageRole = "assistant"
 | |
| 	ThreadMessageRoleUser      ThreadMessageRole = "user"
 | |
| )
 | |
| 
 | |
| type ThreadMessage struct {
 | |
| 	Role        ThreadMessageRole  `json:"role"`
 | |
| 	Content     string             `json:"content"`
 | |
| 	FileIDs     []string           `json:"file_ids,omitempty"`
 | |
| 	Attachments []ThreadAttachment `json:"attachments,omitempty"`
 | |
| 	Metadata    map[string]any     `json:"metadata,omitempty"`
 | |
| }
 | |
| 
 | |
| type ThreadAttachment struct {
 | |
| 	FileID string                 `json:"file_id"`
 | |
| 	Tools  []ThreadAttachmentTool `json:"tools"`
 | |
| }
 | |
| 
 | |
| type ThreadAttachmentTool struct {
 | |
| 	Type string `json:"type"`
 | |
| }
 | |
| 
 | |
| 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
 | |
| }
 |