2023-06-22 19:44:49 +00:00
|
|
|
#include "chatlistmodel.h"
|
2023-04-16 23:20:43 +00:00
|
|
|
#include "config.h"
|
2024-06-04 18:47:11 +00:00
|
|
|
#include "download.h"
|
|
|
|
#include "llm.h"
|
|
|
|
#include "localdocs.h"
|
2023-06-01 14:50:42 +00:00
|
|
|
#include "logger.h"
|
2024-06-04 18:47:11 +00:00
|
|
|
#include "modellist.h"
|
|
|
|
#include "mysettings.h"
|
|
|
|
#include "network.h"
|
|
|
|
|
2024-01-11 17:02:39 +00:00
|
|
|
#include "../gpt4all-backend/llmodel.h"
|
2023-04-09 03:28:39 +00:00
|
|
|
|
2024-06-04 18:47:11 +00:00
|
|
|
#include <QCoreApplication>
|
|
|
|
#include <QGuiApplication>
|
|
|
|
#include <QObject>
|
|
|
|
#include <QQmlApplicationEngine>
|
|
|
|
#include <QQmlEngine>
|
2024-06-24 22:49:23 +00:00
|
|
|
#include <QSettings>
|
2024-06-04 18:47:11 +00:00
|
|
|
#include <QString>
|
2024-07-11 17:02:54 +00:00
|
|
|
#include <QTranslator>
|
2024-06-04 18:47:11 +00:00
|
|
|
#include <QUrl>
|
2024-06-24 22:49:23 +00:00
|
|
|
#include <Qt>
|
2024-06-04 18:47:11 +00:00
|
|
|
|
2023-04-09 03:28:39 +00:00
|
|
|
int main(int argc, char *argv[])
|
|
|
|
{
|
2023-04-19 01:10:06 +00:00
|
|
|
QCoreApplication::setOrganizationName("nomic.ai");
|
|
|
|
QCoreApplication::setOrganizationDomain("gpt4all.io");
|
|
|
|
QCoreApplication::setApplicationName("GPT4All");
|
2023-04-16 23:20:43 +00:00
|
|
|
QCoreApplication::setApplicationVersion(APP_VERSION);
|
2024-06-24 22:49:23 +00:00
|
|
|
QSettings::setDefaultFormat(QSettings::IniFormat);
|
2023-04-16 23:20:43 +00:00
|
|
|
|
2023-06-01 14:50:42 +00:00
|
|
|
Logger::globalInstance();
|
|
|
|
|
2023-04-09 03:28:39 +00:00
|
|
|
QGuiApplication app(argc, argv);
|
2024-07-11 17:02:54 +00:00
|
|
|
|
|
|
|
QTranslator translator;
|
|
|
|
bool success = translator.load(":/i18n/gpt4all_en.qm");
|
|
|
|
Q_ASSERT(success);
|
|
|
|
app.installTranslator(&translator);
|
|
|
|
|
2023-04-09 03:28:39 +00:00
|
|
|
QQmlApplicationEngine engine;
|
2024-01-11 17:02:39 +00:00
|
|
|
|
|
|
|
QString llmodelSearchPaths = QCoreApplication::applicationDirPath();
|
|
|
|
const QString libDir = QCoreApplication::applicationDirPath() + "/../lib/";
|
|
|
|
if (LLM::directoryExists(libDir))
|
|
|
|
llmodelSearchPaths += ";" + libDir;
|
|
|
|
#if defined(Q_OS_MAC)
|
|
|
|
const QString binDir = QCoreApplication::applicationDirPath() + "/../../../";
|
|
|
|
if (LLM::directoryExists(binDir))
|
|
|
|
llmodelSearchPaths += ";" + binDir;
|
|
|
|
const QString frameworksDir = QCoreApplication::applicationDirPath() + "/../Frameworks/";
|
|
|
|
if (LLM::directoryExists(frameworksDir))
|
|
|
|
llmodelSearchPaths += ";" + frameworksDir;
|
|
|
|
#endif
|
|
|
|
LLModel::Implementation::setImplementationsSearchPath(llmodelSearchPaths.toStdString());
|
|
|
|
|
2023-06-27 15:54:34 +00:00
|
|
|
qmlRegisterSingletonInstance("mysettings", 1, 0, "MySettings", MySettings::globalInstance());
|
2023-06-22 19:44:49 +00:00
|
|
|
qmlRegisterSingletonInstance("modellist", 1, 0, "ModelList", ModelList::globalInstance());
|
|
|
|
qmlRegisterSingletonInstance("chatlistmodel", 1, 0, "ChatListModel", ChatListModel::globalInstance());
|
2023-04-09 03:28:39 +00:00
|
|
|
qmlRegisterSingletonInstance("llm", 1, 0, "LLM", LLM::globalInstance());
|
2023-04-19 01:10:06 +00:00
|
|
|
qmlRegisterSingletonInstance("download", 1, 0, "Download", Download::globalInstance());
|
2023-04-14 18:44:28 +00:00
|
|
|
qmlRegisterSingletonInstance("network", 1, 0, "Network", Network::globalInstance());
|
2023-05-18 22:59:10 +00:00
|
|
|
qmlRegisterSingletonInstance("localdocs", 1, 0, "LocalDocs", LocalDocs::globalInstance());
|
2023-04-23 13:42:35 +00:00
|
|
|
const QUrl url(u"qrc:/gpt4all/main.qml"_qs);
|
2023-04-09 03:28:39 +00:00
|
|
|
|
|
|
|
QObject::connect(&engine, &QQmlApplicationEngine::objectCreated,
|
|
|
|
&app, [url](QObject *obj, const QUrl &objUrl) {
|
|
|
|
if (!obj && url == objUrl)
|
|
|
|
QCoreApplication::exit(-1);
|
|
|
|
}, Qt::QueuedConnection);
|
|
|
|
engine.load(url);
|
|
|
|
|
2023-04-19 01:10:06 +00:00
|
|
|
#if 0
|
2023-04-09 03:28:39 +00:00
|
|
|
QDirIterator it("qrc:", QDirIterator::Subdirectories);
|
|
|
|
while (it.hasNext()) {
|
|
|
|
qDebug() << it.next();
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
2024-01-31 21:32:32 +00:00
|
|
|
int res = app.exec();
|
|
|
|
|
2024-01-31 19:17:44 +00:00
|
|
|
// Make sure ChatLLM threads are joined before global destructors run.
|
|
|
|
// Otherwise, we can get a heap-use-after-free inside of llama.cpp.
|
2024-03-06 21:42:59 +00:00
|
|
|
ChatListModel::globalInstance()->destroyChats();
|
2024-01-31 19:17:44 +00:00
|
|
|
|
2024-01-31 21:32:32 +00:00
|
|
|
return res;
|
2023-04-09 03:28:39 +00:00
|
|
|
}
|