173 lines
5.9 KiB
Go
173 lines
5.9 KiB
Go
package openai
|
|
|
|
import (
|
|
"time"
|
|
|
|
"github.com/maximhq/bifrost/core/schemas"
|
|
)
|
|
|
|
// OpenAI Batch API Types
|
|
|
|
// OpenAIBatchRequest represents the request body for creating a batch.
|
|
type OpenAIBatchRequest struct {
|
|
InputFileID string `json:"input_file_id"`
|
|
Endpoint string `json:"endpoint"`
|
|
CompletionWindow string `json:"completion_window"`
|
|
Metadata map[string]string `json:"metadata,omitempty"`
|
|
OutputExpiresAfter *schemas.BatchExpiresAfter `json:"output_expires_after,omitempty"`
|
|
}
|
|
|
|
// OpenAIBatchResponse represents an OpenAI batch response.
|
|
type OpenAIBatchResponse struct {
|
|
ID string `json:"id"`
|
|
Object string `json:"object"`
|
|
Endpoint string `json:"endpoint"`
|
|
Errors *schemas.BatchErrors `json:"errors,omitempty"`
|
|
InputFileID string `json:"input_file_id"`
|
|
CompletionWindow string `json:"completion_window"`
|
|
Status string `json:"status"`
|
|
OutputFileID *string `json:"output_file_id,omitempty"`
|
|
ErrorFileID *string `json:"error_file_id,omitempty"`
|
|
CreatedAt int64 `json:"created_at"`
|
|
InProgressAt *int64 `json:"in_progress_at,omitempty"`
|
|
ExpiresAt *int64 `json:"expires_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"`
|
|
RequestCounts *OpenAIBatchRequestCounts `json:"request_counts,omitempty"`
|
|
Metadata map[string]string `json:"metadata,omitempty"`
|
|
}
|
|
|
|
// OpenAIBatchRequestCounts represents the request counts for a batch.
|
|
type OpenAIBatchRequestCounts struct {
|
|
Total int `json:"total"`
|
|
Completed int `json:"completed"`
|
|
Failed int `json:"failed"`
|
|
}
|
|
|
|
// OpenAIBatchListResponse represents the response from listing batches.
|
|
type OpenAIBatchListResponse struct {
|
|
Object string `json:"object"`
|
|
Data []OpenAIBatchResponse `json:"data"`
|
|
FirstID *string `json:"first_id,omitempty"`
|
|
LastID *string `json:"last_id,omitempty"`
|
|
HasMore bool `json:"has_more"`
|
|
}
|
|
|
|
// ToBifrostBatchStatus converts OpenAI status to Bifrost status.
|
|
func ToBifrostBatchStatus(status string) schemas.BatchStatus {
|
|
switch status {
|
|
case "validating":
|
|
return schemas.BatchStatusValidating
|
|
case "failed":
|
|
return schemas.BatchStatusFailed
|
|
case "in_progress":
|
|
return schemas.BatchStatusInProgress
|
|
case "finalizing":
|
|
return schemas.BatchStatusFinalizing
|
|
case "completed":
|
|
return schemas.BatchStatusCompleted
|
|
case "expired":
|
|
return schemas.BatchStatusExpired
|
|
case "cancelling":
|
|
return schemas.BatchStatusCancelling
|
|
case "cancelled":
|
|
return schemas.BatchStatusCancelled
|
|
default:
|
|
return schemas.BatchStatus(status)
|
|
}
|
|
}
|
|
|
|
// ToBifrostBatchCreateResponse converts OpenAI batch response to Bifrost batch response.
|
|
func (r *OpenAIBatchResponse) ToBifrostBatchCreateResponse(latency time.Duration, sendBackRawRequest bool, sendBackRawResponse bool, rawRequest interface{}, rawResponse interface{}) *schemas.BifrostBatchCreateResponse {
|
|
resp := &schemas.BifrostBatchCreateResponse{
|
|
ID: r.ID,
|
|
Object: r.Object,
|
|
Endpoint: r.Endpoint,
|
|
InputFileID: r.InputFileID,
|
|
CompletionWindow: r.CompletionWindow,
|
|
Status: ToBifrostBatchStatus(r.Status),
|
|
Metadata: r.Metadata,
|
|
CreatedAt: r.CreatedAt,
|
|
OutputFileID: r.OutputFileID,
|
|
ErrorFileID: r.ErrorFileID,
|
|
ExtraFields: schemas.BifrostResponseExtraFields{
|
|
Latency: latency.Milliseconds(),
|
|
},
|
|
}
|
|
|
|
if sendBackRawRequest {
|
|
resp.ExtraFields.RawRequest = rawRequest
|
|
}
|
|
|
|
if r.ExpiresAt != nil {
|
|
resp.ExpiresAt = r.ExpiresAt
|
|
}
|
|
|
|
if r.RequestCounts != nil {
|
|
resp.RequestCounts = schemas.BatchRequestCounts{
|
|
Total: r.RequestCounts.Total,
|
|
Completed: r.RequestCounts.Completed,
|
|
Failed: r.RequestCounts.Failed,
|
|
}
|
|
}
|
|
|
|
if sendBackRawResponse {
|
|
resp.ExtraFields.RawResponse = rawResponse
|
|
}
|
|
|
|
return resp
|
|
}
|
|
|
|
// ToBifrostBatchRetrieveResponse converts OpenAI batch response to Bifrost batch retrieve response.
|
|
func (r *OpenAIBatchResponse) ToBifrostBatchRetrieveResponse(latency time.Duration, sendBackRawRequest bool, sendBackRawResponse bool, rawRequest interface{}, rawResponse interface{}) *schemas.BifrostBatchRetrieveResponse {
|
|
resp := &schemas.BifrostBatchRetrieveResponse{
|
|
ID: r.ID,
|
|
Object: r.Object,
|
|
Endpoint: r.Endpoint,
|
|
InputFileID: r.InputFileID,
|
|
CompletionWindow: r.CompletionWindow,
|
|
Status: ToBifrostBatchStatus(r.Status),
|
|
Metadata: r.Metadata,
|
|
CreatedAt: r.CreatedAt,
|
|
InProgressAt: r.InProgressAt,
|
|
FinalizingAt: r.FinalizingAt,
|
|
CompletedAt: r.CompletedAt,
|
|
FailedAt: r.FailedAt,
|
|
ExpiredAt: r.ExpiredAt,
|
|
CancellingAt: r.CancellingAt,
|
|
CancelledAt: r.CancelledAt,
|
|
OutputFileID: r.OutputFileID,
|
|
ErrorFileID: r.ErrorFileID,
|
|
Errors: r.Errors,
|
|
ExtraFields: schemas.BifrostResponseExtraFields{
|
|
Latency: latency.Milliseconds(),
|
|
},
|
|
}
|
|
|
|
if sendBackRawRequest {
|
|
resp.ExtraFields.RawRequest = rawRequest
|
|
}
|
|
|
|
if r.ExpiresAt != nil {
|
|
resp.ExpiresAt = r.ExpiresAt
|
|
}
|
|
|
|
if r.RequestCounts != nil {
|
|
resp.RequestCounts = schemas.BatchRequestCounts{
|
|
Total: r.RequestCounts.Total,
|
|
Completed: r.RequestCounts.Completed,
|
|
Failed: r.RequestCounts.Failed,
|
|
}
|
|
}
|
|
|
|
if sendBackRawResponse {
|
|
resp.ExtraFields.RawResponse = rawResponse
|
|
}
|
|
|
|
return resp
|
|
}
|