mirror of
https://github.com/nomic-ai/gpt4all
synced 2024-11-10 01:10:35 +00:00
302 lines
10 KiB
QML
302 lines
10 KiB
QML
import QtCore
|
|
import QtQuick
|
|
import QtQuick.Controls
|
|
import QtQuick.Controls.Basic
|
|
import QtQuick.Layouts
|
|
import localdocs
|
|
import mysettings
|
|
|
|
MySettingsTab {
|
|
title: qsTr("Generation")
|
|
contentItem: GridLayout {
|
|
id: generationSettingsTabInner
|
|
columns: 2
|
|
rowSpacing: 10
|
|
columnSpacing: 10
|
|
|
|
Label {
|
|
id: tempLabel
|
|
text: qsTr("Temperature:")
|
|
color: theme.textColor
|
|
Layout.row: 0
|
|
Layout.column: 0
|
|
}
|
|
MyTextField {
|
|
text: MySettings.temperature
|
|
color: theme.textColor
|
|
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
|
|
Layout.row: 0
|
|
Layout.column: 1
|
|
validator: DoubleValidator {
|
|
locale: "C"
|
|
}
|
|
onEditingFinished: {
|
|
var val = parseFloat(text)
|
|
if (!isNaN(val)) {
|
|
MySettings.temperature = val
|
|
focus = false
|
|
} else {
|
|
text = MySettings.temperature
|
|
}
|
|
}
|
|
Accessible.role: Accessible.EditableText
|
|
Accessible.name: tempLabel.text
|
|
Accessible.description: ToolTip.text
|
|
}
|
|
Label {
|
|
id: topPLabel
|
|
text: qsTr("Top P:")
|
|
color: theme.textColor
|
|
Layout.row: 1
|
|
Layout.column: 0
|
|
}
|
|
MyTextField {
|
|
text: MySettings.topP
|
|
color: theme.textColor
|
|
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
|
|
Layout.row: 1
|
|
Layout.column: 1
|
|
validator: DoubleValidator {
|
|
locale: "C"
|
|
}
|
|
onEditingFinished: {
|
|
var val = parseFloat(text)
|
|
if (!isNaN(val)) {
|
|
MySettings.topP = val
|
|
focus = false
|
|
} else {
|
|
text = MySettings.topP
|
|
}
|
|
}
|
|
Accessible.role: Accessible.EditableText
|
|
Accessible.name: topPLabel.text
|
|
Accessible.description: ToolTip.text
|
|
}
|
|
Label {
|
|
id: topKLabel
|
|
text: qsTr("Top K:")
|
|
color: theme.textColor
|
|
Layout.row: 2
|
|
Layout.column: 0
|
|
}
|
|
MyTextField {
|
|
text: MySettings.topK
|
|
color: theme.textColor
|
|
ToolTip.text: qsTr("Only the top K most likely tokens will be chosen from")
|
|
ToolTip.visible: hovered
|
|
Layout.row: 2
|
|
Layout.column: 1
|
|
validator: IntValidator {
|
|
bottom: 1
|
|
}
|
|
onEditingFinished: {
|
|
var val = parseInt(text)
|
|
if (!isNaN(val)) {
|
|
MySettings.topK = val
|
|
focus = false
|
|
} else {
|
|
text = MySettings.topK
|
|
}
|
|
}
|
|
Accessible.role: Accessible.EditableText
|
|
Accessible.name: topKLabel.text
|
|
Accessible.description: ToolTip.text
|
|
}
|
|
Label {
|
|
id: maxLengthLabel
|
|
text: qsTr("Max Length:")
|
|
color: theme.textColor
|
|
Layout.row: 3
|
|
Layout.column: 0
|
|
}
|
|
MyTextField {
|
|
text: MySettings.maxLength
|
|
color: theme.textColor
|
|
ToolTip.text: qsTr("Maximum length of response in tokens")
|
|
ToolTip.visible: hovered
|
|
Layout.row: 3
|
|
Layout.column: 1
|
|
validator: IntValidator {
|
|
bottom: 1
|
|
}
|
|
onEditingFinished: {
|
|
var val = parseInt(text)
|
|
if (!isNaN(val)) {
|
|
MySettings.maxLength = val
|
|
focus = false
|
|
} else {
|
|
text = MySettings.maxLength
|
|
}
|
|
}
|
|
Accessible.role: Accessible.EditableText
|
|
Accessible.name: maxLengthLabel.text
|
|
Accessible.description: ToolTip.text
|
|
}
|
|
|
|
Label {
|
|
id: batchSizeLabel
|
|
text: qsTr("Prompt Batch Size:")
|
|
color: theme.textColor
|
|
Layout.row: 4
|
|
Layout.column: 0
|
|
}
|
|
MyTextField {
|
|
text: MySettings.promptBatchSize
|
|
color: theme.textColor
|
|
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
|
|
Layout.row: 4
|
|
Layout.column: 1
|
|
validator: IntValidator {
|
|
bottom: 1
|
|
}
|
|
onEditingFinished: {
|
|
var val = parseInt(text)
|
|
if (!isNaN(val)) {
|
|
MySettings.promptBatchSize = val
|
|
focus = false
|
|
} else {
|
|
text = MySettings.promptBatchSize
|
|
}
|
|
}
|
|
Accessible.role: Accessible.EditableText
|
|
Accessible.name: batchSizeLabel.text
|
|
Accessible.description: ToolTip.text
|
|
}
|
|
Label {
|
|
id: repeatPenaltyLabel
|
|
text: qsTr("Repeat Penalty:")
|
|
color: theme.textColor
|
|
Layout.row: 5
|
|
Layout.column: 0
|
|
}
|
|
MyTextField {
|
|
text: MySettings.repeatPenalty
|
|
color: theme.textColor
|
|
ToolTip.text: qsTr("Amount to penalize repetitiveness of the output")
|
|
ToolTip.visible: hovered
|
|
Layout.row: 5
|
|
Layout.column: 1
|
|
validator: DoubleValidator {
|
|
locale: "C"
|
|
}
|
|
onEditingFinished: {
|
|
var val = parseFloat(text)
|
|
if (!isNaN(val)) {
|
|
MySettings.repeatPenalty = val
|
|
focus = false
|
|
} else {
|
|
text = MySettings.repeatPenalty
|
|
}
|
|
}
|
|
Accessible.role: Accessible.EditableText
|
|
Accessible.name: repeatPenaltyLabel.text
|
|
Accessible.description: ToolTip.text
|
|
}
|
|
Label {
|
|
id: repeatPenaltyTokensLabel
|
|
text: qsTr("Repeat Penalty Tokens:")
|
|
color: theme.textColor
|
|
Layout.row: 6
|
|
Layout.column: 0
|
|
}
|
|
MyTextField {
|
|
text: MySettings.repeatPenaltyTokens
|
|
color: theme.textColor
|
|
ToolTip.text: qsTr("How far back in output to apply repeat penalty")
|
|
ToolTip.visible: hovered
|
|
Layout.row: 6
|
|
Layout.column: 1
|
|
validator: IntValidator {
|
|
bottom: 1
|
|
}
|
|
onEditingFinished: {
|
|
var val = parseInt(text)
|
|
if (!isNaN(val)) {
|
|
MySettings.repeatPenaltyTokens = val
|
|
focus = false
|
|
} else {
|
|
text = MySettings.repeatPenaltyTokens
|
|
}
|
|
}
|
|
Accessible.role: Accessible.EditableText
|
|
Accessible.name: repeatPenaltyTokensLabel.text
|
|
Accessible.description: ToolTip.text
|
|
}
|
|
|
|
ColumnLayout {
|
|
Layout.row: 7
|
|
Layout.column: 0
|
|
Layout.topMargin: 10
|
|
Layout.alignment: Qt.AlignTop
|
|
spacing: 20
|
|
|
|
Label {
|
|
id: promptTemplateLabel
|
|
text: qsTr("Prompt Template:")
|
|
color: theme.textColor
|
|
}
|
|
|
|
Label {
|
|
id: promptTemplateLabelHelp
|
|
Layout.maximumWidth: promptTemplateLabel.width
|
|
visible: templateTextArea.text.indexOf(
|
|
"%1") === -1
|
|
color: theme.textErrorColor
|
|
text: qsTr("Must contain the string \"%1\" to be replaced with the user's input.")
|
|
wrapMode: TextArea.Wrap
|
|
Accessible.role: Accessible.EditableText
|
|
Accessible.name: text
|
|
}
|
|
}
|
|
|
|
Rectangle {
|
|
Layout.row: 7
|
|
Layout.column: 1
|
|
Layout.fillWidth: true
|
|
height: 200
|
|
color: "transparent"
|
|
clip: true
|
|
ScrollView {
|
|
id: templateScrollView
|
|
anchors.fill: parent
|
|
TextArea {
|
|
id: templateTextArea
|
|
text: MySettings.promptTemplate
|
|
color: theme.textColor
|
|
background: Rectangle {
|
|
implicitWidth: 150
|
|
color: theme.backgroundLighter
|
|
radius: 10
|
|
}
|
|
padding: 10
|
|
wrapMode: TextArea.Wrap
|
|
onTextChanged: {
|
|
if (templateTextArea.text.indexOf("%1") !== -1) {
|
|
MySettings.promptTemplate = text
|
|
}
|
|
}
|
|
bottomPadding: 10
|
|
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
|
|
}
|
|
}
|
|
}
|
|
MyButton {
|
|
Layout.row: 8
|
|
Layout.column: 1
|
|
Layout.fillWidth: true
|
|
text: qsTr("Restore Defaults")
|
|
Accessible.description: qsTr("Restores the settings dialog to a default state")
|
|
onClicked: {
|
|
MySettings.restoreGenerationDefaults();
|
|
templateTextArea.text = MySettings.promptTemplate
|
|
}
|
|
}
|
|
}
|
|
} |