Files
2026-02-27 02:48:25 -08:00

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,
};