diff --git a/gpt4all-chat/CHANGELOG.md b/gpt4all-chat/CHANGELOG.md index 2fada9064e76..5278d4d999fd 100644 --- a/gpt4all-chat/CHANGELOG.md +++ b/gpt4all-chat/CHANGELOG.md @@ -6,6 +6,9 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). ## [Unreleased] +### Added +- Create separate download pages for built-in and HuggingFace models ([#3269](https://github.com/nomic-ai/gpt4all/pull/3269)) + ### Fixed - Fix API server ignoring assistant messages in history after v3.5.0 ([#3256](https://github.com/nomic-ai/gpt4all/pull/3256)) - Fix API server replying with incorrect token counts and stop reason after v3.5.0 ([#3256](https://github.com/nomic-ai/gpt4all/pull/3256)) diff --git a/gpt4all-chat/CMakeLists.txt b/gpt4all-chat/CMakeLists.txt index afbd59a4f414..a9b060b3f33f 100644 --- a/gpt4all-chat/CMakeLists.txt +++ b/gpt4all-chat/CMakeLists.txt @@ -221,6 +221,8 @@ qt_add_qml_module(chat main.qml qml/AddCollectionView.qml qml/AddModelView.qml + qml/AddGPT4AllModelView.qml + qml/AddHFModelView.qml qml/ApplicationSettings.qml qml/ChatDrawer.qml qml/ChatItemView.qml @@ -244,6 +246,7 @@ qt_add_qml_module(chat qml/ToastManager.qml qml/MyBusyIndicator.qml qml/MyButton.qml + qml/MyTabButton.qml qml/MyCheckBox.qml qml/MyComboBox.qml qml/MyDialog.qml diff --git a/gpt4all-chat/main.qml b/gpt4all-chat/main.qml index b035e5d9bb29..2dc4410c6129 100644 --- a/gpt4all-chat/main.qml +++ b/gpt4all-chat/main.qml @@ -674,9 +674,6 @@ Window { function show() { stackLayout.currentIndex = 2; - // FIXME This expanded code should be removed and we should be changing the names of - // the classes here in ModelList for the proxy/filter models - ModelList.downloadableModels.expanded = true } function isShown() { diff --git a/gpt4all-chat/qml/AddGPT4AllModelView.qml b/gpt4all-chat/qml/AddGPT4AllModelView.qml new file mode 100644 index 000000000000..dd8da3ed90f5 --- /dev/null +++ b/gpt4all-chat/qml/AddGPT4AllModelView.qml @@ -0,0 +1,546 @@ +import QtCore +import QtQuick +import QtQuick.Controls +import QtQuick.Controls.Basic +import QtQuick.Layouts +import QtQuick.Dialogs +import Qt.labs.folderlistmodel +import Qt5Compat.GraphicalEffects + +import llm +import chatlistmodel +import download +import modellist +import network +import gpt4all +import mysettings +import localdocs + +ColumnLayout { + Layout.fillWidth: true + Layout.alignment: Qt.AlignTop + spacing: 5 + + Label { + Layout.topMargin: 0 + Layout.bottomMargin: 25 + Layout.rightMargin: 150 * theme.fontScale + Layout.alignment: Qt.AlignTop + Layout.fillWidth: true + verticalAlignment: Text.AlignTop + text: qsTr("These models have been specifically configured for use in GPT4All. The first few models on the " + + "list are known to work the best, but you should only attempt to use models that will fit in your " + + "available memory.") + font.pixelSize: theme.fontSizeLarger + color: theme.textColor + wrapMode: Text.WordWrap + } + + Label { + visible: !ModelList.gpt4AllDownloadableModels.count && !ModelList.asyncModelRequestOngoing + Layout.fillWidth: true + Layout.fillHeight: true + horizontalAlignment: Qt.AlignHCenter + verticalAlignment: Qt.AlignVCenter + text: qsTr("Network error: could not retrieve %1").arg("http://gpt4all.io/models/models3.json") + font.pixelSize: theme.fontSizeLarge + color: theme.mutedTextColor + } + + MyBusyIndicator { + visible: !ModelList.gpt4AllDownloadableModels.count && ModelList.asyncModelRequestOngoing + running: ModelList.asyncModelRequestOngoing + Accessible.role: Accessible.Animation + Layout.alignment: Qt.AlignCenter + Accessible.name: qsTr("Busy indicator") + Accessible.description: qsTr("Displayed when the models request is ongoing") + } + + ScrollView { + id: scrollView + ScrollBar.vertical.policy: ScrollBar.AsNeeded + Layout.fillWidth: true + Layout.fillHeight: true + clip: true + + ListView { + id: modelListView + model: ModelList.gpt4AllDownloadableModels + boundsBehavior: Flickable.StopAtBounds + spacing: 30 + + delegate: Rectangle { + id: delegateItem + width: modelListView.width + height: childrenRect.height + 60 + color: theme.conversationBackground + radius: 10 + border.width: 1 + border.color: theme.controlBorder + + ColumnLayout { + anchors.top: parent.top + anchors.left: parent.left + anchors.right: parent.right + anchors.margins: 30 + + Text { + Layout.fillWidth: true + Layout.alignment: Qt.AlignLeft + text: name + elide: Text.ElideRight + color: theme.titleTextColor + font.pixelSize: theme.fontSizeLargest + font.bold: true + Accessible.role: Accessible.Paragraph + Accessible.name: qsTr("Model file") + Accessible.description: qsTr("Model file to be downloaded") + } + + + Rectangle { + Layout.fillWidth: true + height: 1 + color: theme.dividerColor + } + + RowLayout { + Layout.topMargin: 10 + Layout.fillWidth: true + Text { + id: descriptionText + text: description + font.pixelSize: theme.fontSizeLarge + Layout.fillWidth: true + wrapMode: Text.WordWrap + textFormat: Text.StyledText + color: theme.textColor + linkColor: theme.textColor + Accessible.role: Accessible.Paragraph + Accessible.name: qsTr("Description") + Accessible.description: qsTr("File description") + onLinkActivated: function(link) { Qt.openUrlExternally(link); } + MouseArea { + anchors.fill: parent + acceptedButtons: Qt.NoButton // pass clicks to parent + cursorShape: parent.hoveredLink ? Qt.PointingHandCursor : Qt.ArrowCursor + } + } + + // FIXME Need to overhaul design here which must take into account + // features not present in current figma including: + // * Ability to cancel a current download + // * Ability to resume a download + // * The presentation of an error if encountered + // * Whether to show already installed models + // * Install of remote models with API keys + // * The presentation of the progress bar + Rectangle { + id: actionBox + width: childrenRect.width + 20 + color: "transparent" + border.width: 1 + border.color: theme.dividerColor + radius: 10 + Layout.rightMargin: 20 + Layout.bottomMargin: 20 + Layout.minimumHeight: childrenRect.height + 20 + Layout.alignment: Qt.AlignRight | Qt.AlignTop + + ColumnLayout { + spacing: 0 + MySettingsButton { + id: downloadButton + text: isDownloading ? qsTr("Cancel") : isIncomplete ? qsTr("Resume") : qsTr("Download") + font.pixelSize: theme.fontSizeLarge + Layout.topMargin: 20 + Layout.leftMargin: 20 + Layout.minimumWidth: 200 + Layout.fillWidth: true + Layout.alignment: Qt.AlignTop | Qt.AlignHCenter + visible: !isOnline && !installed && !calcHash && downloadError === "" + Accessible.description: qsTr("Stop/restart/start the download") + onClicked: { + if (!isDownloading) { + Download.downloadModel(filename); + } else { + Download.cancelDownload(filename); + } + } + } + + MySettingsDestructiveButton { + id: removeButton + text: qsTr("Remove") + Layout.topMargin: 20 + Layout.leftMargin: 20 + Layout.minimumWidth: 200 + Layout.fillWidth: true + Layout.alignment: Qt.AlignTop | Qt.AlignHCenter + visible: !isDownloading && (installed || isIncomplete) + Accessible.description: qsTr("Remove model from filesystem") + onClicked: { + Download.removeModel(filename); + } + } + + MySettingsButton { + id: installButton + visible: !installed && isOnline + Layout.topMargin: 20 + Layout.leftMargin: 20 + Layout.minimumWidth: 200 + Layout.fillWidth: true + Layout.alignment: Qt.AlignTop | Qt.AlignHCenter + text: qsTr("Install") + font.pixelSize: theme.fontSizeLarge + onClicked: { + var apiKeyText = apiKey.text.trim(), + baseUrlText = baseUrl.text.trim(), + modelNameText = modelName.text.trim(); + + var apiKeyOk = apiKeyText !== "", + baseUrlOk = !isCompatibleApi || baseUrlText !== "", + modelNameOk = !isCompatibleApi || modelNameText !== ""; + + if (!apiKeyOk) + apiKey.showError(); + if (!baseUrlOk) + baseUrl.showError(); + if (!modelNameOk) + modelName.showError(); + + if (!apiKeyOk || !baseUrlOk || !modelNameOk) + return; + + if (!isCompatibleApi) + Download.installModel( + filename, + apiKeyText, + ); + else + Download.installCompatibleModel( + modelNameText, + apiKeyText, + baseUrlText, + ); + } + Accessible.role: Accessible.Button + Accessible.name: qsTr("Install") + Accessible.description: qsTr("Install online model") + } + + ColumnLayout { + spacing: 0 + Label { + Layout.topMargin: 20 + Layout.leftMargin: 20 + visible: downloadError !== "" + textFormat: Text.StyledText + text: qsTr("Error") + color: theme.textColor + font.pixelSize: theme.fontSizeLarge + linkColor: theme.textErrorColor + Accessible.role: Accessible.Paragraph + Accessible.name: text + Accessible.description: qsTr("Describes an error that occurred when downloading") + onLinkActivated: { + downloadingErrorPopup.text = downloadError; + downloadingErrorPopup.open(); + } + } + + Label { + visible: LLM.systemTotalRAMInGB() < ramrequired + Layout.topMargin: 20 + Layout.leftMargin: 20 + Layout.maximumWidth: 300 + textFormat: Text.StyledText + text: qsTr("WARNING: Not recommended for your hardware. Model requires more memory (%1 GB) than your system has available (%2).").arg(ramrequired).arg(LLM.systemTotalRAMInGBString()) + color: theme.textErrorColor + font.pixelSize: theme.fontSizeLarge + wrapMode: Text.WordWrap + Accessible.role: Accessible.Paragraph + Accessible.name: text + Accessible.description: qsTr("Error for incompatible hardware") + onLinkActivated: { + downloadingErrorPopup.text = downloadError; + downloadingErrorPopup.open(); + } + } + } + + ColumnLayout { + visible: isDownloading && !calcHash + Layout.topMargin: 20 + Layout.leftMargin: 20 + Layout.minimumWidth: 200 + Layout.fillWidth: true + Layout.alignment: Qt.AlignTop | Qt.AlignHCenter + spacing: 20 + + ProgressBar { + id: itemProgressBar + Layout.fillWidth: true + width: 200 + value: bytesReceived / bytesTotal + background: Rectangle { + implicitHeight: 45 + color: theme.progressBackground + radius: 3 + } + contentItem: Item { + implicitHeight: 40 + + Rectangle { + width: itemProgressBar.visualPosition * parent.width + height: parent.height + radius: 2 + color: theme.progressForeground + } + } + Accessible.role: Accessible.ProgressBar + Accessible.name: qsTr("Download progressBar") + Accessible.description: qsTr("Shows the progress made in the download") + } + + Label { + id: speedLabel + color: theme.textColor + Layout.alignment: Qt.AlignRight + text: speed + font.pixelSize: theme.fontSizeLarge + Accessible.role: Accessible.Paragraph + Accessible.name: qsTr("Download speed") + Accessible.description: qsTr("Download speed in bytes/kilobytes/megabytes per second") + } + } + + RowLayout { + visible: calcHash + Layout.topMargin: 20 + Layout.leftMargin: 20 + Layout.minimumWidth: 200 + Layout.maximumWidth: 200 + Layout.fillWidth: true + Layout.alignment: Qt.AlignTop | Qt.AlignHCenter + clip: true + + Label { + id: calcHashLabel + color: theme.textColor + text: qsTr("Calculating...") + font.pixelSize: theme.fontSizeLarge + Accessible.role: Accessible.Paragraph + Accessible.name: text + Accessible.description: qsTr("Whether the file hash is being calculated") + } + + MyBusyIndicator { + id: busyCalcHash + running: calcHash + Accessible.role: Accessible.Animation + Accessible.name: qsTr("Busy indicator") + Accessible.description: qsTr("Displayed when the file hash is being calculated") + } + } + + MyTextField { + id: apiKey + visible: !installed && isOnline + Layout.topMargin: 20 + Layout.leftMargin: 20 + Layout.minimumWidth: 200 + Layout.alignment: Qt.AlignTop | Qt.AlignHCenter + wrapMode: Text.WrapAnywhere + function showError() { + messageToast.show(qsTr("ERROR: $API_KEY is empty.")); + apiKey.placeholderTextColor = theme.textErrorColor; + } + onTextChanged: { + apiKey.placeholderTextColor = theme.mutedTextColor; + } + placeholderText: qsTr("enter $API_KEY") + Accessible.role: Accessible.EditableText + Accessible.name: placeholderText + Accessible.description: qsTr("Whether the file hash is being calculated") + } + + MyTextField { + id: baseUrl + visible: !installed && isOnline && isCompatibleApi + Layout.topMargin: 20 + Layout.leftMargin: 20 + Layout.minimumWidth: 200 + Layout.alignment: Qt.AlignTop | Qt.AlignHCenter + wrapMode: Text.WrapAnywhere + function showError() { + messageToast.show(qsTr("ERROR: $BASE_URL is empty.")); + baseUrl.placeholderTextColor = theme.textErrorColor; + } + onTextChanged: { + baseUrl.placeholderTextColor = theme.mutedTextColor; + } + placeholderText: qsTr("enter $BASE_URL") + Accessible.role: Accessible.EditableText + Accessible.name: placeholderText + Accessible.description: qsTr("Whether the file hash is being calculated") + } + + MyTextField { + id: modelName + visible: !installed && isOnline && isCompatibleApi + Layout.topMargin: 20 + Layout.leftMargin: 20 + Layout.minimumWidth: 200 + Layout.alignment: Qt.AlignTop | Qt.AlignHCenter + wrapMode: Text.WrapAnywhere + function showError() { + messageToast.show(qsTr("ERROR: $MODEL_NAME is empty.")) + modelName.placeholderTextColor = theme.textErrorColor; + } + onTextChanged: { + modelName.placeholderTextColor = theme.mutedTextColor; + } + placeholderText: qsTr("enter $MODEL_NAME") + Accessible.role: Accessible.EditableText + Accessible.name: placeholderText + Accessible.description: qsTr("Whether the file hash is being calculated") + } + } + } + } + + Item { + Layout.minimumWidth: childrenRect.width + Layout.minimumHeight: childrenRect.height + Layout.bottomMargin: 10 + RowLayout { + id: paramRow + anchors.centerIn: parent + ColumnLayout { + Layout.topMargin: 10 + Layout.bottomMargin: 10 + Layout.leftMargin: 20 + Layout.rightMargin: 20 + Text { + text: qsTr("File size") + font.pixelSize: theme.fontSizeSmall + color: theme.mutedDarkTextColor + } + Text { + text: filesize + color: theme.textColor + font.pixelSize: theme.fontSizeSmall + font.bold: true + } + } + Rectangle { + width: 1 + Layout.fillHeight: true + color: theme.dividerColor + } + ColumnLayout { + Layout.topMargin: 10 + Layout.bottomMargin: 10 + Layout.leftMargin: 20 + Layout.rightMargin: 20 + Text { + text: qsTr("RAM required") + font.pixelSize: theme.fontSizeSmall + color: theme.mutedDarkTextColor + } + Text { + text: ramrequired >= 0 ? qsTr("%1 GB").arg(ramrequired) : qsTr("?") + color: theme.textColor + font.pixelSize: theme.fontSizeSmall + font.bold: true + } + } + Rectangle { + width: 1 + Layout.fillHeight: true + color: theme.dividerColor + } + ColumnLayout { + Layout.topMargin: 10 + Layout.bottomMargin: 10 + Layout.leftMargin: 20 + Layout.rightMargin: 20 + Text { + text: qsTr("Parameters") + font.pixelSize: theme.fontSizeSmall + color: theme.mutedDarkTextColor + } + Text { + text: parameters !== "" ? parameters : qsTr("?") + color: theme.textColor + font.pixelSize: theme.fontSizeSmall + font.bold: true + } + } + Rectangle { + width: 1 + Layout.fillHeight: true + color: theme.dividerColor + } + ColumnLayout { + Layout.topMargin: 10 + Layout.bottomMargin: 10 + Layout.leftMargin: 20 + Layout.rightMargin: 20 + Text { + text: qsTr("Quant") + font.pixelSize: theme.fontSizeSmall + color: theme.mutedDarkTextColor + } + Text { + text: quant + color: theme.textColor + font.pixelSize: theme.fontSizeSmall + font.bold: true + } + } + Rectangle { + width: 1 + Layout.fillHeight: true + color: theme.dividerColor + } + ColumnLayout { + Layout.topMargin: 10 + Layout.bottomMargin: 10 + Layout.leftMargin: 20 + Layout.rightMargin: 20 + Text { + text: qsTr("Type") + font.pixelSize: theme.fontSizeSmall + color: theme.mutedDarkTextColor + } + Text { + text: type + color: theme.textColor + font.pixelSize: theme.fontSizeSmall + font.bold: true + } + } + } + + Rectangle { + color: "transparent" + anchors.fill: paramRow + border.color: theme.dividerColor + border.width: 1 + radius: 10 + } + } + + Rectangle { + Layout.fillWidth: true + height: 1 + color: theme.dividerColor + } + } + } + } + } +} diff --git a/gpt4all-chat/qml/AddHFModelView.qml b/gpt4all-chat/qml/AddHFModelView.qml new file mode 100644 index 000000000000..0435e2b5f8c8 --- /dev/null +++ b/gpt4all-chat/qml/AddHFModelView.qml @@ -0,0 +1,703 @@ +import QtCore +import QtQuick +import QtQuick.Controls +import QtQuick.Controls.Basic +import QtQuick.Layouts +import QtQuick.Dialogs +import Qt.labs.folderlistmodel +import Qt5Compat.GraphicalEffects + +import llm +import chatlistmodel +import download +import modellist +import network +import gpt4all +import mysettings +import localdocs + +ColumnLayout { + Layout.fillWidth: true + Layout.fillHeight: true + Layout.alignment: Qt.AlignTop + spacing: 5 + + Label { + Layout.topMargin: 0 + Layout.bottomMargin: 25 + Layout.rightMargin: 150 * theme.fontScale + Layout.alignment: Qt.AlignTop + Layout.fillWidth: true + verticalAlignment: Text.AlignTop + text: qsTr("Use the search to find and download models from HuggingFace. There is NO GUARANTEE that these " + + "will work. Many will require additional configuration before they can be used.") + font.pixelSize: theme.fontSizeLarger + color: theme.textColor + wrapMode: Text.WordWrap + } + + RowLayout { + Layout.fillWidth: true + Layout.fillHeight: true + Layout.alignment: Qt.AlignCenter + Layout.margins: 0 + spacing: 10 + MyTextField { + id: discoverField + property string textBeingSearched: "" + readOnly: ModelList.discoverInProgress + Layout.alignment: Qt.AlignCenter + Layout.fillWidth: true + font.pixelSize: theme.fontSizeLarger + placeholderText: qsTr("Discover and download models by keyword search...") + Accessible.role: Accessible.EditableText + Accessible.name: placeholderText + Accessible.description: qsTr("Text field for discovering and filtering downloadable models") + Connections { + target: ModelList + function onDiscoverInProgressChanged() { + if (ModelList.discoverInProgress) { + discoverField.textBeingSearched = discoverField.text; + discoverField.text = qsTr("Searching \u00B7 %1").arg(discoverField.textBeingSearched); + } else { + discoverField.text = discoverField.textBeingSearched; + discoverField.textBeingSearched = ""; + } + } + } + background: ProgressBar { + id: discoverProgressBar + indeterminate: ModelList.discoverInProgress && ModelList.discoverProgress === 0.0 + value: ModelList.discoverProgress + background: Rectangle { + color: theme.controlBackground + border.color: theme.controlBorder + radius: 10 + } + contentItem: Item { + Rectangle { + visible: ModelList.discoverInProgress + anchors.bottom: parent.bottom + width: discoverProgressBar.visualPosition * parent.width + height: 10 + radius: 2 + color: theme.progressForeground + } + } + } + + Keys.onReturnPressed: (event)=> { + if (event.modifiers & Qt.ControlModifier || event.modifiers & Qt.ShiftModifier) + event.accepted = false; + else { + editingFinished(); + sendDiscovery() + } + } + function sendDiscovery() { + ModelList.huggingFaceDownloadableModels.discoverAndFilter(discoverField.text); + } + RowLayout { + spacing: 0 + anchors.right: discoverField.right + anchors.verticalCenter: discoverField.verticalCenter + anchors.rightMargin: 15 + visible: !ModelList.discoverInProgress + MyMiniButton { + id: clearDiscoverButton + backgroundColor: theme.textColor + backgroundColorHovered: theme.iconBackgroundDark + visible: discoverField.text !== "" + source: "qrc:/gpt4all/icons/close.svg" + onClicked: { + discoverField.text = "" + discoverField.sendDiscovery() // should clear results + } + } + MyMiniButton { + backgroundColor: theme.textColor + backgroundColorHovered: theme.iconBackgroundDark + source: "qrc:/gpt4all/icons/settings.svg" + onClicked: { + discoveryTools.visible = !discoveryTools.visible + } + } + MyMiniButton { + id: sendButton + enabled: !ModelList.discoverInProgress + backgroundColor: theme.textColor + backgroundColorHovered: theme.iconBackgroundDark + source: "qrc:/gpt4all/icons/send_message.svg" + Accessible.name: qsTr("Initiate model discovery and filtering") + Accessible.description: qsTr("Triggers discovery and filtering of models") + onClicked: { + discoverField.sendDiscovery() + } + } + } + } + } + + RowLayout { + id: discoveryTools + Layout.fillWidth: true + Layout.alignment: Qt.AlignCenter + Layout.margins: 0 + spacing: 20 + visible: false + MyComboBox { + id: comboSort + model: ListModel { + ListElement { name: qsTr("Default") } + ListElement { name: qsTr("Likes") } + ListElement { name: qsTr("Downloads") } + ListElement { name: qsTr("Recent") } + } + currentIndex: ModelList.discoverSort + contentItem: Text { + anchors.horizontalCenter: parent.horizontalCenter + rightPadding: 30 + color: theme.textColor + text: { + return qsTr("Sort by: %1").arg(comboSort.displayText) + } + font.pixelSize: theme.fontSizeLarger + verticalAlignment: Text.AlignVCenter + horizontalAlignment: Text.AlignHCenter + elide: Text.ElideRight + } + onActivated: function (index) { + ModelList.discoverSort = index; + } + } + MyComboBox { + id: comboSortDirection + model: ListModel { + ListElement { name: qsTr("Asc") } + ListElement { name: qsTr("Desc") } + } + currentIndex: { + if (ModelList.discoverSortDirection === 1) + return 0 + else + return 1; + } + contentItem: Text { + anchors.horizontalCenter: parent.horizontalCenter + rightPadding: 30 + color: theme.textColor + text: { + return qsTr("Sort dir: %1").arg(comboSortDirection.displayText) + } + font.pixelSize: theme.fontSizeLarger + verticalAlignment: Text.AlignVCenter + horizontalAlignment: Text.AlignHCenter + elide: Text.ElideRight + } + onActivated: function (index) { + if (index === 0) + ModelList.discoverSortDirection = 1; + else + ModelList.discoverSortDirection = -1; + } + } + MyComboBox { + id: comboLimit + model: ListModel { + ListElement { name: "5" } + ListElement { name: "10" } + ListElement { name: "20" } + ListElement { name: "50" } + ListElement { name: "100" } + ListElement { name: qsTr("None") } + } + + currentIndex: { + if (ModelList.discoverLimit === 5) + return 0; + else if (ModelList.discoverLimit === 10) + return 1; + else if (ModelList.discoverLimit === 20) + return 2; + else if (ModelList.discoverLimit === 50) + return 3; + else if (ModelList.discoverLimit === 100) + return 4; + else if (ModelList.discoverLimit === -1) + return 5; + } + contentItem: Text { + anchors.horizontalCenter: parent.horizontalCenter + rightPadding: 30 + color: theme.textColor + text: { + return qsTr("Limit: %1").arg(comboLimit.displayText) + } + font.pixelSize: theme.fontSizeLarger + verticalAlignment: Text.AlignVCenter + horizontalAlignment: Text.AlignHCenter + elide: Text.ElideRight + } + onActivated: function (index) { + switch (index) { + case 0: + ModelList.discoverLimit = 5; break; + case 1: + ModelList.discoverLimit = 10; break; + case 2: + ModelList.discoverLimit = 20; break; + case 3: + ModelList.discoverLimit = 50; break; + case 4: + ModelList.discoverLimit = 100; break; + case 5: + ModelList.discoverLimit = -1; break; + } + } + } + } + + ScrollView { + id: scrollView + ScrollBar.vertical.policy: ScrollBar.AsNeeded + Layout.fillWidth: true + Layout.fillHeight: true + clip: true + + ListView { + id: modelListView + model: ModelList.huggingFaceDownloadableModels + boundsBehavior: Flickable.StopAtBounds + spacing: 30 + + delegate: Rectangle { + id: delegateItem + width: modelListView.width + height: childrenRect.height + 60 + color: theme.conversationBackground + radius: 10 + border.width: 1 + border.color: theme.controlBorder + + ColumnLayout { + anchors.top: parent.top + anchors.left: parent.left + anchors.right: parent.right + anchors.margins: 30 + + Text { + Layout.fillWidth: true + Layout.alignment: Qt.AlignLeft + text: name + elide: Text.ElideRight + color: theme.titleTextColor + font.pixelSize: theme.fontSizeLargest + font.bold: true + Accessible.role: Accessible.Paragraph + Accessible.name: qsTr("Model file") + Accessible.description: qsTr("Model file to be downloaded") + } + + + Rectangle { + Layout.fillWidth: true + height: 1 + color: theme.dividerColor + } + + RowLayout { + Layout.topMargin: 10 + Layout.fillWidth: true + Text { + id: descriptionText + text: description + font.pixelSize: theme.fontSizeLarge + Layout.fillWidth: true + wrapMode: Text.WordWrap + textFormat: Text.StyledText + color: theme.textColor + linkColor: theme.textColor + Accessible.role: Accessible.Paragraph + Accessible.name: qsTr("Description") + Accessible.description: qsTr("File description") + onLinkActivated: function(link) { Qt.openUrlExternally(link); } + MouseArea { + anchors.fill: parent + acceptedButtons: Qt.NoButton // pass clicks to parent + cursorShape: parent.hoveredLink ? Qt.PointingHandCursor : Qt.ArrowCursor + } + } + + // FIXME Need to overhaul design here which must take into account + // features not present in current figma including: + // * Ability to cancel a current download + // * Ability to resume a download + // * The presentation of an error if encountered + // * Whether to show already installed models + // * Install of remote models with API keys + // * The presentation of the progress bar + Rectangle { + id: actionBox + width: childrenRect.width + 20 + color: "transparent" + border.width: 1 + border.color: theme.dividerColor + radius: 10 + Layout.rightMargin: 20 + Layout.bottomMargin: 20 + Layout.minimumHeight: childrenRect.height + 20 + Layout.alignment: Qt.AlignRight | Qt.AlignTop + + ColumnLayout { + spacing: 0 + MySettingsButton { + id: downloadButton + text: isDownloading ? qsTr("Cancel") : isIncomplete ? qsTr("Resume") : qsTr("Download") + font.pixelSize: theme.fontSizeLarge + Layout.topMargin: 20 + Layout.leftMargin: 20 + Layout.minimumWidth: 200 + Layout.fillWidth: true + Layout.alignment: Qt.AlignTop | Qt.AlignHCenter + visible: !isOnline && !installed && !calcHash && downloadError === "" + Accessible.description: qsTr("Stop/restart/start the download") + onClicked: { + if (!isDownloading) { + Download.downloadModel(filename); + } else { + Download.cancelDownload(filename); + } + } + } + + MySettingsDestructiveButton { + id: removeButton + text: qsTr("Remove") + Layout.topMargin: 20 + Layout.leftMargin: 20 + Layout.minimumWidth: 200 + Layout.fillWidth: true + Layout.alignment: Qt.AlignTop | Qt.AlignHCenter + visible: !isDownloading && (installed || isIncomplete) + Accessible.description: qsTr("Remove model from filesystem") + onClicked: { + Download.removeModel(filename); + } + } + + MySettingsButton { + id: installButton + visible: !installed && isOnline + Layout.topMargin: 20 + Layout.leftMargin: 20 + Layout.minimumWidth: 200 + Layout.fillWidth: true + Layout.alignment: Qt.AlignTop | Qt.AlignHCenter + text: qsTr("Install") + font.pixelSize: theme.fontSizeLarge + onClicked: { + var apiKeyText = apiKey.text.trim(), + baseUrlText = baseUrl.text.trim(), + modelNameText = modelName.text.trim(); + + var apiKeyOk = apiKeyText !== "", + baseUrlOk = !isCompatibleApi || baseUrlText !== "", + modelNameOk = !isCompatibleApi || modelNameText !== ""; + + if (!apiKeyOk) + apiKey.showError(); + if (!baseUrlOk) + baseUrl.showError(); + if (!modelNameOk) + modelName.showError(); + + if (!apiKeyOk || !baseUrlOk || !modelNameOk) + return; + + if (!isCompatibleApi) + Download.installModel( + filename, + apiKeyText, + ); + else + Download.installCompatibleModel( + modelNameText, + apiKeyText, + baseUrlText, + ); + } + Accessible.role: Accessible.Button + Accessible.name: qsTr("Install") + Accessible.description: qsTr("Install online model") + } + + ColumnLayout { + spacing: 0 + Label { + Layout.topMargin: 20 + Layout.leftMargin: 20 + visible: downloadError !== "" + textFormat: Text.StyledText + text: qsTr("Error") + color: theme.textColor + font.pixelSize: theme.fontSizeLarge + linkColor: theme.textErrorColor + Accessible.role: Accessible.Paragraph + Accessible.name: text + Accessible.description: qsTr("Describes an error that occurred when downloading") + onLinkActivated: { + downloadingErrorPopup.text = downloadError; + downloadingErrorPopup.open(); + } + } + + Label { + visible: LLM.systemTotalRAMInGB() < ramrequired + Layout.topMargin: 20 + Layout.leftMargin: 20 + Layout.maximumWidth: 300 + textFormat: Text.StyledText + text: qsTr("WARNING: Not recommended for your hardware. Model requires more memory (%1 GB) than your system has available (%2).").arg(ramrequired).arg(LLM.systemTotalRAMInGBString()) + color: theme.textErrorColor + font.pixelSize: theme.fontSizeLarge + wrapMode: Text.WordWrap + Accessible.role: Accessible.Paragraph + Accessible.name: text + Accessible.description: qsTr("Error for incompatible hardware") + onLinkActivated: { + downloadingErrorPopup.text = downloadError; + downloadingErrorPopup.open(); + } + } + } + + ColumnLayout { + visible: isDownloading && !calcHash + Layout.topMargin: 20 + Layout.leftMargin: 20 + Layout.minimumWidth: 200 + Layout.fillWidth: true + Layout.alignment: Qt.AlignTop | Qt.AlignHCenter + spacing: 20 + + ProgressBar { + id: itemProgressBar + Layout.fillWidth: true + width: 200 + value: bytesReceived / bytesTotal + background: Rectangle { + implicitHeight: 45 + color: theme.progressBackground + radius: 3 + } + contentItem: Item { + implicitHeight: 40 + + Rectangle { + width: itemProgressBar.visualPosition * parent.width + height: parent.height + radius: 2 + color: theme.progressForeground + } + } + Accessible.role: Accessible.ProgressBar + Accessible.name: qsTr("Download progressBar") + Accessible.description: qsTr("Shows the progress made in the download") + } + + Label { + id: speedLabel + color: theme.textColor + Layout.alignment: Qt.AlignRight + text: speed + font.pixelSize: theme.fontSizeLarge + Accessible.role: Accessible.Paragraph + Accessible.name: qsTr("Download speed") + Accessible.description: qsTr("Download speed in bytes/kilobytes/megabytes per second") + } + } + + RowLayout { + visible: calcHash + Layout.topMargin: 20 + Layout.leftMargin: 20 + Layout.minimumWidth: 200 + Layout.maximumWidth: 200 + Layout.fillWidth: true + Layout.alignment: Qt.AlignTop | Qt.AlignHCenter + clip: true + + Label { + id: calcHashLabel + color: theme.textColor + text: qsTr("Calculating...") + font.pixelSize: theme.fontSizeLarge + Accessible.role: Accessible.Paragraph + Accessible.name: text + Accessible.description: qsTr("Whether the file hash is being calculated") + } + + MyBusyIndicator { + id: busyCalcHash + running: calcHash + Accessible.role: Accessible.Animation + Accessible.name: qsTr("Busy indicator") + Accessible.description: qsTr("Displayed when the file hash is being calculated") + } + } + + MyTextField { + id: apiKey + visible: !installed && isOnline + Layout.topMargin: 20 + Layout.leftMargin: 20 + Layout.minimumWidth: 200 + Layout.alignment: Qt.AlignTop | Qt.AlignHCenter + wrapMode: Text.WrapAnywhere + function showError() { + messageToast.show(qsTr("ERROR: $API_KEY is empty.")); + apiKey.placeholderTextColor = theme.textErrorColor; + } + onTextChanged: { + apiKey.placeholderTextColor = theme.mutedTextColor; + } + placeholderText: qsTr("enter $API_KEY") + Accessible.role: Accessible.EditableText + Accessible.name: placeholderText + Accessible.description: qsTr("Whether the file hash is being calculated") + } + + MyTextField { + id: baseUrl + visible: !installed && isOnline && isCompatibleApi + Layout.topMargin: 20 + Layout.leftMargin: 20 + Layout.minimumWidth: 200 + Layout.alignment: Qt.AlignTop | Qt.AlignHCenter + wrapMode: Text.WrapAnywhere + function showError() { + messageToast.show(qsTr("ERROR: $BASE_URL is empty.")); + baseUrl.placeholderTextColor = theme.textErrorColor; + } + onTextChanged: { + baseUrl.placeholderTextColor = theme.mutedTextColor; + } + placeholderText: qsTr("enter $BASE_URL") + Accessible.role: Accessible.EditableText + Accessible.name: placeholderText + Accessible.description: qsTr("Whether the file hash is being calculated") + } + + MyTextField { + id: modelName + visible: !installed && isOnline && isCompatibleApi + Layout.topMargin: 20 + Layout.leftMargin: 20 + Layout.minimumWidth: 200 + Layout.alignment: Qt.AlignTop | Qt.AlignHCenter + wrapMode: Text.WrapAnywhere + function showError() { + messageToast.show(qsTr("ERROR: $MODEL_NAME is empty.")) + modelName.placeholderTextColor = theme.textErrorColor; + } + onTextChanged: { + modelName.placeholderTextColor = theme.mutedTextColor; + } + placeholderText: qsTr("enter $MODEL_NAME") + Accessible.role: Accessible.EditableText + Accessible.name: placeholderText + Accessible.description: qsTr("Whether the file hash is being calculated") + } + } + } + } + + Item { + Layout.minimumWidth: childrenRect.width + Layout.minimumHeight: childrenRect.height + Layout.bottomMargin: 10 + RowLayout { + id: paramRow + anchors.centerIn: parent + ColumnLayout { + Layout.topMargin: 10 + Layout.bottomMargin: 10 + Layout.leftMargin: 20 + Layout.rightMargin: 20 + Text { + text: qsTr("File size") + font.pixelSize: theme.fontSizeSmall + color: theme.mutedDarkTextColor + } + Text { + text: filesize + color: theme.textColor + font.pixelSize: theme.fontSizeSmall + font.bold: true + } + } + Rectangle { + width: 1 + Layout.fillHeight: true + color: theme.dividerColor + } + ColumnLayout { + Layout.topMargin: 10 + Layout.bottomMargin: 10 + Layout.leftMargin: 20 + Layout.rightMargin: 20 + Text { + text: qsTr("Quant") + font.pixelSize: theme.fontSizeSmall + color: theme.mutedDarkTextColor + } + Text { + text: quant + color: theme.textColor + font.pixelSize: theme.fontSizeSmall + font.bold: true + } + } + Rectangle { + width: 1 + Layout.fillHeight: true + color: theme.dividerColor + } + ColumnLayout { + Layout.topMargin: 10 + Layout.bottomMargin: 10 + Layout.leftMargin: 20 + Layout.rightMargin: 20 + Text { + text: qsTr("Type") + font.pixelSize: theme.fontSizeSmall + color: theme.mutedDarkTextColor + } + Text { + text: type + color: theme.textColor + font.pixelSize: theme.fontSizeSmall + font.bold: true + } + } + } + + Rectangle { + color: "transparent" + anchors.fill: paramRow + border.color: theme.dividerColor + border.width: 1 + radius: 10 + } + } + + Rectangle { + Layout.fillWidth: true + height: 1 + color: theme.dividerColor + } + } + } + } + } +} diff --git a/gpt4all-chat/qml/AddModelView.qml b/gpt4all-chat/qml/AddModelView.qml index d366b8f9626c..223d703791a9 100644 --- a/gpt4all-chat/qml/AddModelView.qml +++ b/gpt4all-chat/qml/AddModelView.qml @@ -42,12 +42,12 @@ Rectangle { anchors.top: parent.top anchors.bottom: parent.bottom anchors.margins: 30 - spacing: 30 + spacing: 10 ColumnLayout { Layout.fillWidth: true Layout.alignment: Qt.AlignTop - spacing: 30 + spacing: 10 MyButton { id: backButton @@ -76,732 +76,60 @@ Rectangle { font.pixelSize: theme.fontSizeBanner color: theme.titleTextColor } + } - RowLayout { - Layout.fillWidth: true - Layout.alignment: Qt.AlignCenter - Layout.margins: 0 - spacing: 10 - MyTextField { - id: discoverField - property string textBeingSearched: "" - readOnly: ModelList.discoverInProgress - Layout.alignment: Qt.AlignCenter - Layout.fillWidth: true - font.pixelSize: theme.fontSizeLarger - placeholderText: qsTr("Discover and download models by keyword search...") - Accessible.role: Accessible.EditableText - Accessible.name: placeholderText - Accessible.description: qsTr("Text field for discovering and filtering downloadable models") - Connections { - target: ModelList - function onDiscoverInProgressChanged() { - if (ModelList.discoverInProgress) { - discoverField.textBeingSearched = discoverField.text; - discoverField.text = qsTr("Searching \u00B7 %1").arg(discoverField.textBeingSearched); - } else { - discoverField.text = discoverField.textBeingSearched; - discoverField.textBeingSearched = ""; - } - } - } - background: ProgressBar { - id: discoverProgressBar - indeterminate: ModelList.discoverInProgress && ModelList.discoverProgress === 0.0 - value: ModelList.discoverProgress - background: Rectangle { - color: theme.controlBackground - border.color: theme.controlBorder - radius: 10 - } - contentItem: Item { - Rectangle { - visible: ModelList.discoverInProgress - anchors.bottom: parent.bottom - width: discoverProgressBar.visualPosition * parent.width - height: 10 - radius: 2 - color: theme.progressForeground - } - } - } - - Keys.onReturnPressed: (event)=> { - if (event.modifiers & Qt.ControlModifier || event.modifiers & Qt.ShiftModifier) - event.accepted = false; - else { - editingFinished(); - sendDiscovery() - } - } - function sendDiscovery() { - ModelList.downloadableModels.discoverAndFilter(discoverField.text); - } - RowLayout { - spacing: 0 - anchors.right: discoverField.right - anchors.verticalCenter: discoverField.verticalCenter - anchors.rightMargin: 15 - visible: !ModelList.discoverInProgress - MyMiniButton { - id: clearDiscoverButton - backgroundColor: theme.textColor - backgroundColorHovered: theme.iconBackgroundDark - visible: discoverField.text !== "" - source: "qrc:/gpt4all/icons/close.svg" - onClicked: { - discoverField.text = "" - discoverField.sendDiscovery() // should clear results - } - } - MyMiniButton { - backgroundColor: theme.textColor - backgroundColorHovered: theme.iconBackgroundDark - source: "qrc:/gpt4all/icons/settings.svg" - onClicked: { - discoveryTools.visible = !discoveryTools.visible - } - } - MyMiniButton { - id: sendButton - enabled: !ModelList.discoverInProgress - backgroundColor: theme.textColor - backgroundColorHovered: theme.iconBackgroundDark - source: "qrc:/gpt4all/icons/send_message.svg" - Accessible.name: qsTr("Initiate model discovery and filtering") - Accessible.description: qsTr("Triggers discovery and filtering of models") - onClicked: { - discoverField.sendDiscovery() - } - } - } + RowLayout { + id: bar + implicitWidth: 600 + spacing: 10 + MyTabButton { + text: qsTr("GPT4All") + isSelected: gpt4AllModelView.isShown() + onPressed: { + gpt4AllModelView.show(); } } - - RowLayout { - id: discoveryTools - Layout.fillWidth: true - Layout.alignment: Qt.AlignCenter - Layout.margins: 0 - spacing: 20 - visible: false - MyComboBox { - id: comboSort - model: ListModel { - ListElement { name: qsTr("Default") } - ListElement { name: qsTr("Likes") } - ListElement { name: qsTr("Downloads") } - ListElement { name: qsTr("Recent") } - } - currentIndex: ModelList.discoverSort - contentItem: Text { - anchors.horizontalCenter: parent.horizontalCenter - rightPadding: 30 - color: theme.textColor - text: { - return qsTr("Sort by: %1").arg(comboSort.displayText) - } - font.pixelSize: theme.fontSizeLarger - verticalAlignment: Text.AlignVCenter - horizontalAlignment: Text.AlignHCenter - elide: Text.ElideRight - } - onActivated: function (index) { - ModelList.discoverSort = index; - } - } - MyComboBox { - id: comboSortDirection - model: ListModel { - ListElement { name: qsTr("Asc") } - ListElement { name: qsTr("Desc") } - } - currentIndex: { - if (ModelList.discoverSortDirection === 1) - return 0 - else - return 1; - } - contentItem: Text { - anchors.horizontalCenter: parent.horizontalCenter - rightPadding: 30 - color: theme.textColor - text: { - return qsTr("Sort dir: %1").arg(comboSortDirection.displayText) - } - font.pixelSize: theme.fontSizeLarger - verticalAlignment: Text.AlignVCenter - horizontalAlignment: Text.AlignHCenter - elide: Text.ElideRight - } - onActivated: function (index) { - if (index === 0) - ModelList.discoverSortDirection = 1; - else - ModelList.discoverSortDirection = -1; - } - } - MyComboBox { - id: comboLimit - model: ListModel { - ListElement { name: "5" } - ListElement { name: "10" } - ListElement { name: "20" } - ListElement { name: "50" } - ListElement { name: "100" } - ListElement { name: qsTr("None") } - } - - currentIndex: { - if (ModelList.discoverLimit === 5) - return 0; - else if (ModelList.discoverLimit === 10) - return 1; - else if (ModelList.discoverLimit === 20) - return 2; - else if (ModelList.discoverLimit === 50) - return 3; - else if (ModelList.discoverLimit === 100) - return 4; - else if (ModelList.discoverLimit === -1) - return 5; - } - contentItem: Text { - anchors.horizontalCenter: parent.horizontalCenter - rightPadding: 30 - color: theme.textColor - text: { - return qsTr("Limit: %1").arg(comboLimit.displayText) - } - font.pixelSize: theme.fontSizeLarger - verticalAlignment: Text.AlignVCenter - horizontalAlignment: Text.AlignHCenter - elide: Text.ElideRight - } - onActivated: function (index) { - switch (index) { - case 0: - ModelList.discoverLimit = 5; break; - case 1: - ModelList.discoverLimit = 10; break; - case 2: - ModelList.discoverLimit = 20; break; - case 3: - ModelList.discoverLimit = 50; break; - case 4: - ModelList.discoverLimit = 100; break; - case 5: - ModelList.discoverLimit = -1; break; - } - } + MyTabButton { + text: qsTr("HuggingFace") + isSelected: huggingfaceModelView.isShown() + onPressed: { + huggingfaceModelView.show(); } } } - Label { - visible: !ModelList.downloadableModels.count && !ModelList.asyncModelRequestOngoing - Layout.fillWidth: true - Layout.fillHeight: true - horizontalAlignment: Qt.AlignHCenter - verticalAlignment: Qt.AlignVCenter - text: qsTr("Network error: could not retrieve %1").arg("http://gpt4all.io/models/models3.json") - font.pixelSize: theme.fontSizeLarge - color: theme.mutedTextColor - } - - MyBusyIndicator { - visible: !ModelList.downloadableModels.count && ModelList.asyncModelRequestOngoing - running: ModelList.asyncModelRequestOngoing - Accessible.role: Accessible.Animation - Layout.alignment: Qt.AlignCenter - Accessible.name: qsTr("Busy indicator") - Accessible.description: qsTr("Displayed when the models request is ongoing") - } - - ScrollView { - id: scrollView - ScrollBar.vertical.policy: ScrollBar.AsNeeded + StackLayout { + id: stackLayout Layout.fillWidth: true Layout.fillHeight: true - clip: true - - ListView { - id: modelListView - model: ModelList.downloadableModels - boundsBehavior: Flickable.StopAtBounds - spacing: 30 - - delegate: Rectangle { - id: delegateItem - width: modelListView.width - height: childrenRect.height + 60 - color: theme.conversationBackground - radius: 10 - border.width: 1 - border.color: theme.controlBorder - - ColumnLayout { - anchors.top: parent.top - anchors.left: parent.left - anchors.right: parent.right - anchors.margins: 30 - - Text { - Layout.fillWidth: true - Layout.alignment: Qt.AlignLeft - text: name - elide: Text.ElideRight - color: theme.titleTextColor - font.pixelSize: theme.fontSizeLargest - font.bold: true - Accessible.role: Accessible.Paragraph - Accessible.name: qsTr("Model file") - Accessible.description: qsTr("Model file to be downloaded") - } - - - Rectangle { - Layout.fillWidth: true - height: 1 - color: theme.dividerColor - } - - RowLayout { - Layout.topMargin: 10 - Layout.fillWidth: true - Text { - id: descriptionText - text: description - font.pixelSize: theme.fontSizeLarge - Layout.fillWidth: true - wrapMode: Text.WordWrap - textFormat: Text.StyledText - color: theme.textColor - linkColor: theme.textColor - Accessible.role: Accessible.Paragraph - Accessible.name: qsTr("Description") - Accessible.description: qsTr("File description") - onLinkActivated: function(link) { Qt.openUrlExternally(link); } - MouseArea { - anchors.fill: parent - acceptedButtons: Qt.NoButton // pass clicks to parent - cursorShape: parent.hoveredLink ? Qt.PointingHandCursor : Qt.ArrowCursor - } - } - - // FIXME Need to overhaul design here which must take into account - // features not present in current figma including: - // * Ability to cancel a current download - // * Ability to resume a download - // * The presentation of an error if encountered - // * Whether to show already installed models - // * Install of remote models with API keys - // * The presentation of the progress bar - Rectangle { - id: actionBox - width: childrenRect.width + 20 - color: "transparent" - border.width: 1 - border.color: theme.dividerColor - radius: 10 - Layout.rightMargin: 20 - Layout.bottomMargin: 20 - Layout.minimumHeight: childrenRect.height + 20 - Layout.alignment: Qt.AlignRight | Qt.AlignTop - - ColumnLayout { - spacing: 0 - MySettingsButton { - id: downloadButton - text: isDownloading ? qsTr("Cancel") : isIncomplete ? qsTr("Resume") : qsTr("Download") - font.pixelSize: theme.fontSizeLarge - Layout.topMargin: 20 - Layout.leftMargin: 20 - Layout.minimumWidth: 200 - Layout.fillWidth: true - Layout.alignment: Qt.AlignTop | Qt.AlignHCenter - visible: !isOnline && !installed && !calcHash && downloadError === "" - Accessible.description: qsTr("Stop/restart/start the download") - onClicked: { - if (!isDownloading) { - Download.downloadModel(filename); - } else { - Download.cancelDownload(filename); - } - } - } - - MySettingsDestructiveButton { - id: removeButton - text: qsTr("Remove") - Layout.topMargin: 20 - Layout.leftMargin: 20 - Layout.minimumWidth: 200 - Layout.fillWidth: true - Layout.alignment: Qt.AlignTop | Qt.AlignHCenter - visible: !isDownloading && (installed || isIncomplete) - Accessible.description: qsTr("Remove model from filesystem") - onClicked: { - Download.removeModel(filename); - } - } - MySettingsButton { - id: installButton - visible: !installed && isOnline - Layout.topMargin: 20 - Layout.leftMargin: 20 - Layout.minimumWidth: 200 - Layout.fillWidth: true - Layout.alignment: Qt.AlignTop | Qt.AlignHCenter - text: qsTr("Install") - font.pixelSize: theme.fontSizeLarge - onClicked: { - var apiKeyText = apiKey.text.trim(), - baseUrlText = baseUrl.text.trim(), - modelNameText = modelName.text.trim(); - - var apiKeyOk = apiKeyText !== "", - baseUrlOk = !isCompatibleApi || baseUrlText !== "", - modelNameOk = !isCompatibleApi || modelNameText !== ""; - - if (!apiKeyOk) - apiKey.showError(); - if (!baseUrlOk) - baseUrl.showError(); - if (!modelNameOk) - modelName.showError(); - - if (!apiKeyOk || !baseUrlOk || !modelNameOk) - return; - - if (!isCompatibleApi) - Download.installModel( - filename, - apiKeyText, - ); - else - Download.installCompatibleModel( - modelNameText, - apiKeyText, - baseUrlText, - ); - } - Accessible.role: Accessible.Button - Accessible.name: qsTr("Install") - Accessible.description: qsTr("Install online model") - } - - ColumnLayout { - spacing: 0 - Label { - Layout.topMargin: 20 - Layout.leftMargin: 20 - visible: downloadError !== "" - textFormat: Text.StyledText - text: qsTr("Error") - color: theme.textColor - font.pixelSize: theme.fontSizeLarge - linkColor: theme.textErrorColor - Accessible.role: Accessible.Paragraph - Accessible.name: text - Accessible.description: qsTr("Describes an error that occurred when downloading") - onLinkActivated: { - downloadingErrorPopup.text = downloadError; - downloadingErrorPopup.open(); - } - } - - Label { - visible: LLM.systemTotalRAMInGB() < ramrequired - Layout.topMargin: 20 - Layout.leftMargin: 20 - Layout.maximumWidth: 300 - textFormat: Text.StyledText - text: qsTr("WARNING: Not recommended for your hardware. Model requires more memory (%1 GB) than your system has available (%2).").arg(ramrequired).arg(LLM.systemTotalRAMInGBString()) - color: theme.textErrorColor - font.pixelSize: theme.fontSizeLarge - wrapMode: Text.WordWrap - Accessible.role: Accessible.Paragraph - Accessible.name: text - Accessible.description: qsTr("Error for incompatible hardware") - onLinkActivated: { - downloadingErrorPopup.text = downloadError; - downloadingErrorPopup.open(); - } - } - } - - ColumnLayout { - visible: isDownloading && !calcHash - Layout.topMargin: 20 - Layout.leftMargin: 20 - Layout.minimumWidth: 200 - Layout.fillWidth: true - Layout.alignment: Qt.AlignTop | Qt.AlignHCenter - spacing: 20 - - ProgressBar { - id: itemProgressBar - Layout.fillWidth: true - width: 200 - value: bytesReceived / bytesTotal - background: Rectangle { - implicitHeight: 45 - color: theme.progressBackground - radius: 3 - } - contentItem: Item { - implicitHeight: 40 - - Rectangle { - width: itemProgressBar.visualPosition * parent.width - height: parent.height - radius: 2 - color: theme.progressForeground - } - } - Accessible.role: Accessible.ProgressBar - Accessible.name: qsTr("Download progressBar") - Accessible.description: qsTr("Shows the progress made in the download") - } - - Label { - id: speedLabel - color: theme.textColor - Layout.alignment: Qt.AlignRight - text: speed - font.pixelSize: theme.fontSizeLarge - Accessible.role: Accessible.Paragraph - Accessible.name: qsTr("Download speed") - Accessible.description: qsTr("Download speed in bytes/kilobytes/megabytes per second") - } - } - - RowLayout { - visible: calcHash - Layout.topMargin: 20 - Layout.leftMargin: 20 - Layout.minimumWidth: 200 - Layout.maximumWidth: 200 - Layout.fillWidth: true - Layout.alignment: Qt.AlignTop | Qt.AlignHCenter - clip: true - - Label { - id: calcHashLabel - color: theme.textColor - text: qsTr("Calculating...") - font.pixelSize: theme.fontSizeLarge - Accessible.role: Accessible.Paragraph - Accessible.name: text - Accessible.description: qsTr("Whether the file hash is being calculated") - } - - MyBusyIndicator { - id: busyCalcHash - running: calcHash - Accessible.role: Accessible.Animation - Accessible.name: qsTr("Busy indicator") - Accessible.description: qsTr("Displayed when the file hash is being calculated") - } - } - - MyTextField { - id: apiKey - visible: !installed && isOnline - Layout.topMargin: 20 - Layout.leftMargin: 20 - Layout.minimumWidth: 200 - Layout.alignment: Qt.AlignTop | Qt.AlignHCenter - wrapMode: Text.WrapAnywhere - function showError() { - messageToast.show(qsTr("ERROR: $API_KEY is empty.")); - apiKey.placeholderTextColor = theme.textErrorColor; - } - onTextChanged: { - apiKey.placeholderTextColor = theme.mutedTextColor; - } - placeholderText: qsTr("enter $API_KEY") - Accessible.role: Accessible.EditableText - Accessible.name: placeholderText - Accessible.description: qsTr("Whether the file hash is being calculated") - } - - MyTextField { - id: baseUrl - visible: !installed && isOnline && isCompatibleApi - Layout.topMargin: 20 - Layout.leftMargin: 20 - Layout.minimumWidth: 200 - Layout.alignment: Qt.AlignTop | Qt.AlignHCenter - wrapMode: Text.WrapAnywhere - function showError() { - messageToast.show(qsTr("ERROR: $BASE_URL is empty.")); - baseUrl.placeholderTextColor = theme.textErrorColor; - } - onTextChanged: { - baseUrl.placeholderTextColor = theme.mutedTextColor; - } - placeholderText: qsTr("enter $BASE_URL") - Accessible.role: Accessible.EditableText - Accessible.name: placeholderText - Accessible.description: qsTr("Whether the file hash is being calculated") - } - - MyTextField { - id: modelName - visible: !installed && isOnline && isCompatibleApi - Layout.topMargin: 20 - Layout.leftMargin: 20 - Layout.minimumWidth: 200 - Layout.alignment: Qt.AlignTop | Qt.AlignHCenter - wrapMode: Text.WrapAnywhere - function showError() { - messageToast.show(qsTr("ERROR: $MODEL_NAME is empty.")) - modelName.placeholderTextColor = theme.textErrorColor; - } - onTextChanged: { - modelName.placeholderTextColor = theme.mutedTextColor; - } - placeholderText: qsTr("enter $MODEL_NAME") - Accessible.role: Accessible.EditableText - Accessible.name: placeholderText - Accessible.description: qsTr("Whether the file hash is being calculated") - } - } - } - } - - Item { - Layout.minimumWidth: childrenRect.width - Layout.minimumHeight: childrenRect.height - Layout.bottomMargin: 10 - RowLayout { - id: paramRow - anchors.centerIn: parent - ColumnLayout { - Layout.topMargin: 10 - Layout.bottomMargin: 10 - Layout.leftMargin: 20 - Layout.rightMargin: 20 - Text { - text: qsTr("File size") - font.pixelSize: theme.fontSizeSmall - color: theme.mutedDarkTextColor - } - Text { - text: filesize - color: theme.textColor - font.pixelSize: theme.fontSizeSmall - font.bold: true - } - } - Rectangle { - width: 1 - Layout.fillHeight: true - color: theme.dividerColor - } - ColumnLayout { - Layout.topMargin: 10 - Layout.bottomMargin: 10 - Layout.leftMargin: 20 - Layout.rightMargin: 20 - Text { - text: qsTr("RAM required") - font.pixelSize: theme.fontSizeSmall - color: theme.mutedDarkTextColor - } - Text { - text: ramrequired >= 0 ? qsTr("%1 GB").arg(ramrequired) : qsTr("?") - color: theme.textColor - font.pixelSize: theme.fontSizeSmall - font.bold: true - } - } - Rectangle { - width: 1 - Layout.fillHeight: true - color: theme.dividerColor - } - ColumnLayout { - Layout.topMargin: 10 - Layout.bottomMargin: 10 - Layout.leftMargin: 20 - Layout.rightMargin: 20 - Text { - text: qsTr("Parameters") - font.pixelSize: theme.fontSizeSmall - color: theme.mutedDarkTextColor - } - Text { - text: parameters !== "" ? parameters : qsTr("?") - color: theme.textColor - font.pixelSize: theme.fontSizeSmall - font.bold: true - } - } - Rectangle { - width: 1 - Layout.fillHeight: true - color: theme.dividerColor - } - ColumnLayout { - Layout.topMargin: 10 - Layout.bottomMargin: 10 - Layout.leftMargin: 20 - Layout.rightMargin: 20 - Text { - text: qsTr("Quant") - font.pixelSize: theme.fontSizeSmall - color: theme.mutedDarkTextColor - } - Text { - text: quant - color: theme.textColor - font.pixelSize: theme.fontSizeSmall - font.bold: true - } - } - Rectangle { - width: 1 - Layout.fillHeight: true - color: theme.dividerColor - } - ColumnLayout { - Layout.topMargin: 10 - Layout.bottomMargin: 10 - Layout.leftMargin: 20 - Layout.rightMargin: 20 - Text { - text: qsTr("Type") - font.pixelSize: theme.fontSizeSmall - color: theme.mutedDarkTextColor - } - Text { - text: type - color: theme.textColor - font.pixelSize: theme.fontSizeSmall - font.bold: true - } - } - } + AddGPT4AllModelView { + id: gpt4AllModelView + Layout.fillWidth: true + Layout.fillHeight: true - Rectangle { - color: "transparent" - anchors.fill: paramRow - border.color: theme.dividerColor - border.width: 1 - radius: 10 - } - } + function show() { + stackLayout.currentIndex = 0; + } + function isShown() { + return stackLayout.currentIndex === 0 + } + } - Rectangle { - Layout.fillWidth: true - height: 1 - color: theme.dividerColor - } - } + AddHFModelView { + id: huggingfaceModelView + Layout.fillWidth: true + Layout.fillHeight: true + // FIXME: This generates a warning and should not be used inside a layout, but without + // it the text field inside this qml does not display at full width so it looks like + // a bug in stacklayout + anchors.fill: parent + + function show() { + stackLayout.currentIndex = 1; + } + function isShown() { + return stackLayout.currentIndex === 1 } } } diff --git a/gpt4all-chat/qml/HomeView.qml b/gpt4all-chat/qml/HomeView.qml index 69ef16e23f58..8d76d5dbfd46 100644 --- a/gpt4all-chat/qml/HomeView.qml +++ b/gpt4all-chat/qml/HomeView.qml @@ -47,7 +47,7 @@ Rectangle { id: welcome Layout.alignment: Qt.AlignHCenter text: qsTr("Welcome to GPT4All") - font.pixelSize: theme.fontSizeBanner + font.pixelSize: theme.fontSizeBannerLarge color: theme.titleTextColor } diff --git a/gpt4all-chat/qml/MyTabButton.qml b/gpt4all-chat/qml/MyTabButton.qml new file mode 100644 index 000000000000..2a4609524741 --- /dev/null +++ b/gpt4all-chat/qml/MyTabButton.qml @@ -0,0 +1,26 @@ +import QtCore +import QtQuick +import QtQuick.Controls +import QtQuick.Controls.Basic +import mysettings +import mysettingsenums + +MySettingsButton { + property bool isSelected: false + contentItem: Text { + text: parent.text + horizontalAlignment: Qt.AlignCenter + color: isSelected ? theme.titleTextColor : theme.styledTextColor + font.pixelSize: theme.fontSizeLarger + } + background: Item { + visible: isSelected || hovered + Rectangle { + anchors.bottom: parent.bottom + anchors.left: parent.left + anchors.right: parent.right + height: 3 + color: isSelected ? theme.titleTextColor : theme.styledTextColorLighter + } + } +} diff --git a/gpt4all-chat/qml/Theme.qml b/gpt4all-chat/qml/Theme.qml index e2675820449a..4a33bd8c168c 100644 --- a/gpt4all-chat/qml/Theme.qml +++ b/gpt4all-chat/qml/Theme.qml @@ -1017,6 +1017,17 @@ QtObject { } } + property color styledTextColorLighter: { + switch (MySettings.chatTheme) { + case MySettingsEnums.ChatTheme.LegacyDark: + return purple50 + case MySettingsEnums.ChatTheme.Dark: + return yellow0 + default: + return grayRed400 + } + } + property color styledTextColor2: { switch (MySettings.chatTheme) { case MySettingsEnums.ChatTheme.LegacyDark: @@ -1256,5 +1267,6 @@ QtObject { property real fontSizeLarger: 14 * fontScale property real fontSizeLargest: 18 * fontScale property real fontSizeBannerSmall: 24 * fontScale**.8 - property real fontSizeBanner: 48 * fontScale**.8 + property real fontSizeBanner: 32 * fontScale**.8 + property real fontSizeBannerLarge: 48 * fontScale**.8 } diff --git a/gpt4all-chat/src/modellist.cpp b/gpt4all-chat/src/modellist.cpp index 1f2c4e35bc6d..a6c5a620a070 100644 --- a/gpt4all-chat/src/modellist.cpp +++ b/gpt4all-chat/src/modellist.cpp @@ -465,47 +465,54 @@ bool InstalledModels::filterAcceptsRow(int sourceRow, return (isInstalled || (!m_selectable && isDownloading)) && !isEmbeddingModel; } -DownloadableModels::DownloadableModels(QObject *parent) +GPT4AllDownloadableModels::GPT4AllDownloadableModels(QObject *parent) : QSortFilterProxyModel(parent) - , m_expanded(false) - , m_limit(5) { - connect(this, &DownloadableModels::rowsInserted, this, &DownloadableModels::countChanged); - connect(this, &DownloadableModels::rowsRemoved, this, &DownloadableModels::countChanged); - connect(this, &DownloadableModels::modelReset, this, &DownloadableModels::countChanged); + connect(this, &GPT4AllDownloadableModels::rowsInserted, this, &GPT4AllDownloadableModels::countChanged); + connect(this, &GPT4AllDownloadableModels::rowsRemoved, this, &GPT4AllDownloadableModels::countChanged); + connect(this, &GPT4AllDownloadableModels::modelReset, this, &GPT4AllDownloadableModels::countChanged); } -bool DownloadableModels::filterAcceptsRow(int sourceRow, +bool GPT4AllDownloadableModels::filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const { - // FIXME We can eliminate the 'expanded' code as the UI no longer uses this - bool withinLimit = sourceRow < (m_expanded ? sourceModel()->rowCount() : m_limit); QModelIndex index = sourceModel()->index(sourceRow, 0, sourceParent); bool hasDescription = !sourceModel()->data(index, ModelList::DescriptionRole).toString().isEmpty(); bool isClone = sourceModel()->data(index, ModelList::IsCloneRole).toBool(); - return withinLimit && hasDescription && !isClone; + bool isDiscovered = sourceModel()->data(index, ModelList::IsDiscoveredRole).toBool(); + return !isDiscovered && hasDescription && !isClone; } -int DownloadableModels::count() const +int GPT4AllDownloadableModels::count() const { return rowCount(); } -bool DownloadableModels::isExpanded() const +HuggingFaceDownloadableModels::HuggingFaceDownloadableModels(QObject *parent) + : QSortFilterProxyModel(parent) + , m_limit(5) { - return m_expanded; + connect(this, &HuggingFaceDownloadableModels::rowsInserted, this, &HuggingFaceDownloadableModels::countChanged); + connect(this, &HuggingFaceDownloadableModels::rowsRemoved, this, &HuggingFaceDownloadableModels::countChanged); + connect(this, &HuggingFaceDownloadableModels::modelReset, this, &HuggingFaceDownloadableModels::countChanged); } -void DownloadableModels::setExpanded(bool expanded) +bool HuggingFaceDownloadableModels::filterAcceptsRow(int sourceRow, + const QModelIndex &sourceParent) const { - if (m_expanded != expanded) { - m_expanded = expanded; - invalidateFilter(); - emit expandedChanged(m_expanded); - } + QModelIndex index = sourceModel()->index(sourceRow, 0, sourceParent); + bool hasDescription = !sourceModel()->data(index, ModelList::DescriptionRole).toString().isEmpty(); + bool isClone = sourceModel()->data(index, ModelList::IsCloneRole).toBool(); + bool isDiscovered = sourceModel()->data(index, ModelList::IsDiscoveredRole).toBool(); + return isDiscovered && hasDescription && !isClone; +} + +int HuggingFaceDownloadableModels::count() const +{ + return rowCount(); } -void DownloadableModels::discoverAndFilter(const QString &discover) +void HuggingFaceDownloadableModels::discoverAndFilter(const QString &discover) { m_discoverFilter = discover; ModelList *ml = qobject_cast(parent()); @@ -523,7 +530,8 @@ ModelList::ModelList() : QAbstractListModel(nullptr) , m_installedModels(new InstalledModels(this)) , m_selectableModels(new InstalledModels(this, /*selectable*/ true)) - , m_downloadableModels(new DownloadableModels(this)) + , m_gpt4AllDownloadableModels(new GPT4AllDownloadableModels(this)) + , m_huggingFaceDownloadableModels(new HuggingFaceDownloadableModels(this)) , m_asyncModelRequestOngoing(false) , m_discoverLimit(20) , m_discoverSortDirection(-1) @@ -536,7 +544,8 @@ ModelList::ModelList() m_installedModels->setSourceModel(this); m_selectableModels->setSourceModel(this); - m_downloadableModels->setSourceModel(this); + m_gpt4AllDownloadableModels->setSourceModel(this); + m_huggingFaceDownloadableModels->setSourceModel(this); auto *mySettings = MySettings::globalInstance(); connect(mySettings, &MySettings::nameChanged, this, &ModelList::updateDataForSettings ); diff --git a/gpt4all-chat/src/modellist.h b/gpt4all-chat/src/modellist.h index 121a8433cf62..0e22b931d934 100644 --- a/gpt4all-chat/src/modellist.h +++ b/gpt4all-chat/src/modellist.h @@ -294,17 +294,28 @@ class InstalledModels : public QSortFilterProxyModel bool m_selectable; }; -class DownloadableModels : public QSortFilterProxyModel +class GPT4AllDownloadableModels : public QSortFilterProxyModel { Q_OBJECT Q_PROPERTY(int count READ count NOTIFY countChanged) - Q_PROPERTY(bool expanded READ isExpanded WRITE setExpanded NOTIFY expandedChanged) public: - explicit DownloadableModels(QObject *parent); + explicit GPT4AllDownloadableModels(QObject *parent); int count() const; - bool isExpanded() const; - void setExpanded(bool expanded); +Q_SIGNALS: + void countChanged(); + +protected: + bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const override; +}; + +class HuggingFaceDownloadableModels : public QSortFilterProxyModel +{ + Q_OBJECT + Q_PROPERTY(int count READ count NOTIFY countChanged) +public: + explicit HuggingFaceDownloadableModels(QObject *parent); + int count() const; Q_INVOKABLE void discoverAndFilter(const QString &discover); @@ -314,11 +325,7 @@ class DownloadableModels : public QSortFilterProxyModel protected: bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const override; -Q_SIGNALS: - void expandedChanged(bool expanded); - private: - bool m_expanded; int m_limit; QString m_discoverFilter; }; @@ -329,7 +336,8 @@ class ModelList : public QAbstractListModel Q_PROPERTY(int count READ count NOTIFY countChanged) Q_PROPERTY(InstalledModels* installedModels READ installedModels NOTIFY installedModelsChanged) Q_PROPERTY(InstalledModels* selectableModels READ selectableModels NOTIFY selectableModelsChanged) - Q_PROPERTY(DownloadableModels* downloadableModels READ downloadableModels NOTIFY downloadableModelsChanged) + Q_PROPERTY(GPT4AllDownloadableModels* gpt4AllDownloadableModels READ gpt4AllDownloadableModels CONSTANT) + Q_PROPERTY(HuggingFaceDownloadableModels* huggingFaceDownloadableModels READ huggingFaceDownloadableModels CONSTANT) Q_PROPERTY(QList selectableModelList READ selectableModelList NOTIFY selectableModelListChanged) Q_PROPERTY(bool asyncModelRequestOngoing READ asyncModelRequestOngoing NOTIFY asyncModelRequestOngoingChanged) Q_PROPERTY(int discoverLimit READ discoverLimit WRITE setDiscoverLimit NOTIFY discoverLimitChanged) @@ -482,7 +490,8 @@ class ModelList : public QAbstractListModel InstalledModels *installedModels() const { return m_installedModels; } InstalledModels *selectableModels() const { return m_selectableModels; } - DownloadableModels *downloadableModels() const { return m_downloadableModels; } + GPT4AllDownloadableModels *gpt4AllDownloadableModels() const { return m_gpt4AllDownloadableModels; } + HuggingFaceDownloadableModels *huggingFaceDownloadableModels() const { return m_huggingFaceDownloadableModels; } static inline QString toFileSize(quint64 sz) { if (sz < 1024) { @@ -520,7 +529,6 @@ class ModelList : public QAbstractListModel void countChanged(); void installedModelsChanged(); void selectableModelsChanged(); - void downloadableModelsChanged(); void selectableModelListChanged(); void asyncModelRequestOngoingChanged(); void discoverLimitChanged(); @@ -570,7 +578,8 @@ private Q_SLOTS: QNetworkAccessManager m_networkManager; InstalledModels *m_installedModels; InstalledModels *m_selectableModels; - DownloadableModels *m_downloadableModels; + GPT4AllDownloadableModels *m_gpt4AllDownloadableModels; + HuggingFaceDownloadableModels *m_huggingFaceDownloadableModels; QList m_models; QHash m_modelMap; bool m_asyncModelRequestOngoing; diff --git a/gpt4all-chat/translations/gpt4all_en_US.ts b/gpt4all-chat/translations/gpt4all_en_US.ts index 5f998cc865bb..33ce242a5671 100644 --- a/gpt4all-chat/translations/gpt4all_en_US.ts +++ b/gpt4all-chat/translations/gpt4all_en_US.ts @@ -60,291 +60,486 @@ - AddModelView + AddGPT4AllModelView - - ← Existing Models + + These models have been specifically configured for use in GPT4All. The first few models on the list are known to work the best, but you should only attempt to use models that will fit in your available memory. - - Explore Models + + Network error: could not retrieve %1 - - Discover and download models by keyword search... + + + Busy indicator - - Text field for discovering and filtering downloadable models + + Displayed when the models request is ongoing - - Initiate model discovery and filtering + + Model file - - Triggers discovery and filtering of models + + Model file to be downloaded - - Default + + Description - - Likes + + File description - - Downloads + + Cancel - - Recent + + Resume - - Asc + + Download - - Desc + + Stop/restart/start the download - - None + + Remove + + + + + Remove model from filesystem + + + + + + Install + + + + + Install online model + + + + + <strong><font size="1"><a href="#error">Error</a></strong></font> + + + + + Describes an error that occurred when downloading + + + + + <strong><font size="2">WARNING: Not recommended for your hardware. Model requires more memory (%1 GB) than your system has available (%2).</strong></font> + + + + + Error for incompatible hardware + + + + + Download progressBar + + + + + Shows the progress made in the download + + + + + Download speed + + + + + Download speed in bytes/kilobytes/megabytes per second + + + + + Calculating... + + + + + + + + Whether the file hash is being calculated + + + + + Displayed when the file hash is being calculated + + + + + ERROR: $API_KEY is empty. + + + + + enter $API_KEY + + + + + ERROR: $BASE_URL is empty. + + + + + enter $BASE_URL + + + + + ERROR: $MODEL_NAME is empty. + + + + + enter $MODEL_NAME + + + + + File size + + + + + RAM required + + + + + %1 GB - + + + ? + + + + + Parameters + + + + + Quant + + + + + Type + + + + + AddHFModelView + + + Use the search to find and download models from HuggingFace. There is NO GUARANTEE that these will work. Many will require additional configuration before they can be used. + + + + + Discover and download models by keyword search... + + + + + Text field for discovering and filtering downloadable models + + + + Searching · %1 - + + Initiate model discovery and filtering + + + + + Triggers discovery and filtering of models + + + + + Default + + + + + Likes + + + + + Downloads + + + + + Recent + + + + Sort by: %1 - - Sort dir: %1 + + Asc - - Limit: %1 + + Desc - - Network error: could not retrieve %1 + + Sort dir: %1 - - - Busy indicator + + None - - Displayed when the models request is ongoing + + Limit: %1 - + Model file - + Model file to be downloaded - + Description - + File description - + Cancel - + Resume - + Download - + Stop/restart/start the download - + Remove - + Remove model from filesystem - - + + Install - + Install online model - - <strong><font size="2">WARNING: Not recommended for your hardware. Model requires more memory (%1 GB) than your system has available (%2).</strong></font> + + <strong><font size="1"><a href="#error">Error</a></strong></font> - - ERROR: $API_KEY is empty. + + Describes an error that occurred when downloading - - ERROR: $BASE_URL is empty. + + <strong><font size="2">WARNING: Not recommended for your hardware. Model requires more memory (%1 GB) than your system has available (%2).</strong></font> - - enter $BASE_URL + + Error for incompatible hardware - - ERROR: $MODEL_NAME is empty. + + Download progressBar - - enter $MODEL_NAME + + Shows the progress made in the download - - %1 GB + + Download speed - - - ? + + Download speed in bytes/kilobytes/megabytes per second - - Describes an error that occurred when downloading + + Calculating... - - <strong><font size="1"><a href="#error">Error</a></strong></font> + + + + + Whether the file hash is being calculated - - Error for incompatible hardware + + Busy indicator - - Download progressBar + + Displayed when the file hash is being calculated - - Shows the progress made in the download + + ERROR: $API_KEY is empty. - - Download speed + + enter $API_KEY - - Download speed in bytes/kilobytes/megabytes per second + + ERROR: $BASE_URL is empty. - - Calculating... + + enter $BASE_URL - - - - - Whether the file hash is being calculated + + ERROR: $MODEL_NAME is empty. - - Displayed when the file hash is being calculated + + enter $MODEL_NAME - - enter $API_KEY + + File size - - File size + + Quant - - RAM required + + Type + + + AddModelView - - Parameters + + ← Existing Models - - Quant + + Explore Models - - Type + + GPT4All + + + + + HuggingFace @@ -1602,78 +1797,78 @@ model to get started ModelList - + <ul><li>Requires personal OpenAI API key.</li><li>WARNING: Will send your chats to OpenAI!</li><li>Your API key will be stored on disk</li><li>Will only be used to communicate with OpenAI</li><li>You can apply for an API key <a href="https://platform.openai.com/account/api-keys">here.</a></li> - + <strong>OpenAI's ChatGPT model GPT-3.5 Turbo</strong><br> %1 - + <strong>OpenAI's ChatGPT model GPT-4</strong><br> %1 %2 - + <strong>Mistral Tiny model</strong><br> %1 - + <strong>Mistral Small model</strong><br> %1 - + <strong>Mistral Medium model</strong><br> %1 - + <br><br><i>* Even if you pay OpenAI for ChatGPT-4 this does not guarantee API key access. Contact OpenAI for more info. - - + + cannot open "%1": %2 - + cannot create "%1": %2 - + %1 (%2) - + <strong>OpenAI-Compatible API Model</strong><br><ul><li>API Key: %1</li><li>Base URL: %2</li><li>Model Name: %3</li></ul> - + <ul><li>Requires personal Mistral API key.</li><li>WARNING: Will send your chats to Mistral!</li><li>Your API key will be stored on disk</li><li>Will only be used to communicate with Mistral</li><li>You can apply for an API key <a href="https://console.mistral.ai/user/api-keys">here</a>.</li> - + <ul><li>Requires personal API key and the API base URL.</li><li>WARNING: Will send your chats to the OpenAI-compatible API Server you specified!</li><li>Your API key will be stored on disk</li><li>Will only be used to communicate with the OpenAI-compatible API Server</li> - + <strong>Connect to OpenAI-compatible API server</strong><br> %1 - + <strong>Created by %1.</strong><br><ul><li>Published on %2.<li>This model has %3 likes.<li>This model has %4 downloads.<li>More info can be found <a href="https://huggingface.co/%5">here.</a></ul> @@ -2658,12 +2853,12 @@ model release that uses your data! - + Installed models - + View of installed models diff --git a/gpt4all-chat/translations/gpt4all_es_MX.ts b/gpt4all-chat/translations/gpt4all_es_MX.ts index 070a4e5d083f..8112b7149df5 100644 --- a/gpt4all-chat/translations/gpt4all_es_MX.ts +++ b/gpt4all-chat/translations/gpt4all_es_MX.ts @@ -63,6 +63,467 @@ Crear colección + + AddGPT4AllModelView + + + These models have been specifically configured for use in GPT4All. The first few models on the list are known to work the best, but you should only attempt to use models that will fit in your available memory. + + + + + Network error: could not retrieve %1 + Error de red: no se pudo recuperar %1 + + + + + Busy indicator + Indicador de ocupado + + + + Displayed when the models request is ongoing + Se muestra cuando la solicitud de modelos está en curso + + + + Model file + Archivo del modelo + + + + Model file to be downloaded + Archivo del modelo a descargar + + + + Description + Descripción + + + + File description + Descripción del archivo + + + + Cancel + Cancelar + + + + Resume + Reanudar + + + + Download + Descargar + + + + Stop/restart/start the download + Detener/reiniciar/iniciar la descarga + + + + Remove + Eliminar + + + + Remove model from filesystem + Eliminar modelo del sistema de archivos + + + + + Install + Instalar + + + + Install online model + Instalar modelo en línea + + + + <strong><font size="1"><a href="#error">Error</a></strong></font> + <strong><font size="1"><a href="#error">Error</a></strong></font> + + + + Describes an error that occurred when downloading + Describe un error que ocurrió durante la descarga + + + + <strong><font size="2">WARNING: Not recommended for your hardware. Model requires more memory (%1 GB) than your system has available (%2).</strong></font> + + + + + Error for incompatible hardware + Error por hardware incompatible + + + + Download progressBar + Barra de progreso de descarga + + + + Shows the progress made in the download + Muestra el progreso realizado en la descarga + + + + Download speed + Velocidad de descarga + + + + Download speed in bytes/kilobytes/megabytes per second + Velocidad de descarga en bytes/kilobytes/megabytes por segundo + + + + Calculating... + Calculando... + + + + + + + Whether the file hash is being calculated + Si se está calculando el hash del archivo + + + + Displayed when the file hash is being calculated + Se muestra cuando se está calculando el hash del archivo + + + + ERROR: $API_KEY is empty. + + + + + enter $API_KEY + ingrese $API_KEY + + + + ERROR: $BASE_URL is empty. + + + + + enter $BASE_URL + ingrese $BASE_URL + + + + ERROR: $MODEL_NAME is empty. + ERROR: $MODEL_NAME está vacío. + + + + enter $MODEL_NAME + ingrese $MODEL_NAME + + + + File size + Tamaño del archivo + + + + RAM required + RAM requerida + + + + %1 GB + %1 GB + + + + + ? + ? + + + + Parameters + Parámetros + + + + Quant + Cuantificación + + + + Type + Tipo + + + + AddHFModelView + + + Use the search to find and download models from HuggingFace. There is NO GUARANTEE that these will work. Many will require additional configuration before they can be used. + + + + + Discover and download models by keyword search... + Descubre y descarga modelos mediante búsqueda por palabras clave... + + + + Text field for discovering and filtering downloadable models + Campo de texto para descubrir y filtrar modelos descargables + + + + Searching · %1 + Buscando · %1 + + + + Initiate model discovery and filtering + Iniciar descubrimiento y filtrado de modelos + + + + Triggers discovery and filtering of models + Activa el descubrimiento y filtrado de modelos + + + + Default + Predeterminado + + + + Likes + Me gusta + + + + Downloads + Descargas + + + + Recent + Reciente + + + + Sort by: %1 + Ordenar por: %1 + + + + Asc + Asc + + + + Desc + Desc + + + + Sort dir: %1 + Dirección de ordenamiento: %1 + + + + None + Ninguno + + + + Limit: %1 + Límite: %1 + + + + Model file + Archivo del modelo + + + + Model file to be downloaded + Archivo del modelo a descargar + + + + Description + Descripción + + + + File description + Descripción del archivo + + + + Cancel + Cancelar + + + + Resume + Reanudar + + + + Download + Descargar + + + + Stop/restart/start the download + Detener/reiniciar/iniciar la descarga + + + + Remove + Eliminar + + + + Remove model from filesystem + Eliminar modelo del sistema de archivos + + + + + Install + Instalar + + + + Install online model + Instalar modelo en línea + + + + <strong><font size="1"><a href="#error">Error</a></strong></font> + <strong><font size="1"><a href="#error">Error</a></strong></font> + + + + Describes an error that occurred when downloading + Describe un error que ocurrió durante la descarga + + + + <strong><font size="2">WARNING: Not recommended for your hardware. Model requires more memory (%1 GB) than your system has available (%2).</strong></font> + + + + + Error for incompatible hardware + Error por hardware incompatible + + + + Download progressBar + Barra de progreso de descarga + + + + Shows the progress made in the download + Muestra el progreso realizado en la descarga + + + + Download speed + Velocidad de descarga + + + + Download speed in bytes/kilobytes/megabytes per second + Velocidad de descarga en bytes/kilobytes/megabytes por segundo + + + + Calculating... + Calculando... + + + + + + + Whether the file hash is being calculated + Si se está calculando el hash del archivo + + + + Busy indicator + Indicador de ocupado + + + + Displayed when the file hash is being calculated + Se muestra cuando se está calculando el hash del archivo + + + + ERROR: $API_KEY is empty. + + + + + enter $API_KEY + ingrese $API_KEY + + + + ERROR: $BASE_URL is empty. + + + + + enter $BASE_URL + ingrese $BASE_URL + + + + ERROR: $MODEL_NAME is empty. + ERROR: $MODEL_NAME está vacío. + + + + enter $MODEL_NAME + ingrese $MODEL_NAME + + + + File size + Tamaño del archivo + + + + Quant + Cuantificación + + + + Type + Tipo + + AddModelView @@ -76,280 +537,230 @@ Explorar modelos - + + GPT4All + GPT4All + + + + HuggingFace + + + Discover and download models by keyword search... - Descubre y descarga modelos mediante búsqueda por palabras clave... + Descubre y descarga modelos mediante búsqueda por palabras clave... - Text field for discovering and filtering downloadable models - Campo de texto para descubrir y filtrar modelos descargables + Campo de texto para descubrir y filtrar modelos descargables - Initiate model discovery and filtering - Iniciar descubrimiento y filtrado de modelos + Iniciar descubrimiento y filtrado de modelos - Triggers discovery and filtering of models - Activa el descubrimiento y filtrado de modelos + Activa el descubrimiento y filtrado de modelos - Default - Predeterminado + Predeterminado - Likes - Me gusta + Me gusta - Downloads - Descargas + Descargas - Recent - Reciente + Reciente - Asc - Asc + Asc - Desc - Desc + Desc - None - Ninguno + Ninguno - Searching · %1 - Buscando · %1 + Buscando · %1 - Sort by: %1 - Ordenar por: %1 + Ordenar por: %1 - Sort dir: %1 - Dirección de ordenamiento: %1 + Dirección de ordenamiento: %1 - Limit: %1 - Límite: %1 + Límite: %1 - Network error: could not retrieve %1 - Error de red: no se pudo recuperar %1 + Error de red: no se pudo recuperar %1 - - Busy indicator - Indicador de ocupado + Indicador de ocupado - Displayed when the models request is ongoing - Se muestra cuando la solicitud de modelos está en curso + Se muestra cuando la solicitud de modelos está en curso - Model file - Archivo del modelo + Archivo del modelo - Model file to be downloaded - Archivo del modelo a descargar + Archivo del modelo a descargar - Description - Descripción + Descripción - File description - Descripción del archivo + Descripción del archivo - Cancel - Cancelar + Cancelar - Resume - Reanudar + Reanudar - Download - Descargar + Descargar - Stop/restart/start the download - Detener/reiniciar/iniciar la descarga + Detener/reiniciar/iniciar la descarga - Remove - Eliminar + Eliminar - Remove model from filesystem - Eliminar modelo del sistema de archivos + Eliminar modelo del sistema de archivos - - Install - Instalar + Instalar - Install online model - Instalar modelo en línea + Instalar modelo en línea - <strong><font size="1"><a href="#error">Error</a></strong></font> - <strong><font size="1"><a href="#error">Error</a></strong></font> + <strong><font size="1"><a href="#error">Error</a></strong></font> - <strong><font size="2">WARNING: Not recommended for your hardware. Model requires more memory (%1 GB) than your system has available (%2).</strong></font> - <strong><font size="2">ADVERTENCIA: No recomendado para tu hardware. El modelo requiere más memoria (%1 GB) de la que tu sistema tiene disponible (%2).</strong></font> + <strong><font size="2">ADVERTENCIA: No recomendado para tu hardware. El modelo requiere más memoria (%1 GB) de la que tu sistema tiene disponible (%2).</strong></font> - %1 GB - %1 GB + %1 GB - - ? - ? + ? - Describes an error that occurred when downloading - Describe un error que ocurrió durante la descarga + Describe un error que ocurrió durante la descarga - Error for incompatible hardware - Error por hardware incompatible + Error por hardware incompatible - Download progressBar - Barra de progreso de descarga + Barra de progreso de descarga - Shows the progress made in the download - Muestra el progreso realizado en la descarga + Muestra el progreso realizado en la descarga - Download speed - Velocidad de descarga + Velocidad de descarga - Download speed in bytes/kilobytes/megabytes per second - Velocidad de descarga en bytes/kilobytes/megabytes por segundo + Velocidad de descarga en bytes/kilobytes/megabytes por segundo - Calculating... - Calculando... + Calculando... - - - - Whether the file hash is being calculated - Si se está calculando el hash del archivo + Si se está calculando el hash del archivo - Displayed when the file hash is being calculated - Se muestra cuando se está calculando el hash del archivo + Se muestra cuando se está calculando el hash del archivo - enter $API_KEY - ingrese $API_KEY + ingrese $API_KEY - File size - Tamaño del archivo + Tamaño del archivo - RAM required - RAM requerida + RAM requerida - Parameters - Parámetros + Parámetros - Quant - Cuantificación + Cuantificación - Type - Tipo + Tipo - ERROR: $API_KEY is empty. - ERROR: $API_KEY está vacío. + ERROR: $API_KEY está vacío. - ERROR: $BASE_URL is empty. - ERROR: $BASE_URL está vacío. + ERROR: $BASE_URL está vacío. - enter $BASE_URL - ingrese $BASE_URL + ingrese $BASE_URL - ERROR: $MODEL_NAME is empty. - ERROR: $MODEL_NAME está vacío. + ERROR: $MODEL_NAME está vacío. - enter $MODEL_NAME - ingrese $MODEL_NAME + ingrese $MODEL_NAME @@ -1696,78 +2107,78 @@ modelo para comenzar ModelList - + <ul><li>Requires personal OpenAI API key.</li><li>WARNING: Will send your chats to OpenAI!</li><li>Your API key will be stored on disk</li><li>Will only be used to communicate with OpenAI</li><li>You can apply for an API key <a href="https://platform.openai.com/account/api-keys">here.</a></li> <ul><li>Requiere clave API personal de OpenAI.</li><li>ADVERTENCIA: ¡Enviará sus chats a OpenAI!</li><li>Su clave API se almacenará en el disco</li><li>Solo se usará para comunicarse con OpenAI</li><li>Puede solicitar una clave API <a href="https://platform.openai.com/account/api-keys">aquí.</a></li> - + <strong>OpenAI's ChatGPT model GPT-3.5 Turbo</strong><br> %1 <strong>Modelo ChatGPT GPT-3.5 Turbo de OpenAI</strong><br> %1 - + <br><br><i>* Even if you pay OpenAI for ChatGPT-4 this does not guarantee API key access. Contact OpenAI for more info. <br><br><i>* Aunque pagues a OpenAI por ChatGPT-4, esto no garantiza el acceso a la clave API. Contacta a OpenAI para más información. - + <strong>OpenAI's ChatGPT model GPT-4</strong><br> %1 %2 <strong>Modelo ChatGPT GPT-4 de OpenAI</strong><br> %1 %2 - + <ul><li>Requires personal Mistral API key.</li><li>WARNING: Will send your chats to Mistral!</li><li>Your API key will be stored on disk</li><li>Will only be used to communicate with Mistral</li><li>You can apply for an API key <a href="https://console.mistral.ai/user/api-keys">here</a>.</li> <ul><li>Requiere una clave API personal de Mistral.</li><li>ADVERTENCIA: ¡Enviará tus chats a Mistral!</li><li>Tu clave API se almacenará en el disco</li><li>Solo se usará para comunicarse con Mistral</li><li>Puedes solicitar una clave API <a href="https://console.mistral.ai/user/api-keys">aquí</a>.</li> - + <strong>Mistral Tiny model</strong><br> %1 <strong>Modelo Mistral Tiny</strong><br> %1 - + <strong>Mistral Small model</strong><br> %1 <strong>Modelo Mistral Small</strong><br> %1 - + <strong>Mistral Medium model</strong><br> %1 <strong>Modelo Mistral Medium</strong><br> %1 - + <strong>Created by %1.</strong><br><ul><li>Published on %2.<li>This model has %3 likes.<li>This model has %4 downloads.<li>More info can be found <a href="https://huggingface.co/%5">here.</a></ul> <strong>Creado por %1.</strong><br><ul><li>Publicado el %2.<li>Este modelo tiene %3 me gusta.<li>Este modelo tiene %4 descargas.<li>Más información puede encontrarse <a href="https://huggingface.co/%5">aquí.</a></ul> - + %1 (%2) %1 (%2) - - + + cannot open "%1": %2 no se puede abrir "%1": %2 - + cannot create "%1": %2 no se puede crear "%1": %2 - + <strong>OpenAI-Compatible API Model</strong><br><ul><li>API Key: %1</li><li>Base URL: %2</li><li>Model Name: %3</li></ul> <strong>Modelo de API compatible con OpenAI</strong><br><ul><li>Clave API: %1</li><li>URL base: %2</li><li>Nombre del modelo: %3</li></ul> - + <ul><li>Requires personal API key and the API base URL.</li><li>WARNING: Will send your chats to the OpenAI-compatible API Server you specified!</li><li>Your API key will be stored on disk</li><li>Will only be used to communicate with the OpenAI-compatible API Server</li> <ul><li>Requiere una clave API personal y la URL base de la API.</li><li>ADVERTENCIA: ¡Enviará sus chats al servidor de API compatible con OpenAI que especificó!</li><li>Su clave API se almacenará en el disco</li><li>Solo se utilizará para comunicarse con el servidor de API compatible con OpenAI</li> - + <strong>Connect to OpenAI-compatible API server</strong><br> %1 <strong>Conectar al servidor de API compatible con OpenAI</strong><br> %1 @@ -2827,12 +3238,12 @@ Locales El modo servidor está habilitado - + Installed models Modelos instalados - + View of installed models Vista de modelos instalados diff --git a/gpt4all-chat/translations/gpt4all_it_IT.ts b/gpt4all-chat/translations/gpt4all_it_IT.ts index 075abcd9cb27..4522b20f6c4e 100644 --- a/gpt4all-chat/translations/gpt4all_it_IT.ts +++ b/gpt4all-chat/translations/gpt4all_it_IT.ts @@ -59,6 +59,467 @@ Crea raccolta + + AddGPT4AllModelView + + + These models have been specifically configured for use in GPT4All. The first few models on the list are known to work the best, but you should only attempt to use models that will fit in your available memory. + Questi modelli sono stati specificamente configurati per l'uso in GPT4All. I primi modelli dell'elenco sono noti per funzionare meglio, ma dovresti utilizzare solo modelli che possano rientrare nella memoria disponibile. + + + + Network error: could not retrieve %1 + Errore di rete: impossibile recuperare %1 + + + + + Busy indicator + Indicatore di occupato + + + + Displayed when the models request is ongoing + Visualizzato quando la richiesta dei modelli è in corso + + + + Model file + File del modello + + + + Model file to be downloaded + File del modello da scaricare + + + + Description + Descrizione + + + + File description + Descrizione del file + + + + Cancel + Annulla + + + + Resume + Riprendi + + + + Download + Scarica + + + + Stop/restart/start the download + Arresta/riavvia/avvia il download + + + + Remove + Rimuovi + + + + Remove model from filesystem + Rimuovi il modello dal sistema dei file + + + + + Install + Installa + + + + Install online model + Installa il modello online + + + + <strong><font size="1"><a href="#error">Error</a></strong></font> + <strong><font size="1"><a href="#error">Errore</a></strong></font> + + + + Describes an error that occurred when downloading + Descrive un errore che si è verificato durante lo scaricamento + + + + <strong><font size="2">WARNING: Not recommended for your hardware. Model requires more memory (%1 GB) than your system has available (%2).</strong></font> + <strong><font size="2">AVVISO: non consigliato per il tuo hardware. Il modello richiede più memoria (%1 GB) di quella disponibile nel sistema (%2).</strong></font> + + + + Error for incompatible hardware + Errore per hardware incompatibile + + + + Download progressBar + Barra di avanzamento dello scaricamento + + + + Shows the progress made in the download + Mostra lo stato di avanzamento dello scaricamento + + + + Download speed + Velocità di scaricamento + + + + Download speed in bytes/kilobytes/megabytes per second + Velocità di scaricamento in byte/kilobyte/megabyte al secondo + + + + Calculating... + Calcolo in corso... + + + + + + + Whether the file hash is being calculated + Se viene calcolato l'hash del file + + + + Displayed when the file hash is being calculated + Visualizzato durante il calcolo dell'hash del file + + + + ERROR: $API_KEY is empty. + ERRORE: $API_KEY è vuoto. + + + + enter $API_KEY + Inserire $API_KEY + + + + ERROR: $BASE_URL is empty. + ERRORE: $BASE_URL non è valido. + + + + enter $BASE_URL + inserisci $BASE_URL + + + + ERROR: $MODEL_NAME is empty. + ERRORE: $MODEL_NAME è vuoto. + + + + enter $MODEL_NAME + inserisci $MODEL_NAME + + + + File size + Dimensione del file + + + + RAM required + RAM richiesta + + + + %1 GB + %1 GB + + + + + ? + ? + + + + Parameters + Parametri + + + + Quant + Quant + + + + Type + Tipo + + + + AddHFModelView + + + Use the search to find and download models from HuggingFace. There is NO GUARANTEE that these will work. Many will require additional configuration before they can be used. + Usa la ricerca per trovare e scaricare modelli da HuggingFace. NON C'È ALCUNA GARANZIA che funzioneranno. Molti richiederanno configurazioni aggiuntive prima di poter essere utilizzati. + + + + Discover and download models by keyword search... + Scopri e scarica i modelli tramite ricerca per parole chiave... + + + + Text field for discovering and filtering downloadable models + Campo di testo per scoprire e filtrare i modelli scaricabili + + + + Searching · %1 + Ricerca · %1 + + + + Initiate model discovery and filtering + Avvia rilevamento e filtraggio dei modelli + + + + Triggers discovery and filtering of models + Attiva la scoperta e il filtraggio dei modelli + + + + Default + Predefinito + + + + Likes + Mi piace + + + + Downloads + Scaricamenti + + + + Recent + Recenti + + + + Sort by: %1 + Ordina per: %1 + + + + Asc + Asc + + + + Desc + Disc + + + + Sort dir: %1 + Direzione ordinamento: %1 + + + + None + Niente + + + + Limit: %1 + Limite: %1 + + + + Model file + File del modello + + + + Model file to be downloaded + File del modello da scaricare + + + + Description + Descrizione + + + + File description + Descrizione del file + + + + Cancel + Annulla + + + + Resume + Riprendi + + + + Download + Scarica + + + + Stop/restart/start the download + Arresta/riavvia/avvia il download + + + + Remove + Rimuovi + + + + Remove model from filesystem + Rimuovi il modello dal sistema dei file + + + + + Install + Installa + + + + Install online model + Installa il modello online + + + + <strong><font size="1"><a href="#error">Error</a></strong></font> + <strong><font size="1"><a href="#error">Errore</a></strong></font> + + + + Describes an error that occurred when downloading + Descrive un errore che si è verificato durante lo scaricamento + + + + <strong><font size="2">WARNING: Not recommended for your hardware. Model requires more memory (%1 GB) than your system has available (%2).</strong></font> + <strong><font size="2">AVVISO: non consigliato per il tuo hardware. Il modello richiede più memoria (%1 GB) di quella disponibile nel sistema (%2).</strong></font> + + + + Error for incompatible hardware + Errore per hardware incompatibile + + + + Download progressBar + Barra di avanzamento dello scaricamento + + + + Shows the progress made in the download + Mostra lo stato di avanzamento dello scaricamento + + + + Download speed + Velocità di scaricamento + + + + Download speed in bytes/kilobytes/megabytes per second + Velocità di scaricamento in byte/kilobyte/megabyte al secondo + + + + Calculating... + Calcolo in corso... + + + + + + + Whether the file hash is being calculated + Se viene calcolato l'hash del file + + + + Busy indicator + Indicatore di occupato + + + + Displayed when the file hash is being calculated + Visualizzato durante il calcolo dell'hash del file + + + + ERROR: $API_KEY is empty. + ERRORE: $API_KEY è vuoto. + + + + enter $API_KEY + Inserire $API_KEY + + + + ERROR: $BASE_URL is empty. + ERRORE: $BASE_URL non è valido. + + + + enter $BASE_URL + inserisci $BASE_URL + + + + ERROR: $MODEL_NAME is empty. + ERRORE: $MODEL_NAME è vuoto. + + + + enter $MODEL_NAME + inserisci $MODEL_NAME + + + + File size + Dimensione del file + + + + Quant + Quant + + + + Type + Tipo + + AddModelView @@ -72,280 +533,218 @@ Esplora modelli - + + GPT4All + GPT4All + + + + HuggingFace + HuggingFace + + Discover and download models by keyword search... - Scopri e scarica i modelli tramite ricerca per parole chiave... + Scopri e scarica i modelli tramite ricerca per parole chiave... - Text field for discovering and filtering downloadable models - Campo di testo per scoprire e filtrare i modelli scaricabili + Campo di testo per scoprire e filtrare i modelli scaricabili - Initiate model discovery and filtering - Avvia rilevamento e filtraggio dei modelli + Avvia rilevamento e filtraggio dei modelli - Triggers discovery and filtering of models - Attiva la scoperta e il filtraggio dei modelli + Attiva la scoperta e il filtraggio dei modelli - Default - Predefinito + Predefinito - Likes - Mi piace + Mi piace - Downloads - Scaricamenti + Scaricamenti - Recent - Recenti + Recenti - Asc - Asc + Asc - Desc - Disc + Disc - None - Niente + Niente - Searching · %1 - Ricerca · %1 + Ricerca · %1 - Sort by: %1 - Ordina per: %1 + Ordina per: %1 - Sort dir: %1 - Direzione ordinamento: %1 + Direzione ordinamento: %1 - Limit: %1 - Limite: %1 + Limite: %1 - Network error: could not retrieve %1 - Errore di rete: impossibile recuperare %1 + Errore di rete: impossibile recuperare %1 - - Busy indicator - Indicatore di occupato + Indicatore di occupato - Displayed when the models request is ongoing - Visualizzato quando la richiesta dei modelli è in corso + Visualizzato quando la richiesta dei modelli è in corso - Model file - File del modello + File del modello - Model file to be downloaded - File del modello da scaricare + File del modello da scaricare - Description - Descrizione + Descrizione - File description - Descrizione del file + Descrizione del file - Cancel - Annulla + Annulla - Resume - Riprendi + Riprendi - Download - Scarica + Scarica - Stop/restart/start the download - Arresta/riavvia/avvia il download + Arresta/riavvia/avvia il download - Remove - Rimuovi + Rimuovi - Remove model from filesystem - Rimuovi il modello dal sistema dei file + Rimuovi il modello dal sistema dei file - - Install - Installa + Installa - Install online model - Installa il modello online - - - - <strong><font size="2">WARNING: Not recommended for your hardware. Model requires more memory (%1 GB) than your system has available (%2).</strong></font> - <strong><font size="2">AVVERTENZA: non consigliato per il tuo hardware. Il modello richiede più memoria (%1 GB) di quella disponibile nel sistema (%2).</strong></font> + Installa il modello online - ERROR: $API_KEY is empty. - ERRORE: $API_KEY è vuoto. + ERRORE: $API_KEY è vuoto. - ERROR: $BASE_URL is empty. - ERRORE: $BASE_URL non è valido. + ERRORE: $BASE_URL non è valido. - enter $BASE_URL - inserisci $BASE_URL + inserisci $BASE_URL - ERROR: $MODEL_NAME is empty. - ERRORE: $MODEL_NAME è vuoto. + ERRORE: $MODEL_NAME è vuoto. - enter $MODEL_NAME - inserisci $MODEL_NAME - - - - %1 GB - + inserisci $MODEL_NAME - - - ? - - - - Describes an error that occurred when downloading - Descrive un errore che si è verificato durante lo scaricamento + Descrive un errore che si è verificato durante lo scaricamento - <strong><font size="1"><a href="#error">Error</a></strong></font> - <strong><font size="1"><a href="#error">Errore</a></strong></font> + <strong><font size="1"><a href="#error">Errore</a></strong></font> - Error for incompatible hardware - Errore per hardware incompatibile + Errore per hardware incompatibile - Download progressBar - Barra di avanzamento dello scaricamento + Barra di avanzamento dello scaricamento - Shows the progress made in the download - Mostra lo stato di avanzamento dello scaricamento + Mostra lo stato di avanzamento dello scaricamento - Download speed - Velocità di scaricamento + Velocità di scaricamento - Download speed in bytes/kilobytes/megabytes per second - Velocità di scaricamento in byte/kilobyte/megabyte al secondo + Velocità di scaricamento in byte/kilobyte/megabyte al secondo - Calculating... - Calcolo in corso... + Calcolo in corso... - - - - Whether the file hash is being calculated - Se viene calcolato l'hash del file + Se viene calcolato l'hash del file - Displayed when the file hash is being calculated - Visualizzato durante il calcolo dell'hash del file + Visualizzato durante il calcolo dell'hash del file - enter $API_KEY - Inserire $API_KEY + Inserire $API_KEY - File size - Dimensione del file + Dimensione del file - RAM required - RAM richiesta + RAM richiesta - Parameters - Parametri + Parametri - Quant - Quant + Quant - Type - Tipo + Tipo @@ -1598,78 +1997,78 @@ modello per iniziare ModelList - + <ul><li>Requires personal OpenAI API key.</li><li>WARNING: Will send your chats to OpenAI!</li><li>Your API key will be stored on disk</li><li>Will only be used to communicate with OpenAI</li><li>You can apply for an API key <a href="https://platform.openai.com/account/api-keys">here.</a></li> <ul><li>Richiede una chiave API OpenAI personale.</li><li>ATTENZIONE: invierà le tue chat a OpenAI!</li><li>La tua chiave API verrà archiviata su disco</li><li> Verrà utilizzato solo per comunicare con OpenAI</li><li>Puoi richiedere una chiave API <a href="https://platform.openai.com/account/api-keys">qui.</a> </li> - + <strong>OpenAI's ChatGPT model GPT-3.5 Turbo</strong><br> %1 - + <strong>OpenAI's ChatGPT model GPT-4</strong><br> %1 %2 - + <strong>Mistral Tiny model</strong><br> %1 - + <strong>Mistral Small model</strong><br> %1 - + <strong>Mistral Medium model</strong><br> %1 - + <br><br><i>* Even if you pay OpenAI for ChatGPT-4 this does not guarantee API key access. Contact OpenAI for more info. <br><br><i>* Anche se paghi OpenAI per ChatGPT-4 questo non garantisce l'accesso alla chiave API. Contatta OpenAI per maggiori informazioni. - - + + cannot open "%1": %2 impossibile aprire "%1": %2 - + cannot create "%1": %2 impossibile creare "%1": %2 - + %1 (%2) %1 (%2) - + <strong>OpenAI-Compatible API Model</strong><br><ul><li>API Key: %1</li><li>Base URL: %2</li><li>Model Name: %3</li></ul> <strong>Modello API compatibile con OpenAI</strong><br><ul><li>Chiave API: %1</li><li>URL di base: %2</li><li>Nome modello: %3</li></ul> - + <ul><li>Requires personal Mistral API key.</li><li>WARNING: Will send your chats to Mistral!</li><li>Your API key will be stored on disk</li><li>Will only be used to communicate with Mistral</li><li>You can apply for an API key <a href="https://console.mistral.ai/user/api-keys">here</a>.</li> <ul><li>Richiede una chiave API Mistral personale.</li><li>ATTENZIONE: invierà le tue chat a Mistral!</li><li>La tua chiave API verrà archiviata su disco</li><li> Verrà utilizzato solo per comunicare con Mistral</li><li>Puoi richiedere una chiave API <a href="https://console.mistral.ai/user/api-keys">qui</a>. </li> - + <ul><li>Requires personal API key and the API base URL.</li><li>WARNING: Will send your chats to the OpenAI-compatible API Server you specified!</li><li>Your API key will be stored on disk</li><li>Will only be used to communicate with the OpenAI-compatible API Server</li> <ul><li>Richiede una chiave API personale e l'URL di base dell'API.</li><li>ATTENZIONE: invierà le tue chat al server API compatibile con OpenAI che hai specificato!</li><li>La tua chiave API verrà archiviata su disco</li><li>Verrà utilizzata solo per comunicare con il server API compatibile con OpenAI</li> - + <strong>Connect to OpenAI-compatible API server</strong><br> %1 <strong>Connetti al server API compatibile con OpenAI</strong><br> %1 - + <strong>Created by %1.</strong><br><ul><li>Published on %2.<li>This model has %3 likes.<li>This model has %4 downloads.<li>More info can be found <a href="https://huggingface.co/%5">here.</a></ul> <strong>Creato da %1.</strong><br><ul><li>Pubblicato il %2.<li>Questo modello ha %3 Mi piace.<li>Questo modello ha %4 download.<li>Altro informazioni possono essere trovate <a href="https://huggingface.co/%5">qui.</a></ul> @@ -2447,7 +2846,7 @@ NOTA: attivando questa funzione, invierai i tuoi dati al Datalake Open Source di Opt-in to anonymous usage analytics used to improve GPT4All - + Acconsenti all'analisi anonima dell'uso per migliorare GPT4All @@ -2485,7 +2884,7 @@ NOTA: attivando questa funzione, invierai i tuoi dati al Datalake Open Source di Opt-in to anonymous sharing of chats to the GPT4All Datalake - + Acconsenti alla condivisione anonima delle chat con il GPT4All Datalake @@ -2673,12 +3072,12 @@ NOTA: attivando questa funzione, invierai i tuoi dati al Datalake Open Source di La modalità server è abilitata - + Installed models Modelli installati - + View of installed models Vista dei modelli installati diff --git a/gpt4all-chat/translations/gpt4all_pt_BR.ts b/gpt4all-chat/translations/gpt4all_pt_BR.ts index 621dfc9356b1..9e3fd1c97ee7 100644 --- a/gpt4all-chat/translations/gpt4all_pt_BR.ts +++ b/gpt4all-chat/translations/gpt4all_pt_BR.ts @@ -63,6 +63,467 @@ Criar Coleção + + AddGPT4AllModelView + + + These models have been specifically configured for use in GPT4All. The first few models on the list are known to work the best, but you should only attempt to use models that will fit in your available memory. + + + + + Network error: could not retrieve %1 + Erro de rede: não foi possível obter %1 + + + + + Busy indicator + + + + + Displayed when the models request is ongoing + xibido enquanto os modelos estão sendo carregados + + + + Model file + Arquivo do modelo + + + + Model file to be downloaded + Arquivo do modelo a ser baixado + + + + Description + Descrição + + + + File description + Descrição do arquivo + + + + Cancel + Cancelar + + + + Resume + Retomar + + + + Download + Baixar + + + + Stop/restart/start the download + Parar/reiniciar/iniciar o download + + + + Remove + Remover + + + + Remove model from filesystem + + + + + + Install + Instalar + + + + Install online model + Instalar modelo online + + + + <strong><font size="1"><a href="#error">Error</a></strong></font> + <strong><font size="1"><a href="#error">Erro</a></strong></font> + + + + Describes an error that occurred when downloading + + + + + <strong><font size="2">WARNING: Not recommended for your hardware. Model requires more memory (%1 GB) than your system has available (%2).</strong></font> + + + + + Error for incompatible hardware + + + + + Download progressBar + + + + + Shows the progress made in the download + Mostra o progresso do download + + + + Download speed + Velocidade de download + + + + Download speed in bytes/kilobytes/megabytes per second + Velocidade de download em bytes/kilobytes/megabytes por segundo + + + + Calculating... + Calculando... + + + + + + + Whether the file hash is being calculated + + + + + Displayed when the file hash is being calculated + + + + + ERROR: $API_KEY is empty. + + + + + enter $API_KEY + inserir $API_KEY + + + + ERROR: $BASE_URL is empty. + ERRO: A $BASE_URL está vazia. + + + + enter $BASE_URL + inserir a $BASE_URL + + + + ERROR: $MODEL_NAME is empty. + + + + + enter $MODEL_NAME + inserir o $MODEL_NAME + + + + File size + Tamanho do arquivo + + + + RAM required + RAM necessária + + + + %1 GB + %1 GB + + + + + ? + ? + + + + Parameters + Parâmetros + + + + Quant + Quant + + + + Type + Tipo + + + + AddHFModelView + + + Use the search to find and download models from HuggingFace. There is NO GUARANTEE that these will work. Many will require additional configuration before they can be used. + + + + + Discover and download models by keyword search... + Pesquisar modelos... + + + + Text field for discovering and filtering downloadable models + Campo de texto para descobrir e filtrar modelos para download + + + + Searching · %1 + Pesquisando · %1 + + + + Initiate model discovery and filtering + Pesquisar e filtrar modelos + + + + Triggers discovery and filtering of models + Aciona a descoberta e filtragem de modelos + + + + Default + Padrão + + + + Likes + Curtidas + + + + Downloads + Downloads + + + + Recent + Recentes + + + + Sort by: %1 + Ordenar por: %1 + + + + Asc + Asc + + + + Desc + Desc + + + + Sort dir: %1 + Ordenar diretório: %1 + + + + None + Nenhum + + + + Limit: %1 + Limite: %1 + + + + Model file + Arquivo do modelo + + + + Model file to be downloaded + Arquivo do modelo a ser baixado + + + + Description + Descrição + + + + File description + Descrição do arquivo + + + + Cancel + Cancelar + + + + Resume + Retomar + + + + Download + Baixar + + + + Stop/restart/start the download + Parar/reiniciar/iniciar o download + + + + Remove + Remover + + + + Remove model from filesystem + + + + + + Install + Instalar + + + + Install online model + Instalar modelo online + + + + <strong><font size="1"><a href="#error">Error</a></strong></font> + <strong><font size="1"><a href="#error">Erro</a></strong></font> + + + + Describes an error that occurred when downloading + + + + + <strong><font size="2">WARNING: Not recommended for your hardware. Model requires more memory (%1 GB) than your system has available (%2).</strong></font> + + + + + Error for incompatible hardware + + + + + Download progressBar + + + + + Shows the progress made in the download + Mostra o progresso do download + + + + Download speed + Velocidade de download + + + + Download speed in bytes/kilobytes/megabytes per second + Velocidade de download em bytes/kilobytes/megabytes por segundo + + + + Calculating... + Calculando... + + + + + + + Whether the file hash is being calculated + + + + + Busy indicator + + + + + Displayed when the file hash is being calculated + + + + + ERROR: $API_KEY is empty. + + + + + enter $API_KEY + inserir $API_KEY + + + + ERROR: $BASE_URL is empty. + ERRO: A $BASE_URL está vazia. + + + + enter $BASE_URL + inserir a $BASE_URL + + + + ERROR: $MODEL_NAME is empty. + + + + + enter $MODEL_NAME + inserir o $MODEL_NAME + + + + File size + Tamanho do arquivo + + + + Quant + Quant + + + + Type + Tipo + + AddModelView @@ -76,280 +537,230 @@ Descobrir Modelos - + + GPT4All + GPT4All + + + + HuggingFace + + + Discover and download models by keyword search... - Pesquisar modelos... + Pesquisar modelos... - Text field for discovering and filtering downloadable models - Campo de texto para descobrir e filtrar modelos para download + Campo de texto para descobrir e filtrar modelos para download - Initiate model discovery and filtering - Pesquisar e filtrar modelos + Pesquisar e filtrar modelos - Triggers discovery and filtering of models - Aciona a descoberta e filtragem de modelos + Aciona a descoberta e filtragem de modelos - Default - Padrão + Padrão - Likes - Curtidas + Curtidas - Downloads - Downloads + Downloads - Recent - Recentes + Recentes - Asc - Asc + Asc - Desc - Desc + Desc - None - Nenhum + Nenhum - Searching · %1 - Pesquisando · %1 + Pesquisando · %1 - Sort by: %1 - Ordenar por: %1 + Ordenar por: %1 - Sort dir: %1 - Ordenar diretório: %1 + Ordenar diretório: %1 - Limit: %1 - Limite: %1 + Limite: %1 - Network error: could not retrieve %1 - Erro de rede: não foi possível obter %1 + Erro de rede: não foi possível obter %1 - - Busy indicator - Indicador de processamento + Indicador de processamento - Displayed when the models request is ongoing - xibido enquanto os modelos estão sendo carregados + xibido enquanto os modelos estão sendo carregados - Model file - Arquivo do modelo + Arquivo do modelo - Model file to be downloaded - Arquivo do modelo a ser baixado + Arquivo do modelo a ser baixado - Description - Descrição + Descrição - File description - Descrição do arquivo + Descrição do arquivo - Cancel - Cancelar + Cancelar - Resume - Retomar + Retomar - Download - Baixar + Baixar - Stop/restart/start the download - Parar/reiniciar/iniciar o download + Parar/reiniciar/iniciar o download - Remove - Remover + Remover - Remove model from filesystem - Remover modelo do sistema + Remover modelo do sistema - - Install - Instalar + Instalar - Install online model - Instalar modelo online + Instalar modelo online - <strong><font size="2">WARNING: Not recommended for your hardware. Model requires more memory (%1 GB) than your system has available (%2).</strong></font> - <strong><font size="2">ATENÇÃO: Este modelo não é recomendado para seu hardware. Ele exige mais memória (%1 GB) do que seu sistema possui (%2).</strong></font> + <strong><font size="2">ATENÇÃO: Este modelo não é recomendado para seu hardware. Ele exige mais memória (%1 GB) do que seu sistema possui (%2).</strong></font> - ERROR: $API_KEY is empty. - ERRO: A $API_KEY está vazia. + ERRO: A $API_KEY está vazia. - ERROR: $BASE_URL is empty. - ERRO: A $BASE_URL está vazia. + ERRO: A $BASE_URL está vazia. - enter $BASE_URL - inserir a $BASE_URL + inserir a $BASE_URL - ERROR: $MODEL_NAME is empty. - ERRO: O $MODEL_NAME está vazio. + ERRO: O $MODEL_NAME está vazio. - enter $MODEL_NAME - inserir o $MODEL_NAME + inserir o $MODEL_NAME - %1 GB - %1 GB + %1 GB - - ? - ? + ? - Describes an error that occurred when downloading - Mostra informações sobre o erro no download + Mostra informações sobre o erro no download - <strong><font size="1"><a href="#error">Error</a></strong></font> - <strong><font size="1"><a href="#error">Erro</a></strong></font> + <strong><font size="1"><a href="#error">Erro</a></strong></font> - Error for incompatible hardware - Aviso: Hardware não compatível + Aviso: Hardware não compatível - Download progressBar - Progresso do download + Progresso do download - Shows the progress made in the download - Mostra o progresso do download + Mostra o progresso do download - Download speed - Velocidade de download + Velocidade de download - Download speed in bytes/kilobytes/megabytes per second - Velocidade de download em bytes/kilobytes/megabytes por segundo + Velocidade de download em bytes/kilobytes/megabytes por segundo - Calculating... - Calculando... + Calculando... - - - - Whether the file hash is being calculated - Quando o hash do arquivo está sendo calculado + Quando o hash do arquivo está sendo calculado - Displayed when the file hash is being calculated - Exibido durante o cálculo do hash do arquivo + Exibido durante o cálculo do hash do arquivo - enter $API_KEY - inserir $API_KEY + inserir $API_KEY - File size - Tamanho do arquivo + Tamanho do arquivo - RAM required - RAM necessária + RAM necessária - Parameters - Parâmetros + Parâmetros - Quant - Quant + Quant - Type - Tipo + Tipo @@ -1698,78 +2109,78 @@ modelo instalado para funcionar ModelList - + <ul><li>Requires personal OpenAI API key.</li><li>WARNING: Will send your chats to OpenAI!</li><li>Your API key will be stored on disk</li><li>Will only be used to communicate with OpenAI</li><li>You can apply for an API key <a href="https://platform.openai.com/account/api-keys">here.</a></li> <ul><li>É necessária uma chave de API da OpenAI.</li><li>AVISO: Seus chats serão enviados para a OpenAI!</li><li>Sua chave de API será armazenada localmente</li><li>Ela será usada apenas para comunicação com a OpenAI</li><li>Você pode solicitar uma chave de API <a href="https://platform.openai.com/account/api-keys">aqui.</a></li> - + <strong>OpenAI's ChatGPT model GPT-3.5 Turbo</strong><br> %1 <strong>Modelo ChatGPT GPT-3.5 Turbo da OpenAI</strong><br> %1 - + <strong>OpenAI's ChatGPT model GPT-4</strong><br> %1 %2 <strong>Modelo ChatGPT GPT-4 da OpenAI</strong><br> %1 %2 - + <strong>Mistral Tiny model</strong><br> %1 <strong>Modelo Mistral Tiny</strong><br> %1 - + <strong>Mistral Small model</strong><br> %1 <strong>Modelo Mistral Small</strong><br> %1 - + <strong>Mistral Medium model</strong><br> %1 <strong>Modelo Mistral Medium</strong><br> %1 - + <br><br><i>* Even if you pay OpenAI for ChatGPT-4 this does not guarantee API key access. Contact OpenAI for more info. <br><br><i>* Mesmo que você pague pelo ChatGPT-4 da OpenAI, isso não garante acesso à chave de API. Contate a OpenAI para mais informações. - - + + cannot open "%1": %2 não é possível abrir "%1": %2 - + cannot create "%1": %2 não é possível criar "%1": %2 - + %1 (%2) %1 (%2) - + <strong>OpenAI-Compatible API Model</strong><br><ul><li>API Key: %1</li><li>Base URL: %2</li><li>Model Name: %3</li></ul> <strong>Modelo de API Compatível com OpenAI</strong><br><ul><li>Chave da API: %1</li><li>URL Base: %2</li><li>Nome do Modelo: %3</li></ul> - + <ul><li>Requires personal Mistral API key.</li><li>WARNING: Will send your chats to Mistral!</li><li>Your API key will be stored on disk</li><li>Will only be used to communicate with Mistral</li><li>You can apply for an API key <a href="https://console.mistral.ai/user/api-keys">here</a>.</li> <ul><li>É necessária uma chave de API da Mistral.</li><li>AVISO: Seus chats serão enviados para a Mistral!</li><li>Sua chave de API será armazenada localmente</li><li>Ela será usada apenas para comunicação com a Mistral</li><li>Você pode solicitar uma chave de API <a href="https://console.mistral.ai/user/api-keys">aqui</a>.</li> - + <ul><li>Requires personal API key and the API base URL.</li><li>WARNING: Will send your chats to the OpenAI-compatible API Server you specified!</li><li>Your API key will be stored on disk</li><li>Will only be used to communicate with the OpenAI-compatible API Server</li> <ul><li>É necessária uma chave de API e a URL da API.</li><li>AVISO: Seus chats serão enviados para o servidor de API compatível com OpenAI que você especificou!</li><li>Sua chave de API será armazenada no disco</li><li>Será usada apenas para comunicação com o servidor de API compatível com OpenAI</li> - + <strong>Connect to OpenAI-compatible API server</strong><br> %1 <strong>Conectar a um servidor de API compatível com OpenAI</strong><br> %1 - + <strong>Created by %1.</strong><br><ul><li>Published on %2.<li>This model has %3 likes.<li>This model has %4 downloads.<li>More info can be found <a href="https://huggingface.co/%5">here.</a></ul> <strong>Criado por %1.</strong><br><ul><li>Publicado em %2.<li>Este modelo tem %3 curtidas.<li>Este modelo tem %4 downloads.<li>Mais informações podem ser encontradas <a href="https://huggingface.co/%5">aqui.</a></ul> @@ -2829,12 +3240,12 @@ versão do modelo GPT4All que utilize seus dados! Modo servidor ativado - + Installed models Modelos instalados - + View of installed models Exibe os modelos instalados diff --git a/gpt4all-chat/translations/gpt4all_ro_RO.ts b/gpt4all-chat/translations/gpt4all_ro_RO.ts index adea95478f66..199fa6aad1f7 100644 --- a/gpt4all-chat/translations/gpt4all_ro_RO.ts +++ b/gpt4all-chat/translations/gpt4all_ro_RO.ts @@ -64,292 +64,615 @@ - AddModelView + AddGPT4AllModelView - - ← Existing Models - ← Modelele curente/instalate + + These models have been specifically configured for use in GPT4All. The first few models on the list are known to work the best, but you should only attempt to use models that will fit in your available memory. + Aceste modele au fost configurate special pentru utilizarea în GPT4All. Primele câteva modele din listă sunt cunoscute ca fiind cele mai bune, dar ar trebui să încercați să utilizați doar modele care se încadrează în RAM. - - Explore Models - Caută modele + + Network error: could not retrieve %1 + Eroare de reţea: nu se poate prelua %1 + + + + + Busy indicator + Indicator de activitate + + + + Displayed when the models request is ongoing + Afişat în timpul solicitării modelului + + + + Model file + Fişierul modelului + + + + Model file to be downloaded + Fişierul modelului ce va fi descărcat + + + + Description + Descriere + + + + File description + Descrierea fişierului + + + + Cancel + Anulare + + + + Resume + Continuare + + + + Download + Download + + + + Stop/restart/start the download + Oprirea/Repornirea/Iniţierea descărcării + + + + Remove + Şterg + + + + Remove model from filesystem + Şterg modelul din sistemul de fişiere + + + + + Install + Instalare + + + + Install online model + Instalez un model din online + + + + <strong><font size="1"><a href="#error">Error</a></strong></font> + <strong><font size="1"><a href="#error">Eroare</a></strong></font> + + + + Describes an error that occurred when downloading + Descrie eroarea apărută în timpul descărcării + + + + <strong><font size="2">WARNING: Not recommended for your hardware. Model requires more memory (%1 GB) than your system has available (%2).</strong></font> + <strong><font size="2">ATENŢIE: Nerecomandat pentru acest hardware. Modelul necesită mai multă memorie (%1 GB) decât are acest sistem (%2).</strong></font> + + + + Error for incompatible hardware + Eroare: hardware incompatibil + + + + Download progressBar + Progresia descărcării + + + + Shows the progress made in the download + Afişează progresia descărcării + + + + Download speed + Viteza de download + + + + Download speed in bytes/kilobytes/megabytes per second + Viteza de download în bytes/kilobytes/megabytes pe secundă + + + + Calculating... + Calculare... + + + + + + + Whether the file hash is being calculated + Dacă se calculează hash-ul fişierului + + + + Displayed when the file hash is being calculated + Se afişează când se calculează hash-ul fişierului + + + + ERROR: $API_KEY is empty. + EROARE: $API_KEY absentă. + + + + enter $API_KEY + introdu cheia $API_KEY + + + + ERROR: $BASE_URL is empty. + EROARE: $BASE_URL absentă. - + + enter $BASE_URL + introdu $BASE_URL + + + + ERROR: $MODEL_NAME is empty. + EROARE: $MODEL_NAME absent + + + + enter $MODEL_NAME + introdu $MODEL_NAME + + + + File size + Dimensiunea fişierului + + + + RAM required + RAM necesară + + + + %1 GB + %1 GB + + + + + ? + ? + + + + Parameters + Parametri + + + + Quant + Quant(ificare) + + + + Type + Tip + + + + AddHFModelView + + + Use the search to find and download models from HuggingFace. There is NO GUARANTEE that these will work. Many will require additional configuration before they can be used. + Utilizați funcția de căutare pentru a găsi și descărca modele de pe HuggingFace. NU E GARANTAT că acestea vor funcționa. Multe dintre ele vor necesita configurări suplimentare înainte de a putea fi utilizate. + + + Discover and download models by keyword search... Caută şi descarcă modele după un cuvânt-cheie... - + Text field for discovering and filtering downloadable models Câmp pentru căutarea şi filtrarea modelelor ce pot fi descărcate - + + Searching · %1 + Căutare · %1 + + + Initiate model discovery and filtering Iniţiază căutarea şi filtrarea modelelor - + Triggers discovery and filtering of models Activează căutarea şi filtrarea modelelor - + Default Implicit - + Likes Likes - + Downloads Download-uri - + Recent Recent/e - + + Sort by: %1 + Ordonare după: %1 + + + Asc Asc. (A->Z) - + Desc Desc. (Z->A) - - None - Niciunul - - - - Searching · %1 - Căutare · %1 - - - - Sort by: %1 - Ordonare după: %1 - - - + Sort dir: %1 Sensul ordonării: %1 - - Limit: %1 - Límită: %1 - - - - Network error: could not retrieve %1 - Eroare de reţea: nu se poate prelua %1 - - - - - Busy indicator - Indicator de activitate + + None + Niciunul - - Displayed when the models request is ongoing - Afişat în timpul solicitării modelului + + Limit: %1 + Límită: %1 - + Model file Fişierul modelului - + Model file to be downloaded - Fişierul modelului de descărcat + Fişierul modelului ce va fi descărcat - + Description Descriere - + File description Descrierea fişierului - + Cancel Anulare - + Resume Continuare - + Download Download - + Stop/restart/start the download - Opreşte/Reporneşte/Începe descărcarea + Oprirea/Repornirea/Iniţierea descărcării - + Remove - Şterge + Şterg - + Remove model from filesystem - Şterge modelul din sistemul de fişiere + Şterg modelul din sistemul de fişiere - - + + Install Instalare - + Install online model Instalez un model din online - + <strong><font size="1"><a href="#error">Error</a></strong></font> <strong><font size="1"><a href="#error">Eroare</a></strong></font> - - <strong><font size="2">WARNING: Not recommended for your hardware. Model requires more memory (%1 GB) than your system has available (%2).</strong></font> - <strong><font size="2">ATENŢIE: Nerecomandat pentru acest hardware. Modelul necesită mai multă memorie (%1 GB) decât are acest sistem (%2).</strong></font> - - - - %1 GB - %1 GB - - - - - ? - ? + + Describes an error that occurred when downloading + Descrie o eroare aparută la download - - Describes an error that occurred when downloading - Descrie eroarea apărută în timpul descărcării + + <strong><font size="2">WARNING: Not recommended for your hardware. Model requires more memory (%1 GB) than your system has available (%2).</strong></font> + <strong><font size="2">ATENŢIE: Nerecomandat pentru acest hardware. Modelul necesită mai multă memorie (%1 GB) decât are acest sistem (%2).</strong></font> - + Error for incompatible hardware - Eroare: hardware incompatibil + Eroare - hardware incompatibil - + Download progressBar - Progresia descărcării + Bara de progresie a descărcării - + Shows the progress made in the download Afişează progresia descărcării - + Download speed Viteza de download - + Download speed in bytes/kilobytes/megabytes per second Viteza de download în bytes/kilobytes/megabytes pe secundă - + Calculating... Calculare... - - - - + + + + Whether the file hash is being calculated Dacă se calculează hash-ul fişierului - + + Busy indicator + Indicator de activitate + + + Displayed when the file hash is being calculated - Se afişează când se calculează hash-ul fişierului + Afişat la calcularea hash-ului fişierului - + ERROR: $API_KEY is empty. EROARE: $API_KEY absentă - + enter $API_KEY introdu cheia $API_KEY - + ERROR: $BASE_URL is empty. EROARE: $BASE_URL absentă - + enter $BASE_URL introdu $BASE_URL - - ERROR: $MODEL_NAME is empty. - EROARE: $MODEL_NAME absent + + ERROR: $API_KEY is empty. + EROARE: $API_KEY absentă - + enter $MODEL_NAME introdu $MODEL_NAME - + File size Dimensiunea fişierului - + + Quant + Quant(ificare) + + + + Type + Tip + + + + AddModelView + + + ← Existing Models + ← Modelele curente/instalate + + + + Explore Models + Caută modele + + + + GPT4All + GPT4All + + + + HuggingFace + HuggingFace + + + Discover and download models by keyword search... + Caută şi descarcă modele după un cuvânt-cheie... + + + Text field for discovering and filtering downloadable models + Câmp pentru căutarea şi filtrarea modelelor ce pot fi descărcate + + + Initiate model discovery and filtering + Iniţiază căutarea şi filtrarea modelelor + + + Triggers discovery and filtering of models + Activează căutarea şi filtrarea modelelor + + + Default + Implicit + + + Likes + Likes + + + Downloads + Download-uri + + + Recent + Recent/e + + + Asc + Asc. (A->Z) + + + Desc + Desc. (Z->A) + + + None + Niciunul + + + Searching · %1 + Căutare · %1 + + + Sort by: %1 + Ordonare după: %1 + + + Sort dir: %1 + Sensul ordonării: %1 + + + Limit: %1 + Límită: %1 + + + Network error: could not retrieve %1 + Eroare de reţea: nu se poate prelua %1 + + + Busy indicator + Indicator de activitate + + + Displayed when the models request is ongoing + Afişat în timpul solicitării modelului + + + Model file + Fişierul modelului + + + Model file to be downloaded + Fişierul modelului de descărcat + + + Install online model + Instalez un model din online + + + %1 GB + %1 GB + + + ? + ? + + + Shows the progress made in the download + Afişează progresia descărcării + + + Download speed + Viteza de download + + + Download speed in bytes/kilobytes/megabytes per second + Viteza de download în bytes/kilobytes/megabytes pe secundă + + + enter $API_KEY + introdu cheia $API_KEY + + + File size + Dimensiunea fişierului + + RAM required - RAM necesară + RAM necesară - Parameters - Parametri + Parametri - Quant - Quant(ificare) + Quant(ificare) - Type - Tip + Tip @@ -1749,78 +2072,78 @@ model to get started ModelList - - + + cannot open "%1": %2 nu se poate deschide „%1”: %2 - + cannot create "%1": %2 nu se poate crea „%1”: %2 - + %1 (%2) %1 (%2) - + <strong>OpenAI-Compatible API Model</strong><br><ul><li>API Key: %1</li><li>Base URL: %2</li><li>Model Name: %3</li></ul> <strong>Model API compatibil cu OpenAI</strong><br><ul><li>Cheia API: %1</li><li>Base URL: %2</li><li>Numele modelului: %3</li></ul> - + <ul><li>Requires personal OpenAI API key.</li><li>WARNING: Will send your chats to OpenAI!</li><li>Your API key will be stored on disk</li><li>Will only be used to communicate with OpenAI</li><li>You can apply for an API key <a href="https://platform.openai.com/account/api-keys">here.</a></li> <ul><li>Necesită o cheie API OpenAI personală. </li><li>ATENŢIE: Conversaţiile tale vor fi trimise la OpenAI!</li><li>Cheia ta API va fi stocată pe disc (local) </li><li>Va fi utilizată numai pentru comunicarea cu OpenAI</li><li>Poţi solicita o cheie API aici: <a href="https://platform.openai.com/account/api-keys">aici.</a></li> - + <strong>OpenAI's ChatGPT model GPT-3.5 Turbo</strong><br> %1 <strong>Modelul OpenAI's ChatGPT GPT-3.5 Turbo</strong><br> %1 - + <br><br><i>* Even if you pay OpenAI for ChatGPT-4 this does not guarantee API key access. Contact OpenAI for more info. <br><br><i>* Chiar dacă plăteşti la OpenAI pentru ChatGPT-4, aceasta nu garantează accesul la cheia API. Contactează OpenAI pentru mai multe informaţii. - + <strong>OpenAI's ChatGPT model GPT-4</strong><br> %1 %2 <strong>Modelul ChatGPT GPT-4 al OpenAI</strong><br> %1 %2 - + <ul><li>Requires personal Mistral API key.</li><li>WARNING: Will send your chats to Mistral!</li><li>Your API key will be stored on disk</li><li>Will only be used to communicate with Mistral</li><li>You can apply for an API key <a href="https://console.mistral.ai/user/api-keys">here</a>.</li> <ul><li>Necesită cheia personală Mistral API. </li><li>ATENŢIE: Conversaţiile tale vor fi trimise la Mistral!</li><li>Cheia ta API va fi stocată pe disc (local)</li><li>Va fi utilizată numai pentru comunicarea cu Mistral</li><li>Poţi solicita o cheie API aici: <a href="https://console.mistral.ai/user/api-keys">aici</a>.</li> - + <strong>Mistral Tiny model</strong><br> %1 <strong>Modelul Mistral Tiny</strong><br> %1 - + <strong>Mistral Small model</strong><br> %1 <strong>Modelul Mistral Small</strong><br> %1 - + <strong>Mistral Medium model</strong><br> %1 <strong>Modelul Mistral Medium</strong><br> %1 - + <ul><li>Requires personal API key and the API base URL.</li><li>WARNING: Will send your chats to the OpenAI-compatible API Server you specified!</li><li>Your API key will be stored on disk</li><li>Will only be used to communicate with the OpenAI-compatible API Server</li> <ul><li>Necesită cheia personală API si base-URL a API.</li><li>ATENŢIE: Conversaţiile tale vor fi trimise la serverul API compatibil cu OpenAI specificat!</li><li>Cheia ta API va fi stocată pe disc (local)</li><li>Va fi utilizată numai pentru comunicarea cu serverul API compatibil cu OpenAI</li> - + <strong>Connect to OpenAI-compatible API server</strong><br> %1 <strong>Conectare la un server API compatibil cu OpenAI</strong><br> %1 - + <strong>Created by %1.</strong><br><ul><li>Published on %2.<li>This model has %3 likes.<li>This model has %4 downloads.<li>More info can be found <a href="https://huggingface.co/%5">here.</a></ul> <strong>Creat de către %1.</strong><br><ul><li>Publicat in: %2.<li>Acest model are %3 Likes.<li>Acest model are %4 download-uri.<li>Mai multe informaţii pot fi găsite la: <a href="https://huggingface.co/%5">aici.</a></ul> @@ -2678,7 +3001,7 @@ care foloseşte datele tale! Opt-in to anonymous usage analytics used to improve GPT4All - + Optați pentru trimiterea anonimă a evidenței utilizării, folosite pentru a îmbunătăți GPT4All @@ -2716,7 +3039,7 @@ care foloseşte datele tale! Opt-in to anonymous sharing of chats to the GPT4All Datalake - + Optați pentru partajarea anonimă a conversațiilor în GPT4All Datalake @@ -2923,12 +3246,12 @@ care foloseşte datele tale! Modul Server: ACTIV - + Installed models Modele instalate - + View of installed models Secţiunea modelelor instalate diff --git a/gpt4all-chat/translations/gpt4all_zh_CN.ts b/gpt4all-chat/translations/gpt4all_zh_CN.ts index e8ed57386dbb..c1537e5779e0 100644 --- a/gpt4all-chat/translations/gpt4all_zh_CN.ts +++ b/gpt4all-chat/translations/gpt4all_zh_CN.ts @@ -63,6 +63,467 @@ 创建集合 + + AddGPT4AllModelView + + + These models have been specifically configured for use in GPT4All. The first few models on the list are known to work the best, but you should only attempt to use models that will fit in your available memory. + + + + + Network error: could not retrieve %1 + 网络错误:无法检索 %1 + + + + + Busy indicator + 繁忙程度 + + + + Displayed when the models request is ongoing + 在模型请求进行中时显示 + + + + Model file + 模型文件 + + + + Model file to be downloaded + + + + + Description + 描述 + + + + File description + 文件描述 + + + + Cancel + 取消 + + + + Resume + 继续 + + + + Download + 下载 + + + + Stop/restart/start the download + 停止/重启/开始下载 + + + + Remove + 删除 + + + + Remove model from filesystem + 从系统中删除模型 + + + + + Install + + + + + Install online model + 安装在线模型 + + + + <strong><font size="1"><a href="#error">Error</a></strong></font> + + + + + Describes an error that occurred when downloading + + + + + <strong><font size="2">WARNING: Not recommended for your hardware. Model requires more memory (%1 GB) than your system has available (%2).</strong></font> + + + + + Error for incompatible hardware + 硬件不兼容的错误 + + + + Download progressBar + 下载进度 + + + + Shows the progress made in the download + 显示下载进度 + + + + Download speed + 下载速度 + + + + Download speed in bytes/kilobytes/megabytes per second + 下载速度 b/kb/mb /s + + + + Calculating... + + + + + + + + Whether the file hash is being calculated + 是否正在计算文件哈希 + + + + Displayed when the file hash is being calculated + 在计算文件哈希时显示 + + + + ERROR: $API_KEY is empty. + + + + + enter $API_KEY + + + + + ERROR: $BASE_URL is empty. + 错误:$BASE_URL 为空 + + + + enter $BASE_URL + 输入 $BASE_URL + + + + ERROR: $MODEL_NAME is empty. + + + + + enter $MODEL_NAME + 输入:$MODEL_NAME + + + + File size + 文件大小 + + + + RAM required + + + + + %1 GB + %1 GB + + + + + ? + + + + + Parameters + 参数 + + + + Quant + 量化 + + + + Type + 类型 + + + + AddHFModelView + + + Use the search to find and download models from HuggingFace. There is NO GUARANTEE that these will work. Many will require additional configuration before they can be used. + + + + + Discover and download models by keyword search... + 通过关键词查找并下载模型 ... + + + + Text field for discovering and filtering downloadable models + 用于发现和筛选可下载模型的文本字段 + + + + Searching · %1 + 搜索中 · %1 + + + + Initiate model discovery and filtering + 启动模型发现和过滤 + + + + Triggers discovery and filtering of models + 触发模型的发现和筛选 + + + + Default + 默认 + + + + Likes + 喜欢 + + + + Downloads + 下载 + + + + Recent + 近期 + + + + Sort by: %1 + 排序: %1 + + + + Asc + 升序 + + + + Desc + 倒序 + + + + Sort dir: %1 + 排序目录: %1 + + + + None + + + + + Limit: %1 + 数量: %1 + + + + Model file + 模型文件 + + + + Model file to be downloaded + + + + + Description + 描述 + + + + File description + 文件描述 + + + + Cancel + 取消 + + + + Resume + 继续 + + + + Download + 下载 + + + + Stop/restart/start the download + 停止/重启/开始下载 + + + + Remove + 删除 + + + + Remove model from filesystem + 从系统中删除模型 + + + + + Install + + + + + Install online model + 安装在线模型 + + + + <strong><font size="1"><a href="#error">Error</a></strong></font> + + + + + Describes an error that occurred when downloading + + + + + <strong><font size="2">WARNING: Not recommended for your hardware. Model requires more memory (%1 GB) than your system has available (%2).</strong></font> + + + + + Error for incompatible hardware + 硬件不兼容的错误 + + + + Download progressBar + 下载进度 + + + + Shows the progress made in the download + 显示下载进度 + + + + Download speed + 下载速度 + + + + Download speed in bytes/kilobytes/megabytes per second + 下载速度 b/kb/mb /s + + + + Calculating... + + + + + + + + Whether the file hash is being calculated + 是否正在计算文件哈希 + + + + Busy indicator + 繁忙程度 + + + + Displayed when the file hash is being calculated + 在计算文件哈希时显示 + + + + ERROR: $API_KEY is empty. + + + + + enter $API_KEY + + + + + ERROR: $BASE_URL is empty. + 错误:$BASE_URL 为空 + + + + enter $BASE_URL + 输入 $BASE_URL + + + + ERROR: $MODEL_NAME is empty. + + + + + enter $MODEL_NAME + 输入:$MODEL_NAME + + + + File size + 文件大小 + + + + Quant + 量化 + + + + Type + 类型 + + AddModelView @@ -76,280 +537,230 @@ 发现模型 - + + GPT4All + GPT4All + + + + HuggingFace + + + Discover and download models by keyword search... - 通过关键词查找并下载模型 ... + 通过关键词查找并下载模型 ... - Text field for discovering and filtering downloadable models - 用于发现和筛选可下载模型的文本字段 + 用于发现和筛选可下载模型的文本字段 - Initiate model discovery and filtering - 启动模型发现和过滤 + 启动模型发现和过滤 - Triggers discovery and filtering of models - 触发模型的发现和筛选 + 触发模型的发现和筛选 - Default - 默认 + 默认 - Likes - 喜欢 + 喜欢 - Downloads - 下载 + 下载 - Recent - 近期 + 近期 - Asc - 升序 + 升序 - Desc - 倒序 + 倒序 - None - + - Searching · %1 - 搜索中 · %1 + 搜索中 · %1 - Sort by: %1 - 排序: %1 + 排序: %1 - Sort dir: %1 - 排序目录: %1 + 排序目录: %1 - Limit: %1 - 数量: %1 + 数量: %1 - Network error: could not retrieve %1 - 网络错误:无法检索 %1 + 网络错误:无法检索 %1 - - Busy indicator - 繁忙程度 + 繁忙程度 - Displayed when the models request is ongoing - 在模型请求进行中时显示 + 在模型请求进行中时显示 - Model file - 模型文件 + 模型文件 - Model file to be downloaded - 待下载模型 + 待下载模型 - Description - 描述 + 描述 - File description - 文件描述 + 文件描述 - Cancel - 取消 + 取消 - Resume - 继续 + 继续 - Download - 下载 + 下载 - Stop/restart/start the download - 停止/重启/开始下载 + 停止/重启/开始下载 - Remove - 删除 + 删除 - Remove model from filesystem - 从系统中删除模型 + 从系统中删除模型 - - Install - 安装 + 安装 - Install online model - 安装在线模型 + 安装在线模型 - <strong><font size="1"><a href="#error">Error</a></strong></font> - <strong><font size="1"><a href="#error">错误</a></strong></font> + <strong><font size="1"><a href="#error">错误</a></strong></font> - <strong><font size="2">WARNING: Not recommended for your hardware. Model requires more memory (%1 GB) than your system has available (%2).</strong></font> - <strong><font size="2">警告: 你的设备硬件不推荐 ,模型需要的内存 (%1 GB)比你的系统还要多 (%2).</strong></font> + <strong><font size="2">警告: 你的设备硬件不推荐 ,模型需要的内存 (%1 GB)比你的系统还要多 (%2).</strong></font> - ERROR: $API_KEY is empty. - 错误:$API_KEY 为空 + 错误:$API_KEY 为空 - ERROR: $BASE_URL is empty. - 错误:$BASE_URL 为空 + 错误:$BASE_URL 为空 - enter $BASE_URL - 输入 $BASE_URL + 输入 $BASE_URL - ERROR: $MODEL_NAME is empty. - 错误:$MODEL_NAME为空 + 错误:$MODEL_NAME为空 - enter $MODEL_NAME - 输入:$MODEL_NAME + 输入:$MODEL_NAME - %1 GB - %1 GB + %1 GB - - ? - + - Describes an error that occurred when downloading - 描述下载过程中发生的错误 + 描述下载过程中发生的错误 - Error for incompatible hardware - 硬件不兼容的错误 + 硬件不兼容的错误 - Download progressBar - 下载进度 + 下载进度 - Shows the progress made in the download - 显示下载进度 + 显示下载进度 - Download speed - 下载速度 + 下载速度 - Download speed in bytes/kilobytes/megabytes per second - 下载速度 b/kb/mb /s + 下载速度 b/kb/mb /s - Calculating... - 计算中 + 计算中 - - - - Whether the file hash is being calculated - 是否正在计算文件哈希 + 是否正在计算文件哈希 - Displayed when the file hash is being calculated - 在计算文件哈希时显示 + 在计算文件哈希时显示 - enter $API_KEY - 输入$API_KEY + 输入$API_KEY - File size - 文件大小 + 文件大小 - RAM required - RAM 需要 + RAM 需要 - Parameters - 参数 + 参数 - Quant - 量化 + 量化 - Type - 类型 + 类型 @@ -1698,78 +2109,78 @@ model to get started ModelList - - + + cannot open "%1": %2 无法打开“%1”:%2 - + cannot create "%1": %2 无法创建“%1”:%2 - + %1 (%2) %1 (%2) - + <strong>OpenAI-Compatible API Model</strong><br><ul><li>API Key: %1</li><li>Base URL: %2</li><li>Model Name: %3</li></ul> <strong>与 OpenAI 兼容的 API 模型</strong><br><ul><li>API 密钥:%1</li><li>基本 URL:%2</li><li>模型名称:%3</li></ul> - + <ul><li>Requires personal OpenAI API key.</li><li>WARNING: Will send your chats to OpenAI!</li><li>Your API key will be stored on disk</li><li>Will only be used to communicate with OpenAI</li><li>You can apply for an API key <a href="https://platform.openai.com/account/api-keys">here.</a></li> <ul><li>需要个人 OpenAI API 密钥。</li><li>警告:将把您的聊天内容发送给 OpenAI!</li><li>您的 API 密钥将存储在磁盘上</li><li>仅用于与 OpenAI 通信</li><li>您可以在此处<a href="https://platform.openai.com/account/api-keys">申请 API 密钥。</a></li> - + <strong>OpenAI's ChatGPT model GPT-3.5 Turbo</strong><br> %1 <strong>OpenAI's ChatGPT model GPT-3.5 Turbo</strong><br> %1 - + <strong>OpenAI's ChatGPT model GPT-4</strong><br> %1 %2 <strong>OpenAI's ChatGPT model GPT-4</strong><br> %1 %2 - + <strong>Mistral Tiny model</strong><br> %1 <strong>Mistral Tiny model</strong><br> %1 - + <strong>Mistral Small model</strong><br> %1 <strong>Mistral Small model</strong><br> %1 - + <strong>Mistral Medium model</strong><br> %1 <strong>Mistral Medium model</strong><br> %1 - + <ul><li>Requires personal API key and the API base URL.</li><li>WARNING: Will send your chats to the OpenAI-compatible API Server you specified!</li><li>Your API key will be stored on disk</li><li>Will only be used to communicate with the OpenAI-compatible API Server</li> <ul><li>需要个人 API 密钥和 API 基本 URL。</li><li>警告:将把您的聊天内容发送到您指定的与 OpenAI 兼容的 API 服务器!</li><li>您的 API 密钥将存储在磁盘上</li><li>仅用于与与 OpenAI 兼容的 API 服务器通信</li> - + <strong>Connect to OpenAI-compatible API server</strong><br> %1 <strong>连接到与 OpenAI 兼容的 API 服务器</strong><br> %1 - + <br><br><i>* Even if you pay OpenAI for ChatGPT-4 this does not guarantee API key access. Contact OpenAI for more info. <br><br><i>* 即使您为ChatGPT-4向OpenAI付款,这也不能保证API密钥访问。联系OpenAI获取更多信息。 - + <ul><li>Requires personal Mistral API key.</li><li>WARNING: Will send your chats to Mistral!</li><li>Your API key will be stored on disk</li><li>Will only be used to communicate with Mistral</li><li>You can apply for an API key <a href="https://console.mistral.ai/user/api-keys">here</a>.</li> <ul><li>Requires personal Mistral API key.</li><li>WARNING: Will send your chats to Mistral!</li><li>Your API key will be stored on disk</li><li>Will only be used to communicate with Mistral</li><li>You can apply for an API key <a href="https://console.mistral.ai/user/api-keys">here</a>.</li> - + <strong>Created by %1.</strong><br><ul><li>Published on %2.<li>This model has %3 likes.<li>This model has %4 downloads.<li>More info can be found <a href="https://huggingface.co/%5">here.</a></ul> <strong>Created by %1.</strong><br><ul><li>Published on %2.<li>This model has %3 likes.<li>This model has %4 downloads.<li>More info can be found <a href="https://huggingface.co/%5">here.</a></ul> @@ -2821,12 +3232,12 @@ model release that uses your data! 服务器模式已开 - + Installed models 安装模型 - + View of installed models 查看已安装模型 diff --git a/gpt4all-chat/translations/gpt4all_zh_TW.ts b/gpt4all-chat/translations/gpt4all_zh_TW.ts index 0f86f7df73ab..2e7e8eb90023 100644 --- a/gpt4all-chat/translations/gpt4all_zh_TW.ts +++ b/gpt4all-chat/translations/gpt4all_zh_TW.ts @@ -59,6 +59,467 @@ 建立收藏 + + AddGPT4AllModelView + + + These models have been specifically configured for use in GPT4All. The first few models on the list are known to work the best, but you should only attempt to use models that will fit in your available memory. + + + + + Network error: could not retrieve %1 + 網路錯誤:無法取得 %1 + + + + + Busy indicator + 忙線指示器 + + + + Displayed when the models request is ongoing + 當模型請求正在進行時顯示 + + + + Model file + 模型檔案 + + + + Model file to be downloaded + 即將下載的模型檔案 + + + + Description + 描述 + + + + File description + 檔案描述 + + + + Cancel + 取消 + + + + Resume + 恢復 + + + + Download + 下載 + + + + Stop/restart/start the download + 停止/重啟/開始下載 + + + + Remove + 移除 + + + + Remove model from filesystem + 從檔案系統移除模型 + + + + + Install + 安裝 + + + + Install online model + 安裝線上模型 + + + + <strong><font size="1"><a href="#error">Error</a></strong></font> + <strong><font size="1"><a href="#error">錯誤</a></strong></font> + + + + Describes an error that occurred when downloading + 解釋下載時發生的錯誤 + + + + <strong><font size="2">WARNING: Not recommended for your hardware. Model requires more memory (%1 GB) than your system has available (%2).</strong></font> + <strong><font size="2">警告:不推薦在您的硬體上運作。模型需要比較多的記憶體(%1 GB),但您的系統記憶體空間不足(%2)。</strong></font> + + + + Error for incompatible hardware + 錯誤,不相容的硬體 + + + + Download progressBar + 下載進度條 + + + + Shows the progress made in the download + 顯示下載進度 + + + + Download speed + 下載速度 + + + + Download speed in bytes/kilobytes/megabytes per second + 下載速度每秒 bytes/kilobytes/megabytes + + + + Calculating... + 計算中...... + + + + + + + Whether the file hash is being calculated + 是否正在計算檔案雜湊 + + + + Displayed when the file hash is being calculated + 計算檔案雜湊值時顯示 + + + + ERROR: $API_KEY is empty. + 錯誤:$API_KEY 未填寫。 + + + + enter $API_KEY + 請輸入 $API_KEY + + + + ERROR: $BASE_URL is empty. + 錯誤:$BASE_URL 未填寫。 + + + + enter $BASE_URL + 請輸入 $BASE_URL + + + + ERROR: $MODEL_NAME is empty. + 錯誤:$MODEL_NAME 未填寫。 + + + + enter $MODEL_NAME + 請輸入 $MODEL_NAME + + + + File size + 檔案大小 + + + + RAM required + 所需的記憶體 + + + + %1 GB + %1 GB + + + + + ? + + + + + Parameters + 參數 + + + + Quant + 量化 + + + + Type + 類型 + + + + AddHFModelView + + + Use the search to find and download models from HuggingFace. There is NO GUARANTEE that these will work. Many will require additional configuration before they can be used. + + + + + Discover and download models by keyword search... + 透過關鍵字搜尋探索並下載模型...... + + + + Text field for discovering and filtering downloadable models + 用於探索與過濾可下載模型的文字字段 + + + + Searching · %1 + 搜尋 · %1 + + + + Initiate model discovery and filtering + 探索與過濾模型 + + + + Triggers discovery and filtering of models + 觸發探索與過濾模型 + + + + Default + 預設 + + + + Likes + + + + + Downloads + 下載次數 + + + + Recent + 最新 + + + + Sort by: %1 + 排序依據:%1 + + + + Asc + 升序 + + + + Desc + 降序 + + + + Sort dir: %1 + 排序順序:%1 + + + + None + + + + + Limit: %1 + 上限:%1 + + + + Model file + 模型檔案 + + + + Model file to be downloaded + 即將下載的模型檔案 + + + + Description + 描述 + + + + File description + 檔案描述 + + + + Cancel + 取消 + + + + Resume + 恢復 + + + + Download + 下載 + + + + Stop/restart/start the download + 停止/重啟/開始下載 + + + + Remove + 移除 + + + + Remove model from filesystem + 從檔案系統移除模型 + + + + + Install + 安裝 + + + + Install online model + 安裝線上模型 + + + + <strong><font size="1"><a href="#error">Error</a></strong></font> + <strong><font size="1"><a href="#error">錯誤</a></strong></font> + + + + Describes an error that occurred when downloading + 解釋下載時發生的錯誤 + + + + <strong><font size="2">WARNING: Not recommended for your hardware. Model requires more memory (%1 GB) than your system has available (%2).</strong></font> + <strong><font size="2">警告:不推薦在您的硬體上運作。模型需要比較多的記憶體(%1 GB),但您的系統記憶體空間不足(%2)。</strong></font> + + + + Error for incompatible hardware + 錯誤,不相容的硬體 + + + + Download progressBar + 下載進度條 + + + + Shows the progress made in the download + 顯示下載進度 + + + + Download speed + 下載速度 + + + + Download speed in bytes/kilobytes/megabytes per second + 下載速度每秒 bytes/kilobytes/megabytes + + + + Calculating... + 計算中...... + + + + + + + Whether the file hash is being calculated + 是否正在計算檔案雜湊 + + + + Busy indicator + 忙線指示器 + + + + Displayed when the file hash is being calculated + 計算檔案雜湊值時顯示 + + + + ERROR: $API_KEY is empty. + 錯誤:$API_KEY 未填寫。 + + + + enter $API_KEY + 請輸入 $API_KEY + + + + ERROR: $BASE_URL is empty. + 錯誤:$BASE_URL 未填寫。 + + + + enter $BASE_URL + 請輸入 $BASE_URL + + + + ERROR: $MODEL_NAME is empty. + 錯誤:$MODEL_NAME 未填寫。 + + + + enter $MODEL_NAME + 請輸入 $MODEL_NAME + + + + File size + 檔案大小 + + + + Quant + 量化 + + + + Type + 類型 + + AddModelView @@ -72,281 +533,231 @@ 探索模型 - + + GPT4All + GPT4All + + + + HuggingFace + + + Discover and download models by keyword search... - 透過關鍵字搜尋探索並下載模型...... + 透過關鍵字搜尋探索並下載模型...... - Text field for discovering and filtering downloadable models - 用於探索與過濾可下載模型的文字字段 + 用於探索與過濾可下載模型的文字字段 - Searching · %1 - 搜尋 · %1 + 搜尋 · %1 - Initiate model discovery and filtering - 探索與過濾模型 + 探索與過濾模型 - Triggers discovery and filtering of models - 觸發探索與過濾模型 + 觸發探索與過濾模型 - Default - 預設 + 預設 - Likes - + - Downloads - 下載次數 + 下載次數 - Recent - 最新 + 最新 - Sort by: %1 - 排序依據:%1 + 排序依據:%1 - Asc - 升序 + 升序 - Desc - 降序 + 降序 - Sort dir: %1 - 排序順序:%1 + 排序順序:%1 - None - + - Limit: %1 - 上限:%1 + 上限:%1 - Network error: could not retrieve %1 - 網路錯誤:無法取得 %1 + 網路錯誤:無法取得 %1 - <strong><font size="1"><a href="#error">Error</a></strong></font> - <strong><font size="1"><a href="#error">錯誤</a></strong></font> + <strong><font size="1"><a href="#error">錯誤</a></strong></font> - <strong><font size="2">WARNING: Not recommended for your hardware. Model requires more memory (%1 GB) than your system has available (%2).</strong></font> - <strong><font size="2">警告:不推薦在您的硬體上運作。模型需要比較多的記憶體(%1 GB),但您的系統記憶體空間不足(%2)。</strong></font> + <strong><font size="2">警告:不推薦在您的硬體上運作。模型需要比較多的記憶體(%1 GB),但您的系統記憶體空間不足(%2)。</strong></font> - %1 GB - %1 GB + %1 GB - - ? - + - - Busy indicator 參考自 https://terms.naer.edu.tw - 忙線指示器 + 忙線指示器 - Displayed when the models request is ongoing - 當模型請求正在進行時顯示 + 當模型請求正在進行時顯示 - Model file - 模型檔案 + 模型檔案 - Model file to be downloaded - 即將下載的模型檔案 + 即將下載的模型檔案 - Description - 描述 + 描述 - File description - 檔案描述 + 檔案描述 - Cancel - 取消 + 取消 - Resume - 恢復 + 恢復 - Download - 下載 + 下載 - Stop/restart/start the download - 停止/重啟/開始下載 + 停止/重啟/開始下載 - Remove - 移除 + 移除 - Remove model from filesystem - 從檔案系統移除模型 + 從檔案系統移除模型 - - Install - 安裝 + 安裝 - Install online model - 安裝線上模型 + 安裝線上模型 - Describes an error that occurred when downloading - 解釋下載時發生的錯誤 + 解釋下載時發生的錯誤 - Error for incompatible hardware - 錯誤,不相容的硬體 + 錯誤,不相容的硬體 - Download progressBar - 下載進度條 + 下載進度條 - Shows the progress made in the download - 顯示下載進度 + 顯示下載進度 - Download speed - 下載速度 + 下載速度 - Download speed in bytes/kilobytes/megabytes per second - 下載速度每秒 bytes/kilobytes/megabytes + 下載速度每秒 bytes/kilobytes/megabytes - Calculating... - 計算中...... + 計算中...... - - - - Whether the file hash is being calculated - 是否正在計算檔案雜湊 + 是否正在計算檔案雜湊 - Displayed when the file hash is being calculated - 計算檔案雜湊值時顯示 + 計算檔案雜湊值時顯示 - ERROR: $API_KEY is empty. - 錯誤:$API_KEY 未填寫。 + 錯誤:$API_KEY 未填寫。 - enter $API_KEY - 請輸入 $API_KEY + 請輸入 $API_KEY - ERROR: $BASE_URL is empty. - 錯誤:$BASE_URL 未填寫。 + 錯誤:$BASE_URL 未填寫。 - enter $BASE_URL - 請輸入 $BASE_URL + 請輸入 $BASE_URL - ERROR: $MODEL_NAME is empty. - 錯誤:$MODEL_NAME 未填寫。 + 錯誤:$MODEL_NAME 未填寫。 - enter $MODEL_NAME - 請輸入 $MODEL_NAME + 請輸入 $MODEL_NAME - File size - 檔案大小 + 檔案大小 - RAM required - 所需的記憶體 + 所需的記憶體 - Parameters - 參數 + 參數 - Quant - 量化 + 量化 - Type - 類型 + 類型 @@ -1686,78 +2097,78 @@ model to get started ModelList - - + + cannot open "%1": %2 無法開啟“%1”:%2 - + cannot create "%1": %2 無法建立“%1”:%2 - + %1 (%2) %1(%2) - + <strong>OpenAI-Compatible API Model</strong><br><ul><li>API Key: %1</li><li>Base URL: %2</li><li>Model Name: %3</li></ul> <strong>OpenAI API 相容模型</strong><br><ul><li>API 金鑰:%1</li><li>基底 URL:%2</li><li>模型名稱:%3</li></ul> - + <ul><li>Requires personal OpenAI API key.</li><li>WARNING: Will send your chats to OpenAI!</li><li>Your API key will be stored on disk</li><li>Will only be used to communicate with OpenAI</li><li>You can apply for an API key <a href="https://platform.openai.com/account/api-keys">here.</a></li> <ul><li>需要個人的 OpenAI API 金鑰。</li><li>警告:這將會傳送您的交談紀錄到 OpenAI</li><li>您的 API 金鑰將被儲存在硬碟上</li><li>它只被用於與 OpenAI 進行通訊</li><li>您可以在<a href="https://platform.openai.com/account/api-keys">此處</a>申請一個 API 金鑰。</li> - + <strong>OpenAI's ChatGPT model GPT-3.5 Turbo</strong><br> %1 <strong>OpenAI 的 ChatGPT 模型 GPT-3.5 Turbo</strong><br> %1 - + <br><br><i>* Even if you pay OpenAI for ChatGPT-4 this does not guarantee API key access. Contact OpenAI for more info. <br><br><i>* 即使您已向 OpenAI 付費購買了 ChatGPT 的 GPT-4 模型使用權,但這也不能保證您能擁有 API 金鑰的使用權限。請聯繫 OpenAI 以查閱更多資訊。 - + <strong>OpenAI's ChatGPT model GPT-4</strong><br> %1 %2 <strong>OpenAI 的 ChatGPT 模型 GPT-4</strong><br> %1 %2 - + <ul><li>Requires personal Mistral API key.</li><li>WARNING: Will send your chats to Mistral!</li><li>Your API key will be stored on disk</li><li>Will only be used to communicate with Mistral</li><li>You can apply for an API key <a href="https://console.mistral.ai/user/api-keys">here</a>.</li> <ul><li>需要個人的 Mistral API 金鑰。</li><li>警告:這將會傳送您的交談紀錄到 Mistral!</li><li>您的 API 金鑰將被儲存在硬碟上</li><li>它只被用於與 Mistral 進行通訊</li><li>您可以在<a href="https://console.mistral.ai/user/api-keys">此處</a>申請一個 API 金鑰。</li> - + <strong>Mistral Tiny model</strong><br> %1 <strong>Mistral 迷你模型</strong><br> %1 - + <strong>Mistral Small model</strong><br> %1 <strong>Mistral 小型模型</strong><br> %1 - + <strong>Mistral Medium model</strong><br> %1 <strong>Mistral 中型模型</strong><br> %1 - + <ul><li>Requires personal API key and the API base URL.</li><li>WARNING: Will send your chats to the OpenAI-compatible API Server you specified!</li><li>Your API key will be stored on disk</li><li>Will only be used to communicate with the OpenAI-compatible API Server</li> <ul><li>需要個人的 API 金鑰和 API 的基底 URL(Base URL)。</li><li>警告:這將會傳送您的交談紀錄到您所指定的 OpenAI API 相容伺服器</li><li>您的 API 金鑰將被儲存在硬碟上</li><li>它只被用於與其 OpenAI API 相容伺服器進行通訊</li> - + <strong>Connect to OpenAI-compatible API server</strong><br> %1 <strong>連線到 OpenAI API 相容伺服器</strong><br> %1 - + <strong>Created by %1.</strong><br><ul><li>Published on %2.<li>This model has %3 likes.<li>This model has %4 downloads.<li>More info can be found <a href="https://huggingface.co/%5">here.</a></ul> <strong>模型作者:%1</strong><br><ul><li>發佈日期:%2<li>累積讚數:%3 個讚<li>下載次數:%4 次<li>更多資訊請查閱<a href="https://huggingface.co/%5">此處</a>。</ul> @@ -2812,12 +3223,12 @@ Nomic AI 將保留附加在您的資料上的所有署名訊息,並且您將 伺服器模式已啟用 - + Installed models 已安裝的模型 - + View of installed models 已安裝的模型視圖