2023-06-30 09:50:09 -04:00
import QtCore
import QtQuick
import QtQuick . Controls
import QtQuick . Controls . Basic
import QtQuick . Layouts
2023-07-01 11:34:21 -04:00
import modellist
2023-06-30 09:50:09 -04:00
import mysettings
2024-03-09 18:35:10 -05:00
import chatlistmodel
2023-06-30 09:50:09 -04:00
MySettingsTab {
2023-07-01 11:34:21 -04:00
onRestoreDefaultsClicked: {
MySettings . restoreModelDefaults ( root . currentModelInfo ) ;
}
title: qsTr ( "Model/Character Settings" )
2023-06-30 09:50:09 -04:00
contentItem: GridLayout {
2023-07-01 11:34:21 -04:00
id: root
columns: 3
2023-06-30 09:50:09 -04:00
rowSpacing: 10
columnSpacing: 10
2023-07-01 11:34:21 -04:00
property var currentModelName: comboBox . currentText
property var currentModelId: comboBox . currentValue
property var currentModelInfo: ModelList . modelInfo ( root . currentModelId )
2024-01-22 14:41:47 -05:00
MySettingsLabel {
2023-07-01 11:34:21 -04:00
id: label
Layout.row: 0
Layout.column: 0
2024-01-22 14:41:47 -05:00
text: qsTr ( "Model/Character" )
2023-07-01 11:34:21 -04:00
}
RowLayout {
Layout.fillWidth: true
Layout.row: 1
Layout.column: 0
Layout.columnSpan: 2
height: label . height + 20
spacing: 10
MyComboBox {
id: comboBox
Layout.fillWidth: true
model: ModelList . installedModels
valueRole: "id"
textRole: "name"
2024-03-11 14:00:33 -04:00
currentIndex: {
var i = comboBox . indexOfValue ( ChatListModel . currentChat . modelInfo . id ) ;
if ( i >= 0 )
return i ;
return 0 ;
}
2023-07-01 11:34:21 -04:00
contentItem: Text {
leftPadding: 10
rightPadding: 20
text: comboBox . currentText
font: comboBox . font
color: theme . textColor
verticalAlignment: Text . AlignVCenter
elide: Text . ElideRight
}
delegate: ItemDelegate {
width: comboBox . width
contentItem: Text {
text: name
color: theme . textColor
font: comboBox . font
elide: Text . ElideRight
verticalAlignment: Text . AlignVCenter
}
background: Rectangle {
2024-01-22 14:41:47 -05:00
color: highlighted ? theme.lightContrast : theme . darkContrast
2023-07-01 11:34:21 -04:00
}
highlighted: comboBox . highlightedIndex === index
}
}
2024-01-22 14:41:47 -05:00
MySettingsButton {
2023-07-01 11:34:21 -04:00
id: cloneButton
text: qsTr ( "Clone" )
onClicked: {
var id = ModelList . clone ( root . currentModelInfo ) ;
comboBox . currentIndex = comboBox . indexOfValue ( id ) ;
}
}
2024-01-22 14:41:47 -05:00
MySettingsDestructiveButton {
2023-07-01 11:34:21 -04:00
id: removeButton
enabled: root . currentModelInfo . isClone
text: qsTr ( "Remove" )
onClicked: {
2024-03-05 11:31:31 -05:00
ModelList . removeClone ( root . currentModelInfo ) ;
2023-07-01 11:34:21 -04:00
comboBox . currentIndex = 0 ;
}
}
}
RowLayout {
Layout.row: 2
Layout.column: 0
Layout.topMargin: 15
spacing: 10
2024-01-22 14:41:47 -05:00
MySettingsLabel {
2023-07-01 11:34:21 -04:00
id: uniqueNameLabel
2024-01-22 14:41:47 -05:00
text: qsTr ( "Unique Name" )
2023-07-01 11:34:21 -04:00
}
2024-01-22 14:41:47 -05:00
MySettingsLabel {
2023-07-01 11:34:21 -04:00
id: uniqueNameLabelHelp
visible: false
text: qsTr ( "Must contain a non-empty unique name that does not match any existing model/character." )
color: theme . textErrorColor
wrapMode: TextArea . Wrap
}
}
MyTextField {
id: uniqueNameField
text: root . currentModelName
2023-08-07 13:54:13 -04:00
font.pixelSize: theme . fontSizeLarge
2023-07-01 11:34:21 -04:00
enabled: root . currentModelInfo . isClone || root . currentModelInfo . description === ""
Layout.row: 3
Layout.column: 0
Layout.columnSpan: 2
Layout.fillWidth: true
Connections {
target: MySettings
function onNameChanged ( ) {
uniqueNameField . text = root . currentModelInfo . name ;
}
}
Connections {
target: root
function onCurrentModelInfoChanged ( ) {
uniqueNameField . text = root . currentModelInfo . name ;
}
}
onTextChanged: {
if ( text !== "" && ModelList . isUniqueName ( text ) ) {
MySettings . setModelName ( root . currentModelInfo , text ) ;
}
uniqueNameLabelHelp . visible = root . currentModelInfo . name !== "" &&
( text === "" || ( text !== root . currentModelInfo . name && ! ModelList . isUniqueName ( text ) ) ) ;
}
}
2024-01-22 14:41:47 -05:00
MySettingsLabel {
text: qsTr ( "Model File" )
2023-07-01 11:34:21 -04:00
Layout.row: 4
Layout.column: 0
Layout.topMargin: 15
}
MyTextField {
text: root . currentModelInfo . filename
2023-08-07 13:54:13 -04:00
font.pixelSize: theme . fontSizeLarge
2023-07-01 11:34:21 -04:00
enabled: false
Layout.row: 5
Layout.column: 0
Layout.columnSpan: 2
Layout.fillWidth: true
}
2024-01-22 14:41:47 -05:00
MySettingsLabel {
2024-02-22 12:51:44 -05:00
visible: ! root . currentModelInfo . isOnline
2024-01-22 14:41:47 -05:00
text: qsTr ( "System Prompt" )
2023-07-01 11:34:21 -04:00
Layout.row: 6
Layout.column: 0
Layout.topMargin: 15
}
Rectangle {
id: systemPrompt
2024-02-22 12:51:44 -05:00
visible: ! root . currentModelInfo . isOnline
2023-07-01 11:34:21 -04:00
Layout.row: 7
Layout.column: 0
Layout.columnSpan: 2
Layout.fillWidth: true
color: "transparent"
2023-07-06 17:10:57 -04:00
Layout.minimumHeight: Math . max ( 100 , systemPromptArea . contentHeight + 20 )
2024-01-22 14:41:47 -05:00
MyTextArea {
2023-07-01 11:34:21 -04:00
id: systemPromptArea
anchors.fill: parent
text: root . currentModelInfo . systemPrompt
Connections {
target: MySettings
function onSystemPromptChanged ( ) {
systemPromptArea . text = root . currentModelInfo . systemPrompt ;
}
}
Connections {
target: root
function onCurrentModelInfoChanged ( ) {
systemPromptArea . text = root . currentModelInfo . systemPrompt ;
}
}
onTextChanged: {
MySettings . setModelSystemPrompt ( root . currentModelInfo , text )
}
Accessible.role: Accessible . EditableText
ToolTip.text: qsTr ( "The systemPrompt allows instructions to the model at the beginning of a chat.\nNOTE: A longer, detailed system prompt can lead to higher quality answers, but can also slow down generation." )
ToolTip.visible: hovered
2024-01-22 14:41:47 -05:00
ToolTip.delay: Qt . styleHints . mousePressAndHoldInterval
2023-07-01 11:34:21 -04:00
}
}
RowLayout {
2023-06-30 09:50:09 -04:00
Layout.row: 8
2023-07-01 11:34:21 -04:00
Layout.column: 0
Layout.columnSpan: 2
Layout.topMargin: 15
spacing: 10
2024-01-22 14:41:47 -05:00
MySettingsLabel {
2023-07-01 11:34:21 -04:00
id: promptTemplateLabel
2024-01-22 14:41:47 -05:00
text: qsTr ( "Prompt Template" )
2023-07-01 11:34:21 -04:00
}
2024-01-22 14:41:47 -05:00
MySettingsLabel {
2023-07-01 11:34:21 -04:00
id: promptTemplateLabelHelp
text: qsTr ( "Must contain the string \"%1\" to be replaced with the user's input." )
color: theme . textErrorColor
visible: templateTextArea . text . indexOf ( "%1" ) === - 1
wrapMode: TextArea . Wrap
}
}
Rectangle {
id: promptTemplate
Layout.row: 9
Layout.column: 0
Layout.columnSpan: 2
Layout.fillWidth: true
2023-07-06 17:10:57 -04:00
Layout.minimumHeight: Math . max ( 100 , templateTextArea . contentHeight + 20 )
2023-07-01 11:34:21 -04:00
color: "transparent"
clip: true
2024-01-22 14:41:47 -05:00
MyTextArea {
2023-07-01 11:34:21 -04:00
id: templateTextArea
anchors.fill: parent
text: root . currentModelInfo . promptTemplate
Connections {
target: MySettings
function onPromptTemplateChanged ( ) {
templateTextArea . text = root . currentModelInfo . promptTemplate ;
}
}
Connections {
target: root
function onCurrentModelInfoChanged ( ) {
templateTextArea . text = root . currentModelInfo . promptTemplate ;
}
}
onTextChanged: {
if ( templateTextArea . text . indexOf ( "%1" ) !== - 1 ) {
MySettings . setModelPromptTemplate ( root . currentModelInfo , text )
}
}
Accessible.role: Accessible . EditableText
Accessible.name: promptTemplateLabel . text
Accessible.description: promptTemplateLabelHelp . text
ToolTip.text: qsTr ( "The prompt template partially determines how models will respond to prompts.\nNOTE: A longer, detailed template can lead to higher quality answers, but can also slow down generation." )
ToolTip.visible: hovered
2024-01-22 14:41:47 -05:00
ToolTip.delay: Qt . styleHints . mousePressAndHoldInterval
2023-07-01 11:34:21 -04:00
}
}
Rectangle {
id: optionalImageRect
visible: false // FIXME: for later
Layout.row: 2
2023-06-30 09:50:09 -04:00
Layout.column: 1
2023-07-01 11:34:21 -04:00
Layout.rowSpan: 5
Layout.alignment: Qt . AlignHCenter
Layout.fillHeight: true
Layout.maximumWidth: height
Layout.topMargin: 35
Layout.bottomMargin: 35
Layout.leftMargin: 35
width: 3000
radius: 10
color: "transparent"
Item {
anchors.centerIn: parent
height: childrenRect . height
Image {
id: img
anchors.horizontalCenter: parent . horizontalCenter
width: 100
height: 100
source: "qrc:/gpt4all/icons/image.svg"
}
Text {
text: qsTr ( "Add\noptional image" )
2023-08-07 13:54:13 -04:00
font.pixelSize: theme . fontSizeLarge
2023-07-01 11:34:21 -04:00
anchors.top: img . bottom
anchors.horizontalCenter: parent . horizontalCenter
wrapMode: TextArea . Wrap
horizontalAlignment: Qt . AlignHCenter
color: theme . mutedTextColor
}
}
}
2024-01-22 14:41:47 -05:00
MySettingsLabel {
2023-07-01 11:34:21 -04:00
text: qsTr ( "Generation Settings" )
Layout.row: 10
Layout.column: 0
Layout.columnSpan: 2
Layout.topMargin: 15
Layout.alignment: Qt . AlignHCenter
Layout.minimumWidth: promptTemplate . width
horizontalAlignment: Qt . AlignHCenter
2024-01-22 14:41:47 -05:00
font.pixelSize: theme . fontSizeLarge
2023-07-01 11:34:21 -04:00
font.bold: true
}
GridLayout {
Layout.row: 11
Layout.column: 0
Layout.columnSpan: 2
Layout.topMargin: 15
2023-06-30 09:50:09 -04:00
Layout.fillWidth: true
2023-07-01 11:34:21 -04:00
Layout.minimumWidth: promptTemplate . width
columns: 4
rowSpacing: 10
columnSpacing: 10
2024-01-22 14:41:47 -05:00
MySettingsLabel {
2023-12-16 17:58:15 -05:00
id: contextLengthLabel
2024-02-22 12:51:44 -05:00
visible: ! root . currentModelInfo . isOnline
2024-01-22 14:41:47 -05:00
text: qsTr ( "Context Length" )
2023-12-16 17:58:15 -05:00
Layout.row: 0
Layout.column: 0
}
MyTextField {
id: contextLengthField
2024-02-22 12:51:44 -05:00
visible: ! root . currentModelInfo . isOnline
2023-12-16 17:58:15 -05:00
text: root . currentModelInfo . contextLength
font.pixelSize: theme . fontSizeLarge
2024-01-22 14:41:47 -05:00
color: theme . textColor
2024-02-19 10:37:03 -05:00
ToolTip.text: qsTr ( "Maximum combined prompt/response tokens before information is lost.\nUsing more context than the model was trained on will yield poor results.\nNOTE: Does not take effect until you reload the model." )
2023-12-16 17:58:15 -05:00
ToolTip.visible: hovered
Layout.row: 0
Layout.column: 1
Connections {
target: MySettings
function onContextLengthChanged ( ) {
contextLengthField . text = root . currentModelInfo . contextLength ;
}
}
Connections {
target: root
function onCurrentModelInfoChanged ( ) {
contextLengthField . text = root . currentModelInfo . contextLength ;
}
}
onEditingFinished: {
var val = parseInt ( text )
2024-01-31 14:17:44 -05:00
if ( isNaN ( val ) ) {
text = root . currentModelInfo . contextLength
} else {
if ( val < 8 ) {
val = 8
contextLengthField . text = val
} else if ( val > root . currentModelInfo . maxContextLength ) {
val = root . currentModelInfo . maxContextLength
contextLengthField . text = val
}
2023-12-16 17:58:15 -05:00
MySettings . setModelContextLength ( root . currentModelInfo , val )
focus = false
}
}
Accessible.role: Accessible . EditableText
Accessible.name: contextLengthLabel . text
Accessible.description: ToolTip . text
}
2024-01-22 14:41:47 -05:00
MySettingsLabel {
2023-07-01 11:34:21 -04:00
id: tempLabel
2024-01-22 14:41:47 -05:00
text: qsTr ( "Temperature" )
2023-12-16 17:58:15 -05:00
Layout.row: 1
Layout.column: 2
2023-07-01 11:34:21 -04:00
}
MyTextField {
id: temperatureField
text: root . currentModelInfo . temperature
2023-08-07 13:54:13 -04:00
font.pixelSize: theme . fontSizeLarge
2024-01-22 14:41:47 -05:00
color: theme . textColor
2023-07-01 11:34:21 -04:00
ToolTip.text: qsTr ( "Temperature increases the chances of choosing less likely tokens.\nNOTE: Higher temperature gives more creative but less predictable outputs." )
ToolTip.visible: hovered
2023-12-16 17:58:15 -05:00
Layout.row: 1
Layout.column: 3
2023-07-01 11:34:21 -04:00
validator: DoubleValidator {
locale: "C"
}
Connections {
target: MySettings
function onTemperatureChanged ( ) {
temperatureField . text = root . currentModelInfo . temperature ;
}
}
Connections {
target: root
function onCurrentModelInfoChanged ( ) {
temperatureField . text = root . currentModelInfo . temperature ;
}
}
onEditingFinished: {
var val = parseFloat ( text )
if ( ! isNaN ( val ) ) {
MySettings . setModelTemperature ( root . currentModelInfo , val )
focus = false
} else {
text = root . currentModelInfo . temperature
}
}
Accessible.role: Accessible . EditableText
Accessible.name: tempLabel . text
Accessible.description: ToolTip . text
2023-06-30 09:50:09 -04:00
}
2024-01-22 14:41:47 -05:00
MySettingsLabel {
2023-07-01 11:34:21 -04:00
id: topPLabel
2024-01-22 14:41:47 -05:00
text: qsTr ( "Top P" )
2023-12-16 17:58:15 -05:00
Layout.row: 2
Layout.column: 0
2023-07-01 11:34:21 -04:00
}
MyTextField {
id: topPField
text: root . currentModelInfo . topP
color: theme . textColor
2023-08-07 13:54:13 -04:00
font.pixelSize: theme . fontSizeLarge
2023-07-01 11:34:21 -04:00
ToolTip.text: qsTr ( "Only the most likely tokens up to a total probability of top_p can be chosen.\nNOTE: Prevents choosing highly unlikely tokens, aka Nucleus Sampling" )
ToolTip.visible: hovered
2023-12-16 17:58:15 -05:00
Layout.row: 2
Layout.column: 1
2023-07-01 11:34:21 -04:00
validator: DoubleValidator {
locale: "C"
}
Connections {
target: MySettings
function onTopPChanged ( ) {
topPField . text = root . currentModelInfo . topP ;
}
}
Connections {
target: root
function onCurrentModelInfoChanged ( ) {
topPField . text = root . currentModelInfo . topP ;
}
}
onEditingFinished: {
var val = parseFloat ( text )
if ( ! isNaN ( val ) ) {
MySettings . setModelTopP ( root . currentModelInfo , val )
focus = false
} else {
text = root . currentModelInfo . topP
}
}
Accessible.role: Accessible . EditableText
Accessible.name: topPLabel . text
Accessible.description: ToolTip . text
}
2024-02-24 17:51:34 -05:00
MySettingsLabel {
2024-03-05 11:31:31 -05:00
id: minPLabel
2024-02-24 17:51:34 -05:00
text: qsTr ( "Min P" )
Layout.row: 3
Layout.column: 0
}
MyTextField {
id: minPField
text: root . currentModelInfo . minP
color: theme . textColor
font.pixelSize: theme . fontSizeLarge
ToolTip.text: qsTr ( "Sets the minimum relative probability for a token to be considered." )
ToolTip.visible: hovered
Layout.row: 3
Layout.column: 1
validator: DoubleValidator {
locale: "C"
}
Connections {
target: MySettings
function onMinPChanged ( ) {
minPField . text = root . currentModelInfo . minP ;
}
}
Connections {
target: root
function onCurrentModelInfoChanged ( ) {
minPField . text = root . currentModelInfo . minP ;
}
}
onEditingFinished: {
var val = parseFloat ( text )
if ( ! isNaN ( val ) ) {
MySettings . setModelMinP ( root . currentModelInfo , val )
focus = false
} else {
text = root . currentModelInfo . minP
}
}
Accessible.role: Accessible . EditableText
Accessible.name: minPLabel . text
Accessible.description: ToolTip . text
}
2024-01-22 14:41:47 -05:00
MySettingsLabel {
2023-07-01 11:34:21 -04:00
id: topKLabel
2024-02-22 12:51:44 -05:00
visible: ! root . currentModelInfo . isOnline
2024-01-22 14:41:47 -05:00
text: qsTr ( "Top K" )
2023-12-16 17:58:15 -05:00
Layout.row: 2
Layout.column: 2
2023-07-01 11:34:21 -04:00
}
MyTextField {
id: topKField
2024-02-22 12:51:44 -05:00
visible: ! root . currentModelInfo . isOnline
2023-07-01 11:34:21 -04:00
text: root . currentModelInfo . topK
color: theme . textColor
2023-08-07 13:54:13 -04:00
font.pixelSize: theme . fontSizeLarge
2023-07-01 11:34:21 -04:00
ToolTip.text: qsTr ( "Only the top K most likely tokens will be chosen from" )
ToolTip.visible: hovered
2023-12-16 17:58:15 -05:00
Layout.row: 2
Layout.column: 3
2023-07-01 11:34:21 -04:00
validator: IntValidator {
bottom: 1
}
Connections {
target: MySettings
function onTopKChanged ( ) {
topKField . text = root . currentModelInfo . topK ;
}
}
Connections {
target: root
function onCurrentModelInfoChanged ( ) {
topKField . text = root . currentModelInfo . topK ;
}
}
onEditingFinished: {
var val = parseInt ( text )
if ( ! isNaN ( val ) ) {
MySettings . setModelTopK ( root . currentModelInfo , val )
focus = false
} else {
text = root . currentModelInfo . topK
}
}
Accessible.role: Accessible . EditableText
Accessible.name: topKLabel . text
Accessible.description: ToolTip . text
}
2024-01-22 14:41:47 -05:00
MySettingsLabel {
2023-07-01 11:34:21 -04:00
id: maxLengthLabel
2024-02-22 12:51:44 -05:00
visible: ! root . currentModelInfo . isOnline
2024-01-22 14:41:47 -05:00
text: qsTr ( "Max Length" )
2023-12-16 17:58:15 -05:00
Layout.row: 0
2023-07-01 11:34:21 -04:00
Layout.column: 2
}
MyTextField {
id: maxLengthField
2024-02-22 12:51:44 -05:00
visible: ! root . currentModelInfo . isOnline
2023-07-01 11:34:21 -04:00
text: root . currentModelInfo . maxLength
color: theme . textColor
2023-08-07 13:54:13 -04:00
font.pixelSize: theme . fontSizeLarge
2023-07-01 11:34:21 -04:00
ToolTip.text: qsTr ( "Maximum length of response in tokens" )
ToolTip.visible: hovered
2023-12-16 17:58:15 -05:00
Layout.row: 0
2023-07-01 11:34:21 -04:00
Layout.column: 3
validator: IntValidator {
bottom: 1
}
Connections {
target: MySettings
function onMaxLengthChanged ( ) {
maxLengthField . text = root . currentModelInfo . maxLength ;
}
}
Connections {
target: root
function onCurrentModelInfoChanged ( ) {
maxLengthField . text = root . currentModelInfo . maxLength ;
}
}
onEditingFinished: {
var val = parseInt ( text )
if ( ! isNaN ( val ) ) {
MySettings . setModelMaxLength ( root . currentModelInfo , val )
focus = false
} else {
text = root . currentModelInfo . maxLength
}
}
Accessible.role: Accessible . EditableText
Accessible.name: maxLengthLabel . text
Accessible.description: ToolTip . text
}
2024-01-22 14:41:47 -05:00
MySettingsLabel {
2023-07-01 11:34:21 -04:00
id: batchSizeLabel
2024-02-22 12:51:44 -05:00
visible: ! root . currentModelInfo . isOnline
2024-01-22 14:41:47 -05:00
text: qsTr ( "Prompt Batch Size" )
2023-12-16 17:58:15 -05:00
Layout.row: 1
2023-07-01 11:34:21 -04:00
Layout.column: 0
}
MyTextField {
id: batchSizeField
2024-02-22 12:51:44 -05:00
visible: ! root . currentModelInfo . isOnline
2023-07-01 11:34:21 -04:00
text: root . currentModelInfo . promptBatchSize
color: theme . textColor
2023-08-07 13:54:13 -04:00
font.pixelSize: theme . fontSizeLarge
2023-07-01 11:34:21 -04:00
ToolTip.text: qsTr ( "Amount of prompt tokens to process at once.\nNOTE: Higher values can speed up reading prompts but will use more RAM" )
ToolTip.visible: hovered
2023-12-16 17:58:15 -05:00
Layout.row: 1
2023-07-01 11:34:21 -04:00
Layout.column: 1
validator: IntValidator {
bottom: 1
}
Connections {
target: MySettings
function onPromptBatchSizeChanged ( ) {
batchSizeField . text = root . currentModelInfo . promptBatchSize ;
}
}
Connections {
target: root
function onCurrentModelInfoChanged ( ) {
batchSizeField . text = root . currentModelInfo . promptBatchSize ;
}
}
onEditingFinished: {
var val = parseInt ( text )
if ( ! isNaN ( val ) ) {
MySettings . setModelPromptBatchSize ( root . currentModelInfo , val )
focus = false
} else {
text = root . currentModelInfo . promptBatchSize
}
}
Accessible.role: Accessible . EditableText
Accessible.name: batchSizeLabel . text
Accessible.description: ToolTip . text
}
2024-01-22 14:41:47 -05:00
MySettingsLabel {
2023-07-01 11:34:21 -04:00
id: repeatPenaltyLabel
2024-02-22 12:51:44 -05:00
visible: ! root . currentModelInfo . isOnline
2024-01-22 14:41:47 -05:00
text: qsTr ( "Repeat Penalty" )
2024-02-24 17:51:34 -05:00
Layout.row: 4
Layout.column: 2
2023-07-01 11:34:21 -04:00
}
MyTextField {
id: repeatPenaltyField
2024-02-22 12:51:44 -05:00
visible: ! root . currentModelInfo . isOnline
2023-07-01 11:34:21 -04:00
text: root . currentModelInfo . repeatPenalty
color: theme . textColor
2023-08-07 13:54:13 -04:00
font.pixelSize: theme . fontSizeLarge
2023-07-01 11:34:21 -04:00
ToolTip.text: qsTr ( "Amount to penalize repetitiveness of the output" )
ToolTip.visible: hovered
2024-02-24 17:51:34 -05:00
Layout.row: 4
Layout.column: 3
2023-07-01 11:34:21 -04:00
validator: DoubleValidator {
locale: "C"
}
Connections {
target: MySettings
function onRepeatPenaltyChanged ( ) {
repeatPenaltyField . text = root . currentModelInfo . repeatPenalty ;
}
}
Connections {
target: root
function onCurrentModelInfoChanged ( ) {
repeatPenaltyField . text = root . currentModelInfo . repeatPenalty ;
}
}
onEditingFinished: {
var val = parseFloat ( text )
if ( ! isNaN ( val ) ) {
MySettings . setModelRepeatPenalty ( root . currentModelInfo , val )
focus = false
} else {
text = root . currentModelInfo . repeatPenalty
}
}
Accessible.role: Accessible . EditableText
Accessible.name: repeatPenaltyLabel . text
Accessible.description: ToolTip . text
}
2024-01-22 14:41:47 -05:00
MySettingsLabel {
2023-07-01 11:34:21 -04:00
id: repeatPenaltyTokensLabel
2024-02-22 12:51:44 -05:00
visible: ! root . currentModelInfo . isOnline
2024-01-22 14:41:47 -05:00
text: qsTr ( "Repeat Penalty Tokens" )
2023-07-01 11:34:21 -04:00
Layout.row: 3
2023-12-16 17:58:15 -05:00
Layout.column: 2
2023-07-01 11:34:21 -04:00
}
MyTextField {
id: repeatPenaltyTokenField
2024-02-22 12:51:44 -05:00
visible: ! root . currentModelInfo . isOnline
2023-07-01 11:34:21 -04:00
text: root . currentModelInfo . repeatPenaltyTokens
color: theme . textColor
2023-08-07 13:54:13 -04:00
font.pixelSize: theme . fontSizeLarge
2023-07-01 11:34:21 -04:00
ToolTip.text: qsTr ( "How far back in output to apply repeat penalty" )
ToolTip.visible: hovered
Layout.row: 3
2023-12-16 17:58:15 -05:00
Layout.column: 3
2023-07-01 11:34:21 -04:00
validator: IntValidator {
bottom: 1
}
Connections {
target: MySettings
function onRepeatPenaltyTokensChanged ( ) {
repeatPenaltyTokenField . text = root . currentModelInfo . repeatPenaltyTokens ;
}
}
Connections {
target: root
function onCurrentModelInfoChanged ( ) {
repeatPenaltyTokenField . text = root . currentModelInfo . repeatPenaltyTokens ;
}
}
onEditingFinished: {
var val = parseInt ( text )
if ( ! isNaN ( val ) ) {
MySettings . setModelRepeatPenaltyTokens ( root . currentModelInfo , val )
focus = false
} else {
text = root . currentModelInfo . repeatPenaltyTokens
}
}
Accessible.role: Accessible . EditableText
Accessible.name: repeatPenaltyTokensLabel . text
Accessible.description: ToolTip . text
}
2024-01-31 14:17:44 -05:00
MySettingsLabel {
id: gpuLayersLabel
2024-02-22 12:51:44 -05:00
visible: ! root . currentModelInfo . isOnline
2024-01-31 14:17:44 -05:00
text: qsTr ( "GPU Layers" )
Layout.row: 4
Layout.column: 0
}
MyTextField {
id: gpuLayersField
2024-02-22 12:51:44 -05:00
visible: ! root . currentModelInfo . isOnline
2024-01-31 14:17:44 -05:00
text: root . currentModelInfo . gpuLayers
font.pixelSize: theme . fontSizeLarge
color: theme . textColor
2024-02-19 10:37:03 -05:00
ToolTip.text: qsTr ( "How many GPU layers to load into VRAM. Decrease this if GPT4All runs out of VRAM while loading this model.\nLower values increase CPU load and RAM usage, and make inference slower.\nNOTE: Does not take effect until you reload the model." )
2024-01-31 14:17:44 -05:00
ToolTip.visible: hovered
Layout.row: 4
Layout.column: 1
Connections {
target: MySettings
function onGpuLayersChanged ( ) {
gpuLayersField . text = root . currentModelInfo . gpuLayers
}
}
Connections {
target: root
function onCurrentModelInfoChanged ( ) {
2024-02-19 10:37:03 -05:00
if ( root . currentModelInfo . gpuLayers === 100 ) {
2024-01-31 14:17:44 -05:00
gpuLayersField . text = root . currentModelInfo . maxGpuLayers
} else {
gpuLayersField . text = root . currentModelInfo . gpuLayers
}
}
}
onEditingFinished: {
var val = parseInt ( text )
if ( isNaN ( val ) ) {
gpuLayersField . text = root . currentModelInfo . gpuLayers
} else {
if ( val < 1 ) {
val = 1
gpuLayersField . text = val
} else if ( val > root . currentModelInfo . maxGpuLayers ) {
val = root . currentModelInfo . maxGpuLayers
gpuLayersField . text = val
}
MySettings . setModelGpuLayers ( root . currentModelInfo , val )
focus = false
}
}
Accessible.role: Accessible . EditableText
Accessible.name: gpuLayersLabel . text
Accessible.description: ToolTip . text
}
2023-07-01 11:34:21 -04:00
}
Rectangle {
Layout.row: 12
Layout.column: 0
Layout.columnSpan: 2
Layout.topMargin: 15
Layout.fillWidth: true
Layout.minimumWidth: promptTemplate . width
2024-01-22 14:41:47 -05:00
height: 3
2024-01-29 11:12:12 -05:00
color: theme . accentColor
2023-06-30 09:50:09 -04:00
}
}
2023-08-07 13:54:13 -04:00
}