static_embeddings 0.1.3 → 0.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +153 -0
- data/README.md +56 -28
- data/Rakefile +1 -1
- data/docs/ARCHITECTURE.md +50 -31
- data/docs/LIMITATIONS.md +16 -8
- data/docs/MODEL_AUDIT.md +84 -43
- data/docs/PERFORMANCE.md +28 -19
- data/ext/static_embeddings/se_embed.c +48 -8
- data/ext/static_embeddings/se_f16.c +43 -7
- data/ext/static_embeddings/se_format.c +121 -9
- data/ext/static_embeddings/se_internal.h +26 -5
- data/ext/static_embeddings/se_tokenizer.c +451 -47
- data/ext/static_embeddings/se_unicode.c +1 -1
- data/ext/static_embeddings/static_embeddings.c +136 -48
- data/lib/static_embeddings/cli.rb +1 -0
- data/lib/static_embeddings/converter.rb +51 -7
- data/lib/static_embeddings/format.rb +60 -22
- data/lib/static_embeddings/paths.rb +18 -1
- data/lib/static_embeddings/reference.rb +54 -7
- data/lib/static_embeddings/safetensors.rb +178 -34
- data/lib/static_embeddings/version.rb +1 -1
- data/lib/static_embeddings.rb +3 -5
- data/tools/check_model2vec_parity.rb +85 -54
- metadata +1 -1
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
|
|
9
9
|
#define SE_MAGIC "SEMBv1\0\0"
|
|
10
10
|
#define SE_MAGIC_LEN 8
|
|
11
|
-
#define SE_FORMAT_VERSION
|
|
11
|
+
#define SE_FORMAT_VERSION 3u
|
|
12
12
|
#define SE_HEADER_SIZE 320u
|
|
13
13
|
#define SE_ALIGNMENT 64u
|
|
14
14
|
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
#define SE_NORMALIZATION_NONE 0u
|
|
19
19
|
#define SE_NORMALIZATION_L2 1u
|
|
20
20
|
|
|
21
|
-
#define
|
|
21
|
+
#define SE_TRUNCATE_USABLE_IDS_BEFORE_POOLING 2u
|
|
22
22
|
|
|
23
23
|
#define SE_UNK_INCLUDE 0u
|
|
24
24
|
#define SE_UNK_DROP 1u
|
|
@@ -26,6 +26,14 @@
|
|
|
26
26
|
#define SE_EMPTY_ZERO_VECTOR 0u
|
|
27
27
|
#define SE_EMPTY_RAISE 1u
|
|
28
28
|
|
|
29
|
+
#define SE_ADDED_PAD (1u << 0)
|
|
30
|
+
#define SE_ADDED_UNK (1u << 1)
|
|
31
|
+
#define SE_ADDED_CLS (1u << 2)
|
|
32
|
+
#define SE_ADDED_SEP (1u << 3)
|
|
33
|
+
#define SE_ADDED_MASK (1u << 4)
|
|
34
|
+
#define SE_ADDED_TOKEN_MASK_ALL \
|
|
35
|
+
(SE_ADDED_PAD | SE_ADDED_UNK | SE_ADDED_CLS | SE_ADDED_SEP | SE_ADDED_MASK)
|
|
36
|
+
|
|
29
37
|
#define SE_SLOT_EMPTY 0xFFFFFFFFu
|
|
30
38
|
#define SE_SIZE_MAX ((size_t)-1)
|
|
31
39
|
|
|
@@ -83,7 +91,8 @@ enum {
|
|
|
83
91
|
SE_OFF_SEC_ROOT_TRIE = 208,
|
|
84
92
|
SE_OFF_SEC_CONT_TRIE = 224,
|
|
85
93
|
SE_OFF_CHECKSUM = 240,
|
|
86
|
-
SE_OFF_MAX_PROBE = 304
|
|
94
|
+
SE_OFF_MAX_PROBE = 304,
|
|
95
|
+
SE_OFF_ADDED_TOKEN_MASK = 308
|
|
87
96
|
};
|
|
88
97
|
|
|
89
98
|
typedef struct {
|
|
@@ -136,6 +145,12 @@ typedef struct {
|
|
|
136
145
|
uint32_t control_count;
|
|
137
146
|
const se_range_t *whitespace;
|
|
138
147
|
uint32_t whitespace_count;
|
|
148
|
+
const se_map_entry_t *lower256[256];
|
|
149
|
+
const se_map_entry_t *nfd256[256];
|
|
150
|
+
uint8_t mn256[256];
|
|
151
|
+
uint8_t punct256[256];
|
|
152
|
+
uint8_t control256[256];
|
|
153
|
+
uint8_t whitespace256[256];
|
|
139
154
|
} se_norm_tables_t;
|
|
140
155
|
|
|
141
156
|
typedef struct {
|
|
@@ -157,6 +172,7 @@ typedef struct {
|
|
|
157
172
|
uint32_t max_input_chars_per_word;
|
|
158
173
|
uint32_t max_token_chars;
|
|
159
174
|
uint32_t max_probe;
|
|
175
|
+
uint32_t added_token_mask;
|
|
160
176
|
uint32_t pad_id;
|
|
161
177
|
uint32_t unk_id;
|
|
162
178
|
uint32_t cls_id;
|
|
@@ -382,6 +398,9 @@ static inline int se_is_ascii_boundary(uint32_t cp) {
|
|
|
382
398
|
void se_scratch_init(se_scratch_t *s);
|
|
383
399
|
void se_scratch_free(se_scratch_t *s);
|
|
384
400
|
int se_scratch_reserve(se_scratch_t *s, uint32_t dim);
|
|
401
|
+
se_scratch_t *se_scratch_acquire(uint32_t dim);
|
|
402
|
+
void se_scratch_release(se_scratch_t *s);
|
|
403
|
+
void se_scratch_drop_thread(void);
|
|
385
404
|
|
|
386
405
|
size_t se_prefix_boundary_len(const se_model_t *model, const uint8_t *input, size_t input_len,
|
|
387
406
|
size_t target, size_t backscan);
|
|
@@ -392,9 +411,11 @@ typedef struct {
|
|
|
392
411
|
uint32_t truncated;
|
|
393
412
|
} se_token_stats_t;
|
|
394
413
|
|
|
414
|
+
typedef enum { SE_TOKEN_LIMIT_RAW = 0, SE_TOKEN_LIMIT_USABLE = 1 } se_token_limit_t;
|
|
415
|
+
|
|
395
416
|
se_status_t se_tokenize(const se_model_t *model, se_scratch_t *scratch, const uint8_t *input,
|
|
396
|
-
size_t input_len, uint32_t max_tokens,
|
|
397
|
-
se_error_t *err, volatile sig_atomic_t *cancelled);
|
|
417
|
+
size_t input_len, uint32_t max_tokens, se_token_limit_t limit_mode,
|
|
418
|
+
se_token_stats_t *stats, se_error_t *err, volatile sig_atomic_t *cancelled);
|
|
398
419
|
|
|
399
420
|
se_status_t se_embed_one(const se_model_t *model, se_scratch_t *scratch, const uint8_t *input,
|
|
400
421
|
size_t input_len, uint32_t max_tokens, float *out, se_token_stats_t *stats,
|