OllamaInterface/OllamaClient.py

Thu, 29 Aug 2024 10:53:59 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Thu, 29 Aug 2024 10:53:59 +0200
changeset 13
3fd49d7004b2
parent 11
3641ea6b55d5
child 15
c55270946c9a
permissions
-rw-r--r--

Fixed some issues with the logic handling unresponsive servers.

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
13
3fd49d7004b2 Fixed some issues with the logic handling unresponsive servers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
56 @signal serverStateChanged(ok:bool, msg:str) emitted to indicate a change of the
3fd49d7004b2 Fixed some issues with the logic handling unresponsive servers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
57 server 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)
13
3fd49d7004b2 Fixed some issues with the logic handling unresponsive servers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
67 serverStateChanged = pyqtSignal(bool, str)
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
13
3fd49d7004b2 Fixed some issues with the logic handling unresponsive servers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
89 self.__serverResponding = None # start with an unknown state
4
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.__plugin.preferencesChanged.connect(self.__setHeartbeatTimer)
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
97 self.__setHeartbeatTimer()
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
98
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
99 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
100 """
eb1dec15b2f0 Implemented a menu, 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 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
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 @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
104 @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
105 """
eb1dec15b2f0 Implemented a menu, 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 self.__localServer = local
13
3fd49d7004b2 Fixed some issues with the logic handling unresponsive servers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
107 self.__serverResponding = None
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
108
5
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
109 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
110 """
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
111 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
112
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
113 @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
114 @type str
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
115 @param messages list of message objects
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
116 @type list of dict
5
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
117 @param streaming flag indicating to receive a streaming response
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
118 @type bool
3
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
119 """
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
120 ollamaRequest = {
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
121 "model": model,
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
122 "messages": messages,
5
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
123 "stream": streaming,
3
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
124 }
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
125 self.__sendRequest(
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
126 "chat", data=ollamaRequest, processResponse=self.__processChatResponse
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
127 )
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
128
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
129 def __processChatResponse(self, response):
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 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
132
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
133 @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
134 @type dict
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
135 """
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
136 with contextlib.suppress(KeyError):
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
137 message = response["message"]
5
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
138 done = response["done"]
3
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
139 if message:
5
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
140 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
141
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
142 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
143 """
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
144 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
145
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
146 @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
147 @type str
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
148 @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
149 @type str
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
150 @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
151 @type str (optional)
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
152 """
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
153 ollamaRequest = {
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
154 "model": model,
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
155 "prompt": prompt,
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
156 }
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
157 if suffix is not None:
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
158 ollamaRequest["suffix"] = suffix
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
159 self.__sendRequest(
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
160 "generate",
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
161 data=ollamaRequest,
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
162 processResponse=self.__processGenerateResponse,
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
163 )
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
164
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
165 def __processGenerateResponse(self, response):
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 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
168
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
169 @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
170 @type dict
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
171 """
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
172 with contextlib.suppress(KeyError):
5
6e8af43d537d Implemented the 'chat' functionality.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4
diff changeset
173 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
174
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
175 def pull(self, model):
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 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
178
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
179 @param model name of the model
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
180 @type str
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
181 """
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
182 ollamaRequest = {
11
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9
diff changeset
183 "model": model,
3
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
184 }
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
185 self.__sendRequest(
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
186 "pull", data=ollamaRequest, processResponse=self.__processPullResponse
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
187 )
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
188
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
189 def __processPullResponse(self, response):
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 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
192
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
193 @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
194 @type dict
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
195 """
11
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9
diff changeset
196 if "error" in response:
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9
diff changeset
197 self.pullError.emit(response["error"])
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9
diff changeset
198 else:
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9
diff changeset
199 with contextlib.suppress(KeyError):
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9
diff changeset
200 status = response["status"]
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9
diff changeset
201 idStr = response.get("digest", "")[:20]
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9
diff changeset
202 total = response.get("total", 0)
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9
diff changeset
203 completed = response.get("completed", 0)
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9
diff changeset
204 self.pullStatus.emit(status, idStr, total, completed)
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9
diff changeset
205
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9
diff changeset
206 def abortPull(self):
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 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
209 """
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9
diff changeset
210 if self.__pullReply is not None:
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9
diff changeset
211 self.__pullReply.close()
3
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
212
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
213 def remove(self, model):
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 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
216
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
217 @param model name of the model
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
218 @type str
9
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
219 @return flag indicating success
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
220 @rtype bool
3
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
221 """
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
222 ollamaRequest = {
9
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
223 "model": model,
3
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
224 }
9
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
225 _, 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
226 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
227
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
228 def list(self):
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 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
231 server.
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
232 """
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
233 self.__sendRequest("tags", processResponse=self.__processModelsList)
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 def __processModelsList(self, response):
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 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
238
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
239 @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
240 @type dict
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
241 """
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
242 models = []
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
243 with contextlib.suppress(KeyError):
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
244 for model in response["models"]:
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
245 name = model["name"]
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
246 if name:
9
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
247 models.append(name)
3
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
248 self.modelsList.emit(models)
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
249
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
250 def listDetails(self):
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 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
253 server with some model details.
9
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
254
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
255 @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
256 @rtype list[dict[str, Any]]
3
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
257 """
9
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
258 response, _ = self.__sendSyncRequest("tags")
3
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
259
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
260 models = []
8
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
261 if response is not None:
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
262 with contextlib.suppress(KeyError):
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
263 for model in response["models"]:
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
264 name = model["name"]
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
265 if name:
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
266 models.append(
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
267 {
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
268 "name": name,
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
269 "id": model["digest"][:20], # first 20 characters only
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
270 "size": model["size"],
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
271 "modified": datetime.datetime.fromisoformat(
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
272 model["modified_at"]
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
273 ),
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
274 }
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 return models
3
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
278
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
279 def listRunning(self):
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
280 """
4
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
281 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
282
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
283 @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
284 @rtype list[dict[str, Any]]
3
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
285 """
9
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
286 response, _ = self.__sendSyncRequest("ps")
3
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
287
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
288 models = []
8
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
289 if response is not None:
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
290 with contextlib.suppress(KeyError):
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
291 for model in response["models"]:
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
292 name = model["name"]
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
293 if name:
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
294 if model["size_vram"] == 0:
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
295 processor = self.tr("100% CPU")
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
296 elif model["size_vram"] == model["size"]:
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
297 processor = self.tr("100% GPU")
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
298 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
299 processor = self.tr("unknown")
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
300 else:
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
301 sizeCpu = model["size"] - model["size_vram"]
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
302 cpuPercent = round(sizeCpu / model["size_vram"] * 100)
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
303 processor = self.tr("{0}% / {1}% CPU / GPU").format(
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
304 cpuPercent, 100 - cpuPercent
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
305 )
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
306 models.append(
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 "name": name,
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
309 "id": model["digest"][:20], # first 20 characters only
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
310 "size": model["size"],
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
311 "size_vram": model["size_vram"],
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
312 "processor": processor,
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
313 "expires": datetime.datetime.fromisoformat(
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
314 model["expires_at"]
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
315 ),
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
316 }
3
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
317 )
8
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
318
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
319 return models
3
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
320
4
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
321 def version(self):
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
322 """
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
323 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
324 """
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
325 self.__sendRequest("version", processResponse=self.__processVersion)
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 def __processVersion(self, response):
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 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
330
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
331 @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
332 @type dict
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
333 """
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
334 with contextlib.suppress(KeyError):
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
335 self.serverVersion.emit(response["version"])
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
336
3
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
337 def state(self):
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
338 """
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
339 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
340
3
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
341 @return current client state
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
342 @rtype OllamaClientState
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
343 """
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
344 return self.__state
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
345
9
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
346 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
347 """
8
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
348 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
349 object.
3
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
350
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
351 @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
352 @type str
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
353 @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
354 (defaults to None)
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
355 @type dict (optional)
9
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
356 @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
357 @type bool (optional)
8
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
358 @return 'ollama' server reply
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
359 @rtype QNetworkReply
3
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
360 """
13
3fd49d7004b2 Fixed some issues with the logic handling unresponsive servers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
361 ollamaUrl = (
3fd49d7004b2 Fixed some issues with the logic handling unresponsive servers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
362 QUrl(
3fd49d7004b2 Fixed some issues with the logic handling unresponsive servers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
363 "http://127.0.0.1:{0}/api/{1}".format(
3fd49d7004b2 Fixed some issues with the logic handling unresponsive servers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
364 self.__plugin.getPreferences("OllamaLocalPort"),
3fd49d7004b2 Fixed some issues with the logic handling unresponsive servers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
365 endpoint,
3fd49d7004b2 Fixed some issues with the logic handling unresponsive servers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
366 )
3fd49d7004b2 Fixed some issues with the logic handling unresponsive servers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
367 )
3fd49d7004b2 Fixed some issues with the logic handling unresponsive servers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
368 if self.__localServer
3fd49d7004b2 Fixed some issues with the logic handling unresponsive servers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
369 else QUrl(
3fd49d7004b2 Fixed some issues with the logic handling unresponsive servers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
370 "{0}://{1}:{2}/api/{3}".format(
3fd49d7004b2 Fixed some issues with the logic handling unresponsive servers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
371 self.__plugin.getPreferences("OllamaScheme"),
3fd49d7004b2 Fixed some issues with the logic handling unresponsive servers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
372 self.__plugin.getPreferences("OllamaHost"),
3fd49d7004b2 Fixed some issues with the logic handling unresponsive servers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
373 self.__plugin.getPreferences("OllamaPort"),
3fd49d7004b2 Fixed some issues with the logic handling unresponsive servers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
374 endpoint,
3fd49d7004b2 Fixed some issues with the logic handling unresponsive servers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
375 )
3
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
376 )
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 request = QNetworkRequest(ollamaUrl)
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
379 if data is not None:
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
380 request.setHeader(
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
381 QNetworkRequest.KnownHeaders.ContentTypeHeader, "application/json"
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
382 )
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
383 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
384 if delete:
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
385 reply = self.__networkManager.sendCustomRequest(
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
386 request, b"DELETE", jsonData
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
387 )
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
388 else:
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
389 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
390 else:
4
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
391 reply = self.__networkManager.get(request)
8
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
392 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
393 return reply
3
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
394
8
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
395 def __sendRequest(self, endpoint, data=None, processResponse=None):
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
396 """
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
397 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
398 responses.
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
399
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
400 @param endpoint 'ollama' API endpoint to be contacted
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
401 @type str
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
402 @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
403 (defaults to None)
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
404 @type dict (optional)
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
405 @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
406 @type function (optional)
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
407 """
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
408 self.__state = OllamaClientState.Requesting
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
409
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
410 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
411 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
412 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
413 if endpoint == "pull":
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9
diff changeset
414 self.__pullReply = reply
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9
diff changeset
415 else:
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9
diff changeset
416 self.__replies.append(reply)
3
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
417
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
418 def __replyFinished(self, reply):
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
419 """
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
420 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
421
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
422 @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
423 @type QNetworkReply
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
424 """
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
425 self.__state = OllamaClientState.Finished
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
426
11
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9
diff changeset
427 if reply == self.__pullReply:
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9
diff changeset
428 self.__pullReply = None
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9
diff changeset
429 elif reply in self.__replies:
3
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
430 self.__replies.remove(reply)
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
431
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
432 reply.deleteLater()
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
433
11
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9
diff changeset
434 self.finished.emit()
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9
diff changeset
435
3
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
436 def __errorOccurred(self, errorCode, reply):
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
437 """
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
438 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
439
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
440 @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
441 @type QNetworkReply.NetworkError
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
442 @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
443 @type QNetworkReply
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
444 """
11
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9
diff changeset
445 if errorCode not in (
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9
diff changeset
446 QNetworkReply.NetworkError.NoError,
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9
diff changeset
447 QNetworkReply.NetworkError.OperationCanceledError,
3641ea6b55d5 Implemented the 'Install Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9
diff changeset
448 ):
3
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
449 self.errorOccurred.emit(
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
450 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
451 reply.errorString()
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
452 )
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 def __processData(self, reply, processResponse):
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
456 """
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
457 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
458 given processing function or method.
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
459
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
460 @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
461 @type QNetworkReply
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
462 @param processResponse processing function
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
463 @type function
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
464 """
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
465 self.__state = OllamaClientState.Receiving
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
466
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
467 buffer = bytes(reply.readAll())
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
468 if buffer:
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
469 with contextlib.suppress(json.JSONDecodeError):
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
470 data = json.loads(buffer)
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
471 if data and processResponse:
ca28466a186d Implemented the ollama client object (not tested yet).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
472 processResponse(data)
4
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
473
9
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
474 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
475 """
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
476 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
477 responses.
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
478
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
479 @param endpoint 'ollama' API endpoint to be contacted
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
480 @type str
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
481 @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
482 (defaults to None)
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
483 @type dict (optional)
9
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
484 @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
485 @type bool (optional)
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
486 @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
487 status code
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
488 @rtype tuple of (Any, int)
8
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
489 """
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
490 self.__state = OllamaClientState.Requesting
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
491
9
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
492 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
493 while not reply.isFinished():
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
494 QCoreApplication.processEvents()
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
495 QThread.msleep(100)
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
496
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
497 reply.deleteLater()
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
498
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
499 self.__state = OllamaClientState.Finished
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
500
9
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
501 statusCode = reply.attribute(QNetworkRequest.Attribute.HttpStatusCodeAttribute)
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
502
8
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
503 if reply.error() == QNetworkReply.NetworkError.NoError:
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
504 buffer = bytes(reply.readAll())
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
505 with contextlib.suppress(json.JSONDecodeError):
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
506 data = json.loads(buffer)
9
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
507 return data, statusCode
8
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
508
9
c471738b75b3 Implemented the 'Remove Model' menu action.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8
diff changeset
509 return None, statusCode
8
3118d16e526e Implemented some more menu actions.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7
diff changeset
510
13
3fd49d7004b2 Fixed some issues with the logic handling unresponsive servers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
511 def __getHeartbeatUrl(self):
3fd49d7004b2 Fixed some issues with the logic handling unresponsive servers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
512 """
3fd49d7004b2 Fixed some issues with the logic handling unresponsive servers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
513 Private method to get the current heartbeat URL.
3fd49d7004b2 Fixed some issues with the logic handling unresponsive servers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
514
3fd49d7004b2 Fixed some issues with the logic handling unresponsive servers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
515 @return URL to be contacted by the heartbeat check
3fd49d7004b2 Fixed some issues with the logic handling unresponsive servers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
516 @rtype str
3fd49d7004b2 Fixed some issues with the logic handling unresponsive servers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
517 """
3fd49d7004b2 Fixed some issues with the logic handling unresponsive servers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
518 return (
3fd49d7004b2 Fixed some issues with the logic handling unresponsive servers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
519 "http://127.0.0.1:{0}".format(
3fd49d7004b2 Fixed some issues with the logic handling unresponsive servers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
520 self.__plugin.getPreferences("OllamaLocalPort"),
3fd49d7004b2 Fixed some issues with the logic handling unresponsive servers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
521 )
3fd49d7004b2 Fixed some issues with the logic handling unresponsive servers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
522 if self.__localServer
3fd49d7004b2 Fixed some issues with the logic handling unresponsive servers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
523 else "{0}://{1}:{2}/".format(
3fd49d7004b2 Fixed some issues with the logic handling unresponsive servers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
524 self.__plugin.getPreferences("OllamaScheme"),
3fd49d7004b2 Fixed some issues with the logic handling unresponsive servers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
525 self.__plugin.getPreferences("OllamaHost"),
3fd49d7004b2 Fixed some issues with the logic handling unresponsive servers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
526 self.__plugin.getPreferences("OllamaPort"),
3fd49d7004b2 Fixed some issues with the logic handling unresponsive servers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
527 )
3fd49d7004b2 Fixed some issues with the logic handling unresponsive servers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
528 )
3fd49d7004b2 Fixed some issues with the logic handling unresponsive servers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
529
4
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
530 def heartbeat(self):
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 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
533
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
534 @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
535 @rtype bool
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
536 """
13
3fd49d7004b2 Fixed some issues with the logic handling unresponsive servers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
537 request = QNetworkRequest(QUrl(self.__getHeartbeatUrl()))
4
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
538 reply = self.__networkManager.head(request)
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
539 while not reply.isFinished():
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
540 QCoreApplication.processEvents()
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
541 QThread.msleep(100)
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
542
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
543 reply.deleteLater()
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
544
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
545 return reply.error() == QNetworkReply.NetworkError.NoError
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
546
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
547 @pyqtSlot()
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
548 def __setHeartbeatTimer(self):
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
549 """
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
550 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
551 """
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
552 interval = self.__plugin.getPreferences("OllamaHeartbeatInterval")
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
553 if interval:
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
554 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
555 self.__heartbeatTimer.start()
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
556 else:
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
557 self.__heartbeatTimer.stop()
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
558
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
559 @pyqtSlot()
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
560 def __periodicHeartbeat(self):
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
561 """
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
562 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
563 """
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
564 responding = self.heartbeat()
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
565 if responding != self.__serverResponding:
13
3fd49d7004b2 Fixed some issues with the logic handling unresponsive servers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
566 msg = (
3fd49d7004b2 Fixed some issues with the logic handling unresponsive servers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
567 ""
3fd49d7004b2 Fixed some issues with the logic handling unresponsive servers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
568 if responding
3fd49d7004b2 Fixed some issues with the logic handling unresponsive servers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
569 else (
3fd49d7004b2 Fixed some issues with the logic handling unresponsive servers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
570 self.tr(
3fd49d7004b2 Fixed some issues with the logic handling unresponsive servers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
571 "<p>Error: The local server at <b>{0}</b> is not responding."
3fd49d7004b2 Fixed some issues with the logic handling unresponsive servers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
572 "</p>"
3fd49d7004b2 Fixed some issues with the logic handling unresponsive servers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
573 )
3fd49d7004b2 Fixed some issues with the logic handling unresponsive servers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
574 if self.__localServer
3fd49d7004b2 Fixed some issues with the logic handling unresponsive servers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
575 else self.tr(
3fd49d7004b2 Fixed some issues with the logic handling unresponsive servers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
576 "<p>Error: The configured server at <b>{0}</b> is not"
3fd49d7004b2 Fixed some issues with the logic handling unresponsive servers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
577 " responding.</p>"
3fd49d7004b2 Fixed some issues with the logic handling unresponsive servers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
578 )
3fd49d7004b2 Fixed some issues with the logic handling unresponsive servers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
579 ).format(self.__getHeartbeatUrl())
3fd49d7004b2 Fixed some issues with the logic handling unresponsive servers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
580 )
3fd49d7004b2 Fixed some issues with the logic handling unresponsive servers.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 11
diff changeset
581 self.serverStateChanged.emit(responding, msg)
4
7dd1b9cd3150 Implemented most of the Chat History widgets.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3
diff changeset
582 self.__serverResponding = responding

eric ide

mercurial