Commit graph

6,479 commits

Author SHA1 Message Date
Gabriel Luiz Freitas Almeida
1f135d09ec 🐛 fix(custom.py): handle case where vectorstoreroutertoolkit is already a list
The constructor of VectorStoreRouterAgent expects a non-list object for vectorstoreroutertoolkit. However, in some cases, vectorstoreroutertoolkit is already a list. This commit fixes the issue by checking if vectorstoreroutertoolkit is a list and using it directly if it is.
2023-06-16 15:41:14 -03:00
Gabriel Luiz Freitas Almeida
deb056df32 feat(chat.py): use LRUCache from cachetools to limit the size of flow_data_store
The cachetools package is added as a dependency to improve caching. In chat.py, a ValueError is raised if no ID is provided in init_build to prevent errors. The flow_data_store dictionary is replaced with an LRUCache from cachetools to limit the size of the cache to 10 items. This improves performance by reducing the memory usage of the application.
📦 chore(pyproject.toml): add cachetools dependency to improve caching
🐛 fix(chat.py): raise ValueError if no ID is provided in init_build
2023-06-16 15:07:39 -03:00
Gabriel Luiz Freitas Almeida
f42830ca47 🔨 refactor(endpoints.py): remove unused get_flow_from_token function and HTTPBearer import
🐛 fix(endpoints.py): add check for flow data before processing
🔨 refactor(process.py): add type hints to process_tweaks function
The get_flow_from_token function and HTTPBearer import are removed as they are not used in the code. A check for flow data is added before processing to avoid errors when the flow data is None. The process_tweaks function is updated to include type hints for the graph_data and tweaks parameters.
2023-06-16 14:56:00 -03:00
Gabriel Luiz Freitas Almeida
2bd51c6104 🔥 refactor(utils.py): remove unused functions save_cache and load_cache
The functions save_cache and load_cache are not used in the codebase and can be safely removed to improve code readability and maintainability.
2023-06-16 14:31:16 -03:00
Gabriel Luiz Freitas Almeida
a099fd05ad 🔥 refactor(cache/base.py): remove empty pass statement in BaseCache abstract method
🔥 refactor(utils/validate.py): remove try-except block in create_function method
The pass statement in the BaseCache abstract method is redundant and can be removed. Similarly, the try-except block in the create_function method is not necessary as the exception is being suppressed.
2023-06-16 14:22:14 -03:00
Gabriel Luiz Freitas Almeida
5568db9f1b 🔥 refactor(base.py): remove empty pass statements in BaseCache abstract class methods
The pass statements in the BaseCache abstract class methods are redundant and can be removed as they do not add any value to the code.
2023-06-16 13:58:23 -03:00
Gabriel Luiz Freitas Almeida
d897de48f9 🎨 style(agents.py): change name and display_name of InitializeAgentNode to improve readability
The name and display_name of the InitializeAgentNode class have been changed to "AgentInitializer" and "AgentInitializer" respectively. This improves the readability of the code and makes it easier to understand the purpose of the class.
2023-06-16 12:24:41 -03:00
Gabriel Luiz Freitas Almeida
fb53522311 🚀 chore(custom.py): rename "initialize_agent" to "AgentInitializer" in CUSTOM_AGENTS dictionary
The "initialize_agent" key in the CUSTOM_AGENTS dictionary has been renamed to "AgentInitializer" to improve naming consistency with the other agents in the dictionary.
2023-06-16 12:13:04 -03:00
gustavoschaedler
92a285bb2e Adjusted the name of the agent AgentInitializer to initialize_agent temporarily to fix a bug in the frontendnode 2023-06-16 15:38:20 +01:00
Gabriel Luiz Freitas Almeida
4faa1e7240 🔨 refactor(base.py): add LLMCheckerChain to from_method_nodes dictionary
🔨 refactor(chains.py): comment out unused code block
The `from_method_nodes` dictionary in `base.py` has been updated to include the `LLMCheckerChain` class. This allows the `from_llm` method to be called on the `LLMCheckerChain` class.

The code block in `chains.py` that deals with the `PromptTemplate` field type has been commented out as it is currently unused. This is to prevent confusion and to keep the codebase clean.
2023-06-16 08:55:38 -03:00
Gabriel Luiz Freitas Almeida
12db6f52fb 🐛 fix(main.py): add a custom 404 handler to return the index.html file when a 404 error occurs
The create_app function now accepts a static_path parameter that defaults to "static". The setup_static_files function is created to mount the static files directory to the app. A custom 404 handler is added to the app to return the index.html file when a 404 error occurs. This allows the app to serve static files such as HTML, CSS, and JavaScript files.
🚀 feat(__main__.py, main.py): add support for serving static files
 feat(__main__.py): create a setup_static_files function to mount the static files directory to the app
2023-06-15 20:48:01 -03:00
Gabriel Luiz Freitas Almeida
2addbf2e0c 🔧 chore(settings.py): change save_api_keys to remove_api_keys to improve semantics
The `save_api_keys` variable has been renamed to `remove_api_keys` to improve the semantics of the code. The new variable name better reflects the functionality of the code, which is to remove API keys from the projects saved in the database.
🔧 chore(__main__.py): change save_api_keys to remove_api_keys to improve semantics
2023-06-15 19:29:29 -03:00
Gabriel Luiz Freitas Almeida
e76917b53e 🔧 refactor(__main__.py): refactor update_settings function to accept save_api_keys parameter
 feat(__main__.py): add save_api_keys parameter to serve command to allow users to save API keys in their projects
The update_settings function now accepts a save_api_keys parameter, which allows the user to specify whether or not to save API keys in their projects. The serve command now has a save_api_keys parameter that defaults to True, allowing users to save API keys in their projects. This feature improves the user experience by allowing them to save API keys for future use.
2023-06-15 18:22:12 -03:00
Gabriel Luiz Freitas Almeida
7d61e3dd16 🆕 feat(utils.py): add function to remove API keys from flow data
This commit adds a new function called `remove_api_keys` to the `utils.py` file. The function takes in a dictionary representing a flow and removes any API keys from the flow data. The function iterates through each node in the flow and checks if the node contains any API keys. If an API key is found, the function sets the value of the key to `None`. This function is useful for removing sensitive information from flow data before it is stored or transmitted.
2023-06-15 18:16:23 -03:00
Gabriel Luiz Freitas Almeida
da24690bf7 🔒 chore(flows.py): add support for removing API keys from flow data if save_api_keys setting is False
The `remove_api_keys` function is now called on the `flow_data` dictionary if the `save_api_keys` setting is False. This ensures that sensitive information is not saved in the database.
2023-06-15 18:16:02 -03:00
Gabriel Luiz Freitas Almeida
99ce643010 🐛 fix(llms.py): add condition to show password field for 'tokens' field name
The condition to show the password field was not working for the 'tokens' field name. The condition has been updated to include 'tokens' in the field name and show the password field.
2023-06-15 18:14:48 -03:00
Gabriel Luiz Freitas Almeida
265646ded3 🐛 fix(chat.py): change the prefix of the error message to 'data' to fix the server response
The error message prefix was changed from 'data' to 'error' to fix the server response.
2023-06-15 15:08:38 -03:00
Gabriel Luiz Freitas Almeida
03076b3577 🔨 refactor(flows.py): change response model of update_flow endpoint to FlowRead
🔨 refactor(parameterComponent): remove unused imports and refactor onChange function to handleOnNewValue
 feat(tabsContext): add tabsState and setTabsState to TabsContextType and TabsProvider
🔨 refactor(flowSettingsModal): refactor handleSaveFlow function to update flow and setTabsState with isPending false
The update_flow endpoint now returns a FlowRead response model instead of FlowReadWithStyle. The parameterComponent file has been refactored to remove unused imports and to use a handleOnNewValue function to handle onChange events. The TabsContextType and TabsProvider have been updated to include tabsState and setTabsState. The flowSettingsModal has been refactored to update the flow and setTabsState with isPending false.

🔨 refactor(extraSidebarComponent): add tabsState and setTabsState to TabsContextType
🐛 fix(extraSidebarComponent): disable save button when flow is not pending
🐛 fix(extraSidebarComponent): update flow state after saving
The TabsContextType now includes tabsState and setTabsState to allow for the management of the state of each tab. The save button is now disabled when the flow is not pending. The flow state is now updated after saving to reflect the changes made.
2023-06-15 15:08:37 -03:00
Gabriel Luiz Freitas Almeida
5ce9fa17cf 📝 docs(chains.py): update description of CombineDocsChainNode
The description of CombineDocsChainNode was updated to reflect the actual functionality of the node. The node is now used to load a question answering chain instead of constructing a chain from combined documents.
2023-06-15 11:40:29 -03:00
Gabriel Luiz Freitas Almeida
61a6710adf 🔒 chore(llms.py): set password field to False for fields not containing 'key' or 'token' in their name
The openai_api_version field value is no longer set as it is not needed. The password field is now set to False for fields not containing 'key' or 'token' in their name to improve security.
🐛 fix(llms.py): remove setting of openai_api_version field value
2023-06-15 09:45:15 -03:00
Gabriel Luiz Freitas Almeida
a23121aa54 🐛 fix(chat.py): yield error message when an exception occurs during stream_build
🔧 chore(base.py): fix typo in docstring
The fix in chat.py ensures that an error message is yielded when an exception occurs during stream_build. This helps to provide more information to the client-side when an error occurs. The typo in base.py's docstring is fixed to improve readability.
2023-06-15 07:44:11 -03:00
Gabriel Luiz Freitas Almeida
3920eb50d6 Merge remote-tracking branch 'origin/validation_fix' into db 2023-06-15 07:37:26 -03:00
Rodrigo Nader
fd59bd77b3 Refactor SQL agent and related nodes
- Rename `VectorStoreAgent` to `Vector store agent` in `custom.py`
- Replace "Construct a sql agent from an LLM and tools." with "Construct an SQL agent from an LLM and tools." in `custom.py`
- Update descriptions of `SQLAgentNode`, `TimeTravelGuideChainNode`, `CombineDocsChainNode`, and `ToolNode` in related files
- Increase width of `ExtraSidebarComponent` container in `index.tsx` from 52 to 56
2023-06-14 23:54:39 -03:00
anovazzi1
bba2942d37 format code 2023-06-14 19:33:21 -03:00
Gabriel Luiz Freitas Almeida
56b16dac60 🔨 refactor(documentloaders.py): move build_template function outside of DocumentLoaderFrontNode class
The build_template function is now outside of the DocumentLoaderFrontNode class to improve code organization and make it more modular. This change also makes it easier to reuse the function in other parts of the codebase.
2023-06-14 17:15:54 -03:00
Gabriel Luiz Freitas Almeida
010c1b7b50 Merge remote-tracking branch 'origin/NewId' into db 2023-06-14 14:56:46 -03:00
Gabriel Luiz Freitas Almeida
76cc488d79 🚀 feat(constants.py): add new OpenAI chat models and update existing ones
Added new OpenAI chat models to the CHAT_OPENAI_MODELS list to improve the quality of the chatbot responses. The new models are "gpt-3.5-turbo-0613", "gpt-3.5-turbo-16k-0613", "gpt-4-0613", and "gpt-4-32k-0613". The existing models "gpt-3.5-turbo" and "gpt-4-32k" were also updated to their latest versions.
2023-06-14 11:43:36 -03:00
Gabriel Luiz Freitas Almeida
676c92dd92 🎨 style(flows.py): add status codes to API endpoints
The status codes have been added to the API endpoints to improve the readability of the code and to make it more explicit what the expected response codes are. The status codes have been added to the following endpoints: create_flow, read_flows, read_flow, update_flow, delete_flow, create_flows, upload_file, and download_file.
2023-06-14 09:27:02 -03:00
Gabriel Luiz Freitas Almeida
7817c64591 🐛 fix(endpoints.py): change predict_flow function signature to include flow_id and session dependencies
 feat(endpoints.py): add flow_id parameter to predict_flow function to allow for running a flow by ID
The predict_flow function now includes a flow_id parameter and a session dependency to allow for running a flow by ID. The flow object is retrieved from the session using the flow_id parameter. If the flow is not found, a ValueError is raised.

🔨 refactor(constants.tsx): change API_URL constant to BASE_API_URL and add flow_id parameter to run_flow function
The API_URL constant has been renamed to BASE_API_URL to better reflect its purpose. The run_flow function now includes a flow_id parameter to allow for running a flow by ID. The flow_id parameter is used to construct the API URL.
2023-06-14 07:21:25 -03:00
Gabriel Luiz Freitas Almeida
9f5591639e 🐛 fix(chat.py): handle exceptions while building the flow and add a final response to the event stream
The code now handles exceptions that may occur while building the flow. A final response is added to the event stream to indicate the end of the stream.
2023-06-13 20:41:58 -03:00
Gabriel Luiz Freitas Almeida
8aac63b830 🐛 fix(chat.py): add try-except block to handle exceptions in init_build function
The try-except block was added to handle exceptions that may occur in the init_build function. If an exception occurs, it is logged and an HTTPException with a status code of 500 is returned. This ensures that the server does not crash and provides a more informative error message to the client.
2023-06-13 20:32:05 -03:00
Gabriel Luiz Freitas Almeida
044b01e6ad 🎨 style(chat.py): add status code 201 to init_build endpoint
The init_build endpoint now returns a status code of 201 to indicate that a new resource has been created. This improves the consistency of the API and makes it easier for clients to understand the response.
2023-06-13 20:23:44 -03:00
Gabriel Luiz Freitas Almeida
0259bf4acc 🎨 style(endpoints.py): rename get_load function to predict_flow for better semantics
The function name was changed to predict_flow to better reflect the functionality of the endpoint.
2023-06-13 19:53:00 -03:00
Gabriel Luiz Freitas Almeida
e07b7f546d
Update base.py 2023-06-13 17:31:53 -03:00
Gabriel Luiz Freitas Almeida
41f6aecda4 🔀 refactor(chat.py): import InitResponse and BuiltResponse from schemas module
🚀 feat(chat.py): add response models to /build/init and /build/{flow_id}/status endpoints
The InitResponse and BuiltResponse models are now imported from the schemas module to improve code organization. The /build/init and /build/{flow_id}/status endpoints now have response models to provide a clear understanding of the expected response.
2023-06-13 17:21:45 -03:00
Gabriel Luiz Freitas Almeida
188fd4ad0a 🐛 fix(custom.py): remove unnecessary type ignore comments
The type ignore comments are unnecessary as the code is already type annotated. Removing them improves code readability and maintainability.
2023-06-13 15:04:23 -03:00
gustavoschaedler
14757ca402 Rename agent - initialize_agent to AgentInitializer 2023-06-13 18:51:33 +01:00
Gabriel Luiz Freitas Almeida
09d4c89136 🐛 fix(loading.py): ensure metadata values are not None for Chroma class
The docstring for the CombineDocsChain class has been updated to reflect the correct function name. In the loading.py file, the instantiate_vectorstore function has been updated to ensure that metadata values are not None for the Chroma class. This is because Chroma requires all metadata values to not be None, and this fix ensures that the application will not encounter errors when using Chroma.
🐛 fix(custom.py): update docstring to reflect the correct function name
2023-06-13 14:07:27 -03:00
gustavoschaedler
144f2b470e Add New Chains: RetrievalQA, RetrievalQAWithSourcesChain, ConversationalRetrievalChain, CombineDocsChain 2023-06-13 17:05:40 +01:00
Gabriel Luiz Freitas Almeida
90a1dd9795 🔧 chore(process.py): refactor process_tweaks function to improve readability and maintainability
The process_tweaks function has been refactored to improve readability and maintainability. The function now takes in two parameters, graph_data and tweaks, and returns the modified graph_data. The tweaks parameter is a dictionary of dictionaries, where the key is the node id and the value is a dictionary of the tweaks. The function processes the graph data to add the tweaks by iterating over the nodes and checking if the node id is in the tweaks dictionary. If it is, the function applies the tweaks to the node by updating the template data with the new values. The function also prints a message to the console to indicate that a tweak has been applied.
2023-06-13 12:49:22 -03:00
Gabriel Luiz Freitas Almeida
faf44eca0e 🔧 refactor(schemas.py): add optional tweaks field to PredictRequest schema
The PredictRequest schema now includes an optional tweaks field, which is a dictionary of dictionaries. This field allows for additional customization of the prediction request, such as specifying tool names or descriptions. The tweaks field is optional, and if not provided, the default value is an empty dictionary. The schema_extra attribute has also been updated to include an example of the new tweaks field.
2023-06-13 12:49:11 -03:00
Gabriel Luiz Freitas Almeida
7cc14e83b8 🚀 feat(endpoints.py): add authentication to predict endpoint using HTTPBearer
🐛 fix(endpoints.py): change predict endpoint to use Flow object instead of flow_id
🐛 fix(endpoints.py): add support for processing tweaks in predict endpoint
The predict endpoint now requires authentication using HTTPBearer. The flow_id is now extracted from the bearer token instead of being passed as a parameter. This improves security as the flow_id is not exposed in the URL. The predict endpoint now uses the Flow object instead of the flow_id to retrieve the graph data. This improves code readability and reduces the number of database queries. The predict endpoint now supports processing tweaks, which allows for more flexibility in the processing of messages.
2023-06-13 12:48:52 -03:00
Gabriel Luiz Freitas Almeida
d14be904ad 🐛 fix(chat.py): raise HTTPException instead of returning JSONResponse on stream_build error
The function stream_build was returning a JSONResponse with an error message when an exception was raised. This is not the correct way to handle errors in FastAPI. Instead, we should raise an HTTPException with the appropriate status code and error message.
2023-06-12 20:43:55 -03:00
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