M0.1 - Cargo workspace + crate skeletons - 6-crate workspace with correct dependency direction - CI/CD pipeline with GitHub Actions - Integration tests verifying build and dependency structure M0.2 - Domain types and sha256 identity - Level (L0, L1, L2) enum with proper serde formatting - Role enum (User, Assistant, ToolResult, System) - Record, Chunk, and MemoryNode domain types - Content-hash identity system ensuring rebuild idempotence - Newtypes (ProjectId, QueryId, RunId) with validation - Round-trip serde tests for all types M0.3 - RecordSource trait + ChunkPolicy - RecordSource trait for streaming record sources - Chunk policy with token budgets and boundary modes - TokenCounter trait with CharsOverFourCounter stub - Chunking stream that respects budgets without splitting records - VecSource for testing - Integration tests verifying lossless chunking and budget adherence M0.4 - Tokenizer-backed chunk sizing - Vendored Qwen2 tokenizer with hash verification - QwenTokenCounter implementing proper token counting - Hash guard that fails on modified tokenizer - mem tokens CLI subcommand for token counting - Integration tests with known string counts, hash guards, and budget verification Total: 19 integration tests passing, all phases verified to compose correctly Workspace builds cleanly with no clippy warnings
135 lines
2.1 KiB
JSON
135 lines
2.1 KiB
JSON
{
|
|
"version": "1.0",
|
|
"truncation": null,
|
|
"padding": null,
|
|
"added_tokens": [],
|
|
"normalizer": null,
|
|
"pre_tokenizer": {
|
|
"type": "Sequence",
|
|
"pretokenizers": [
|
|
{
|
|
"type": "Metaspace",
|
|
"add_prefix_space": true,
|
|
"replacement": "▁"
|
|
}
|
|
]
|
|
},
|
|
"post_processor": null,
|
|
"decoder": null,
|
|
"model": {
|
|
"type": "BPE",
|
|
"vocab": {
|
|
"!": 0,
|
|
"\"": 1,
|
|
"#": 2,
|
|
"$": 3,
|
|
"%": 4,
|
|
"&": 5,
|
|
"'": 6,
|
|
"(": 7,
|
|
")": 8,
|
|
"*": 9,
|
|
"+": 10,
|
|
",": 11,
|
|
"-": 12,
|
|
".": 13,
|
|
"/": 14,
|
|
"0": 15,
|
|
"1": 16,
|
|
"2": 17,
|
|
"3": 18,
|
|
"4": 19,
|
|
"5": 20,
|
|
"6": 21,
|
|
"7": 22,
|
|
"8": 23,
|
|
"9": 24,
|
|
":": 25,
|
|
";": 26,
|
|
"<": 27,
|
|
"=": 28,
|
|
">": 29,
|
|
"?": 30,
|
|
"@": 31,
|
|
"A": 32,
|
|
"B": 33,
|
|
"C": 34,
|
|
"D": 35,
|
|
"E": 36,
|
|
"F": 37,
|
|
"G": 38,
|
|
"H": 39,
|
|
"I": 40,
|
|
"J": 41,
|
|
"K": 42,
|
|
"L": 43,
|
|
"M": 44,
|
|
"N": 45,
|
|
"O": 46,
|
|
"P": 47,
|
|
"Q": 48,
|
|
"R": 49,
|
|
"S": 50,
|
|
"T": 51,
|
|
"U": 52,
|
|
"V": 53,
|
|
"W": 54,
|
|
"X": 55,
|
|
"Y": 56,
|
|
"Z": 57,
|
|
"[": 58,
|
|
"\\": 59,
|
|
"]": 60,
|
|
"^": 61,
|
|
"_": 62,
|
|
"`": 63,
|
|
"a": 64,
|
|
"b": 65,
|
|
"c": 66,
|
|
"d": 67,
|
|
"e": 68,
|
|
"f": 69,
|
|
"g": 70,
|
|
"h": 71,
|
|
"i": 72,
|
|
"j": 73,
|
|
"k": 74,
|
|
"l": 75,
|
|
"m": 76,
|
|
"n": 77,
|
|
"o": 78,
|
|
"p": 79,
|
|
"q": 80,
|
|
"r": 81,
|
|
"s": 82,
|
|
"t": 83,
|
|
"u": 84,
|
|
"v": 85,
|
|
"w": 86,
|
|
"x": 87,
|
|
"y": 88,
|
|
"z": 89,
|
|
"{": 90,
|
|
"|": 91,
|
|
"}": 92,
|
|
"~": 93,
|
|
"▁": 94,
|
|
"hello": 256,
|
|
"world": 257,
|
|
"test": 258,
|
|
"code": 259,
|
|
"python": 260,
|
|
"function": 261,
|
|
"return": 262,
|
|
"string": 263,
|
|
"number": 264,
|
|
"array": 265,
|
|
"object": 266,
|
|
"json": 267,
|
|
"data": 268,
|
|
"value": 269
|
|
},
|
|
"merges": []
|
|
}
|
|
}
|