simplify create session (#1849)

This commit is contained in:
Shuchang Zheng
2025-02-26 17:49:36 -08:00
committed by GitHub
parent 995d9461b5
commit ea924f9467
2 changed files with 4 additions and 58 deletions

View File

@@ -1327,7 +1327,7 @@ async def get_browser_sessions(
async def create_browser_session( async def create_browser_session(
current_org: Organization = Depends(org_auth_service.get_current_org), current_org: Organization = Depends(org_auth_service.get_current_org),
) -> BrowserSessionResponse: ) -> BrowserSessionResponse:
browser_session, _ = await app.PERSISTENT_SESSIONS_MANAGER.create_session(current_org.organization_id) browser_session = await app.PERSISTENT_SESSIONS_MANAGER.create_session(current_org.organization_id)
return BrowserSessionResponse.from_browser_session(browser_session) return BrowserSessionResponse.from_browser_session(browser_session)

View File

@@ -1,18 +1,14 @@
from __future__ import annotations from __future__ import annotations
import asyncio
import socket
from dataclasses import dataclass from dataclasses import dataclass
from typing import Dict, List, Optional, Tuple from typing import Dict, List, Optional, Tuple
import structlog import structlog
from playwright._impl._errors import TargetClosedError from playwright._impl._errors import TargetClosedError
from playwright.async_api import async_playwright
from skyvern.forge.sdk.db.client import AgentDB from skyvern.forge.sdk.db.client import AgentDB
from skyvern.forge.sdk.schemas.persistent_browser_sessions import PersistentBrowserSession from skyvern.forge.sdk.schemas.persistent_browser_sessions import PersistentBrowserSession
from skyvern.forge.sdk.schemas.tasks import ProxyLocation from skyvern.webeye.browser_factory import BrowserState
from skyvern.webeye.browser_factory import BrowserContextFactory, BrowserState
LOG = structlog.get_logger() LOG = structlog.get_logger()
@@ -51,11 +47,9 @@ class PersistentSessionsManager:
async def create_session( async def create_session(
self, self,
organization_id: str, organization_id: str,
proxy_location: ProxyLocation | None = None,
url: str | None = None,
runnable_id: str | None = None, runnable_id: str | None = None,
runnable_type: str | None = None, runnable_type: str | None = None,
) -> Tuple[PersistentBrowserSession, BrowserState]: ) -> PersistentBrowserSession:
"""Create a new browser session for an organization and return its ID with the browser state.""" """Create a new browser session for an organization and return its ID with the browser state."""
LOG.info( LOG.info(
@@ -69,55 +63,7 @@ class PersistentSessionsManager:
runnable_id=runnable_id, runnable_id=runnable_id,
) )
cdp_port = None return browser_session_db
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.bind(("", 0))
cdp_port = s.getsockname()[1]
session_id = browser_session_db.persistent_browser_session_id
pw = await async_playwright().start()
browser_context, browser_artifacts, browser_cleanup = await BrowserContextFactory.create_browser_context(
pw,
proxy_location=proxy_location,
url=url,
organization_id=organization_id,
cdp_port=cdp_port,
)
async def on_context_close() -> None:
await self._clean_up_on_session_close(session_id, organization_id)
browser_context.on("close", lambda: asyncio.create_task(on_context_close()))
browser_state = BrowserState(
pw=pw,
browser_context=browser_context,
page=None,
browser_artifacts=browser_artifacts,
browser_cleanup=browser_cleanup,
)
browser_session = BrowserSession(
browser_state=browser_state,
cdp_port=cdp_port,
)
LOG.info(
"Created new browser session",
session_id=session_id,
cdp_port=cdp_port,
cdp_host="localhost",
)
self._browser_sessions[session_id] = browser_session
if url:
await browser_state.get_or_create_page(
url=url,
proxy_location=proxy_location,
organization_id=organization_id,
)
return browser_session_db, browser_state
async def occupy_browser_session( async def occupy_browser_session(
self, self,