Commit graph

487 commits

Author SHA1 Message Date
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
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
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
cdbe2b0401 🐛 fix(endpoints.py): change graph_data variable to use flow_obj.data instead of flow_obj.flow
The graph_data variable was previously assigned to flow_obj.flow, which is incorrect as the flow_obj object does not have a flow attribute. Instead, the correct attribute to use is flow_obj.data.
2023-06-10 16:17:56 -03:00
Gabriel Luiz Freitas Almeida
73014b63f2 🚀 feat(main.py): add create_db_and_tables function to be called on app startup
The create_db_and_tables function is now called on app startup using the FastAPI on_event decorator. This ensures that the database and tables are created before the app starts listening for requests.
2023-06-09 12:37:39 -03:00
Gabriel Luiz Freitas Almeida
ab1f9ed371 refactor: change colum flow to data and create description column 2023-06-09 09:22:10 -03:00
Gabriel Luiz Freitas Almeida
51e4f9d109 Merge remote-tracking branch 'origin/dev' into db 2023-06-09 06:59:21 -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
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
Gabriel Luiz Freitas Almeida
9823b4c9c5
🚀 feat(customs.py): re-add PythonFunction to CUSTOM_NODES (#450) 2023-06-06 17:47:24 -03:00
Gabriel Luiz Freitas Almeida
683b7ab4d0 🚀 feat(config.yaml): add PythonFunction to the list of available tools
The PythonFunction tool has been added to the list of available tools in the config.yaml file. This allows the backend to use Python functions as part of the language processing pipeline.
2023-06-06 17:41:17 -03:00
Gabriel Luiz Freitas Almeida
2feeeb9ecd 🐛 fix(flow.py): make flow field optional to allow creation of flows without a flow
🧪 test(test_database.py): add test case for creating flows without a flow
The flow field is now optional to allow creation of flows without a flow. This is useful when creating a flow that will be populated later. A test case was added to ensure that flows can be created without a flow.
2023-06-06 17:37:05 -03:00
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
73bad871f2 🐛 fix(llms.py): add null check for name variable in azure field formatting
The code was updated to add a null check for the name variable before checking if it contains the string "azure". This prevents a potential runtime error if the name variable is null.
2023-06-06 11:44:57 -03:00
Gabriel Luiz Freitas Almeida
3de23e345f 🚀 feat(customs.py): add PythonFunction to CUSTOM_NODES
🚀 feat(loading.py): add support for PythonFunction node type
🚀 feat(constants.py): add PythonFunction to CUSTOM_TOOLS
🚀 feat(custom.py): add PythonFunction class
🚀 feat(frontend_node/tools.py): add PythonFunctionNode class
🧪 test(test_custom_types.py): add test for PythonFunction class
🧪 test(test_llms_template.py): comment out tests for AzureOpenAI and AzureChatOpenAI
The changes add support for a new node type, PythonFunction, which allows users to define a Python function to be executed. The node type is added to CUSTOM_NODES in customs.py, and support for the node type is added to loading.py. The node type is also added to CUSTOM_TOOLS in constants.py, and the PythonFunction class is added to custom.py. The PythonFunctionNode class is added to frontend_node/tools.py. Tests for the new PythonFunction class are added to test_custom_types.py. Tests for AzureOpenAI and AzureChatOpenAI are commented out in test_llms_template.py.
2023-06-06 11:40:39 -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