54 lines
1.8 KiB
TypeScript
54 lines
1.8 KiB
TypeScript
import { ChatInputCommandInteraction, SlashCommandBuilder } from 'discord.js';
|
|
import 'dotenv/config';
|
|
import { MikuAIProvider } from '../../provider/mikuai';
|
|
import { HuggingfaceProvider } from '../../provider/huggingface';
|
|
import { OpenAIProvider } from '../../provider/openai';
|
|
import { OllamaProvider } from '../../provider/ollama';
|
|
|
|
const PROVIDERS = {
|
|
mikuai: new MikuAIProvider(),
|
|
huggingface: new HuggingfaceProvider(),
|
|
openai: new OpenAIProvider(),
|
|
ollama: new OllamaProvider(),
|
|
};
|
|
let provider = PROVIDERS.openai;
|
|
|
|
async function providerCommand(interaction: ChatInputCommandInteraction) {
|
|
if (interaction.user.id !== process.env.ADMIN) {
|
|
await interaction.reply('You are not authorized to change model settings');
|
|
return;
|
|
}
|
|
|
|
const chosenProvider = interaction.options.getString('name', true);
|
|
if (Object.keys(PROVIDERS).includes(chosenProvider)) {
|
|
provider = PROVIDERS[chosenProvider];
|
|
}
|
|
const chosenModel = interaction.options.getString('model');
|
|
if (chosenModel) {
|
|
provider.setModel(chosenModel);
|
|
}
|
|
|
|
await interaction.reply(`Using provider \`${provider.name()}\`.`);
|
|
}
|
|
|
|
export = {
|
|
data: new SlashCommandBuilder()
|
|
.setName('provider')
|
|
.setDescription('Change model backend')
|
|
.addStringOption((opt) =>
|
|
opt
|
|
.setName('name')
|
|
.setDescription('Name of model backend')
|
|
.setRequired(true)
|
|
.addChoices(
|
|
...Object.keys(PROVIDERS).map((key) => ({
|
|
name: PROVIDERS[key].name(),
|
|
value: key,
|
|
}))
|
|
)
|
|
)
|
|
.addStringOption((opt) => opt.setName('model').setDescription('Model ID')),
|
|
execute: providerCommand,
|
|
state: () => provider,
|
|
};
|