Polyphase Game Engine
Loading...
Searching...
No Matches
TinyLLMAsset.h
Go to the documentation of this file.
1
11#pragma once
12
13#include "Asset.h"
14#include "AssetRef.h"
15#include <vector>
16#include <string>
17
19
20// Prevent duplicate definition in plugin's TinyLLMInference.h
21#ifndef TINYLLM_CONFIG_DEFINED
22#define TINYLLM_CONFIG_DEFINED
27{
28 int32_t dim = 0; // transformer dimension
29 int32_t hidden_dim = 0; // FFN hidden dimension
30 int32_t n_layers = 0; // number of transformer layers
31 int32_t n_heads = 0; // number of query heads
32 int32_t n_kv_heads = 0; // number of key/value heads (can differ for GQA)
33 int32_t vocab_size = 0; // vocabulary size
34 int32_t seq_len = 0; // max sequence length
35};
36#endif
37
43{
44public:
45
47
49 virtual ~TinyLLMAsset();
50
51 // Asset interface
52 virtual void Create() override;
53 virtual void Destroy() override;
54 virtual void LoadStream(Stream& stream, Platform platform) override;
55 virtual void SaveStream(Stream& stream, Platform platform) override;
56 virtual bool Import(const std::string& path, ImportOptions* options) override;
57 virtual void GatherProperties(std::vector<Property>& outProps) override;
58 virtual glm::vec4 GetTypeColor() override;
59 virtual const char* GetTypeName() override;
60 virtual const char* GetTypeImportExt() override;
61
62 // Configuration
63 const TinyLLMConfig& GetConfig() const { return mConfig; }
64
65 // Weight access (pointers into mWeightData)
66 float* GetTokenEmbedding() const { return mTokenEmbedding; }
67 float* GetRmsAttWeight() const { return mRmsAttWeight; }
68 float* GetWq() const { return mWq; }
69 float* GetWk() const { return mWk; }
70 float* GetWv() const { return mWv; }
71 float* GetWo() const { return mWo; }
72 float* GetRmsFfnWeight() const { return mRmsFfnWeight; }
73 float* GetW1() const { return mW1; }
74 float* GetW2() const { return mW2; }
75 float* GetW3() const { return mW3; }
76 float* GetRmsFinalWeight() const { return mRmsFinalWeight; }
77 float* GetWcls() const { return mWcls; }
78
79 // Tokenizer asset reference
80 void SetTokenizer(TinyLLMTokenizerAsset* tokenizer);
81 TinyLLMTokenizerAsset* GetTokenizer() const;
82
83 // Tokenization (delegates to tokenizer asset)
84 void Encode(const char* text, bool addBos, bool addEos, std::vector<int32_t>& outTokens);
85 std::string Decode(int prevToken, int token);
86
87 // Memory utilities
88 size_t GetWeightMemorySize() const;
89 size_t GetKVCacheMemorySize(int32_t maxSeqLen) const;
90
91protected:
92
93 static bool HandlePropChange(Datum* datum, uint32_t index, const void* newValue);
94
95 void SetupWeightPointers();
96
97 // Configuration
99
100 // Weight pointers (into mWeightData)
101 float* mTokenEmbedding = nullptr;
102 float* mRmsAttWeight = nullptr;
103 float* mWq = nullptr;
104 float* mWk = nullptr;
105 float* mWv = nullptr;
106 float* mWo = nullptr;
107 float* mRmsFfnWeight = nullptr;
108 float* mW1 = nullptr;
109 float* mW2 = nullptr;
110 float* mW3 = nullptr;
111 float* mRmsFinalWeight = nullptr;
112 float* mWcls = nullptr;
113
114 // Weight storage
115 std::vector<float> mWeightData;
116
117 // Reference to tokenizer asset
119};
Platform
Definition EngineTypes.h:31
#define POLYPHASE_API
Definition PolyphaseAPI.h:31
Definition AssetRef.h:18
Definition Asset.h:113
virtual bool Import(const std::string &path, ImportOptions *options=nullptr)
Definition Asset.cpp:244
virtual void Create()
Definition Asset.cpp:77
virtual void SaveStream(Stream &stream, Platform platform)
Definition Asset.cpp:236
virtual glm::vec4 GetTypeColor()
Definition Asset.cpp:254
virtual const char * GetTypeImportExt()
Definition Asset.cpp:264
virtual const char * GetTypeName()
Definition Asset.cpp:259
virtual void GatherProperties(std::vector< Property > &outProps) override
Definition Asset.cpp:249
virtual void LoadStream(Stream &stream, Platform platform)
Definition Asset.cpp:222
virtual void Destroy()
Definition Asset.cpp:87
Definition Datum.h:164
Definition Asset.h:102
Definition Stream.h:21
Asset containing a tiny LLM model and tokenizer.
Definition TinyLLMAsset.h:43
std::vector< float > mWeightData
Definition TinyLLMAsset.h:115
float * GetRmsAttWeight() const
Definition TinyLLMAsset.h:67
float * GetWk() const
Definition TinyLLMAsset.h:69
float * GetWv() const
Definition TinyLLMAsset.h:70
float * GetTokenEmbedding() const
Definition TinyLLMAsset.h:66
float * GetWo() const
Definition TinyLLMAsset.h:71
DECLARE_ASSET(TinyLLMAsset, Asset)
AssetRef mTokenizer
Definition TinyLLMAsset.h:118
float * GetRmsFinalWeight() const
Definition TinyLLMAsset.h:76
float * GetRmsFfnWeight() const
Definition TinyLLMAsset.h:72
TinyLLMConfig mConfig
Definition TinyLLMAsset.h:98
float * GetWcls() const
Definition TinyLLMAsset.h:77
float * GetWq() const
Definition TinyLLMAsset.h:68
float * GetW2() const
Definition TinyLLMAsset.h:74
const TinyLLMConfig & GetConfig() const
Definition TinyLLMAsset.h:63
float * GetW3() const
Definition TinyLLMAsset.h:75
float * GetW1() const
Definition TinyLLMAsset.h:73
Asset containing tokenizer vocabulary for TinyLLM models.
Definition TinyLLMTokenizerAsset.h:17
Configuration for the transformer model.
Definition TinyLLMAsset.h:27
int32_t n_heads
Definition TinyLLMAsset.h:31
int32_t n_layers
Definition TinyLLMAsset.h:30
int32_t hidden_dim
Definition TinyLLMAsset.h:29
int32_t seq_len
Definition TinyLLMAsset.h:34
int32_t dim
Definition TinyLLMAsset.h:28
int32_t vocab_size
Definition TinyLLMAsset.h:33
int32_t n_kv_heads
Definition TinyLLMAsset.h:32