File size: 3,037 Bytes
9425aed | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 | #pragma once
#include <stdint.h>
#include <stddef.h>
#define SOV_MAX_SEQS 256
#define SOV_MAX_SEQ_LEN 2048
#define SOV_MAX_HEADS 128
#define SOV_KV_BLOCK_SIZE 16
#define SOV_JANET_SLOTS 32
typedef enum {
SOV_POWER_ACTIVE = 0,
SOV_POWER_SUSPEND = 1,
SOV_POWER_RESUME = 2,
SOV_POWER_LOW_BATTERY = 3
} sov_power_state_t;
typedef enum {
SOV_SCHED_IDLE = 0,
SOV_SCHED_PREFILL = 1,
SOV_SCHED_GENERATE = 2,
SOV_SCHED_SWAP = 3,
SOV_SCHED_CHECKPOINT = 4,
SOV_SCHED_RESUME = 5
} sov_sched_state_t;
typedef struct {
uint32_t type_tag;
uint32_t length;
uint32_t capacity;
float data[SOV_JANET_SLOTS];
} sov_janet_array_t;
typedef struct {
uint32_t block_id;
uint32_t seq_id;
uint32_t layer;
uint32_t token_offset;
float* k_data;
float* v_data;
} sov_kv_block_t;
typedef struct {
sov_sched_state_t state;
uint32_t batch_size;
sov_janet_array_t janet;
} sov_scheduler_t;
typedef struct {
uint8_t votes[5];
uint32_t quorum;
uint32_t height;
} sov_bft_state_t;
typedef struct {
uint8_t blake3[32];
uint8_t ed25519[64];
} sov_worm_receipt_t;
/* CUDA */
int sov_cuda_init(void);
int sov_cuda_load_ptx(const char* ptx_data, unsigned int ptx_size, void** module_out);
int sov_cuda_flash_attention(int seqs, int heads, float* q, float* k, float* v,
float* out, int* block_table, int* seq_lens,
int head_dim, int block_size);
void* sov_cuda_malloc(size_t size);
int sov_cuda_memcpy_h2d(void* dst, const void* src, size_t size);
/* Scheduler */
int sov_scheduler_init(sov_scheduler_t* sched);
int sov_scheduler_step(sov_scheduler_t* sched, void* batch_ptr, void* kv_ptr);
/* KV Cache */
int sov_kv_init(void* kv_store, int n_layers, int n_kv_heads, int head_dim, int block_size, int max_blocks);
/* See kv_allocator.h for authoritative prototype */
/* See kv_allocator.h for authoritative prototype */
/* GGUF */
int sov_gguf_load(const char* path, void** ctx_out);
const void* sov_gguf_get_tensor(void* ctx, const char* name);
/* BFT */
int sov_bft_vote(sov_bft_state_t* bft, uint8_t vote);
int sov_bft_check_quorum(const sov_bft_state_t* bft);
/* WORM */
int sov_worm_checkpoint(void* kv_ptr);
int sov_worm_restore(void* kv_ptr);
/* Power */
int sov_set_power_state(sov_power_state_t state);
sov_power_state_t sov_get_power_state(void);
/* Speculative */
int sov_speculative_draft(void* batch_ptr, int draft_len, void* kv_ptr);
int sov_speculative_verify(void* draft_logits, void* target_logits, int len);
/* Janet */
float sov_janet_get(int slot);
void sov_janet_set(int slot, float val);
/* CUDA backend identifiers */
#define SOV_CUDA_BACKEND_SOV_RTX 1
#define SOV_CUDA_REQUIRED_KERNEL_MASK 0x3F /* gemm + flash_attn + rms_norm + rotary + softmax + elementwise */
|