Commit graph

507 commits

Author SHA1 Message Date
Gabriel Luiz Freitas Almeida
d300c0b428 💄 style(chat.py): reformat code to improve readability
The unused imports and exception handling for WebSocketDisconnect and WebSocketException were removed from the chat.py file. The code was reformatted to improve readability.
🔥 refactor(chat.py): remove unused imports and exception handling
2023-06-12 20:40:43 -03:00
Gabriel Luiz Freitas Almeida
fe0c6f7f38 🐛 fix(chat.py): rename websocket_endpoint to chat for better semantics
 feat(chat.py): add build_status endpoint to check if flow_id is in flow_data_store
The function name websocket_endpoint was renamed to chat to improve semantics. The new build_status endpoint was added to check if a flow_id is in the flow_data_store. This endpoint returns a JSON response with a boolean value indicating whether the flow_id is built or not. If the flow_id is not in the flow_data_store, a JSON response with a value of False is returned. If an exception occurs, a 500 HTTPException is raised with the exception message as the detail.
2023-06-12 17:04:52 -03:00
Gabriel Luiz Freitas Almeida
585aeeab6e 🔥 refactor(base.py): remove unnecessary build method call in Graph class
The build method call in the for loop of the build_vertices method is unnecessary as the vertices are already sorted and built in the topological_sort method. The yield from statement is used to return the sorted vertices.
2023-06-12 13:05:27 -03:00
Gabriel Luiz Freitas Almeida
baeadf018d feat(chat.py): improve SSE response by adding node id and valid flag
The changes in this commit handle exceptions that may occur when creating a streaming response. The try-except block ensures that any exceptions are caught and an appropriate response is returned. Additionally, the SSE response has been improved by adding a valid flag and node id to the response. This provides more information to the client about the status of the node build and allows for better error handling.
🐛 fix(chat.py): handle exceptions when creating a streaming response
2023-06-12 13:03:46 -03:00
Gabriel Luiz Freitas Almeida
806d815a10 feat(index.tsx): add support for streaming build process using EventSource
The commented out code for the /build/{client_id} endpoint has been removed as it is no longer needed. The new implementation uses the /build/init endpoint to initiate the build process and then establishes an SSE connection using EventSource to stream the build process. This allows for a more efficient and responsive build process as the client can receive updates in real-time.
🔥 chore(chat.py, index.tsx): remove commented out code for /build/{client_id} endpoint
2023-06-12 11:49:59 -03:00
Gabriel Luiz Freitas Almeida
76f1aa8adf 🐛 fix(chat.py): add check for client_id in in_memory_cache before handling websocket
 feat(chat.py): add support for storing graph data and returning a unique session ID for building langchain object
 feat(chat.py): add support for streaming the build process based on stored flow data
The fix adds a check for the client_id in the in_memory_cache before handling the websocket. This ensures that the flow has been built before sending messages.

The first feature adds support for storing graph data and returning a unique session ID for building the langchain object. This allows the user to build the flow and then send messages.

The second feature adds support for streaming the build process based on stored flow data. This allows the user to see the progress of the build process.
2023-06-12 11:49:24 -03:00
Gabriel Luiz Freitas Almeida
6b57e20504 formatting 2023-06-12 09:45:28 -03:00
Gabriel Luiz Freitas Almeida
42d11894a2 🔀 chore(base.py): change return type of generator_build method from List[Vertex] to Generator
The return type of the generator_build method has been changed from List[Vertex] to Generator to improve the semantics of the method. The method now yields each vertex in the graph instead of returning a list of vertices.
2023-06-12 09:35:19 -03:00
Gabriel Luiz Freitas Almeida
a15cc30da5 🔥 refactor(manager.py): remove unused imports and dependencies
🔥 refactor(utils.py): remove unused imports and dependencies
The changes remove unused imports and dependencies from the codebase, which improves the code's readability and maintainability.
2023-06-12 09:33:54 -03:00
Gabriel Luiz Freitas Almeida
036818e9b9 🔧 refactor(chat.py): rename post_build to stream_build to improve semantics
🐛 fix(chat.py): fix generator_build method to yield node_repr and node_id
 feat(chat.py): add valid and id fields to error response to improve error handling
🔧 refactor(manager.py): change logger.exception to logger.error to log exceptions
🔧 refactor(graph/base.py): add logging to generator_build method to improve debugging
🔧 refactor(vertex/base.py): rename cache.base to cache.utils to improve semantics
The post_build method in chat.py was renamed to stream_build to better reflect its functionality. The generator_build method in graph/base.py was fixed to yield node_repr and node_id instead of node._built_object_repr() and node.id. The error response in chat.py now includes valid and id fields to improve error handling. logger.exception in manager.py was changed to logger.error to log exceptions. The generator_build method in graph/base.py now logs the sorted vertices to improve debugging. The cache.base module in vertex/base.py was renamed to cache.utils to better reflect its functionality.
2023-06-12 09:30:20 -03:00
Gabriel Luiz Freitas Almeida
273f452f7b 🔧 chore(chat.py): add SSE support to post_build endpoint
 feat(chat.py): add SSE support to post_build endpoint to stream build progress to the client
The post_build endpoint now returns a StreamingResponse object that streams Server-Sent Events (SSE) to the client. This allows the client to receive build progress updates in real-time. The event_stream function is responsible for generating the SSE events and is called by the StreamingResponse object. The SSE events contain information about the build progress, including whether the build was successful or not, the parameters used to build each node, and the node ID. The chat_manager.set_cache method is called to cache the built graph object.
2023-06-12 07:50:00 -03:00
Gabriel Luiz Freitas Almeida
76a49c8663 🐛 fix(manager.py): change status parameter type from status to int in close_connection method
🔥 refactor(manager.py): remove unused build method and rename set_cache to set_client_cache
🚀 chore(manager.py): add async keyword to close_connection method
The close_connection method now accepts an integer as the status parameter instead of a status enum. The build method was removed as it was not being used. The set_cache method was renamed to set_client_cache to improve semantics. The close_connection method was updated to be an async method.
2023-06-12 07:49:49 -03:00
Gabriel Luiz Freitas Almeida
9ebd02e331 🚀 feat(base.py): add topological_sort method to perform a topological sort of the vertices in the graph
🚀 feat(base.py): add generator_build method to build each node in the graph and yield it
The topological_sort method performs a topological sort of the vertices in the graph, returning a list of vertices in topological order. The generator_build method builds each node in the graph and yields it. These methods are useful for building the graph in a specific order, which is important for certain algorithms that rely on the order of the nodes.
2023-06-12 07:49:35 -03:00
Gabriel Luiz Freitas Almeida
f2e4a93df5 🐛 fix(base.py): remove unused import of logger
🎨 refactor(run.py): update import statement for compute_dict_hash, load_cache, and memoize_dict
The import of logger in base.py was not being used, so it was removed to improve code readability. In run.py, the import statement for compute_dict_hash, load_cache, and memoize_dict was updated to reflect the new location of these functions in the cache.utils module. This improves the organization of the code and makes it easier to find the relevant functions.
2023-06-11 18:08:20 -03:00
Gabriel Luiz Freitas Almeida
ccf9477b7f 🐛 fix(manager.py): add check for langchain object in process_message to avoid errors
 feat(manager.py): add build method to build langchain object and store it in an in-memory cache
The `process_message` method now checks if the langchain object has been built and stored in the in-memory cache before processing the message. If the object is not found, the connection is closed with an error message. A new `build` method has been added to build the langchain object and store it in an in-memory cache. This method is called before processing any messages.
2023-06-11 18:08:01 -03:00
Gabriel Luiz Freitas Almeida
dacc90d901 🐛 fix(cache/manager.py): change CACHE variable to _cache to follow naming conventions
 feat(cache/utils.py): add support for clearing old cache files and memoization of dictionary functions
The CACHE variable in CacheManager class has been renamed to _cache to follow naming conventions. The utils.py module now supports clearing old cache files and memoization of dictionary functions. The clear_old_cache_files function removes old cache files if the number of cache files exceeds the max_cache_size. The memoize_dict decorator memoizes dictionary functions and clears the cache when the clear_cache method is called.
2023-06-11 18:07:45 -03:00
Gabriel Luiz Freitas Almeida
02163cf775 feat(flow.py): add InMemoryCache class to implement an in-memory cache with LRU eviction policy
This commit adds a new class InMemoryCache to implement an in-memory cache with a Least Recently Used (LRU) eviction policy. The cache supports setting a maximum size and expiration time for cached items. The cache is thread-safe using a threading Lock. The InMemoryCache class inherits from the BaseCache class and implements the get, set, get_or_set, delete, clear, __contains__, __getitem__, __setitem__, __delitem__, __len__, and __repr__ methods.
2023-06-11 18:07:28 -03:00
Gabriel Luiz Freitas Almeida
a27e5d58dd 🔨 refactor(base.py): refactor BaseCache class to use abstract methods
This commit refactors the BaseCache class to use abstract methods instead of concrete methods. This makes the class more flexible and allows for different implementations of the cache. The abstract methods include get, set, delete, clear, __contains__, __getitem__, __setitem__, and __delitem__.
2023-06-11 18:07:17 -03:00
Gabriel Luiz Freitas Almeida
bdbc46f01d 🐛 fix(chat.py): add exception handling to post_build endpoint
 feat(cache/__init__.py): add InMemoryCache to exported modules
🔖 refactor(endpoints.py): remove unused import statement
The post_build endpoint in chat.py now has exception handling to catch any errors that may occur during the build process. InMemoryCache is now exported as part of the cache module. The endpoints.py file has been refactored to remove an unused import statement.
2023-06-11 18:06:57 -03:00
Gabriel Luiz Freitas Almeida
efbdd6fee7 🚀 feat(langflow): add version endpoint to API
🐛 fix(langflow): fix version import error in version endpoint
The version endpoint is added to the API to allow clients to retrieve the version of the Langflow package. The version is obtained using the `metadata.version` function from the `importlib` module. In case the package metadata is not available, an empty string is returned. The version endpoint was previously returning an error due to an import error. The error is fixed by importing the `__version__` variable from the `langflow` module.
2023-06-11 12:48:06 -03:00
Gabriel Luiz Freitas Almeida
0eaa86c5ca 🔧 chore(__main__.py): add support for loading environment variables from a .env file
The `load_dotenv` function from the `dotenv` package is now used to load environment variables from a `.env` file. This allows for a more flexible configuration of the application as environment variables can be loaded from a file instead of being hardcoded in the code. The `.env` file path can be specified via the `env_file` parameter.
2023-06-11 11:14:43 -03:00
Gabriel Luiz Freitas Almeida
bc07766575 🔊 chore(base.py): add logger to Graph class
🐛 fix(base.py): improve error message when invalid payload is received
The logger is added to the Graph class to improve debugging capabilities. The error message when an invalid payload is received is improved to include the keys that were found in the payload. This makes it easier to identify the issue and fix it.
2023-06-09 17:08:11 -03:00
Gabriel Luiz Freitas Almeida
bfb4a8e609 🔖 chore(base.py): add display_name field to FrontendNode
The `display_name` field is added to the `FrontendNode` class to allow for a more user-friendly name to be displayed in the UI. If `display_name` is not set, the `name` field will be used instead.
2023-06-09 17:08:01 -03:00
Gabriel Luiz Freitas Almeida
fdf24f269b
Merge branch 'dev' into agent_and_qa_chain 2023-06-09 16:25:29 -03:00
Gustavo Schaedler
8a08ebdbe7 Remove some commented out code + add condition for the execution of make publish 2023-06-09 20:09:25 +01:00
Alexandre Henrique Pereira Tavares
b02ed92b84
Implemented add_extra_fields method for the documentloaders (#408) 2023-06-09 15:24:56 -03:00
Alexandre Henrique
f7bdb711f1 Merged frontend_node/llm from origin/dev into add_extra_fields_documentloaders 2023-06-09 15:05:56 -03:00
Gabriel Luiz Freitas Almeida
f9528591d9
Better serrver start (#461) 2023-06-09 06:47:15 -03:00
Gabriel Luiz Freitas Almeida
2b8333ee95
Merge branch 'dev' into fix_llama 2023-06-08 18:31:39 -03:00
Gabriel Luiz Freitas Almeida
a443d0aa83 🔨 refactor(llms.py): extract formatting methods for Azure and Llama fields
This commit extracts the formatting methods for Azure and Llama fields from the `format_field` method to improve readability and maintainability of the code. The `format_azure_field` method formats the fields for Azure, while the `format_llama_field` method formats the fields for Llama. These methods are called conditionally based on the name of the field.
2023-06-08 18:14:03 -03:00
Gabriel Luiz Freitas Almeida
58fa3b8dc0 🐛 fix(__main__.py): ignore type error for multiprocess import
🐛 fix(__main__.py): rename path variable to frontend_path for clarity
The first change fixes a type error for the multiprocess import. The second change renames the path variable to frontend_path to improve clarity and readability of the code.
2023-06-08 17:17:27 -03:00
Gabriel Luiz Freitas Almeida
0cfc0b016e 🚀 feat(__main__.py): add optional path argument to serve function to specify path to frontend directory
🚀 feat(__main__.py): add optional open_browser argument to serve function to specify whether to open browser after starting server
The serve function now accepts an optional path argument to specify the path to the frontend directory containing build files. This is useful for development purposes only. The function also accepts an optional open_browser argument to specify whether to open the browser after starting the server. This is useful when running the server locally.
2023-06-08 12:25:00 -03:00
Gabriel Luiz Freitas Almeida
84a46d5869 Merge remote-tracking branch 'origin/dev' into better_server 2023-06-08 11:49:56 -03:00
Gabriel Luiz Freitas Almeida
0304becc28 Merge remote-tracking branch 'origin/main' into dev 2023-06-08 08:13:32 -03:00
Gabriel Luiz Freitas Almeida
8e2bacad9a 🐛 fix(utils.py): add type check for streaming and stream attributes before setting them to True
The code now checks if the streaming and stream attributes are boolean before setting them to True. This ensures that the attributes are not set to True if they are not boolean, which could cause errors in the code.
2023-06-08 00:40:51 -03:00
Gabriel Luiz Freitas Almeida
d730ca027c 🔥 refactor(base.py): remove redundant abstractmethod decorators
The abstractmethod decorator is redundant in the CustomChain and CustomAgentExecutor classes as the methods they decorate are already defined as abstract in the parent classes. Removing these decorators improves code readability and reduces clutter.
2023-06-08 00:20:16 -03:00
Gabriel Luiz Freitas Almeida
85d2f9cce8 🔨 refactor(base.py): make function_name and initialize methods abstract
This commit makes the `function_name` and `initialize` methods abstract in the `CustomChain` and `CustomAgentExecutor` classes. This is done to enforce the implementation of these methods in the subclasses of these classes. This change improves the code quality and readability by making the code more explicit and easier to understand.
2023-06-08 00:14:33 -03:00
Gabriel Luiz Freitas Almeida
81d231c632 🐛 fix(vertex/base.py): fix vertex_type assignment to handle uppercase template types
🐛 fix(interface/loading.py): fix custom_node instantiation to handle classes without initialize method
 feat(template/frontend_node/prompts.py): change type_name to match class name
 feat(template/frontend_node/tools.py): change type_name to match class name
🔥 chore(test_agents_template.py): remove test_agents_settings and update initialize_agent test
The vertex_type assignment in the Vertex class was not handling uppercase template types correctly. This has been fixed to handle both uppercase and lowercase types. The custom_node instantiation in the instantiate_class function was not handling classes without an initialize method correctly. This has been fixed to instantiate the class directly if the initialize method is not present. The type_name in the ZeroShotPromptNode and PythonFunctionToolNode classes have been changed to match the class name. The test_agents_settings test has been removed as it is no longer necessary and the initialize_agent test has been updated to match the new AgentInitializer class name.
2023-06-07 21:36:40 -03:00
Gabriel Luiz Freitas Almeida
04bd0f43fb 🔨 refactor(custom.py): rename CustomChain to CustomAgentExecutor
🔨 refactor(base.py): add CustomAgentExecutor class and move CustomChain to base.py
🔨 refactor(custom_lists.py): update reference to CustomChain to CustomAgentExecutor
The CustomChain class has been renamed to CustomAgentExecutor to better reflect its purpose. The class has been moved to base.py and a new CustomAgentExecutor class has been added to custom.py. The reference to CustomChain in custom_lists.py has been updated to CustomAgentExecutor. These changes improve the semantics of the code and make it easier to understand the purpose of the classes.
2023-06-07 21:14:40 -03:00
Gabriel Luiz Freitas Almeida
f0975ddf63 🚀 feat(langflow): add new chains to config.yaml and custom chains to interface/chains/custom.py
 feat(langflow): add new chains to config.yaml and custom chains to interface/chains/custom.py
The following chains were added to the config.yaml file: RetrievalQA, RetrievalQAWithSourcesChain, QAWithSourcesChain, ConversationalRetrievalChain, and CombineDocsChain. These chains were added to improve the functionality of the application and provide more options for users.

In addition, custom chains were added to the interface/chains/custom.py file. The CombineDocsChain was added to allow users to combine multiple documents into a single document for use in the question answering chains. The QA_CHAIN_TYPES constant was also added to the frontend_node/constants.py file to provide a list of available question answering chain types.
2023-06-07 19:48:51 -03:00
Gabriel Luiz Freitas Almeida
c8125b3386 🔀 refactor(customs.py): add load_qa_chain to CUSTOM_NODES
🔀 refactor(custom_lists.py): merge CUSTOM_AGENTS and CUSTOM_CHAINS into CUSTOM_NODES
🔀 refactor(loading.py): add instantiate_chains function to instantiate chains
🔀 refactor(base.py): add CustomChain class
The changes add support for a new chain called load_qa_chain to CUSTOM_NODES. CUSTOM_AGENTS and CUSTOM_CHAINS are merged into CUSTOM_NODES. A new function called instantiate_chains is added to instantiate chains. A new class called CustomChain is added to the base.py file. This class is used to define a custom chain.
2023-06-07 19:48:16 -03:00
Gabriel Luiz Freitas Almeida
b5ab95c4cc 🔨 refactor(custom.py): remove unused code
 feat(frontend_node): add extra fields to MemoryFrontendNode and ChainFrontendNode
The unused code in custom.py has been removed. The MemoryFrontendNode and ChainFrontendNode classes have been updated to include additional fields that are required for their respective templates. The MemoryFrontendNode now has a return_messages field, and the ChainFrontendNode now has a memory field. These fields are optional and can be toggled on or off as required.
2023-06-07 19:46:51 -03:00
Gabriel Luiz Freitas Almeida
2ca750f654 feat: add BaseRetriever as base class for VectorStores 2023-06-07 19:45:15 -03:00
Alexandre Henrique
5862f19c20 Merge branch 'add_extra_fields_documentloaders' of https://github.com/logspace-ai/langflow into add_extra_fields_documentloaders 2023-06-07 16:52:58 -03:00
Gabriel Luiz Freitas Almeida
af6a8b902a fix: initialize_agent now is called AgentInitializer 2023-06-07 16:42:12 -03:00
Gabriel Luiz Freitas Almeida
259b66bb00 fix: vertex_type now comes directly from template.type_name 2023-06-07 16:41:48 -03:00
Alexandre Henrique
1c98506a5f Added RecursiveCharacterTextSplitter method 2023-06-07 16:40:46 -03:00
Alexandre Henrique
feb3423101 Added RecursiveCharacterTextSplitter method 2023-06-07 16:38:23 -03:00
Gabriel Luiz Freitas Almeida
bcba8e0931 Merge remote-tracking branch 'origin/main' into dev 2023-06-07 14:33:09 -03:00
Gabriel Luiz Freitas Almeida
72afbb834c 🐛 fix(__main__.py): fix typo in sendAll function URL
 feat(__main__.py): add banner with title and info text to be displayed on server start
🐛 fix(App.tsx): fix API endpoint URL
The sendAll function URL had an extra forward slash. The API endpoint URL in App.tsx was incorrect and has been fixed. A banner with a title and info text has been added to be displayed on server start to provide users with more information about the application.
2023-06-06 23:29:42 -03:00