From c8302c27ac2c61a3b765a89617be38642f87d694 Mon Sep 17 00:00:00 2001 From: Qu Yi Date: Sat, 9 Nov 2024 01:29:24 +0800 Subject: [PATCH] Improve the relevance of docs to !newAction("task") --- src/agent/action_manager.js | 2 +- src/agent/prompter.js | 19 +++++++++++++++---- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/src/agent/action_manager.js b/src/agent/action_manager.js index 5133a6b..c016e70 100644 --- a/src/agent/action_manager.js +++ b/src/agent/action_manager.js @@ -133,7 +133,7 @@ export class ActionManager { First outputs:\n${output.substring(0, MAX_OUT / 2)}\n...skipping many lines.\nFinal outputs:\n ${output.substring(output.length - MAX_OUT / 2)}`; } else { - output = 'Code output:\n' + output; + output = 'Code output:\n' + output.toString(); } return output; } diff --git a/src/agent/prompter.js b/src/agent/prompter.js index 06390e1..5952ac6 100644 --- a/src/agent/prompter.js +++ b/src/agent/prompter.js @@ -134,7 +134,7 @@ export class Prompter { this.coding_examples.load(this.profile.coding_examples), ...getSkillDocs().map(async (doc) => { let func_name_desc = doc.split('\n').slice(0, 2).join(''); - this.skill_docs_embeddings[doc] = await this.embedding_model.embed([func_name_desc]); + this.skill_docs_embeddings[doc] = await this.embedding_model.embed(func_name_desc); }) ]); @@ -199,9 +199,20 @@ export class Prompter { } if (prompt.includes('$COMMAND_DOCS')) prompt = prompt.replaceAll('$COMMAND_DOCS', getCommandDocs()); - if (prompt.includes('$CODE_DOCS')){ - let latest_message_content = messages.slice().reverse().find(msg => msg.role !== 'system')?.content || ''; - prompt = prompt.replaceAll('$CODE_DOCS', await this.getRelevantSkillDocs(latest_message_content, 5)); + if (prompt.includes('$CODE_DOCS')) { + // Find the most recent non-system message containing '!newAction(' + let code_task_content = messages.slice().reverse().find(msg => + msg.role !== 'system' && msg.content.includes('!newAction(') + )?.content || ''; + + // Extract content between '!newAction(' and ')' + const match = code_task_content.match(/!newAction\((.*?)\)/); + code_task_content = match ? match[1] : ''; + + prompt = prompt.replaceAll( + '$CODE_DOCS', + await this.getRelevantSkillDocs(code_task_content, 5) + ); } if (prompt.includes('$EXAMPLES') && examples !== null) prompt = prompt.replaceAll('$EXAMPLES', await examples.createExampleMessage(messages));