From 116cced6a636f1f4d31f1a797761ab3595435214 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Mon, 10 Aug 2026 14:19:06 -0700 Subject: [PATCH] Pull the ai workflow through serializer and check for required triggers --- src/documents/serialisers.py | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/src/documents/serialisers.py b/src/documents/serialisers.py index d43c0cd12..2bb97165a 100644 --- a/src/documents/serialisers.py +++ b/src/documents/serialisers.py @@ -3184,6 +3184,9 @@ class WorkflowActionSerializer(serializers.ModelSerializer[WorkflowAction]): "email", "webhook", "passwords", + "ai_suggestion_fields", + "ai_create_missing", + "ai_overwrite_existing", ] def validate(self, attrs): @@ -3257,6 +3260,23 @@ class WorkflowActionSerializer(serializers.ModelSerializer[WorkflowAction]): "Passwords are required for password removal actions", ) + if ( + "type" in attrs + and attrs["type"] == WorkflowAction.WorkflowActionType.APPLY_AI_SUGGESTIONS + ): + fields = attrs.get("ai_suggestion_fields") + valid_fields = set(WorkflowAction.AISuggestionField.values) + if ( + fields is None + or not isinstance(fields, list) + or len(fields) == 0 + or any(field not in valid_fields for field in fields) + ): + raise serializers.ValidationError( + "At least one valid field is required for apply AI " + f"suggestions actions, options are: {sorted(valid_fields)}", + ) + return attrs @@ -3295,6 +3315,20 @@ class WorkflowSerializer(serializers.ModelSerializer[Workflow]): "Remote OCR actions require a consumption started trigger", ) + # Suggestions are made from the document content, which does not exist + # until after consumption has finished + if any( + action.get("type") == WorkflowAction.WorkflowActionType.APPLY_AI_SUGGESTIONS + for action in actions + ) and not any( + trigger.get("type") != WorkflowTrigger.WorkflowTriggerType.CONSUMPTION + for trigger in triggers + ): + raise serializers.ValidationError( + "Apply AI suggestions actions require a trigger other than " + "consumption started", + ) + return attrs def update_triggers_and_actions(