Skip to content

Commit

Permalink
The ChatModel::get method was removed which unfortunately caused a re…
Browse files Browse the repository at this point in the history
…gression

in a few places in QML that were using this method. This PR fixes two of
these issues:

* Issue #3333 - the stop generation button no longer working
* Issue #3335 - the copy entire conversation button no longer working

It also adds a fixme in the code for a third issue which is less of a priority:

* Issue #3334 - not sending the conversation to the datalake.

Signed-off-by: Adam Treat <[email protected]>
  • Loading branch information
manyoso committed Dec 20, 2024
1 parent 93b4093 commit 45c53ee
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 44 deletions.
88 changes: 44 additions & 44 deletions gpt4all-chat/qml/ChatView.qml
Original file line number Diff line number Diff line change
Expand Up @@ -37,10 +37,11 @@ Rectangle {

Connections {
target: currentChat
function onResponseInProgressChanged() {
if (MySettings.networkIsActive && !currentChat.responseInProgress)
Network.sendConversation(currentChat.id, getConversationJson());
}
// FIXME: https://github.com/nomic-ai/gpt4all/issues/3334
// function onResponseInProgressChanged() {
// if (MySettings.networkIsActive && !currentChat.responseInProgress)
// Network.sendConversation(currentChat.id, getConversationJson());
// }
function onModelLoadingErrorChanged() {
if (currentChat.modelLoadingError !== "")
modelLoadingErrorPopup.open()
Expand Down Expand Up @@ -116,42 +117,44 @@ Rectangle {
}
}

function getConversation() {
var conversation = "";
for (var i = 0; i < chatModel.count; i++) {
var item = chatModel.get(i)
var string = item.name;
var isResponse = item.name === "Response: "
string += chatModel.get(i).value
if (isResponse && item.stopped)
string += " <stopped>"
string += "\n"
conversation += string
}
return conversation
}

function getConversationJson() {
var str = "{\"conversation\": [";
for (var i = 0; i < chatModel.count; i++) {
var item = chatModel.get(i)
var isResponse = item.name === "Response: "
str += "{\"content\": ";
str += JSON.stringify(item.value)
str += ", \"role\": \"" + (isResponse ? "assistant" : "user") + "\"";
if (isResponse && item.thumbsUpState !== item.thumbsDownState)
str += ", \"rating\": \"" + (item.thumbsUpState ? "positive" : "negative") + "\"";
if (isResponse && item.newResponse !== "")
str += ", \"edited_content\": " + JSON.stringify(item.newResponse);
if (isResponse && item.stopped)
str += ", \"stopped\": \"true\""
if (!isResponse)
str += "},"
else
str += ((i < chatModel.count - 1) ? "}," : "}")
}
return str + "]}"
}
// FIXME: https://github.com/nomic-ai/gpt4all/issues/3334
// function getConversation() {
// var conversation = "";
// for (var i = 0; i < chatModel.count; i++) {
// var item = chatModel.get(i)
// var string = item.name;
// var isResponse = item.name === "Response: "
// string += chatModel.get(i).value
// if (isResponse && item.stopped)
// string += " <stopped>"
// string += "\n"
// conversation += string
// }
// return conversation
// }

// FIXME: https://github.com/nomic-ai/gpt4all/issues/3334
// function getConversationJson() {
// var str = "{\"conversation\": [";
// for (var i = 0; i < chatModel.count; i++) {
// var item = chatModel.get(i)
// var isResponse = item.name === "Response: "
// str += "{\"content\": ";
// str += JSON.stringify(item.value)
// str += ", \"role\": \"" + (isResponse ? "assistant" : "user") + "\"";
// if (isResponse && item.thumbsUpState !== item.thumbsDownState)
// str += ", \"rating\": \"" + (item.thumbsUpState ? "positive" : "negative") + "\"";
// if (isResponse && item.newResponse !== "")
// str += ", \"edited_content\": " + JSON.stringify(item.newResponse);
// if (isResponse && item.stopped)
// str += ", \"stopped\": \"true\""
// if (!isResponse)
// str += "},"
// else
// str += ((i < chatModel.count - 1) ? "}," : "}")
// }
// return str + "]}"
// }

ChatDrawer {
id: chatDrawer
Expand Down Expand Up @@ -932,7 +935,7 @@ Rectangle {
visible: false
}
onClicked: {
var conversation = getConversation()
var conversation = chatModel.copyToClipboard()
copyEdit.text = conversation
copyEdit.selectAll()
copyEdit.copy()
Expand Down Expand Up @@ -1354,9 +1357,6 @@ Rectangle {
ToolTip.text: Accessible.description

onClicked: {
var index = Math.max(0, chatModel.count - 1);
var listElement = chatModel.get(index);
listElement.stopped = true
currentChat.stopGenerating()
}
}
Expand Down
11 changes: 11 additions & 0 deletions gpt4all-chat/src/chatmodel.h
Original file line number Diff line number Diff line change
Expand Up @@ -982,6 +982,17 @@ class ChatModel : public QAbstractListModel
emit hasErrorChanged(value);
}

Q_INVOKABLE void copyToClipboard()
{
QMutexLocker locker(&m_mutex);
QStringList content;
for (ChatItem *item : m_chatItems) {
content << item->clipboardContent();
}
QClipboard *clipboard = QGuiApplication::clipboard();
clipboard->setText(content.join("\n\n"), QClipboard::Clipboard);
}

Q_INVOKABLE void copyToClipboard(int index)
{
QMutexLocker locker(&m_mutex);
Expand Down

0 comments on commit 45c53ee

Please sign in to comment.