#pragma once

#include "llama.h"

#include <cstdint>
#include <string>
#include <vector>

enum llama_token_cache_kind : int32_t {
    LLAMA_TOKEN_CACHE_KIND_TOKENIZER = 1,
    LLAMA_TOKEN_CACHE_KIND_TEXT      = 2,
};

std::string llama_token_cache_hash(const void * data, size_t size);
std::string llama_token_cache_hash(const std::string & data);

bool llama_token_cache_lookup(
        llama_token_cache_kind kind,
        const std::string & key,
        std::vector<uint8_t> & payload);

void llama_token_cache_store(
        llama_token_cache_kind kind,
        const std::string & key,
        const std::vector<uint8_t> & payload,
        bool synchronous = false);

void llama_token_cache_note_tokenizer_hit(bool hit);

