Files
Beyhan Oğur 880f412e2c first commit
2026-04-26 21:52:23 +03:00

90 lines
2.8 KiB
Go

package replicate
import (
"time"
"github.com/maximhq/bifrost/core/schemas"
)
// Replicate File API Converters
// ToBifrostFileStatus converts Replicate file status to Bifrost file status.
// Replicate doesn't explicitly provide status, so we infer from the response.
func ToBifrostFileStatus(fileResp *ReplicateFileResponse) schemas.FileStatus {
// If file has all required fields and is accessible, it's processed
if fileResp.ID != "" && fileResp.Size > 0 {
return schemas.FileStatusProcessed
}
return schemas.FileStatusUploaded
}
// ToBifrostFileUploadResponse converts Replicate file response to Bifrost file upload response.
func (r *ReplicateFileResponse) ToBifrostFileUploadResponse(providerName schemas.ModelProvider, latency time.Duration, sendBackRawRequest bool, sendBackRawResponse bool, rawRequest interface{}, rawResponse interface{}) *schemas.BifrostFileUploadResponse {
resp := &schemas.BifrostFileUploadResponse{
ID: r.ID,
Object: "file",
Bytes: r.Size,
CreatedAt: ParseReplicateTimestamp(r.CreatedAt),
Filename: r.Name,
Purpose: schemas.FilePurposeBatch, // Replicate uses files primarily for batch/general purposes
Status: ToBifrostFileStatus(r),
StorageBackend: schemas.FileStorageAPI,
ExtraFields: schemas.BifrostResponseExtraFields{
Latency: latency.Milliseconds(),
},
}
// Add ExpiresAt if present
if r.ExpiresAt != "" {
expiresAt := ParseReplicateTimestamp(r.ExpiresAt)
if expiresAt > 0 {
resp.ExpiresAt = &expiresAt
}
}
if sendBackRawRequest {
resp.ExtraFields.RawRequest = rawRequest
}
if sendBackRawResponse {
resp.ExtraFields.RawResponse = rawResponse
}
return resp
}
// ToBifrostFileRetrieveResponse converts Replicate file response to Bifrost file retrieve response.
func (r *ReplicateFileResponse) ToBifrostFileRetrieveResponse(providerName schemas.ModelProvider, latency time.Duration, sendBackRawRequest bool, sendBackRawResponse bool, rawRequest interface{}, rawResponse interface{}) *schemas.BifrostFileRetrieveResponse {
resp := &schemas.BifrostFileRetrieveResponse{
ID: r.ID,
Object: "file",
Bytes: r.Size,
CreatedAt: ParseReplicateTimestamp(r.CreatedAt),
Filename: r.Name,
Purpose: schemas.FilePurposeBatch,
Status: ToBifrostFileStatus(r),
StorageBackend: schemas.FileStorageAPI,
ExtraFields: schemas.BifrostResponseExtraFields{
Latency: latency.Milliseconds(),
},
}
// Add ExpiresAt if present
if r.ExpiresAt != "" {
expiresAt := ParseReplicateTimestamp(r.ExpiresAt)
if expiresAt > 0 {
resp.ExpiresAt = &expiresAt
}
}
if sendBackRawRequest {
resp.ExtraFields.RawRequest = rawRequest
}
if sendBackRawResponse {
resp.ExtraFields.RawResponse = rawResponse
}
return resp
}