From fe653d1489c7ca7766d6ad87fd13d61d8fbd6e86 Mon Sep 17 00:00:00 2001 From: Daniel Alencar Date: Sat, 11 Nov 2023 15:52:51 -0300 Subject: [PATCH] feat: added api server port setting --- gpt4all-chat/mysettings.cpp | 20 ++++++++++++++ gpt4all-chat/mysettings.h | 4 +++ gpt4all-chat/qml/ApplicationSettings.qml | 34 +++++++++++++++++++++++- gpt4all-chat/server.cpp | 2 +- 4 files changed, 58 insertions(+), 2 deletions(-) diff --git a/gpt4all-chat/mysettings.cpp b/gpt4all-chat/mysettings.cpp index 9d6dc5cd..d5a7e9df 100644 --- a/gpt4all-chat/mysettings.cpp +++ b/gpt4all-chat/mysettings.cpp @@ -22,6 +22,7 @@ static int default_localDocsRetrievalSize = 3; static bool default_localDocsShowReferences = true; static QString default_networkAttribution = ""; static bool default_networkIsActive = false; +static int default_networkPort = 4891; static bool default_networkUsageStatsActive = false; static QString default_device = "Auto"; @@ -107,6 +108,7 @@ void MySettings::restoreApplicationDefaults() setThreadCount(default_threadCount); setSaveChatsContext(default_saveChatsContext); setServerChat(default_serverChat); + setNetworkPort(default_networkPort); setModelPath(defaultLocalModelsPath()); setUserDefaultModel(default_userDefaultModel); setForceMetal(default_forceMetal); @@ -678,6 +680,24 @@ void MySettings::setServerChat(bool b) emit serverChatChanged(); } +int MySettings::networkPort() const +{ + QSettings setting; + setting.sync(); + return setting.value("networkPort", default_serverChat).toInt(); +} + +void MySettings::setNetworkPort(int c) +{ + if (networkPort() == c) + return; + + QSettings setting; + setting.setValue("networkPort", c); + setting.sync(); + emit networkPortChanged(); +} + QString MySettings::modelPath() const { QSettings setting; diff --git a/gpt4all-chat/mysettings.h b/gpt4all-chat/mysettings.h index d137c583..ce71745a 100644 --- a/gpt4all-chat/mysettings.h +++ b/gpt4all-chat/mysettings.h @@ -28,6 +28,7 @@ class MySettings : public QObject Q_PROPERTY(bool networkUsageStatsActive READ networkUsageStatsActive WRITE setNetworkUsageStatsActive NOTIFY networkUsageStatsActiveChanged) Q_PROPERTY(QString device READ device WRITE setDevice NOTIFY deviceChanged) Q_PROPERTY(QVector deviceList READ deviceList NOTIFY deviceListChanged) + Q_PROPERTY(int networkPort READ networkPort WRITE setNetworkPort NOTIFY networkPortChanged) public: static MySettings *globalInstance(); @@ -131,6 +132,8 @@ public: void setNetworkIsActive(bool b); bool networkUsageStatsActive() const; void setNetworkUsageStatsActive(bool b); + int networkPort() const; + void setNetworkPort(int c); QVector deviceList() const; void setDeviceList(const QVector &deviceList); @@ -164,6 +167,7 @@ Q_SIGNALS: void localDocsShowReferencesChanged(); void networkAttributionChanged(); void networkIsActiveChanged(); + void networkPortChanged(); void networkUsageStatsActiveChanged(); void attemptModelLoadChanged(); void deviceChanged(); diff --git a/gpt4all-chat/qml/ApplicationSettings.qml b/gpt4all-chat/qml/ApplicationSettings.qml index 5a0ef443..882a2910 100644 --- a/gpt4all-chat/qml/ApplicationSettings.qml +++ b/gpt4all-chat/qml/ApplicationSettings.qml @@ -254,9 +254,41 @@ MySettingsTab { } ToolTip.text: qsTr("WARNING: This enables the gui to act as a local REST web server(OpenAI API compliant) for API requests and will increase your RAM usage as well") ToolTip.visible: hovered + } + Label { + id: serverPortLabel + text: qsTr("Server Port (Requires restart):") + color: theme.textColor + font.pixelSize: theme.fontSizeLarge + Layout.row: 9 + Layout.column: 0 + } + MyTextField { + text: MySettings.networkPort + color: theme.textColor + font.pixelSize: theme.fontSizeLarge + ToolTip.text: qsTr("Api server port. WARNING: You need to restart the application for it to take effect") + ToolTip.visible: hovered + Layout.row: 9 + Layout.column: 1 + validator: IntValidator { + bottom: 1 + } + onEditingFinished: { + var val = parseInt(text) + if (!isNaN(val)) { + MySettings.networkPort = val + focus = false + } else { + text = MySettings.networkPort + } + } + Accessible.role: Accessible.EditableText + Accessible.name: nServerPortLabel.text + Accessible.description: ToolTip.text } Rectangle { - Layout.row: 9 + Layout.row: 10 Layout.column: 0 Layout.columnSpan: 3 Layout.fillWidth: true diff --git a/gpt4all-chat/server.cpp b/gpt4all-chat/server.cpp index b7587966..c8aa2364 100644 --- a/gpt4all-chat/server.cpp +++ b/gpt4all-chat/server.cpp @@ -71,7 +71,7 @@ Server::~Server() void Server::start() { m_server = new QHttpServer(this); - if (!m_server->listen(QHostAddress::LocalHost, 4891)) { + if (!m_server->listen(QHostAddress::LocalHost, MySettings::globalInstance()->networkPort())) { qWarning() << "ERROR: Unable to start the server"; return; }