Python: DevUI fixes : Add multimodal input support for workflows and refactor chat input (#2593)

* show app version in devui .NET: Python: Improved Versioning for DevUI
Fixes #2059

* feat: Add multimodal input support for workflows and refactor chat input

This PR adds support for multimodal content (images, files) in workflow
inputs and refactors the chat input into a reusable component.

## Multimodal Workflow Support
- Add `isChatMessageSchema()` to detect ChatMessage input schemas
- Update `RunWorkflowButton` to use `ChatMessageInput` for ChatMessage workflows
- Wrap multimodal content in OpenAI message format for backend processing
- Add `_is_openai_multimodal_format()` to detect OpenAI ResponseInputParam
- Update `_parse_workflow_input()` to route multimodal input through
  existing `_convert_input_to_chat_message()` converter

## Reusable ChatMessageInput Component
- Extract chat input logic from agent-view into `ChatMessageInput` component
- Support file upload, drag & drop, paste handling, and attachments
- Add `useDragDrop` hook for parent-level drag handling with full-area
  drop zones
- Refactor agent-view to use the new shared component

## Other Improvements
- Add `isStreaming` prop to executor nodes for animation control
- Clean up unused imports and state variables in agent-view
- Add tests for multimodal workflow input handling

Fixes workflow input not receiving images when using AgentExecutor nodes.

* add self loop edge, fix #2470

* fix test
This commit is contained in:
Victor Dibia
2025-12-03 12:15:51 -08:00
committed by GitHub
Unverified
parent 6835161f2d
commit 411ee7a60f
38 changed files with 3488 additions and 1493 deletions
@@ -145,3 +145,40 @@
.workflow-chat-view .text-green-800 {
@apply text-emerald-800;
}
/* HIL Timeline Item Animations */
.highlight-attention {
animation: highlight-flash 1s ease-out;
}
@keyframes highlight-flash {
0% {
background-color: rgb(251 146 60 / 0.3);
transform: scale(1.02);
}
100% {
background-color: transparent;
transform: scale(1);
}
}
/* Pulsing glow effect for HIL waiting state */
.hil-waiting-glow {
box-shadow:
0 0 0 0 rgb(251 146 60 / 0.4),
inset 0 0 0 1px rgb(251 146 60 / 0.2);
animation: pulse-glow 2s infinite;
}
@keyframes pulse-glow {
0%, 100% {
box-shadow:
0 0 0 0 rgb(251 146 60 / 0.4),
inset 0 0 0 1px rgb(251 146 60 / 0.2);
}
50% {
box-shadow:
0 0 20px 5px rgb(251 146 60 / 0.2),
inset 0 0 0 2px rgb(251 146 60 / 0.3);
}
}