Files
dify/api/graphon/nodes/runtime.py

107 lines
2.8 KiB
Python

from __future__ import annotations
from collections.abc import Generator, Mapping, Sequence
from datetime import datetime
from typing import TYPE_CHECKING, Any, Protocol
from graphon.model_runtime.entities.llm_entities import LLMUsage
from graphon.nodes.tool_runtime_entities import (
ToolRuntimeHandle,
ToolRuntimeMessage,
ToolRuntimeParameter,
)
if TYPE_CHECKING:
from graphon.nodes.human_input.entities import HumanInputNodeData
from graphon.nodes.human_input.enums import HumanInputFormStatus
from graphon.nodes.tool.entities import ToolNodeData
from graphon.runtime import VariablePool
class ToolNodeRuntimeProtocol(Protocol):
"""Workflow-layer adapter owned by `core.workflow` and consumed by `graphon`.
The graph package depends only on these DTOs and lets the workflow layer
translate between graph-owned abstractions and `core.tools` internals.
"""
def get_runtime(
self,
*,
node_id: str,
node_data: ToolNodeData,
variable_pool: VariablePool | None,
) -> ToolRuntimeHandle: ...
def get_runtime_parameters(
self,
*,
tool_runtime: ToolRuntimeHandle,
) -> Sequence[ToolRuntimeParameter]: ...
def invoke(
self,
*,
tool_runtime: ToolRuntimeHandle,
tool_parameters: Mapping[str, Any],
workflow_call_depth: int,
provider_name: str,
) -> Generator[ToolRuntimeMessage, None, None]: ...
def get_usage(
self,
*,
tool_runtime: ToolRuntimeHandle,
) -> LLMUsage: ...
def build_file_reference(self, *, mapping: Mapping[str, Any]) -> Any: ...
def resolve_provider_icons(
self,
*,
provider_name: str,
default_icon: str | None = None,
) -> tuple[str | Mapping[str, str] | None, str | Mapping[str, str] | None]: ...
class HumanInputNodeRuntimeProtocol(Protocol):
"""Workflow-layer adapter for human-input runtime persistence and delivery."""
def get_form(
self,
*,
node_id: str,
) -> HumanInputFormStateProtocol | None: ...
def create_form(
self,
*,
node_id: str,
node_data: HumanInputNodeData,
rendered_content: str,
resolved_default_values: Mapping[str, Any],
) -> HumanInputFormStateProtocol: ...
class HumanInputFormStateProtocol(Protocol):
@property
def id(self) -> str: ...
@property
def rendered_content(self) -> str: ...
@property
def selected_action_id(self) -> str | None: ...
@property
def submitted_data(self) -> Mapping[str, Any] | None: ...
@property
def submitted(self) -> bool: ...
@property
def status(self) -> HumanInputFormStatus: ...
@property
def expiration_time(self) -> datetime: ...