diff --git a/packages/core/src/PageAgentCore.ts b/packages/core/src/PageAgentCore.ts index f5dc5f3..14367be 100644 --- a/packages/core/src/PageAgentCore.ts +++ b/packages/core/src/PageAgentCore.ts @@ -21,7 +21,7 @@ import type { MacroToolInput, MacroToolResult, } from './types' -import { assert, normalizeResponse, trimLines, uid, waitFor } from './utils' +import { assert, normalizeResponse, uid, waitFor } from './utils' export { type PageAgentConfig } export { tool, type PageAgentTool } from './tools' @@ -428,7 +428,7 @@ export class PageAgentCore extends EventTarget { } /** - * Get instructions from config and format as XML block + * Get instructions from config */ async #getInstructions(): Promise { const { instructions } = this.config @@ -512,6 +512,7 @@ export class PageAgentCore extends EventTarget { let prompt = '' // (optional) + prompt += await this.#getInstructions() // @@ -521,38 +522,36 @@ export class PageAgentCore extends EventTarget { const stepCount = this.history.filter((e) => e.type === 'step').length - prompt += ` - - ${this.task} - - - Step ${stepCount + 1} of ${this.config.maxSteps} max possible steps - Current date and time: ${new Date().toLocaleString()} - - - ` + prompt += '\n' + prompt += '\n' + prompt += `${this.task}\n` + prompt += '\n' + prompt += '\n' + prompt += `Step ${stepCount + 1} of ${this.config.maxSteps} max possible steps\n` + prompt += `Current time: ${new Date().toLocaleString()}\n` + prompt += '\n' + prompt += '\n\n' // // - for steps // - for observations and system messages - prompt += '\n\n' + prompt += '\n' let stepIndex = 0 for (const event of this.history) { if (event.type === 'step') { stepIndex++ - prompt += ` - Evaluation of Previous Step: ${event.reflection.evaluation_previous_goal} - Memory: ${event.reflection.memory} - Next Goal: ${event.reflection.next_goal} - Action Results: ${event.action.output} - - ` + prompt += `\n` + prompt += `Evaluation of Previous Step: ${event.reflection.evaluation_previous_goal}\n` + prompt += `Memory: ${event.reflection.memory}\n` + prompt += `Next Goal: ${event.reflection.next_goal}\n` + prompt += `Action Results: ${event.action.output}\n` + prompt += `\n` } else if (event.type === 'observation') { prompt += `${event.content}\n` } else if (event.type === 'user_takeover') { - prompt += `User took over control and made changes to the page.\n` + prompt += `User took over control and made changes to the page\n` } else if (event.type === 'error') { // Error events are mainly for panel rendering, not included in LLM context // to avoid polluting the agent's reasoning with transient errors @@ -563,9 +562,20 @@ export class PageAgentCore extends EventTarget { // - prompt += await this.#getBrowserState() + const browserState = await this.pageController.getBrowserState() - return trimLines(prompt) + let pageContent = browserState.content + if (this.config.transformPageContent) { + pageContent = await this.config.transformPageContent(pageContent) + } + + prompt += '\n' + prompt += browserState.header + '\n' + prompt += pageContent + '\n' + prompt += browserState.footer + '\n\n' + prompt += '\n\n' + + return prompt } #onDone(success = true) { @@ -575,23 +585,6 @@ export class PageAgentCore extends EventTarget { this.#abortController.abort() } - async #getBrowserState(): Promise { - const state = await this.pageController.getBrowserState() - - let content = state.content - if (this.config.transformPageContent) { - content = await this.config.transformPageContent(content) - } - - return trimLines(` - ${state.header} - ${content} - ${state.footer} - - - `) - } - dispose() { console.log('Disposing PageAgent...') this.pageController.dispose() diff --git a/packages/core/src/utils/index.ts b/packages/core/src/utils/index.ts index 3ad473b..14b0e71 100644 --- a/packages/core/src/utils/index.ts +++ b/packages/core/src/utils/index.ts @@ -39,15 +39,6 @@ export function truncate(text: string, maxLength: number): string { // -export function trimLines(text: string): string { - return text - .split('\n') - .map((line) => line.trim()) - .join('\n') -} - -// - export function randomID(existingIDs?: string[]): string { let id = Math.random().toString(36).substring(2, 11)