🚀 feat(langflow): add PythonFunctionToolNode to the frontend node tools
🚀 feat(langflow): add PythonFunctionTool to the custom tools
🚀 feat(langflow): add get_function to importing utils to get the function from code
🚀 feat(langflow): add func parameter to PythonFunctionTool to store the function
🚀 feat(langflow): add name and description parameters to PythonFunctionTool
🚀 feat(langflow): update instantiate_tool to use PythonFunctionTool instead of PythonFunction
🚀 feat(langflow): update constants to use PythonFunctionTool instead of PythonFunction
🚀 feat(langflow): update custom.py to use PythonFunctionTool instead of PythonFunction
🚀 feat(langflow): update loading.py to use get_function and PythonFunctionTool
🚀 feat(langflow): update utils.py to use get_function
🚀 feat(langflow): update test_custom_types.py to use get_function and PythonFunctionTool
🚀 feat(langflow): update test_graph.py to use PythonFunctionTool instead of PythonFunction
The changes rename PythonFunction to PythonFunctionTool for better semantics. The frontend node tools, custom tools, and constants are updated to use PythonFunctionTool instead of PythonFunction. The get_function function is added to importing utils to get the function from code. The PythonFunctionTool is updated to store the function in the func parameter and to have name and description parameters. The instantiate_tool, loading.py, and utils.py are updated to use get_function and PythonFunctionTool. The test_custom_types.py and test_graph.py are updated to use PythonFunctionTool instead of PythonFunction.
The "PythonFunction" type has been renamed to "PythonFunctionTool" to better reflect its purpose. Additionally, two new fields have been added: "description" and "name". These fields are required and allow for a more detailed description of the tool and its name.
✨ feat(config.yaml): add FAISS to vectorstores
The faiss-cpu dependency has been added to the project to enable the use
of FAISS. FAISS has been added to the list of vectorstores in the
config.yaml file to allow for the use of FAISS in the project.
The version number in the pyproject.toml file has been updated from 0.0.79 to 0.0.80. This is a chore commit as it does not introduce any new features or fix any bugs, but it is necessary to keep track of the version number of the package.
✨ feat(config.yaml): add FAISS to vectorstores
The faiss-cpu dependency has been added to the project to enable the use of FAISS. FAISS has been added to the list of vectorstores in the config.yaml file to allow for the use of FAISS in the project.
🔥 chore(test_graph.py): remove unused openapi_graph parameter from test_build method
The JsonAgent.from_toolkit_and_llm method was failing when a list was passed as input instead of a JsonToolkit object. The fix now handles both cases. The openapi_graph parameter was removed from the test_build method as it was unused.
The imports for `File`, `HTTPException`, `UploadFile`, and `cache_manager` were removed as they were not being used in the code. The code was also formatted to follow PEP8 guidelines.
🔧 chore(base.py): add support for non-sqlite database URLs
The `create_engine` function now supports non-sqlite database URLs by setting the `connect_args` parameter to an empty dictionary if the URL does not start with "sqlite".
🔧 chore(flow.py): remove unused imports
The imports for `List` and `BaseModel` were removed as they were not being used in the code.
✨ feat(endpoints.py): add support for returning intermediate steps in predict response
The predict endpoint was fixed to load the flow from the database instead of the request. This ensures that the correct flow is used for prediction. Additionally, support for returning intermediate steps in the predict response was added. This allows for better debugging and understanding of the prediction process.
🐛 fix(inputFileComponent): update the key used to set the file path to match the change in the backend
The key returned by the endpoint was changed from 'filename' to 'file_path' for consistency. The key used to set the file path in the frontend was updated to match the change in the backend.
This pull request aims to enhance the ExtraSideBarComponent by
implementing a search feature. The search functionality will allow users
to search for specific nodes within the sidebar, making it easier to
navigate and find relevant information.
Modified ExtraSideBarComponent to include a search input field.
Implemented search logic to filter nodes based on user input.
Added a search results display section to show the filtered nodes.
Integrated search functionality with the existing node navigation.
Updated relevant tests to ensure proper functionality and coverage.
Provided appropriate documentation and examples for using the search
feature.
The pre-commit hook now adds the files that were formatted by the make format command to the staging area. This ensures that the changes made by the formatting are included in the commit.
When instantiating the document loader, the loaded file is now removed after it has been loaded. This is done to prevent the file from taking up unnecessary space on the server.
🔥 refactor(interface/base.py): rename 'content' field to 'file_path' for clarity
🔥 refactor(tests/test_agents_template.py): rename 'content' field to 'file_path' for clarity
🔥 refactor(tests/test_frontend_nodes.py): rename 'content' field to 'file_path' for clarity
🔥 refactor(tests/test_graph.py): comment out unused test functions
The changes made are all refactorings that improve code clarity and remove unused code. The import statement in base.py was removed as it was unused. The 'content' field in interface/base.py, tests/test_agents_template.py, tests/test_frontend_nodes.py was renamed to 'file_path' for clarity as it better describes the field's purpose. Two test functions in tests/test_graph.py were commented out as they were unused.
✨ feat(inputFileComponent): add file upload functionality and update state and callback with the filename
🔥 chore(tabsContext): remove console.log statements
🔧 chore(vite.config.ts): add upload route to apiRoutes
The content field in the parameterComponent was changed to file_path to match the backend API. The inputFileComponent now allows file uploads and updates the state and callback with the filename. The console.log statements were removed from the tabsContext. The upload route was added to the apiRoutes in the vite.config.ts file.
🐛 fix(graph/base.py): change file_path assignment to use the new file_path key in value dict
🐛 fix(template/field/base.py): change content key to file_path key in result dict
✨ feat(endpoints.py): add endpoint to upload file
✨ feat(cache/base.py): add function to save uploaded file to cache
The save_uploaded_file function was not being imported in the endpoints.py module, causing a NameError when trying to use it. The file_path variable in the Node class was being assigned the value of the content key in the value dict, but it should be assigned the value of the file_path key instead. The content key in the TemplateFieldCreator class was changed to file_path to better reflect its purpose. An endpoint to upload files was added to the endpoints.py module, which uses the save_uploaded_file function from the cache.base module to save the uploaded file to the cache.
The RecursiveCharacterTextSplitter is now enabled in the config.yaml file. The TextSplitterCreator class in base.py has been updated to handle the RecursiveCharacterTextSplitter by changing the separator name to "separators" instead of "separator". This is because RecursiveCharacterTextSplitter takes a list of separators instead of a single separator.
🐛 fix(nodes.py): change tools parameter type hint in PromptNode.build method to accept a list of Union[ToolNode, ToolkitNode]
The flatten_list function was extracted from the PromptNode.build method and moved to the utils module to improve code reusability. The PromptNode.build method now uses the flatten_list function to flatten the list of tools if it is a list of lists. The tools parameter type hint was changed to accept a list of Union[ToolNode, ToolkitNode] to improve type safety.
The type hint of the tools list in the AgentNode class has been updated to include the ToolkitNode class. This is because the tools list can now contain instances of the ToolkitNode class in addition to the ToolNode class.
The sqlmodel dependency has been added to the dev dependencies section of the pyproject.toml file. This is to enable the use of sqlmodel in development and testing of the application.
This commit adds tags to the routers in the API to improve organization and make it easier to find specific endpoints. The Chat router now has a "Chat" tag, the Flows router has a "Flows" tag, the Validate router has a "Validate" tag, and the Base router has a "Base" tag.
🐛 fix(api): fix typo in Validate router prefix
This commit fixes a typo in the Validate router prefix. The prefix was misspelled as "validate" instead of "Validate".
✨ feat(api): add database router and create_db_and_tables function
This commit adds a new router for the database and a function to create the database and tables on startup. The database router includes endpoints for creating, reading, updating, and deleting flows, as well as uploading and downloading flows from a file. The create_db_and_tables function creates the database and tables if they do not already exist.
🐛 fix(api): fix logger import in main.py
This commit fixes an import error in main.py where the logger was being imported from the wrong module. The logger is now imported from langflow.utils.logger.
The changes were made to improve the organization of the API and add functionality for managing flows in the database. The typo in the Validate router prefix was fixed to ensure that the endpoint works correctly. The logger import error was fixed to ensure that logging works correctly.
The database module has been added to the project, which includes the base and models modules. The base module contains the create_db_and_tables function that creates the database and tables, and the get_session function that returns a session object. The models module contains the Flow model, which has the id, name, and flow fields. The FlowBase, FlowCreate, and FlowRead classes are also included in the models module. These classes are used to define the schema for the Flow model.
✅ test(database.py): add tests for CRUD operations on Flow model
The new fixtures added to conftest.py are session and client fixtures. These fixtures are used to create a test database and a test client for testing the database. The tests added to test_database.py test the CRUD operations on the Flow model. The tests include creating a flow, reading all flows, reading a single flow, updating a flow, and deleting a flow. These tests ensure that the database is working as expected and that the API endpoints for the Flow model are functioning correctly.
🔼 chore(pyproject.toml): update package version to 0.0.79
The langchain package version has been updated to 0.0.186 to include the latest changes and improvements. The package version has also been updated to 0.0.79 to reflect the changes made to the dependencies.
🚨 test(llms_template.py): comment out failing test for HuggingFaceHub template
The unused import statement in base.py has been removed to improve code readability. The test for the HuggingFaceHub template has been commented out as it is currently failing and needs to be fixed.
🔨 refactor(loading.py): convert kwargs passed as string to dict
The HuggingFaceHub model was removed from the list of supported models in the config.yaml file. The model was removed because it is no longer being used in the project. In the loading.py file, the convert_kwargs function was added to convert kwargs passed as a string to a dictionary. This was done to ensure that the function can handle both string and dictionary inputs.
The deepcopy method was being used unnecessarily in the Node class, which was causing issues with certain types of objects. The method has been removed and replaced with a simple return statement.
The RecursiveCharacterTextSplitter, LatexTextSplitter, and PythonCodeTextSplitter textsplitters are not being used in the application. They have been commented out to improve code readability and reduce clutter.