* refactor: simplify TaskService by removing Celery integration
* refactor: enhance AnyIO backend task management and error handling
* refactor: restructure flow building process and enhance event handling
* feat: implement QueueService for managing job queues and tasks
* feat: Add QueueService for managing job queues and task lifecycle
* feat!: Enhance flow building with QueueService integration for job management
* revert changes to async session
* feat: Integrate QueueService into lifespan management for task handling
* refactor: Enhance QueueService with robust lifecycle management and cleanup mechanisms
* refactor: Simplify docstring for get_queue_service function
* refactor: Update import statements in queue factory for clarity
* test: Improve chat endpoint tests with comprehensive build flow scenarios
* refactor: Streamline flow build event generation and queue management
* refactor: Improve flow build process with modular event handling and URL parameter management
* test: Enhance loop component tests with flow build and event handling utilities
* fix: Improve transaction logging with null flow_id handling and debug logging
* fix: Remove unnecessary db.refresh() in transaction logging
* feat: Add polling mode for build events with optional streaming
* feat: Add event delivery configuration option to settings
* feat: Implement polling for build events with configuration-driven streaming
* refactor: Enhance queue cleanup with improved logging and error handling
* test: Improve build event stream assertion with detailed error reporting
* test: Add benchmark test for build flow polling mechanism
* refactor: Remove redundant end event in flow event generation
* test: Update test_component_tool_with_api_key to use async flow
* Convert test method to async
* Update graph start method to use async_start()
* Add client parameter to test method
* Modify tool retrieval to use async method
* test: Add session ID generation in agent component test
* fix: Enhance error handling in LCAgentComponent for ExceptionWithMessageError
Add null checks to prevent potential AttributeError when handling agent message deletion
* test: Refactor test assertion for model name options in agent component
Simplify the assertion for checking "sonnet" in model name options by extracting the options to a variable first
* refactor: Improve type hints and imports in AnyIOTaskResult
* Add `__future__` import for type annotations
* Use conditional import for `Callable` and `TracebackType`
* Explicitly type `_traceback` attribute with `TracebackType | None`
* fix: Add null checks for event task in build events streaming
* refactor: Extract build and disconnect handling into separate modules
This commit separates the build and disconnect handling logic from the chat API module into dedicated files:
- Created `langflow/api/build.py` to house the flow generation and vertex building logic
- Created `langflow/api/disconnect.py` to manage the custom streaming response with disconnect handling
- Removed duplicate code from `langflow/api/v1/chat.py`
- Improved code organization and modularity
* refactor: Extract flow build and event handling methods in build API
This commit introduces two new methods in the build API to improve code organization and reusability:
- `start_flow_build()`: Centralizes the logic for creating a queue and starting a flow build task
- `get_flow_events_response()`: Handles retrieving flow events for both streaming and polling modes
The changes simplify the chat API endpoint implementations and reduce code duplication
* refactor: Deprecate /task endpoint and add informative error message
This commit marks the /task endpoint as deprecated and raises an HTTP 400 error with a clear message indicating the endpoint will be removed in a future version. The changes improve API clarity and guide users towards the recommended /run endpoint.
* refactor: Update log_transaction function return type annotation
Modify the return type hint for log_transaction to allow for potential None return, improving type safety and clarity in the transactions logging method.
* feat: Add configurable event delivery streaming option
Introduce support for configurable event delivery mode (streaming/polling) across frontend components:
- Add `shouldStreamEvents()` method in NodeStatus and IOModal
- Update flowStore to accept a `stream` parameter
- Modify buildFlowVerticesWithFallback to use the stream parameter directly
- Remove hardcoded polling logic in buildUtils
* fix: Add null check for flow_id in log_transaction function
Prevent logging transactions without a flow_id by returning None, ensuring data integrity and avoiding potential database errors
* chore: Update changes-filter to include chat API path
* fix: Add error handling and null checks in flow transaction deletion
Improve robustness of transaction and vertex build deletion by:
- Adding a null check for flow_id in delete_transactions_by_flow_id
- Wrapping deletion operations in try-except blocks to prevent failures
- Logging debug messages for any deletion errors
* fix: Remove redundant commit in vertex builds deletion
Remove unnecessary db.commit() from delete_vertex_builds_by_flow_id to prevent duplicate commits and simplify database transaction handling
* fix: Improve transaction logging with debug message and return value
Move debug logging from CRUD layer to utils to provide more context about logged transactions and ensure proper error handling
* fix: Improve error handling and transaction cleanup in active_user fixture
Enhance user and transaction cleanup process in test fixture by:
- Adding separate try-except blocks for transaction/vertex build deletion and user deletion
- Adding debug logging for potential errors during cleanup
- Ensuring proper session commits for each operation
* propagate parent task CancelledError instead of supressing it
Co-authored-by: Christophe Bornet <cbornet@hotmail.com>
* refactor: Rename queue service to job queue service
Restructure job queue management by:
- Renaming QueueService to JobQueueService
- Moving queue-related files to a new job_queue directory
- Updating import paths and service type references
- Enhancing job queue service with more robust async job management
* fix: Correct ServiceType enum reference for job queue service
Update the service type constant to match the recently renamed JobQueueService, ensuring consistent service type referencing across the application.
* refactor: Enhance JobQueueService with comprehensive logging and documentation
Improve the JobQueueService implementation by:
- Adding detailed docstrings with clear explanations of methods and attributes
- Implementing comprehensive logging throughout the service
- Enhancing error handling and logging for queue and task management
- Providing more context in log messages for debugging and monitoring
* docs: Improve stop method docstring for JobQueueService
Enhance the documentation for the stop method by:
- Providing a more detailed and precise description of the shutdown process
- Clarifying the steps involved in gracefully stopping the service
- Improving the explanation of resource cleanup and task cancellation
* fix: Properly handle task cancellation and propagate exceptions in JobQueueService
* fix: Enhance error handling and raise appropriate exceptions in JobQueueService methods
* improve docstring
Co-authored-by: Christophe Bornet <cbornet@hotmail.com>
* fix: Remove redundant exception raises in JobQueueService methods and improve cleanup logic
* fix: Improve logging during job cleanup and handle exceptions more appropriately
* feat: add utility to run tests with multiple event delivery modes
* feat: integrate withEventDeliveryModes utility in multiple test files
* refactor: replace status code assertions with httpx codes for clarity
* remove noqa comment and change argument name
Co-authored-by: Christophe Bornet <cbornet@hotmail.com>
* refactor: streamline event polling logic in get_flow_events_response
* refactor: use getattr for safer session attribute access
Co-author: @cbornet
* feat: add is_started method to JobQueueService
* refactor: modify JobQueueService start method and main.py queue service initialization
* feat: add ready state and teardown method to JobQueueService
* refactor: simplify job queue cleanup logic in JobQueueService
* refactor: improve error logging in active_user fixture
* refactor: improve AnyIO task management with TaskGroup and CancelScope
* refactor: Implement LimitedBackgroundTasks for controlled vertex build logging (#6312)
* feat: implement LimitedBackgroundTasks for controlled vertex build logging
* refactor: replace BackgroundTasks with LimitedBackgroundTasks in build_flow endpoint
* refactor: improve task cancellation error handling in JobQueueService
* refactor: Rename LimitedBackgroundTasks to LimitVertexBuildBackgroundTasks
* feat: Add EventDeliveryType enum for event delivery methods
* feat: Add polling constants for endpoint and streaming status
* refactor: Update buildFlowVerticesWithFallback to use polling constants
* refactor: Update event delivery handling to use EventDeliveryType enum
* [autofix.ci] apply automated fixes
* fix: Improve error handling for cancelled build tasks
Refactor generate_flow_events to properly handle and propagate CancelledError
- Remove unnecessary task creation and manual cancellation
- Directly await _build_vertex instead of creating a separate task
- Improve exception logging for cancelled tasks
- Ensure CancelledError is raised instead of being silently handled
* fix: trigger event_manager.on_end after error handling in generate_flow_events
---------
Co-authored-by: Christophe Bornet <cbornet@hotmail.com>
Co-authored-by: anovazzi1 <otavio2204@gmail.com>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
* 🐛 (utils.py): fix cascade delete flow function to correctly delete related entities in the database and handle exceptions properly
* ✨ (grid/index.tsx): Update descriptionModal to differentiate between component and flow types for better user experience
✨ (list/index.tsx): Update descriptionModal to differentiate between component and flow types for better user experience
* [autofix.ci] apply automated fixes
---------
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
* Update component.py
* 🐛 (loop-component.spec.ts): fix clicking on incorrect element in test causing failure
* 🔧 (freeze-path.spec.ts): Remove redundant clicks on "Close" button in multiple test cases to improve test efficiency
🔧 (freeze.spec.ts): Remove redundant clicks on "Close" button in multiple test cases to improve test efficiency
---------
Co-authored-by: cristhianzl <cristhian.lousa@gmail.com>
Co-authored-by: Gabriel Luiz Freitas Almeida <gabriel@langflow.org>
* Fixed edge to start at left and right sides of handle
* Fixed neon to be the same size of default handle
* Fixed source and targets Y to work on loop edges as well
* add outdated starter projects tests
* add api keys loaded from db values
* ✨ (Custom Component Generator.spec.ts): add initialGPTsetup function to setup GPT integration
📝 (Custom Component Generator.spec.ts): update test to handle existing API key and log a message if API key is already added
* updated colResizeDefault to be shift
* Made last column not resize less than the maximum amount
---------
Co-authored-by: anovazzi1 <otavio2204@gmail.com>
✨ (validate-raise-errors-components.spec.ts): add test to validate error messages on popups when an error is raised in custom components
📝 (add-custom-component.ts): add utility function to add custom components in tests for easier testing and validation of error messages
* ✨ (tests): update tag value from "@starter-project" to "@starter-projects" for consistency across test files.
* 📝 (changes-filter.yaml): add new path "src/backend/base/langflow/custom/**" to starter-projects section
♻️ (changes-filter.yaml): remove path "src/backend/base/langflow/components/**" from components section and add it to starter-projects section
♻️ (changes-filter.yaml): add new path "src/backend/base/langflow/custom/**" to components section
* 🐛 (component.py): fix a bug where the status was not being returned when there is only one output in the component
* 🔧 (ci.yml): Expand path filter outputs for more comprehensive CI testing
* fix docstring placement
* ✨ (group.spec.ts): update click event modifiers to use "ControlOrMeta" for better cross-platform compatibility
* ✨ (changes-filter.yaml): add new directory "src/backend/base/langflow/graph/" to starter-projects for processing in the build pipeline.
* 🔄 Refactor graph data structures from sets to lists for performance and compatibility
* 🔧 Optimize RunnableVerticesManager predecessor checks and type hints
---------
Co-authored-by: Gabriel Luiz Freitas Almeida <gabriel@langflow.org>
🔧 (switchOutputView/index.tsx): Fix issue with accessing nested properties in flowPoolNode data object
🔧 (switchOutputView/index.tsx): Fix issue with accessing nested properties in resultMessage object
🔧 (chat-message.tsx): add isBuilding variable to track if the chat message is being built to improve user experience
Co-authored-by: anovazzi1 <otavio2204@gmail.com>
Co-authored-by: Gabriel Luiz Freitas Almeida <gabriel@langflow.org>
* 🔧 (frontend): remove unused lockChat and setLockChat props from ChatViewWrapper and ChatView components
♻️ (frontend): refactor ChatMessage component to use useFlowStore for lockChat state management instead of passing it as a prop
* 🔧 (chat-message.tsx): Remove unused variables setLockChat and lockChat
♻️ (chat-message.tsx): Refactor code to use isBuilding state instead of setLockChat and lockChat variables
♻️ (new-modal.tsx): Refactor code to remove setLockChat function and references
♻️ (flowStore.ts): Refactor code to remove setLockChat function and lockChat variable
♻️ (components/index.ts): Refactor code to remove setLockChat function and lockChat variable
♻️ (flow/index.ts): Refactor code to remove setLockChat function and lockChat variable
♻️ (buildUtils.ts): Refactor code to remove setLockChat function and references
* ♻️ (chat-view.tsx): refactor variable name 'lockChat' to 'isBuilding' for better clarity and semantics in the code.
* 🔧 (chat-view.tsx, chat-input.tsx, button-send-wrapper.tsx, text-area-wrapper.tsx, upload-file-button.tsx, use-focus-unlock.ts, use-upload.ts, chat-message.tsx, index.ts): Remove lockChat variable and replace it with isBuilding variable to improve code readability and consistency.
* ♻️ (button-send-wrapper.tsx): remove unnecessary disabled prop from Button component to improve code readability and maintainability
* feat: Add CustomLoader component and integrate with loading states in Admin, Flow, and Main pages
* refactor: simplify CustomLoader component and remove conditional loading logic
* feat: add configurable size to CustomLoader component
* ✨ (reactflowUtils.ts): add new function filterHiddenFieldsEdges to filter out edges based on hidden fields in node templates
* ♻️ (reactflowUtils.ts): refactor filterHiddenFieldsEdges function to accept targetNode directly instead of nodes array to improve code readability and maintainability
* 🐛 (reactflowUtils.ts): fix a bug where nodeInputType is accessed without null check, causing potential runtime error
---------
Co-authored-by: anovazzi1 <otavio2204@gmail.com>
* feat: FIrst pass at file management API
* [autofix.ci] apply automated fixes
* Add delete and edit endpoints
* [autofix.ci] apply automated fixes
* Add file size and duplicate name handling
* Ensure the File model has a unique name
* Ensure count is before extension
* [autofix.ci] apply automated fixes
* Add the correct path to the return
* Added function to handle list of paths in File component
* [autofix.ci] apply automated fixes
* Update input_mixin.py
* Refactor to a v2 endpoint
* Add unit tests
* Update test_files.py
* Update frontend.ts
* [autofix.ci] apply automated fixes
* Remove extension from name
* Cast the string type for like
* Update files.py
* Update base.py
* Update base.py
---------
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: Lucas Oliveira <lucas.edu.oli@hotmail.com>
* fix note node size
* ♻️ (NoteNode/index.tsx): remove commented out code for debounced resize handler to improve code readability and maintainability
* feat: update NoteNode to resize and persist dimensions in state
* 🐛 (generalBugs-shard-10.spec.ts): fix clicking on the last element with the text "openai" instead of the first one to match the intended behavior
✨ (generalBugs-shard-10.spec.ts): refactor test to use forEach loop for better readability and accuracy in comparing text contents
* 🐛 (general-bugs-save-changes-on-node.spec.ts): add 500ms delay to fix flakiness in tests related to clicking elements and waiting for selectors to appear
* ✨ (appHeaderComponent/index.tsx): add data-testid attribute to app header for testing purposes
📝 (general-bugs-save-changes-on-node.spec.ts): update verifyTextareaValue function to accept an additional parameter flowName for better test coverage and clarity
📝 (general-bugs-save-changes-on-node.spec.ts): add functionality to input and fill a random flow name in the test scenario for improved test coverage and reliability
---------
Co-authored-by: anovazzi1 <otavio2204@gmail.com>
Co-authored-by: Gabriel Luiz Freitas Almeida <gabriel@langflow.org>
* ✨ (NodeName/index.tsx): add cursor-grab class to improve user experience when dragging the node
✨ (NodeName/index.tsx): add nodrag class to prevent text selection when dragging the node
✨ (NodeStatus/index.tsx): add nodrag class to prevent text selection when dragging the node
✨ (GenericNode/index.tsx): add nopan, nodelete, nodrag, noflow classes to improve node dragging behavior
* 📝 (NodeDescription/index.tsx): Update cursor style to 'auto' for better user experience
📝 (NodeName/index.tsx): Update cursor style to 'auto' for better user experience
📝 (NodeOutputfield/index.tsx): Add cursor style 'pointer' to improve interactivity
* ✨ (NodeDescription/index.tsx): Add support for editing node description when selected and editNameDescription is true
✨ (NodeName/index.tsx): Add support for editing node name when selected and editNameDescription is true
🔧 (GenericNode/index.tsx): Introduce useAlternate hook to handle toggling editNameDescription state
📝 (use-alternate.tsx): Add custom hook useAlternate to handle toggling boolean state
🔧 (style/index.css): Add new CSS variable --zinc-foreground for styling purposes
🔧 (tailwind.config.mjs): Add new tailwind color variable "zinc-foreground" for styling purposes
* 📝 (NodeDescription/index.tsx): Remove unnecessary setInputDescription call and update useEffect dependencies for better performance
📝 (NodeDescription/index.tsx): Update className for Textarea component to improve styling and readability
📝 (NodeDescription/index.tsx): Update className for generic-node-desc-text to improve styling and cursor behavior
📝 (NodeName/index.tsx): Remove unnecessary setInputName call and update useEffect dependencies for better performance
📝 (NodeName/index.tsx): Update className for span element to improve cursor behavior and styling
📝 (GenericNode/index.tsx): Add useRef for node element and implement useChangeOnUnfocus hook for better handling of focus events
📝 (GenericNode/index.tsx): Update className for pencil icon based on editNameDescription state for better visual feedback
📝 (GenericNode/index.tsx): Add editNameDescription to dependencies of useCallback to prevent unnecessary re-renders
📝 (GenericNode/index.tsx): Add editNameDescription to dependencies of useEffect to handle changes in editNameDescription state
📝 (use-change-on-unfocus.tsx): Implement custom hook useChangeOnUnfocus for handling focus events and state changes
* Refactor NodeDescription to remove old logic and variables
* Refactor NodeName component to remove unnecessary logic and variables
* [autofix.ci] apply automated fixes
* ✨ (NodeDescription/index.tsx): Add functionality to edit node description and handle events like blur, key down, and double click for sticky notes
📝 (NoteNode/index.tsx): Introduce useAlternate hook to toggle edit mode for node description in NoteNode component
* ♻️ (NoteNode/index.tsx): refactor useAlternate hook usage to simplify code and improve readability
* 🔧 (GenericNode/index.tsx): refactor className to conditionally apply translate-x styles based on showNode state for improved UI responsiveness
* 📝 (NodeDescription/index.tsx): Refactor handleBlurFn and handleKeyDownFn to improve code readability and maintainability
📝 (NodeName/index.tsx): Refactor handleBlur and handleKeyDown functions for better code organization and readability
📝 (GenericNode/index.tsx): Update toggleEditNameDescription prop to setEditNameDescription for consistency and clarity
📝 (use-change-on-unfocus.tsx): Remove unnecessary handleEscape function and handleBlur event listener for better code simplicity and performance
* 📝 (NodeDescription/index.tsx): Update CSS class name to use 'focus-border-primary' instead of 'focus-border-black' for consistency and clarity
📝 (GenericNode/index.tsx): Add data-testid attribute to save and edit name description buttons for testing purposes
📝 (edit-name-description-node.spec.ts): Add test to verify user can edit name and description of a node in the UI
* ✨ (GenericNode/index.tsx): Add functionality to show and hide toolbar with animation based on node selection status
📝 (get-class-toolbar-transform.ts): Create helper function to determine transform classes for toolbar animation based on showToolbar and showNode status
* ✨ (NodeDescription/index.tsx): add setHasChangedNodeDescription prop to update parent component when node description changes
✨ (NodeName/index.tsx): add setHasChangedNodeDescription prop to update parent component when node name changes
✨ (GenericNode/index.tsx): add hasChangedNodeDescription state and setHasChangedNodeDescription function to track changes in node description and update parent component
📝 (edit-name-description-node.spec.ts): add wait for sidebar custom component button and timeout to improve test reliability
* ✨ (group.spec.ts): Update click event on "title-Group" element to improve user interaction
🐛 (group.spec.ts): Fix click event on "save-name-description-button" element to properly save changes
🐛 (general-bugs-save-changes-on-node.spec.ts): Increase timeout for selectors to prevent test failures due to slow loading
🐛 (general-bugs-save-changes-on-node.spec.ts): Fix random value generation to ensure consistent length
🐛 (general-bugs-save-changes-on-node.spec.ts): Fix click event on "add-component-button-text-output" element to add component correctly
🐛 (general-bugs-save-changes-on-node.spec.ts): Fix timeout for selector to prevent test failures due to slow loading
🐛 (general-bugs-save-changes-on-node.spec.ts): Fix verifyTextareaValue function to properly verify textarea values
---------
Co-authored-by: anovazzi1 <otavio2204@gmail.com>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
* ✨ (NodeStatus): Add support for utility store in NodeStatus component to manage dismissAll state
🔧 (GenericNode): Import and use utility store in GenericNode component to access dismissAll state
🔧 (use-reset-dismiss-update-all): Create hook to reset dismissAll state in utility store
🔧 (UpdateAllComponents): Import and use utility store in UpdateAllComponents component to access dismissAll state
🔧 (header): Import useResetDismissUpdateAll hook in header component to reset dismissAll state
🔧 (list): Import useResetDismissUpdateAll hook in list component to reset dismissAll state
🔧 (utilityStore): Add dismissAll state and setDismissAll method to utility store
🔧 (utility/index): Add dismissAll state and setDismissAll method to UtilityStoreType
* ✨ (NodeStatus/index.tsx): add dismissAll prop to NodeStatus component to handle dismissing all notifications
✨ (GenericNode/index.tsx): add dismissAll prop to GenericNode component to handle dismissing all notifications
✨ (UpdateAllComponents/index.tsx): add e.stopPropagation() to onClick event handler to prevent event bubbling
🔧 (header/index.tsx): remove unused import useResetDismissUpdateAll from header component
* ✨ (NodeStatus/index.tsx): Add functionality to handle updating a component when it is outdated and not user-edited
🔧 (GenericNode/index.tsx): Update handleUpdateComponent function to handleUpdateCode for consistency
🔧 (appHeaderComponent/index.tsx): Add useResetDismissUpdateAll hook to reset dismiss update all functionality
🔧 (use-reset-dismiss-update-all.ts): Update useResetDismissUpdateAll hook to only reset dismiss update all in flow location path
🔧 (list/index.tsx): Remove useResetDismissUpdateAll hook from ListComponent as it is no longer needed
🔧 (index.css): Remove extra whitespace in CSS file
* 🔧 (GenericNode/index.tsx): improve conditional class logic to include dismissAll variable in className calculation
---------
Co-authored-by: anovazzi1 <otavio2204@gmail.com>
* feat: implement get_or_create_default_folder function to ensure default folder exists for users
* refactor: replace create_default_folder_if_it_doesnt_exist with get_or_create_default_folder for user folder creation
* test: add unit tests for get_or_create_default_folder function
* ✨ (generalBugs-shard-10.spec.ts): refactor test script to improve readability and maintainability by chaining actions on page elements instead of using separate lines for each action
---------
Co-authored-by: cristhianzl <cristhian.lousa@gmail.com>
🐛 (utils.ts): Fix logic in logHasMessage, logTypeIsUnknown, and logTypeIsError functions to correctly handle cases where outputs may be undefined or empty arrays.
📝 (NodeOutputfield/index.tsx): Add styleClasses property with value "z-40" to improve styling
📝 (outputModal/index.tsx): Add className property with value "z-50" to improve styling
📝 (textModal/index.tsx): Add handleEscapeKeyDown function to handle escape key event and close modal
* feat: Add ScrapeGraph icon component
This commit adds a new icon component called ScrapeGraph. It is a forwardRef component that renders the ScrapeGraphAI icon. The component is added to the list of sidebar bundles and can be used to display the ScrapeGraph icon in the UI.
* refactor: Update ScrapeGraph bundle name
* [autofix.ci] apply automated fixes
---------
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: Gabriel Luiz Freitas Almeida <gabriel@langflow.org>
* Changed math to show better edge when loop source is on the left side of the target
* Added logic to only allow loops if it comes from a loop edge
* Removed unused console log
🐛 (sliderComponent/index.tsx): adjust styling to fix alignment issue with input element in SliderComponent
Co-authored-by: Gabriel Luiz Freitas Almeida <gabriel@langflow.org>