mirror of
https://github.com/langgenius/dify.git
synced 2026-01-30 23:59:14 +08:00
- Refactored DraftWorkflowTriggerNodeApi and DraftWorkflowTriggerRunApi to implement polling for trigger events instead of listening, improving responsiveness and reliability. - Introduced TriggerSubscriptionBuilderGetApi to retrieve subscription instances for trigger providers, enhancing the API's capabilities. - Removed deprecated trigger event classes and streamlined event handling in TriggerDebugService, ensuring a cleaner architecture. - Updated Queue and Stream entities to reflect the changes in trigger event handling, improving overall clarity and maintainability. These enhancements significantly improve the trigger debugging experience and API usability.
840 lines
21 KiB
Python
840 lines
21 KiB
Python
from collections.abc import Mapping, Sequence
|
|
from enum import Enum
|
|
from typing import Any, Optional
|
|
|
|
from pydantic import BaseModel, ConfigDict, Field
|
|
|
|
from core.model_runtime.entities.llm_entities import LLMResult, LLMUsage
|
|
from core.model_runtime.utils.encoders import jsonable_encoder
|
|
from core.rag.entities.citation_metadata import RetrievalSourceMetadata
|
|
from core.workflow.entities.node_entities import AgentNodeStrategyInit
|
|
from core.workflow.entities.workflow_node_execution import WorkflowNodeExecutionMetadataKey, WorkflowNodeExecutionStatus
|
|
|
|
|
|
class AnnotationReplyAccount(BaseModel):
|
|
id: str
|
|
name: str
|
|
|
|
|
|
class AnnotationReply(BaseModel):
|
|
id: str
|
|
account: AnnotationReplyAccount
|
|
|
|
|
|
class TaskStateMetadata(BaseModel):
|
|
annotation_reply: AnnotationReply | None = None
|
|
retriever_resources: Sequence[RetrievalSourceMetadata] = Field(default_factory=list)
|
|
usage: LLMUsage | None = None
|
|
|
|
|
|
class TaskState(BaseModel):
|
|
"""
|
|
TaskState entity
|
|
"""
|
|
|
|
metadata: TaskStateMetadata = Field(default_factory=TaskStateMetadata)
|
|
|
|
|
|
class EasyUITaskState(TaskState):
|
|
"""
|
|
EasyUITaskState entity
|
|
"""
|
|
|
|
llm_result: LLMResult
|
|
|
|
|
|
class WorkflowTaskState(TaskState):
|
|
"""
|
|
WorkflowTaskState entity
|
|
"""
|
|
|
|
answer: str = ""
|
|
|
|
|
|
class StreamEvent(Enum):
|
|
"""
|
|
Stream event
|
|
"""
|
|
|
|
PING = "ping"
|
|
ERROR = "error"
|
|
MESSAGE = "message"
|
|
MESSAGE_END = "message_end"
|
|
TTS_MESSAGE = "tts_message"
|
|
TTS_MESSAGE_END = "tts_message_end"
|
|
MESSAGE_FILE = "message_file"
|
|
MESSAGE_REPLACE = "message_replace"
|
|
AGENT_THOUGHT = "agent_thought"
|
|
AGENT_MESSAGE = "agent_message"
|
|
WORKFLOW_STARTED = "workflow_started"
|
|
WORKFLOW_FINISHED = "workflow_finished"
|
|
NODE_STARTED = "node_started"
|
|
NODE_FINISHED = "node_finished"
|
|
NODE_RETRY = "node_retry"
|
|
PARALLEL_BRANCH_STARTED = "parallel_branch_started"
|
|
PARALLEL_BRANCH_FINISHED = "parallel_branch_finished"
|
|
ITERATION_STARTED = "iteration_started"
|
|
ITERATION_NEXT = "iteration_next"
|
|
ITERATION_COMPLETED = "iteration_completed"
|
|
LOOP_STARTED = "loop_started"
|
|
LOOP_NEXT = "loop_next"
|
|
LOOP_COMPLETED = "loop_completed"
|
|
TEXT_CHUNK = "text_chunk"
|
|
TEXT_REPLACE = "text_replace"
|
|
AGENT_LOG = "agent_log"
|
|
|
|
|
|
class StreamResponse(BaseModel):
|
|
"""
|
|
StreamResponse entity
|
|
"""
|
|
|
|
event: StreamEvent
|
|
task_id: str
|
|
|
|
def to_dict(self):
|
|
return jsonable_encoder(self)
|
|
|
|
|
|
class ErrorStreamResponse(StreamResponse):
|
|
"""
|
|
ErrorStreamResponse entity
|
|
"""
|
|
|
|
event: StreamEvent = StreamEvent.ERROR
|
|
err: Exception
|
|
model_config = ConfigDict(arbitrary_types_allowed=True)
|
|
|
|
|
|
class MessageStreamResponse(StreamResponse):
|
|
"""
|
|
MessageStreamResponse entity
|
|
"""
|
|
|
|
event: StreamEvent = StreamEvent.MESSAGE
|
|
id: str
|
|
answer: str
|
|
from_variable_selector: Optional[list[str]] = None
|
|
|
|
|
|
class MessageAudioStreamResponse(StreamResponse):
|
|
"""
|
|
MessageStreamResponse entity
|
|
"""
|
|
|
|
event: StreamEvent = StreamEvent.TTS_MESSAGE
|
|
audio: str
|
|
|
|
|
|
class MessageAudioEndStreamResponse(StreamResponse):
|
|
"""
|
|
MessageStreamResponse entity
|
|
"""
|
|
|
|
event: StreamEvent = StreamEvent.TTS_MESSAGE_END
|
|
audio: str
|
|
|
|
|
|
class MessageEndStreamResponse(StreamResponse):
|
|
"""
|
|
MessageEndStreamResponse entity
|
|
"""
|
|
|
|
event: StreamEvent = StreamEvent.MESSAGE_END
|
|
id: str
|
|
metadata: dict = Field(default_factory=dict)
|
|
files: Optional[Sequence[Mapping[str, Any]]] = None
|
|
|
|
|
|
class MessageFileStreamResponse(StreamResponse):
|
|
"""
|
|
MessageFileStreamResponse entity
|
|
"""
|
|
|
|
event: StreamEvent = StreamEvent.MESSAGE_FILE
|
|
id: str
|
|
type: str
|
|
belongs_to: str
|
|
url: str
|
|
|
|
|
|
class MessageReplaceStreamResponse(StreamResponse):
|
|
"""
|
|
MessageReplaceStreamResponse entity
|
|
"""
|
|
|
|
event: StreamEvent = StreamEvent.MESSAGE_REPLACE
|
|
answer: str
|
|
reason: str
|
|
|
|
|
|
class AgentThoughtStreamResponse(StreamResponse):
|
|
"""
|
|
AgentThoughtStreamResponse entity
|
|
"""
|
|
|
|
event: StreamEvent = StreamEvent.AGENT_THOUGHT
|
|
id: str
|
|
position: int
|
|
thought: Optional[str] = None
|
|
observation: Optional[str] = None
|
|
tool: Optional[str] = None
|
|
tool_labels: Optional[dict] = None
|
|
tool_input: Optional[str] = None
|
|
message_files: Optional[list[str]] = None
|
|
|
|
|
|
class AgentMessageStreamResponse(StreamResponse):
|
|
"""
|
|
AgentMessageStreamResponse entity
|
|
"""
|
|
|
|
event: StreamEvent = StreamEvent.AGENT_MESSAGE
|
|
id: str
|
|
answer: str
|
|
|
|
|
|
class WorkflowStartStreamResponse(StreamResponse):
|
|
"""
|
|
WorkflowStartStreamResponse entity
|
|
"""
|
|
|
|
class Data(BaseModel):
|
|
"""
|
|
Data entity
|
|
"""
|
|
|
|
id: str
|
|
workflow_id: str
|
|
inputs: Mapping[str, Any]
|
|
created_at: int
|
|
|
|
event: StreamEvent = StreamEvent.WORKFLOW_STARTED
|
|
workflow_run_id: str
|
|
data: Data
|
|
|
|
|
|
class WorkflowFinishStreamResponse(StreamResponse):
|
|
"""
|
|
WorkflowFinishStreamResponse entity
|
|
"""
|
|
|
|
class Data(BaseModel):
|
|
"""
|
|
Data entity
|
|
"""
|
|
|
|
id: str
|
|
workflow_id: str
|
|
status: str
|
|
outputs: Optional[Mapping[str, Any]] = None
|
|
error: Optional[str] = None
|
|
elapsed_time: float
|
|
total_tokens: int
|
|
total_steps: int
|
|
created_by: Optional[dict] = None
|
|
created_at: int
|
|
finished_at: int
|
|
exceptions_count: Optional[int] = 0
|
|
files: Optional[Sequence[Mapping[str, Any]]] = []
|
|
|
|
event: StreamEvent = StreamEvent.WORKFLOW_FINISHED
|
|
workflow_run_id: str
|
|
data: Data
|
|
|
|
|
|
class NodeStartStreamResponse(StreamResponse):
|
|
"""
|
|
NodeStartStreamResponse entity
|
|
"""
|
|
|
|
class Data(BaseModel):
|
|
"""
|
|
Data entity
|
|
"""
|
|
|
|
id: str
|
|
node_id: str
|
|
node_type: str
|
|
title: str
|
|
index: int
|
|
predecessor_node_id: Optional[str] = None
|
|
inputs: Optional[Mapping[str, Any]] = None
|
|
created_at: int
|
|
extras: dict = Field(default_factory=dict)
|
|
parallel_id: Optional[str] = None
|
|
parallel_start_node_id: Optional[str] = None
|
|
parent_parallel_id: Optional[str] = None
|
|
parent_parallel_start_node_id: Optional[str] = None
|
|
iteration_id: Optional[str] = None
|
|
loop_id: Optional[str] = None
|
|
parallel_run_id: Optional[str] = None
|
|
agent_strategy: Optional[AgentNodeStrategyInit] = None
|
|
|
|
event: StreamEvent = StreamEvent.NODE_STARTED
|
|
workflow_run_id: str
|
|
data: Data
|
|
|
|
def to_ignore_detail_dict(self):
|
|
return {
|
|
"event": self.event.value,
|
|
"task_id": self.task_id,
|
|
"workflow_run_id": self.workflow_run_id,
|
|
"data": {
|
|
"id": self.data.id,
|
|
"node_id": self.data.node_id,
|
|
"node_type": self.data.node_type,
|
|
"title": self.data.title,
|
|
"index": self.data.index,
|
|
"predecessor_node_id": self.data.predecessor_node_id,
|
|
"inputs": None,
|
|
"created_at": self.data.created_at,
|
|
"extras": {},
|
|
"parallel_id": self.data.parallel_id,
|
|
"parallel_start_node_id": self.data.parallel_start_node_id,
|
|
"parent_parallel_id": self.data.parent_parallel_id,
|
|
"parent_parallel_start_node_id": self.data.parent_parallel_start_node_id,
|
|
"iteration_id": self.data.iteration_id,
|
|
"loop_id": self.data.loop_id,
|
|
},
|
|
}
|
|
|
|
|
|
class NodeFinishStreamResponse(StreamResponse):
|
|
"""
|
|
NodeFinishStreamResponse entity
|
|
"""
|
|
|
|
class Data(BaseModel):
|
|
"""
|
|
Data entity
|
|
"""
|
|
|
|
id: str
|
|
node_id: str
|
|
node_type: str
|
|
title: str
|
|
index: int
|
|
predecessor_node_id: Optional[str] = None
|
|
inputs: Optional[Mapping[str, Any]] = None
|
|
process_data: Optional[Mapping[str, Any]] = None
|
|
outputs: Optional[Mapping[str, Any]] = None
|
|
status: str
|
|
error: Optional[str] = None
|
|
elapsed_time: float
|
|
execution_metadata: Optional[Mapping[WorkflowNodeExecutionMetadataKey, Any]] = None
|
|
created_at: int
|
|
finished_at: int
|
|
files: Optional[Sequence[Mapping[str, Any]]] = []
|
|
parallel_id: Optional[str] = None
|
|
parallel_start_node_id: Optional[str] = None
|
|
parent_parallel_id: Optional[str] = None
|
|
parent_parallel_start_node_id: Optional[str] = None
|
|
iteration_id: Optional[str] = None
|
|
loop_id: Optional[str] = None
|
|
|
|
event: StreamEvent = StreamEvent.NODE_FINISHED
|
|
workflow_run_id: str
|
|
data: Data
|
|
|
|
def to_ignore_detail_dict(self):
|
|
return {
|
|
"event": self.event.value,
|
|
"task_id": self.task_id,
|
|
"workflow_run_id": self.workflow_run_id,
|
|
"data": {
|
|
"id": self.data.id,
|
|
"node_id": self.data.node_id,
|
|
"node_type": self.data.node_type,
|
|
"title": self.data.title,
|
|
"index": self.data.index,
|
|
"predecessor_node_id": self.data.predecessor_node_id,
|
|
"inputs": None,
|
|
"process_data": None,
|
|
"outputs": None,
|
|
"status": self.data.status,
|
|
"error": None,
|
|
"elapsed_time": self.data.elapsed_time,
|
|
"execution_metadata": None,
|
|
"created_at": self.data.created_at,
|
|
"finished_at": self.data.finished_at,
|
|
"files": [],
|
|
"parallel_id": self.data.parallel_id,
|
|
"parallel_start_node_id": self.data.parallel_start_node_id,
|
|
"parent_parallel_id": self.data.parent_parallel_id,
|
|
"parent_parallel_start_node_id": self.data.parent_parallel_start_node_id,
|
|
"iteration_id": self.data.iteration_id,
|
|
"loop_id": self.data.loop_id,
|
|
},
|
|
}
|
|
|
|
|
|
class NodeRetryStreamResponse(StreamResponse):
|
|
"""
|
|
NodeFinishStreamResponse entity
|
|
"""
|
|
|
|
class Data(BaseModel):
|
|
"""
|
|
Data entity
|
|
"""
|
|
|
|
id: str
|
|
node_id: str
|
|
node_type: str
|
|
title: str
|
|
index: int
|
|
predecessor_node_id: Optional[str] = None
|
|
inputs: Optional[Mapping[str, Any]] = None
|
|
process_data: Optional[Mapping[str, Any]] = None
|
|
outputs: Optional[Mapping[str, Any]] = None
|
|
status: str
|
|
error: Optional[str] = None
|
|
elapsed_time: float
|
|
execution_metadata: Optional[Mapping[WorkflowNodeExecutionMetadataKey, Any]] = None
|
|
created_at: int
|
|
finished_at: int
|
|
files: Optional[Sequence[Mapping[str, Any]]] = []
|
|
parallel_id: Optional[str] = None
|
|
parallel_start_node_id: Optional[str] = None
|
|
parent_parallel_id: Optional[str] = None
|
|
parent_parallel_start_node_id: Optional[str] = None
|
|
iteration_id: Optional[str] = None
|
|
loop_id: Optional[str] = None
|
|
retry_index: int = 0
|
|
|
|
event: StreamEvent = StreamEvent.NODE_RETRY
|
|
workflow_run_id: str
|
|
data: Data
|
|
|
|
def to_ignore_detail_dict(self):
|
|
return {
|
|
"event": self.event.value,
|
|
"task_id": self.task_id,
|
|
"workflow_run_id": self.workflow_run_id,
|
|
"data": {
|
|
"id": self.data.id,
|
|
"node_id": self.data.node_id,
|
|
"node_type": self.data.node_type,
|
|
"title": self.data.title,
|
|
"index": self.data.index,
|
|
"predecessor_node_id": self.data.predecessor_node_id,
|
|
"inputs": None,
|
|
"process_data": None,
|
|
"outputs": None,
|
|
"status": self.data.status,
|
|
"error": None,
|
|
"elapsed_time": self.data.elapsed_time,
|
|
"execution_metadata": None,
|
|
"created_at": self.data.created_at,
|
|
"finished_at": self.data.finished_at,
|
|
"files": [],
|
|
"parallel_id": self.data.parallel_id,
|
|
"parallel_start_node_id": self.data.parallel_start_node_id,
|
|
"parent_parallel_id": self.data.parent_parallel_id,
|
|
"parent_parallel_start_node_id": self.data.parent_parallel_start_node_id,
|
|
"iteration_id": self.data.iteration_id,
|
|
"loop_id": self.data.loop_id,
|
|
"retry_index": self.data.retry_index,
|
|
},
|
|
}
|
|
|
|
|
|
class ParallelBranchStartStreamResponse(StreamResponse):
|
|
"""
|
|
ParallelBranchStartStreamResponse entity
|
|
"""
|
|
|
|
class Data(BaseModel):
|
|
"""
|
|
Data entity
|
|
"""
|
|
|
|
parallel_id: str
|
|
parallel_branch_id: str
|
|
parent_parallel_id: Optional[str] = None
|
|
parent_parallel_start_node_id: Optional[str] = None
|
|
iteration_id: Optional[str] = None
|
|
loop_id: Optional[str] = None
|
|
created_at: int
|
|
|
|
event: StreamEvent = StreamEvent.PARALLEL_BRANCH_STARTED
|
|
workflow_run_id: str
|
|
data: Data
|
|
|
|
|
|
class ParallelBranchFinishedStreamResponse(StreamResponse):
|
|
"""
|
|
ParallelBranchFinishedStreamResponse entity
|
|
"""
|
|
|
|
class Data(BaseModel):
|
|
"""
|
|
Data entity
|
|
"""
|
|
|
|
parallel_id: str
|
|
parallel_branch_id: str
|
|
parent_parallel_id: Optional[str] = None
|
|
parent_parallel_start_node_id: Optional[str] = None
|
|
iteration_id: Optional[str] = None
|
|
loop_id: Optional[str] = None
|
|
status: str
|
|
error: Optional[str] = None
|
|
created_at: int
|
|
|
|
event: StreamEvent = StreamEvent.PARALLEL_BRANCH_FINISHED
|
|
workflow_run_id: str
|
|
data: Data
|
|
|
|
|
|
class IterationNodeStartStreamResponse(StreamResponse):
|
|
"""
|
|
NodeStartStreamResponse entity
|
|
"""
|
|
|
|
class Data(BaseModel):
|
|
"""
|
|
Data entity
|
|
"""
|
|
|
|
id: str
|
|
node_id: str
|
|
node_type: str
|
|
title: str
|
|
created_at: int
|
|
extras: dict = Field(default_factory=dict)
|
|
metadata: Mapping = {}
|
|
inputs: Mapping = {}
|
|
parallel_id: Optional[str] = None
|
|
parallel_start_node_id: Optional[str] = None
|
|
|
|
event: StreamEvent = StreamEvent.ITERATION_STARTED
|
|
workflow_run_id: str
|
|
data: Data
|
|
|
|
|
|
class IterationNodeNextStreamResponse(StreamResponse):
|
|
"""
|
|
NodeStartStreamResponse entity
|
|
"""
|
|
|
|
class Data(BaseModel):
|
|
"""
|
|
Data entity
|
|
"""
|
|
|
|
id: str
|
|
node_id: str
|
|
node_type: str
|
|
title: str
|
|
index: int
|
|
created_at: int
|
|
pre_iteration_output: Optional[Any] = None
|
|
extras: dict = Field(default_factory=dict)
|
|
parallel_id: Optional[str] = None
|
|
parallel_start_node_id: Optional[str] = None
|
|
parallel_mode_run_id: Optional[str] = None
|
|
duration: Optional[float] = None
|
|
|
|
event: StreamEvent = StreamEvent.ITERATION_NEXT
|
|
workflow_run_id: str
|
|
data: Data
|
|
|
|
|
|
class IterationNodeCompletedStreamResponse(StreamResponse):
|
|
"""
|
|
NodeCompletedStreamResponse entity
|
|
"""
|
|
|
|
class Data(BaseModel):
|
|
"""
|
|
Data entity
|
|
"""
|
|
|
|
id: str
|
|
node_id: str
|
|
node_type: str
|
|
title: str
|
|
outputs: Optional[Mapping] = None
|
|
created_at: int
|
|
extras: Optional[dict] = None
|
|
inputs: Optional[Mapping] = None
|
|
status: WorkflowNodeExecutionStatus
|
|
error: Optional[str] = None
|
|
elapsed_time: float
|
|
total_tokens: int
|
|
execution_metadata: Optional[Mapping] = None
|
|
finished_at: int
|
|
steps: int
|
|
parallel_id: Optional[str] = None
|
|
parallel_start_node_id: Optional[str] = None
|
|
|
|
event: StreamEvent = StreamEvent.ITERATION_COMPLETED
|
|
workflow_run_id: str
|
|
data: Data
|
|
|
|
|
|
class LoopNodeStartStreamResponse(StreamResponse):
|
|
"""
|
|
NodeStartStreamResponse entity
|
|
"""
|
|
|
|
class Data(BaseModel):
|
|
"""
|
|
Data entity
|
|
"""
|
|
|
|
id: str
|
|
node_id: str
|
|
node_type: str
|
|
title: str
|
|
created_at: int
|
|
extras: dict = Field(default_factory=dict)
|
|
metadata: Mapping = {}
|
|
inputs: Mapping = {}
|
|
parallel_id: Optional[str] = None
|
|
parallel_start_node_id: Optional[str] = None
|
|
|
|
event: StreamEvent = StreamEvent.LOOP_STARTED
|
|
workflow_run_id: str
|
|
data: Data
|
|
|
|
|
|
class LoopNodeNextStreamResponse(StreamResponse):
|
|
"""
|
|
NodeStartStreamResponse entity
|
|
"""
|
|
|
|
class Data(BaseModel):
|
|
"""
|
|
Data entity
|
|
"""
|
|
|
|
id: str
|
|
node_id: str
|
|
node_type: str
|
|
title: str
|
|
index: int
|
|
created_at: int
|
|
pre_loop_output: Optional[Any] = None
|
|
extras: dict = Field(default_factory=dict)
|
|
parallel_id: Optional[str] = None
|
|
parallel_start_node_id: Optional[str] = None
|
|
parallel_mode_run_id: Optional[str] = None
|
|
duration: Optional[float] = None
|
|
|
|
event: StreamEvent = StreamEvent.LOOP_NEXT
|
|
workflow_run_id: str
|
|
data: Data
|
|
|
|
|
|
class LoopNodeCompletedStreamResponse(StreamResponse):
|
|
"""
|
|
NodeCompletedStreamResponse entity
|
|
"""
|
|
|
|
class Data(BaseModel):
|
|
"""
|
|
Data entity
|
|
"""
|
|
|
|
id: str
|
|
node_id: str
|
|
node_type: str
|
|
title: str
|
|
outputs: Optional[Mapping] = None
|
|
created_at: int
|
|
extras: Optional[dict] = None
|
|
inputs: Optional[Mapping] = None
|
|
status: WorkflowNodeExecutionStatus
|
|
error: Optional[str] = None
|
|
elapsed_time: float
|
|
total_tokens: int
|
|
execution_metadata: Optional[Mapping] = None
|
|
finished_at: int
|
|
steps: int
|
|
parallel_id: Optional[str] = None
|
|
parallel_start_node_id: Optional[str] = None
|
|
|
|
event: StreamEvent = StreamEvent.LOOP_COMPLETED
|
|
workflow_run_id: str
|
|
data: Data
|
|
|
|
|
|
class TextChunkStreamResponse(StreamResponse):
|
|
"""
|
|
TextChunkStreamResponse entity
|
|
"""
|
|
|
|
class Data(BaseModel):
|
|
"""
|
|
Data entity
|
|
"""
|
|
|
|
text: str
|
|
from_variable_selector: Optional[list[str]] = None
|
|
|
|
event: StreamEvent = StreamEvent.TEXT_CHUNK
|
|
data: Data
|
|
|
|
|
|
class TextReplaceStreamResponse(StreamResponse):
|
|
"""
|
|
TextReplaceStreamResponse entity
|
|
"""
|
|
|
|
class Data(BaseModel):
|
|
"""
|
|
Data entity
|
|
"""
|
|
|
|
text: str
|
|
|
|
event: StreamEvent = StreamEvent.TEXT_REPLACE
|
|
data: Data
|
|
|
|
|
|
class PingStreamResponse(StreamResponse):
|
|
"""
|
|
PingStreamResponse entity
|
|
"""
|
|
|
|
event: StreamEvent = StreamEvent.PING
|
|
|
|
|
|
class AppStreamResponse(BaseModel):
|
|
"""
|
|
AppStreamResponse entity
|
|
"""
|
|
|
|
stream_response: StreamResponse
|
|
|
|
|
|
class ChatbotAppStreamResponse(AppStreamResponse):
|
|
"""
|
|
ChatbotAppStreamResponse entity
|
|
"""
|
|
|
|
conversation_id: str
|
|
message_id: str
|
|
created_at: int
|
|
|
|
|
|
class CompletionAppStreamResponse(AppStreamResponse):
|
|
"""
|
|
CompletionAppStreamResponse entity
|
|
"""
|
|
|
|
message_id: str
|
|
created_at: int
|
|
|
|
|
|
class WorkflowAppStreamResponse(AppStreamResponse):
|
|
"""
|
|
WorkflowAppStreamResponse entity
|
|
"""
|
|
|
|
workflow_run_id: Optional[str] = None
|
|
|
|
|
|
class AppBlockingResponse(BaseModel):
|
|
"""
|
|
AppBlockingResponse entity
|
|
"""
|
|
|
|
task_id: str
|
|
|
|
def to_dict(self):
|
|
return jsonable_encoder(self)
|
|
|
|
|
|
class ChatbotAppBlockingResponse(AppBlockingResponse):
|
|
"""
|
|
ChatbotAppBlockingResponse entity
|
|
"""
|
|
|
|
class Data(BaseModel):
|
|
"""
|
|
Data entity
|
|
"""
|
|
|
|
id: str
|
|
mode: str
|
|
conversation_id: str
|
|
message_id: str
|
|
answer: str
|
|
metadata: dict = Field(default_factory=dict)
|
|
created_at: int
|
|
|
|
data: Data
|
|
|
|
|
|
class CompletionAppBlockingResponse(AppBlockingResponse):
|
|
"""
|
|
CompletionAppBlockingResponse entity
|
|
"""
|
|
|
|
class Data(BaseModel):
|
|
"""
|
|
Data entity
|
|
"""
|
|
|
|
id: str
|
|
mode: str
|
|
message_id: str
|
|
answer: str
|
|
metadata: dict = Field(default_factory=dict)
|
|
created_at: int
|
|
|
|
data: Data
|
|
|
|
|
|
class WorkflowAppBlockingResponse(AppBlockingResponse):
|
|
"""
|
|
WorkflowAppBlockingResponse entity
|
|
"""
|
|
|
|
class Data(BaseModel):
|
|
"""
|
|
Data entity
|
|
"""
|
|
|
|
id: str
|
|
workflow_id: str
|
|
status: str
|
|
outputs: Optional[Mapping[str, Any]] = None
|
|
error: Optional[str] = None
|
|
elapsed_time: float
|
|
total_tokens: int
|
|
total_steps: int
|
|
created_at: int
|
|
finished_at: int
|
|
|
|
workflow_run_id: str
|
|
data: Data
|
|
|
|
|
|
class AgentLogStreamResponse(StreamResponse):
|
|
"""
|
|
AgentLogStreamResponse entity
|
|
"""
|
|
|
|
class Data(BaseModel):
|
|
"""
|
|
Data entity
|
|
"""
|
|
|
|
node_execution_id: str
|
|
id: str
|
|
label: str
|
|
parent_id: str | None
|
|
error: str | None
|
|
status: str
|
|
data: Mapping[str, Any]
|
|
metadata: Optional[Mapping[str, Any]] = None
|
|
node_id: str
|
|
|
|
event: StreamEvent = StreamEvent.AGENT_LOG
|
|
data: Data
|