support run_workflow wait_for_completion (#2947)
This commit is contained in:
@@ -11,6 +11,7 @@ from skyvern.client.core.pydantic_utilities import parse_obj_as
|
|||||||
from skyvern.client.environment import SkyvernEnvironment
|
from skyvern.client.environment import SkyvernEnvironment
|
||||||
from skyvern.client.types.get_run_response import GetRunResponse
|
from skyvern.client.types.get_run_response import GetRunResponse
|
||||||
from skyvern.client.types.task_run_response import TaskRunResponse
|
from skyvern.client.types.task_run_response import TaskRunResponse
|
||||||
|
from skyvern.client.types.workflow_run_response import WorkflowRunResponse
|
||||||
from skyvern.config import settings
|
from skyvern.config import settings
|
||||||
from skyvern.forge import app
|
from skyvern.forge import app
|
||||||
from skyvern.forge.sdk.core import security, skyvern_context
|
from skyvern.forge.sdk.core import security, skyvern_context
|
||||||
@@ -338,6 +339,7 @@ class Skyvern(AsyncSkyvern):
|
|||||||
proxy_location=proxy_location,
|
proxy_location=proxy_location,
|
||||||
totp_identifier=totp_identifier,
|
totp_identifier=totp_identifier,
|
||||||
totp_verification_url=totp_url,
|
totp_verification_url=totp_url,
|
||||||
|
browser_session_id=browser_session_id,
|
||||||
)
|
)
|
||||||
|
|
||||||
created_task = await app.agent.create_task(task_request, organization.organization_id)
|
created_task = await app.agent.create_task(task_request, organization.organization_id)
|
||||||
@@ -408,7 +410,45 @@ class Skyvern(AsyncSkyvern):
|
|||||||
if RunStatus(task_run.status).is_final():
|
if RunStatus(task_run.status).is_final():
|
||||||
break
|
break
|
||||||
await asyncio.sleep(DEFAULT_AGENT_HEARTBEAT_INTERVAL)
|
await asyncio.sleep(DEFAULT_AGENT_HEARTBEAT_INTERVAL)
|
||||||
return TaskRunResponse.model_validate(task_run.dict())
|
return TaskRunResponse.model_validate(task_run.model_dump())
|
||||||
|
|
||||||
|
async def run_workflow(
|
||||||
|
self,
|
||||||
|
workflow_id: str,
|
||||||
|
parameters: dict[str, Any] | None = None,
|
||||||
|
template: bool | None = None,
|
||||||
|
title: str | None = None,
|
||||||
|
proxy_location: ProxyLocation | None = None,
|
||||||
|
webhook_url: str | None = None,
|
||||||
|
totp_url: str | None = None,
|
||||||
|
totp_identifier: str | None = None,
|
||||||
|
browser_session_id: str | None = None,
|
||||||
|
wait_for_completion: bool = False,
|
||||||
|
timeout: float = DEFAULT_AGENT_TIMEOUT,
|
||||||
|
) -> WorkflowRunResponse:
|
||||||
|
if not self._api_key:
|
||||||
|
raise ValueError(
|
||||||
|
"Local mode is not supported for run_workflow. Please instantiate Skyvern with an API key like this: Skyvern(api_key='your-api-key')"
|
||||||
|
)
|
||||||
|
workflow_run = await super().run_workflow(
|
||||||
|
workflow_id=workflow_id,
|
||||||
|
parameters=parameters,
|
||||||
|
template=template,
|
||||||
|
title=title,
|
||||||
|
proxy_location=proxy_location,
|
||||||
|
webhook_url=webhook_url,
|
||||||
|
totp_url=totp_url,
|
||||||
|
totp_identifier=totp_identifier,
|
||||||
|
browser_session_id=browser_session_id,
|
||||||
|
)
|
||||||
|
if wait_for_completion:
|
||||||
|
async with asyncio.timeout(timeout):
|
||||||
|
while True:
|
||||||
|
workflow_run = await super().get_run(workflow_run.run_id)
|
||||||
|
if RunStatus(workflow_run.status).is_final():
|
||||||
|
break
|
||||||
|
await asyncio.sleep(DEFAULT_AGENT_HEARTBEAT_INTERVAL)
|
||||||
|
return WorkflowRunResponse.model_validate(workflow_run.model_dump())
|
||||||
|
|
||||||
|
|
||||||
def from_run_to_task_run_response(run_obj: GetRunResponse) -> TaskRunResponse:
|
def from_run_to_task_run_response(run_obj: GetRunResponse) -> TaskRunResponse:
|
||||||
|
|||||||
Reference in New Issue
Block a user