022/ChatGLM-2

/ChatGLM-2/ChatGLM2/Engine/ModelManager.h
#pragma once
#include <vector>
#include <string>
#include "Model.h"

class ModelManager
{
public:
ModelManager();
~ModelManager();

void LoadModel(const std::string& model_path);
void UnloadModel();

void LoadModel(const std::string& model_path, int model_index);
void UnloadModel(int model_index);

void LoadModel(const std::string& model_path, int model_index, bool is_custom);
void UnloadModel(int model_index);

void LoadModel(const std::string& model_path, int model_index, bool is_custom, int model_version);
void UnloadModel(int model_index);

void LoadModel(const std::string& model_path, int model_index, bool is_custom, int model_version, int model_type);
void UnloadModel(int model_index);

void LoadModel(const std::string& model_path, int model_index, bool is_custom, int model_version, int model_type, int model_hash);
void UnloadModel(int model_index);

Model* GetModel(int model_index) const;

private:
std::vector<Model*> models_;
};

/ChatGLM-2/ChatGLM2/Engine/Model.h
#pragma once
#include <string>
#include <map>
#include <unordered_map>

class Model
{
public:
Model() = default;
virtual ~Model() = default;

void SetModelVersion(const std::string& model_version) { this->model_version_ = model_version; }
void SetModelType(const std::string& model_type) { this->model_type_ = model_type; }
void SetModelHash(const std::string& model_hash) { this->model_hash_ = model_hash; }
void SetModelPath(const std::string& model_path) { this->model_path_ = model_path; }
std::string GetModelVersion() const { return this->model_version_; }
std::string GetModelType() const { return this->model_type_; }
std::string GetModelHash() const { return this->model_hash_; }
std::string GetModelPath() const { return this->model_path_; }

virtual float GetModelSize() const = 0;
virtual std::string GetModelFileName() const = 0;
virtual float GetModelSizeInBytes() const = 0;

protected:
std::string model_version_;
std::string model_type_;
std::string model_path_;
std::string model_hash_;
};

/ChatGLM-2/ChatGLM2/Engine/Tokenizer.h
#pragma once
#include "Tokenizer.h"

class SimpleTokenizer : public Tokenizer
{
public:
SimpleTokenizer();

void SetLowercase(bool is_lower_case) override;
void SetCharType(char_type_type type) override;
void SetCharOffsetType(char_offset_type type) override;
void SetCharOffset(char_offset_type type) override;

void SetVocab(const std::vector<std::string>& vocab) override;
void SetVocab(const std::vector<std::string>& vocab, bool is_lower_case) override;
void SetVocab(const std::vector<std::string>& vocab, char_type_type type) override;

void SetMaxCharLength(int max_char_length) override;
void SetMaxCharLength(int max_char_length, char_type_type type) override;

void SetMinCharLength(int min_char_length) override;
void SetMinCharLength(int min_char_length, char_type_type type) override;

void SetMaxWordLength(int max_word_length) override;
void SetMaxWordLength(int max_word_length, char_type_type type) override;

void SetMinWordLength(int min_word_length) override;
void SetMinWordLength(int min_word_length, char_type_type type) override;

void SetWordCharList(const std::vector<std::string>& word_char_list) override;
void SetWordCharList(const std::vector<std::string>& word_char_list, char_type_type type) override;

void SetCharTypeList(const std::vector<std::string>& char_type_list) override;

void SetCharOffsetList(const std::vector<std::string>& char_offset_list) override;

void SetCharOffsetTypeList(const std::vector<std::string>& char_offset_type_list) override;

void SetVocabSize(int vocab_size) override;

void SetVocabSize(int vocab_size, char_type_type type) override;

void SetCharTypeCount(int char_type_count) override;
void SetCharTypeCount(int char_type_count, char_type_type type) override;

void SetCharOffsetTypeCount(int char_offset_type_count) override;

void SetCharTypeCountList(const std::vector<int>& char_type_count_list) override;
void SetCharTypeCountList(const std::vector<int>& char_type_count_list, char_type_type type) override;

void SetCharOffsetTypeCountList(const std::vector<int>& char_offset_type_count_list) override;

void SetCharTypeCountList(const std::vector<int>& char_type_count_list, char_type_type type) override;
void SetCharOffsetTypeCountList(const std::vector<int>& char_offset_type_count_list, char_type_type type) override;

void SetCharTypeCountList(const std::vector<int>& char_type_count_list, char_type_type type) override;

private:
char_type_type type_;
char_offset_type type_offset_;
char_type_count char_type_count_;
char_offset_type_count char_offset_type_count_;

std::vector<std::string> char_type_list_;
std::vector<std::string> char_offset_type_list_;
std::vector<std::string> char_type_count_list_;
std::vector<std::string> char_offset_type_count_list_;
};

/ChatGLM-2/ChatGLM2/Engine/ModelManager.h
#pragma once
#include "Model.h"
#include "Tokenizer.h"
#include <