src / index.ts
import {
type PromptPreprocessorController,
type ChatMessage,
type Chat,
PluginContext
} from '@lmstudio/sdk';
import { userMessageCount, getNewSystemPrompt } from './libs/utils';
export async function preprocess(
ctl: PromptPreprocessorController,
userMessage: ChatMessage
) {
const chat: Chat = await ctl.pullHistory();
if(userMessageCount(chat) === 0) {
const status = ctl.createStatus({
status: 'loading',
text: '🔍 Selecting prompt...'
});
try {
const newSysPrompt = await getNewSystemPrompt(userMessage.getText(), ctl);
if(newSysPrompt) {
chat.replaceSystemPrompt(newSysPrompt.preset);
status.setState({
status: 'done',
text: `Selected preset: ${newSysPrompt.preset}`
});
} else {
status.setState({
status: 'done',
text: 'Selected preset: none'
});
}
} catch (err) {
console.error(`[preprocessor] failed: ${err}`);
status.setState({
status: 'error',
text: `An error occurred: ${err}`
});
}
}
return userMessage;
}
export async function main(ctx: PluginContext) {
ctx.withPromptPreprocessor(preprocess);
}