1+ import asyncio
12import logging
23
34from browser_use import Agent
45from kernel import App , KernelContext
56from zenbase_llml import llml
67
78from lib .ai import AGENT_INSTRUCTIONS , ChatFactory
8- from lib .browser import create_browser
9+ from lib .browser import create_browser , downloaded_files
910from lib .models import BrowserAgentRequest , BrowserAgentResponse
11+ from lib .storage import upload_files , upload_json
1012
1113logger = logging .getLogger (__name__ )
1214
@@ -31,7 +33,7 @@ async def perform(ctx: KernelContext, params: dict):
3133 "input" : request .input ,
3234 "notes" : """
3335 Your browser will automatically:
34- 1. Download the PDF file upon viewing it. Just wait for it.
36+ 1. Download the PDF file upon viewing it. Just wait for it. You do not need to read the PDF.
3537 2. Solve CAPTCHAs or similar tests. Just wait for it.
3638 """ ,
3739 }
@@ -44,7 +46,16 @@ async def perform(ctx: KernelContext, params: dict):
4446 flash_mode = request .flash ,
4547 )
4648
47- history = await agent .run (max_steps = request .max_steps )
49+ trajectory = await agent .run (max_steps = request .max_steps )
4850
49- response = BrowserAgentResponse .build (session , agent , history )
51+ (downloads ,) = await asyncio .gather (
52+ upload_files (dir = session , files = downloaded_files (agent )),
53+ upload_json (trajectory .model_dump (), key = f"{ session } /trajectory.json" ),
54+ )
55+
56+ response = BrowserAgentResponse .from_run (
57+ trajectory ,
58+ session = session ,
59+ downloads = downloads ,
60+ )
5061 return response .model_dump ()
0 commit comments