From eb7a523e2723f19d791939e0c171ecd7bd0a1096 Mon Sep 17 00:00:00 2001 From: Pandaaaa906 Date: Mon, 14 Jul 2025 11:47:23 +0800 Subject: [PATCH 1/5] fix StreamEvent, adding PARALLEL_BRANCH_STARTED, PARALLEL_BRANCH_FINISHED --- dify_client/models/stream.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/dify_client/models/stream.py b/dify_client/models/stream.py index 8c6dfe1..3448c62 100644 --- a/dify_client/models/stream.py +++ b/dify_client/models/stream.py @@ -27,6 +27,8 @@ class StreamEvent(StrEnum): ERROR = "error" PING = "ping" TTS_MESSAGE_END = "tts_message_end" + PARALLEL_BRANCH_STARTED = "parallel_branch_started" + PARALLEL_BRANCH_FINISHED = "parallel_branch_finished" @classmethod def new(cls, event: Union["StreamEvent", str]) -> "StreamEvent": From 9dc2da9cc73d3b4eaa5947fe5eda02633ef6dec6 Mon Sep 17 00:00:00 2001 From: Pandaaaa906 Date: Mon, 14 Jul 2025 11:47:23 +0800 Subject: [PATCH 2/5] fix StreamEvent, adding PARALLEL_BRANCH_STARTED, PARALLEL_BRANCH_FINISHED --- dify_client/models/stream.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/dify_client/models/stream.py b/dify_client/models/stream.py index 8c6dfe1..35a1556 100644 --- a/dify_client/models/stream.py +++ b/dify_client/models/stream.py @@ -27,6 +27,9 @@ class StreamEvent(StrEnum): ERROR = "error" PING = "ping" TTS_MESSAGE_END = "tts_message_end" + PARALLEL_BRANCH_STARTED = "parallel_branch_started" + PARALLEL_BRANCH_FINISHED = "parallel_branch_finished" + NODE_RETRY = "node_retry" @classmethod def new(cls, event: Union["StreamEvent", str]) -> "StreamEvent": From 72635f63364166ed2319ffa66deeaf3ebbf25267 Mon Sep 17 00:00:00 2001 From: Pandaaaa906 Date: Thu, 6 Nov 2025 17:20:42 +0800 Subject: [PATCH 3/5] fix WorkflowStartedData missing sequence_number in dify 1.7 --- dify_client/models/workflow.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dify_client/models/workflow.py b/dify_client/models/workflow.py index 93a1e01..4e55c51 100644 --- a/dify_client/models/workflow.py +++ b/dify_client/models/workflow.py @@ -25,7 +25,7 @@ class ExecutionMetadata(BaseModel): class WorkflowStartedData(BaseModel): id: str # workflow run id workflow_id: str # workflow id - sequence_number: int + sequence_number: int | None = None inputs: Optional[dict] = None created_at: int # unix timestamp seconds From 93f5534755f049de1b4974c2e5ab594bab1c7f1e Mon Sep 17 00:00:00 2001 From: Pandaaaa906 Date: Thu, 6 Nov 2025 17:22:38 +0800 Subject: [PATCH 4/5] adding StreamEvent.AGENT_LOG, just use str for new event --- dify_client/models/stream.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/dify_client/models/stream.py b/dify_client/models/stream.py index ecadde9..5248bfa 100644 --- a/dify_client/models/stream.py +++ b/dify_client/models/stream.py @@ -30,18 +30,19 @@ class StreamEvent(StrEnum): PARALLEL_BRANCH_STARTED = "parallel_branch_started" PARALLEL_BRANCH_FINISHED = "parallel_branch_finished" NODE_RETRY = "node_retry" + AGENT_LOG = "agent_log" @classmethod def new(cls, event: Union["StreamEvent", str]) -> "StreamEvent": if isinstance(event, cls): return event - return utils.str_to_enum(cls, event) + return utils.str_to_enum(cls, event, ignore_not_found=True, enum_default=event) class StreamResponse(BaseModel): model_config = ConfigDict(extra='allow') - event: StreamEvent + event: StreamEvent | str task_id: Optional[str] = "" @field_validator("event", mode="before") From 223e075ad24fe9eb1fe8a9075621d18af4e2ecd3 Mon Sep 17 00:00:00 2001 From: Pandaaaa906 Date: Fri, 23 Jan 2026 10:56:55 +0800 Subject: [PATCH 5/5] fix pydantic-v2 Optional adding default value --- dify_client/models/base.py | 4 ++-- dify_client/models/stream.py | 4 ++-- dify_client/models/workflow.py | 14 +++++++------- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/dify_client/models/base.py b/dify_client/models/base.py index f224dcb..ef7741a 100644 --- a/dify_client/models/base.py +++ b/dify_client/models/base.py @@ -40,10 +40,10 @@ class CompletionInputs(BaseModel): class File(BaseModel): type: FileType transfer_method: TransferMethod - url: Optional[str] + url: Optional[str] = None # Uploaded file ID, which must be obtained by uploading through the File Upload API in advance # (when the transfer method is local_file) - upload_file_id: Optional[str] + upload_file_id: Optional[str] = None class Usage(BaseModel): diff --git a/dify_client/models/stream.py b/dify_client/models/stream.py index 5248bfa..da0594d 100644 --- a/dify_client/models/stream.py +++ b/dify_client/models/stream.py @@ -69,7 +69,7 @@ class MessageEndStreamResponse(StreamResponse): message_id: str conversation_id: Optional[str] = "" created_at: int # unix timestamp seconds - metadata: Optional[Metadata] + metadata: Optional[Metadata] = None class MessageReplaceStreamResponse(MessageStreamResponse): @@ -108,7 +108,7 @@ class WorkflowsStreamResponse(StreamResponse): WorkflowFinishedData, NodeStartedData, NodeFinishedData] - ] + ] = None class ChatWorkflowsStreamResponse(WorkflowsStreamResponse): diff --git a/dify_client/models/workflow.py b/dify_client/models/workflow.py index 4e55c51..7fad18f 100644 --- a/dify_client/models/workflow.py +++ b/dify_client/models/workflow.py @@ -17,9 +17,9 @@ class WorkflowStatus(StrEnum): class ExecutionMetadata(BaseModel): - total_tokens: Optional[int] - total_price: Optional[str] - currency: Optional[str] + total_tokens: Optional[int] = None + total_price: Optional[str] = None + currency: Optional[str] = None class WorkflowStartedData(BaseModel): @@ -66,10 +66,10 @@ class WorkflowFinishedData(BaseModel): workflow_id: str # workflow id sequence_number: int status: WorkflowStatus - outputs: Optional[dict] - error: Optional[str] - elapsed_time: Optional[float] - total_tokens: Optional[int] + outputs: Optional[dict] = None + error: Optional[str] = None + elapsed_time: Optional[float] = None + total_tokens: Optional[int] = None total_steps: Optional[int] = 0 created_at: int finished_at: int