"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.TaskPrioritizationChain = void 0;
const prompts_1 = require("@langchain/core/prompts");
const llm_chain_js_1 = require("../../chains/llm_chain.cjs");
/** Chain to prioritize tasks. */
class TaskPrioritizationChain extends llm_chain_js_1.LLMChain {
    static lc_name() {
        return "TaskPrioritizationChain";
    }
    /**
     * Static method to create a new TaskPrioritizationChain from a
     * BaseLanguageModel. It generates a prompt using the PromptTemplate class
     * and the task prioritization template, and returns a new instance of
     * TaskPrioritizationChain.
     * @param fields Object with fields used to initialize the chain, excluding the prompt.
     * @returns A new instance of TaskPrioritizationChain.
     */
    static fromLLM(fields) {
        const taskPrioritizationTemplate = `You are a task prioritization AI tasked with cleaning the formatting of ` +
            `and reprioritizing the following tasks: {task_names}.` +
            ` Consider the ultimate objective of your team: {objective}.` +
            ` Do not remove any tasks. Return the result as a numbered list, like:` +
            ` #. First task` +
            ` #. Second task` +
            ` Start the task list with number {next_task_id}.`;
        const prompt = new prompts_1.PromptTemplate({
            template: taskPrioritizationTemplate,
            inputVariables: ["task_names", "next_task_id", "objective"],
        });
        return new TaskPrioritizationChain({ prompt, ...fields });
    }
}
exports.TaskPrioritizationChain = TaskPrioritizationChain;