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 */