OK, can confirm this worked locally to submit to `legacy` tournament data, as we…ll as the new SM `example_predictions`.
Added a logical parameter `legacy` to indicate the version number.
EDIT: `diagnostics` argument added to run diagnostics on your validation upload.
EDIT #2: Includes `source: "rnumerai"` for `createSubmission` and `createSignalsSubmission` GraphQL mutation
```
#' Function to submit the Numerai Tournament predictions
#'
#' @name submit_predictions
#' @param submission The data frame of predictions to submit. This should have two columns named "id" & "prediction"
#' @param location The location in which to store the predictions
#' @param tournament The name of the tournament, Default is Nomi and is not case-sensitive
#' @param legacy logical; if \code{legacy = FALSE}, submitting on super massive dataset, else submitting on old legacy format.
#' @param diagnostics logical; set \code{diagnostics = TRUE} to to run diagnostics on your upload.
#' @param model_id Target model UUID (required for accounts with multiple models)
#' @param prefix The prefix to use for the submission csv file
#' @return The submission id for the submission made
#' @export
#' @importFrom lubridate today
#' @import httr
#' @importFrom utils write.csv
#' @examples
#' \dontrun{
#' submission_id <- submit_predictions(submission_data,tournament="Nomi")
#' }
submit_predictions <- function(submission, location = tempdir(), tournament = "Nomi", legacy = TRUE,
diagnostics = FALSE, model_id = NULL, prefix = tournament)
{
if(is.null(model_id)) stop("Must provide a model_id")
## Read the Trigger ID env variable
trigger_id = Sys.getenv("TRIGGER_ID")
if (trigger_id == "") {
trigger_id = NULL
}
## Match tournament ID
tournament_id <- match(tolower(tournament),tolower(c("NOMI","SIGNALS"))) + 7
if(is.na(tournament_id)) stop("Tournament Name doesn't match")
if(tournament_id == 8 && !all(names(submission)==c("id","prediction"))) stop("Column names should be id & prediction")
if(tournament_id == 8 && legacy) version <- 1 else version <- 2
## Write out the file
date <- gsub("-","_",Sys.Date())
submission_filename <- file.path(location, paste0(prefix, "_submission_", date, ".csv"))
write.csv(submission, submission_filename, row.names = FALSE)
## Get a slot on AWS for our submission
if(tournament_id == 8){
if(!diagnostics){
aws_slot_query <- paste0('query aws_slot_query {
submissionUploadAuth (filename : "',paste0(prefix, "_submission_", date, ".csv"),'",
tournament: ',tournament_id,',
modelId:"',model_id,'"
){
filename,
url
}
}')
} else {
aws_slot_query <- paste0('query aws_slot_query {
diagnosticsUploadAuth (filename : "',paste0(prefix, "_submission_", date, ".csv"),'",
tournament: ',tournament_id,',
modelId:"',model_id,'"
){
filename,
url
}
}')
}
} else {
aws_slot_query <- paste0('query aws_slot_query {
submissionUploadSignalsAuth (filename : "',paste0(prefix, "_submission_", date, ".csv"),'",
modelId:"',model_id,'"){
filename,
url
}
}')
}
query_pass <- run_query(query=aws_slot_query)
if(tournament_id == 8){
if(!diagnostics) numerai_aws_url = query_pass$data$submissionUploadAuth$url else numerai_aws_url = query_pass$data$diagnosticsUploadAuth$url
} else numerai_aws_url = query_pass$data$submissionUploadSignalsAuth$url
## Upload the predictions
mysubmission <- httr::PUT(
url = numerai_aws_url,
body = upload_file(path = submission_filename)
)
if (mysubmission$status_code != 200) {
stop(paste0("Uploading submission failed with status code ", mysubmission$status_code))
}
## Register our submission and get evaluation for it
if(tournament_id == 8){
if(!diagnostics){
register_submission_query <- paste0(
'mutation register_submission_query {
createSubmission (filename : "',query_pass$data$submissionUploadAuth$filename,'",
tournament: ',tournament_id,',
version: ',version,',
source: "rnumerai",
triggerId: "',trigger_id,'",
modelId:"',model_id,'"){id}
}'
)
} else {
register_submission_query <- paste0(
'mutation register_submission_query {
createDiagnostics (filename : "',query_pass$data$diagnosticsUploadAuth$filename,'",
tournament: ',tournament_id,',
modelId:"',model_id,'"){id}
}'
)
}
} else {
register_submission_query <- paste0(
'mutation register_submission_query {
createSignalsSubmission (filename : "',query_pass$data$submissionUploadSignalsAuth$filename,'",
triggerId: "',trigger_id,'",
source: "rnumerai",
modelId:"',model_id,'"){id}
}'
)
}
query_pass <- run_query(query=register_submission_query)
if(tournament_id == 8){
if(!diagnostics) query_id <- query_pass$data$createSubmission$id else query_id <- query_pass$data$createDiagnostics$id
} else query_id <- query_pass$data$createSignalsSubmission$id
## If error
if(!is.null(query_pass$errors[[1]]$message)) stop(query_pass$errors[[1]]$message)
## Return submission id
if(!diagnostics) message(paste("Submitted Prediction with id", query_id)) else message(paste("Submitted Diagnostics with id", query_id))
return(query_id)
}
```