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

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

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Tue, 03 Sep 2024 17:06:05 +0200
changeset 24
f4d5108e90fe
parent 23
d807aa8c1bd8
child 25
4064a09cf717

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

OllamaInterface/ConfigurationPage/OllamaPage.py file | annotate | diff | comparison | revisions
OllamaInterface/ConfigurationPage/OllamaPage.ui file | annotate | diff | comparison | revisions
OllamaInterface/ConfigurationPage/Ui_OllamaPage.py file | annotate | diff | comparison | revisions
OllamaInterface/OllamaWidget.py file | annotate | diff | comparison | revisions
OllamaInterface/i18n/ollama_de.qm file | annotate | diff | comparison | revisions
OllamaInterface/i18n/ollama_de.ts file | annotate | diff | comparison | revisions
OllamaInterface/i18n/ollama_empty.ts file | annotate | diff | comparison | revisions
OllamaInterface/i18n/ollama_en.ts file | annotate | diff | comparison | revisions
OllamaInterface/i18n/ollama_es.ts file | annotate | diff | comparison | revisions
OllamaInterface/i18n/ollama_ru.ts file | annotate | diff | comparison | revisions
PluginAiOllama.py file | annotate | diff | comparison | revisions
--- a/OllamaInterface/ConfigurationPage/OllamaPage.py	Tue Sep 03 15:51:28 2024 +0200
+++ b/OllamaInterface/ConfigurationPage/OllamaPage.py	Tue Sep 03 17:06:05 2024 +0200
@@ -46,6 +46,8 @@
         self.modelLibraryUrlEdit.setText(
             self.__plugin.getPreferences("OllamaModelLibraryUrl")
         )
+        self.downloadUrlEdit.setText(self.__plugin.getPreferences("OllamaDownloadUrl"))
+        self.blogUrlEdit.setText(self.__plugin.getPreferences("OllamaBlogUrl"))
 
         self.heartbeatSpinBox.setValue(
             self.__plugin.getPreferences("OllamaHeartbeatInterval")
@@ -71,6 +73,8 @@
         self.__plugin.setPreferences(
             "OllamaModelLibraryUrl", self.modelLibraryUrlEdit.text()
         )
+        self.__plugin.setPreferences("OllamaDownloadUrl", self.downloadUrlEdit.text())
+        self.__plugin.setPreferences("OllamaBlogUrl", self.blogUrlEdit.text())
 
         self.__plugin.setPreferences(
             "OllamaHeartbeatInterval", self.heartbeatSpinBox.value()
--- a/OllamaInterface/ConfigurationPage/OllamaPage.ui	Tue Sep 03 15:51:28 2024 +0200
+++ b/OllamaInterface/ConfigurationPage/OllamaPage.ui	Tue Sep 03 17:06:05 2024 +0200
@@ -7,7 +7,7 @@
     <x>0</x>
     <y>0</y>
     <width>557</width>
-    <height>464</height>
+    <height>523</height>
    </rect>
   </property>
   <layout class="QVBoxLayout" name="verticalLayout">
@@ -178,20 +178,54 @@
    <item>
     <widget class="QGroupBox" name="groupBox_3">
      <property name="title">
-      <string>Model Library</string>
+      <string>URLs</string>
      </property>
-     <layout class="QHBoxLayout" name="horizontalLayout_3">
-      <item>
+     <layout class="QGridLayout" name="gridLayout_2">
+      <item row="0" column="0">
        <widget class="QLabel" name="label_5">
         <property name="text">
-         <string>URL:</string>
+         <string>Model Library:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="1">
+       <widget class="QLineEdit" name="modelLibraryUrlEdit">
+        <property name="toolTip">
+         <string>Enter the URL of the 'ollama' model library. Leave empty to use the default URL.</string>
+        </property>
+        <property name="clearButtonEnabled">
+         <bool>true</bool>
         </property>
        </widget>
       </item>
-      <item>
-       <widget class="QLineEdit" name="modelLibraryUrlEdit">
+      <item row="1" column="0">
+       <widget class="QLabel" name="label_7">
+        <property name="text">
+         <string>Download:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="1">
+       <widget class="QLineEdit" name="downloadUrlEdit">
         <property name="toolTip">
-         <string>Enter the URL of the 'ollama' model library.</string>
+         <string>Enter the URL of the 'ollama' download page. Leave empty to use the default URL.</string>
+        </property>
+        <property name="clearButtonEnabled">
+         <bool>true</bool>
+        </property>
+       </widget>
+      </item>
+      <item row="2" column="0">
+       <widget class="QLabel" name="label_8">
+        <property name="text">
+         <string>Blog:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="2" column="1">
+       <widget class="QLineEdit" name="blogUrlEdit">
+        <property name="toolTip">
+         <string>Enter the URL of the 'ollama' blog. Leave empty to use the default URL.</string>
         </property>
         <property name="clearButtonEnabled">
          <bool>true</bool>
@@ -272,6 +306,8 @@
   <tabstop>serverPortSpinBox</tabstop>
   <tabstop>localServerPortSpinBox</tabstop>
   <tabstop>modelLibraryUrlEdit</tabstop>
+  <tabstop>downloadUrlEdit</tabstop>
+  <tabstop>blogUrlEdit</tabstop>
   <tabstop>heartbeatSpinBox</tabstop>
   <tabstop>streamingChatCheckBox</tabstop>
  </tabstops>
--- a/OllamaInterface/ConfigurationPage/Ui_OllamaPage.py	Tue Sep 03 15:51:28 2024 +0200
+++ b/OllamaInterface/ConfigurationPage/Ui_OllamaPage.py	Tue Sep 03 17:06:05 2024 +0200
@@ -12,7 +12,7 @@
 class Ui_OllamaPage(object):
     def setupUi(self, OllamaPage):
         OllamaPage.setObjectName("OllamaPage")
-        OllamaPage.resize(557, 464)
+        OllamaPage.resize(557, 523)
         self.verticalLayout = QtWidgets.QVBoxLayout(OllamaPage)
         self.verticalLayout.setObjectName("verticalLayout")
         self.headerLabel = QtWidgets.QLabel(parent=OllamaPage)
@@ -77,15 +77,29 @@
         self.verticalLayout.addWidget(self.groupBox_2)
         self.groupBox_3 = QtWidgets.QGroupBox(parent=OllamaPage)
         self.groupBox_3.setObjectName("groupBox_3")
-        self.horizontalLayout_3 = QtWidgets.QHBoxLayout(self.groupBox_3)
-        self.horizontalLayout_3.setObjectName("horizontalLayout_3")
+        self.gridLayout_2 = QtWidgets.QGridLayout(self.groupBox_3)
+        self.gridLayout_2.setObjectName("gridLayout_2")
         self.label_5 = QtWidgets.QLabel(parent=self.groupBox_3)
         self.label_5.setObjectName("label_5")
-        self.horizontalLayout_3.addWidget(self.label_5)
+        self.gridLayout_2.addWidget(self.label_5, 0, 0, 1, 1)
         self.modelLibraryUrlEdit = QtWidgets.QLineEdit(parent=self.groupBox_3)
         self.modelLibraryUrlEdit.setClearButtonEnabled(True)
         self.modelLibraryUrlEdit.setObjectName("modelLibraryUrlEdit")
-        self.horizontalLayout_3.addWidget(self.modelLibraryUrlEdit)
+        self.gridLayout_2.addWidget(self.modelLibraryUrlEdit, 0, 1, 1, 1)
+        self.label_7 = QtWidgets.QLabel(parent=self.groupBox_3)
+        self.label_7.setObjectName("label_7")
+        self.gridLayout_2.addWidget(self.label_7, 1, 0, 1, 1)
+        self.downloadUrlEdit = QtWidgets.QLineEdit(parent=self.groupBox_3)
+        self.downloadUrlEdit.setClearButtonEnabled(True)
+        self.downloadUrlEdit.setObjectName("downloadUrlEdit")
+        self.gridLayout_2.addWidget(self.downloadUrlEdit, 1, 1, 1, 1)
+        self.label_8 = QtWidgets.QLabel(parent=self.groupBox_3)
+        self.label_8.setObjectName("label_8")
+        self.gridLayout_2.addWidget(self.label_8, 2, 0, 1, 1)
+        self.blogUrlEdit = QtWidgets.QLineEdit(parent=self.groupBox_3)
+        self.blogUrlEdit.setClearButtonEnabled(True)
+        self.blogUrlEdit.setObjectName("blogUrlEdit")
+        self.gridLayout_2.addWidget(self.blogUrlEdit, 2, 1, 1, 1)
         self.verticalLayout.addWidget(self.groupBox_3)
         self.horizontalLayout = QtWidgets.QHBoxLayout()
         self.horizontalLayout.setObjectName("horizontalLayout")
@@ -112,7 +126,9 @@
         OllamaPage.setTabOrder(self.serverHostEdit, self.serverPortSpinBox)
         OllamaPage.setTabOrder(self.serverPortSpinBox, self.localServerPortSpinBox)
         OllamaPage.setTabOrder(self.localServerPortSpinBox, self.modelLibraryUrlEdit)
-        OllamaPage.setTabOrder(self.modelLibraryUrlEdit, self.heartbeatSpinBox)
+        OllamaPage.setTabOrder(self.modelLibraryUrlEdit, self.downloadUrlEdit)
+        OllamaPage.setTabOrder(self.downloadUrlEdit, self.blogUrlEdit)
+        OllamaPage.setTabOrder(self.blogUrlEdit, self.heartbeatSpinBox)
         OllamaPage.setTabOrder(self.heartbeatSpinBox, self.streamingChatCheckBox)
 
     def retranslateUi(self, OllamaPage):
@@ -128,9 +144,13 @@
         self.groupBox_2.setTitle(_translate("OllamaPage", "Local Server"))
         self.label_4.setText(_translate("OllamaPage", "Port:"))
         self.localServerPortSpinBox.setToolTip(_translate("OllamaPage", "Enter the port of the local \'ollama\' server."))
-        self.groupBox_3.setTitle(_translate("OllamaPage", "Model Library"))
-        self.label_5.setText(_translate("OllamaPage", "URL:"))
-        self.modelLibraryUrlEdit.setToolTip(_translate("OllamaPage", "Enter the URL of the \'ollama\' model library."))
+        self.groupBox_3.setTitle(_translate("OllamaPage", "URLs"))
+        self.label_5.setText(_translate("OllamaPage", "Model Library:"))
+        self.modelLibraryUrlEdit.setToolTip(_translate("OllamaPage", "Enter the URL of the \'ollama\' model library. Leave empty to use the default URL."))
+        self.label_7.setText(_translate("OllamaPage", "Download:"))
+        self.downloadUrlEdit.setToolTip(_translate("OllamaPage", "Enter the URL of the \'ollama\' download page. Leave empty to use the default URL."))
+        self.label_8.setText(_translate("OllamaPage", "Blog:"))
+        self.blogUrlEdit.setToolTip(_translate("OllamaPage", "Enter the URL of the \'ollama\' blog. Leave empty to use the default URL."))
         self.label_6.setText(_translate("OllamaPage", "Heartbeat Timer:"))
         self.heartbeatSpinBox.setToolTip(_translate("OllamaPage", "Enter the heartbeat timeout value (0 = disable)."))
         self.heartbeatSpinBox.setSpecialValueText(_translate("OllamaPage", "Disabled"))
--- a/OllamaInterface/OllamaWidget.py	Tue Sep 03 15:51:28 2024 +0200
+++ b/OllamaInterface/OllamaWidget.py	Tue Sep 03 17:06:05 2024 +0200
@@ -693,7 +693,8 @@
         )
         self.__modelMenu.addSeparator()
         self.__modelMenu.addAction(
-            self.tr("Show Model Library"), self.__showModelLibrary
+            self.tr("Show Model Library"),
+            lambda: self.__showOllamaUrl("OllamaModelLibraryUrl"),
         )
         self.__modelMenu.addSeparator()
         self.__pullModelAct = self.__modelMenu.addAction(
@@ -720,6 +721,24 @@
         )
 
         ###################################################################
+        ## Menu with 'ollama' URL related actions
+        ###################################################################
+
+        self.__urlsMenu = QMenu(self.tr("ollama URLs"))
+        self.__urlsMenu.addAction(
+            self.tr("Model Library"),
+            lambda: self.__showOllamaUrl("OllamaModelLibraryUrl"),
+        )
+        self.__urlsMenu.addAction(
+            self.tr("Download"),
+            lambda: self.__showOllamaUrl("OllamaDownloadUrl"),
+        )
+        self.__urlsMenu.addAction(
+            self.tr("Blog"),
+            lambda: self.__showOllamaUrl("OllamaBlogUrl"),
+        )
+
+        ###################################################################
         ## Main menu
         ###################################################################
 
@@ -730,6 +749,8 @@
         self.__ollamaMenu.addSeparator()
         self.__ollamaMenu.addMenu(self.__localServerMenu)
         self.__ollamaMenu.addSeparator()
+        self.__ollamaMenu.addMenu(self.__urlsMenu)
+        self.__ollamaMenu.addSeparator()
         self.__ollamaMenu.addAction(self.tr("Configure..."), self.__ollamaConfigure)
 
         self.__ollamaMenu.aboutToShow.connect(self.__aboutToShowOllamaMenu)
@@ -978,15 +999,6 @@
             )
 
     @pyqtSlot()
-    def __showModelLibrary(self):
-        """
-        Private slot to open the 'ollama' model librayr web site.
-        """
-        urlStr = self.__plugin.getPreferences("OllamaModelLibraryUrl")
-        url = QUrl.fromUserInput(urlStr)
-        QDesktopServices.openUrl(url)
-
-    @pyqtSlot()
     def __pullModel(self):
         """
         Private slot to download a model from the 'ollama' model library.
@@ -1079,6 +1091,17 @@
                         ).format(modelName),
                     )
 
+    def __showOllamaUrl(self, urlKey):
+        """
+        Private method to open an 'ollama' URL given by its configuration key.
+
+        @param urlKey URL configuration key
+        @type str
+        """
+        urlStr = self.__plugin.getPreferences(urlKey)
+        url = QUrl.fromUserInput(urlStr)
+        QDesktopServices.openUrl(url)
+
     @pyqtSlot(str)
     def __handleClientError(self, errMsg):
         """
Binary file OllamaInterface/i18n/ollama_de.qm has changed
--- a/OllamaInterface/i18n/ollama_de.ts	Tue Sep 03 15:51:28 2024 +0200
+++ b/OllamaInterface/i18n/ollama_de.ts	Tue Sep 03 17:06:05 2024 +0200
@@ -43,7 +43,7 @@
       <translation>&lt;p&gt;Fehler: Der lokale Server auf &lt;b&gt;{0}&lt;/b&gt; antwortet nicht.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../OllamaClient.py" line="591" />
+      <location filename="../OllamaClient.py" line="589" />
       <source>&lt;p&gt;Error: The configured server at &lt;b&gt;{0}&lt;/b&gt; is not responding.&lt;/p&gt;</source>
       <translation>&lt;p&gt;Fehler: Der konfigurierte Server auf &lt;b&gt;{0}&lt;/b&gt; antwortet nicht.&lt;/p&gt;</translation>
     </message>
@@ -164,18 +164,38 @@
     </message>
     <message>
       <location filename="../ConfigurationPage/OllamaPage.ui" line="0" />
-      <source>Model Library</source>
-      <translation>Modellbibliothek</translation>
+      <source>URLs</source>
+      <translation>URLs</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/OllamaPage.ui" line="0" />
+      <source>Model Library:</source>
+      <translation>Modellbibliothek:</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/OllamaPage.ui" line="0" />
+      <source>Enter the URL of the 'ollama' model library. Leave empty to use the default URL.</source>
+      <translation>Gib die URL der 'ollama' Modellbibliothek ein. Leer lassen zur Verwendung der Standard-URL.</translation>
     </message>
     <message>
       <location filename="../ConfigurationPage/OllamaPage.ui" line="0" />
-      <source>URL:</source>
-      <translation>URL:</translation>
+      <source>Download:</source>
+      <translation>Download:</translation>
     </message>
     <message>
       <location filename="../ConfigurationPage/OllamaPage.ui" line="0" />
-      <source>Enter the URL of the 'ollama' model library.</source>
-      <translation>Gib die URL der 'ollama' Modellbibliothek ein.</translation>
+      <source>Enter the URL of the 'ollama' download page. Leave empty to use the default URL.</source>
+      <translation>Gib die URL der 'ollama' Downloadseite ein. Leer lassen zur Verwendung der Standard-URL.</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/OllamaPage.ui" line="0" />
+      <source>Blog:</source>
+      <translation>Blog:</translation>
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/OllamaPage.ui" line="0" />
+      <source>Enter the URL of the 'ollama' blog. Leave empty to use the default URL.</source>
+      <translation>Gib die URL des 'ollama' Blogs ein. Leer lassen zur Verwendung der Standard-URL.</translation>
     </message>
     <message>
       <location filename="../ConfigurationPage/OllamaPage.ui" line="0" />
@@ -340,13 +360,13 @@
       <translation>Modellverwaltung</translation>
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="958" />
+      <location filename="../OllamaWidget.py" line="979" />
       <location filename="../OllamaWidget.py" line="690" />
       <source>List Models</source>
       <translation>Modelle auflisten</translation>
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="976" />
+      <location filename="../OllamaWidget.py" line="997" />
       <location filename="../OllamaWidget.py" line="692" />
       <source>List Running Models</source>
       <translation>Laufende Modelle auflisten</translation>
@@ -357,123 +377,143 @@
       <translation>Modell Bibliothek anzeigen</translation>
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="1002" />
-      <location filename="../OllamaWidget.py" line="700" />
+      <location filename="../OllamaWidget.py" line="1014" />
+      <location filename="../OllamaWidget.py" line="701" />
       <source>Install Model</source>
       <translation>Modell installieren</translation>
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="1075" />
-      <location filename="../OllamaWidget.py" line="1066" />
-      <location filename="../OllamaWidget.py" line="1055" />
-      <location filename="../OllamaWidget.py" line="703" />
+      <location filename="../OllamaWidget.py" line="1087" />
+      <location filename="../OllamaWidget.py" line="1078" />
+      <location filename="../OllamaWidget.py" line="1067" />
+      <location filename="../OllamaWidget.py" line="704" />
       <source>Remove Model</source>
       <translation>Modell löschen</translation>
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="710" />
+      <location filename="../OllamaWidget.py" line="711" />
       <source>Local Server</source>
       <translation>Lokaler Server</translation>
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="712" />
+      <location filename="../OllamaWidget.py" line="713" />
       <source>Start with Monitoring</source>
       <translation>Mit Monitoring starten</translation>
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="716" />
+      <location filename="../OllamaWidget.py" line="717" />
       <source>Start</source>
       <translation>Starten</translation>
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="719" />
+      <location filename="../OllamaWidget.py" line="720" />
       <source>Stop</source>
       <translation>Stoppen</translation>
     </message>
     <message>
+      <location filename="../OllamaWidget.py" line="727" />
+      <source>ollama URLs</source>
+      <translation>ollama URLs</translation>
+    </message>
+    <message>
+      <location filename="../OllamaWidget.py" line="729" />
+      <source>Model Library</source>
+      <translation>Modellbibliothek</translation>
+    </message>
+    <message>
       <location filename="../OllamaWidget.py" line="733" />
+      <source>Download</source>
+      <translation>Download</translation>
+    </message>
+    <message>
+      <location filename="../OllamaWidget.py" line="737" />
+      <source>Blog</source>
+      <translation>Blog</translation>
+    </message>
+    <message>
+      <location filename="../OllamaWidget.py" line="754" />
       <source>Configure...</source>
       <translation>Einstellungen...</translation>
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="773" />
+      <location filename="../OllamaWidget.py" line="794" />
       <source>Clear All Chat Histories</source>
       <translation>Alle Chat Verläufe löschen</translation>
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="774" />
+      <location filename="../OllamaWidget.py" line="795" />
       <source>&lt;p&gt;Do you really want to delete all chat histories? This is &lt;b&gt;irreversible&lt;/b&gt;.&lt;/p&gt;</source>
       <translation>&lt;p&gt;Sollen wirklich alle Chat Verläufe gelöscht werden? Dies ist &lt;b&gt;unumkehrbar&lt;/b&gt;.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="789" />
+      <location filename="../OllamaWidget.py" line="810" />
       <source>Import Chat History</source>
       <translation>Chat Verlauf importieren</translation>
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="791" />
+      <location filename="../OllamaWidget.py" line="812" />
       <source>Chat History Files (*.json);;All Files (*)</source>
       <translation>Chat Verlauf Dateien (*.json);;Alle Dateien (*)</translation>
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="824" />
-      <location filename="../OllamaWidget.py" line="792" />
+      <location filename="../OllamaWidget.py" line="845" />
+      <location filename="../OllamaWidget.py" line="813" />
       <source>Chat History Files (*.json)</source>
       <translation>Chat Verlauf Dateien (*.json)</translation>
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="822" />
-      <location filename="../OllamaWidget.py" line="812" />
+      <location filename="../OllamaWidget.py" line="843" />
+      <location filename="../OllamaWidget.py" line="833" />
       <source>Export Chat History</source>
       <translation>Chat Verlauf exportieren</translation>
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="813" />
+      <location filename="../OllamaWidget.py" line="834" />
       <source>Select the chats to be exported:</source>
       <translation>Wähle die zu exportierenden Chats:</translation>
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="911" />
+      <location filename="../OllamaWidget.py" line="932" />
       <source>Run Local 'ollama' Server</source>
       <translation>Lokalen 'ollama' Server ausführen</translation>
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="912" />
+      <location filename="../OllamaWidget.py" line="933" />
       <source>The loacl 'ollama' server process could not be started.</source>
       <translation>Der lokale 'ollama' Serverprozess konnte nicht gestartet werden.</translation>
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="959" />
+      <location filename="../OllamaWidget.py" line="980" />
       <source>There are no models available.</source>
       <translation>Es sind keine Modelle verfügbar.</translation>
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="977" />
+      <location filename="../OllamaWidget.py" line="998" />
       <source>There are no models running.</source>
       <translation>Es werden keine Modelle ausgeführt.</translation>
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="1003" />
+      <location filename="../OllamaWidget.py" line="1015" />
       <source>Enter the name of the model to be installed:</source>
       <translation>Gib den Namen des zu installierenden Modells ein:</translation>
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="1056" />
+      <location filename="../OllamaWidget.py" line="1068" />
       <source>Select the model to be removed by the 'ollama' server:</source>
       <translation>Wähle das vom 'ollama' Server zu entfernende Modell aus:</translation>
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="1067" />
+      <location filename="../OllamaWidget.py" line="1079" />
       <source>&lt;p&gt;The model &lt;b&gt;{0}&lt;/b&gt; was deleted successfully.&lt;/p&gt;</source>
       <translation>&lt;p&gt;Das Modell &lt;b&gt;{0}&lt;/b&gt; wurde erfolgreich entfernt.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="1076" />
+      <location filename="../OllamaWidget.py" line="1088" />
       <source>&lt;p&gt;The model &lt;b&gt;{0}&lt;/b&gt; could not be removed from the 'ollama' server.&lt;/p&gt;</source>
       <translation>&lt;p&gt;Das Modell &lt;b&gt;{0}&lt;/b&gt; konnte nicht vom 'ollama' Server entfernt werden.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="1092" />
+      <location filename="../OllamaWidget.py" line="1115" />
       <source>Network Error</source>
       <translation>Netzwerkfehler</translation>
     </message>
@@ -511,25 +551,25 @@
   <context>
     <name>PluginOllamaInterface</name>
     <message>
-      <location filename="../../PluginAiOllama.py" line="181" />
-      <location filename="../../PluginAiOllama.py" line="180" />
-      <location filename="../../PluginAiOllama.py" line="176" />
-      <location filename="../../PluginAiOllama.py" line="82" />
+      <location filename="../../PluginAiOllama.py" line="184" />
+      <location filename="../../PluginAiOllama.py" line="183" />
+      <location filename="../../PluginAiOllama.py" line="179" />
+      <location filename="../../PluginAiOllama.py" line="83" />
       <source>ollama AI Interface</source>
       <translation>ollama KI Schnittstelle</translation>
     </message>
     <message>
-      <location filename="../../PluginAiOllama.py" line="182" />
+      <location filename="../../PluginAiOllama.py" line="185" />
       <source>Ctrl+Alt+Shift+O</source>
       <translation>Ctrl+Alt+Shift+O</translation>
     </message>
     <message>
-      <location filename="../../PluginAiOllama.py" line="188" />
+      <location filename="../../PluginAiOllama.py" line="191" />
       <source>Switch the input focus to the ollama AI window.</source>
       <translation>Schaltet den Eingabefokus auf das ollama KI Fenster um.</translation>
     </message>
     <message>
-      <location filename="../../PluginAiOllama.py" line="191" />
+      <location filename="../../PluginAiOllama.py" line="194" />
       <source>&lt;b&gt;Activate ollama AI Interface&lt;/b&gt;&lt;p&gt;This switches the input focus to the ollama AI window.&lt;/p&gt;</source>
       <translation>&lt;b&gt;Aktiviere ollama KI Schnittstelle&lt;/b&gt;&lt;p&gt;Dies schaltet den Eingabefokus auf das ollama KI Fenster um.&lt;/p&gt;</translation>
     </message>
--- a/OllamaInterface/i18n/ollama_empty.ts	Tue Sep 03 15:51:28 2024 +0200
+++ b/OllamaInterface/i18n/ollama_empty.ts	Tue Sep 03 17:06:05 2024 +0200
@@ -43,7 +43,7 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../OllamaClient.py" line="591" />
+      <location filename="../OllamaClient.py" line="589" />
       <source>&lt;p&gt;Error: The configured server at &lt;b&gt;{0}&lt;/b&gt; is not responding.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
@@ -164,17 +164,37 @@
     </message>
     <message>
       <location filename="../ConfigurationPage/OllamaPage.ui" line="0" />
-      <source>Model Library</source>
+      <source>URLs</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/OllamaPage.ui" line="0" />
+      <source>Model Library:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/OllamaPage.ui" line="0" />
+      <source>Enter the URL of the 'ollama' model library. Leave empty to use the default URL.</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../ConfigurationPage/OllamaPage.ui" line="0" />
-      <source>URL:</source>
+      <source>Download:</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../ConfigurationPage/OllamaPage.ui" line="0" />
-      <source>Enter the URL of the 'ollama' model library.</source>
+      <source>Enter the URL of the 'ollama' download page. Leave empty to use the default URL.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/OllamaPage.ui" line="0" />
+      <source>Blog:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/OllamaPage.ui" line="0" />
+      <source>Enter the URL of the 'ollama' blog. Leave empty to use the default URL.</source>
       <translation type="unfinished" />
     </message>
     <message>
@@ -340,13 +360,13 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="958" />
+      <location filename="../OllamaWidget.py" line="979" />
       <location filename="../OllamaWidget.py" line="690" />
       <source>List Models</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="976" />
+      <location filename="../OllamaWidget.py" line="997" />
       <location filename="../OllamaWidget.py" line="692" />
       <source>List Running Models</source>
       <translation type="unfinished" />
@@ -357,123 +377,143 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="1002" />
-      <location filename="../OllamaWidget.py" line="700" />
+      <location filename="../OllamaWidget.py" line="1014" />
+      <location filename="../OllamaWidget.py" line="701" />
       <source>Install Model</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="1075" />
-      <location filename="../OllamaWidget.py" line="1066" />
-      <location filename="../OllamaWidget.py" line="1055" />
-      <location filename="../OllamaWidget.py" line="703" />
+      <location filename="../OllamaWidget.py" line="1087" />
+      <location filename="../OllamaWidget.py" line="1078" />
+      <location filename="../OllamaWidget.py" line="1067" />
+      <location filename="../OllamaWidget.py" line="704" />
       <source>Remove Model</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="710" />
+      <location filename="../OllamaWidget.py" line="711" />
       <source>Local Server</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="712" />
+      <location filename="../OllamaWidget.py" line="713" />
       <source>Start with Monitoring</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="716" />
+      <location filename="../OllamaWidget.py" line="717" />
       <source>Start</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="719" />
+      <location filename="../OllamaWidget.py" line="720" />
       <source>Stop</source>
       <translation type="unfinished" />
     </message>
     <message>
+      <location filename="../OllamaWidget.py" line="727" />
+      <source>ollama URLs</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../OllamaWidget.py" line="729" />
+      <source>Model Library</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
       <location filename="../OllamaWidget.py" line="733" />
+      <source>Download</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../OllamaWidget.py" line="737" />
+      <source>Blog</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../OllamaWidget.py" line="754" />
       <source>Configure...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="773" />
+      <location filename="../OllamaWidget.py" line="794" />
       <source>Clear All Chat Histories</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="774" />
+      <location filename="../OllamaWidget.py" line="795" />
       <source>&lt;p&gt;Do you really want to delete all chat histories? This is &lt;b&gt;irreversible&lt;/b&gt;.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="789" />
+      <location filename="../OllamaWidget.py" line="810" />
       <source>Import Chat History</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="791" />
+      <location filename="../OllamaWidget.py" line="812" />
       <source>Chat History Files (*.json);;All Files (*)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="824" />
-      <location filename="../OllamaWidget.py" line="792" />
+      <location filename="../OllamaWidget.py" line="845" />
+      <location filename="../OllamaWidget.py" line="813" />
       <source>Chat History Files (*.json)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="822" />
-      <location filename="../OllamaWidget.py" line="812" />
+      <location filename="../OllamaWidget.py" line="843" />
+      <location filename="../OllamaWidget.py" line="833" />
       <source>Export Chat History</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="813" />
+      <location filename="../OllamaWidget.py" line="834" />
       <source>Select the chats to be exported:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="911" />
+      <location filename="../OllamaWidget.py" line="932" />
       <source>Run Local 'ollama' Server</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="912" />
+      <location filename="../OllamaWidget.py" line="933" />
       <source>The loacl 'ollama' server process could not be started.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="959" />
+      <location filename="../OllamaWidget.py" line="980" />
       <source>There are no models available.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="977" />
+      <location filename="../OllamaWidget.py" line="998" />
       <source>There are no models running.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="1003" />
+      <location filename="../OllamaWidget.py" line="1015" />
       <source>Enter the name of the model to be installed:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="1056" />
+      <location filename="../OllamaWidget.py" line="1068" />
       <source>Select the model to be removed by the 'ollama' server:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="1067" />
+      <location filename="../OllamaWidget.py" line="1079" />
       <source>&lt;p&gt;The model &lt;b&gt;{0}&lt;/b&gt; was deleted successfully.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="1076" />
+      <location filename="../OllamaWidget.py" line="1088" />
       <source>&lt;p&gt;The model &lt;b&gt;{0}&lt;/b&gt; could not be removed from the 'ollama' server.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="1092" />
+      <location filename="../OllamaWidget.py" line="1115" />
       <source>Network Error</source>
       <translation type="unfinished" />
     </message>
@@ -511,25 +551,25 @@
   <context>
     <name>PluginOllamaInterface</name>
     <message>
-      <location filename="../../PluginAiOllama.py" line="181" />
-      <location filename="../../PluginAiOllama.py" line="180" />
-      <location filename="../../PluginAiOllama.py" line="176" />
-      <location filename="../../PluginAiOllama.py" line="82" />
+      <location filename="../../PluginAiOllama.py" line="184" />
+      <location filename="../../PluginAiOllama.py" line="183" />
+      <location filename="../../PluginAiOllama.py" line="179" />
+      <location filename="../../PluginAiOllama.py" line="83" />
       <source>ollama AI Interface</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../../PluginAiOllama.py" line="182" />
+      <location filename="../../PluginAiOllama.py" line="185" />
       <source>Ctrl+Alt+Shift+O</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../../PluginAiOllama.py" line="188" />
+      <location filename="../../PluginAiOllama.py" line="191" />
       <source>Switch the input focus to the ollama AI window.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../../PluginAiOllama.py" line="191" />
+      <location filename="../../PluginAiOllama.py" line="194" />
       <source>&lt;b&gt;Activate ollama AI Interface&lt;/b&gt;&lt;p&gt;This switches the input focus to the ollama AI window.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
--- a/OllamaInterface/i18n/ollama_en.ts	Tue Sep 03 15:51:28 2024 +0200
+++ b/OllamaInterface/i18n/ollama_en.ts	Tue Sep 03 17:06:05 2024 +0200
@@ -43,7 +43,7 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../OllamaClient.py" line="591" />
+      <location filename="../OllamaClient.py" line="589" />
       <source>&lt;p&gt;Error: The configured server at &lt;b&gt;{0}&lt;/b&gt; is not responding.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
@@ -164,17 +164,37 @@
     </message>
     <message>
       <location filename="../ConfigurationPage/OllamaPage.ui" line="0" />
-      <source>Model Library</source>
+      <source>URLs</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/OllamaPage.ui" line="0" />
+      <source>Model Library:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/OllamaPage.ui" line="0" />
+      <source>Enter the URL of the 'ollama' model library. Leave empty to use the default URL.</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../ConfigurationPage/OllamaPage.ui" line="0" />
-      <source>URL:</source>
+      <source>Download:</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../ConfigurationPage/OllamaPage.ui" line="0" />
-      <source>Enter the URL of the 'ollama' model library.</source>
+      <source>Enter the URL of the 'ollama' download page. Leave empty to use the default URL.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/OllamaPage.ui" line="0" />
+      <source>Blog:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/OllamaPage.ui" line="0" />
+      <source>Enter the URL of the 'ollama' blog. Leave empty to use the default URL.</source>
       <translation type="unfinished" />
     </message>
     <message>
@@ -340,13 +360,13 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="958" />
+      <location filename="../OllamaWidget.py" line="979" />
       <location filename="../OllamaWidget.py" line="690" />
       <source>List Models</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="976" />
+      <location filename="../OllamaWidget.py" line="997" />
       <location filename="../OllamaWidget.py" line="692" />
       <source>List Running Models</source>
       <translation type="unfinished" />
@@ -357,123 +377,143 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="1002" />
-      <location filename="../OllamaWidget.py" line="700" />
+      <location filename="../OllamaWidget.py" line="1014" />
+      <location filename="../OllamaWidget.py" line="701" />
       <source>Install Model</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="1075" />
-      <location filename="../OllamaWidget.py" line="1066" />
-      <location filename="../OllamaWidget.py" line="1055" />
-      <location filename="../OllamaWidget.py" line="703" />
+      <location filename="../OllamaWidget.py" line="1087" />
+      <location filename="../OllamaWidget.py" line="1078" />
+      <location filename="../OllamaWidget.py" line="1067" />
+      <location filename="../OllamaWidget.py" line="704" />
       <source>Remove Model</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="710" />
+      <location filename="../OllamaWidget.py" line="711" />
       <source>Local Server</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="712" />
+      <location filename="../OllamaWidget.py" line="713" />
       <source>Start with Monitoring</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="716" />
+      <location filename="../OllamaWidget.py" line="717" />
       <source>Start</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="719" />
+      <location filename="../OllamaWidget.py" line="720" />
       <source>Stop</source>
       <translation type="unfinished" />
     </message>
     <message>
+      <location filename="../OllamaWidget.py" line="727" />
+      <source>ollama URLs</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../OllamaWidget.py" line="729" />
+      <source>Model Library</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
       <location filename="../OllamaWidget.py" line="733" />
+      <source>Download</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../OllamaWidget.py" line="737" />
+      <source>Blog</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../OllamaWidget.py" line="754" />
       <source>Configure...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="773" />
+      <location filename="../OllamaWidget.py" line="794" />
       <source>Clear All Chat Histories</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="774" />
+      <location filename="../OllamaWidget.py" line="795" />
       <source>&lt;p&gt;Do you really want to delete all chat histories? This is &lt;b&gt;irreversible&lt;/b&gt;.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="789" />
+      <location filename="../OllamaWidget.py" line="810" />
       <source>Import Chat History</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="791" />
+      <location filename="../OllamaWidget.py" line="812" />
       <source>Chat History Files (*.json);;All Files (*)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="824" />
-      <location filename="../OllamaWidget.py" line="792" />
+      <location filename="../OllamaWidget.py" line="845" />
+      <location filename="../OllamaWidget.py" line="813" />
       <source>Chat History Files (*.json)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="822" />
-      <location filename="../OllamaWidget.py" line="812" />
+      <location filename="../OllamaWidget.py" line="843" />
+      <location filename="../OllamaWidget.py" line="833" />
       <source>Export Chat History</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="813" />
+      <location filename="../OllamaWidget.py" line="834" />
       <source>Select the chats to be exported:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="911" />
+      <location filename="../OllamaWidget.py" line="932" />
       <source>Run Local 'ollama' Server</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="912" />
+      <location filename="../OllamaWidget.py" line="933" />
       <source>The loacl 'ollama' server process could not be started.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="959" />
+      <location filename="../OllamaWidget.py" line="980" />
       <source>There are no models available.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="977" />
+      <location filename="../OllamaWidget.py" line="998" />
       <source>There are no models running.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="1003" />
+      <location filename="../OllamaWidget.py" line="1015" />
       <source>Enter the name of the model to be installed:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="1056" />
+      <location filename="../OllamaWidget.py" line="1068" />
       <source>Select the model to be removed by the 'ollama' server:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="1067" />
+      <location filename="../OllamaWidget.py" line="1079" />
       <source>&lt;p&gt;The model &lt;b&gt;{0}&lt;/b&gt; was deleted successfully.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="1076" />
+      <location filename="../OllamaWidget.py" line="1088" />
       <source>&lt;p&gt;The model &lt;b&gt;{0}&lt;/b&gt; could not be removed from the 'ollama' server.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="1092" />
+      <location filename="../OllamaWidget.py" line="1115" />
       <source>Network Error</source>
       <translation type="unfinished" />
     </message>
@@ -511,25 +551,25 @@
   <context>
     <name>PluginOllamaInterface</name>
     <message>
-      <location filename="../../PluginAiOllama.py" line="181" />
-      <location filename="../../PluginAiOllama.py" line="180" />
-      <location filename="../../PluginAiOllama.py" line="176" />
-      <location filename="../../PluginAiOllama.py" line="82" />
+      <location filename="../../PluginAiOllama.py" line="184" />
+      <location filename="../../PluginAiOllama.py" line="183" />
+      <location filename="../../PluginAiOllama.py" line="179" />
+      <location filename="../../PluginAiOllama.py" line="83" />
       <source>ollama AI Interface</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../../PluginAiOllama.py" line="182" />
+      <location filename="../../PluginAiOllama.py" line="185" />
       <source>Ctrl+Alt+Shift+O</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../../PluginAiOllama.py" line="188" />
+      <location filename="../../PluginAiOllama.py" line="191" />
       <source>Switch the input focus to the ollama AI window.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../../PluginAiOllama.py" line="191" />
+      <location filename="../../PluginAiOllama.py" line="194" />
       <source>&lt;b&gt;Activate ollama AI Interface&lt;/b&gt;&lt;p&gt;This switches the input focus to the ollama AI window.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
--- a/OllamaInterface/i18n/ollama_es.ts	Tue Sep 03 15:51:28 2024 +0200
+++ b/OllamaInterface/i18n/ollama_es.ts	Tue Sep 03 17:06:05 2024 +0200
@@ -43,7 +43,7 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../OllamaClient.py" line="591" />
+      <location filename="../OllamaClient.py" line="589" />
       <source>&lt;p&gt;Error: The configured server at &lt;b&gt;{0}&lt;/b&gt; is not responding.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
@@ -164,17 +164,37 @@
     </message>
     <message>
       <location filename="../ConfigurationPage/OllamaPage.ui" line="0" />
-      <source>Model Library</source>
+      <source>URLs</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/OllamaPage.ui" line="0" />
+      <source>Model Library:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/OllamaPage.ui" line="0" />
+      <source>Enter the URL of the 'ollama' model library. Leave empty to use the default URL.</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../ConfigurationPage/OllamaPage.ui" line="0" />
-      <source>URL:</source>
+      <source>Download:</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../ConfigurationPage/OllamaPage.ui" line="0" />
-      <source>Enter the URL of the 'ollama' model library.</source>
+      <source>Enter the URL of the 'ollama' download page. Leave empty to use the default URL.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/OllamaPage.ui" line="0" />
+      <source>Blog:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/OllamaPage.ui" line="0" />
+      <source>Enter the URL of the 'ollama' blog. Leave empty to use the default URL.</source>
       <translation type="unfinished" />
     </message>
     <message>
@@ -340,13 +360,13 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="958" />
+      <location filename="../OllamaWidget.py" line="979" />
       <location filename="../OllamaWidget.py" line="690" />
       <source>List Models</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="976" />
+      <location filename="../OllamaWidget.py" line="997" />
       <location filename="../OllamaWidget.py" line="692" />
       <source>List Running Models</source>
       <translation type="unfinished" />
@@ -357,123 +377,143 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="1002" />
-      <location filename="../OllamaWidget.py" line="700" />
+      <location filename="../OllamaWidget.py" line="1014" />
+      <location filename="../OllamaWidget.py" line="701" />
       <source>Install Model</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="1075" />
-      <location filename="../OllamaWidget.py" line="1066" />
-      <location filename="../OllamaWidget.py" line="1055" />
-      <location filename="../OllamaWidget.py" line="703" />
+      <location filename="../OllamaWidget.py" line="1087" />
+      <location filename="../OllamaWidget.py" line="1078" />
+      <location filename="../OllamaWidget.py" line="1067" />
+      <location filename="../OllamaWidget.py" line="704" />
       <source>Remove Model</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="710" />
+      <location filename="../OllamaWidget.py" line="711" />
       <source>Local Server</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="712" />
+      <location filename="../OllamaWidget.py" line="713" />
       <source>Start with Monitoring</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="716" />
+      <location filename="../OllamaWidget.py" line="717" />
       <source>Start</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="719" />
+      <location filename="../OllamaWidget.py" line="720" />
       <source>Stop</source>
       <translation type="unfinished" />
     </message>
     <message>
+      <location filename="../OllamaWidget.py" line="727" />
+      <source>ollama URLs</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../OllamaWidget.py" line="729" />
+      <source>Model Library</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
       <location filename="../OllamaWidget.py" line="733" />
+      <source>Download</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../OllamaWidget.py" line="737" />
+      <source>Blog</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../OllamaWidget.py" line="754" />
       <source>Configure...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="773" />
+      <location filename="../OllamaWidget.py" line="794" />
       <source>Clear All Chat Histories</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="774" />
+      <location filename="../OllamaWidget.py" line="795" />
       <source>&lt;p&gt;Do you really want to delete all chat histories? This is &lt;b&gt;irreversible&lt;/b&gt;.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="789" />
+      <location filename="../OllamaWidget.py" line="810" />
       <source>Import Chat History</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="791" />
+      <location filename="../OllamaWidget.py" line="812" />
       <source>Chat History Files (*.json);;All Files (*)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="824" />
-      <location filename="../OllamaWidget.py" line="792" />
+      <location filename="../OllamaWidget.py" line="845" />
+      <location filename="../OllamaWidget.py" line="813" />
       <source>Chat History Files (*.json)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="822" />
-      <location filename="../OllamaWidget.py" line="812" />
+      <location filename="../OllamaWidget.py" line="843" />
+      <location filename="../OllamaWidget.py" line="833" />
       <source>Export Chat History</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="813" />
+      <location filename="../OllamaWidget.py" line="834" />
       <source>Select the chats to be exported:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="911" />
+      <location filename="../OllamaWidget.py" line="932" />
       <source>Run Local 'ollama' Server</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="912" />
+      <location filename="../OllamaWidget.py" line="933" />
       <source>The loacl 'ollama' server process could not be started.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="959" />
+      <location filename="../OllamaWidget.py" line="980" />
       <source>There are no models available.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="977" />
+      <location filename="../OllamaWidget.py" line="998" />
       <source>There are no models running.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="1003" />
+      <location filename="../OllamaWidget.py" line="1015" />
       <source>Enter the name of the model to be installed:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="1056" />
+      <location filename="../OllamaWidget.py" line="1068" />
       <source>Select the model to be removed by the 'ollama' server:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="1067" />
+      <location filename="../OllamaWidget.py" line="1079" />
       <source>&lt;p&gt;The model &lt;b&gt;{0}&lt;/b&gt; was deleted successfully.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="1076" />
+      <location filename="../OllamaWidget.py" line="1088" />
       <source>&lt;p&gt;The model &lt;b&gt;{0}&lt;/b&gt; could not be removed from the 'ollama' server.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="1092" />
+      <location filename="../OllamaWidget.py" line="1115" />
       <source>Network Error</source>
       <translation type="unfinished" />
     </message>
@@ -511,25 +551,25 @@
   <context>
     <name>PluginOllamaInterface</name>
     <message>
-      <location filename="../../PluginAiOllama.py" line="181" />
-      <location filename="../../PluginAiOllama.py" line="180" />
-      <location filename="../../PluginAiOllama.py" line="176" />
-      <location filename="../../PluginAiOllama.py" line="82" />
+      <location filename="../../PluginAiOllama.py" line="184" />
+      <location filename="../../PluginAiOllama.py" line="183" />
+      <location filename="../../PluginAiOllama.py" line="179" />
+      <location filename="../../PluginAiOllama.py" line="83" />
       <source>ollama AI Interface</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../../PluginAiOllama.py" line="182" />
+      <location filename="../../PluginAiOllama.py" line="185" />
       <source>Ctrl+Alt+Shift+O</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../../PluginAiOllama.py" line="188" />
+      <location filename="../../PluginAiOllama.py" line="191" />
       <source>Switch the input focus to the ollama AI window.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../../PluginAiOllama.py" line="191" />
+      <location filename="../../PluginAiOllama.py" line="194" />
       <source>&lt;b&gt;Activate ollama AI Interface&lt;/b&gt;&lt;p&gt;This switches the input focus to the ollama AI window.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
--- a/OllamaInterface/i18n/ollama_ru.ts	Tue Sep 03 15:51:28 2024 +0200
+++ b/OllamaInterface/i18n/ollama_ru.ts	Tue Sep 03 17:06:05 2024 +0200
@@ -164,18 +164,38 @@
     </message>
     <message>
       <location filename="../ConfigurationPage/OllamaPage.ui" line="0" />
-      <source>Model Library</source>
-      <translation>Библиотека моделей</translation>
+      <source>URLs</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/OllamaPage.ui" line="0" />
+      <source>Model Library:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/OllamaPage.ui" line="0" />
+      <source>Enter the URL of the 'ollama' model library. Leave empty to use the default URL.</source>
+      <translation type="unfinished" />
     </message>
     <message>
       <location filename="../ConfigurationPage/OllamaPage.ui" line="0" />
-      <source>URL:</source>
-      <translation>URL-адрес:</translation>
+      <source>Download:</source>
+      <translation type="unfinished" />
     </message>
     <message>
       <location filename="../ConfigurationPage/OllamaPage.ui" line="0" />
-      <source>Enter the URL of the 'ollama' model library.</source>
-      <translation>Введите URL-адрес библиотеки моделей 'ollama'.</translation>
+      <source>Enter the URL of the 'ollama' download page. Leave empty to use the default URL.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/OllamaPage.ui" line="0" />
+      <source>Blog:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../ConfigurationPage/OllamaPage.ui" line="0" />
+      <source>Enter the URL of the 'ollama' blog. Leave empty to use the default URL.</source>
+      <translation type="unfinished" />
     </message>
     <message>
       <location filename="../ConfigurationPage/OllamaPage.ui" line="0" />
@@ -202,6 +222,18 @@
       <source>Use streaming chat response</source>
       <translation>Использовать ответ потокового чата</translation>
     </message>
+    <message>
+      <source>Model Library</source>
+      <translation type="vanished">Библиотека моделей</translation>
+    </message>
+    <message>
+      <source>URL:</source>
+      <translation type="vanished">URL-адрес:</translation>
+    </message>
+    <message>
+      <source>Enter the URL of the 'ollama' model library.</source>
+      <translation type="vanished">Введите URL-адрес библиотеки моделей 'ollama'.</translation>
+    </message>
   </context>
   <context>
     <name>OllamaPullProgressDialog</name>
@@ -340,13 +372,13 @@
       <translation>Управление моделью</translation>
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="958" />
+      <location filename="../OllamaWidget.py" line="979" />
       <location filename="../OllamaWidget.py" line="690" />
       <source>List Models</source>
       <translation>Список моделей</translation>
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="976" />
+      <location filename="../OllamaWidget.py" line="997" />
       <location filename="../OllamaWidget.py" line="692" />
       <source>List Running Models</source>
       <translation>Список работающих моделей</translation>
@@ -357,123 +389,143 @@
       <translation>Показать библиотеку моделей</translation>
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="1002" />
-      <location filename="../OllamaWidget.py" line="700" />
+      <location filename="../OllamaWidget.py" line="1014" />
+      <location filename="../OllamaWidget.py" line="701" />
       <source>Install Model</source>
       <translation>Установить модель</translation>
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="1075" />
-      <location filename="../OllamaWidget.py" line="1066" />
-      <location filename="../OllamaWidget.py" line="1055" />
-      <location filename="../OllamaWidget.py" line="703" />
+      <location filename="../OllamaWidget.py" line="1087" />
+      <location filename="../OllamaWidget.py" line="1078" />
+      <location filename="../OllamaWidget.py" line="1067" />
+      <location filename="../OllamaWidget.py" line="704" />
       <source>Remove Model</source>
       <translation>Удалить модель</translation>
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="710" />
+      <location filename="../OllamaWidget.py" line="711" />
       <source>Local Server</source>
       <translation>Локальный сервер</translation>
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="712" />
+      <location filename="../OllamaWidget.py" line="713" />
       <source>Start with Monitoring</source>
       <translation>Старт с мониторингом</translation>
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="716" />
+      <location filename="../OllamaWidget.py" line="717" />
       <source>Start</source>
       <translation>Пуск</translation>
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="719" />
+      <location filename="../OllamaWidget.py" line="720" />
       <source>Stop</source>
       <translation>Стоп</translation>
     </message>
     <message>
+      <location filename="../OllamaWidget.py" line="727" />
+      <source>ollama URLs</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../OllamaWidget.py" line="729" />
+      <source>Model Library</source>
+      <translation type="unfinished">Библиотека моделей</translation>
+    </message>
+    <message>
       <location filename="../OllamaWidget.py" line="733" />
+      <source>Download</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../OllamaWidget.py" line="737" />
+      <source>Blog</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../OllamaWidget.py" line="754" />
       <source>Configure...</source>
       <translation>Конфигурировать...</translation>
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="773" />
+      <location filename="../OllamaWidget.py" line="794" />
       <source>Clear All Chat Histories</source>
       <translation>Очистить все истории чатов</translation>
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="774" />
+      <location filename="../OllamaWidget.py" line="795" />
       <source>&lt;p&gt;Do you really want to delete all chat histories? This is &lt;b&gt;irreversible&lt;/b&gt;.&lt;/p&gt;</source>
       <translation>&lt;p&gt;Вы действительно хотите удалить все истории чата? Это действие &lt;b&gt;необратимо&lt;/b&gt;.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="789" />
+      <location filename="../OllamaWidget.py" line="810" />
       <source>Import Chat History</source>
       <translation>Импорт истории чата</translation>
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="791" />
+      <location filename="../OllamaWidget.py" line="812" />
       <source>Chat History Files (*.json);;All Files (*)</source>
       <translation>Файлы истории чата (*.json);;Все файлы (*)</translation>
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="824" />
-      <location filename="../OllamaWidget.py" line="792" />
+      <location filename="../OllamaWidget.py" line="845" />
+      <location filename="../OllamaWidget.py" line="813" />
       <source>Chat History Files (*.json)</source>
       <translation>Файлы истории чата (*.json)</translation>
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="822" />
-      <location filename="../OllamaWidget.py" line="812" />
+      <location filename="../OllamaWidget.py" line="843" />
+      <location filename="../OllamaWidget.py" line="833" />
       <source>Export Chat History</source>
       <translation>Экспорт истории чата</translation>
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="813" />
+      <location filename="../OllamaWidget.py" line="834" />
       <source>Select the chats to be exported:</source>
       <translation>Выберите чаты для экспорта:</translation>
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="911" />
+      <location filename="../OllamaWidget.py" line="932" />
       <source>Run Local 'ollama' Server</source>
       <translation>Запустить локальный сервер 'ollama'</translation>
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="912" />
+      <location filename="../OllamaWidget.py" line="933" />
       <source>The loacl 'ollama' server process could not be started.</source>
       <translation>Не удалось запустить локальный процесс сервера 'ollama'.</translation>
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="959" />
+      <location filename="../OllamaWidget.py" line="980" />
       <source>There are no models available.</source>
       <translation>Нет доступных моделей.</translation>
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="977" />
+      <location filename="../OllamaWidget.py" line="998" />
       <source>There are no models running.</source>
       <translation>Нет запущенных моделей.</translation>
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="1003" />
+      <location filename="../OllamaWidget.py" line="1015" />
       <source>Enter the name of the model to be installed:</source>
       <translation>Введите имя модели, которую нужно установить:</translation>
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="1056" />
+      <location filename="../OllamaWidget.py" line="1068" />
       <source>Select the model to be removed by the 'ollama' server:</source>
       <translation>Выберите модель, которая будет удалена сервером 'ollama':</translation>
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="1067" />
+      <location filename="../OllamaWidget.py" line="1079" />
       <source>&lt;p&gt;The model &lt;b&gt;{0}&lt;/b&gt; was deleted successfully.&lt;/p&gt;</source>
       <translation>&lt;p&gt;Модель &lt;b&gt;{0}&lt;/b&gt; была успешно удалена.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="1076" />
+      <location filename="../OllamaWidget.py" line="1088" />
       <source>&lt;p&gt;The model &lt;b&gt;{0}&lt;/b&gt; could not be removed from the 'ollama' server.&lt;/p&gt;</source>
       <translation>&lt;p&gt;Модель &lt;b&gt;{0}&lt;/b&gt; не удалось удалить с сервера 'ollama'.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../OllamaWidget.py" line="1092" />
+      <location filename="../OllamaWidget.py" line="1115" />
       <source>Network Error</source>
       <translation>Ошибка сети</translation>
     </message>
@@ -511,25 +563,25 @@
   <context>
     <name>PluginOllamaInterface</name>
     <message>
-      <location filename="../../PluginAiOllama.py" line="181" />
-      <location filename="../../PluginAiOllama.py" line="180" />
-      <location filename="../../PluginAiOllama.py" line="176" />
-      <location filename="../../PluginAiOllama.py" line="82" />
+      <location filename="../../PluginAiOllama.py" line="184" />
+      <location filename="../../PluginAiOllama.py" line="183" />
+      <location filename="../../PluginAiOllama.py" line="179" />
+      <location filename="../../PluginAiOllama.py" line="83" />
       <source>ollama AI Interface</source>
       <translation>Интерфейс ollama AI</translation>
     </message>
     <message>
-      <location filename="../../PluginAiOllama.py" line="182" />
+      <location filename="../../PluginAiOllama.py" line="185" />
       <source>Ctrl+Alt+Shift+O</source>
       <translation>Ctrl+Alt+Shift+O</translation>
     </message>
     <message>
-      <location filename="../../PluginAiOllama.py" line="188" />
+      <location filename="../../PluginAiOllama.py" line="191" />
       <source>Switch the input focus to the ollama AI window.</source>
       <translation>Переключите фокус ввода на окно ollama AI.</translation>
     </message>
     <message>
-      <location filename="../../PluginAiOllama.py" line="191" />
+      <location filename="../../PluginAiOllama.py" line="194" />
       <source>&lt;b&gt;Activate ollama AI Interface&lt;/b&gt;&lt;p&gt;This switches the input focus to the ollama AI window.&lt;/p&gt;</source>
       <translation>&lt;b&gt;Активируйте интерфейс allama AI&lt;/b&gt;&lt;p&gt; Это переключит фокус ввода на окно ollama AI.&lt;/p&gt;</translation>
     </message>
--- a/PluginAiOllama.py	Tue Sep 03 15:51:28 2024 +0200
+++ b/PluginAiOllama.py	Tue Sep 03 17:06:05 2024 +0200
@@ -41,6 +41,7 @@
         "Plug-in implementing an 'ollama' client and interface widgets."
     ),
     "needsRestart": False,
+    "hasCompiledForms": True,
     "pyqtApi": 2,
 }
 # End-Of-Header
@@ -136,6 +137,8 @@
             "OllamaHeartbeatInterval": 5,  # 5 seconds heartbeat time; 0 = disabled
             "StreamingChatResponse": True,
             "OllamaModelLibraryUrl": "https://ollama.com/library",
+            "OllamaDownloadUrl": "https://ollama.com/download",
+            "OllamaBlogUrl": "https://ollama.com/blog",
         }
 
         self.__translator = None
@@ -287,7 +290,12 @@
                     self.PreferencesKey + "/" + key, self.__defaults[key]
                 )
             )
-        elif key in ("OllamaHost", "OllamaModelLibraryUrl"):
+        elif key in (
+            "OllamaHost",
+            "OllamaModelLibraryUrl",
+            "OllamaDownloadUrl",
+            "OllamaBlogUrl",
+        ):
             value = Preferences.Prefs.settings.value(
                 self.PreferencesKey + "/" + key, self.__defaults[key]
             )

eric ide

mercurial