first commit
This commit is contained in:
255
core/schemas/containers.go
Normal file
255
core/schemas/containers.go
Normal file
@@ -0,0 +1,255 @@
|
||||
// Package schemas defines the core schemas and types used by the Bifrost system.
|
||||
package schemas
|
||||
|
||||
// ContainerStatus represents the status of a container.
|
||||
type ContainerStatus string
|
||||
|
||||
const (
|
||||
ContainerStatusRunning ContainerStatus = "running"
|
||||
)
|
||||
|
||||
// ContainerExpiresAfter represents the expiration configuration for a container.
|
||||
type ContainerExpiresAfter struct {
|
||||
Anchor string `json:"anchor"` // The anchor point for expiration (e.g., "last_active_at")
|
||||
Minutes int `json:"minutes"` // Number of minutes after anchor point
|
||||
}
|
||||
|
||||
// ContainerObject represents a container object returned by the API.
|
||||
type ContainerObject struct {
|
||||
ID string `json:"id"`
|
||||
Object string `json:"object,omitempty"` // "container"
|
||||
Name string `json:"name"`
|
||||
CreatedAt int64 `json:"created_at"`
|
||||
Status ContainerStatus `json:"status,omitempty"`
|
||||
ExpiresAfter *ContainerExpiresAfter `json:"expires_after,omitempty"`
|
||||
LastActiveAt *int64 `json:"last_active_at,omitempty"`
|
||||
MemoryLimit string `json:"memory_limit,omitempty"` // e.g., "1g", "4g"
|
||||
Metadata map[string]string `json:"metadata,omitempty"`
|
||||
}
|
||||
|
||||
// BifrostContainerCreateRequest represents a request to create a container.
|
||||
type BifrostContainerCreateRequest struct {
|
||||
Provider ModelProvider `json:"provider"`
|
||||
|
||||
// Required fields
|
||||
Name string `json:"name"` // Name of the container
|
||||
|
||||
// Optional fields
|
||||
ExpiresAfter *ContainerExpiresAfter `json:"expires_after,omitempty"` // Expiration configuration
|
||||
FileIDs []string `json:"file_ids,omitempty"` // IDs of existing files to copy into this container
|
||||
MemoryLimit string `json:"memory_limit,omitempty"` // Memory limit (e.g., "1g", "4g")
|
||||
Metadata map[string]string `json:"metadata,omitempty"` // User-provided metadata
|
||||
|
||||
// Extra parameters for provider-specific features
|
||||
ExtraParams map[string]interface{} `json:"-"`
|
||||
}
|
||||
|
||||
// BifrostContainerCreateResponse represents the response from creating a container.
|
||||
type BifrostContainerCreateResponse struct {
|
||||
ID string `json:"id"`
|
||||
Object string `json:"object,omitempty"` // "container"
|
||||
Name string `json:"name"`
|
||||
CreatedAt int64 `json:"created_at"`
|
||||
Status ContainerStatus `json:"status,omitempty"`
|
||||
ExpiresAfter *ContainerExpiresAfter `json:"expires_after,omitempty"`
|
||||
LastActiveAt *int64 `json:"last_active_at,omitempty"`
|
||||
MemoryLimit string `json:"memory_limit,omitempty"`
|
||||
Metadata map[string]string `json:"metadata,omitempty"`
|
||||
|
||||
ExtraFields BifrostResponseExtraFields `json:"extra_fields"`
|
||||
}
|
||||
|
||||
// BifrostContainerListRequest represents a request to list containers.
|
||||
type BifrostContainerListRequest struct {
|
||||
Provider ModelProvider `json:"provider"`
|
||||
|
||||
// Pagination
|
||||
Limit int `json:"limit,omitempty"` // Max results to return (1-100, default 20)
|
||||
After *string `json:"after,omitempty"` // Cursor for pagination
|
||||
Order *string `json:"order,omitempty"` // Sort order (asc/desc), default desc
|
||||
|
||||
// Extra parameters for provider-specific features
|
||||
ExtraParams map[string]interface{} `json:"-"`
|
||||
}
|
||||
|
||||
// BifrostContainerListResponse represents the response from listing containers.
|
||||
type BifrostContainerListResponse struct {
|
||||
Object string `json:"object,omitempty"` // "list"
|
||||
Data []ContainerObject `json:"data"`
|
||||
FirstID *string `json:"first_id,omitempty"`
|
||||
LastID *string `json:"last_id,omitempty"`
|
||||
HasMore bool `json:"has_more,omitempty"`
|
||||
After *string `json:"after,omitempty"` // Encoded cursor for next page (includes key index for multi-key pagination)
|
||||
|
||||
ExtraFields BifrostResponseExtraFields `json:"extra_fields"`
|
||||
}
|
||||
|
||||
// BifrostContainerRetrieveRequest represents a request to retrieve a container.
|
||||
type BifrostContainerRetrieveRequest struct {
|
||||
Provider ModelProvider `json:"provider"`
|
||||
ContainerID string `json:"container_id"` // ID of the container to retrieve
|
||||
|
||||
// Extra parameters for provider-specific features
|
||||
ExtraParams map[string]interface{} `json:"-"`
|
||||
}
|
||||
|
||||
// BifrostContainerRetrieveResponse represents the response from retrieving a container.
|
||||
type BifrostContainerRetrieveResponse struct {
|
||||
ID string `json:"id"`
|
||||
Object string `json:"object,omitempty"` // "container"
|
||||
Name string `json:"name"`
|
||||
CreatedAt int64 `json:"created_at"`
|
||||
Status ContainerStatus `json:"status,omitempty"`
|
||||
ExpiresAfter *ContainerExpiresAfter `json:"expires_after,omitempty"`
|
||||
LastActiveAt *int64 `json:"last_active_at,omitempty"`
|
||||
MemoryLimit string `json:"memory_limit,omitempty"`
|
||||
Metadata map[string]string `json:"metadata,omitempty"`
|
||||
|
||||
ExtraFields BifrostResponseExtraFields `json:"extra_fields"`
|
||||
}
|
||||
|
||||
// BifrostContainerDeleteRequest represents a request to delete a container.
|
||||
type BifrostContainerDeleteRequest struct {
|
||||
Provider ModelProvider `json:"provider"`
|
||||
ContainerID string `json:"container_id"` // ID of the container to delete
|
||||
|
||||
// Extra parameters for provider-specific features
|
||||
ExtraParams map[string]interface{} `json:"-"`
|
||||
}
|
||||
|
||||
// BifrostContainerDeleteResponse represents the response from deleting a container.
|
||||
type BifrostContainerDeleteResponse struct {
|
||||
ID string `json:"id"`
|
||||
Object string `json:"object,omitempty"` // "container.deleted"
|
||||
Deleted bool `json:"deleted"`
|
||||
|
||||
ExtraFields BifrostResponseExtraFields `json:"extra_fields"`
|
||||
}
|
||||
|
||||
// =============================================================================
|
||||
// CONTAINER FILES API
|
||||
// =============================================================================
|
||||
|
||||
// ContainerFileObject represents a file within a container.
|
||||
type ContainerFileObject struct {
|
||||
ID string `json:"id"`
|
||||
Object string `json:"object,omitempty"` // "container.file"
|
||||
Bytes int64 `json:"bytes"`
|
||||
CreatedAt int64 `json:"created_at"`
|
||||
ContainerID string `json:"container_id"`
|
||||
Path string `json:"path"`
|
||||
Source string `json:"source"` // "user" typically
|
||||
}
|
||||
|
||||
// BifrostContainerFileCreateRequest represents a request to create a file in a container.
|
||||
type BifrostContainerFileCreateRequest struct {
|
||||
Provider ModelProvider `json:"provider"`
|
||||
ContainerID string `json:"container_id"` // ID of the container
|
||||
|
||||
// One of these must be provided
|
||||
File []byte `json:"-"` // File content (for multipart upload)
|
||||
FileID *string `json:"file_id,omitempty"` // Reference to existing file
|
||||
Path *string `json:"file_path,omitempty"` // Path for the file in the container
|
||||
|
||||
// Extra parameters for provider-specific features
|
||||
ExtraParams map[string]interface{} `json:"-"`
|
||||
}
|
||||
|
||||
// BifrostContainerFileCreateResponse represents the response from creating a container file.
|
||||
type BifrostContainerFileCreateResponse struct {
|
||||
ID string `json:"id"`
|
||||
Object string `json:"object,omitempty"` // "container.file"
|
||||
Bytes int64 `json:"bytes"`
|
||||
CreatedAt int64 `json:"created_at"`
|
||||
ContainerID string `json:"container_id"`
|
||||
Path string `json:"path"`
|
||||
Source string `json:"source"`
|
||||
|
||||
ExtraFields BifrostResponseExtraFields `json:"extra_fields"`
|
||||
}
|
||||
|
||||
// BifrostContainerFileListRequest represents a request to list files in a container.
|
||||
type BifrostContainerFileListRequest struct {
|
||||
Provider ModelProvider `json:"provider"`
|
||||
ContainerID string `json:"container_id"` // ID of the container
|
||||
|
||||
// Pagination
|
||||
Limit int `json:"limit,omitempty"` // Max results to return (1-100, default 20)
|
||||
After *string `json:"after,omitempty"` // Cursor for pagination
|
||||
Order *string `json:"order,omitempty"` // Sort order (asc/desc), default desc
|
||||
|
||||
// Extra parameters for provider-specific features
|
||||
ExtraParams map[string]interface{} `json:"-"`
|
||||
}
|
||||
|
||||
// BifrostContainerFileListResponse represents the response from listing container files.
|
||||
type BifrostContainerFileListResponse struct {
|
||||
Object string `json:"object,omitempty"` // "list"
|
||||
Data []ContainerFileObject `json:"data"`
|
||||
FirstID *string `json:"first_id,omitempty"`
|
||||
LastID *string `json:"last_id,omitempty"`
|
||||
HasMore bool `json:"has_more,omitempty"`
|
||||
After *string `json:"after,omitempty"` // Encoded cursor for next page (includes key index for multi-key pagination)
|
||||
|
||||
ExtraFields BifrostResponseExtraFields `json:"extra_fields"`
|
||||
}
|
||||
|
||||
// BifrostContainerFileRetrieveRequest represents a request to retrieve a container file.
|
||||
type BifrostContainerFileRetrieveRequest struct {
|
||||
Provider ModelProvider `json:"provider"`
|
||||
ContainerID string `json:"container_id"` // ID of the container
|
||||
FileID string `json:"file_id"` // ID of the file to retrieve
|
||||
|
||||
// Extra parameters for provider-specific features
|
||||
ExtraParams map[string]interface{} `json:"-"`
|
||||
}
|
||||
|
||||
// BifrostContainerFileRetrieveResponse represents the response from retrieving a container file.
|
||||
type BifrostContainerFileRetrieveResponse struct {
|
||||
ID string `json:"id"`
|
||||
Object string `json:"object,omitempty"` // "container.file"
|
||||
Bytes int64 `json:"bytes"`
|
||||
CreatedAt int64 `json:"created_at"`
|
||||
ContainerID string `json:"container_id"`
|
||||
Path string `json:"path"`
|
||||
Source string `json:"source"`
|
||||
|
||||
ExtraFields BifrostResponseExtraFields `json:"extra_fields"`
|
||||
}
|
||||
|
||||
// BifrostContainerFileContentRequest represents a request to retrieve the content of a container file.
|
||||
type BifrostContainerFileContentRequest struct {
|
||||
Provider ModelProvider `json:"provider"`
|
||||
ContainerID string `json:"container_id"` // ID of the container
|
||||
FileID string `json:"file_id"` // ID of the file
|
||||
|
||||
// Extra parameters for provider-specific features
|
||||
ExtraParams map[string]interface{} `json:"-"`
|
||||
}
|
||||
|
||||
// BifrostContainerFileContentResponse represents the response from retrieving container file content.
|
||||
type BifrostContainerFileContentResponse struct {
|
||||
Content []byte `json:"content"` // Raw file content
|
||||
ContentType string `json:"content_type"` // MIME type of the content
|
||||
|
||||
ExtraFields BifrostResponseExtraFields `json:"extra_fields"`
|
||||
}
|
||||
|
||||
// BifrostContainerFileDeleteRequest represents a request to delete a container file.
|
||||
type BifrostContainerFileDeleteRequest struct {
|
||||
Provider ModelProvider `json:"provider"`
|
||||
ContainerID string `json:"container_id"` // ID of the container
|
||||
FileID string `json:"file_id"` // ID of the file to delete
|
||||
|
||||
// Extra parameters for provider-specific features
|
||||
ExtraParams map[string]interface{} `json:"-"`
|
||||
}
|
||||
|
||||
// BifrostContainerFileDeleteResponse represents the response from deleting a container file.
|
||||
type BifrostContainerFileDeleteResponse struct {
|
||||
ID string `json:"id"`
|
||||
Object string `json:"object,omitempty"` // "container.file.deleted"
|
||||
Deleted bool `json:"deleted"`
|
||||
|
||||
ExtraFields BifrostResponseExtraFields `json:"extra_fields"`
|
||||
}
|
||||
Reference in New Issue
Block a user