Commit graph

459 commits

Author SHA1 Message Date
Gabriel Luiz Freitas Almeida
1d33933d64 🐛 fix(__main__.py): make database_url parameter optional in update_settings function
🐛 fix(llms.py): add name check before checking if "azure" is in name.lower()
🔨 refactor(test_database.py): rename updated_flow_style variable to to_update_flow_style for clarity
The update_settings function now has an optional database_url parameter to allow for more flexibility in updating settings. The llms.py file now checks if the name variable is not None before checking if "azure" is in name.lower(). In test_database.py, the updated_flow_style variable is renamed to to_update_flow_style for clarity.
2023-06-06 16:30:34 -03:00
Gabriel Luiz Freitas Almeida
ce9b3bfbd3 🎨 refactor(schemas.py): add FlowListRead schema and SQLModelSerializable base model
The FlowListRead schema is added to support reading a list of flows with their styles. The SQLModelSerializable base model is added to support serialization of SQLModel objects to JSON using orjson. This improves performance and reduces memory usage.

🐛 fix(flow.py): add optional style relationship to Flow model
The style relationship is now optional to allow for flows without styles. This is achieved by setting the uselist parameter of the sa_relationship_kwargs to False.

 feat(flow.py): add FlowReadWithStyle and FlowUpdate models
The FlowReadWithStyle model is added to support reading a flow with its style. The FlowUpdate model is added to support updating a flow.
2023-06-06 16:24:56 -03:00
Gabriel Luiz Freitas Almeida
32ae6fe0ef 🎉 feat(flow_style.py): add FlowStyle model and its CRUD classes
The FlowStyle model is added to the project, which represents the style of a flow. It has a color and an emoji field, and a foreign key to the Flow model. The CRUD classes are also added to the file, which are FlowStyleCreate, FlowStyleRead, and FlowStyleUpdate. These classes are used to create, read, and update FlowStyle instances respectively.
2023-06-06 16:24:20 -03:00
Gabriel Luiz Freitas Almeida
cac0cbc374 🔥 chore(flow_styles.py): remove unused imports and update comments
The imports for the deleted FlowStyle model are removed from flow_styles.py. The comments for the FlowStyleCreate class are updated to reflect the fields it contains.
2023-06-06 16:24:01 -03:00
Gabriel Luiz Freitas Almeida
183f80b1fc 🔥 chore(database.py): remove unused code and endpoints related to flows
 feat(router.py): add new routers for flows and flow styles
🔧 refactor(__init__.py): add new routers to __all__ list
🔧 refactor(conftest.py): update import statement for get_session function
The unused code and endpoints related to flows have been removed from the database.py file. New routers for flows and flow styles have been added to the router.py file. The __all__ list in the __init__.py file has been updated to include the new routers. The import statement for the get_session function in the conftest.py file has been updated to reflect the new location of the function.
2023-06-06 16:23:37 -03:00
Gabriel Luiz Freitas Almeida
f5f0983116 Merge remote-tracking branch 'origin/dev' into db 2023-06-06 12:57:46 -03:00
Gabriel Luiz Freitas Almeida
0eb60c0bf0
API Refactor and structure changes (#449) 2023-06-06 12:52:41 -03:00
Gabriel Luiz Freitas Almeida
94b346196b
Initial support for Azure LLM nodes. (#443) 2023-06-06 10:14:31 -03:00
Gabriel Luiz Freitas Almeida
228f938cd8 🔨 refactor(types.py): move extract_input_variables_from_prompt import to interface.utils module
🔨 refactor(custom.py, loading.py, prompts/custom.py, run.py): update import statements to use extract_input_variables_from_prompt from interface.utils module
🔨 refactor(run.py): remove unused imports and functions
🔨 refactor(utils.py): add type hinting to extract_input_variables_from_prompt function and remove unused imports
The extract_input_variables_from_prompt function has been moved to the interface.utils module to improve code organization. The import statements in the affected modules have been updated to reflect this change. Unused imports and functions have been removed from the run.py module. Type hinting has been added to the extract_input_variables_from_prompt function in the interface.utils module.

🚀 feat(processing): add processing module with get_result_and_steps and fix_memory_inputs functions
The processing module was added to the project with two functions: get_result_and_steps and fix_memory_inputs. The get_result_and_steps function extracts the result and thought from a LangChain object and returns them. The fix_memory_inputs function checks if a LangChain object has a memory attribute and if that memory key exists in the object's input variables. If not, it gets a possible new memory key using the get_memory_key function and updates the memory keys using the update_memory_keys function.
2023-06-06 10:05:46 -03:00
Gabriel Luiz Freitas Almeida
3bfee4d445 🚀 feat(graph): add from_payload class method to Graph class
🚀 feat(utils.py): import extract_input_variables_from_prompt from langflow.interface.utils
The `from_payload` class method is added to the `Graph` class to create a graph from a payload. This method takes a dictionary as input and returns a `Graph` object. The `extract_input_variables_from_prompt` function is imported from `langflow.interface.utils` to extract input variables from a prompt. This function is used in other parts of the codebase to extract input variables from prompts.
2023-06-06 10:05:01 -03:00
Gabriel Luiz Freitas Almeida
7f4eea1e59 🚀 feat(chat): add ChatManager and ChatHistory classes to manage chat history and active connections
 feat(utils.py): add process_graph function to process graph data and generate result and thought
The ChatManager class manages active connections and chat history. The ChatHistory class manages the chat history for a client. The process_graph function processes graph data and generates a result and thought. This function is used in the ChatManager class to generate a response back to the frontend.
2023-06-06 10:02:21 -03:00
Gabriel Luiz Freitas Almeida
2bfe93e0b8 🚀 feat(langflow): add new API endpoints for chat, validation, and version
This commit adds new API endpoints for chat, validation, and version. The chat endpoint is a websocket endpoint for chat. The validation endpoint has three sub-endpoints for validating code, prompt, and node. The version endpoint returns the version of LangFlow.
2023-06-06 10:01:44 -03:00
Gabriel Luiz Freitas Almeida
3e5878ddc2 🎉 feat(langflow): add new files base.py and callback.py
The base.py file contains the following classes and functions:
- CacheResponse: a pydantic BaseModel that represents a response containing a dictionary of data
- Code: a pydantic BaseModel that represents a code string
- Prompt: a pydantic BaseModel that represents a prompt template string
- CodeValidationResponse: a pydantic BaseModel that represents a response containing the validation results of code
- PromptValidationResponse: a pydantic BaseModel that represents a response containing the validation results of a prompt
- validate_prompt: a function that validates a prompt template string and returns a PromptValidationResponse object
- check_input_variables: a function that checks if input variables contain invalid characters and returns a list of fixed input variables

The callback.py file contains the following classes:
- AsyncStreamingLLMCallbackHandler: an AsyncCallbackHandler that handles streaming LLM responses asynchronously
- StreamingLLMCallbackHandler: a BaseCallbackHandler that handles streaming LLM responses

These files were added to provide support for Langflow's backend API.
2023-06-06 10:01:18 -03:00
Gabriel Luiz Freitas Almeida
bdbb4a8127 🚀 feat(api): add versioning to the API and restructure the router
The API now has versioning, with the prefix "/api/v1". The router has been restructured to include the chat, endpoints, and validate routers. This improves the organization of the code and makes it easier to add new routers in the future.
2023-06-06 10:00:38 -03:00
Gabriel Luiz Freitas Almeida
ac42e8a66c chore: remove refactored files 2023-06-06 10:00:15 -03:00
Gabriel Luiz Freitas Almeida
3342e03a2c 🔀 refactor(langflow): move routers to a single file and add health check endpoint
The routers for the langflow API have been moved to a single file for better organization and maintainability. The routers have been imported and included in the main.py file using the new file. A new health check endpoint has been added to the API to check the status of the application.
2023-06-06 09:59:37 -03:00
Gabriel Luiz Freitas Almeida
77ee6ecf59 Merge remote-tracking branch 'origin/dev' into db 2023-06-05 22:18:07 -03:00
Gabriel Luiz Freitas Almeida
d39514a137
Toolkits now work as tools (#410) 2023-06-05 20:28:06 -03:00
Gabriel Luiz Freitas Almeida
5a103f0f6f 🔨 refactor(base.py): extract methods to handle model-specific and API key-specific field values
This commit refactors the FrontendNode class by extracting two methods to handle specific field values related to models and API keys. The _handle_model_specific_field_values method handles the options and is_list properties for fields related to models, while the _handle_api_key_specific_field_values method handles the display_name and required properties for fields related to API keys. This improves the readability and maintainability of the code.
2023-06-05 13:48:17 -03:00
Gabriel Luiz Freitas Almeida
ec585b8acc 🐛 fix(flow.py): change flow field type from str to Dict to allow for JSON data
 feat(flow.py): add validator to ensure flow field is a valid JSON object with required fields
The flow field in the FlowBase model has been changed from a string to a dictionary to allow for JSON data. A validator has been added to ensure that the flow field is a valid JSON object with the required fields. The tests have been updated to reflect these changes.
2023-06-05 13:40:14 -03:00
Jacob Lee
5b28bbb795 Initial support for Azure LLM nodes.
There are still some rough edges due to underlying langchain and
openai API limitations, e.g. hwchase17/langchain#3769 and
openai/openai-python#411. Notably, you can't use the Azure and
non-Azure node types in the same server, since there's global openai
configuration needed to choose between the two. So it's probably best
to still leave the Azure node types commented out in the default
config. But with this PR, if you uncomment those nodes and start the
server with OPENAI_API_TYPE=azure, you will have working Azure nodes.
2023-06-05 09:55:16 -05:00
Gabriel Luiz Freitas Almeida
5a46c1e1a0 🐛 fix(database.py): handle case where data does not contain "flows" key
 feat(database.py): add default argument to json.dumps to handle datetime objects
🚨 test(database.py): add tests for batch flow creation, file upload, and file download
The fix in database.py handles the case where the data dictionary does not contain the "flows" key. This is important because the code assumes that the "flows" key is present and will raise an exception if it is not. The fix adds a check to see if the "flows" key is present and if not, it creates a new FlowListCreate object with the data as a list of FlowCreate objects.

The feature in database.py adds a default argument to the json.dumps function to handle datetime objects. This is important because the default json encoder does not handle datetime objects and will raise an exception if it encounters one.

The tests in test_database.py cover the batch creation of flows, uploading a file containing flows, and downloading a file containing flows. These tests ensure that the endpoints are working as expected and that the data is being handled correctly.
2023-06-04 22:58:43 -03:00
Gabriel Luiz Freitas Almeida
af0d9456b5 Merge branch 'dev' into db 2023-06-04 22:14:25 -03:00
Gabriel Luiz Freitas Almeida
42c7e1c331 🚀 feat(flow.py): add relationship to FlowStyle model
🚀 feat(flowstyle.py): add FlowStyle model
🚀 feat(flowstyle.py): add FlowStyleCreate and FlowStyleRead models
🐛 fix(settings.py): correct typo in database_url variable name
The Flow model now has a relationship to the FlowStyle model, which allows for the creation of a FlowStyle object that is associated with a Flow object. The FlowStyle model is a new model that contains the color and emoji fields, which are used to style the Flow object. The FlowStyleCreate and FlowStyleRead models are used to create and read FlowStyle objects respectively. The typo in the database_url variable name has been corrected to ensure that the application connects to the correct database.
2023-06-04 21:36:03 -03:00
Gabriel Luiz Freitas Almeida
b754c8b490 Merge branch 'jimwhite-anthropic' into dev 2023-06-02 17:43:19 -03:00
Jim White
cce41189e9 Trim too long comments about Anthropic models. 2023-06-02 12:18:38 -07:00
Jim White
07afc08129 Add model names for Anthropic and add ChatAnthropic (preferred over the deprecated Anthropic LLM). 2023-06-02 12:08:57 -07:00
Gabriel Luiz Freitas Almeida
df3cdb90b7 🔨 refactor(types.py): reorder class definitions to match the order of their usage in the code
The order of the class definitions in the file has been changed to match the order of their usage in the code. This improves the readability of the code and makes it easier to understand the relationships between the classes. No functionality has been changed.
2023-06-02 14:21:38 -03:00
Gabriel Luiz Freitas Almeida
534f47f153 🔨 refactor(types.py): import flatten_list function from graph.utils module
This commit simply imports the flatten_list function from the graph.utils module to be used in the AgentVertex class. This improves the readability of the code and reduces the number of lines of code.
2023-06-02 14:14:47 -03:00
Gabriel Luiz Freitas Almeida
9517ffe3b3 Merge remote-tracking branch 'origin/dev' into fix_toolkits 2023-06-02 12:56:02 -03:00
Gabriel Luiz Freitas Almeida
e21447aad8
refactor: change Node to Vertex (#426) 2023-06-02 12:16:55 -03:00
Gabriel Luiz Freitas Almeida
b7286afd32 🎨 style(types.py): improve readability of return statement in TextSplitterVertex
The return statement in TextSplitterVertex was improved to be more readable by adding a new line before the Documents field. This makes it easier to read and understand the output of the function.
2023-06-02 12:14:03 -03:00
Gabriel Luiz Freitas Almeida
73e07be0c7
Merge branch 'dev' into python_function_tool 2023-06-02 12:11:02 -03:00
Jim White
8a049187df Add Anthropic to LLMs including an icon. 2023-06-01 22:55:02 -07:00
Gabriel Luiz Freitas Almeida
0cef4bd818 refactor: change Node to Vertex 2023-06-01 15:37:11 -03:00
Gabriel Luiz Freitas Almeida
5b5eea9895 🚀 feat(langflow): reorganize graph package to improve modularity and maintainability
The changes include:
- Moved the `Edge` class to a new `edge` package
- Moved the `Graph` class to a new `graph` package
- Moved the `Node` class to a new `node` package
- Moved the `VectorStoreNode` class to the `node/types.py` module
- Moved the `Edge`, `Graph`, and `Node` classes to their respective `base.py` modules
- Added an `__init__.py` file to each package to allow for importing of classes
- Added a `constants.py` module to the `graph` package to store constants used in the `Graph` class
- Refactored the `Graph` class to use the new `Node` and `Edge` classes
- Refactored the `Graph` class to use a dictionary to map node types to their respective classes
- Refactored the `Graph` class to remove invalid nodes from the graph
- Refactored the `Graph` class to handle the LLM node within the graph
- Refactored the `Graph` class to build the nodes before building the edges
- Refactored the `Graph` class to use the `get_node` method to find nodes by id
- Refactored the `Graph` class to use the `get_node_neighbors` method to find the neighbors of a node
- Refactored the `Graph` class to use the `get_children_by_node_type` method to find the children of a node based on the node type

These changes improve the modularity and maintainability of the `langflow` package by separating the classes into their respective packages and modules. The changes also make it easier to add new node types to the `Graph` class by using a dictionary to map node types to their respective classes.

🚀 feat(node): add Node class to represent a node in the graph
🚀 feat(constants.py): add DIRECT_TYPES constant to represent direct types in a node's template
The Node class represents a node in the graph and is responsible for parsing the data and building the module. The DIRECT_TYPES constant is a list of direct types in a node's template.

🚧 chore(types.py): add import statements for typing and Node classes
This commit adds import statements for the typing module and the Node class to the types.py file. This is necessary for the code to run properly as it uses these classes and modules.

🚧 chore(loading.py): remove unnecessary import statement
This commit removes an unnecessary import statement from the loading.py file. The import statement was causing a circular import error and was not needed for the code to run properly.

🚧 chore(run.py): update import statement for Graph class
This commit updates the import statement for the Graph class in the run.py file. The import statement was outdated and was causing an import error.

🚧 chore(conftest.py): update import statement for Graph class
This commit updates the import statement for the Graph class in the conftest.py file. The import statement was outdated and was causing an import error.

🚧 chore(test_graph.py): update import statements for Node and Edge classes
This commit updates the import statements for the Node and Edge classes in the test_graph.py file. The import statements were outdated and were causing import errors.
2023-06-01 15:07:56 -03:00
Gabriel Luiz Freitas Almeida
be09849081 🚀 feat(langflow): rename PythonFunction to PythonFunctionTool for better semantics
🚀 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.
2023-05-31 15:41:16 -03:00
Gabriel Luiz Freitas Almeida
98b1b13d3a 🚀 feat(pyproject.toml): add faiss-cpu dependency
 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.
2023-05-31 12:26:55 -03:00
Gabriel Luiz Freitas Almeida
25d77eaf87 🐛 fix(custom.py): fix JsonAgent.from_toolkit_and_llm method to handle both list and JsonToolkit input
🔥 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.
2023-05-31 11:44:12 -03:00
Gabriel Almeida
fbfcff74c2 🔨 refactor(endpoints.py): remove unused imports and format code
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.
2023-05-31 11:19:43 -03:00
Gabriel Almeida
ae0cc86a76 🐛 fix(endpoints.py): fix predict endpoint to load flow from database instead of request
 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.
2023-05-31 11:13:22 -03:00
Gabriel Almeida
041748b2fb 🔨 refactor(nodes.py): extract flatten_list function to utils module and use it in PromptNode.build method
🐛 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.
2023-05-30 21:47:42 -03:00
Gabriel Almeida
4b6a8595df 🐛 fix(nodes.py): change type hint of tools list to include ToolkitNode
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.
2023-05-30 21:34:23 -03:00
Gabriel Almeida
410ba005cd Merge remote-tracking branch 'origin/dev' into fix_toolkits 2023-05-30 21:26:56 -03:00
Gabriel Almeida
8ea2a825a8 🚀 feat(api): add tags to routers for better organization
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.
2023-05-30 21:25:30 -03:00
Gabriel Almeida
4958e5030a 🎉 feat(database): add database module with base and models modules
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.
2023-05-30 21:24:45 -03:00
Gabriel Almeida
244eee8523 🔥 refactor(base.py): remove unused import statement
🚨 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.
2023-05-30 17:36:59 -03:00
Gabriel Almeida
c1477735aa 🚚 chore(base.py): rename loading module to types
The loading module was renamed to types to better reflect its contents. The import statement was updated to reflect this change.
2023-05-30 17:30:00 -03:00
Gabriel Almeida
2d52c684c4 🔥 refactor(config.yaml): remove HuggingFaceHub from list of supported models
🔨 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.
2023-05-30 16:59:38 -03:00
Gabriel Almeida
38148677f1 🐛 fix(base.py): decrease default chunk size from 4000 to 1000
The default chunk size for text splitting has been decreased from 4000 to 1000 to improve performance and reduce memory usage.
2023-05-30 16:15:30 -03:00