Files
GenAIExamples/WorkflowExecAgent/tools/components/workflow.py
JoshuaL3000 bf5c391e47 Add Workflow Executor Example (#892)
Signed-off-by: JoshuaL3000 <joshua.jian.ern.liew@intel.com>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2024-10-31 20:50:20 -05:00

71 lines
2.1 KiB
Python

# Copyright (C) 2024 Intel Corporation
# SPDX-License-Identifier: Apache-2.0
import json
from typing import Dict
from tools.components.component import Component
class Workflow(Component):
"""Class for handling EasyData workflow operations.
Attributes:
workflow_id: workflow id
wf_key: workflow key. Generated and stored when starting a servable workflow.
"""
def __init__(self, request_handler, workflow_id=None, workflow_key=None):
super().__init__(request_handler)
self.workflow_id = workflow_id
self.wf_key = workflow_key
def start(self, params: Dict[str, str]) -> Dict[str, str]:
"""
``POST https://SDK_BASE_URL/serving/servable_workflows/{workflow_id}/start``
Starts a workflow instance with the workflow_id and parameters provided.
Returns a workflow key used to track the workflow instance.
:param dict params: Workflow parameters used to start workflow.
:returns: WorkflowKey
:rtype: string
"""
data = json.dumps({"params": params})
endpoint = f"serving/servable_workflows/{self.workflow_id}/start"
self.wf_key = self._make_request(endpoint, "POST", data)["wf_key"]
if self.wf_key:
return f"Workflow successfully started. The workflow key is {self.wf_key}."
else:
return "Workflow failed to start"
def get_status(self) -> Dict[str, str]:
"""
``GET https://SDK_BASE_URL/serving/serving_workflows/{workflow_key}/status``
Gets the workflow status.
:returns: WorkflowStatus
:rtype: string
"""
endpoint = f"serving/serving_workflows/{self.wf_key}/status"
return self._make_request(endpoint, "GET")
def result(self) -> list[Dict[str, str]]:
"""
``GET https://SDK_BASE_URL/serving/serving_workflows/{workflow_key}/results``
Gets the workflow output result.
:returns: WorkflowOutputData
:rtype: string
"""
endpoint = f"serving/serving_workflows/{self.wf_key}/results"
return self._make_request(endpoint, "GET")