#pragma once #include #include #include constexpr int TEST_VOCAB_SIZE = 64; constexpr int TEST_EMBEDDING_DIM = 8; constexpr int TEST_NUM_HEADS = 2; constexpr int TEST_HEAD_DIM = TEST_EMBEDDING_DIM / TEST_NUM_HEADS; constexpr int TEST_NUM_LAYERS = 2; constexpr int TEST_MAX_CTX = 500; inline const std::unordered_map TEST_VOCAB = { // Специальные токены {"", 0}, {"", 1}, {"", 2}, {"", 3}, // Приветствия и базовые фразы {"привет", 4}, {"здравствуй", 5}, {"как", 6}, {"дела", 7}, {"ты", 8}, {"я", 9}, {"мы", 10}, // Вопросы {"что", 11}, {"где", 12}, {"когда", 13}, {"почему", 14}, {"сколько", 15}, // Существительные {"мир", 16}, {"день", 17}, {"время", 18}, {"работа", 19}, {"код", 20}, {"программа", 21}, {"компьютер", 22}, {"система", 23}, {"данные", 24}, {"память", 25}, // Глаголы {"делать", 26}, {"идти", 27}, {"работать", 28}, {"думать", 29}, {"писать", 30}, {"читать", 31}, {"понимать", 32}, // Прилагательные {"хорошо", 33}, {"плохо", 34}, {"быстро", 35}, {"медленно", 36}, {"новый", 37}, {"старый", 38}, // Технические термины {"функция", 39}, {"переменная", 40}, {"класс", 41}, {"объект", 42}, {"массив", 43}, {"указатель", 44}, {"алгоритм", 45}, // Союзы и предлоги {"и", 46}, {"или", 47}, {"но", 48}, {"если", 49}, {"то", 50}, {"в", 51}, {"на", 52}, {"с", 53}, {"из", 54}, {"для", 55}, // Частицы {"не", 56}, {"ли", 57}, {"же", 58}, {"бы", 59}, // Знаки препинания (опционально) {".", 60}, {",", 61}, {"?", 62}, {"!", 63}, }; inline constexpr float TEST_W_EMB[TEST_VOCAB_SIZE][TEST_EMBEDDING_DIM] = { // {0.1f, 0.2f, 0.3f, 0.4f, 0.5f, 0.6f, 0.7f, 0.8f}, // {0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f}, // {0.2f, 0.3f, 0.4f, 0.5f, 0.6f, 0.7f, 0.8f, 0.9f}, // {0.9f, 0.8f, 0.7f, 0.6f, 0.5f, 0.4f, 0.3f, 0.2f}, // привет {0.9f, 0.8f, 0.7f, 0.6f, 0.5f, 0.4f, 0.3f, 0.2f}, // здравствуй {0.85f, 0.75f, 0.65f, 0.55f, 0.45f, 0.35f, 0.25f, 0.15f}, // как {0.3f, 0.4f, 0.5f, 0.6f, 0.7f, 0.8f, 0.9f, 0.1f}, // дела {0.4f, 0.5f, 0.6f, 0.7f, 0.8f, 0.9f, 0.1f, 0.2f}, // ты {0.5f, 0.6f, 0.7f, 0.8f, 0.9f, 0.1f, 0.2f, 0.3f}, // я {0.6f, 0.7f, 0.8f, 0.9f, 0.1f, 0.2f, 0.3f, 0.4f}, // мы {0.7f, 0.8f, 0.9f, 0.1f, 0.2f, 0.3f, 0.4f, 0.5f}, // что {0.15f, 0.25f, 0.35f, 0.45f, 0.55f, 0.65f, 0.75f, 0.85f}, // где {0.25f, 0.35f, 0.45f, 0.55f, 0.65f, 0.75f, 0.85f, 0.95f}, // когда {0.35f, 0.45f, 0.55f, 0.65f, 0.75f, 0.85f, 0.95f, 0.05f}, // почему {0.45f, 0.55f, 0.65f, 0.75f, 0.85f, 0.95f, 0.05f, 0.15f}, // сколько {0.55f, 0.65f, 0.75f, 0.85f, 0.95f, 0.05f, 0.15f, 0.25f}, // мир {0.1f, 0.9f, 0.2f, 0.8f, 0.3f, 0.7f, 0.4f, 0.6f}, // день {0.2f, 0.8f, 0.3f, 0.7f, 0.4f, 0.6f, 0.5f, 0.5f}, // время {0.3f, 0.7f, 0.4f, 0.6f, 0.5f, 0.5f, 0.6f, 0.4f}, // работа {0.4f, 0.6f, 0.5f, 0.5f, 0.6f, 0.4f, 0.7f, 0.3f}, // код {0.5f, 0.5f, 0.6f, 0.4f, 0.7f, 0.3f, 0.8f, 0.2f}, // программа {0.6f, 0.4f, 0.7f, 0.3f, 0.8f, 0.2f, 0.9f, 0.1f}, // компьютер {0.7f, 0.3f, 0.8f, 0.2f, 0.9f, 0.1f, 0.0f, 0.0f}, // система {0.8f, 0.2f, 0.9f, 0.1f, 0.0f, 0.0f, 0.1f, 0.9f}, // данные {0.9f, 0.1f, 0.0f, 0.0f, 0.1f, 0.9f, 0.2f, 0.8f}, // память {0.0f, 0.0f, 0.1f, 0.9f, 0.2f, 0.8f, 0.3f, 0.7f}, // делать {0.12f, 0.23f, 0.34f, 0.45f, 0.56f, 0.67f, 0.78f, 0.89f}, // идти {0.23f, 0.34f, 0.45f, 0.56f, 0.67f, 0.78f, 0.89f, 0.12f}, // работать {0.34f, 0.45f, 0.56f, 0.67f, 0.78f, 0.89f, 0.12f, 0.23f}, // думать {0.45f, 0.56f, 0.67f, 0.78f, 0.89f, 0.12f, 0.23f, 0.34f}, // писать {0.56f, 0.67f, 0.78f, 0.89f, 0.12f, 0.23f, 0.34f, 0.45f}, // читать {0.67f, 0.78f, 0.89f, 0.12f, 0.23f, 0.34f, 0.45f, 0.56f}, // понимать {0.78f, 0.89f, 0.12f, 0.23f, 0.34f, 0.45f, 0.56f, 0.67f}, // хорошо {0.89f, 0.12f, 0.23f, 0.34f, 0.45f, 0.56f, 0.67f, 0.78f}, // плохо {0.11f, 0.22f, 0.33f, 0.44f, 0.55f, 0.66f, 0.77f, 0.88f}, // быстро {0.22f, 0.33f, 0.44f, 0.55f, 0.66f, 0.77f, 0.88f, 0.99f}, // медленно {0.33f, 0.44f, 0.55f, 0.66f, 0.77f, 0.88f, 0.99f, 0.11f}, // новый {0.44f, 0.55f, 0.66f, 0.77f, 0.88f, 0.99f, 0.11f, 0.22f}, // старый {0.55f, 0.66f, 0.77f, 0.88f, 0.99f, 0.11f, 0.22f, 0.33f}, // функция {0.66f, 0.77f, 0.88f, 0.99f, 0.11f, 0.22f, 0.33f, 0.44f}, // переменная {0.77f, 0.88f, 0.99f, 0.11f, 0.22f, 0.33f, 0.44f, 0.55f}, // класс {0.88f, 0.99f, 0.11f, 0.22f, 0.33f, 0.44f, 0.55f, 0.66f}, // объект {0.99f, 0.11f, 0.22f, 0.33f, 0.44f, 0.55f, 0.66f, 0.77f}, // массив {0.13f, 0.24f, 0.35f, 0.46f, 0.57f, 0.68f, 0.79f, 0.80f}, // указатель {0.24f, 0.35f, 0.46f, 0.57f, 0.68f, 0.79f, 0.80f, 0.13f}, // алгоритм {0.35f, 0.46f, 0.57f, 0.68f, 0.79f, 0.80f, 0.13f, 0.24f}, // и {0.46f, 0.57f, 0.68f, 0.79f, 0.80f, 0.13f, 0.24f, 0.35f}, // или {0.57f, 0.68f, 0.79f, 0.80f, 0.13f, 0.24f, 0.35f, 0.46f}, // но {0.68f, 0.79f, 0.80f, 0.13f, 0.24f, 0.35f, 0.46f, 0.57f}, // если {0.79f, 0.80f, 0.13f, 0.24f, 0.35f, 0.46f, 0.57f, 0.68f}, // то {0.80f, 0.13f, 0.24f, 0.35f, 0.46f, 0.57f, 0.68f, 0.79f}, // в {0.14f, 0.25f, 0.36f, 0.47f, 0.58f, 0.69f, 0.70f, 0.81f}, // на {0.25f, 0.36f, 0.47f, 0.58f, 0.69f, 0.70f, 0.81f, 0.14f}, // с {0.36f, 0.47f, 0.58f, 0.69f, 0.70f, 0.81f, 0.14f, 0.25f}, // из {0.47f, 0.58f, 0.69f, 0.70f, 0.81f, 0.14f, 0.25f, 0.36f}, // для {0.58f, 0.69f, 0.70f, 0.81f, 0.14f, 0.25f, 0.36f, 0.47f}, // не {0.69f, 0.70f, 0.81f, 0.14f, 0.25f, 0.36f, 0.47f, 0.58f}, // ли {0.70f, 0.81f, 0.14f, 0.25f, 0.36f, 0.47f, 0.58f, 0.69f}, // же {0.81f, 0.14f, 0.25f, 0.36f, 0.47f, 0.58f, 0.69f, 0.70f}, // бы {0.16f, 0.27f, 0.38f, 0.49f, 0.50f, 0.61f, 0.72f, 0.83f}, // . {0.27f, 0.38f, 0.49f, 0.50f, 0.61f, 0.72f, 0.83f, 0.16f}, // , {0.38f, 0.49f, 0.50f, 0.61f, 0.72f, 0.83f, 0.16f, 0.27f}, // ? {0.49f, 0.50f, 0.61f, 0.72f, 0.83f, 0.16f, 0.27f, 0.38f}, // ! {0.50f, 0.61f, 0.72f, 0.83f, 0.16f, 0.27f, 0.38f, 0.49f}, }; inline constexpr float TEST_W_QKV[TEST_NUM_LAYERS][TEST_EMBEDDING_DIM][3][TEST_NUM_HEADS] = { { {{0.1f, 0.2f}, {0.3f, 0.4f}, {0.5f, 0.6f}}, {{0.7f, 0.8f}, {0.9f, 1.0f}, {1.1f, 1.2f}}, {{0.1f, 0.1f}, {0.2f, 0.2f}, {0.3f, 0.3f}}, {{0.4f, 0.4f}, {0.5f, 0.5f}, {0.6f, 0.6f}}, {{0.7f, 0.7f}, {0.8f, 0.8f}, {0.9f, 0.9f}}, {{1.0f, 1.0f}, {1.1f, 1.1f}, {1.2f, 1.2f}}, {{0.1f, 0.3f}, {0.5f, 0.7f}, {0.9f, 1.1f}}, {{0.2f, 0.4f}, {0.6f, 0.8f}, {1.0f, 1.2f}} }, { {{0.9f, 0.8f}, {0.7f, 0.6f}, {0.5f, 0.4f}}, {{0.3f, 0.2f}, {0.1f, 0.0f}, {-0.1f, -0.2f}}, {{0.5f, 0.5f}, {0.6f, 0.6f}, {0.7f, 0.7f}}, {{0.8f, 0.8f}, {0.9f, 0.9f}, {1.0f, 1.0f}}, {{0.2f, 0.4f}, {0.6f, 0.8f}, {1.0f, 1.2f}}, {{0.3f, 0.5f}, {0.7f, 0.9f}, {1.1f, 1.3f}}, {{0.4f, 0.6f}, {0.8f, 1.0f}, {1.2f, 1.4f}}, {{0.5f, 0.7f}, {0.9f, 1.1f}, {1.3f, 1.5f}} } }; inline constexpr float TEST_W_O[TEST_NUM_LAYERS][TEST_NUM_HEADS * TEST_HEAD_DIM][TEST_EMBEDDING_DIM] = { { {0.1f, 0.2f, 0.3f, 0.4f, 0.5f, 0.6f, 0.7f, 0.8f}, {0.9f, 0.8f, 0.7f, 0.6f, 0.5f, 0.4f, 0.3f, 0.2f}, {0.1f, 0.9f, 0.2f, 0.8f, 0.3f, 0.7f, 0.4f, 0.6f}, {0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f}, {0.2f, 0.4f, 0.6f, 0.8f, 1.0f, 1.2f, 1.4f, 1.6f}, {0.3f, 0.5f, 0.7f, 0.9f, 1.1f, 1.3f, 1.5f, 1.7f}, {0.4f, 0.6f, 0.8f, 1.0f, 1.2f, 1.4f, 1.6f, 1.8f}, {0.5f, 0.7f, 0.9f, 1.1f, 1.3f, 1.5f, 1.7f, 1.9f} }, { {0.8f, 0.7f, 0.6f, 0.5f, 0.4f, 0.3f, 0.2f, 0.1f}, {0.1f, 0.2f, 0.3f, 0.4f, 0.5f, 0.6f, 0.7f, 0.8f}, {0.9f, 0.1f, 0.8f, 0.2f, 0.7f, 0.3f, 0.6f, 0.4f}, {0.5f, 0.6f, 0.7f, 0.8f, 0.9f, 1.0f, 1.1f, 1.2f}, {0.1f, 0.3f, 0.5f, 0.7f, 0.9f, 1.1f, 1.3f, 1.5f}, {0.2f, 0.4f, 0.6f, 0.8f, 1.0f, 1.2f, 1.4f, 1.6f}, {0.3f, 0.5f, 0.7f, 0.9f, 1.1f, 1.3f, 1.5f, 1.7f}, {0.4f, 0.6f, 0.8f, 1.0f, 1.2f, 1.4f, 1.6f, 1.8f} } };