ChatON:WIP: initial go at GroupKV based flow, instead of json
This commit is contained in:
parent
f294fddf43
commit
e999934e91
1 changed files with 34 additions and 37 deletions
|
@ -192,7 +192,7 @@
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <json.hpp>
|
#include <groupkv.hpp>
|
||||||
|
|
||||||
#include "log.h"
|
#include "log.h"
|
||||||
#include "llama.h"
|
#include "llama.h"
|
||||||
|
@ -213,10 +213,12 @@ const auto K_SYSTEMUSER_1ST_USER_HAS_BEGIN = "systemuser-1st-user-has-begin";
|
||||||
const auto K_SYSTEMUSER_1ST_USER_HAS_PREFIX = "systemuser-1st-user-has-prefix";
|
const auto K_SYSTEMUSER_1ST_USER_HAS_PREFIX = "systemuser-1st-user-has-prefix";
|
||||||
const auto K_REVERSE_PROMPT = "reverse-prompt";
|
const auto K_REVERSE_PROMPT = "reverse-prompt";
|
||||||
|
|
||||||
|
#define CHATON_JSON
|
||||||
|
#ifdef CHATON_JSON
|
||||||
|
#include <json.hpp>
|
||||||
using json = nlohmann::ordered_json;
|
using json = nlohmann::ordered_json;
|
||||||
|
#endif
|
||||||
|
|
||||||
json conMeta;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -296,37 +298,40 @@ public:
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
inline bool chaton_meta_load(std::string &fname) {
|
|
||||||
if (conMeta != nullptr) {
|
class ChatTemplates : public GroupKV {
|
||||||
LOGXLN("WARN:%s:ChatOn Meta: overwriting???", __func__);
|
|
||||||
}
|
};
|
||||||
|
|
||||||
|
ChatTemplates gCT;
|
||||||
|
|
||||||
|
#ifdef CHATON_JSON
|
||||||
|
|
||||||
|
inline bool chaton_meta_load(const std::string &fname) {
|
||||||
std::ifstream f(fname);
|
std::ifstream f(fname);
|
||||||
conMeta = json::parse(f);
|
json conMeta = json::parse(f);
|
||||||
|
for(auto curTmpl: conMeta) {
|
||||||
|
curTmpl.dump();
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
inline bool chaton_tmpl_exists(const std::string &tmpl) {
|
inline bool chaton_tmpl_exists(const std::string &tmpl) {
|
||||||
if (conMeta == nullptr) {
|
if (!gCT.group_exists(tmpl)) {
|
||||||
LOG_TEELN("ERRR:%s:ChatOnMeta: Not loaded yet...", __func__);
|
LOG_TEELN("WARN:%s: tmpl[%s] not found...", __func__, tmpl.c_str());
|
||||||
return false;
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
auto tmplData = conMeta[tmpl];
|
|
||||||
return true;
|
|
||||||
} catch (json::exception &err) {
|
|
||||||
LOG_TEELN("WARN:%s:ChatOnMeta: tmpl[%s] not found...", __func__, tmpl.c_str());
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline std::string chaton_tmpl_role_kv(const std::string &tmpl, const std::string &role, const std::vector<std::string> &keys) {
|
inline std::string chaton_tmpl_role_kv(const std::string &tmpl, const std::string &role, const std::vector<std::string> &keys) {
|
||||||
std::string got = "";
|
std::string got = "";
|
||||||
std::string sKeys = "";
|
std::string sKeys = "";
|
||||||
for(auto key: keys) {
|
for(auto key: keys) {
|
||||||
try {
|
got += gCT.get_value<std::string>(tmpl, {role, key}, "");
|
||||||
got += conMeta[tmpl][role][key];
|
|
||||||
} catch (json::exception &err) {
|
|
||||||
}
|
|
||||||
sKeys += "+";
|
sKeys += "+";
|
||||||
sKeys += key;
|
sKeys += key;
|
||||||
}
|
}
|
||||||
|
@ -335,13 +340,13 @@ inline std::string chaton_tmpl_role_kv(const std::string &tmpl, const std::strin
|
||||||
}
|
}
|
||||||
|
|
||||||
inline std::string chaton_tmpl_kv(const std::string &tmpl, const std::string &key) {
|
inline std::string chaton_tmpl_kv(const std::string &tmpl, const std::string &key) {
|
||||||
std::string got = conMeta[tmpl][key];
|
std::string got = gCT.get_value<std::string>(tmpl, {key}, "");
|
||||||
LOGLN("DBUG:%s:%s:%s:%s", __func__, tmpl.c_str(), key.c_str(), got.c_str());
|
LOGLN("DBUG:%s:%s:%s:%s", __func__, tmpl.c_str(), key.c_str(), got.c_str());
|
||||||
return got;
|
return got;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline bool chaton_tmpl_kv_bool(const std::string &tmpl, const std::string &key) {
|
inline bool chaton_tmpl_kv_bool(const std::string &tmpl, const std::string &key) {
|
||||||
bool got = conMeta[tmpl][key];
|
bool got = gCT.get_value(tmpl, {key}, false);
|
||||||
LOGLN("DBUG:%s:%s:%s:%d", __func__, tmpl.c_str(), key.c_str(), got);
|
LOGLN("DBUG:%s:%s:%s:%d", __func__, tmpl.c_str(), key.c_str(), got);
|
||||||
return got;
|
return got;
|
||||||
}
|
}
|
||||||
|
@ -471,10 +476,10 @@ inline bool chaton_tmpl_apply_ex(
|
||||||
} else if (role == K_USER) {
|
} else if (role == K_USER) {
|
||||||
cntUser += 1;
|
cntUser += 1;
|
||||||
if ((cntSystem == 1) && (cntUser == 1)) {
|
if ((cntSystem == 1) && (cntUser == 1)) {
|
||||||
if (conMeta[tmpl][K_SYSTEMUSER_1ST_USER_HAS_BEGIN]) {
|
if (chaton_tmpl_kv_bool(tmpl, K_SYSTEMUSER_1ST_USER_HAS_BEGIN)) {
|
||||||
cp.add_part(ChatParts::S, begin);
|
cp.add_part(ChatParts::S, begin);
|
||||||
}
|
}
|
||||||
if (conMeta[tmpl][K_SYSTEMUSER_1ST_USER_HAS_PREFIX]) {
|
if (chaton_tmpl_kv_bool(tmpl, K_SYSTEMUSER_1ST_USER_HAS_PREFIX)) {
|
||||||
cp.add_part(ChatParts::S, prefix);
|
cp.add_part(ChatParts::S, prefix);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -687,16 +692,13 @@ inline std::vector<llama_token> chaton_llama_tokenize_ex(
|
||||||
* * chaton-template-id, then dump contents related to that specific chat-handshake-template-standard
|
* * chaton-template-id, then dump contents related to that specific chat-handshake-template-standard
|
||||||
*/
|
*/
|
||||||
inline bool _chaton_meta_dump(std::string &tmpl) {
|
inline bool _chaton_meta_dump(std::string &tmpl) {
|
||||||
json theJson;
|
if (!tmpl.empty()) {
|
||||||
if (tmpl.empty()) {
|
if (!gCT.group_exists(tmpl)) {
|
||||||
theJson = conMeta;
|
|
||||||
} else {
|
|
||||||
theJson = conMeta[tmpl];
|
|
||||||
if (theJson.empty()) {
|
|
||||||
LOGXLN("ERRR:%s:Specified template-id [%s] not found", __func__, tmpl.c_str());
|
LOGXLN("ERRR:%s:Specified template-id [%s] not found", __func__, tmpl.c_str());
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
gCT.dump(tmpl);
|
||||||
LOGXLN("\n\nINFO:%s:ChatOn Meta:%s:\n%s", __func__, tmpl.c_str(), theJson.dump(4).c_str());
|
LOGXLN("\n\nINFO:%s:ChatOn Meta:%s:\n%s", __func__, tmpl.c_str(), theJson.dump(4).c_str());
|
||||||
if (!tmpl.empty()) {
|
if (!tmpl.empty()) {
|
||||||
std::string globalBegin = conMeta[tmpl][K_GLOBAL][K_BEGIN];
|
std::string globalBegin = conMeta[tmpl][K_GLOBAL][K_BEGIN];
|
||||||
|
@ -745,13 +747,8 @@ inline bool _chaton_meta_dump(std::string &tmpl) {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check that a meta-json file has been loaded.
|
* Verify that specified chaton-template-id contains required fields using meta-dump
|
||||||
* Verify that specified chaton-template-id contains required fields in meta-json, using meta-dump
|
|
||||||
*/
|
*/
|
||||||
inline bool chaton_meta_ok(std::string &tmpl) {
|
inline bool chaton_meta_ok(std::string &tmpl) {
|
||||||
if (conMeta == nullptr) {
|
|
||||||
LOG_TEELN("ERRR:%s:%s:ChatOn Meta: Not loaded yet...", __func__, tmpl.c_str());
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return _chaton_meta_dump(tmpl);
|
return _chaton_meta_dump(tmpl);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue