Skip to main content

qualia_core_db/inference/runtime/graph_assist/
identity.rs

1use crate::NQuin;
2
3#[repr(C)]
4#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash)]
5pub struct PrefixIdentity {
6    pub words: [u64; 4],
7}
8
9#[inline]
10fn mix(mut value: u64) -> u64 {
11    value ^= value >> 30;
12    value = value.wrapping_mul(0xbf58_476d_1ce4_e5b9);
13    value ^= value >> 27;
14    value = value.wrapping_mul(0x94d0_49bb_1331_11eb);
15    value ^ (value >> 31)
16}
17
18/// Bind reusable KV pages to the exact model, tokenizer, graph scope/revision and selected facts.
19pub fn derive_prefix_identity(
20    model_instance: u64,
21    tokenizer_revision: u64,
22    graph_context: u64,
23    graph_revision: u64,
24    facts: &[NQuin],
25) -> PrefixIdentity {
26    let mut words = [
27        mix(model_instance ^ 0x243f_6a88_85a3_08d3),
28        mix(tokenizer_revision ^ 0x1319_8a2e_0370_7344),
29        mix(graph_context ^ 0xa409_3822_299f_31d0),
30        mix(graph_revision ^ 0x082e_fa98_ec4e_6c89),
31    ];
32    for (index, fact) in facts.iter().enumerate() {
33        let lanes = [
34            fact.subject,
35            fact.predicate,
36            fact.object,
37            fact.context,
38            fact.metadata,
39            fact.parity,
40        ];
41        for (lane, value) in lanes.into_iter().enumerate() {
42            let target = (index + lane) & 3;
43            words[target] = mix(words[target] ^ value ^ ((index as u64) << 32) ^ lane as u64);
44        }
45    }
46    PrefixIdentity { words }
47}