OllamaInterface/OllamaClient.py

Tue, 27 Aug 2024 14:06:50 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Tue, 27 Aug 2024 14:06:50 +0200
changeset 11
3641ea6b55d5
parent 9
c471738b75b3
child 13
3fd49d7004b2
permissions
-rw-r--r--

Implemented the 'Install Model' menu action.

3
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
2
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
3 # Copyright (c) 2024 Detlev Offenbach <detlev@die-offenbachs.de>
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
4 #
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
5
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
6 """
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
7 Module implementing the 'ollama' client.
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
8 """
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
9
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
10 import contextlib
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
11 import datetime
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
12 import enum
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
13 import json
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
14
4
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
15 from PyQt6.QtCore import (
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
16 QCoreApplication,
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
17 QObject,
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
18 QThread,
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
19 QTimer,
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
20 QUrl,
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
21 pyqtSignal,
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
22 pyqtSlot,
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
23 )
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
24 from PyQt6.QtNetwork import QNetworkAccessManager, QNetworkReply, QNetworkRequest
3
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
25
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
26 from eric7.EricNetwork.EricNetworkProxyFactory import proxyAuthenticationRequired
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
27
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
28
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
29 class OllamaClientState(enum.Enum):
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
30 """
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
31 Class defining the various client states.
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
32 """
4
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
33
3
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
34 Waiting = 0
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
35 Requesting = 1
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
36 Receiving = 2
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
37 Finished = 3
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
38
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
39
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
40 class OllamaClient(QObject):
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
41 """
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
42 Class implementing the 'ollama' client.
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
43
5
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
44 @signal replyReceived(content:str, role:str, done:bool) emitted after a response
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
45 from the 'ollama' server was received
3
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
46 @signal modelsList(modelNames:list[str]) emitted after the list of model
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
47 names was obtained from the 'ollama' server
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
48 @signal pullStatus(msg:str, id:str, total:int, completed:int) emitted to indicate
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
49 the status of a pull request as reported by the 'ollama' server
11
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9
diff changeset
50 @signal pullError(msg:str) emitted to indicate an error during a pull operation
4
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
51 @signal serverVersion(version:str) emitted after the server version was obtained
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
52 from the 'ollama' server
3
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
53 @signal finished() emitted to indicate the completion of a request
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
54 @signal errorOccurred(error:str) emitted to indicate a network error occurred
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
55 while processing the request
4
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
56 @signal serverStateChanged(ok:bool) emitted to indicate a change of the server
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
57 responsiveness
3
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
58 """
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
59
5
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
60 replyReceived = pyqtSignal(str, str, bool)
3
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
61 modelsList = pyqtSignal(list)
11
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9
diff changeset
62 pullStatus = pyqtSignal(str, str, "unsigned long int", "unsigned long int")
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9
diff changeset
63 pullError = pyqtSignal(str)
4
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
64 serverVersion = pyqtSignal(str)
3
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
65 finished = pyqtSignal()
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
66 errorOccurred = pyqtSignal(str)
4
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
67 serverStateChanged = pyqtSignal(bool)
3
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
68
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
69 def __init__(self, plugin, parent=None):
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
70 """
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
71 Constructor
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
72
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
73 @param plugin reference to the plugin object
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
74 @type PluginOllamaInterface
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
75 @param parent reference to the parent object (defaults to None)
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
76 @type QObject (optional)
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
77 """
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
78 super().__init__(parent=parent)
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
79
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
80 self.__plugin = plugin
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
81 self.__replies = []
11
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9
diff changeset
82 self.__pullReply = None
3
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
83
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
84 self.__networkManager = QNetworkAccessManager(self)
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
85 self.__networkManager.proxyAuthenticationRequired.connect(
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
86 proxyAuthenticationRequired
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
87 )
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
88
4
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
89 self.__serverResponding = False
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
90 self.__heartbeatTimer = QTimer(self)
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
91 self.__heartbeatTimer.timeout.connect(self.__periodicHeartbeat)
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
92
3
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
93 self.__state = OllamaClientState.Waiting
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: 5
diff changeset
94 self.__localServer = False
3
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
95
4
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
96 self.__serverResponding = False # start with a faulty state
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
97
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
98 self.__plugin.preferencesChanged.connect(self.__setHeartbeatTimer)
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
99 self.__setHeartbeatTimer()
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
100
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: 5
diff changeset
101 def setMode(self, local):
eb1dec15b2f0 Implemented a menu, dialog and actions to start a local 'ollama' server with the capability to monitor its log output.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
102 """
eb1dec15b2f0 Implemented a menu, dialog and actions to start a local 'ollama' server with the capability to monitor its log output.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
103 Public method to set the client mode to local.
eb1dec15b2f0 Implemented a menu, dialog and actions to start a local 'ollama' server with the capability to monitor its log output.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
104
eb1dec15b2f0 Implemented a menu, dialog and actions to start a local 'ollama' server with the capability to monitor its log output.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
105 @param local flag indicating to connect to a locally started ollama 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: 5
diff changeset
106 @type bool
eb1dec15b2f0 Implemented a menu, dialog and actions to start a local 'ollama' server with the capability to monitor its log output.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
107 """
eb1dec15b2f0 Implemented a menu, dialog and actions to start a local 'ollama' server with the capability to monitor its log output.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
108 self.__localServer = local
eb1dec15b2f0 Implemented a menu, dialog and actions to start a local 'ollama' server with the capability to monitor its log output.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
109 self.__serverResponding = False
eb1dec15b2f0 Implemented a menu, dialog and actions to start a local 'ollama' server with the capability to monitor its log output.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
110
5
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
111 def chat(self, model, messages, streaming=True):
3
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
112 """
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
113 Public method to request a chat completion from the 'ollama' server.
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
114
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
115 @param model name of the model to be used
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
116 @type str
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
117 @param messages list of message objects
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
118 @type list of dict
5
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
119 @param streaming flag indicating to receive a streaming response
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
120 @type bool
3
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
121 """
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
122 ollamaRequest = {
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
123 "model": model,
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
124 "messages": messages,
5
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
125 "stream": streaming,
3
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
126 }
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
127 self.__sendRequest(
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
128 "chat", data=ollamaRequest, processResponse=self.__processChatResponse
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
129 )
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
130
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
131 def __processChatResponse(self, response):
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
132 """
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
133 Private method to process the chat response of the 'ollama' server.
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
134
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
135 @param response dictionary containing the chat response
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
136 @type dict
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
137 """
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
138 with contextlib.suppress(KeyError):
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
139 message = response["message"]
5
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
140 done = response["done"]
3
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
141 if message:
5
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
142 self.replyReceived.emit(message["content"], message["role"], done)
3
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
143
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
144 def generate(self, model, prompt, suffix=None):
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
145 """
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
146 Public method to request to generate a completion from the 'ollama' server.
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
147
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
148 @param model name of the model to be used
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
149 @type str
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
150 @param prompt prompt to generate a response for
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
151 @type str
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
152 @param suffix text after the model response (defaults to None)
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
153 @type str (optional)
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
154 """
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
155 ollamaRequest = {
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
156 "model": model,
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
157 "prompt": prompt,
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
158 }
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
159 if suffix is not None:
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
160 ollamaRequest["suffix"] = suffix
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
161 self.__sendRequest(
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
162 "generate",
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
163 data=ollamaRequest,
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
164 processResponse=self.__processGenerateResponse,
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
165 )
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
166
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
167 def __processGenerateResponse(self, response):
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
168 """
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
169 Private method to process the generate response of the 'ollama' server.
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
170
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
171 @param response dictionary containing the generate response
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
172 @type dict
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
173 """
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
174 with contextlib.suppress(KeyError):
5
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
175 self.replyReceived.emit(response["response"], "", response["done"])
3
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
176
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
177 def pull(self, model):
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
178 """
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
179 Public method to ask the 'ollama' server to pull the given model.
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
180
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
181 @param model name of the model
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
182 @type str
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
183 """
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
184 ollamaRequest = {
11
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9
diff changeset
185 "model": model,
3
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
186 }
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
187 self.__sendRequest(
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
188 "pull", data=ollamaRequest, processResponse=self.__processPullResponse
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
189 )
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
190
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
191 def __processPullResponse(self, response):
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
192 """
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
193 Private method to process a pull response of the 'ollama' server.
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
194
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
195 @param response dictionary containing the pull response
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
196 @type dict
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
197 """
11
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9
diff changeset
198 if "error" in response:
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9
diff changeset
199 self.pullError.emit(response["error"])
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9
diff changeset
200 else:
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9
diff changeset
201 with contextlib.suppress(KeyError):
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9
diff changeset
202 status = response["status"]
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9
diff changeset
203 idStr = response.get("digest", "")[:20]
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9
diff changeset
204 total = response.get("total", 0)
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9
diff changeset
205 completed = response.get("completed", 0)
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9
diff changeset
206 self.pullStatus.emit(status, idStr, total, completed)
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9
diff changeset
207
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9
diff changeset
208 def abortPull(self):
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9
diff changeset
209 """
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9
diff changeset
210 Public method to abort an ongoing pull operation.
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9
diff changeset
211 """
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9
diff changeset
212 if self.__pullReply is not None:
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9
diff changeset
213 self.__pullReply.close()
3
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
214
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
215 def remove(self, model):
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
216 """
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
217 Public method to ask the 'ollama' server to delete the given model.
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
218
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
219 @param model name of the model
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
220 @type str
9
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
221 @return flag indicating success
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
222 @rtype bool
3
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
223 """
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
224 ollamaRequest = {
9
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
225 "model": model,
3
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
226 }
9
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
227 _, status = self.__sendSyncRequest("delete", data=ollamaRequest, delete=True)
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
228 return status == 200 # HTTP status 200 OK
3
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
229
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
230 def list(self):
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
231 """
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
232 Public method to request a list of models available locally from the 'ollama'
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
233 server.
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
234 """
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
235 self.__sendRequest("tags", processResponse=self.__processModelsList)
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
236
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
237 def __processModelsList(self, response):
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
238 """
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
239 Private method to process the tags response of the 'ollama' server.
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
240
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
241 @param response dictionary containing the tags response
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
242 @type dict
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
243 """
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
244 models = []
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
245 with contextlib.suppress(KeyError):
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
246 for model in response["models"]:
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
247 name = model["name"]
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
248 if name:
9
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
249 models.append(name)
3
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
250 self.modelsList.emit(models)
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
251
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
252 def listDetails(self):
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
253 """
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
254 Public method to request a list of models available locally from the 'ollama'
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
255 server with some model details.
9
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
256
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
257 @return list of dictionaries containing the available models and related data
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
258 @rtype list[dict[str, Any]]
3
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
259 """
9
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
260 response, _ = self.__sendSyncRequest("tags")
3
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
261
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
262 models = []
8
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
263 if response is not None:
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
264 with contextlib.suppress(KeyError):
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
265 for model in response["models"]:
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
266 name = model["name"]
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
267 if name:
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
268 models.append(
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
269 {
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
270 "name": name,
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
271 "id": model["digest"][:20], # first 20 characters only
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
272 "size": model["size"],
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
273 "modified": datetime.datetime.fromisoformat(
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
274 model["modified_at"]
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
275 ),
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
276 }
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
277 )
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
278
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
279 return models
3
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
280
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
281 def listRunning(self):
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
282 """
4
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
283 Public method to request a list of running models from the 'ollama' server.
9
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
284
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
285 @return list of dictionaries containing the running models and related data
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
286 @rtype list[dict[str, Any]]
3
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
287 """
9
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
288 response, _ = self.__sendSyncRequest("ps")
3
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
289
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
290 models = []
8
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
291 if response is not None:
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
292 with contextlib.suppress(KeyError):
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
293 for model in response["models"]:
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
294 name = model["name"]
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
295 if name:
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
296 if model["size_vram"] == 0:
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
297 processor = self.tr("100% CPU")
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
298 elif model["size_vram"] == model["size"]:
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
299 processor = self.tr("100% GPU")
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
300 elif model["size_vram"] > model["size"] or model["size"] == 0:
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
301 processor = self.tr("unknown")
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
302 else:
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
303 sizeCpu = model["size"] - model["size_vram"]
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
304 cpuPercent = round(sizeCpu / model["size_vram"] * 100)
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
305 processor = self.tr("{0}% / {1}% CPU / GPU").format(
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
306 cpuPercent, 100 - cpuPercent
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
307 )
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
308 models.append(
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
309 {
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
310 "name": name,
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
311 "id": model["digest"][:20], # first 20 characters only
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
312 "size": model["size"],
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
313 "size_vram": model["size_vram"],
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
314 "processor": processor,
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
315 "expires": datetime.datetime.fromisoformat(
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
316 model["expires_at"]
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
317 ),
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
318 }
3
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
319 )
8
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
320
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
321 return models
3
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
322
4
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
323 def version(self):
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
324 """
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
325 Public method to request the version from the 'ollama' server.
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
326 """
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
327 self.__sendRequest("version", processResponse=self.__processVersion)
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
328
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
329 def __processVersion(self, response):
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
330 """
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
331 Private method to process the version response of the 'ollama' server.
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
332
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
333 @param response dictionary containing the version response
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
334 @type dict
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
335 """
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
336 with contextlib.suppress(KeyError):
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
337 self.serverVersion.emit(response["version"])
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
338
3
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
339 def state(self):
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
340 """
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
341 Public method to get the current client state.
4
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
342
3
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
343 @return current client state
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
344 @rtype OllamaClientState
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
345 """
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
346 return self.__state
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
347
9
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
348 def __getServerReply(self, endpoint, data=None, delete=False):
3
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
349 """
8
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
350 Private method to send a request to the 'ollama' server and return a reply
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
351 object.
3
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
352
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
353 @param endpoint 'ollama' API endpoint to be contacted
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
354 @type str
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
355 @param data dictionary containing the data to send to the server
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
356 (defaults to None)
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
357 @type dict (optional)
9
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
358 @param delete flag indicating to send a delete request (defaults to False)
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
359 @type bool (optional)
8
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
360 @return 'ollama' server reply
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
361 @rtype QNetworkReply
3
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
362 """
9
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
363 ollamaUrl = QUrl(
3
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
364 "{0}://{1}:{2}/api/{3}".format(
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
365 self.__plugin.getPreferences("OllamaScheme"),
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: 5
diff changeset
366 (
eb1dec15b2f0 Implemented a menu, dialog and actions to start a local 'ollama' server with the capability to monitor its log output.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
367 "127.0.0.1"
eb1dec15b2f0 Implemented a menu, dialog and actions to start a local 'ollama' server with the capability to monitor its log output.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
368 if self.__localServer
eb1dec15b2f0 Implemented a menu, dialog and actions to start a local 'ollama' server with the capability to monitor its log output.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
369 else self.__plugin.getPreferences("OllamaHost")
eb1dec15b2f0 Implemented a menu, dialog and actions to start a local 'ollama' server with the capability to monitor its log output.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
370 ),
eb1dec15b2f0 Implemented a menu, dialog and actions to start a local 'ollama' server with the capability to monitor its log output.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
371 (
eb1dec15b2f0 Implemented a menu, dialog and actions to start a local 'ollama' server with the capability to monitor its log output.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
372 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: 5
diff changeset
373 if self.__localServer
eb1dec15b2f0 Implemented a menu, dialog and actions to start a local 'ollama' server with the capability to monitor its log output.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
374 else self.__plugin.getPreferences("OllamaPort")
eb1dec15b2f0 Implemented a menu, dialog and actions to start a local 'ollama' server with the capability to monitor its log output.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5
diff changeset
375 ),
3
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
376 endpoint,
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
377 )
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
378 )
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
379 request = QNetworkRequest(ollamaUrl)
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
380 if data is not None:
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
381 request.setHeader(
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
382 QNetworkRequest.KnownHeaders.ContentTypeHeader, "application/json"
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
383 )
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
384 jsonData = json.dumps(data).encode("utf-8")
9
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
385 if delete:
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
386 reply = self.__networkManager.sendCustomRequest(
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
387 request, b"DELETE", jsonData
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
388 )
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
389 else:
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
390 reply = self.__networkManager.post(request, jsonData)
3
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
391 else:
4
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
392 reply = self.__networkManager.get(request)
8
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
393 reply.errorOccurred.connect(lambda error: self.__errorOccurred(error, reply))
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
394 return reply
3
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
395
8
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
396 def __sendRequest(self, endpoint, data=None, processResponse=None):
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
397 """
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
398 Private method to send a request to the 'ollama' server and handle its
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
399 responses.
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
400
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
401 @param endpoint 'ollama' API endpoint to be contacted
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
402 @type str
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
403 @param data dictionary containing the data to send to the server
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
404 (defaults to None)
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
405 @type dict (optional)
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
406 @param processResponse function handling the received data (defaults to None)
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
407 @type function (optional)
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
408 """
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
409 self.__state = OllamaClientState.Requesting
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
410
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
411 reply = self.__getServerReply(endpoint=endpoint, data=data)
3
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
412 reply.finished.connect(lambda: self.__replyFinished(reply))
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
413 reply.readyRead.connect(lambda: self.__processData(reply, processResponse))
11
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9
diff changeset
414 if endpoint == "pull":
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9
diff changeset
415 self.__pullReply = reply
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9
diff changeset
416 else:
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9
diff changeset
417 self.__replies.append(reply)
3
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
418
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
419 def __replyFinished(self, reply):
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
420 """
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
421 Private method to handle the finished signal of the reply.
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
422
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
423 @param reply reference to the finished network reply object
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
424 @type QNetworkReply
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
425 """
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
426 self.__state = OllamaClientState.Finished
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
427
11
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9
diff changeset
428 if reply == self.__pullReply:
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9
diff changeset
429 self.__pullReply = None
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9
diff changeset
430 elif reply in self.__replies:
3
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
431 self.__replies.remove(reply)
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
432
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
433 reply.deleteLater()
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
434
11
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9
diff changeset
435 self.finished.emit()
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9
diff changeset
436
3
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
437 def __errorOccurred(self, errorCode, reply):
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
438 """
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
439 Private method to handle a network error of the given reply.
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
440
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
441 @param errorCode error code reported by the reply
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
442 @type QNetworkReply.NetworkError
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
443 @param reply reference to the network reply object
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
444 @type QNetworkReply
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
445 """
11
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9
diff changeset
446 if errorCode not in (
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9
diff changeset
447 QNetworkReply.NetworkError.NoError,
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9
diff changeset
448 QNetworkReply.NetworkError.OperationCanceledError,
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9
diff changeset
449 ):
3
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
450 self.errorOccurred.emit(
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
451 self.tr("<p>A network error occurred.</p><p>Error: {0}</p>").format(
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
452 reply.errorString()
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
453 )
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
454 )
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
455
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
456 def __processData(self, reply, processResponse):
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
457 """
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
458 Private method to receive data from the 'ollama' server and process it with a
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
459 given processing function or method.
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
460
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
461 @param reply reference to the network reply object
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
462 @type QNetworkReply
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
463 @param processResponse processing function
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
464 @type function
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
465 """
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
466 self.__state = OllamaClientState.Receiving
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
467
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
468 buffer = bytes(reply.readAll())
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
469 if buffer:
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
470 with contextlib.suppress(json.JSONDecodeError):
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
471 data = json.loads(buffer)
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
472 if data and processResponse:
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
473 processResponse(data)
4
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
474
9
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
475 def __sendSyncRequest(self, endpoint, data=None, delete=False):
8
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
476 """
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
477 Private method to send a request to the 'ollama' server and handle its
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
478 responses.
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
479
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
480 @param endpoint 'ollama' API endpoint to be contacted
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
481 @type str
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
482 @param data dictionary containing the data to send to the server
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
483 (defaults to None)
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
484 @type dict (optional)
9
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
485 @param delete flag indicating to send a delete request (defaults to False)
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
486 @type bool (optional)
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
487 @return tuple containing the data sent by the 'ollama' server and the HTTP
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
488 status code
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
489 @rtype tuple of (Any, int)
8
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
490 """
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
491 self.__state = OllamaClientState.Requesting
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
492
9
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
493 reply = self.__getServerReply(endpoint=endpoint, data=data, delete=delete)
8
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
494 while not reply.isFinished():
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
495 QCoreApplication.processEvents()
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
496 QThread.msleep(100)
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
497
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
498 reply.deleteLater()
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
499
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
500 self.__state = OllamaClientState.Finished
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
501
9
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
502 statusCode = reply.attribute(QNetworkRequest.Attribute.HttpStatusCodeAttribute)
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
503
8
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
504 if reply.error() == QNetworkReply.NetworkError.NoError:
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
505 buffer = bytes(reply.readAll())
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
506 with contextlib.suppress(json.JSONDecodeError):
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
507 data = json.loads(buffer)
9
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
508 return data, statusCode
8
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
509
9
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
510 return None, statusCode
8
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
511
4
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
512 def heartbeat(self):
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
513 """
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
514 Public method to check, if the 'ollama' server has started and is responsive.
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
515
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
516 @return flag indicating a responsive 'ollama' server
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
517 @rtype bool
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
518 """
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
519 ollamaUrl = QUrl(
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
520 "{0}://{1}:{2}/".format(
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
521 self.__plugin.getPreferences("OllamaScheme"),
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
522 self.__plugin.getPreferences("OllamaHost"),
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
523 self.__plugin.getPreferences("OllamaPort"),
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
524 )
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
525 )
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
526 request = QNetworkRequest(ollamaUrl)
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
527 reply = self.__networkManager.head(request)
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
528 while not reply.isFinished():
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
529 QCoreApplication.processEvents()
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
530 QThread.msleep(100)
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
531
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
532 reply.deleteLater()
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
533
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
534 return reply.error() == QNetworkReply.NetworkError.NoError
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
535
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
536 @pyqtSlot()
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
537 def __setHeartbeatTimer(self):
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
538 """
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
539 Private slot to configure the heartbeat timer.
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
540 """
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
541 interval = self.__plugin.getPreferences("OllamaHeartbeatInterval")
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
542 if interval:
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
543 self.__heartbeatTimer.setInterval(interval * 1000) # interval in ms
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
544 self.__heartbeatTimer.start()
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
545 else:
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
546 self.__heartbeatTimer.stop()
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
547
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
548 @pyqtSlot()
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
549 def __periodicHeartbeat(self):
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
550 """
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
551 Private slot to do a periodic check of the 'ollama' server responsiveness.
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
552 """
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
553 responding = self.heartbeat()
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
554 if responding != self.__serverResponding:
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
555 self.serverStateChanged.emit(responding)
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
556 self.__serverResponding = responding

eric ide

mercurial