From eab92a9d732b8df09de14c82d10cbf1667a655c0 Mon Sep 17 00:00:00 2001 From: Adam Treat Date: Wed, 5 Jul 2023 19:41:07 -0400 Subject: [PATCH] Fix typo and add new show references setting to localdocs. --- gpt4all-chat/chat.cpp | 70 +++++++++++++------------- gpt4all-chat/metadata/models.json | 2 +- gpt4all-chat/mysettings.cpp | 20 ++++++++ gpt4all-chat/mysettings.h | 4 ++ gpt4all-chat/qml/LocalDocsSettings.qml | 17 +++++++ gpt4all-chat/server.cpp | 20 +++++--- 6 files changed, 90 insertions(+), 43 deletions(-) diff --git a/gpt4all-chat/chat.cpp b/gpt4all-chat/chat.cpp index ea63879c..82a00e2c 100644 --- a/gpt4all-chat/chat.cpp +++ b/gpt4all-chat/chat.cpp @@ -189,43 +189,45 @@ void Chat::responseStopped() m_tokenSpeed = QString(); emit tokenSpeedChanged(); - const QString chatResponse = response(); - QList references; - QList referencesContext; - int validReferenceNumber = 1; - for (const ResultInfo &info : databaseResults()) { - if (info.file.isEmpty()) - continue; - if (validReferenceNumber == 1) - references.append((!chatResponse.endsWith("\n") ? "\n" : QString()) + QStringLiteral("\n---")); - QString reference; - { - QTextStream stream(&reference); - stream << (validReferenceNumber++) << ". "; - if (!info.title.isEmpty()) - stream << "\"" << info.title << "\". "; - if (!info.author.isEmpty()) - stream << "By " << info.author << ". "; - if (!info.date.isEmpty()) - stream << "Date: " << info.date << ". "; - stream << "In " << info.file << ". "; - if (info.page != -1) - stream << "Page " << info.page << ". "; - if (info.from != -1) { - stream << "Lines " << info.from; - if (info.to != -1) - stream << "-" << info.to; - stream << ". "; + if (MySettings::globalInstance()->localDocsShowReferences()) { + const QString chatResponse = response(); + QList references; + QList referencesContext; + int validReferenceNumber = 1; + for (const ResultInfo &info : databaseResults()) { + if (info.file.isEmpty()) + continue; + if (validReferenceNumber == 1) + references.append((!chatResponse.endsWith("\n") ? "\n" : QString()) + QStringLiteral("\n---")); + QString reference; + { + QTextStream stream(&reference); + stream << (validReferenceNumber++) << ". "; + if (!info.title.isEmpty()) + stream << "\"" << info.title << "\". "; + if (!info.author.isEmpty()) + stream << "By " << info.author << ". "; + if (!info.date.isEmpty()) + stream << "Date: " << info.date << ". "; + stream << "In " << info.file << ". "; + if (info.page != -1) + stream << "Page " << info.page << ". "; + if (info.from != -1) { + stream << "Lines " << info.from; + if (info.to != -1) + stream << "-" << info.to; + stream << ". "; + } + stream << "[Context](context://" << validReferenceNumber - 1 << ")"; } - stream << "[Context](context://" << validReferenceNumber - 1 << ")"; + references.append(reference); + referencesContext.append(info.text); } - references.append(reference); - referencesContext.append(info.text); - } - const int index = m_chatModel->count() - 1; - m_chatModel->updateReferences(index, references.join("\n"), referencesContext); - emit responseChanged(); + const int index = m_chatModel->count() - 1; + m_chatModel->updateReferences(index, references.join("\n"), referencesContext); + emit responseChanged(); + } m_responseInProgress = false; m_responseState = Chat::ResponseStopped; diff --git a/gpt4all-chat/metadata/models.json b/gpt4all-chat/metadata/models.json index 08162a61..1b1387e1 100644 --- a/gpt4all-chat/metadata/models.json +++ b/gpt4all-chat/metadata/models.json @@ -164,7 +164,7 @@ "parameters": "13 billion", "quant": "q4_2", "type": "LLaMA", - "description": "Trained with RHLF by Stability AI
  • Instruction based
  • Cannot be used commercially
", + "description": "Trained with RLHF by Stability AI
  • Instruction based
  • Cannot be used commercially
", "systemPrompt": "## Assistant: I am StableVicuna, a large language model created by CarperAI. I am here to chat!\n\n" }, { diff --git a/gpt4all-chat/mysettings.cpp b/gpt4all-chat/mysettings.cpp index e2e3097c..a318e06a 100644 --- a/gpt4all-chat/mysettings.cpp +++ b/gpt4all-chat/mysettings.cpp @@ -17,6 +17,7 @@ static bool default_forceMetal = false; static QString default_lastVersionStarted = ""; static int default_localDocsChunkSize = 256; static int default_localDocsRetrievalSize = 3; +static bool default_localDocsShowReferences = true; static QString default_networkAttribution = ""; static bool default_networkIsActive = false; static bool default_networkUsageStatsActive = false; @@ -89,6 +90,7 @@ void MySettings::restoreLocalDocsDefaults() { setLocalDocsChunkSize(default_localDocsChunkSize); setLocalDocsRetrievalSize(default_localDocsRetrievalSize); + setLocalDocsShowReferences(default_localDocsShowReferences); } void MySettings::eraseModel(const ModelInfo &m) @@ -520,6 +522,24 @@ void MySettings::setLocalDocsRetrievalSize(int s) emit localDocsRetrievalSizeChanged(); } +bool MySettings::localDocsShowReferences() const +{ + QSettings setting; + setting.sync(); + return setting.value("localdocs/showReferences", default_localDocsShowReferences).toBool(); +} + +void MySettings::setLocalDocsShowReferences(bool b) +{ + if (localDocsShowReferences() == b) + return; + + QSettings setting; + setting.setValue("localdocs/showReferences", b); + setting.sync(); + emit localDocsShowReferencesChanged(); +} + QString MySettings::networkAttribution() const { QSettings setting; diff --git a/gpt4all-chat/mysettings.h b/gpt4all-chat/mysettings.h index a64fb5d9..873cf5ec 100644 --- a/gpt4all-chat/mysettings.h +++ b/gpt4all-chat/mysettings.h @@ -19,6 +19,7 @@ class MySettings : public QObject Q_PROPERTY(QString lastVersionStarted READ lastVersionStarted WRITE setLastVersionStarted NOTIFY lastVersionStartedChanged) Q_PROPERTY(int localDocsChunkSize READ localDocsChunkSize WRITE setLocalDocsChunkSize NOTIFY localDocsChunkSizeChanged) Q_PROPERTY(int localDocsRetrievalSize READ localDocsRetrievalSize WRITE setLocalDocsRetrievalSize NOTIFY localDocsRetrievalSizeChanged) + Q_PROPERTY(bool localDocsShowReferences READ localDocsShowReferences WRITE setLocalDocsShowReferences NOTIFY localDocsShowReferencesChanged) Q_PROPERTY(QString networkAttribution READ networkAttribution WRITE setNetworkAttribution NOTIFY networkAttributionChanged) Q_PROPERTY(bool networkIsActive READ networkIsActive WRITE setNetworkIsActive NOTIFY networkIsActiveChanged) Q_PROPERTY(bool networkUsageStatsActive READ networkUsageStatsActive WRITE setNetworkUsageStatsActive NOTIFY networkUsageStatsActiveChanged) @@ -81,6 +82,8 @@ public: void setLocalDocsChunkSize(int s); int localDocsRetrievalSize() const; void setLocalDocsRetrievalSize(int s); + bool localDocsShowReferences() const; + void setLocalDocsShowReferences(bool b); // Network settings QString networkAttribution() const; @@ -112,6 +115,7 @@ Q_SIGNALS: void lastVersionStartedChanged(); void localDocsChunkSizeChanged(); void localDocsRetrievalSizeChanged(); + void localDocsShowReferencesChanged(); void networkAttributionChanged(); void networkIsActiveChanged(); void networkUsageStatsActiveChanged(); diff --git a/gpt4all-chat/qml/LocalDocsSettings.qml b/gpt4all-chat/qml/LocalDocsSettings.qml index 4bfc6e46..242be8e1 100644 --- a/gpt4all-chat/qml/LocalDocsSettings.qml +++ b/gpt4all-chat/qml/LocalDocsSettings.qml @@ -170,6 +170,23 @@ MySettingsTab { } } + RowLayout { + Label { + id: showReferencesLabel + text: qsTr("Show references:") + color: theme.textColor + } + MyCheckBox { + id: showReferencesBox + checked: MySettings.localDocsShowReferences + onClicked: { + MySettings.localDocsShowReferences = !MySettings.localDocsShowReferences + } + ToolTip.text: qsTr("Shows any references in GUI generated by localdocs") + ToolTip.visible: hovered + } + } + Rectangle { Layout.fillWidth: true height: 1 diff --git a/gpt4all-chat/server.cpp b/gpt4all-chat/server.cpp index 09d8256a..af59c7f9 100644 --- a/gpt4all-chat/server.cpp +++ b/gpt4all-chat/server.cpp @@ -351,10 +351,12 @@ QHttpServerResponse Server::handleCompletionRequest(const QHttpServerRequest &re message.insert("role", "assistant"); message.insert("content", result); choice.insert("message", message); - QJsonArray references; - for (const auto &ref : infos) - references.append(resultToJson(ref)); - choice.insert("references", references); + if (MySettings::globalInstance()->localDocsShowReferences()) { + QJsonArray references; + for (const auto &ref : infos) + references.append(resultToJson(ref)); + choice.insert("references", references); + } choices.append(choice); } } else { @@ -367,10 +369,12 @@ QHttpServerResponse Server::handleCompletionRequest(const QHttpServerRequest &re choice.insert("index", index++); choice.insert("logprobs", QJsonValue::Null); // We don't support choice.insert("finish_reason", responseTokens == max_tokens ? "length" : "stop"); - QJsonArray references; - for (const auto &ref : infos) - references.append(resultToJson(ref)); - choice.insert("references", references); + if (MySettings::globalInstance()->localDocsShowReferences()) { + QJsonArray references; + for (const auto &ref : infos) + references.append(resultToJson(ref)); + choice.insert("references", references); + } choices.append(choice); } }