// isis memory bank — FlatBuffers schema
// Supports f32/f16/i8 key quantization for production deployment

namespace isis.fb;

// Key quantization formats
enum KeyFormat : byte {
    F32 = 0,
    F16 = 1,
    I8  = 2,
}

// Exact model identity — keys are ONLY valid for this exact config.
table ModelId {
    model: string;       // HuggingFace model name (e.g. "Qwen/Qwen2.5-0.5B")
    backend: string;     // Inference backend (e.g. "onnx", "gguf", "transformers")
    quant: string;       // Weight quantization (e.g. "f32", "f16", "q4_k_m")
    hidden_dim: uint32;  // Hidden state dimension (e.g. 896)
    extraction: string;  // Hidden state extraction point (e.g. "pre_mlp_layer23")
}

// A memory key stored in the chosen precision
table KeyData {
    format: KeyFormat;
    // Exactly one of these is populated based on format
    f32_data: [float];    // dim × 4 bytes
    f16_data: [uint16];   // dim × 2 bytes (IEEE 754 half)
    i8_data:  [int8];     // dim × 1 byte  (scaled to [-127, 127])
    // Scale factor for i8 dequantization: real = i8 * scale
    i8_scale: float;
}

table SuppressEntry {
    token_id: uint32;
    bias: float;
}

table LogitBias {
    token_id: uint32;
    token: string;
    strength: float;
    suppress: [SuppressEntry];
}

table ContentKey {
    key: KeyData;
    token: string;
    position: int32;
}

table Episode {
    prompt: string;
    answer: string;
    alter: string;
    keys: [ContentKey];
    logit_biases: [LogitBias];
    strength: float;
    recall_count: uint32;
    created_at: float64;
    consolidated: bool;
}

table Alter {
    name: string;
    episodes: [Episode];
}

table Rule {
    instruction: string;
    priority: float;
    trigger: string;
    active: bool;
}

table Avoidance {
    pattern: string;
    reason: string;
    key: KeyData;
    suppress_token_ids: [uint32];
    strength: float;
    active: bool;
}

table MemoryBank {
    version: uint32;
    model_id: ModelId;   // Exact model identity
    threshold: float;
    key_format: KeyFormat;
    alters: [Alter];
    rules: [Rule];
    avoidances: [Avoidance];
}

root_type MemoryBank;
file_identifier "isis";
file_extension "fb";
