@websolutespa/payload-plugin-bowl-llm
Version:
LLM plugin for Bowl PayloadCms plugin
98 lines (97 loc) • 4.35 kB
JavaScript
import { ResponseSuccess } from '@websolutespa/payload-utils/server';
import { addDataAndFileToRequest } from 'payload';
import { v4 as uuid } from 'uuid';
import { appHandler } from './app.handler';
import { errorHandler } from './error.handler';
import { pythonInvokeHandler } from './python/pythonInvoke.handler';
export const invokeHandler = async (req)=>{
try {
await addDataAndFileToRequest(req);
const app = await appHandler(req);
const systemMessage = app.settings.llmConfig.prompt.prompt?.systemMessage || app.settings.llmConfig.prompt.systemMessage;
if (!systemMessage) {
throw {
status: 500,
message: 'The application is not configured correctly: systemMessage is missing'
};
}
let requestTools = [];
const appTools = app.settings.appTools?.filter((x)=>x.isActive) || [];
if (appTools.length > 0) {
requestTools = appTools.map((tool)=>{
// Merge mcpSettings into secrets for mcp_tool
let secrets = tool.secrets || [];
if (tool.functionName === 'mcp_tool' && tool.mcpSettings) {
const mcpSecrets = [
{
secretId: 'mcp_url',
secretValue: tool.mcpSettings.mcpUrl || ''
},
{
secretId: 'mcp_tool_name',
secretValue: tool.mcpSettings.mcpToolName || ''
},
{
secretId: 'mcp_auth_token',
secretValue: tool.mcpSettings.mcpAuthToken || ''
}
];
secrets = [
...secrets,
...mcpSecrets
];
}
return {
name: tool.name,
description: tool.description,
type: tool.type,
functionId: tool.functionId,
functionName: tool.functionName,
functionDescription: tool.functionDescription,
secrets,
llmChainSettings: tool.llmChainSettings,
searchSettings: tool.searchSettings,
dataSource: tool.dataSource,
dbSettings: tool.dbSettings,
apiSettings: tool.apiSettings,
integrations: tool.knowledgeBase?.integrations || [],
waitingMessage: tool.waitingMessage,
vectorDbType: tool.knowledgeBase?.vectorDbType || '',
vectorDbFile: tool.knowledgeBase?.vectorDbFile?.filename,
rulesVectorDb: app.settings.rules.vectorDbFile?.filename
};
});
}
const request = {
mode: app.mode,
provider: app.settings.llmConfig.provider,
model: app.settings.llmConfig.model,
secrets: app.settings.llmConfig.secrets,
systemMessage: systemMessage,
systemContext: req.data?.systemContext || null,
tools: app.settings.llmConfig.tools,
appTools: requestTools,
vectorDb: app.settings.knowledgeBase.vectorDbFile?.filename,
rules: {
vectorDbFile: app.settings.rules.vectorDbFile?.filename,
threshold: app.settings.rules.threshold
},
fineTunedModel: app.settings?.fineTuning?.fineTunedModelName ?? '',
langChainTracing: app.settings?.llmConfig?.langChainTracing ?? false,
langChainProject: app.settings?.llmConfig?.langChainProject ?? '',
outputStructure: app.settings.llmConfig.outputStructure || null,
messages: [
{
role: 'user',
content: JSON.stringify((({ appKey, apiKey, ...o })=>o)(req.data))
}
],
threadId: uuid()
};
const response = await pythonInvokeHandler(request);
return ResponseSuccess(response);
} catch (error) {
return errorHandler(error);
}
};
//# sourceMappingURL=invoke.handler.js.map