#ifndef SYNA_H
#define SYNA_H
#include <stdint.h>
#include <stddef.h>
#ifdef __cplusplus
extern "C" {
#endif
#define SYNA_SUCCESS 1
#define SYNA_ERR_GENERIC 0
#define SYNA_ERR_DB_NOT_FOUND -1
#define SYNA_ERR_INVALID_PATH -2
#define SYNA_ERR_IO -3
#define SYNA_ERR_SERIALIZATION -4
#define SYNA_ERR_KEY_NOT_FOUND -5
#define SYNA_ERR_TYPE_MISMATCH -6
#define SYNA_ERR_EMPTY_KEY -7
#define SYNA_ERR_KEY_TOO_LONG -8
#define SYNA_ERR_INTERNAL_PANIC -100
int32_t SYNA_open(const char* path);
int32_t SYNA_close(const char* path);
int64_t SYNA_put_float(const char* path, const char* key, double value);
int64_t SYNA_put_int(const char* path, const char* key, int64_t value);
int64_t SYNA_put_text(const char* path, const char* key, const char* value);
int64_t SYNA_put_bytes(const char* path, const char* key, const uint8_t* data, size_t len);
int32_t SYNA_get_float(const char* path, const char* key, double* out);
int32_t SYNA_get_int(const char* path, const char* key, int64_t* out);
char* SYNA_get_text(const char* path, const char* key, size_t* out_len);
void SYNA_free_text(char* ptr, size_t len);
uint8_t* SYNA_get_bytes(const char* path, const char* key, size_t* out_len);
void SYNA_free_bytes(uint8_t* ptr, size_t len);
double* SYNA_get_history_tensor(const char* path, const char* key, size_t* out_len);
void SYNA_free_tensor(double* ptr, size_t len);
int64_t SYNA_put_vector(const char* path, const char* key,
const float* data, uint16_t dimensions);
int32_t SYNA_get_vector(const char* path, const char* key,
float** out_data, uint16_t* out_dimensions);
void SYNA_free_vector(float* data, uint16_t dimensions);
#define SYNA_METRIC_COSINE 0
#define SYNA_METRIC_EUCLIDEAN 1
#define SYNA_METRIC_DOT_PRODUCT 2
int32_t SYNA_vector_store_new(const char* path, uint16_t dimensions, int32_t metric);
int32_t SYNA_vector_store_insert(const char* path, const char* key,
const float* data, uint16_t dimensions);
int32_t SYNA_vector_store_search(const char* path, const float* query,
uint16_t dimensions, size_t k, char** out_json);
int32_t SYNA_vector_store_close(const char* path);
int32_t SYNA_vector_store_flush(const char* path);
void SYNA_free_json(char* json);
#define SYNA_DTYPE_FLOAT32 0
#define SYNA_DTYPE_FLOAT64 1
#define SYNA_DTYPE_INT32 2
#define SYNA_DTYPE_INT64 3
int32_t SYNA_tensor_get(const char* path, const char* pattern, int32_t dtype,
void** out_data, size_t* out_len);
int32_t SYNA_tensor_put(const char* path, const char* key_prefix,
const void* data, size_t len, int32_t dtype);
void SYNA_free_tensor_data(void* data, size_t len, int32_t dtype);
int32_t SYNA_hnsw_create(const char* path, uint16_t dimensions, int32_t metric,
size_t m, size_t ef_construction);
int32_t SYNA_hnsw_load(const char* path);
int32_t SYNA_hnsw_save(const char* path);
int32_t SYNA_hnsw_insert(const char* path, const char* key,
const float* data, uint16_t dimensions);
int32_t SYNA_hnsw_search(const char* path, const float* query,
uint16_t dimensions, size_t k, size_t ef_search,
char** out_json);
int32_t SYNA_hnsw_stats(const char* path, char** out_json);
int32_t SYNA_hnsw_close(const char* path);
int32_t SYNA_delete(const char* path, const char* key);
int32_t SYNA_exists(const char* path, const char* key);
int32_t SYNA_compact(const char* path);
char** SYNA_keys(const char* path, size_t* out_len);
void SYNA_free_keys(char** keys, size_t len);
#define SYNA_STAGE_DEVELOPMENT 0
#define SYNA_STAGE_STAGING 1
#define SYNA_STAGE_PRODUCTION 2
#define SYNA_STAGE_ARCHIVED 3
int32_t SYNA_model_registry_open(const char* path);
int64_t SYNA_model_save(const char* path, const char* name,
const uint8_t* data, size_t data_len,
const char* metadata_json,
uint32_t* out_version,
char** out_checksum, size_t* out_checksum_len);
int32_t SYNA_model_load(const char* path, const char* name, uint32_t version,
uint8_t** out_data, size_t* out_data_len,
char** out_meta_json, size_t* out_meta_len);
int32_t SYNA_model_list(const char* path, const char* name,
char** out_json, size_t* out_len);
int32_t SYNA_model_set_stage(const char* path, const char* name,
uint32_t version, int32_t stage);
#define SYNA_RUN_RUNNING 0
#define SYNA_RUN_COMPLETED 1
#define SYNA_RUN_FAILED 2
#define SYNA_RUN_KILLED 3
int32_t SYNA_exp_tracker_open(const char* path);
int32_t SYNA_exp_start_run(const char* path, const char* experiment,
const char* tags_json,
char** out_run_id, size_t* out_run_id_len);
int32_t SYNA_exp_log_param(const char* path, const char* run_id,
const char* key, const char* value);
int32_t SYNA_exp_log_metric(const char* path, const char* run_id,
const char* key, double value, int64_t step);
int32_t SYNA_exp_log_artifact(const char* path, const char* run_id,
const char* name,
const uint8_t* data, size_t data_len);
int32_t SYNA_exp_end_run(const char* path, const char* run_id, int32_t status);
int32_t SYNA_gwi_new(const char* path, uint16_t dimensions);
int32_t SYNA_gwi_open(const char* path);
int32_t SYNA_gwi_initialize(const char* path, const float* vectors,
size_t count, uint16_t dimensions);
int32_t SYNA_gwi_insert(const char* path, const char* key,
const float* vector, uint16_t dimensions);
int32_t SYNA_gwi_insert_batch(const char* path, const char* const* keys,
const float* vectors, size_t count,
uint16_t dimensions);
int32_t SYNA_gwi_search(const char* path, const float* query,
uint16_t dimensions, size_t k, char** out_json);
int32_t SYNA_gwi_search_nprobe(const char* path, const float* query,
uint16_t dimensions, size_t k, size_t nprobe,
char** out_json);
int32_t SYNA_gwi_flush(const char* path);
int32_t SYNA_gwi_close(const char* path);
int64_t SYNA_gwi_len(const char* path);
#define SVS_SUCCESS 1
#define SVS_ERR_GENERIC 0
#define SVS_ERR_NULL_PTR -1
#define SVS_ERR_INVALID_UTF8 -2
#define SVS_ERR_NOT_FOUND -3
#define SVS_ERR_ALREADY_EXISTS -4
#define SVS_ERR_INTERNAL -100
int32_t svs_new(const char* path);
int32_t svs_close(const char* path);
int64_t svs_index(const char* path, const char* key,
const uint32_t* term_ids, const float* weights, uint32_t count);
int32_t svs_search(const char* path,
const uint32_t* term_ids, const float* weights, uint32_t count,
uint32_t k, char** out_keys, float* out_scores, uint32_t* out_count);
void svs_free_key(char* key);
int64_t svs_len(const char* path);
int32_t svs_delete(const char* path, const char* key);
int32_t svs_stats(const char* path,
uint32_t* out_num_docs, uint32_t* out_num_terms,
uint32_t* out_num_postings, float* out_avg_doc_len);
int32_t svs_exists(const char* path);
int32_t svs_save(const char* path, const char* file_path);
int32_t svs_open(const char* path, const char* file_path);
#ifdef SYNA_DAVO
#define DAVO_SUCCESS 1
#define DAVO_ERR_NULL_PTR -1
#define DAVO_ERR_INVALID_UTF8 -2
#define DAVO_ERR_NOT_FOUND -3
#define DAVO_ERR_ALREADY_EXISTS -4
#define DAVO_ERR_INTERNAL -100
int32_t SYNA_davo_freshness_index_new(const char* path, double threshold);
int32_t SYNA_davo_freshness_index_insert(const char* path, const char* key,
double decay_rate);
int32_t SYNA_davo_freshness_index_get_freshness(const char* path, const char* key,
double* out_freshness);
int32_t SYNA_davo_freshness_index_query_stale(const char* path,
char*** out_keys, size_t* out_count);
int32_t SYNA_davo_freshness_index_evict_stale(const char* path, size_t* out_count);
int64_t SYNA_davo_freshness_index_len(const char* path);
int32_t SYNA_davo_freshness_index_close(const char* path);
int32_t SYNA_davo_freshness_index_save(const char* path, const char* file_path);
int32_t SYNA_davo_freshness_index_load(const char* path, const char* file_path);
void SYNA_davo_free_keys(char** keys, size_t count);
int32_t SYNA_davo_predictor_new(const char* path);
int32_t SYNA_davo_predictor_observe(const char* path, double actual_decay);
int32_t SYNA_davo_predictor_predict(const char* path, double* out_prediction);
int32_t SYNA_davo_predictor_sample(const char* path, double* out_sample);
int32_t SYNA_davo_predictor_uncertainty(const char* path, double* out_uncertainty);
int32_t SYNA_davo_predictor_close(const char* path);
int32_t SYNA_davo_predictor_save(const char* path, const char* file_path);
int32_t SYNA_davo_predictor_load(const char* path, const char* file_path);
#endif
#ifdef __cplusplus
}
#endif
#endif