import * as readline from 'node:readline/promises';
import { HumanMessage, BaseMessage } from "langchain";
import { agent } from '../src/lib/agent.js';
import { displayMessage } from '../src/lib/utils/helpers.js';

async function main() {
    const rl = readline.createInterface({
        input: process.stdin,
        output: process.stdout
    });

    const messages: Array<BaseMessage> = [];

    let shouldContinue = true;
    while (shouldContinue) {
        const prompt = await rl.question('ASK: ');

        if (prompt === 'exit' || prompt === 'quit' || prompt === 'bye') {
            shouldContinue = false
        } else {
            console.log(`Prompt: ${prompt}`);

            messages.push(new HumanMessage(prompt));

            const myAgent = await agent(prompt);
            const response = await myAgent.stream(
                {
                    messages: messages
                },
                {
                    streamMode: "values",
                }
            )

            let finalMessages: BaseMessage[] = [];

            for await (const step of response) {
                const lastMessage = step?.messages?.at(-1)
                displayMessage(lastMessage as BaseMessage)
                if (step?.messages) {
                    finalMessages = step.messages;
                }
            }

            if (finalMessages.length > 0) {
                messages.length = 0;
                messages.push(...finalMessages);
            }
        }
    }

    rl.close();
    console.log('Goodbye!');
}

main().catch(console.error)
