OllamaInterface/OllamaWidget.py

Mon, 07 Apr 2025 18:22:30 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Mon, 07 Apr 2025 18:22:30 +0200
changeset 69
eb9340034f26
parent 68
ca2e671f894e
permissions
-rw-r--r--

Created global tag <release-10.1.8>.

4
7dd1b9cd3150 Implemented most of the Chat History widgets.
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: 9
diff changeset
2
67
3c2bcbf7eeaf Updated copyright for 2025.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 65
diff changeset
3 # Copyright (c) 2024 - 2025 Detlev Offenbach <detlev@die-offenbachs.de>
4
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
4 #
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
5
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
6 """
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
7 Module implementing the main ollama interface widget.
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
8 """
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
9
21
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 13
diff changeset
10 import contextlib
4
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
11 import json
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
12 import os
40
1cb80644982d Only enable the 'Local Server' menu when the 'ollamaL executable is found.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 34
diff changeset
13 import shutil
4
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
14
68
ca2e671f894e Added the capability to send the prompt by pressing Ctrl-Return or Ctrl-Enter.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 67
diff changeset
15 from PyQt6.QtCore import (
ca2e671f894e Added the capability to send the prompt by pressing Ctrl-Return or Ctrl-Enter.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 67
diff changeset
16 QEvent,
ca2e671f894e Added the capability to send the prompt by pressing Ctrl-Return or Ctrl-Enter.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 67
diff changeset
17 QProcess,
ca2e671f894e Added the capability to send the prompt by pressing Ctrl-Return or Ctrl-Enter.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 67
diff changeset
18 QProcessEnvironment,
ca2e671f894e Added the capability to send the prompt by pressing Ctrl-Return or Ctrl-Enter.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 67
diff changeset
19 Qt,
ca2e671f894e Added the capability to send the prompt by pressing Ctrl-Return or Ctrl-Enter.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 67
diff changeset
20 QTimer,
ca2e671f894e Added the capability to send the prompt by pressing Ctrl-Return or Ctrl-Enter.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 67
diff changeset
21 QUrl,
ca2e671f894e Added the capability to send the prompt by pressing Ctrl-Return or Ctrl-Enter.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 67
diff changeset
22 pyqtSlot,
ca2e671f894e Added the capability to send the prompt by pressing Ctrl-Return or Ctrl-Enter.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 67
diff changeset
23 )
8
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
24 from PyQt6.QtGui import QDesktopServices
6
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
25 from PyQt6.QtWidgets import (
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
26 QDialog,
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
27 QInputDialog,
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
28 QLineEdit,
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
29 QMenu,
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
30 QVBoxLayout,
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
31 QWidget,
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
32 )
4
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
33
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
34 from eric7.EricGui import EricPixmapCache
6
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
35 from eric7.EricWidgets import EricFileDialog, EricMessageBox
5
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
36 from eric7.EricWidgets.EricApplication import ericApp
6
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
37 from eric7.EricWidgets.EricListSelectionDialog import EricListSelectionDialog
4
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
38
59
40a29731e0d0 Adjusted code for eric7 24.10 and newer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 47
diff changeset
39 try:
40a29731e0d0 Adjusted code for eric7 24.10 and newer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 47
diff changeset
40 from eric7.EricUtilities import getConfigDir
40a29731e0d0 Adjusted code for eric7 24.10 and newer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 47
diff changeset
41 except ImportError:
40a29731e0d0 Adjusted code for eric7 24.10 and newer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 47
diff changeset
42 # backward compatibility for eric < 24.10
40a29731e0d0 Adjusted code for eric7 24.10 and newer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 47
diff changeset
43 from Globals import getConfigDir
40a29731e0d0 Adjusted code for eric7 24.10 and newer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 47
diff changeset
44
21
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 13
diff changeset
45 from .OllamaChatWidget import OllamaChatDialog, OllamaChatWidget
4
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
46 from .OllamaClient import OllamaClient
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
47 from .OllamaHistoryWidget import OllamaHistoryWidget
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
48 from .Ui_OllamaWidget import Ui_OllamaWidget
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
49
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
50
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
51 class OllamaWidget(QWidget, Ui_OllamaWidget):
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
52 """
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
53 Class implementing the main ollama interface widget.
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
54 """
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
55
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
56 OllamaHistoryFile = "ollama_history.json"
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
57
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
58 def __init__(self, plugin, fromEric=True, parent=None):
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
59 """
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
60 Constructor
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
61
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
62 @param plugin reference to the plug-in object
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
63 @type PluginOllamaInterface
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
64 @param fromEric flag indicating the eric-ide mode (defaults to True)
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
65 (True = eric-ide mode, False = application mode)
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
66 @type bool (optional)
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
67 @param parent reference to the parent widget (defaults to None)
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
68 @type QWidget (optional)
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
69 """
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
70 super().__init__(parent)
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
71 self.setupUi(self)
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
72
68
ca2e671f894e Added the capability to send the prompt by pressing Ctrl-Return or Ctrl-Enter.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 67
diff changeset
73 self.messageEdit.installEventFilter(self)
ca2e671f894e Added the capability to send the prompt by pressing Ctrl-Return or Ctrl-Enter.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 67
diff changeset
74
4
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
75 self.__plugin = plugin
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
76 self.__client = OllamaClient(plugin, self)
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
77
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
78 if fromEric:
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
79 self.layout().setContentsMargins(0, 3, 0, 0)
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
80 else:
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
81 self.layout().setContentsMargins(0, 0, 0, 0)
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
82
5
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
83 iconSuffix = "-dark" if ericApp().usesDarkPalette() else "-light"
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
84
4
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
85 self.ollamaMenuButton.setIcon(EricPixmapCache.getIcon("superMenu"))
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
86 self.reloadModelsButton.setIcon(EricPixmapCache.getIcon("reload"))
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
87 self.newChatButton.setIcon(EricPixmapCache.getIcon("plus"))
5
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
88 self.sendButton.setIcon(
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
89 EricPixmapCache.getIcon(
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
90 os.path.join("OllamaInterface", "icons", "send{0}".format(iconSuffix))
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
91 )
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
92 )
4
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
93
6
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
94 self.ollamaMenuButton.setShowMenuInside(True)
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
95
4
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
96 self.__chatHistoryLayout = QVBoxLayout()
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
97 self.historyScrollWidget.setLayout(self.__chatHistoryLayout)
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
98 self.__chatHistoryLayout.addStretch(1)
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
99
12
cf507e6f12d7 Changed the message input widget to a QPlainTextEdit to be able to enter longer texts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
100 self.mainSplitter.setSizes([200, 2000, 100])
4
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
101
11
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
102 self.__pullProgressDialog = None
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
103 self.__pulling = False
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
104
7
eb1dec15b2f0 Implemented a menu, dialog and actions to start a local 'ollama' server with the capability to monitor its log output.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6
diff changeset
105 self.__localServerDialog = None
eb1dec15b2f0 Implemented a menu, dialog and actions to start a local 'ollama' server with the capability to monitor its log output.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6
diff changeset
106 self.__localServerProcess = None
eb1dec15b2f0 Implemented a menu, dialog and actions to start a local 'ollama' server with the capability to monitor its log output.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6
diff changeset
107
9
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
108 self.__availableModels = []
21
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 13
diff changeset
109 self.__chatHistoryDialogs = {}
9
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
110
13
3fd49d7004b2 Fixed some issues with the logic handling unresponsive servers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 12
diff changeset
111 self.__initOllamaMenu()
4
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
112
13
3fd49d7004b2 Fixed some issues with the logic handling unresponsive servers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 12
diff changeset
113 self.newChatButton.setEnabled(False)
3fd49d7004b2 Fixed some issues with the logic handling unresponsive servers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 12
diff changeset
114 self.__handleServerStateChanged(False, "")
3fd49d7004b2 Fixed some issues with the logic handling unresponsive servers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 12
diff changeset
115
3fd49d7004b2 Fixed some issues with the logic handling unresponsive servers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 12
diff changeset
116 self.__connectClient()
6
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
117
5
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
118 self.sendButton.clicked.connect(self.__sendMessage)
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
119
4
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
120 self.__loadHistory()
5
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
121 self.__updateMessageEditState()
4
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
122
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
123 def __connectClient(self):
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
124 """
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
125 Private method to connect the client signals.
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
126 """
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
127 self.__client.serverStateChanged.connect(self.__handleServerStateChanged)
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
128 self.__client.serverVersion.connect(self.__setHeaderLabel)
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
129 self.__client.modelsList.connect(self.__populateModelSelector)
6
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
130 self.__client.modelsList.connect(self.__checkHistoryModels)
5
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
131 self.__client.replyReceived.connect(self.__handleServerMessage)
11
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
132 self.__client.pullStatus.connect(self.__handlePullStatus)
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
133 self.__client.pullError.connect(self.__handlePullError)
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
134
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
135 self.__client.errorOccurred.connect(self.__handleClientError)
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
136 self.__client.finished.connect(self.__handleClientFinished)
4
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
137
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
138 @pyqtSlot()
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
139 def __finishSetup(self):
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
140 """
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
141 Private slot to finish the UI setup.
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
142 """
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
143 self.__client.version()
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
144 self.__client.list()
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
145
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
146 @pyqtSlot()
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
147 def on_reloadModelsButton_clicked(self):
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
148 """
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
149 Private slot to reload the list of available models.
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
150 """
8
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
151 self.__finishSetup()
4
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
152
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
153 @pyqtSlot(str)
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
154 def on_modelComboBox_currentTextChanged(self, model):
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
155 """
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
156 Private slot handling the selection of a model.
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
157
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
158 @param model name of the selected model
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
159 @type str
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
160 """
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
161 self.newChatButton.setEnabled(bool(model))
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
162
13
3fd49d7004b2 Fixed some issues with the logic handling unresponsive servers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 12
diff changeset
163 def __setEnabledState(self, enable):
3fd49d7004b2 Fixed some issues with the logic handling unresponsive servers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 12
diff changeset
164 """
3fd49d7004b2 Fixed some issues with the logic handling unresponsive servers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 12
diff changeset
165 Private method to set the enabled state of the main widget.
3fd49d7004b2 Fixed some issues with the logic handling unresponsive servers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 12
diff changeset
166
3fd49d7004b2 Fixed some issues with the logic handling unresponsive servers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 12
diff changeset
167 @param enable enabled state
3fd49d7004b2 Fixed some issues with the logic handling unresponsive servers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 12
diff changeset
168 @type bool
3fd49d7004b2 Fixed some issues with the logic handling unresponsive servers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 12
diff changeset
169 """
34
2b3ed778af64 Fixed a bug related to a disabled heartbeat.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 24
diff changeset
170 widgets = [
13
3fd49d7004b2 Fixed some issues with the logic handling unresponsive servers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 12
diff changeset
171 self.modelComboBox,
3fd49d7004b2 Fixed some issues with the logic handling unresponsive servers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 12
diff changeset
172 self.newChatButton,
3fd49d7004b2 Fixed some issues with the logic handling unresponsive servers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 12
diff changeset
173 self.mainSplitter,
3fd49d7004b2 Fixed some issues with the logic handling unresponsive servers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 12
diff changeset
174 self.__modelMenuAct,
34
2b3ed778af64 Fixed a bug related to a disabled heartbeat.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 24
diff changeset
175 ]
2b3ed778af64 Fixed a bug related to a disabled heartbeat.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 24
diff changeset
176 if self.__plugin.getPreferences("OllamaHeartbeatInterval"):
2b3ed778af64 Fixed a bug related to a disabled heartbeat.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 24
diff changeset
177 widgets.append(self.reloadModelsButton)
2b3ed778af64 Fixed a bug related to a disabled heartbeat.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 24
diff changeset
178 else:
2b3ed778af64 Fixed a bug related to a disabled heartbeat.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 24
diff changeset
179 self.reloadModelsButton.setEnabled(True)
2b3ed778af64 Fixed a bug related to a disabled heartbeat.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 24
diff changeset
180
2b3ed778af64 Fixed a bug related to a disabled heartbeat.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 24
diff changeset
181 for widget in widgets:
13
3fd49d7004b2 Fixed some issues with the logic handling unresponsive servers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 12
diff changeset
182 widget.setEnabled(enable)
3fd49d7004b2 Fixed some issues with the logic handling unresponsive servers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 12
diff changeset
183
4
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
184 ############################################################################
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
185 ## Methods handling signals from the 'ollama' client.
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
186 ############################################################################
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
187
13
3fd49d7004b2 Fixed some issues with the logic handling unresponsive servers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 12
diff changeset
188 @pyqtSlot(bool, str)
3fd49d7004b2 Fixed some issues with the logic handling unresponsive servers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 12
diff changeset
189 def __handleServerStateChanged(self, ok, msg):
3fd49d7004b2 Fixed some issues with the logic handling unresponsive servers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 12
diff changeset
190 """
3fd49d7004b2 Fixed some issues with the logic handling unresponsive servers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 12
diff changeset
191 Private slot handling a change in the 'ollama' server responsiveness.
3fd49d7004b2 Fixed some issues with the logic handling unresponsive servers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 12
diff changeset
192
3fd49d7004b2 Fixed some issues with the logic handling unresponsive servers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 12
diff changeset
193 @param ok flag indicating a responsive 'ollama' server
3fd49d7004b2 Fixed some issues with the logic handling unresponsive servers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 12
diff changeset
194 @type bool
3fd49d7004b2 Fixed some issues with the logic handling unresponsive servers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 12
diff changeset
195 @param msg status message
3fd49d7004b2 Fixed some issues with the logic handling unresponsive servers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 12
diff changeset
196 @type str
3fd49d7004b2 Fixed some issues with the logic handling unresponsive servers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 12
diff changeset
197 """
3fd49d7004b2 Fixed some issues with the logic handling unresponsive servers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 12
diff changeset
198 if ok:
3fd49d7004b2 Fixed some issues with the logic handling unresponsive servers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 12
diff changeset
199 self.__finishSetup()
3fd49d7004b2 Fixed some issues with the logic handling unresponsive servers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 12
diff changeset
200 else:
3fd49d7004b2 Fixed some issues with the logic handling unresponsive servers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 12
diff changeset
201 self.ollamaVersionLabel.setText(msg)
3fd49d7004b2 Fixed some issues with the logic handling unresponsive servers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 12
diff changeset
202 self.__setEnabledState(ok)
3fd49d7004b2 Fixed some issues with the logic handling unresponsive servers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 12
diff changeset
203
4
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
204 @pyqtSlot(str)
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
205 def __setHeaderLabel(self, version):
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
206 """
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
207 Private slot to receive the 'ollama' server version and set the header.
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
208
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
209 @param version 'ollama' server version'
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
210 @type str
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
211 """
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
212 self.ollamaVersionLabel.setText(
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
213 self.tr("<b>ollama Server Version {0}</b>").format(version)
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
214 )
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
215
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
216 @pyqtSlot(list)
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
217 def __populateModelSelector(self, modelNames):
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
218 """
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
219 Private slot to receive the list of available model names and populate
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
220 the model selector with them.
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
221
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
222 @param modelNames list of model names
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
223 @type list[str]
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
224 """
9
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
225 self.__availableModels = modelNames[:]
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
226
4
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
227 self.modelComboBox.clear()
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
228
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
229 self.modelComboBox.addItem("")
9
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
230 self.modelComboBox.addItems(
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
231 sorted(n.replace(":latest", "") for n in modelNames)
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
232 )
4
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
233
6
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
234 @pyqtSlot(list)
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
235 def __checkHistoryModels(self, modelNames):
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
236 """
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
237 Private slot to set the chat history entry states according to available
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
238 models.
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
239
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
240 @param modelNames list of model names
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
241 @type list[str]
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
242 """
9
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
243 names = [n.replace(":latest", "") for n in modelNames]
6
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
244 for index in range(self.__chatHistoryLayout.count() - 1):
9
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
245 self.__chatHistoryLayout.itemAt(index).widget().checkModelAvailable(names)
6
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
246
44
ef9a85b8768a Added the capability to change the model of a chat.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 40
diff changeset
247 def getSelectableModels(self):
ef9a85b8768a Added the capability to change the model of a chat.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 40
diff changeset
248 """
ef9a85b8768a Added the capability to change the model of a chat.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 40
diff changeset
249 Public method to get a list of models to select from.
ef9a85b8768a Added the capability to change the model of a chat.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 40
diff changeset
250
ef9a85b8768a Added the capability to change the model of a chat.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 40
diff changeset
251 @return list of models to select from
ef9a85b8768a Added the capability to change the model of a chat.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 40
diff changeset
252 @rtype list of str
ef9a85b8768a Added the capability to change the model of a chat.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 40
diff changeset
253 """
ef9a85b8768a Added the capability to change the model of a chat.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 40
diff changeset
254 return [
ef9a85b8768a Added the capability to change the model of a chat.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 40
diff changeset
255 self.modelComboBox.itemText(ind)
ef9a85b8768a Added the capability to change the model of a chat.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 40
diff changeset
256 for ind in range(self.modelComboBox.count())
ef9a85b8768a Added the capability to change the model of a chat.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 40
diff changeset
257 if self.modelComboBox.itemText(ind)
ef9a85b8768a Added the capability to change the model of a chat.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 40
diff changeset
258 ]
ef9a85b8768a Added the capability to change the model of a chat.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 40
diff changeset
259
4
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
260 ############################################################################
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
261 ## Methods handling signals from the chat history widgets.
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
262 ############################################################################
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
263
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
264 def __createHistoryWidget(self, title, model, jsonStr=None):
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
265 """
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
266 Private method to create a chat history widget and insert it into the
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
267 respective layout.
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
268
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
269 @param title title of the chat
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
270 @type str
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
271 @param model name of the model
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
272 @type str
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
273 @param jsonStr string containing JSON serialize chat history data (defaults
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
274 to None)
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
275 @type str (optional)
5
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
276 @return reference to the created history widget
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
277 @rtype OllamaHistoryWidget
4
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
278 """
44
ef9a85b8768a Added the capability to change the model of a chat.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 40
diff changeset
279 history = OllamaHistoryWidget(
ef9a85b8768a Added the capability to change the model of a chat.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 40
diff changeset
280 title=title, model=model, mainWidget=self, jsonStr=jsonStr
ef9a85b8768a Added the capability to change the model of a chat.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 40
diff changeset
281 )
4
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
282 self.__chatHistoryLayout.insertWidget(
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
283 self.__chatHistoryLayout.count() - 1, history
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
284 )
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
285
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
286 history.deleteChatHistory.connect(self.__deleteHistory)
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
287 history.dataChanged.connect(self.__saveHistory)
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
288 history.newChatWithHistory.connect(self.__newChatWithHistory)
21
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 13
diff changeset
289 history.viewChatHistory.connect(self.__viewChatHistory)
4
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
290
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
291 self.__saveHistory()
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
292
5
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
293 QTimer.singleShot(0, self.__scrollHistoryToBottom)
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
294
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
295 return history
4
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
296
5
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
297 @pyqtSlot()
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
298 def __scrollHistoryToBottom(self):
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
299 """
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
300 Private slot to scroll the history widget to the bottom.
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
301 """
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
302 scrollbar = self.historyScrollArea.verticalScrollBar()
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
303 scrollbar.setMaximum(self.historyScrollWidget.height())
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
304 scrollbar.setValue(scrollbar.maximum())
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
305
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
306 def __findHistoryWidget(self, hid):
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
307 """
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
308 Private method to find the widget of a given chat history ID.
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
309
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
310 @param hid ID of the chat history
4
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
311 @type str
5
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
312 @return reference to the chat history widget
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
313 @rtype OllamaHistoryWidget
4
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
314 """
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
315 for index in range(self.__chatHistoryLayout.count() - 1):
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
316 widget = self.__chatHistoryLayout.itemAt(index).widget()
5
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
317 if widget.getId() == hid:
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
318 return widget
4
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
319
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
320 return None
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
321
6
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
322 def __getHistoryIds(self):
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
323 """
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
324 Private method to get a list of all history IDs.
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
325
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
326 @return list of history IDs
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
327 @rtype list[str]
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
328 """
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
329 hids = []
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
330 for index in range(self.__chatHistoryLayout.count() - 1):
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
331 widget = self.__chatHistoryLayout.itemAt(index).widget()
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
332 hids.append(widget.getId())
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
333
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
334 return hids
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
335
4
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
336 def __historyFilePath(self):
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
337 """
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
338 Private method to get the path name of the chat history file.
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
339
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
340 @return file path of the chat history file
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
341 @rtype str
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
342 """
59
40a29731e0d0 Adjusted code for eric7 24.10 and newer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 47
diff changeset
343 return os.path.join(getConfigDir(), OllamaWidget.OllamaHistoryFile)
4
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
344
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
345 @pyqtSlot()
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
346 def __saveHistory(self):
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
347 """
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
348 Private method to save the current chat history to the history file.
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
349 """
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
350 # step 1: collect all history entries
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
351 entries = {}
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
352 for index in range(self.__chatHistoryLayout.count() - 1):
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
353 widget = self.__chatHistoryLayout.itemAt(index).widget()
5
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
354 hid = widget.getId()
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
355 entries[hid] = widget.saveToJson()
4
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
356
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
357 # step 2: save the collected chat histories
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
358 filePath = self.__historyFilePath()
6
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
359 self.__saveChatHistoryFile(filePath, entries)
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
360
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
361 def __saveChatHistoryFile(self, filePath, entries):
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
362 """
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
363 Private method to save the chat history entries to a file.
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
364
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
365 @param filePath file name to save to
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
366 @type str
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
367 @param entries dictionary containing the chat history entries as a
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
368 JSON serialized string indexed by their ID
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
369 @type dict[str, str]
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
370 """
4
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
371 try:
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
372 with open(filePath, "w") as f:
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
373 json.dump(entries, f)
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
374 except OSError as err:
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
375 EricMessageBox.critical(
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
376 self,
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
377 self.tr("Save Chat History"),
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
378 self.tr(
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
379 "<p>The chat history could not be saved to <b>{0}</b>.</p>"
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
380 "<p>Reason: {1}</p>"
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
381 ).format(filePath, str(err)),
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
382 )
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
383
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
384 def __loadHistory(self):
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
385 """
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
386 Private method to load a previously saved history file.
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
387 """
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
388 # step 1: load the history file, if it exists
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
389 filePath = self.__historyFilePath()
6
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
390 self.__loadChatHistoriesFile(filePath)
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
391
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
392 def __loadChatHistoriesFile(self, filePath, reportDuplicates=False):
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
393 """
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
394 Private method to load chat history entries from a given file.
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
395
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
396 @param filePath path of the chat history file
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
397 @type str
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
398 @param reportDuplicates flag indicating to report skipped chat history entries
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
399 (defaults to False)
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
400 @type bool (optional)
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
401 @return flag indicating success
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
402 @rtype str
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
403 """
4
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
404 if not os.path.exists(filePath):
6
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
405 return False
4
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
406
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
407 try:
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
408 with open(filePath, "r") as f:
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
409 entries = json.load(f)
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
410 except OSError as err:
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
411 EricMessageBox.critical(
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
412 self,
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
413 self.tr("Load Chat History"),
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
414 self.tr(
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
415 "<p>The chat history could not be loaded from <b>{0}</b>.</p>"
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
416 "<p>Reason: {1}</p>"
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
417 ).format(filePath, str(err)),
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
418 )
6
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
419 return False
4
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
420
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
421 # step 2: create history widgets
6
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
422 existingIDs = self.__getHistoryIds()
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
423 skipped = []
5
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
424 for hid in entries:
6
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
425 if hid in existingIDs:
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
426 data = json.loads(entries[hid])
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
427 skipped.append(data["title"])
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
428 else:
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
429 self.__createHistoryWidget("", "", jsonStr=entries[hid])
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
430
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
431 if skipped and reportDuplicates:
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
432 EricMessageBox.warning(
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
433 self,
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
434 self.tr("Load Chat History"),
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
435 self.tr(
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
436 "<p>These chats were not loaded because they already existed.</p>"
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
437 "{0}"
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
438 ).format("<ul><li>{0}</li></ul>".format("</li><li>".join(skipped))),
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
439 )
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
440
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
441 return True
4
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
442
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
443 def clearHistory(self):
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
444 """
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
445 Public method to clear the history entries and close all chats.
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
446 """
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
447 while self.__chatHistoryLayout.count() > 1:
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
448 # do not delete the spacer at the end of the list
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
449 item = self.__chatHistoryLayout.takeAt(0)
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
450 if item is not None:
6
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
451 hid = item.widget().getId()
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
452 self.__removeChatWidget(hid)
4
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
453 item.widget().deleteLater()
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
454
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
455 self.__saveHistory()
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
456
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
457 @pyqtSlot(str)
5
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
458 def __deleteHistory(self, hid):
4
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
459 """
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
460 Private slot to delete the history with the given ID.
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
461
5
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
462 @param hid ID of the history to be deleted
4
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
463 @type str
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
464 """
5
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
465 widget = self.__findHistoryWidget(hid)
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
466 if widget is not None:
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
467 widgetIndex = self.__chatHistoryLayout.indexOf(widget)
4
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
468 item = self.__chatHistoryLayout.takeAt(widgetIndex)
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
469 if item is not None:
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
470 item.widget().deleteLater()
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
471
5
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
472 self.__saveHistory()
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
473
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
474 self.__removeChatWidget(hid)
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
475
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
476 #######################################################################
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
477 ## Chat related methods below
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
478 #######################################################################
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
479
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
480 def __findChatWidget(self, hid):
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
481 """
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
482 Private method to find a chat widget given a chat history ID.
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
483
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
484 @param hid chat history ID
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
485 @type str
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
486 @return reference to the chat widget related to the given ID
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
487 @rtype OllamaChatWidget
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
488 """
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
489 for index in range(self.chatStackWidget.count()):
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
490 widget = self.chatStackWidget.widget(index)
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
491 if widget.getHistoryId() == hid:
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
492 return widget
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
493
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
494 return None
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
495
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
496 @pyqtSlot()
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
497 def on_newChatButton_clicked(self):
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
498 """
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
499 Private slot to start a new chat with the 'ollama' server.
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
500 """
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
501 model = self.modelComboBox.currentText()
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
502 if not model:
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
503 EricMessageBox.critical(
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
504 self,
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
505 self.tr("New Chat"),
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
506 self.tr("""A model has to be selected first. Aborting..."""),
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
507 )
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
508 return
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
509
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
510 title, ok = QInputDialog.getText(
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
511 self,
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
512 self.tr("New Chat"),
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
513 self.tr("Enter a title for the new chat:"),
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
514 QLineEdit.EchoMode.Normal,
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
515 )
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
516 if ok and title:
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
517 historyWidget = self.__createHistoryWidget(title, model)
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
518 hid = historyWidget.getId()
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
519 chatWidget = OllamaChatWidget(hid=hid, title=title, model=model)
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
520 index = self.chatStackWidget.addWidget(chatWidget)
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
521 self.chatStackWidget.setCurrentIndex(index)
44
ef9a85b8768a Added the capability to change the model of a chat.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 40
diff changeset
522 historyWidget.parametersChanged.connect(chatWidget.chatParametersChanged)
5
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
523
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
524 self.__updateMessageEditState()
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
525 self.messageEdit.setFocus(Qt.FocusReason.OtherFocusReason)
4
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
526
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
527 @pyqtSlot(str)
5
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
528 def __newChatWithHistory(self, hid):
4
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
529 """
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
530 Private slot to start a new chat using a previously saved history.
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
531
5
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
532 @param hid ID of the history to be used
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
533 @type str
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
534 """
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
535 chatWidget = self.__findChatWidget(hid)
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
536 if chatWidget is None:
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
537 historyWidget = self.__findHistoryWidget(hid)
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
538 if historyWidget is None:
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
539 # Oops, treat it as a new chat.
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
540 self.on_newChatButton_clicked()
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
541 return
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
542
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
543 chatWidget = OllamaChatWidget(
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
544 hid=hid, title=historyWidget.getTitle(), model=historyWidget.getModel()
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
545 )
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
546 index = self.chatStackWidget.addWidget(chatWidget)
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
547 self.chatStackWidget.setCurrentIndex(index)
44
ef9a85b8768a Added the capability to change the model of a chat.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 40
diff changeset
548 historyWidget.parametersChanged.connect(chatWidget.chatParametersChanged)
5
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
549 for message in historyWidget.getMessages():
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
550 chatWidget.addMessage(role=message["role"], message=message["content"])
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
551 else:
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
552 # simply switch to the already existing chatWidget
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
553 self.chatStackWidget.setCurrentWidget(chatWidget)
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
554
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
555 self.__updateMessageEditState()
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
556 self.messageEdit.setFocus(Qt.FocusReason.OtherFocusReason)
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
557
21
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 13
diff changeset
558 @pyqtSlot(str)
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 13
diff changeset
559 def __viewChatHistory(self, hid):
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 13
diff changeset
560 """
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 13
diff changeset
561 Private slot to show the chat history in a separate window.
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 13
diff changeset
562
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 13
diff changeset
563 @param hid ID of the history to be shown
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 13
diff changeset
564 @type str
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 13
diff changeset
565 """
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 13
diff changeset
566 historyWidget = self.__findHistoryWidget(hid)
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 13
diff changeset
567 if historyWidget is None:
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 13
diff changeset
568 # Oops, just ignore it
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 13
diff changeset
569 return
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 13
diff changeset
570
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 13
diff changeset
571 try:
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 13
diff changeset
572 dlg = self.__chatHistoryDialogs[hid]
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 13
diff changeset
573 except KeyError:
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 13
diff changeset
574 dlg = OllamaChatDialog(
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 13
diff changeset
575 hid=hid,
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 13
diff changeset
576 title=historyWidget.getTitle(),
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 13
diff changeset
577 model=historyWidget.getModel(),
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 13
diff changeset
578 parent=self,
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 13
diff changeset
579 )
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 13
diff changeset
580 dlg.rejected.connect(lambda: self.__chatHistoryDialogClosed(dlg))
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 13
diff changeset
581 self.__chatHistoryDialogs[hid] = dlg
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 13
diff changeset
582
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 13
diff changeset
583 dlg.setHistory(historyWidget.getMessages())
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 13
diff changeset
584 dlg.show()
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 13
diff changeset
585 dlg.raise_()
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 13
diff changeset
586
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 13
diff changeset
587 def __chatHistoryDialogClosed(self, dialog):
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 13
diff changeset
588 """
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 13
diff changeset
589 Private method to handle the closing of a chat history dialog.
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 13
diff changeset
590
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 13
diff changeset
591 @param dialog reference to the closed dialog
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 13
diff changeset
592 @type OllamaChatDialog
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 13
diff changeset
593 """
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 13
diff changeset
594 hid = dialog.getHistoryId()
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 13
diff changeset
595 with contextlib.suppress(KeyError):
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 13
diff changeset
596 del self.__chatHistoryDialogs[hid]
22245a10b118 Added the capability to view a chat history in a separate window.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 13
diff changeset
597
5
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
598 def __removeChatWidget(self, hid):
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
599 """
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
600 Private method to remove a chat widget given its chat history ID.
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
601
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
602 @param hid chat history ID
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
603 @type str
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
604 """
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
605 widget = self.__findChatWidget(hid)
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
606 if widget is not None:
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
607 self.chatStackWidget.removeWidget(widget)
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
608
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
609 @pyqtSlot()
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
610 def __updateMessageEditState(self):
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
611 """
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
612 Private slot to set the enabled state of the message line edit and the send
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
613 button.
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
614 """
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
615 chatActive = bool(self.chatStackWidget.count())
12
cf507e6f12d7 Changed the message input widget to a QPlainTextEdit to be able to enter longer texts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
616 hasText = bool(self.messageEdit.toPlainText())
5
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
617
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
618 self.messageEdit.setEnabled(chatActive)
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
619 self.sendButton.setEnabled(chatActive and hasText)
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
620
12
cf507e6f12d7 Changed the message input widget to a QPlainTextEdit to be able to enter longer texts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
621 @pyqtSlot()
cf507e6f12d7 Changed the message input widget to a QPlainTextEdit to be able to enter longer texts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
622 def on_messageEdit_textChanged(self):
5
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
623 """
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
624 Private slot to handle a change of the entered message.
4
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
625 """
12
cf507e6f12d7 Changed the message input widget to a QPlainTextEdit to be able to enter longer texts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
626 self.sendButton.setEnabled(bool(self.messageEdit.toPlainText()))
5
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
627
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
628 @pyqtSlot()
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
629 def __sendMessage(self):
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
630 """
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
631 Private method to send the given message of the current chat to the
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
632 'ollama' server.
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
633
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
634 This sends the message with context (i.e. the history of the current chat).
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
635 """
12
cf507e6f12d7 Changed the message input widget to a QPlainTextEdit to be able to enter longer texts.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
636 msg = self.messageEdit.toPlainText()
5
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
637 if not msg:
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
638 # empty message => ignore
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
639 return
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
640
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
641 if not bool(self.chatStackWidget.count()):
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
642 # no current stack => ignore
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
643 return
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
644
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
645 # 1. determine hid of the current chat via chat stack widget
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
646 chatWidget = self.chatStackWidget.currentWidget()
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
647 hid = chatWidget.getHistoryId()
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
648
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
649 # 2. get chat history widget via hid from chat history widget
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
650 historyWidget = self.__findHistoryWidget(hid)
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
651 if historyWidget is not None:
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
652 # 3. append the message to the history
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
653 historyWidget.addToMessages("user", msg)
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
654
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
655 # 4. get the complete messages list from the history
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
656 messages = historyWidget.getMessages()
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
657
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
658 # 5. add the message to the current chat and an empty one
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
659 # for the response
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
660 chatWidget.addMessage("user", msg)
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
661 chatWidget.addMessage("assistant", "")
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
662
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
663 # 6. send the request via the client (non-streaming (?))
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
664 model = historyWidget.getModel()
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
665 self.__client.chat(
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
666 model=model,
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
667 messages=messages,
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
668 streaming=self.__plugin.getPreferences("StreamingChatResponse"),
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
669 )
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
670
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
671 # 7. clear the message editor and give input focus back
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
672 self.messageEdit.clear()
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
673 self.messageEdit.setFocus(Qt.FocusReason.OtherFocusReason)
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
674
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
675 @pyqtSlot(str, str, bool)
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
676 def __handleServerMessage(self, content, role, done):
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
677 """
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
678 Private slot handling an 'ollama' server chat response.
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
679
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
680 @param content message sent by the server
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
681 @type str
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
682 @param role role name
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
683 @type str
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
684 @param done flag indicating the last chat response
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
685 @type bool
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
686 """
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
687 if not bool(self.chatStackWidget.count()):
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
688 # no current stack => ignore
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
689 return
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
690
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
691 chatWidget = self.chatStackWidget.currentWidget()
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
692 chatWidget.appendMessage(content)
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
693 if done:
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
694 hid = chatWidget.getHistoryId()
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
695 historyWidget = self.__findHistoryWidget(hid)
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
696 if historyWidget is not None:
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
697 historyWidget.addToMessages(role, chatWidget.getRecentMessage())
4
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
698
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
699 #######################################################################
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
700 ## Menu related methods below
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
701 #######################################################################
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
702
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
703 def __initOllamaMenu(self):
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
704 """
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
705 Private method to create the super menu and attach it to the super
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
706 menu button.
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
707 """
6
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
708 ###################################################################
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
709 ## Menu with Chat History related actions
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
710 ###################################################################
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
711
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
712 self.__chatHistoryMenu = QMenu(self.tr("Chat History"))
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
713 self.__chatHistoryMenu.addAction(self.tr("Load"), self.__loadHistory)
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
714 self.__chatHistoryMenu.addSeparator()
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
715 self.__clearHistoriesAct = self.__chatHistoryMenu.addAction(
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
716 self.tr("Clear All"), self.__menuClearAllHistories
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
717 )
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
718 self.__chatHistoryMenu.addSeparator()
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
719 self.__chatHistoryMenu.addAction(self.tr("Import"), self.__menuImportHistories)
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
720 self.__chatHistoryMenu.addAction(self.tr("Export"), self.__menuExportHistories)
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
721
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
722 ###################################################################
8
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
723 ## Menu with Model related actions
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
724 ###################################################################
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
725
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
726 self.__modelMenu = QMenu(self.tr("Model Management"))
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
727 self.__modelMenu.addAction(self.tr("List Models"), self.__showModels)
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
728 self.__modelMenu.addAction(
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
729 self.tr("List Running Models"), self.__showRunningModels
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
730 )
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
731 self.__modelMenu.addSeparator()
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
732 self.__modelMenu.addAction(
24
f4d5108e90fe Added some menu entries to access various 'ollama' URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 21
diff changeset
733 self.tr("Show Model Library"),
f4d5108e90fe Added some menu entries to access various 'ollama' URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 21
diff changeset
734 lambda: self.__showOllamaUrl("OllamaModelLibraryUrl"),
8
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
735 )
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
736 self.__modelMenu.addSeparator()
11
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
737 self.__pullModelAct = self.__modelMenu.addAction(
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
738 self.tr("Install Model"), self.__pullModel
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
739 )
9
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
740 self.__removeModelAct = self.__modelMenu.addAction(
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
741 self.tr("Remove Model"), self.__removeModel
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
742 )
8
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
743
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
744 ###################################################################
7
eb1dec15b2f0 Implemented a menu, dialog and actions to start a local 'ollama' server with the capability to monitor its log output.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6
diff changeset
745 ## Menu with Local Server related actions
eb1dec15b2f0 Implemented a menu, dialog and actions to start a local 'ollama' server with the capability to monitor its log output.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6
diff changeset
746 ###################################################################
eb1dec15b2f0 Implemented a menu, dialog and actions to start a local 'ollama' server with the capability to monitor its log output.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6
diff changeset
747
eb1dec15b2f0 Implemented a menu, dialog and actions to start a local 'ollama' server with the capability to monitor its log output.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6
diff changeset
748 self.__localServerMenu = QMenu(self.tr("Local Server"))
eb1dec15b2f0 Implemented a menu, dialog and actions to start a local 'ollama' server with the capability to monitor its log output.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6
diff changeset
749 self.__localServerStartMonitorAct = self.__localServerMenu.addAction(
eb1dec15b2f0 Implemented a menu, dialog and actions to start a local 'ollama' server with the capability to monitor its log output.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6
diff changeset
750 self.tr("Start with Monitoring"), self.__startLocalServerMonitoring
eb1dec15b2f0 Implemented a menu, dialog and actions to start a local 'ollama' server with the capability to monitor its log output.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6
diff changeset
751 )
eb1dec15b2f0 Implemented a menu, dialog and actions to start a local 'ollama' server with the capability to monitor its log output.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6
diff changeset
752 self.__localServerMenu.addSeparator()
eb1dec15b2f0 Implemented a menu, dialog and actions to start a local 'ollama' server with the capability to monitor its log output.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6
diff changeset
753 self.__startLocalServerAct = self.__localServerMenu.addAction(
eb1dec15b2f0 Implemented a menu, dialog and actions to start a local 'ollama' server with the capability to monitor its log output.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6
diff changeset
754 self.tr("Start"), self.__startLocalServer
eb1dec15b2f0 Implemented a menu, dialog and actions to start a local 'ollama' server with the capability to monitor its log output.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6
diff changeset
755 )
eb1dec15b2f0 Implemented a menu, dialog and actions to start a local 'ollama' server with the capability to monitor its log output.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6
diff changeset
756 self.__stopLocalServerAct = self.__localServerMenu.addAction(
eb1dec15b2f0 Implemented a menu, dialog and actions to start a local 'ollama' server with the capability to monitor its log output.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6
diff changeset
757 self.tr("Stop"), self.__stopLocalServer
eb1dec15b2f0 Implemented a menu, dialog and actions to start a local 'ollama' server with the capability to monitor its log output.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6
diff changeset
758 )
eb1dec15b2f0 Implemented a menu, dialog and actions to start a local 'ollama' server with the capability to monitor its log output.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6
diff changeset
759
eb1dec15b2f0 Implemented a menu, dialog and actions to start a local 'ollama' server with the capability to monitor its log output.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6
diff changeset
760 ###################################################################
24
f4d5108e90fe Added some menu entries to access various 'ollama' URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 21
diff changeset
761 ## Menu with 'ollama' URL related actions
f4d5108e90fe Added some menu entries to access various 'ollama' URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 21
diff changeset
762 ###################################################################
f4d5108e90fe Added some menu entries to access various 'ollama' URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 21
diff changeset
763
f4d5108e90fe Added some menu entries to access various 'ollama' URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 21
diff changeset
764 self.__urlsMenu = QMenu(self.tr("ollama URLs"))
f4d5108e90fe Added some menu entries to access various 'ollama' URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 21
diff changeset
765 self.__urlsMenu.addAction(
f4d5108e90fe Added some menu entries to access various 'ollama' URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 21
diff changeset
766 self.tr("Model Library"),
f4d5108e90fe Added some menu entries to access various 'ollama' URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 21
diff changeset
767 lambda: self.__showOllamaUrl("OllamaModelLibraryUrl"),
f4d5108e90fe Added some menu entries to access various 'ollama' URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 21
diff changeset
768 )
f4d5108e90fe Added some menu entries to access various 'ollama' URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 21
diff changeset
769 self.__urlsMenu.addAction(
f4d5108e90fe Added some menu entries to access various 'ollama' URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 21
diff changeset
770 self.tr("Download"),
f4d5108e90fe Added some menu entries to access various 'ollama' URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 21
diff changeset
771 lambda: self.__showOllamaUrl("OllamaDownloadUrl"),
f4d5108e90fe Added some menu entries to access various 'ollama' URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 21
diff changeset
772 )
f4d5108e90fe Added some menu entries to access various 'ollama' URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 21
diff changeset
773 self.__urlsMenu.addAction(
f4d5108e90fe Added some menu entries to access various 'ollama' URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 21
diff changeset
774 self.tr("Blog"),
f4d5108e90fe Added some menu entries to access various 'ollama' URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 21
diff changeset
775 lambda: self.__showOllamaUrl("OllamaBlogUrl"),
f4d5108e90fe Added some menu entries to access various 'ollama' URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 21
diff changeset
776 )
f4d5108e90fe Added some menu entries to access various 'ollama' URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 21
diff changeset
777
f4d5108e90fe Added some menu entries to access various 'ollama' URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 21
diff changeset
778 ###################################################################
6
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
779 ## Main menu
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
780 ###################################################################
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
781
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
782 self.__ollamaMenu = QMenu()
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
783 self.__ollamaMenu.addMenu(self.__chatHistoryMenu)
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
784 self.__ollamaMenu.addSeparator()
13
3fd49d7004b2 Fixed some issues with the logic handling unresponsive servers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 12
diff changeset
785 self.__modelMenuAct = self.__ollamaMenu.addMenu(self.__modelMenu)
8
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
786 self.__ollamaMenu.addSeparator()
40
1cb80644982d Only enable the 'Local Server' menu when the 'ollamaL executable is found.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 34
diff changeset
787 self.__localServerMenuAct = self.__ollamaMenu.addMenu(self.__localServerMenu)
7
eb1dec15b2f0 Implemented a menu, dialog and actions to start a local 'ollama' server with the capability to monitor its log output.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6
diff changeset
788 self.__ollamaMenu.addSeparator()
24
f4d5108e90fe Added some menu entries to access various 'ollama' URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 21
diff changeset
789 self.__ollamaMenu.addMenu(self.__urlsMenu)
f4d5108e90fe Added some menu entries to access various 'ollama' URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 21
diff changeset
790 self.__ollamaMenu.addSeparator()
6
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
791 self.__ollamaMenu.addAction(self.tr("Configure..."), self.__ollamaConfigure)
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
792
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
793 self.__ollamaMenu.aboutToShow.connect(self.__aboutToShowOllamaMenu)
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
794
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
795 self.ollamaMenuButton.setMenu(self.__ollamaMenu)
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
796
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
797 @pyqtSlot()
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
798 def __aboutToShowOllamaMenu(self):
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
799 """
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
800 Private slot to set the action enabled status.
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
801 """
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
802 self.__clearHistoriesAct.setEnabled(self.__chatHistoryLayout.count() > 1)
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
803
40
1cb80644982d Only enable the 'Local Server' menu when the 'ollamaL executable is found.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 34
diff changeset
804 self.__localServerMenuAct.setEnabled(bool(shutil.which("ollama")))
7
eb1dec15b2f0 Implemented a menu, dialog and actions to start a local 'ollama' server with the capability to monitor its log output.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6
diff changeset
805 self.__localServerStartMonitorAct.setEnabled(
eb1dec15b2f0 Implemented a menu, dialog and actions to start a local 'ollama' server with the capability to monitor its log output.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6
diff changeset
806 self.__localServerProcess is None and self.__localServerDialog is None
eb1dec15b2f0 Implemented a menu, dialog and actions to start a local 'ollama' server with the capability to monitor its log output.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6
diff changeset
807 )
eb1dec15b2f0 Implemented a menu, dialog and actions to start a local 'ollama' server with the capability to monitor its log output.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6
diff changeset
808 self.__startLocalServerAct.setEnabled(
eb1dec15b2f0 Implemented a menu, dialog and actions to start a local 'ollama' server with the capability to monitor its log output.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6
diff changeset
809 self.__localServerProcess is None and self.__localServerDialog is None
eb1dec15b2f0 Implemented a menu, dialog and actions to start a local 'ollama' server with the capability to monitor its log output.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6
diff changeset
810 )
eb1dec15b2f0 Implemented a menu, dialog and actions to start a local 'ollama' server with the capability to monitor its log output.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6
diff changeset
811 self.__stopLocalServerAct.setEnabled(
eb1dec15b2f0 Implemented a menu, dialog and actions to start a local 'ollama' server with the capability to monitor its log output.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6
diff changeset
812 self.__localServerProcess is not None and self.__localServerDialog is None
eb1dec15b2f0 Implemented a menu, dialog and actions to start a local 'ollama' server with the capability to monitor its log output.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6
diff changeset
813 )
eb1dec15b2f0 Implemented a menu, dialog and actions to start a local 'ollama' server with the capability to monitor its log output.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6
diff changeset
814
11
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
815 self.__pullModelAct.setEnabled(not self.__pulling)
9
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
816 self.__removeModelAct.setEnabled(bool(self.__availableModels))
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
817
6
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
818 @pyqtSlot()
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
819 def __ollamaConfigure(self):
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
820 """
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
821 Private slot to show the ollama configuration page.
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
822 """
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
823 ericApp().getObject("UserInterface").showPreferences("ollamaPage")
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
824
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
825 @pyqtSlot()
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
826 def __menuClearAllHistories(self):
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
827 """
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
828 Private slot to clear all chat history entries.
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
829 """
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
830 yes = EricMessageBox.yesNo(
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
831 self,
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
832 self.tr("Clear All Chat Histories"),
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
833 self.tr(
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
834 "<p>Do you really want to delete all chat histories? This is"
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
835 " <b>irreversible</b>.</p>"
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
836 ),
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
837 )
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
838 if yes:
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
839 self.clearHistory()
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
840
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
841 @pyqtSlot()
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
842 def __menuImportHistories(self):
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
843 """
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
844 Private slot to import chat history entries from a file.
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
845 """
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
846 historyFile = EricFileDialog.getOpenFileName(
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
847 self,
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
848 self.tr("Import Chat History"),
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
849 "",
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
850 self.tr("Chat History Files (*.json);;All Files (*)"),
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
851 self.tr("Chat History Files (*.json)"),
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
852 )
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
853 if historyFile:
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
854 self.__loadChatHistoriesFile(historyFile, reportDuplicates=True)
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
855
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
856 @pyqtSlot()
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
857 def __menuExportHistories(self):
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
858 """
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
859 Private slot to export chat history entries to a file.
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
860 """
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
861 entries = []
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
862 for index in range(self.__chatHistoryLayout.count() - 1):
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
863 item = self.__chatHistoryLayout.itemAt(index)
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
864 widget = item.widget()
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
865 hid = widget.getId()
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
866 title = widget.getTitle()
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
867 entries.append((title, hid))
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
868
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
869 dlg = EricListSelectionDialog(
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
870 entries,
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
871 title=self.tr("Export Chat History"),
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
872 message=self.tr("Select the chats to be exported:"),
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
873 checkBoxSelection=True,
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
874 showSelectAll=True,
62
f5565a5417e2 Modified some modal dialog use to ensure they have a valid parent.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 59
diff changeset
875 parent=self,
6
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
876 )
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
877 if dlg.exec() == QDialog.DialogCode.Accepted:
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
878 selectedChats = dlg.getSelection()
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
879
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
880 fileName = EricFileDialog.getSaveFileName(
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
881 self,
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
882 self.tr("Export Chat History"),
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
883 "",
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
884 self.tr("Chat History Files (*.json)"),
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
885 None,
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
886 EricFileDialog.DontConfirmOverwrite,
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
887 )
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
888 if fileName:
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
889 if not fileName.endswith(".json"):
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
890 fileName += ".json"
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
891
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
892 entries = {}
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
893 for _, hid in selectedChats:
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
894 historyWidget = self.__findHistoryWidget(hid)
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
895 if historyWidget is not None:
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
896 entries[hid] = historyWidget.saveToJson()
d8064fb63eac Completed the chat history functions and menu entries and refactored the history file loading and saving functions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
897 self.__saveChatHistoryFile(fileName, entries)
7
eb1dec15b2f0 Implemented a menu, dialog and actions to start a local 'ollama' server with the capability to monitor its log output.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6
diff changeset
898
eb1dec15b2f0 Implemented a menu, dialog and actions to start a local 'ollama' server with the capability to monitor its log output.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6
diff changeset
899 def prepareServerRuntimeEnvironment(self):
eb1dec15b2f0 Implemented a menu, dialog and actions to start a local 'ollama' server with the capability to monitor its log output.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6
diff changeset
900 """
eb1dec15b2f0 Implemented a menu, dialog and actions to start a local 'ollama' server with the capability to monitor its log output.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6
diff changeset
901 Public method to prepare a QProcessEnvironment object.
eb1dec15b2f0 Implemented a menu, dialog and actions to start a local 'ollama' server with the capability to monitor its log output.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6
diff changeset
902
eb1dec15b2f0 Implemented a menu, dialog and actions to start a local 'ollama' server with the capability to monitor its log output.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6
diff changeset
903 @return prepared environment object to be used with QProcess
eb1dec15b2f0 Implemented a menu, dialog and actions to start a local 'ollama' server with the capability to monitor its log output.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6
diff changeset
904 @rtype QProcessEnvironment
eb1dec15b2f0 Implemented a menu, dialog and actions to start a local 'ollama' server with the capability to monitor its log output.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6
diff changeset
905 """
eb1dec15b2f0 Implemented a menu, dialog and actions to start a local 'ollama' server with the capability to monitor its log output.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6
diff changeset
906 env = QProcessEnvironment.systemEnvironment()
eb1dec15b2f0 Implemented a menu, dialog and actions to start a local 'ollama' server with the capability to monitor its log output.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6
diff changeset
907 env.insert(
eb1dec15b2f0 Implemented a menu, dialog and actions to start a local 'ollama' server with the capability to monitor its log output.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6
diff changeset
908 "OLLAMA_HOST",
eb1dec15b2f0 Implemented a menu, dialog and actions to start a local 'ollama' server with the capability to monitor its log output.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6
diff changeset
909 "127.0.0.1:{0}".format(self.__plugin.getPreferences("OllamaLocalPort")),
eb1dec15b2f0 Implemented a menu, dialog and actions to start a local 'ollama' server with the capability to monitor its log output.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6
diff changeset
910 )
eb1dec15b2f0 Implemented a menu, dialog and actions to start a local 'ollama' server with the capability to monitor its log output.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6
diff changeset
911
eb1dec15b2f0 Implemented a menu, dialog and actions to start a local 'ollama' server with the capability to monitor its log output.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6
diff changeset
912 return env
eb1dec15b2f0 Implemented a menu, dialog and actions to start a local 'ollama' server with the capability to monitor its log output.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6
diff changeset
913
eb1dec15b2f0 Implemented a menu, dialog and actions to start a local 'ollama' server with the capability to monitor its log output.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6
diff changeset
914 @pyqtSlot()
eb1dec15b2f0 Implemented a menu, dialog and actions to start a local 'ollama' server with the capability to monitor its log output.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6
diff changeset
915 def __startLocalServerMonitoring(self):
eb1dec15b2f0 Implemented a menu, dialog and actions to start a local 'ollama' server with the capability to monitor its log output.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6
diff changeset
916 """
eb1dec15b2f0 Implemented a menu, dialog and actions to start a local 'ollama' server with the capability to monitor its log output.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6
diff changeset
917 Private slot to open a dialog for running a local 'ollama' server instance
eb1dec15b2f0 Implemented a menu, dialog and actions to start a local 'ollama' server with the capability to monitor its log output.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6
diff changeset
918 and monitor its output.
eb1dec15b2f0 Implemented a menu, dialog and actions to start a local 'ollama' server with the capability to monitor its log output.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6
diff changeset
919 """
eb1dec15b2f0 Implemented a menu, dialog and actions to start a local 'ollama' server with the capability to monitor its log output.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6
diff changeset
920 from .RunOllamaServerDialog import RunOllamaServerDialog
eb1dec15b2f0 Implemented a menu, dialog and actions to start a local 'ollama' server with the capability to monitor its log output.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6
diff changeset
921
eb1dec15b2f0 Implemented a menu, dialog and actions to start a local 'ollama' server with the capability to monitor its log output.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6
diff changeset
922 self.__localServerDialog = RunOllamaServerDialog(
eb1dec15b2f0 Implemented a menu, dialog and actions to start a local 'ollama' server with the capability to monitor its log output.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6
diff changeset
923 self.__client, self.__plugin, self
eb1dec15b2f0 Implemented a menu, dialog and actions to start a local 'ollama' server with the capability to monitor its log output.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6
diff changeset
924 )
eb1dec15b2f0 Implemented a menu, dialog and actions to start a local 'ollama' server with the capability to monitor its log output.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6
diff changeset
925 self.__localServerDialog.serverStarted.connect(self.__serverStarted)
eb1dec15b2f0 Implemented a menu, dialog and actions to start a local 'ollama' server with the capability to monitor its log output.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6
diff changeset
926 self.__localServerDialog.serverStopped.connect(self.__serverStopped)
eb1dec15b2f0 Implemented a menu, dialog and actions to start a local 'ollama' server with the capability to monitor its log output.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6
diff changeset
927 self.__localServerDialog.finished.connect(self.__serverDialogClosed)
eb1dec15b2f0 Implemented a menu, dialog and actions to start a local 'ollama' server with the capability to monitor its log output.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6
diff changeset
928 self.__localServerDialog.show()
eb1dec15b2f0 Implemented a menu, dialog and actions to start a local 'ollama' server with the capability to monitor its log output.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6
diff changeset
929 self.__localServerDialog.startServer()
eb1dec15b2f0 Implemented a menu, dialog and actions to start a local 'ollama' server with the capability to monitor its log output.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6
diff changeset
930
eb1dec15b2f0 Implemented a menu, dialog and actions to start a local 'ollama' server with the capability to monitor its log output.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6
diff changeset
931 @pyqtSlot()
eb1dec15b2f0 Implemented a menu, dialog and actions to start a local 'ollama' server with the capability to monitor its log output.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6
diff changeset
932 def __serverStarted(self):
eb1dec15b2f0 Implemented a menu, dialog and actions to start a local 'ollama' server with the capability to monitor its log output.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6
diff changeset
933 """
eb1dec15b2f0 Implemented a menu, dialog and actions to start a local 'ollama' server with the capability to monitor its log output.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6
diff changeset
934 Private slot to handle the start of a local server.
eb1dec15b2f0 Implemented a menu, dialog and actions to start a local 'ollama' server with the capability to monitor its log output.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6
diff changeset
935 """
47
178d52749f25 Fixed a bug in the Run Server dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 44
diff changeset
936 self.__client.setMode(local=True)
7
eb1dec15b2f0 Implemented a menu, dialog and actions to start a local 'ollama' server with the capability to monitor its log output.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6
diff changeset
937
eb1dec15b2f0 Implemented a menu, dialog and actions to start a local 'ollama' server with the capability to monitor its log output.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6
diff changeset
938 @pyqtSlot()
eb1dec15b2f0 Implemented a menu, dialog and actions to start a local 'ollama' server with the capability to monitor its log output.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6
diff changeset
939 def __serverStopped(self):
eb1dec15b2f0 Implemented a menu, dialog and actions to start a local 'ollama' server with the capability to monitor its log output.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6
diff changeset
940 """
eb1dec15b2f0 Implemented a menu, dialog and actions to start a local 'ollama' server with the capability to monitor its log output.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6
diff changeset
941 Private slot to handle the stopping of a local server.
eb1dec15b2f0 Implemented a menu, dialog and actions to start a local 'ollama' server with the capability to monitor its log output.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6
diff changeset
942 """
47
178d52749f25 Fixed a bug in the Run Server dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 44
diff changeset
943 self.__client.setMode(local=False)
7
eb1dec15b2f0 Implemented a menu, dialog and actions to start a local 'ollama' server with the capability to monitor its log output.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6
diff changeset
944
eb1dec15b2f0 Implemented a menu, dialog and actions to start a local 'ollama' server with the capability to monitor its log output.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6
diff changeset
945 @pyqtSlot()
eb1dec15b2f0 Implemented a menu, dialog and actions to start a local 'ollama' server with the capability to monitor its log output.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6
diff changeset
946 def __serverDialogClosed(self):
eb1dec15b2f0 Implemented a menu, dialog and actions to start a local 'ollama' server with the capability to monitor its log output.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6
diff changeset
947 """
eb1dec15b2f0 Implemented a menu, dialog and actions to start a local 'ollama' server with the capability to monitor its log output.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6
diff changeset
948 Private slot handling the closing of the local server dialog.
eb1dec15b2f0 Implemented a menu, dialog and actions to start a local 'ollama' server with the capability to monitor its log output.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6
diff changeset
949 """
eb1dec15b2f0 Implemented a menu, dialog and actions to start a local 'ollama' server with the capability to monitor its log output.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6
diff changeset
950 self.__localServerDialog.deleteLater()
eb1dec15b2f0 Implemented a menu, dialog and actions to start a local 'ollama' server with the capability to monitor its log output.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 6
diff changeset
951 self.__localServerDialog = None
8
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
952
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
953 @pyqtSlot()
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
954 def __startLocalServer(self):
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
955 """
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
956 Private slot to start a local 'ollama' server instance in the background.
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
957 """
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
958 env = self.prepareServerRuntimeEnvironment()
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
959 self.__localServerProcess = QProcess()
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
960 self.__localServerProcess.setProcessEnvironment(env)
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
961 self.__localServerProcess.finished.connect(self.__localServerProcessFinished)
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
962
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
963 command = "ollama"
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
964 args = ["serve"]
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
965
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
966 self.__localServerProcess.start(command, args)
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
967 ok = self.__localServerProcess.waitForStarted(10000)
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
968 if not ok:
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
969 EricMessageBox.critical(
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
970 None,
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
971 self.tr("Run Local 'ollama' Server"),
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
972 self.tr("""The loacl 'ollama' server process could not be started."""),
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
973 )
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
974 self.__localServerProcess = None
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
975 else:
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
976 self.__serverStarted()
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
977
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
978 @pyqtSlot()
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
979 def __stopLocalServer(self):
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
980 """
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
981 Private slot to stop a running local 'ollama' server instance.
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
982 """
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
983 if self.__localServerProcess is not None:
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
984 self.__localServerProcess.terminate()
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
985
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
986 @pyqtSlot()
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
987 def __localServerProcessFinished(self):
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
988 """
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
989 Private slot handling the finishing of the local 'ollama' server process.
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
990 """
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
991 if (
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
992 self.__localServerProcess is not None
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
993 and self.__localServerProcess.state() != QProcess.ProcessState.NotRunning
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
994 ):
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
995 self.__localServerProcess.terminate()
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
996 QTimer.singleShot(2000, self.__localServerProcess.kill)
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
997 self.__localServerProcess.waitForFinished(3000)
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
998
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
999 self.__localServerProcess = None
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
1000
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
1001 self.__serverStopped()
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
1002
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
1003 @pyqtSlot()
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
1004 def __showModels(self):
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
1005 """
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
1006 Private slot to ask the 'ollama' server for a list of available models with
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
1007 some details.
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
1008 """
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
1009 from .OllamaDetailedModelsDialog import OllamaDetailedModelsDialog
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
1010
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
1011 models = self.__client.listDetails()
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
1012 if models:
62
f5565a5417e2 Modified some modal dialog use to ensure they have a valid parent.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 59
diff changeset
1013 dlg = OllamaDetailedModelsDialog(models, parent=self)
8
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
1014 dlg.exec()
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
1015 else:
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
1016 EricMessageBox.information(
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
1017 self,
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
1018 self.tr("List Models"),
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
1019 self.tr("There are no models available."),
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
1020 )
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
1021
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
1022 @pyqtSlot()
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
1023 def __showRunningModels(self):
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
1024 """
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
1025 Private slot to show a dialog with data of the running models.
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
1026 """
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
1027 from .OllamaRunningModelsDialog import OllamaRunningModelsDialog
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
1028
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
1029 models = self.__client.listRunning()
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
1030 if models:
62
f5565a5417e2 Modified some modal dialog use to ensure they have a valid parent.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 59
diff changeset
1031 dlg = OllamaRunningModelsDialog(models, parent=self)
8
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
1032 dlg.exec()
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
1033 else:
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
1034 EricMessageBox.information(
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
1035 self,
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
1036 self.tr("List Running Models"),
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
1037 self.tr("There are no models running."),
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
1038 )
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
1039
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
1040 @pyqtSlot()
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
1041 def __pullModel(self):
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
1042 """
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
1043 Private slot to download a model from the 'ollama' model library.
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
1044 """
11
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
1045 from .OllamaPullProgressDialog import OllamaPullProgressDialog
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
1046
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
1047 if self.__pulling:
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
1048 # only one pull operation supported
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
1049 return
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
1050
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
1051 model, ok = QInputDialog.getText(
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
1052 self,
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
1053 self.tr("Install Model"),
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
1054 self.tr("Enter the name of the model to be installed:"),
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
1055 QLineEdit.EchoMode.Normal,
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
1056 )
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
1057 if ok and model:
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
1058 self.__pulling = True
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
1059
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
1060 if self.__pullProgressDialog is None:
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
1061 self.__pullProgressDialog = OllamaPullProgressDialog(self)
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
1062 self.__pullProgressDialog.abortPull.connect(self.__client.abortPull)
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
1063
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
1064 self.__pullProgressDialog.setModel(model)
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
1065 self.__pullProgressDialog.clear()
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
1066 self.__pullProgressDialog.show()
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
1067
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
1068 self.__client.pull(model)
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
1069
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
1070 @pyqtSlot(str, str, "unsigned long int", "unsigned long int")
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
1071 def __handlePullStatus(self, status, idStr, total, completed):
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
1072 """
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
1073 Private slot to handle a pull status update.
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
1074
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
1075 @param status status message reported by the 'ollama' server
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
1076 @type str
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
1077 @param idStr ID of the file being pulled or empty
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
1078 @type str
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
1079 @param total size of the file being pulled or 0 in case of an empty ID
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
1080 @type int
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
1081 @param completed downloaded bytes or 0 in case of an empty ID
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
1082 @type int
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
1083 """
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
1084 if self.__pullProgressDialog is not None:
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
1085 self.__pullProgressDialog.setStatus(status, idStr, total, completed)
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
1086
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
1087 @pyqtSlot(str)
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
1088 def __handlePullError(self, errMsg):
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
1089 """
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
1090 Private slot to handle an error during a pull operation.
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
1091
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
1092 @param errMsg error message
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
1093 @type str
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
1094 """
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
1095 if self.__pullProgressDialog is not None:
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
1096 self.__pullProgressDialog.showError(errMsg)
8
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
1097
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
1098 @pyqtSlot()
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
1099 def __removeModel(self):
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
1100 """
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
1101 Private slot to remove a model from the 'ollama' server.
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
1102 """
9
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
1103 if self.__availableModels:
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
1104 modelName, ok = QInputDialog.getItem(
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
1105 self,
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
1106 self.tr("Remove Model"),
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
1107 self.tr("Select the model to be removed by the 'ollama' server:"),
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
1108 [""] + sorted(self.__availableModels),
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
1109 0,
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
1110 False,
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
1111 )
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
1112 if ok and modelName:
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
1113 deleted = self.__client.remove(modelName)
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
1114 if deleted:
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
1115 EricMessageBox.information(
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
1116 self,
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
1117 self.tr("Remove Model"),
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
1118 self.tr(
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
1119 "<p>The model <b>{0}</b> was deleted successfully.</p>"
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
1120 ).format(modelName),
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
1121 )
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
1122 self.__client.list() # reload the list of models
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
1123 else:
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
1124 EricMessageBox.warning(
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
1125 self,
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
1126 self.tr("Remove Model"),
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
1127 self.tr(
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
1128 "<p>The model <b>{0}</b> could not be removed from the"
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
1129 " 'ollama' server.</p>"
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
1130 ).format(modelName),
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
1131 )
11
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
1132
24
f4d5108e90fe Added some menu entries to access various 'ollama' URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 21
diff changeset
1133 def __showOllamaUrl(self, urlKey):
f4d5108e90fe Added some menu entries to access various 'ollama' URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 21
diff changeset
1134 """
f4d5108e90fe Added some menu entries to access various 'ollama' URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 21
diff changeset
1135 Private method to open an 'ollama' URL given by its configuration key.
f4d5108e90fe Added some menu entries to access various 'ollama' URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 21
diff changeset
1136
f4d5108e90fe Added some menu entries to access various 'ollama' URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 21
diff changeset
1137 @param urlKey URL configuration key
f4d5108e90fe Added some menu entries to access various 'ollama' URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 21
diff changeset
1138 @type str
f4d5108e90fe Added some menu entries to access various 'ollama' URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 21
diff changeset
1139 """
f4d5108e90fe Added some menu entries to access various 'ollama' URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 21
diff changeset
1140 urlStr = self.__plugin.getPreferences(urlKey)
f4d5108e90fe Added some menu entries to access various 'ollama' URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 21
diff changeset
1141 url = QUrl.fromUserInput(urlStr)
f4d5108e90fe Added some menu entries to access various 'ollama' URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 21
diff changeset
1142 QDesktopServices.openUrl(url)
f4d5108e90fe Added some menu entries to access various 'ollama' URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 21
diff changeset
1143
11
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
1144 @pyqtSlot(str)
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
1145 def __handleClientError(self, errMsg):
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
1146 """
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
1147 Private slot to handle an error message sent by the server.
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
1148
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
1149 @param errMsg error message
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
1150 @type str
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
1151 """
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
1152 EricMessageBox.warning(
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
1153 self,
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
1154 self.tr("Network Error"),
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
1155 errMsg,
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
1156 )
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
1157
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
1158 @pyqtSlot()
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
1159 def __handleClientFinished(self):
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
1160 """
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
1161 Private slot to handle the end of a client server interaction.
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
1162 """
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
1163 if self.__pullProgressDialog is not None and self.__pulling:
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
1164 self.__pullProgressDialog.setFinished(True)
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
1165 self.__pulling = False
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10
diff changeset
1166 self.__client.list()
68
ca2e671f894e Added the capability to send the prompt by pressing Ctrl-Return or Ctrl-Enter.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 67
diff changeset
1167
ca2e671f894e Added the capability to send the prompt by pressing Ctrl-Return or Ctrl-Enter.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 67
diff changeset
1168 def eventFilter(self, obj, evt):
ca2e671f894e Added the capability to send the prompt by pressing Ctrl-Return or Ctrl-Enter.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 67
diff changeset
1169 """
ca2e671f894e Added the capability to send the prompt by pressing Ctrl-Return or Ctrl-Enter.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 67
diff changeset
1170 Public method to process some events for the message edit.
ca2e671f894e Added the capability to send the prompt by pressing Ctrl-Return or Ctrl-Enter.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 67
diff changeset
1171
ca2e671f894e Added the capability to send the prompt by pressing Ctrl-Return or Ctrl-Enter.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 67
diff changeset
1172 @param obj reference to the object the event was meant for
ca2e671f894e Added the capability to send the prompt by pressing Ctrl-Return or Ctrl-Enter.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 67
diff changeset
1173 @type QObject
ca2e671f894e Added the capability to send the prompt by pressing Ctrl-Return or Ctrl-Enter.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 67
diff changeset
1174 @param evt reference to the event object
ca2e671f894e Added the capability to send the prompt by pressing Ctrl-Return or Ctrl-Enter.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 67
diff changeset
1175 @type QEvent
ca2e671f894e Added the capability to send the prompt by pressing Ctrl-Return or Ctrl-Enter.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 67
diff changeset
1176 @return flag to indicate that the event was handled
ca2e671f894e Added the capability to send the prompt by pressing Ctrl-Return or Ctrl-Enter.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 67
diff changeset
1177 @rtype bool
ca2e671f894e Added the capability to send the prompt by pressing Ctrl-Return or Ctrl-Enter.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 67
diff changeset
1178 """
ca2e671f894e Added the capability to send the prompt by pressing Ctrl-Return or Ctrl-Enter.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 67
diff changeset
1179 if (
ca2e671f894e Added the capability to send the prompt by pressing Ctrl-Return or Ctrl-Enter.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 67
diff changeset
1180 obj is self.messageEdit
ca2e671f894e Added the capability to send the prompt by pressing Ctrl-Return or Ctrl-Enter.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 67
diff changeset
1181 and evt.type() == QEvent.Type.KeyPress
ca2e671f894e Added the capability to send the prompt by pressing Ctrl-Return or Ctrl-Enter.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 67
diff changeset
1182 and evt.key() in (Qt.Key.Key_Return, Qt.Key.Key_Enter)
ca2e671f894e Added the capability to send the prompt by pressing Ctrl-Return or Ctrl-Enter.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 67
diff changeset
1183 and evt.modifiers() == Qt.KeyboardModifier.ControlModifier
ca2e671f894e Added the capability to send the prompt by pressing Ctrl-Return or Ctrl-Enter.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 67
diff changeset
1184 ):
ca2e671f894e Added the capability to send the prompt by pressing Ctrl-Return or Ctrl-Enter.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 67
diff changeset
1185 # Ctrl-Enter or Ctrl-Return => commit
ca2e671f894e Added the capability to send the prompt by pressing Ctrl-Return or Ctrl-Enter.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 67
diff changeset
1186 self.sendButton.animateClick()
ca2e671f894e Added the capability to send the prompt by pressing Ctrl-Return or Ctrl-Enter.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 67
diff changeset
1187 return True
ca2e671f894e Added the capability to send the prompt by pressing Ctrl-Return or Ctrl-Enter.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 67
diff changeset
1188 else:
ca2e671f894e Added the capability to send the prompt by pressing Ctrl-Return or Ctrl-Enter.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 67
diff changeset
1189 # standard event processing
ca2e671f894e Added the capability to send the prompt by pressing Ctrl-Return or Ctrl-Enter.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 67
diff changeset
1190 return super().eventFilter(obj, evt)

eric ide

mercurial