from enum import Enum from typing import Any, Optional from pydantic import BaseModel from core.model_runtime.entities.llm_entities import LLMResult, LLMResultChunk from core.workflow.entities.base_node_data_entities import BaseNodeData from core.workflow.entities.node_entities import NodeType class QueueEvent(Enum): """ QueueEvent enum """ LLM_CHUNK = "llm_chunk" TEXT_CHUNK = "text_chunk" AGENT_MESSAGE = "agent_message" MESSAGE_REPLACE = "message_replace" MESSAGE_END = "message_end" ADVANCED_CHAT_MESSAGE_END = "advanced_chat_message_end" WORKFLOW_STARTED = "workflow_started" WORKFLOW_SUCCEEDED = "workflow_succeeded" WORKFLOW_FAILED = "workflow_failed" NODE_STARTED = "node_started" NODE_SUCCEEDED = "node_succeeded" NODE_FAILED = "node_failed" RETRIEVER_RESOURCES = "retriever_resources" ANNOTATION_REPLY = "annotation_reply" AGENT_THOUGHT = "agent_thought" MESSAGE_FILE = "message_file" ERROR = "error" PING = "ping" STOP = "stop" class AppQueueEvent(BaseModel): """ QueueEvent entity """ event: QueueEvent class QueueLLMChunkEvent(AppQueueEvent): """ QueueLLMChunkEvent entity """ event = QueueEvent.LLM_CHUNK chunk: LLMResultChunk class QueueTextChunkEvent(AppQueueEvent): """ QueueTextChunkEvent entity """ event = QueueEvent.TEXT_CHUNK text: str metadata: Optional[dict] = None class QueueAgentMessageEvent(AppQueueEvent): """ QueueMessageEvent entity """ event = QueueEvent.AGENT_MESSAGE chunk: LLMResultChunk class QueueMessageReplaceEvent(AppQueueEvent): """ QueueMessageReplaceEvent entity """ event = QueueEvent.MESSAGE_REPLACE text: str class QueueRetrieverResourcesEvent(AppQueueEvent): """ QueueRetrieverResourcesEvent entity """ event = QueueEvent.RETRIEVER_RESOURCES retriever_resources: list[dict] class QueueAnnotationReplyEvent(AppQueueEvent): """ QueueAnnotationReplyEvent entity """ event = QueueEvent.ANNOTATION_REPLY message_annotation_id: str class QueueMessageEndEvent(AppQueueEvent): """ QueueMessageEndEvent entity """ event = QueueEvent.MESSAGE_END llm_result: Optional[LLMResult] = None class QueueAdvancedChatMessageEndEvent(AppQueueEvent): """ QueueAdvancedChatMessageEndEvent entity """ event = QueueEvent.ADVANCED_CHAT_MESSAGE_END class QueueWorkflowStartedEvent(AppQueueEvent): """ QueueWorkflowStartedEvent entity """ event = QueueEvent.WORKFLOW_STARTED class QueueWorkflowSucceededEvent(AppQueueEvent): """ QueueWorkflowSucceededEvent entity """ event = QueueEvent.WORKFLOW_SUCCEEDED class QueueWorkflowFailedEvent(AppQueueEvent): """ QueueWorkflowFailedEvent entity """ event = QueueEvent.WORKFLOW_FAILED error: str class QueueNodeStartedEvent(AppQueueEvent): """ QueueNodeStartedEvent entity """ event = QueueEvent.NODE_STARTED node_id: str node_type: NodeType node_data: BaseNodeData node_run_index: int = 1 predecessor_node_id: Optional[str] = None class QueueNodeSucceededEvent(AppQueueEvent): """ QueueNodeSucceededEvent entity """ event = QueueEvent.NODE_SUCCEEDED node_id: str node_type: NodeType node_data: BaseNodeData inputs: Optional[dict] = None process_data: Optional[dict] = None outputs: Optional[dict] = None execution_metadata: Optional[dict] = None error: Optional[str] = None class QueueNodeFailedEvent(AppQueueEvent): """ QueueNodeFailedEvent entity """ event = QueueEvent.NODE_FAILED node_id: str node_type: NodeType node_data: BaseNodeData inputs: Optional[dict] = None outputs: Optional[dict] = None process_data: Optional[dict] = None error: str class QueueAgentThoughtEvent(AppQueueEvent): """ QueueAgentThoughtEvent entity """ event = QueueEvent.AGENT_THOUGHT agent_thought_id: str class QueueMessageFileEvent(AppQueueEvent): """ QueueAgentThoughtEvent entity """ event = QueueEvent.MESSAGE_FILE message_file_id: str class QueueErrorEvent(AppQueueEvent): """ QueueErrorEvent entity """ event = QueueEvent.ERROR error: Any class QueuePingEvent(AppQueueEvent): """ QueuePingEvent entity """ event = QueueEvent.PING class QueueStopEvent(AppQueueEvent): """ QueueStopEvent entity """ class StopBy(Enum): """ Stop by enum """ USER_MANUAL = "user-manual" ANNOTATION_REPLY = "annotation-reply" OUTPUT_MODERATION = "output-moderation" INPUT_MODERATION = "input-moderation" event = QueueEvent.STOP stopped_by: StopBy class QueueMessage(BaseModel): """ QueueMessage entity """ task_id: str app_mode: str event: AppQueueEvent class MessageQueueMessage(QueueMessage): """ MessageQueueMessage entity """ message_id: str conversation_id: str class WorkflowQueueMessage(QueueMessage): """ WorkflowQueueMessage entity """ pass