OllamaInterface/OllamaWidget.py

Tue, 03 Sep 2024 17:06:05 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Tue, 03 Sep 2024 17:06:05 +0200
changeset 24
f4d5108e90fe
parent 21
22245a10b118
child 34
2b3ed778af64
permissions
-rw-r--r--

Added some menu entries to access various 'ollama' URLs.

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

eric ide

mercurial