/*
 * Copyright (c) Huawei Technologies Co., Ltd. 2024-2025. All rights reserved.
 */
package magic.examples.file_assistant

import magic.dsl.*
import magic.prelude.*
import magic.config.Config
import magic.interaction.ConsolePrinter

const MARKDOWNIFY_DIR = "<path-to-markdownify-mcp>"
const MOUNT_DIR = "<path-to-mount>"
const DEEPSEEK_API_KEY = "<your api key>"

@agent[
    model: "deepseek:deepseek-chat",
    executor: "react",
    tools: [
        { command: "node", args: ["${MARKDOWNIFY_DIR}/dist/index.js"] },
        { command: "docker", args: [
            "run",
            "-i",
            "--rm",
            "--mount", "type=bind,src=${MOUNT_DIR},dst=/projects,ro",
            "mcp/filesystem",
            "/projects"
        ]}
    ]
]
class FileAssistant {
    @prompt[pattern: ERA] (
        expectation: "遵从指导逐步完成任务",
        role: "你是文件助手,帮助用户管理文件",
        action: """
        针对需求,逐步规划,你可以使用工具。
        但使用工具时,你需要注意:当你把文件路径传入 markdown 转换工具时,你需要修改文件路径:将文件路径中的 `/projects` 替换为 `${MOUNT_DIR}`,例如 /projects/a/b.pdf -> ${MOUNT_DIR}/a/b.pdf"""
    )
}

main() {
    Config.env["DEEPSEEK_API_KEY"] = DEEPSEEK_API_KEY

    let agent = FileAssistant()
    // println(agent.chat("帮我把所有 pdf 转换为 markdown 格式"))

    // 采用异步调用并打印中间信息
    let asyncResp = agent.asyncChat(
        AgentRequest("帮我把所有 pdf 转换为 markdown 格式", verbose: true)
    )

    // 打印中间信息
    let dumper = ConsolePrinter(asyncResp)
    dumper.start()

    // 打印结果
    for (data in asyncResp) {
        print(data)
    }
    println()
}