OllamaInterface/OllamaWidget.py

Sat, 26 Oct 2024 11:46:18 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sat, 26 Oct 2024 11:46:18 +0200
changeset 62
f5565a5417e2
parent 59
40a29731e0d0
child 65
0cf07db68753
permissions
-rw-r--r--

Modified some modal dialog use to ensure they have a valid parent.

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

eric ide

mercurial