OllamaInterface/OllamaChatMessageBox.py

Mon, 16 Sep 2024 19:05:50 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Mon, 16 Sep 2024 19:05:50 +0200
changeset 44
ef9a85b8768a
parent 5
6e8af43d537d
child 59
40a29731e0d0
permissions
-rw-r--r--

Added the capability to change the model of a chat.

5
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
2
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
3 # Copyright (c) 2024 Detlev Offenbach <detlev@die-offenbachs.de>
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 message box widget showing the role and content of a message.
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 import os
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
11
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
12 from PyQt6.QtCore import QSize, Qt
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
13 from PyQt6.QtWidgets import QHBoxLayout, QLabel, QWidget
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
14
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
15 from eric7.EricGui import EricPixmapCache
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
16 from eric7.EricWidgets.EricApplication import ericApp
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
17
44
ef9a85b8768a Added the capability to change the model of a chat.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
18 try:
ef9a85b8768a Added the capability to change the model of a chat.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
19 from eric7.EricWidgets.EricAutoResizeTextBrowser import EricAutoResizeTextBrowser
ef9a85b8768a Added the capability to change the model of a chat.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
20 except ImportError:
ef9a85b8768a Added the capability to change the model of a chat.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
21 # backward compatibility for eric-ide < 24.10
ef9a85b8768a Added the capability to change the model of a chat.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
22 from .AutoResizeTextBrowser import (
ef9a85b8768a Added the capability to change the model of a chat.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
23 AutoResizeTextBrowser as EricAutoResizeTextBrowser,
ef9a85b8768a Added the capability to change the model of a chat.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
24 )
5
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
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
27 class OllamaChatMessageBox(QWidget):
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
28 """
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
29 Class implementing a message box widget showing the role and content of a message.
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
30 """
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
31
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
32 def __init__(self, role, message, parent=None):
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
33 """
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
34 Constructor
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
35
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
36 @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
37 @type str
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
38 @param message message text
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
39 @type str
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
40 @param parent reference to the parent widget (defaults to None)
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
41 @type QWidget (optional)
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
42 """
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
43 super().__init__(parent)
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
44
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
45 self.__roleLabel = QLabel(self)
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
46 self.__roleLabel.setFixedSize(22, 22)
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
47 pixmapName = "{0}-{1}".format(
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
48 "user" if role == "user" else "ollama22",
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
49 "dark" if ericApp().usesDarkPalette() else "light",
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
50 )
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
51 self.__roleLabel.setPixmap(
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
52 EricPixmapCache.getPixmap(
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
53 os.path.join("OllamaInterface", "icons", pixmapName),
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
54 QSize(22, 22),
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
55 )
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
56 )
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
57 self.__roleLabel.setAlignment(
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
58 Qt.AlignmentFlag.AlignHCenter | Qt.AlignmentFlag.AlignTop
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
59 )
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
60
44
ef9a85b8768a Added the capability to change the model of a chat.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
61 self.__messageBrowser = EricAutoResizeTextBrowser(self)
5
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
62
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
63 self.__layout = QHBoxLayout(self)
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
64 self.__layout.setAlignment(Qt.AlignmentFlag.AlignTop)
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
65 self.__layout.setContentsMargins(0, 0, 0, 0)
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
66 self.__layout.addWidget(self.__roleLabel, Qt.AlignmentFlag.AlignTop)
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
67 self.__layout.addWidget(self.__messageBrowser)
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
68 self.setLayout(self.__layout)
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
69
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
70 self.__message = ""
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
71 self.appendMessage(message)
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
72
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
73 def appendMessage(self, msg):
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 Public method to append the given message text to the current content.
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
76
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
77 @param msg message to be appended
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
78 @type str
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
79 """
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
80 if msg:
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
81 self.__message += msg
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
82 self.__messageBrowser.setMarkdown(self.__message)
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
83
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
84 def getMessage(self):
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
85 """
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
86 Public method to get the message content.
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
87
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
88 @return message content
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
89 @rtype str
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
90 """
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
91 return self.__message

eric ide

mercurial