OllamaInterface/OllamaWidget.py

Mon, 26 Aug 2024 16:01:11 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Mon, 26 Aug 2024 16:01:11 +0200
changeset 9
c471738b75b3
parent 8
3118d16e526e
child 10
734921ab2b89
permissions
-rw-r--r--

Implemented the 'Remove Model' menu action.

4
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
2 # Copyright (c) 2024 Detlev Offenbach <detlev@die-offenbachs.de>
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
3 #
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 Module implementing the main ollama interface widget.
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
7 """
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 import json
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
10 import os
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
11
9
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
12 from PyQt6.QtCore import QProcess, QProcessEnvironment, Qt, QTimer, QUrl, pyqtSlot
8
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
13 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
14 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
15 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
16 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
17 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
18 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
19 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
20 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
21 )
4
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
22
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
23 from eric7 import Globals
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
24 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
25 from eric7.EricWidgets import EricFileDialog, EricMessageBox
5
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
26 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
27 from eric7.EricWidgets.EricListSelectionDialog import EricListSelectionDialog
4
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
28
5
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
29 from .OllamaChatWidget import OllamaChatWidget
4
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
30 from .OllamaClient import OllamaClient
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
31 from .OllamaHistoryWidget import OllamaHistoryWidget
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
32 from .Ui_OllamaWidget import Ui_OllamaWidget
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
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
35 class OllamaWidget(QWidget, Ui_OllamaWidget):
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
36 """
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
37 Class implementing the main ollama interface widget.
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
38 """
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
39
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
40 OllamaHistoryFile = "ollama_history.json"
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
41
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
42 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
43 """
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
44 Constructor
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
45
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
46 @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
47 @type PluginOllamaInterface
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
48 @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
49 (True = eric-ide mode, False = application mode)
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
50 @type bool (optional)
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
51 @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
52 @type QWidget (optional)
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
53 """
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
54 super().__init__(parent)
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
55 self.setupUi(self)
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
56
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
57 self.__plugin = plugin
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
58 self.__client = OllamaClient(plugin, self)
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 if fromEric:
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
61 self.layout().setContentsMargins(0, 3, 0, 0)
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
62 else:
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
63 self.layout().setContentsMargins(0, 0, 0, 0)
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
64
5
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
65 iconSuffix = "-dark" if ericApp().usesDarkPalette() else "-light"
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
66
4
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
67 self.ollamaMenuButton.setIcon(EricPixmapCache.getIcon("superMenu"))
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
68 self.reloadModelsButton.setIcon(EricPixmapCache.getIcon("reload"))
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
69 self.newChatButton.setIcon(EricPixmapCache.getIcon("plus"))
5
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
70 self.sendButton.setIcon(
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
71 EricPixmapCache.getIcon(
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
72 os.path.join("OllamaInterface", "icons", "send{0}".format(iconSuffix))
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
73 )
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
74 )
4
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
75
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
76 self.ollamaMenuButton.setAutoRaise(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
77 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
78
4
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
79 self.__chatHistoryLayout = QVBoxLayout()
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
80 self.historyScrollWidget.setLayout(self.__chatHistoryLayout)
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
81 self.__chatHistoryLayout.addStretch(1)
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
82
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
83 self.mainSplitter.setSizes([200, 2000])
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
84
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
85 self.newChatButton.setEnabled(False)
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
86 self.__handleServerStateChanged(False)
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
87
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
88 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
89 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
90
9
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
91 self.__availableModels = []
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
92
4
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
93 self.__connectClient()
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
94
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
95 self.__initOllamaMenu()
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
96
5
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
97 self.sendButton.clicked.connect(self.__sendMessage)
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
98 self.messageEdit.returnPressed.connect(self.__sendMessage)
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
99
4
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
100 self.__loadHistory()
5
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
101 self.__updateMessageEditState()
4
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
102
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
103 def __connectClient(self):
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
104 """
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
105 Private method to connect the client signals.
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
106 """
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
107 self.__client.serverStateChanged.connect(self.__handleServerStateChanged)
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
108 self.__client.serverVersion.connect(self.__setHeaderLabel)
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
109 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
110 self.__client.modelsList.connect(self.__checkHistoryModels)
5
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
111 self.__client.replyReceived.connect(self.__handleServerMessage)
4
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
112
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
113 @pyqtSlot(bool)
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
114 def __handleServerStateChanged(self, ok):
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
115 """
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
116 Private slot handling a change in the 'ollama' server responsiveness.
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
117
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
118 @param ok flag indicating a responsive 'ollama' server
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
119 @type bool
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
120 """
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
121 if ok:
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
122 self.__finishSetup()
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
123 else:
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
124 self.ollamaVersionLabel.setText(
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
125 self.tr("<b>Error: The configured server is not responding.</b>")
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.setEnabled(ok)
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
128
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
129 @pyqtSlot()
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
130 def __finishSetup(self):
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
131 """
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
132 Private slot to finish the UI setup.
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
133 """
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
134 self.__client.version()
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
135 self.__client.list()
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
136
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
137 @pyqtSlot()
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
138 def on_reloadModelsButton_clicked(self):
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
139 """
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
140 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
141 """
8
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
142 self.__finishSetup()
4
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
143
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
144 @pyqtSlot(str)
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
145 def on_modelComboBox_currentTextChanged(self, model):
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
146 """
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
147 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
148
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
149 @param model name of the selected model
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
150 @type str
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
151 """
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
152 self.newChatButton.setEnabled(bool(model))
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
153
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
154 ############################################################################
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
155 ## Methods handling signals from the 'ollama' client.
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
156 ############################################################################
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 @pyqtSlot(str)
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
159 def __setHeaderLabel(self, version):
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 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
162
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
163 @param version 'ollama' server version'
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
164 @type str
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
165 """
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
166 self.ollamaVersionLabel.setText(
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
167 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
168 )
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
169
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
170 @pyqtSlot(list)
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
171 def __populateModelSelector(self, modelNames):
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
172 """
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
173 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
174 the model selector with them.
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
175
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
176 @param modelNames list of model names
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
177 @type list[str]
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
178 """
9
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
179 self.__availableModels = modelNames[:]
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
180
4
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
181 self.modelComboBox.clear()
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
182
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
183 self.modelComboBox.addItem("")
9
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
184 self.modelComboBox.addItems(
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
185 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
186 )
4
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
187
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
188 @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
189 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
190 """
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
191 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
192 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
193
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
194 @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
195 @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
196 """
9
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
197 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
198 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
199 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
200
4
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
201 ############################################################################
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
202 ## 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
203 ############################################################################
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
204
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
205 def __createHistoryWidget(self, title, model, jsonStr=None):
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 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
208 respective layout.
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
209
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
210 @param title title of the chat
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
211 @type str
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
212 @param model name of the model
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
213 @type str
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
214 @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
215 to None)
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
216 @type str (optional)
5
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
217 @return reference to the created history widget
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
218 @rtype OllamaHistoryWidget
4
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
219 """
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
220 history = OllamaHistoryWidget(title=title, model=model, jsonStr=jsonStr)
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
221 self.__chatHistoryLayout.insertWidget(
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
222 self.__chatHistoryLayout.count() - 1, history
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
223 )
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
224
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
225 history.deleteChatHistory.connect(self.__deleteHistory)
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
226 history.dataChanged.connect(self.__saveHistory)
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
227 history.newChatWithHistory.connect(self.__newChatWithHistory)
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.__saveHistory()
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
230
5
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
231 QTimer.singleShot(0, self.__scrollHistoryToBottom)
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
232
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
233 return history
4
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
234
5
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
235 @pyqtSlot()
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
236 def __scrollHistoryToBottom(self):
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
237 """
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
238 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
239 """
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
240 scrollbar = self.historyScrollArea.verticalScrollBar()
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
241 scrollbar.setMaximum(self.historyScrollWidget.height())
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
242 scrollbar.setValue(scrollbar.maximum())
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
243
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
244 def __findHistoryWidget(self, hid):
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
245 """
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
246 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
247
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
248 @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
249 @type str
5
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
250 @return reference to the chat history widget
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
251 @rtype OllamaHistoryWidget
4
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
252 """
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
253 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
254 widget = self.__chatHistoryLayout.itemAt(index).widget()
5
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
255 if widget.getId() == hid:
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
256 return widget
4
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
257
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
258 return None
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
259
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
260 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
261 """
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
262 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
263
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
264 @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
265 @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
266 """
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
267 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
268 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
269 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
270 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
271
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
272 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
273
4
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
274 def __historyFilePath(self):
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
275 """
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
276 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
277
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
278 @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
279 @rtype str
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
280 """
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
281 return os.path.join(Globals.getConfigDir(), OllamaWidget.OllamaHistoryFile)
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
282
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
283 @pyqtSlot()
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
284 def __saveHistory(self):
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 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
287 """
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
288 # step 1: collect all history entries
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
289 entries = {}
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
290 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
291 widget = self.__chatHistoryLayout.itemAt(index).widget()
5
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
292 hid = widget.getId()
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
293 entries[hid] = widget.saveToJson()
4
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
294
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
295 # step 2: save the collected chat histories
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
296 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
297 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
298
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
299 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
300 """
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
301 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
302
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
303 @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
304 @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
305 @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
306 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
307 @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
308 """
4
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
309 try:
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
310 with open(filePath, "w") as f:
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
311 json.dump(entries, f)
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
312 except OSError as err:
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
313 EricMessageBox.critical(
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
314 self,
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
315 self.tr("Save Chat History"),
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
316 self.tr(
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
317 "<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
318 "<p>Reason: {1}</p>"
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
319 ).format(filePath, str(err)),
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
320 )
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
321
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
322 def __loadHistory(self):
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
323 """
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
324 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
325 """
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
326 # 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
327 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
328 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
329
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 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
331 """
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 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
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 @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
335 @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
336 @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
337 (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
338 @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
339 @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
340 @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
341 """
4
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
342 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
343 return False
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 try:
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
346 with open(filePath, "r") as f:
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
347 entries = json.load(f)
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
348 except OSError as err:
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
349 EricMessageBox.critical(
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
350 self,
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
351 self.tr("Load Chat History"),
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
352 self.tr(
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
353 "<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
354 "<p>Reason: {1}</p>"
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
355 ).format(filePath, str(err)),
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
356 )
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
357 return False
4
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
358
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
359 # 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
360 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
361 skipped = []
5
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
362 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
363 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
364 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
365 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
366 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
367 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
368
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 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
370 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
371 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
372 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
373 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
374 "<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
375 "{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
376 ).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
377 )
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
378
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
379 return True
4
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
380
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
381 def clearHistory(self):
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 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
384 """
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
385 while self.__chatHistoryLayout.count() > 1:
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
386 # 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
387 item = self.__chatHistoryLayout.takeAt(0)
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
388 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
389 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
390 self.__removeChatWidget(hid)
4
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
391 item.widget().deleteLater()
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
392
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
393 self.__saveHistory()
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
394
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
395 @pyqtSlot(str)
5
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
396 def __deleteHistory(self, hid):
4
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
397 """
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
398 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
399
5
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
400 @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
401 @type str
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
402 """
5
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
403 widget = self.__findHistoryWidget(hid)
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
404 if widget is not None:
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
405 widgetIndex = self.__chatHistoryLayout.indexOf(widget)
4
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
406 item = self.__chatHistoryLayout.takeAt(widgetIndex)
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
407 if item is not None:
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
408 item.widget().deleteLater()
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
409
5
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
410 self.__saveHistory()
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
411
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
412 self.__removeChatWidget(hid)
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
413
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
414 #######################################################################
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
415 ## Chat related methods below
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
416 #######################################################################
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
417
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
418 def __findChatWidget(self, hid):
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
419 """
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
420 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
421
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
422 @param hid chat history ID
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
423 @type str
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
424 @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
425 @rtype OllamaChatWidget
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
426 """
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
427 for index in range(self.chatStackWidget.count()):
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
428 widget = self.chatStackWidget.widget(index)
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
429 if widget.getHistoryId() == hid:
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
430 return widget
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
431
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
432 return None
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
433
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
434 @pyqtSlot()
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
435 def on_newChatButton_clicked(self):
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
436 """
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
437 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
438 """
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
439 model = self.modelComboBox.currentText()
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
440 if not model:
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
441 EricMessageBox.critical(
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
442 self,
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
443 self.tr("New Chat"),
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
444 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
445 )
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
446 return
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
447
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
448 title, ok = QInputDialog.getText(
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
449 self,
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
450 self.tr("New Chat"),
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
451 self.tr("Enter a title for the new chat:"),
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
452 QLineEdit.EchoMode.Normal,
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
453 )
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
454 if ok and title:
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
455 historyWidget = self.__createHistoryWidget(title, model)
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
456 hid = historyWidget.getId()
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
457 chatWidget = OllamaChatWidget(hid=hid, title=title, model=model)
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
458 index = self.chatStackWidget.addWidget(chatWidget)
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
459 self.chatStackWidget.setCurrentIndex(index)
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
460
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
461 self.__updateMessageEditState()
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
462 self.messageEdit.setFocus(Qt.FocusReason.OtherFocusReason)
4
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
463
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
464 @pyqtSlot(str)
5
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
465 def __newChatWithHistory(self, hid):
4
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
466 """
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
467 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
468
5
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
469 @param hid ID of the history to be used
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
470 @type str
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
471 """
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
472 chatWidget = self.__findChatWidget(hid)
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
473 if chatWidget is None:
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
474 historyWidget = self.__findHistoryWidget(hid)
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
475 if historyWidget is None:
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
476 # Oops, treat it as a new chat.
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
477 self.on_newChatButton_clicked()
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
478 return
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 chatWidget = OllamaChatWidget(
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
481 hid=hid, title=historyWidget.getTitle(), model=historyWidget.getModel()
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
482 )
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
483 index = self.chatStackWidget.addWidget(chatWidget)
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
484 self.chatStackWidget.setCurrentIndex(index)
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
485 for message in historyWidget.getMessages():
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
486 chatWidget.addMessage(role=message["role"], message=message["content"])
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
487 else:
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
488 # simply switch to the already existing chatWidget
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
489 self.chatStackWidget.setCurrentWidget(chatWidget)
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
490
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
491 self.__updateMessageEditState()
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
492 self.messageEdit.setFocus(Qt.FocusReason.OtherFocusReason)
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 def __removeChatWidget(self, hid):
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 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
497
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
498 @param hid chat history ID
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
499 @type str
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 widget = self.__findChatWidget(hid)
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
502 if widget is not None:
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
503 self.chatStackWidget.removeWidget(widget)
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
504
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
505 @pyqtSlot()
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
506 def __updateMessageEditState(self):
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 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
509 button.
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
510 """
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
511 chatActive = bool(self.chatStackWidget.count())
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
512 hasText = bool(self.messageEdit.text())
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
513
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
514 self.messageEdit.setEnabled(chatActive)
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
515 self.sendButton.setEnabled(chatActive and hasText)
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
516
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
517 @pyqtSlot(str)
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
518 def on_messageEdit_textChanged(self, msg):
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
519 """
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
520 Private slot to handle a change of the entered message.
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
521
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
522 @param msg text of the message line edit
4
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
523 @type str
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
524 """
5
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
525 self.sendButton.setEnabled(bool(msg))
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
526
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
527 @pyqtSlot()
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
528 def __sendMessage(self):
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
529 """
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
530 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
531 'ollama' server.
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
532
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
533 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
534 """
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
535 msg = self.messageEdit.text()
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
536 if not msg:
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
537 # empty message => ignore
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
538 return
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
539
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
540 if not bool(self.chatStackWidget.count()):
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
541 # no current stack => ignore
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
542 return
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
543
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
544 # 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
545 chatWidget = self.chatStackWidget.currentWidget()
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
546 hid = chatWidget.getHistoryId()
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
547
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
548 # 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
549 historyWidget = self.__findHistoryWidget(hid)
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
550 if historyWidget is not None:
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
551 # 3. append the message to the history
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
552 historyWidget.addToMessages("user", msg)
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
553
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
554 # 4. get the complete messages list from the history
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
555 messages = historyWidget.getMessages()
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
556
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
557 # 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
558 # for the response
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
559 chatWidget.addMessage("user", msg)
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
560 chatWidget.addMessage("assistant", "")
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
561
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
562 # 6. send the request via the client (non-streaming (?))
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
563 model = historyWidget.getModel()
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
564 self.__client.chat(
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
565 model=model,
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
566 messages=messages,
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
567 streaming=self.__plugin.getPreferences("StreamingChatResponse"),
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
568 )
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
569
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
570 # 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
571 self.messageEdit.clear()
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
572 self.messageEdit.setFocus(Qt.FocusReason.OtherFocusReason)
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
573
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
574 @pyqtSlot(str, str, bool)
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
575 def __handleServerMessage(self, content, role, done):
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
576 """
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
577 Private slot handling an 'ollama' server chat response.
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
578
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
579 @param content message sent by the server
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
580 @type str
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
581 @param role role name
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
582 @type str
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
583 @param done flag indicating the last chat response
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
584 @type bool
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
585 """
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
586 if not bool(self.chatStackWidget.count()):
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
587 # no current stack => ignore
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
588 return
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
589
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
590 chatWidget = self.chatStackWidget.currentWidget()
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
591 chatWidget.appendMessage(content)
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
592 if done:
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
593 hid = chatWidget.getHistoryId()
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
594 historyWidget = self.__findHistoryWidget(hid)
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
595 if historyWidget is not None:
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
596 historyWidget.addToMessages(role, chatWidget.getRecentMessage())
4
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
597
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
598 #######################################################################
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
599 ## Menu related methods below
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
600 #######################################################################
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
601
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
602 def __initOllamaMenu(self):
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
603 """
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
604 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
605 menu button.
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
606 """
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
607 # TODO: implement the menu and menu methods
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
608 # * Pull Model
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
609 ###################################################################
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
610 ## 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
611 ###################################################################
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
612
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
613 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
614 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
615 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
616 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
617 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
618 )
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
619 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
620 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
621 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
622
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
623 ###################################################################
8
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
624 ## Menu with Model related actions
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
625 ###################################################################
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
626
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
627 self.__modelMenu = QMenu(self.tr("Model Management"))
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
628 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
629 self.__modelMenu.addAction(
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
630 self.tr("List Running Models"), self.__showRunningModels
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
631 )
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
632 self.__modelMenu.addSeparator()
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
633 self.__modelMenu.addAction(
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
634 self.tr("Show Model Library"), self.__showModelLibrary
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
635 )
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
636 self.__modelMenu.addSeparator()
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
637 self.__modelMenu.addAction(self.tr("Download Model"), self.__pullModel)
9
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
638 self.__removeModelAct = self.__modelMenu.addAction(
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
639 self.tr("Remove Model"), self.__removeModel
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
640 )
8
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
641
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
642 ###################################################################
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
643 ## 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
644 ###################################################################
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
645
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
646 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
647 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
648 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
649 )
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
650 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
651 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
652 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
653 )
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
654 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
655 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
656 )
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
657
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
658 ###################################################################
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
659 ## 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
660 ###################################################################
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
661
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
662 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
663 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
664 self.__ollamaMenu.addSeparator()
8
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
665 self.__ollamaMenu.addMenu(self.__modelMenu)
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
666 self.__ollamaMenu.addSeparator()
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
667 self.__ollamaMenu.addMenu(self.__localServerMenu)
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
668 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
669 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
670
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
671 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
672
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
673 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
674
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
675 @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
676 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
677 """
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
678 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
679 """
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
680 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
681
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
682 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
683 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
684 )
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
685 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
686 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
687 )
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
688 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
689 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
690 )
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
691
9
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
692 self.__removeModelAct.setEnabled(bool(self.__availableModels))
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
693
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
694 @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
695 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
696 """
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
697 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
698 """
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
699 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
700
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
701 @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
702 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
703 """
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
704 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
705 """
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
706 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
707 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
708 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
709 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
710 "<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
711 " <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
712 ),
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 )
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 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
715 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
716
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 @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
718 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
719 """
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 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
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 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
723 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
724 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
725 "",
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
726 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
727 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
728 )
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
729 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
730 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
731
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
732 @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
733 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
734 """
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
735 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
736 """
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
737 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
738 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
739 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
740 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
741 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
742 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
743 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
744
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
745 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
746 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
747 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
748 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
749 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
750 showSelectAll=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
751 )
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
752 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
753 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
754
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
755 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
756 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
757 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
758 "",
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
759 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
760 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
761 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
762 )
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
763 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
764 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
765 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
766
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
767 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
768 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
769 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
770 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
771 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
772 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
773
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
774 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
775 """
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
776 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
777
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
778 @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
779 @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
780 """
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
781 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
782 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
783 "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
784 "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
785 )
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
786
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
787 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
788
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
789 @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
790 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
791 """
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
792 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
793 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
794 """
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
795 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
796
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
797 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
798 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
799 )
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
800 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
801 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
802 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
803 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
804 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
805
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 @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
807 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
808 """
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 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
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.__client.setMode(True)
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.on_reloadModelsButton_clicked()
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 @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
815 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
816 """
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
817 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
818 """
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
819 self.__client.setMode(False)
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
820 self.on_reloadModelsButton_clicked()
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
821
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
822 @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
823 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
824 """
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
825 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
826 """
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
827 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
828 self.__localServerDialog = None
8
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
829
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
830 @pyqtSlot()
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
831 def __startLocalServer(self):
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
832 """
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
833 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
834 """
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
835 env = self.prepareServerRuntimeEnvironment()
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
836 self.__localServerProcess = QProcess()
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
837 self.__localServerProcess.setProcessEnvironment(env)
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
838 self.__localServerProcess.finished.connect(self.__localServerProcessFinished)
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
839
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
840 command = "ollama"
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
841 args = ["serve"]
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
842
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
843 self.__localServerProcess.start(command, args)
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
844 ok = self.__localServerProcess.waitForStarted(10000)
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
845 if not ok:
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
846 EricMessageBox.critical(
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
847 None,
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
848 self.tr("Run Local 'ollama' Server"),
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
849 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
850 )
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
851 self.__localServerProcess = None
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
852 else:
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
853 self.__serverStarted()
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
854
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
855 @pyqtSlot()
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
856 def __stopLocalServer(self):
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
857 """
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
858 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
859 """
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
860 if self.__localServerProcess is not None:
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
861 self.__localServerProcess.terminate()
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
862
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
863 @pyqtSlot()
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
864 def __localServerProcessFinished(self):
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
865 """
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
866 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
867 """
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
868 if (
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
869 self.__localServerProcess is not None
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
870 and self.__localServerProcess.state() != QProcess.ProcessState.NotRunning
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
871 ):
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
872 self.__localServerProcess.terminate()
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
873 QTimer.singleShot(2000, self.__localServerProcess.kill)
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
874 self.__localServerProcess.waitForFinished(3000)
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
875
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
876 self.__localServerProcess = None
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
877
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
878 self.__serverStopped()
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
879
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
880 @pyqtSlot()
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
881 def __showModels(self):
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
882 """
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
883 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
884 some details.
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
885 """
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
886 from .OllamaDetailedModelsDialog import OllamaDetailedModelsDialog
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
887
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
888 models = self.__client.listDetails()
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
889 if models:
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
890 dlg = OllamaDetailedModelsDialog(models, self)
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
891 dlg.exec()
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
892 else:
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
893 EricMessageBox.information(
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
894 self,
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
895 self.tr("List Models"),
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
896 self.tr("There are no models available."),
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
897 )
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
898
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
899 @pyqtSlot()
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
900 def __showRunningModels(self):
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
901 """
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
902 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
903 """
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
904 from .OllamaRunningModelsDialog import OllamaRunningModelsDialog
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
905
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
906 models = self.__client.listRunning()
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
907 if models:
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
908 dlg = OllamaRunningModelsDialog(models, self)
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
909 dlg.exec()
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
910 else:
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
911 EricMessageBox.information(
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
912 self,
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
913 self.tr("List Running Models"),
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
914 self.tr("There are no models running."),
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
915 )
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
916
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
917 @pyqtSlot()
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
918 def __showModelLibrary(self):
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
919 """
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
920 Private slot to open the 'ollama' model librayr web site.
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
921 """
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
922 urlStr = self.__plugin.getPreferences("OllamaModelLibraryUrl")
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
923 url = QUrl.fromUserInput(urlStr)
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
924 QDesktopServices.openUrl(url)
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
925
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
926 @pyqtSlot()
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
927 def __pullModel(self):
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
928 """
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
929 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
930 """
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
931 # TODO: not implemented yet
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
932 pass
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
933
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
934 @pyqtSlot()
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
935 def __removeModel(self):
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
936 """
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
937 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
938 """
9
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
939 if self.__availableModels:
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
940 modelName, ok = QInputDialog.getItem(
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
941 self,
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
942 self.tr("Remove Model"),
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
943 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
944 [""] + sorted(self.__availableModels),
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
945 0,
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
946 False,
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
947 )
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
948 if ok and modelName:
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
949 deleted = self.__client.remove(modelName)
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
950 if deleted:
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
951 EricMessageBox.information(
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
952 self,
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
953 self.tr("Remove Model"),
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
954 self.tr(
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
955 "<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
956 ).format(modelName),
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
957 )
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
958 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
959 else:
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
960 EricMessageBox.warning(
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
961 self,
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
962 self.tr("Remove Model"),
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
963 self.tr(
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
964 "<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
965 " 'ollama' server.</p>"
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
966 ).format(modelName),
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
967 )

eric ide

mercurial