## Description
This Pull Request implements four new features in the langflow Workflow
project:
- Copy and Paste feature for multiple nodes
- Undo and Redo feature for node actions
### Copy and Paste Feature
The Copy and Paste feature allows users to select multiple nodes by
holding down the `Shift` key and dragging the mouse over the nodes, copy
them using the `Ctrl+C` keyboard shortcut, and paste them into a
different location within the workflow by leaving the mouse pointer at
the desired location and pressing `Ctrl+V`.
### Undo and Redo Feature
The Undo and Redo feature allows users to undo and redo actions on the
workflow nodes using the `Ctrl+Z` and `Ctrl+Shift+Z` keyboard shortcuts,
respectively. When a user undoes an action, the state of the nodes in
the workflow is reverted to the previous state. Similarly, when a user
redoes an action, the state of the nodes is restored to the previous
state that was undone.
## How to Test
To test these features, follow the below steps:
1. Run the `langflow` application.
2. Add a few nodes to the workflow.
3. Select one or more nodes by holding down the `Shift` key and dragging
the mouse over the nodes.
4. Press `Ctrl+C` to copy the selected nodes.
5. Leave the mouse pointer at a different location in the workflow and
press `Ctrl+V` to paste the copied nodes.
6. Use the `Ctrl+Z` and `Ctrl+Shift+Z` keyboard shortcuts to undo and
redo actions on the nodes in the workflow.
feat(api): add predict request and response schemas
refactor(interface): rename get_result_and_steps to get_result_and_thought and remove async prefix
fix(interface): use get_result_and_thought instead of async_get_result_and_steps in process_graph_cached
The `ZeroShotAgent` instantiation in `JsonAgent`, `CSVAgent`, `VectorStoreAgent`, `SQLAgent`, and `MalfoyAgent` classes were updated to include a `# type: ignore` comment to suppress type checking errors.
refactor(test_cache.py): update import statements and function names
test(cache): add tests for load_or_build_langchain_object, build_langchain_object_with_caching, build_graph, and cache size limit
fix(base.py): raise ValueError if content is None in save_binary_file function
feat(nodes.py): add memory field to TimeTravelGuideChainNode
test(test_chains_template.py): add test for memory field in TimeTravelGuideChainNode
The `tool_names` variable was changed from a list to a set in the `JsonAgent`, `CSVAgent`, `VectorStoreAgent`, `SQLAgent`, and `MalfoyAgent` classes. This change was made to improve performance and avoid duplicates.
This commit changes the `tool_names` variable from a set to a list in the `JsonAgent`, `CSVAgent`, `VectorStoreAgent`, `SQLAgent`, `VectorStoreRouterAgent`, `MalfoyAgent`, and `load_agent_executor_from_config` classes. This is done to ensure that the `tool_names` variable is always a list, even when there is only one tool.