diff --git a/packages/core/src/PageAgentCore.ts b/packages/core/src/PageAgentCore.ts index c9b0748..edc5bf6 100644 --- a/packages/core/src/PageAgentCore.ts +++ b/packages/core/src/PageAgentCore.ts @@ -227,24 +227,21 @@ export class PageAgentCore extends EventTarget { console.log(chalk.blue('Thinking...')) this.emitActivity({ type: 'thinking' }) - const result = await this.#llm.invoke( - [ - { - role: 'system', - content: this.#getSystemPrompt(), - }, - { - role: 'user', - content: await this.#assembleUserPrompt(), - }, - ], - { AgentOutput: this.#packMacroTool() }, - this.#abortController.signal, - { - toolChoiceName: 'AgentOutput', - normalizeResponse, - } - ) + // invoke LLM + + const messages = [ + { role: 'system' as const, content: this.#getSystemPrompt() }, + { role: 'user' as const, content: await this.#assembleUserPrompt() }, + ] + + const tools = { AgentOutput: this.#packMacroTool() } + + const result = await this.#llm.invoke(messages, tools, this.#abortController.signal, { + toolChoiceName: 'AgentOutput', + normalizeResponse, + }) + + // assemble history event const macroResult = result.toolResult as MacroToolResult const input = macroResult.input @@ -268,9 +265,12 @@ export class PageAgentCore extends EventTarget { action, usage: result.usage, rawResponse: result.rawResponse, + rawRequest: result.rawRequest, } as AgentStepEvent) this.#emitHistoryChange() + // + console.log(chalk.green('Step finished:'), actionName) console.groupEnd() @@ -278,7 +278,7 @@ export class PageAgentCore extends EventTarget { step++ if (step > this.config.maxSteps) { - this.#onDone('Step count exceeded maximum limit', false) + this.#onDone(false) const result: ExecutionResult = { success: false, data: 'Step count exceeded maximum limit', @@ -291,7 +291,7 @@ export class PageAgentCore extends EventTarget { const success = action.input?.success ?? false const text = action.input?.text || 'no text provided' console.log(chalk.green.bold('Task completed'), success, text) - this.#onDone(text, success) + this.#onDone(success) const result: ExecutionResult = { success, data: text, @@ -305,7 +305,7 @@ export class PageAgentCore extends EventTarget { console.error('Task failed', error) const errorMessage = String(error) this.emitActivity({ type: 'error', message: errorMessage }) - this.#onDone(errorMessage, false) + this.#onDone(false) const result: ExecutionResult = { success: false, data: errorMessage, @@ -556,7 +556,7 @@ export class PageAgentCore extends EventTarget { return trimLines(prompt) } - #onDone(text: string, success = true) { + #onDone(success = true) { this.pageController.cleanUpHighlights() this.pageController.hideMask() // No await - fire and forget this.#setStatus(success ? 'completed' : 'error') diff --git a/packages/core/src/types.ts b/packages/core/src/types.ts index 9672878..85129f4 100644 --- a/packages/core/src/types.ts +++ b/packages/core/src/types.ts @@ -51,6 +51,8 @@ export interface AgentStepEvent { } /** Raw LLM response for debugging */ rawResponse?: unknown + /** Raw LLM request for debugging */ + rawRequest?: unknown } /** diff --git a/packages/llms/src/OpenAIClient.ts b/packages/llms/src/OpenAIClient.ts index f9273a7..2f97759 100644 --- a/packages/llms/src/OpenAIClient.ts +++ b/packages/llms/src/OpenAIClient.ts @@ -39,6 +39,8 @@ export class OpenAIClient implements LLMClient { : 'required', } + modelPatch(requestBody) + // 2. Call API let response: Response try { @@ -48,7 +50,7 @@ export class OpenAIClient implements LLMClient { 'Content-Type': 'application/json', Authorization: `Bearer ${this.config.apiKey}`, }, - body: JSON.stringify(modelPatch(requestBody)), + body: JSON.stringify(requestBody), signal: abortSignal, }) } catch (error: unknown) { @@ -216,6 +218,7 @@ export class OpenAIClient implements LLMClient { reasoningTokens: data.usage?.completion_tokens_details?.reasoning_tokens, }, rawResponse: data, + rawRequest: requestBody, } } } diff --git a/packages/llms/src/types.ts b/packages/llms/src/types.ts index a3f819b..cd90387 100644 --- a/packages/llms/src/types.ts +++ b/packages/llms/src/types.ts @@ -81,6 +81,7 @@ export interface InvokeResult { reasoningTokens?: number // OpenAI o1 series reasoning tokens } rawResponse?: unknown // Raw response for debugging + rawRequest?: unknown // Raw request for debugging } /** diff --git a/packages/llms/src/utils.ts b/packages/llms/src/utils.ts index bc776b2..53d4049 100644 --- a/packages/llms/src/utils.ts +++ b/packages/llms/src/utils.ts @@ -27,6 +27,7 @@ export function zodToOpenAITool(name: string, tool: Tool) { /** * Patch model specific parameters + * @note in-place modification */ export function modelPatch(body: Record) { const model: string = body.model || ''