Adding a new options parser and selector so all works with single choices
This commit is contained in:
parent
12456dc29e
commit
e4162bf03e
@ -2,7 +2,9 @@ const { EmbedBuilder } = require('discord.js');
|
|||||||
var unirest = require('unirest');
|
var unirest = require('unirest');
|
||||||
const jsonfile = require('jsonfile')
|
const jsonfile = require('jsonfile')
|
||||||
|
|
||||||
|
// Start session defaults:
|
||||||
var apiUrl = `http://${process.env.INTERNAL_IP}:8008/api/chat/`;
|
var apiUrl = `http://${process.env.INTERNAL_IP}:8008/api/chat/`;
|
||||||
|
|
||||||
var model = 'gpt4all';
|
var model = 'gpt4all';
|
||||||
var temperature = 0.1;
|
var temperature = 0.1;
|
||||||
var topK = 50;
|
var topK = 50;
|
||||||
@ -13,7 +15,10 @@ var repeatLastN = 64;
|
|||||||
var repeatPenalty = 1.3;
|
var repeatPenalty = 1.3;
|
||||||
var initPrompt = 'Below is an instruction that describes a task. Write a response that appropriately completes the request. The response must be accurate, concise and evidence-based whenever possible. A complete answer is always ended by [end of text].';
|
var initPrompt = 'Below is an instruction that describes a task. Write a response that appropriately completes the request. The response must be accurate, concise and evidence-based whenever possible. A complete answer is always ended by [end of text].';
|
||||||
var nThreads = 7;
|
var nThreads = 7;
|
||||||
|
// End session defaults
|
||||||
|
|
||||||
|
|
||||||
|
// Set model list we have downloaded
|
||||||
let modelList = ["7B", "7B-native", "gpt4all"]
|
let modelList = ["7B", "7B-native", "gpt4all"]
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
@ -31,26 +36,75 @@ module.exports = {
|
|||||||
"description": "A prompt you want to init the chat with, a default is used if not provided.",
|
"description": "A prompt you want to init the chat with, a default is used if not provided.",
|
||||||
"required": false,
|
"required": false,
|
||||||
"type": 3
|
"type": 3
|
||||||
}],
|
},
|
||||||
|
{
|
||||||
|
"name": "temperature",
|
||||||
|
"description": "The higher the temperature, the more random the model output. A default 0.1 is used if not provided.",
|
||||||
|
"required": false,
|
||||||
|
"type": 3
|
||||||
|
}
|
||||||
|
],
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
run: async (client, interaction) => {
|
run: async (client, interaction) => {
|
||||||
const file = './cache/' + interaction.user.id
|
const file = './cache/' + interaction.user.id
|
||||||
|
|
||||||
if (!interaction.options._hoistedOptions[1]) {
|
let options = interaction.options._hoistedOptions;
|
||||||
console.log("-- No init-prompt provided, using default --")
|
let varsToCheck = [
|
||||||
} else {
|
{ name: "model", value: null },
|
||||||
initPrompt = interaction.options._hoistedOptions[1].value
|
{ name: "temperature", value: null },
|
||||||
|
{ name: "init-prompt", value: null }
|
||||||
|
];
|
||||||
|
|
||||||
|
for (let i = 0; i < options.length; i++) {
|
||||||
|
let option = options[i];
|
||||||
|
for (let j = 0; j < varsToCheck.length; j++) {
|
||||||
|
let varToCheck = varsToCheck[j];
|
||||||
|
if (option.name === varToCheck.name) {
|
||||||
|
varToCheck.value = option.value;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
if (!interaction.options._hoistedOptions[0]) {
|
}
|
||||||
|
}
|
||||||
|
// Now you can access the values of each variable you are interested in:
|
||||||
|
let userInputModel = varsToCheck.find(v => v.name === "model")?.value;
|
||||||
|
let userInputTemperature = varsToCheck.find(v => v.name === "temperature")?.value;
|
||||||
|
let userInputInitPrompt = varsToCheck.find(v => v.name === "init-prompt")?.value;
|
||||||
|
|
||||||
|
// Init Prompt Setting
|
||||||
|
if (userInputInitPrompt === null) {
|
||||||
|
console.log("-- No init-prompt provided, using default --");
|
||||||
|
} else {
|
||||||
|
initPrompt = userInputInitPrompt;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Modal Setting
|
||||||
|
if (userInputModel === null) {
|
||||||
console.log("-- No model provided, using default --")
|
console.log("-- No model provided, using default --")
|
||||||
} else {
|
} else {
|
||||||
if (modelList.includes(interaction.options._hoistedOptions[0].value)) {
|
if (modelList.includes(userInputModel)) {
|
||||||
model = interaction.options._hoistedOptions[0].value
|
model = userInputModel;
|
||||||
} else {
|
} else {
|
||||||
let modelListStr = modelList.join(", ");
|
let modelListStr = modelList.join(", ");
|
||||||
return interaction.followUp(`You may only use one of the following: ${modelListStr}`);
|
return interaction.followUp(`You may only use one of the following: ${modelListStr}`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// temperature setting
|
||||||
|
if (userInputTemperature === null) {
|
||||||
|
console.log("-- No temperature provided, using default --")
|
||||||
|
} else {
|
||||||
|
const parsedTemperature = parseFloat(userInputTemperature);
|
||||||
|
if (parsedTemperature >= 0.1 && parsedTemperature <= 2) {
|
||||||
|
// temperature is within range
|
||||||
|
temperature = parsedTemperature;
|
||||||
|
} else {
|
||||||
|
// temperature is outside of range
|
||||||
|
return interaction.followUp(`Temperature must be between 0.1 and 2`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
var req = unirest('POST', apiUrl + '?model=' + model + '&temperature=' + temperature + '&top_k=' + topK + '&top_p=' + topP + '&max_length=' + maxLength + '&context_window=' + contextWindow + '&repeat_last_n=' + repeatLastN + '&repeat_penalty=' + repeatPenalty + '&init_prompt=' + initPrompt + '&n_threads=' + nThreads)
|
var req = unirest('POST', apiUrl + '?model=' + model + '&temperature=' + temperature + '&top_k=' + topK + '&top_p=' + topP + '&max_length=' + maxLength + '&context_window=' + contextWindow + '&repeat_last_n=' + repeatLastN + '&repeat_penalty=' + repeatPenalty + '&init_prompt=' + initPrompt + '&n_threads=' + nThreads)
|
||||||
.headers({
|
.headers({
|
||||||
'accept': 'application/json'
|
'accept': 'application/json'
|
||||||
|
Loading…
Reference in New Issue
Block a user