OllamaInterface/OllamaChatWidget.py

Tue, 10 Dec 2024 15:48:48 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Tue, 10 Dec 2024 15:48:48 +0100
changeset 67
3c2bcbf7eeaf
parent 57
3a3726c1f684
permissions
-rw-r--r--

Updated copyright for 2025.

5
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
10
734921ab2b89 Corrected some header formatting.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
2
67
3c2bcbf7eeaf Updated copyright for 2025.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 57
diff changeset
3 # Copyright (c) 2024 - 2025 Detlev Offenbach <detlev@die-offenbachs.de>
5
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
4 #
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
5
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
6 """
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
7 Module implementing a widget showing the chat with the 'ollama' server.
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
8 """
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
9
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
10 from PyQt6.QtCore import Qt, QTimer, pyqtSlot
21
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
11 from PyQt6.QtWidgets import QDialog, QDialogButtonBox, QVBoxLayout, QWidget
5
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
12
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
13 from .OllamaChatMessageBox import OllamaChatMessageBox
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
14 from .Ui_OllamaChatWidget import Ui_OllamaChatWidget
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
15
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
16
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
17 class OllamaChatWidget(QWidget, Ui_OllamaChatWidget):
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
18 """
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
19 Class implementing a widget showing the chat with the 'ollama' server.
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
20 """
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
21
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
22 def __init__(self, hid, title, model, parent=None):
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
23 """
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
24 Constructor
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
25
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
26 @param hid ID of the chat history
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
27 @type str
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
28 @param title title of the chat
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
29 @type str
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
30 @param model model name used for the chat
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
31 @type str
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
32 @param parent reference to the parent widget (defaults to None)
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
33 @type QWidget (optional)
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
34 """
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
35 super().__init__(parent)
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
36 self.setupUi(self)
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
37
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
38 self.__hid = hid
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
39
44
ef9a85b8768a Added the capability to change the model of a chat.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 21
diff changeset
40 self.__setHeader(title, model)
5
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
41
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
42 self.__messagesLayout = QVBoxLayout()
21
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
43 if parent is None:
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
44 self.__messagesLayout.setContentsMargins(4, 4, 4, 4)
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
45 else:
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
46 self.__messagesLayout.setContentsMargins(0, 0, 0, 0)
5
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
47 self.__messagesLayout.setAlignment(Qt.AlignmentFlag.AlignTop)
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
48 self.chatMessagesWidget.setLayout(self.__messagesLayout)
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
49
44
ef9a85b8768a Added the capability to change the model of a chat.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 21
diff changeset
50 def __setHeader(self, title, model):
ef9a85b8768a Added the capability to change the model of a chat.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 21
diff changeset
51 """
ef9a85b8768a Added the capability to change the model of a chat.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 21
diff changeset
52 Private method to set the header label.
ef9a85b8768a Added the capability to change the model of a chat.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 21
diff changeset
53
ef9a85b8768a Added the capability to change the model of a chat.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 21
diff changeset
54 @param title chat title
ef9a85b8768a Added the capability to change the model of a chat.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 21
diff changeset
55 @type str
ef9a85b8768a Added the capability to change the model of a chat.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 21
diff changeset
56 @param model model of the chat
ef9a85b8768a Added the capability to change the model of a chat.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 21
diff changeset
57 @type str
ef9a85b8768a Added the capability to change the model of a chat.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 21
diff changeset
58 """
ef9a85b8768a Added the capability to change the model of a chat.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 21
diff changeset
59 self.headerLabel.setText(
ef9a85b8768a Added the capability to change the model of a chat.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 21
diff changeset
60 self.tr("<b>{0} - {1}</b>", "title, model name").format(title, model)
ef9a85b8768a Added the capability to change the model of a chat.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 21
diff changeset
61 )
ef9a85b8768a Added the capability to change the model of a chat.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 21
diff changeset
62
21
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
63 def addMessage(self, role, message, scrollToBottom=True):
5
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
64 """
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
65 Public method to add a new message.
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
66
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
67 @param role role of the message sender (one of 'user' or 'assistant')
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
68 @type str
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
69 @param message message text
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
70 @type str
21
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
71 @param scrollToBottom flag indicating to scroll the view to the bottom
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
72 (defaults to True)
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
73 @type bool (optional)
5
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
74 """
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
75 msgWidget = OllamaChatMessageBox(role=role, message=message)
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
76 self.__messagesLayout.addWidget(msgWidget)
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
77
21
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
78 if scrollToBottom:
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
79 QTimer.singleShot(100, self.__scrollChatToBottom)
5
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
80
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
81 def appendMessage(self, message):
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
82 """
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
83 Public method to append a given message to the bottom most message box.
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
84
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
85 @param message message text to be appended
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
86 @type str
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
87 """
57
3a3726c1f684 Corrected an issue causing an AttributeError exception.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 44
diff changeset
88 if self.__messagesLayout.count():
3a3726c1f684 Corrected an issue causing an AttributeError exception.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 44
diff changeset
89 msgBox = self.__messagesLayout.itemAt(
3a3726c1f684 Corrected an issue causing an AttributeError exception.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 44
diff changeset
90 self.__messagesLayout.count() - 1
3a3726c1f684 Corrected an issue causing an AttributeError exception.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 44
diff changeset
91 ).widget()
3a3726c1f684 Corrected an issue causing an AttributeError exception.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 44
diff changeset
92 msgBox.appendMessage(message)
5
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
93
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
94 QTimer.singleShot(0, self.__scrollChatToBottom)
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
95
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
96 @pyqtSlot()
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
97 def __scrollChatToBottom(self):
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
98 """
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
99 Private slot to scroll the chat scroll area to the bottom.
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
100 """
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
101 scrollbar = self.chatMessagesScrollArea.verticalScrollBar()
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
102 scrollbar.setValue(scrollbar.maximum())
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
103
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
104 def getHistoryId(self):
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
105 """
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
106 Public method to get the history ID of this chat.
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
107
44
ef9a85b8768a Added the capability to change the model of a chat.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 21
diff changeset
108 @return history ID of the chat
ef9a85b8768a Added the capability to change the model of a chat.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 21
diff changeset
109 @rtype str
5
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
110 """
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
111 return self.__hid
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
112
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
113 def getRecentMessage(self):
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
114 """
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
115 Public method to get the message of the last message box.
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
116
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
117 @return message content
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
118 @rtype str
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
119 """
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
120 msgBox = self.__messagesLayout.itemAt(
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
121 self.__messagesLayout.count() - 1
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
122 ).widget()
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
123 return msgBox.getMessage()
21
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
124
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
125 def clear(self):
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
126 """
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
127 Public method to clear the list of messages.
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
128 """
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
129 while not self.__messagesLayout.isEmpty():
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
130 itm = self.__messagesLayout.takeAt(0)
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
131 itm.widget().deleteLater()
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
132
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
133 scrollbar = self.chatMessagesScrollArea.verticalScrollBar()
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
134 scrollbar.setValue(0)
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
135
44
ef9a85b8768a Added the capability to change the model of a chat.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 21
diff changeset
136 @pyqtSlot(str, str, str)
ef9a85b8768a Added the capability to change the model of a chat.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 21
diff changeset
137 def chatParametersChanged(self, _hid, title, model):
ef9a85b8768a Added the capability to change the model of a chat.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 21
diff changeset
138 """
ef9a85b8768a Added the capability to change the model of a chat.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 21
diff changeset
139 Public slot to handle a change of the chat parameters.
ef9a85b8768a Added the capability to change the model of a chat.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 21
diff changeset
140
ef9a85b8768a Added the capability to change the model of a chat.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 21
diff changeset
141 @param _hid history ID (unused)
ef9a85b8768a Added the capability to change the model of a chat.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 21
diff changeset
142 @type str
ef9a85b8768a Added the capability to change the model of a chat.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 21
diff changeset
143 @param title new chat title
ef9a85b8768a Added the capability to change the model of a chat.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 21
diff changeset
144 @type str
ef9a85b8768a Added the capability to change the model of a chat.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 21
diff changeset
145 @param model new chat model
ef9a85b8768a Added the capability to change the model of a chat.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 21
diff changeset
146 @type str
ef9a85b8768a Added the capability to change the model of a chat.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 21
diff changeset
147 """
ef9a85b8768a Added the capability to change the model of a chat.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 21
diff changeset
148 self.__setHeader(title, model)
ef9a85b8768a Added the capability to change the model of a chat.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 21
diff changeset
149
21
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
150
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
151 class OllamaChatDialog(QDialog):
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
152 """
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
153 Class implementing a dialog showing the chat with the 'ollama' server.
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
154 """
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
155
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
156 def __init__(self, hid, title, model, parent=None):
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
157 """
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
158 Constructor
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
159
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
160 @param hid ID of the chat history
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
161 @type str
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
162 @param title title of the chat
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
163 @type str
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
164 @param model model name used for the chat
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
165 @type str
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
166 @param parent reference to the parent widget (defaults to None)
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
167 @type QWidget (optional)
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
168 """
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
169 super().__init__(parent)
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
170
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
171 self.__layout = QVBoxLayout(self)
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
172 self.__chatWidget = OllamaChatWidget(
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
173 hid=hid, title=title, model=model, parent=self
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
174 )
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
175 self.__layout.addWidget(self.__chatWidget)
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
176 self.__buttonBox = QDialogButtonBox(
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
177 QDialogButtonBox.StandardButton.Close, Qt.Orientation.Horizontal, self
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
178 )
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
179 self.__buttonBox.rejected.connect(self.reject)
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
180 self.__layout.addWidget(self.__buttonBox)
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
181
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
182 self.setModal(False)
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
183 self.setSizeGripEnabled(True)
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
184 self.resize(600, 750)
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
185
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
186 def getHistoryId(self):
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
187 """
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
188 Public method to get the history ID of this chat.
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
189
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
190 @return DESCRIPTION
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
191 @rtype TYPE
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
192 """
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
193 return self.__chatWidget.getHistoryId()
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
194
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
195 def setHistory(self, messages):
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
196 """
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
197 Public method to add a list of messages to the view.
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
198
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
199 @param messages list of chat messages
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
200 @type list[dict[str, str]]
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
201 """
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
202 self.__chatWidget.clear()
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
203
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
204 for message in messages:
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
205 self.__chatWidget.addMessage(
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
206 role=message["role"], message=message["content"], scrollToBottom=False
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
207 )

eric ide

mercurial