From 46b04c2863eba8c904fef206155735b203c2e77d Mon Sep 17 00:00:00 2001 From: RainbowBird Date: Tue, 7 Jan 2025 21:28:43 +0800 Subject: [PATCH] fix: chat history --- services/minecraft/src/components/aichat.ts | 27 ++++++++++++++------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/services/minecraft/src/components/aichat.ts b/services/minecraft/src/components/aichat.ts index 421dc6cce..f58fb40c2 100644 --- a/services/minecraft/src/components/aichat.ts +++ b/services/minecraft/src/components/aichat.ts @@ -1,30 +1,39 @@ import type { BotContext, ComponentLifecycle } from 'src/composables/bot' import { useLogg } from '@guiiai/logg' -import { messages, system, user } from 'neuri/openai' -import { getAgent } from 'src/agents/openai' -import { formBotChat } from 'src/middlewares/chat' -import { genActionAgentPrompt } from 'src/prompts/agent' +import { assistant, type Message, messages, system, user } from 'neuri/openai' +import { getAgent } from '../agents/openai' +import { formBotChat } from '../middlewares/chat' +import { genActionAgentPrompt } from '../prompts/agent' export function createAiChatComponent(ctx: BotContext): ComponentLifecycle { const logger = useLogg('aichat').useGlobalConfig() logger.log('Loading aichat plugin') + const historyMessage: Message[] = [] + historyMessage.push(system(genActionAgentPrompt(ctx))) + const onChat = formBotChat(ctx, async (username, message) => { logger.withFields({ username, message }).log('Chat message received') + historyMessage.push(user(`${username}: ${message}`)) + const agent = getAgent() - const content = await agent.handle(messages( - system(genActionAgentPrompt(ctx)), - user(`${username}: ${message}`), - ), async (c) => { + const content = await agent.handleStateless(messages(...historyMessage), async (c) => { logger.log('Generate response') try { - const completion = await c.reroute('action', c.messages, { model: 'openai/gpt-4o-mini' }) + const completion = await c.reroute('action', c.messages, { model: 'openai/gpt-4o-mini' }) || { error: { message: 'Unknown error' } } logger.withFields({ completion }).log('Completion') + if (!completion || 'error' in completion) { + logger.withFields(c).error('Completion') + throw new Error(completion?.error?.message ?? 'Unknown error') + } + const content = await completion?.firstContent() + historyMessage.push(assistant(content)) + return content } catch (e) {