gpt4all
73 строки · 2.7 Кб
1#include <QDirIterator>
2#include <QGuiApplication>
3#include <QQmlApplicationEngine>
4#include <QQmlContext>
5
6#include "llm.h"
7#include "modellist.h"
8#include "chatlistmodel.h"
9#include "localdocs.h"
10#include "download.h"
11#include "network.h"
12#include "mysettings.h"
13#include "config.h"
14#include "logger.h"
15#include "../gpt4all-backend/llmodel.h"
16
17int main(int argc, char *argv[])
18{
19QCoreApplication::setOrganizationName("nomic.ai");
20QCoreApplication::setOrganizationDomain("gpt4all.io");
21QCoreApplication::setApplicationName("GPT4All");
22QCoreApplication::setApplicationVersion(APP_VERSION);
23
24Logger::globalInstance();
25
26QGuiApplication app(argc, argv);
27QQmlApplicationEngine engine;
28
29QString llmodelSearchPaths = QCoreApplication::applicationDirPath();
30const QString libDir = QCoreApplication::applicationDirPath() + "/../lib/";
31if (LLM::directoryExists(libDir))
32llmodelSearchPaths += ";" + libDir;
33#if defined(Q_OS_MAC)
34const QString binDir = QCoreApplication::applicationDirPath() + "/../../../";
35if (LLM::directoryExists(binDir))
36llmodelSearchPaths += ";" + binDir;
37const QString frameworksDir = QCoreApplication::applicationDirPath() + "/../Frameworks/";
38if (LLM::directoryExists(frameworksDir))
39llmodelSearchPaths += ";" + frameworksDir;
40#endif
41LLModel::Implementation::setImplementationsSearchPath(llmodelSearchPaths.toStdString());
42
43qmlRegisterSingletonInstance("mysettings", 1, 0, "MySettings", MySettings::globalInstance());
44qmlRegisterSingletonInstance("modellist", 1, 0, "ModelList", ModelList::globalInstance());
45qmlRegisterSingletonInstance("chatlistmodel", 1, 0, "ChatListModel", ChatListModel::globalInstance());
46qmlRegisterSingletonInstance("llm", 1, 0, "LLM", LLM::globalInstance());
47qmlRegisterSingletonInstance("download", 1, 0, "Download", Download::globalInstance());
48qmlRegisterSingletonInstance("network", 1, 0, "Network", Network::globalInstance());
49qmlRegisterSingletonInstance("localdocs", 1, 0, "LocalDocs", LocalDocs::globalInstance());
50const QUrl url(u"qrc:/gpt4all/main.qml"_qs);
51
52QObject::connect(&engine, &QQmlApplicationEngine::objectCreated,
53&app, [url](QObject *obj, const QUrl &objUrl) {
54if (!obj && url == objUrl)
55QCoreApplication::exit(-1);
56}, Qt::QueuedConnection);
57engine.load(url);
58
59#if 0
60QDirIterator it("qrc:", QDirIterator::Subdirectories);
61while (it.hasNext()) {
62qDebug() << it.next();
63}
64#endif
65
66int res = app.exec();
67
68// Make sure ChatLLM threads are joined before global destructors run.
69// Otherwise, we can get a heap-use-after-free inside of llama.cpp.
70ChatListModel::globalInstance()->clearChats();
71
72return res;
73}
74