|
@@ -3,7 +3,7 @@ import logging
|
|
|
import threading
|
|
|
import uuid
|
|
|
from collections.abc import Generator, Mapping, Sequence
|
|
|
-from typing import Any, Literal, Optional, Union, overload
|
|
|
+from typing import Any, Optional, Union
|
|
|
|
|
|
from flask import Flask, current_app
|
|
|
from pydantic import ValidationError
|
|
@@ -30,43 +30,18 @@ logger = logging.getLogger(__name__)
|
|
|
|
|
|
|
|
|
class WorkflowAppGenerator(BaseAppGenerator):
|
|
|
- @overload
|
|
|
- def generate(
|
|
|
- self,
|
|
|
- app_model: App,
|
|
|
- workflow: Workflow,
|
|
|
- user: Union[Account, EndUser],
|
|
|
- args: dict,
|
|
|
- invoke_from: InvokeFrom,
|
|
|
- stream: Literal[True] = True,
|
|
|
- call_depth: int = 0,
|
|
|
- workflow_thread_pool_id: Optional[str] = None,
|
|
|
- ) -> Generator[str, None, None]: ...
|
|
|
-
|
|
|
- @overload
|
|
|
- def generate(
|
|
|
- self,
|
|
|
- app_model: App,
|
|
|
- workflow: Workflow,
|
|
|
- user: Union[Account, EndUser],
|
|
|
- args: dict,
|
|
|
- invoke_from: InvokeFrom,
|
|
|
- stream: Literal[False] = False,
|
|
|
- call_depth: int = 0,
|
|
|
- workflow_thread_pool_id: Optional[str] = None,
|
|
|
- ) -> dict: ...
|
|
|
-
|
|
|
def generate(
|
|
|
self,
|
|
|
+ *,
|
|
|
app_model: App,
|
|
|
workflow: Workflow,
|
|
|
- user: Union[Account, EndUser],
|
|
|
+ user: Account | EndUser,
|
|
|
args: Mapping[str, Any],
|
|
|
invoke_from: InvokeFrom,
|
|
|
- stream: bool = True,
|
|
|
+ streaming: bool = True,
|
|
|
call_depth: int = 0,
|
|
|
workflow_thread_pool_id: Optional[str] = None,
|
|
|
- ):
|
|
|
+ ) -> Mapping[str, Any] | Generator[str, None, None]:
|
|
|
files: Sequence[Mapping[str, Any]] = args.get("files") or []
|
|
|
|
|
|
# parse files
|
|
@@ -101,7 +76,7 @@ class WorkflowAppGenerator(BaseAppGenerator):
|
|
|
),
|
|
|
files=system_files,
|
|
|
user_id=user.id,
|
|
|
- stream=stream,
|
|
|
+ stream=streaming,
|
|
|
invoke_from=invoke_from,
|
|
|
call_depth=call_depth,
|
|
|
trace_manager=trace_manager,
|
|
@@ -115,7 +90,7 @@ class WorkflowAppGenerator(BaseAppGenerator):
|
|
|
user=user,
|
|
|
application_generate_entity=application_generate_entity,
|
|
|
invoke_from=invoke_from,
|
|
|
- stream=stream,
|
|
|
+ streaming=streaming,
|
|
|
workflow_thread_pool_id=workflow_thread_pool_id,
|
|
|
)
|
|
|
|
|
@@ -127,20 +102,9 @@ class WorkflowAppGenerator(BaseAppGenerator):
|
|
|
user: Union[Account, EndUser],
|
|
|
application_generate_entity: WorkflowAppGenerateEntity,
|
|
|
invoke_from: InvokeFrom,
|
|
|
- stream: bool = True,
|
|
|
+ streaming: bool = True,
|
|
|
workflow_thread_pool_id: Optional[str] = None,
|
|
|
- ) -> dict[str, Any] | Generator[str, None, None]:
|
|
|
- """
|
|
|
- Generate App response.
|
|
|
-
|
|
|
- :param app_model: App
|
|
|
- :param workflow: Workflow
|
|
|
- :param user: account or end user
|
|
|
- :param application_generate_entity: application generate entity
|
|
|
- :param invoke_from: invoke from source
|
|
|
- :param stream: is stream
|
|
|
- :param workflow_thread_pool_id: workflow thread pool id
|
|
|
- """
|
|
|
+ ) -> Mapping[str, Any] | Generator[str, None, None]:
|
|
|
# init queue manager
|
|
|
queue_manager = WorkflowAppQueueManager(
|
|
|
task_id=application_generate_entity.task_id,
|
|
@@ -169,14 +133,20 @@ class WorkflowAppGenerator(BaseAppGenerator):
|
|
|
workflow=workflow,
|
|
|
queue_manager=queue_manager,
|
|
|
user=user,
|
|
|
- stream=stream,
|
|
|
+ stream=streaming,
|
|
|
)
|
|
|
|
|
|
return WorkflowAppGenerateResponseConverter.convert(response=response, invoke_from=invoke_from)
|
|
|
|
|
|
def single_iteration_generate(
|
|
|
- self, app_model: App, workflow: Workflow, node_id: str, user: Account, args: dict, stream: bool = True
|
|
|
- ) -> dict[str, Any] | Generator[str, Any, None]:
|
|
|
+ self,
|
|
|
+ app_model: App,
|
|
|
+ workflow: Workflow,
|
|
|
+ node_id: str,
|
|
|
+ user: Account,
|
|
|
+ args: Mapping[str, Any],
|
|
|
+ streaming: bool = True,
|
|
|
+ ) -> Mapping[str, Any] | Generator[str, None, None]:
|
|
|
"""
|
|
|
Generate App response.
|
|
|
|
|
@@ -203,7 +173,7 @@ class WorkflowAppGenerator(BaseAppGenerator):
|
|
|
inputs={},
|
|
|
files=[],
|
|
|
user_id=user.id,
|
|
|
- stream=stream,
|
|
|
+ stream=streaming,
|
|
|
invoke_from=InvokeFrom.DEBUGGER,
|
|
|
extras={"auto_generate_conversation_name": False},
|
|
|
single_iteration_run=WorkflowAppGenerateEntity.SingleIterationRunEntity(
|
|
@@ -218,7 +188,7 @@ class WorkflowAppGenerator(BaseAppGenerator):
|
|
|
user=user,
|
|
|
invoke_from=InvokeFrom.DEBUGGER,
|
|
|
application_generate_entity=application_generate_entity,
|
|
|
- stream=stream,
|
|
|
+ streaming=streaming,
|
|
|
)
|
|
|
|
|
|
def _generate_worker(
|