330 lines
14 KiB
Go
330 lines
14 KiB
Go
// Package schemas defines the core schemas and types used by the Bifrost system.
|
|
package schemas
|
|
|
|
// BatchStatus represents the status of a batch job.
|
|
type BatchStatus string
|
|
|
|
const (
|
|
BatchStatusValidating BatchStatus = "validating"
|
|
BatchStatusFailed BatchStatus = "failed"
|
|
BatchStatusInProgress BatchStatus = "in_progress"
|
|
BatchStatusFinalizing BatchStatus = "finalizing"
|
|
BatchStatusCompleted BatchStatus = "completed"
|
|
BatchStatusExpired BatchStatus = "expired"
|
|
BatchStatusCancelling BatchStatus = "cancelling"
|
|
BatchStatusCancelled BatchStatus = "cancelled"
|
|
BatchStatusEnded BatchStatus = "ended" // Anthropic-specific
|
|
BatchStatusDeleted BatchStatus = "deleted" // Gemini-specific
|
|
)
|
|
|
|
// BatchEndpoint represents supported batch API endpoints.
|
|
type BatchEndpoint string
|
|
|
|
const (
|
|
BatchEndpointChatCompletions BatchEndpoint = "/v1/chat/completions"
|
|
BatchEndpointEmbeddings BatchEndpoint = "/v1/embeddings"
|
|
BatchEndpointCompletions BatchEndpoint = "/v1/completions"
|
|
BatchEndpointResponses BatchEndpoint = "/v1/responses"
|
|
BatchEndpointMessages BatchEndpoint = "/v1/messages" // Anthropic
|
|
)
|
|
|
|
// BatchRequestItem represents a single request in a batch (for inline requests).
|
|
type BatchRequestItem struct {
|
|
CustomID string `json:"custom_id"` // User-provided unique ID for this request
|
|
Method string `json:"method,omitempty"` // HTTP method (typically "POST")
|
|
URL string `json:"url,omitempty"` // Endpoint URL (e.g., "/v1/chat/completions")
|
|
Body map[string]interface{} `json:"body,omitempty"` // Request body parameters
|
|
Params map[string]interface{} `json:"params,omitempty"` // Alternative to Body for Anthropic
|
|
}
|
|
|
|
// BatchRequestCounts tracks the counts of requests in different states.
|
|
type BatchRequestCounts struct {
|
|
Total int `json:"total"`
|
|
Completed int `json:"completed"`
|
|
Failed int `json:"failed"`
|
|
Succeeded int `json:"succeeded,omitempty"` // Anthropic-specific
|
|
Expired int `json:"expired,omitempty"` // Anthropic-specific
|
|
Canceled int `json:"canceled,omitempty"` // Anthropic-specific
|
|
Pending int `json:"pending,omitempty"` // Anthropic-specific
|
|
}
|
|
|
|
// BatchErrors represents errors encountered during batch processing.
|
|
type BatchErrors struct {
|
|
Object string `json:"object,omitempty"`
|
|
Data []BatchError `json:"data,omitempty"`
|
|
}
|
|
|
|
// BatchError represents a single error in batch processing.
|
|
type BatchError struct {
|
|
Code string `json:"code,omitempty"`
|
|
Message string `json:"message,omitempty"`
|
|
Param string `json:"param,omitempty"`
|
|
Line *int `json:"line,omitempty"`
|
|
}
|
|
|
|
// BifrostBatchCreateRequest represents a request to create a batch job.
|
|
type BifrostBatchCreateRequest struct {
|
|
Provider ModelProvider `json:"provider"`
|
|
Model *string `json:"model,omitempty"` // Model hint for routing (optional for file-based) it may or may not present depending on the provider and usage of integration vs direct API
|
|
RawRequestBody []byte `json:"-"` // Raw request body (not serialized)
|
|
|
|
// OpenAI-style: file-based batching
|
|
InputFileID string `json:"input_file_id,omitempty"` // ID of uploaded JSONL file
|
|
|
|
// Anthropic-style: inline requests
|
|
Requests []BatchRequestItem `json:"requests,omitempty"` // Inline request items
|
|
|
|
// Common fields
|
|
Endpoint BatchEndpoint `json:"endpoint,omitempty"` // Target endpoint for batch requests
|
|
CompletionWindow string `json:"completion_window,omitempty"` // Time window (e.g., "24h")
|
|
Metadata map[string]string `json:"metadata,omitempty"` // User-provided metadata
|
|
OutputExpiresAfter *BatchExpiresAfter `json:"output_expires_after,omitempty"` // Expiration for batch output (OpenAI only)
|
|
|
|
// Extra parameters for provider-specific features
|
|
ExtraParams map[string]interface{} `json:"-"`
|
|
}
|
|
|
|
// BatchExpiresAfter represents an expiration configuration for batch output.
|
|
type BatchExpiresAfter struct {
|
|
Anchor string `json:"anchor"` // e.g., "created_at"
|
|
Seconds int `json:"seconds"` // 3600-2592000 (1 hour to 30 days)
|
|
}
|
|
|
|
// GetRawRequestBody returns the raw request body.
|
|
func (request *BifrostBatchCreateRequest) GetRawRequestBody() []byte {
|
|
return request.RawRequestBody
|
|
}
|
|
|
|
// BifrostBatchCreateResponse represents the response from creating a batch job.
|
|
type BifrostBatchCreateResponse struct {
|
|
ID string `json:"id"`
|
|
Object string `json:"object,omitempty"` // "batch" for OpenAI
|
|
Endpoint string `json:"endpoint,omitempty"`
|
|
InputFileID string `json:"input_file_id,omitempty"`
|
|
CompletionWindow string `json:"completion_window,omitempty"`
|
|
Status BatchStatus `json:"status"`
|
|
RequestCounts BatchRequestCounts `json:"request_counts,omitempty"`
|
|
Metadata map[string]string `json:"metadata,omitempty"`
|
|
CreatedAt int64 `json:"created_at,omitempty"`
|
|
ExpiresAt *int64 `json:"expires_at,omitempty"`
|
|
|
|
// Output file references (OpenAI)
|
|
OutputFileID *string `json:"output_file_id,omitempty"`
|
|
ErrorFileID *string `json:"error_file_id,omitempty"`
|
|
|
|
// Anthropic-specific
|
|
ProcessingStatus *string `json:"processing_status,omitempty"`
|
|
ResultsURL *string `json:"results_url,omitempty"`
|
|
|
|
// Gemini-specific (operation response)
|
|
OperationName *string `json:"operation_name,omitempty"`
|
|
|
|
ExtraFields BifrostResponseExtraFields `json:"extra_fields"`
|
|
}
|
|
|
|
// BifrostBatchListRequest represents a request to list batch jobs.
|
|
type BifrostBatchListRequest struct {
|
|
Provider ModelProvider `json:"provider"`
|
|
Model *string `json:"model"`
|
|
|
|
// Pagination
|
|
Limit int `json:"limit,omitempty"` // Max results to return
|
|
After *string `json:"after,omitempty"` // Cursor for pagination (OpenAI)
|
|
BeforeID *string `json:"before_id,omitempty"` // Pagination cursor (Anthropic)
|
|
AfterID *string `json:"after_id,omitempty"` // Pagination cursor (Anthropic)
|
|
PageToken *string `json:"page_token,omitempty"` // For Gemini pagination
|
|
PageSize int `json:"page_size,omitempty"` // For Gemini pagination
|
|
NextCursor *string `json:"next_cursor,omitempty"` // For Gemini pagination
|
|
|
|
// Extra parameters for provider-specific features
|
|
ExtraParams map[string]interface{} `json:"-"`
|
|
}
|
|
|
|
// BifrostBatchListResponse represents the response from listing batch jobs.
|
|
type BifrostBatchListResponse struct {
|
|
Object string `json:"object,omitempty"` // "list"
|
|
Data []BifrostBatchRetrieveResponse `json:"data"`
|
|
FirstID *string `json:"first_id,omitempty"`
|
|
LastID *string `json:"last_id,omitempty"`
|
|
HasMore bool `json:"has_more,omitempty"`
|
|
|
|
// Anthropic pagination
|
|
NextCursor *string `json:"next_cursor,omitempty"` // For cursor-based pagination
|
|
|
|
ExtraFields BifrostResponseExtraFields `json:"extra_fields"`
|
|
}
|
|
|
|
// BifrostBatchRetrieveRequest represents a request to retrieve a batch job.
|
|
type BifrostBatchRetrieveRequest struct {
|
|
Provider ModelProvider `json:"provider"`
|
|
Model *string `json:"model"`
|
|
BatchID string `json:"batch_id"` // ID of the batch to retrieve
|
|
|
|
RawRequestBody []byte `json:"-"` // Raw request body (not serialized)
|
|
|
|
// Extra parameters for provider-specific features
|
|
ExtraParams map[string]interface{} `json:"-"`
|
|
}
|
|
|
|
// GetRawRequestBody returns the raw request body.
|
|
func (request *BifrostBatchRetrieveRequest) GetRawRequestBody() []byte {
|
|
return request.RawRequestBody
|
|
}
|
|
|
|
// BifrostBatchRetrieveResponse represents the response from retrieving a batch job.
|
|
type BifrostBatchRetrieveResponse struct {
|
|
ID string `json:"id"`
|
|
Object string `json:"object,omitempty"`
|
|
Endpoint string `json:"endpoint,omitempty"`
|
|
InputFileID string `json:"input_file_id,omitempty"`
|
|
CompletionWindow string `json:"completion_window,omitempty"`
|
|
Status BatchStatus `json:"status"`
|
|
RequestCounts BatchRequestCounts `json:"request_counts,omitempty"`
|
|
Metadata map[string]string `json:"metadata,omitempty"`
|
|
CreatedAt int64 `json:"created_at,omitempty"`
|
|
ExpiresAt *int64 `json:"expires_at,omitempty"`
|
|
InProgressAt *int64 `json:"in_progress_at,omitempty"`
|
|
FinalizingAt *int64 `json:"finalizing_at,omitempty"`
|
|
CompletedAt *int64 `json:"completed_at,omitempty"`
|
|
FailedAt *int64 `json:"failed_at,omitempty"`
|
|
ExpiredAt *int64 `json:"expired_at,omitempty"`
|
|
CancellingAt *int64 `json:"cancelling_at,omitempty"`
|
|
CancelledAt *int64 `json:"cancelled_at,omitempty"`
|
|
|
|
// Output references
|
|
OutputFileID *string `json:"output_file_id,omitempty"`
|
|
ErrorFileID *string `json:"error_file_id,omitempty"`
|
|
Errors *BatchErrors `json:"errors,omitempty"`
|
|
|
|
// Anthropic-specific
|
|
ProcessingStatus *string `json:"processing_status,omitempty"`
|
|
ResultsURL *string `json:"results_url,omitempty"`
|
|
ArchivedAt *int64 `json:"archived_at,omitempty"`
|
|
|
|
// Gemini-specific
|
|
OperationName *string `json:"operation_name,omitempty"`
|
|
Done *bool `json:"done,omitempty"`
|
|
Progress *int `json:"progress,omitempty"` // Percentage progress
|
|
|
|
ExtraFields BifrostResponseExtraFields `json:"extra_fields"`
|
|
}
|
|
|
|
// BifrostBatchCancelRequest represents a request to cancel a batch job.
|
|
type BifrostBatchCancelRequest struct {
|
|
Provider ModelProvider `json:"provider"`
|
|
Model *string `json:"model"`
|
|
BatchID string `json:"batch_id"` // ID of the batch to cancel
|
|
|
|
RawRequestBody []byte `json:"-"` // Raw request body (not serialized)
|
|
|
|
// Extra parameters for provider-specific features
|
|
ExtraParams map[string]interface{} `json:"-"`
|
|
}
|
|
|
|
// GetRawRequestBody returns the raw request body.
|
|
func (request *BifrostBatchCancelRequest) GetRawRequestBody() []byte {
|
|
return request.RawRequestBody
|
|
}
|
|
|
|
// BifrostBatchCancelResponse represents the response from cancelling a batch job.
|
|
type BifrostBatchCancelResponse struct {
|
|
ID string `json:"id"`
|
|
Object string `json:"object,omitempty"`
|
|
Status BatchStatus `json:"status"`
|
|
RequestCounts BatchRequestCounts `json:"request_counts,omitempty"`
|
|
CancellingAt *int64 `json:"cancelling_at,omitempty"`
|
|
CancelledAt *int64 `json:"cancelled_at,omitempty"`
|
|
|
|
ExtraFields BifrostResponseExtraFields `json:"extra_fields"`
|
|
}
|
|
|
|
// BifrostBatchDeleteRequest represents a request to delete a batch job.
|
|
type BifrostBatchDeleteRequest struct {
|
|
Provider ModelProvider `json:"provider"`
|
|
Model *string `json:"model"`
|
|
BatchID string `json:"batch_id"` // ID of the batch to delete
|
|
|
|
RawRequestBody []byte `json:"-"` // Raw request body (not serialized)
|
|
|
|
// Extra parameters for provider-specific features
|
|
ExtraParams map[string]interface{} `json:"-"`
|
|
}
|
|
|
|
// GetRawRequestBody returns the raw request body.
|
|
func (request *BifrostBatchDeleteRequest) GetRawRequestBody() []byte {
|
|
return request.RawRequestBody
|
|
}
|
|
|
|
// BifrostBatchDeleteResponse represents the response from deleting a batch job.
|
|
type BifrostBatchDeleteResponse struct {
|
|
ID string `json:"id"`
|
|
Object string `json:"object,omitempty"`
|
|
Status BatchStatus `json:"status"`
|
|
RequestCounts BatchRequestCounts `json:"request_counts,omitempty"`
|
|
|
|
ExtraFields BifrostResponseExtraFields `json:"extra_fields"`
|
|
}
|
|
|
|
// BifrostBatchResultsRequest represents a request to retrieve batch results.
|
|
type BifrostBatchResultsRequest struct {
|
|
Provider ModelProvider `json:"provider"`
|
|
Model *string `json:"model"`
|
|
BatchID string `json:"batch_id"` // ID of the batch to get results for
|
|
|
|
RawRequestBody []byte `json:"-"` // Raw request body (not serialized)
|
|
|
|
// For OpenAI, results are retrieved via output_file_id (file download)
|
|
// For Anthropic, results are streamed from a dedicated endpoint
|
|
|
|
// Extra parameters for provider-specific features
|
|
ExtraParams map[string]interface{} `json:"-"`
|
|
}
|
|
|
|
// GetRawRequestBody returns the raw request body.
|
|
func (request *BifrostBatchResultsRequest) GetRawRequestBody() []byte {
|
|
return request.RawRequestBody
|
|
}
|
|
|
|
// BatchResultItem represents a single result from a batch request.
|
|
type BatchResultItem struct {
|
|
CustomID string `json:"custom_id"`
|
|
|
|
// Result data (varies by request type)
|
|
Response *BatchResultResponse `json:"response,omitempty"` // OpenAI format
|
|
Result *BatchResultData `json:"result,omitempty"` // Anthropic format
|
|
|
|
// Error if the individual request failed
|
|
Error *BatchResultError `json:"error,omitempty"`
|
|
}
|
|
|
|
// BatchResultResponse represents OpenAI-style result response.
|
|
type BatchResultResponse struct {
|
|
StatusCode int `json:"status_code"`
|
|
RequestID string `json:"request_id,omitempty"`
|
|
Body map[string]interface{} `json:"body,omitempty"`
|
|
}
|
|
|
|
// BatchResultData represents Anthropic-style result data.
|
|
type BatchResultData struct {
|
|
Type string `json:"type"` // "succeeded", "errored", "expired", "canceled"
|
|
Message map[string]interface{} `json:"message,omitempty"`
|
|
}
|
|
|
|
// BatchResultError represents an error for a single batch request.
|
|
type BatchResultError struct {
|
|
Code string `json:"code,omitempty"`
|
|
Message string `json:"message,omitempty"`
|
|
}
|
|
|
|
// BifrostBatchResultsResponse represents the response from retrieving batch results.
|
|
type BifrostBatchResultsResponse struct {
|
|
BatchID string `json:"batch_id"`
|
|
Results []BatchResultItem `json:"results"`
|
|
|
|
// For streaming results (Anthropic)
|
|
HasMore bool `json:"has_more,omitempty"`
|
|
NextCursor *string `json:"next_cursor,omitempty"`
|
|
|
|
ExtraFields BifrostResponseExtraFields `json:"extra_fields"`
|
|
}
|