#ifndef RNN_API_H
#define RNN_API_H
#include <stddef.h>
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
typedef struct RnnFfiBenchmarkRecord {
const uint8_t* model_name_ptr;
size_t model_name_len;
const uint8_t* precision_ptr;
size_t precision_len;
uint64_t elapsed_ms;
uint64_t iterations;
float avg_loss;
float last_loss;
uint64_t output_bytes;
uint64_t train_samples;
uint64_t total_params;
uint32_t layer_count;
uint32_t input_dim;
uint32_t output_dim;
uint64_t benchmark_flags;
uint64_t weights_bytes;
uint64_t biases_bytes;
float min_loss;
float max_loss;
float loss_stddev;
float iterations_per_sec;
float samples_per_sec;
} RnnFfiBenchmarkRecord;
typedef struct RnnFfiBenchmarkView {
const uint8_t* model_name_ptr;
size_t model_name_len;
const uint8_t* precision_ptr;
size_t precision_len;
uint64_t elapsed_ms;
uint64_t iterations;
float avg_loss;
float last_loss;
uint64_t output_bytes;
uint64_t train_samples;
uint64_t total_params;
uint32_t layer_count;
uint32_t input_dim;
uint32_t output_dim;
uint64_t benchmark_flags;
uint64_t weights_bytes;
uint64_t biases_bytes;
float min_loss;
float max_loss;
float loss_stddev;
float iterations_per_sec;
float samples_per_sec;
} RnnFfiBenchmarkView;
typedef enum RnnFfiCode {
RNN_FFI_OK = 0,
RNN_FFI_NULL_POINTER = 1,
RNN_FFI_INVALID_ARGUMENT = 2,
RNN_FFI_BAD_BYTES = 3,
RNN_FFI_CAPACITY_TOO_SMALL = 4,
RNN_FFI_INTERNAL = 8,
} RnnFfiCode;
uint32_t rnn_ffi_api_version(void);
int32_t rnn_ffi_benchmark_encoded_size(
const RnnFfiBenchmarkRecord* record,
size_t* out_size);
int32_t rnn_ffi_encode_benchmark_blob(
const RnnFfiBenchmarkRecord* record,
uint8_t* out_ptr,
size_t out_len,
size_t* out_used);
int32_t rnn_ffi_decode_benchmark_blob(
const uint8_t* blob_ptr,
size_t blob_len,
RnnFfiBenchmarkView* out_view);
const char* rnn_ffi_error_message(int32_t code);
#ifdef __cplusplus
}
#endif
#endif