import { HumanMessage, SystemMessage } from 'langchain/schema'
import { StructuredOutputParser } from 'langchain/output_parsers'
import { z } from 'zod'
import { uploadUml } from './upload'

export async function _createAbstract(tools, title, desc) {
    const { llm, usage, conversation } = tools
    let { content } = await llm.call([
        new HumanMessage(`我正在给我的毕业设计撰写一篇论文
我的毕业设计项目是${title}
这个项目包含以下功能：
${desc}

请你帮我的论文写一篇摘，然后抽取几个关键词
开始：#摘要`)
    ])

    const abstract = content.replace(/^摘要[：:][\s\n]+/, '')
    const { content: translated } = await llm.call([
        new SystemMessage(
            '我希望你能担任英语翻译、拼写校对和修辞改进的角色。请将我给你的内容，用更为优美和精炼的英语翻译给我。请确保意思不变，但使其更具文学性。'
        ),
        new HumanMessage(abstract)
    ])

    return `# 摘要\n\n${abstract}\n\n# Abstract\n\n${translated}`
}

export async function createAbstract(tools, title, desc) {
    const pRetry = (await eval("import('p-retry')")).default
    return await pRetry(() => _createAbstract(tools, title, desc), { retries: 5 })
}
