You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
49 lines
1.7 KiB
49 lines
1.7 KiB
const AIbitat = require("../../agents/aibitat");
|
|
|
|
/**
|
|
* Execute an LLM instruction flow step
|
|
* @param {Object} config Flow step configuration
|
|
* @param {{introspect: Function, variables: Object, logger: Function}} context Execution context with introspect function
|
|
* @returns {Promise<string>} Processed result
|
|
*/
|
|
async function executeLLMInstruction(config, context) {
|
|
const { instruction, inputVariable, resultVariable } = config;
|
|
const { introspect, variables, logger } = context;
|
|
|
|
introspect(`Processing data with LLM instruction...`);
|
|
if (!variables[inputVariable]) {
|
|
logger(`Input variable ${inputVariable} not found`);
|
|
throw new Error(`Input variable ${inputVariable} not found`);
|
|
}
|
|
|
|
try {
|
|
introspect(`Sending request to LLM...`);
|
|
|
|
// Ensure the input is a string since we are sending it to the LLM direct as a message
|
|
let input = variables[inputVariable];
|
|
if (typeof input === "object") input = JSON.stringify(input);
|
|
if (typeof input !== "string") input = String(input);
|
|
|
|
const aibitat = new AIbitat();
|
|
const provider = aibitat.getProviderForConfig(aibitat.defaultProvider);
|
|
const completion = await provider.complete([
|
|
{
|
|
role: "system",
|
|
content: `Follow these instructions carefully: ${instruction}`,
|
|
},
|
|
{
|
|
role: "user",
|
|
content: input,
|
|
},
|
|
]);
|
|
|
|
introspect(`Successfully received LLM response`);
|
|
if (resultVariable) config.resultVariable = resultVariable;
|
|
return completion.result;
|
|
} catch (error) {
|
|
logger(`LLM processing failed: ${error.message}`, error);
|
|
throw new Error(`LLM processing failed: ${error.message}`);
|
|
}
|
|
}
|
|
|
|
module.exports = executeLLMInstruction;
|