first commit
This commit is contained in:
253
core/schemas/files.go
Normal file
253
core/schemas/files.go
Normal file
@@ -0,0 +1,253 @@
|
||||
// Package schemas defines the core schemas and types used by the Bifrost system.
|
||||
package schemas
|
||||
|
||||
// FilePurpose represents the purpose of an uploaded file.
|
||||
type FilePurpose string
|
||||
|
||||
const (
|
||||
FilePurposeBatch FilePurpose = "batch"
|
||||
FilePurposeAssistants FilePurpose = "assistants"
|
||||
FilePurposeFineTune FilePurpose = "fine-tune"
|
||||
FilePurposeVision FilePurpose = "vision"
|
||||
FilePurposeBatchOutput FilePurpose = "batch_output"
|
||||
FilePurposeUserData FilePurpose = "user_data"
|
||||
FilePurposeResponses FilePurpose = "responses"
|
||||
FilePurposeEvals FilePurpose = "evals"
|
||||
)
|
||||
|
||||
// FileStatus represents the status of a file.
|
||||
type FileStatus string
|
||||
|
||||
const (
|
||||
FileStatusUploaded FileStatus = "uploaded"
|
||||
FileStatusProcessed FileStatus = "processed"
|
||||
FileStatusProcessing FileStatus = "processing"
|
||||
FileStatusError FileStatus = "error"
|
||||
FileStatusDeleted FileStatus = "deleted"
|
||||
)
|
||||
|
||||
// FileStorageBackend represents the storage backend type.
|
||||
type FileStorageBackend string
|
||||
|
||||
const (
|
||||
FileStorageAPI FileStorageBackend = "api" // OpenAI/Azure REST API
|
||||
FileStorageS3 FileStorageBackend = "s3" // AWS S3
|
||||
FileStorageGCS FileStorageBackend = "gcs" // Google Cloud Storage
|
||||
FileStorageMemory FileStorageBackend = "memory" // In-memory (for Anthropic virtual files)
|
||||
)
|
||||
|
||||
// FileObject represents a file object returned by the API.
|
||||
type FileObject struct {
|
||||
ID string `json:"id"`
|
||||
Object string `json:"object,omitempty"` // "file"
|
||||
Bytes int64 `json:"bytes"`
|
||||
CreatedAt int64 `json:"created_at"`
|
||||
UpdatedAt int64 `json:"updated_at,omitempty"`
|
||||
Filename string `json:"filename"`
|
||||
Purpose FilePurpose `json:"purpose"`
|
||||
Status FileStatus `json:"status,omitempty"`
|
||||
StatusDetails *string `json:"status_details,omitempty"`
|
||||
ExpiresAt *int64 `json:"expires_at,omitempty"`
|
||||
}
|
||||
|
||||
// BifrostFileUploadRequest represents a request to upload a file.
|
||||
type BifrostFileUploadRequest struct {
|
||||
Provider ModelProvider `json:"provider"`
|
||||
Model *string `json:"model"`
|
||||
|
||||
// File content
|
||||
File []byte `json:"-"` // Raw file content (not serialized)
|
||||
Filename string `json:"filename"` // Original filename
|
||||
Purpose FilePurpose `json:"purpose"` // Purpose of the file (e.g., "batch")
|
||||
ContentType *string `json:"content_type,omitempty"` // MIME type of the file
|
||||
|
||||
// Storage configuration (for S3/GCS backends)
|
||||
StorageConfig *FileStorageConfig `json:"storage_config,omitempty"`
|
||||
|
||||
// Expiration configuration (OpenAI only)
|
||||
ExpiresAfter *FileExpiresAfter `json:"expires_after,omitempty"`
|
||||
|
||||
// Extra parameters for provider-specific features
|
||||
ExtraParams map[string]interface{} `json:"-"`
|
||||
}
|
||||
|
||||
// S3StorageConfig represents AWS S3 storage configuration.
|
||||
type S3StorageConfig struct {
|
||||
Bucket string `json:"bucket,omitempty"`
|
||||
Region string `json:"region,omitempty"`
|
||||
Prefix string `json:"prefix,omitempty"`
|
||||
}
|
||||
|
||||
// GCSStorageConfig represents Google Cloud Storage configuration.
|
||||
type GCSStorageConfig struct {
|
||||
Bucket string `json:"bucket,omitempty"`
|
||||
Project string `json:"project,omitempty"`
|
||||
Prefix string `json:"prefix,omitempty"`
|
||||
}
|
||||
|
||||
// FileExpiresAfter represents an expiration configuration for uploaded files.
|
||||
type FileExpiresAfter struct {
|
||||
Anchor string `json:"anchor"` // e.g., "created_at"
|
||||
Seconds int `json:"seconds"` // 3600-2592000 (1 hour to 30 days)
|
||||
}
|
||||
|
||||
// FileStorageConfig represents storage configuration for cloud storage backends.
|
||||
type FileStorageConfig struct {
|
||||
S3 *S3StorageConfig `json:"s3,omitempty"`
|
||||
GCS *GCSStorageConfig `json:"gcs,omitempty"`
|
||||
}
|
||||
|
||||
// BifrostFileUploadResponse represents the response from uploading a file.
|
||||
type BifrostFileUploadResponse struct {
|
||||
ID string `json:"id"`
|
||||
Object string `json:"object,omitempty"` // "file"
|
||||
Bytes int64 `json:"bytes"`
|
||||
CreatedAt int64 `json:"created_at"`
|
||||
Filename string `json:"filename"`
|
||||
Purpose FilePurpose `json:"purpose"`
|
||||
Status FileStatus `json:"status,omitempty"`
|
||||
StatusDetails *string `json:"status_details,omitempty"`
|
||||
ExpiresAt *int64 `json:"expires_at,omitempty"`
|
||||
|
||||
// Storage backend info
|
||||
StorageBackend FileStorageBackend `json:"storage_backend,omitempty"`
|
||||
StorageURI string `json:"storage_uri,omitempty"` // S3/GCS URI if applicable
|
||||
|
||||
ExtraFields BifrostResponseExtraFields `json:"extra_fields"`
|
||||
}
|
||||
|
||||
// BifrostFileListRequest represents a request to list files.
|
||||
type BifrostFileListRequest struct {
|
||||
Provider ModelProvider `json:"provider"`
|
||||
Model *string `json:"model"`
|
||||
|
||||
RawRequestBody []byte `json:"-"` // Raw request body (not serialized)
|
||||
|
||||
// Filters
|
||||
Purpose FilePurpose `json:"purpose,omitempty"` // Filter by purpose
|
||||
|
||||
// Pagination
|
||||
Limit int `json:"limit,omitempty"` // Max results to return
|
||||
After *string `json:"after,omitempty"` // Cursor for pagination
|
||||
Order *string `json:"order,omitempty"` // Sort order (asc/desc)
|
||||
|
||||
// Storage configuration (for S3/GCS backends)
|
||||
StorageConfig *FileStorageConfig `json:"storage_config,omitempty"`
|
||||
|
||||
// Extra parameters for provider-specific features
|
||||
ExtraParams map[string]interface{} `json:"-"`
|
||||
}
|
||||
|
||||
// GetRawRequestBody returns the raw request body.
|
||||
func (request *BifrostFileListRequest) GetRawRequestBody() []byte {
|
||||
return request.RawRequestBody
|
||||
}
|
||||
|
||||
// BifrostFileListResponse represents the response from listing files.
|
||||
type BifrostFileListResponse struct {
|
||||
Object string `json:"object,omitempty"` // "list"
|
||||
Data []FileObject `json:"data"`
|
||||
HasMore bool `json:"has_more,omitempty"`
|
||||
After *string `json:"after,omitempty"` // Continuation token for pagination
|
||||
|
||||
ExtraFields BifrostResponseExtraFields `json:"extra_fields"`
|
||||
}
|
||||
|
||||
// BifrostFileRetrieveRequest represents a request to retrieve file metadata.
|
||||
type BifrostFileRetrieveRequest struct {
|
||||
Provider ModelProvider `json:"provider"`
|
||||
Model *string `json:"model"`
|
||||
|
||||
RawRequestBody []byte `json:"-"` // Raw request body (not serialized)
|
||||
|
||||
FileID string `json:"file_id"` // ID of the file to retrieve
|
||||
|
||||
// Storage configuration (for S3/GCS backends)
|
||||
StorageConfig *FileStorageConfig `json:"storage_config,omitempty"`
|
||||
|
||||
// Extra parameters for provider-specific features
|
||||
ExtraParams map[string]interface{} `json:"-"`
|
||||
}
|
||||
|
||||
// GetRawRequestBody returns the raw request body.
|
||||
func (request *BifrostFileRetrieveRequest) GetRawRequestBody() []byte {
|
||||
return request.RawRequestBody
|
||||
}
|
||||
|
||||
// BifrostFileRetrieveResponse represents the response from retrieving file metadata.
|
||||
type BifrostFileRetrieveResponse struct {
|
||||
ID string `json:"id"`
|
||||
Object string `json:"object,omitempty"` // "file"
|
||||
Bytes int64 `json:"bytes"`
|
||||
CreatedAt int64 `json:"created_at"`
|
||||
UpdatedAt int64 `json:"updated_at,omitempty"`
|
||||
Filename string `json:"filename"`
|
||||
Purpose FilePurpose `json:"purpose"`
|
||||
Status FileStatus `json:"status,omitempty"`
|
||||
StatusDetails *string `json:"status_details,omitempty"`
|
||||
ExpiresAt *int64 `json:"expires_at,omitempty"`
|
||||
|
||||
// Storage backend info
|
||||
StorageBackend FileStorageBackend `json:"storage_backend,omitempty"`
|
||||
StorageURI string `json:"storage_uri,omitempty"`
|
||||
|
||||
ExtraFields BifrostResponseExtraFields `json:"extra_fields"`
|
||||
}
|
||||
|
||||
// BifrostFileDeleteRequest represents a request to delete a file.
|
||||
type BifrostFileDeleteRequest struct {
|
||||
Provider ModelProvider `json:"provider"`
|
||||
Model *string `json:"model"`
|
||||
FileID string `json:"file_id"` // ID of the file to delete
|
||||
|
||||
RawRequestBody []byte `json:"-"` // Raw request body (not serialized)
|
||||
|
||||
// Storage configuration (for S3/GCS backends)
|
||||
StorageConfig *FileStorageConfig `json:"storage_config,omitempty"`
|
||||
|
||||
// Extra parameters for provider-specific features
|
||||
ExtraParams map[string]interface{} `json:"-"`
|
||||
}
|
||||
|
||||
// GetRawRequestBody returns the raw request body.
|
||||
func (request *BifrostFileDeleteRequest) GetRawRequestBody() []byte {
|
||||
return request.RawRequestBody
|
||||
}
|
||||
|
||||
// BifrostFileDeleteResponse represents the response from deleting a file.
|
||||
type BifrostFileDeleteResponse struct {
|
||||
ID string `json:"id"`
|
||||
Object string `json:"object,omitempty"` // "file"
|
||||
Deleted bool `json:"deleted"`
|
||||
|
||||
ExtraFields BifrostResponseExtraFields `json:"extra_fields"`
|
||||
}
|
||||
|
||||
// BifrostFileContentRequest represents a request to download file content.
|
||||
type BifrostFileContentRequest struct {
|
||||
Provider ModelProvider `json:"provider"`
|
||||
Model *string `json:"model"`
|
||||
FileID string `json:"file_id"` // ID of the file to download
|
||||
|
||||
RawRequestBody []byte `json:"-"` // Raw request body (not serialized)
|
||||
|
||||
// Storage configuration (for S3/GCS backends)
|
||||
StorageConfig *FileStorageConfig `json:"storage_config,omitempty"`
|
||||
|
||||
// Extra parameters for provider-specific features
|
||||
ExtraParams map[string]interface{} `json:"-"`
|
||||
}
|
||||
|
||||
// GetRawRequestBody returns the raw request body.
|
||||
func (request *BifrostFileContentRequest) GetRawRequestBody() []byte {
|
||||
return request.RawRequestBody
|
||||
}
|
||||
|
||||
// BifrostFileContentResponse represents the response from downloading file content.
|
||||
type BifrostFileContentResponse struct {
|
||||
FileID string `json:"file_id"`
|
||||
Content []byte `json:"-"` // Raw file content (not serialized)
|
||||
ContentType string `json:"content_type,omitempty"` // MIME type
|
||||
|
||||
ExtraFields BifrostResponseExtraFields `json:"extra_fields"`
|
||||
}
|
||||
Reference in New Issue
Block a user