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 }