123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456 |
- from enum import Enum
- from typing import Optional
- from pydantic import BaseModel
- from core.model_runtime.entities.llm_entities import LLMResult, LLMUsage
- from core.model_runtime.utils.encoders import jsonable_encoder
- from core.workflow.entities.node_entities import NodeType
- from core.workflow.nodes.answer.entities import GenerateRouteChunk
- class WorkflowStreamGenerateNodes(BaseModel):
- """
- WorkflowStreamGenerateNodes entity
- """
- end_node_id: str
- stream_node_ids: list[str]
- class ChatflowStreamGenerateRoute(BaseModel):
- """
- ChatflowStreamGenerateRoute entity
- """
- answer_node_id: str
- generate_route: list[GenerateRouteChunk]
- current_route_position: int = 0
- class NodeExecutionInfo(BaseModel):
- """
- NodeExecutionInfo entity
- """
- workflow_node_execution_id: str
- node_type: NodeType
- start_at: float
- class TaskState(BaseModel):
- """
- TaskState entity
- """
- metadata: dict = {}
- class EasyUITaskState(TaskState):
- """
- EasyUITaskState entity
- """
- llm_result: LLMResult
- class WorkflowTaskState(TaskState):
- """
- WorkflowTaskState entity
- """
- answer: str = ""
- workflow_run_id: Optional[str] = None
- start_at: Optional[float] = None
- total_tokens: int = 0
- total_steps: int = 0
- ran_node_execution_infos: dict[str, NodeExecutionInfo] = {}
- latest_node_execution_info: Optional[NodeExecutionInfo] = None
- current_stream_generate_state: Optional[WorkflowStreamGenerateNodes] = None
- class AdvancedChatTaskState(WorkflowTaskState):
- """
- AdvancedChatTaskState entity
- """
- usage: LLMUsage
- current_stream_generate_state: Optional[ChatflowStreamGenerateRoute] = None
- class StreamEvent(Enum):
- """
- Stream event
- """
- PING = "ping"
- ERROR = "error"
- MESSAGE = "message"
- MESSAGE_END = "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"
- TEXT_CHUNK = "text_chunk"
- TEXT_REPLACE = "text_replace"
- class StreamResponse(BaseModel):
- """
- StreamResponse entity
- """
- event: StreamEvent
- task_id: str
- def to_dict(self) -> dict:
- return jsonable_encoder(self)
- class ErrorStreamResponse(StreamResponse):
- """
- ErrorStreamResponse entity
- """
- event: StreamEvent = StreamEvent.ERROR
- err: Exception
- class Config:
- arbitrary_types_allowed = True
- class MessageStreamResponse(StreamResponse):
- """
- MessageStreamResponse entity
- """
- event: StreamEvent = StreamEvent.MESSAGE
- id: str
- answer: str
- class MessageEndStreamResponse(StreamResponse):
- """
- MessageEndStreamResponse entity
- """
- event: StreamEvent = StreamEvent.MESSAGE_END
- id: str
- metadata: dict = {}
- 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
- 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
- sequence_number: int
- inputs: dict
- 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
- sequence_number: int
- status: str
- outputs: Optional[dict] = 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
- files: Optional[list[dict]] = []
- 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[dict] = None
- created_at: int
- extras: dict = {}
- 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": {}
- }
- }
- 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[dict] = None
- process_data: Optional[dict] = None
- outputs: Optional[dict] = None
- status: str
- error: Optional[str] = None
- elapsed_time: float
- execution_metadata: Optional[dict] = None
- created_at: int
- finished_at: int
- files: Optional[list[dict]] = []
- 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": []
- }
- }
- class TextChunkStreamResponse(StreamResponse):
- """
- TextChunkStreamResponse entity
- """
- class Data(BaseModel):
- """
- Data entity
- """
- text: str
- 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: str
- class AppBlockingResponse(BaseModel):
- """
- AppBlockingResponse entity
- """
- task_id: str
- def to_dict(self) -> dict:
- 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 = {}
- 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 = {}
- created_at: int
- data: Data
- class WorkflowAppBlockingResponse(AppBlockingResponse):
- """
- WorkflowAppBlockingResponse entity
- """
- class Data(BaseModel):
- """
- Data entity
- """
- id: str
- workflow_id: str
- status: str
- outputs: Optional[dict] = 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
|