diff --git a/docs/openapi.json b/docs/openapi.json index c8667ba28..6b682a115 100644 --- a/docs/openapi.json +++ b/docs/openapi.json @@ -7,9 +7,7 @@ "paths": { "/api/v1/build/{flow_id}/vertices": { "post": { - "tags": [ - "Chat" - ], + "tags": ["Chat"], "summary": "Retrieve Vertices Order", "description": "Retrieve the vertices order for a given flow.\n\nArgs:\n flow_id (str): The ID of the flow.\n background_tasks (BackgroundTasks): The background tasks.\n data (Optional[FlowDataRequest], optional): The flow data. Defaults to None.\n stop_component_id (str, optional): The ID of the stop component. Defaults to None.\n start_component_id (str, optional): The ID of the start component. Defaults to None.\n session (AsyncSession, optional): The session dependency.\n\nReturns:\n VerticesOrderResponse: The response containing the ordered vertex IDs and the run ID.\n\nRaises:\n HTTPException: If there is an error checking the build status.", "operationId": "retrieve_vertices_order_api_v1_build__flow_id__vertices_post", @@ -100,9 +98,7 @@ }, "/api/v1/build/{flow_id}/flow": { "post": { - "tags": [ - "Chat" - ], + "tags": ["Chat"], "summary": "Build Flow", "description": "Build and process a flow, returning a job ID for event polling.\n\nThis endpoint requires authentication through the CurrentActiveUser dependency.\nFor public flows that don't require authentication, use the /build_public_tmp/flow_id/flow endpoint.\n\nArgs:\n flow_id: UUID of the flow to build\n background_tasks: Background tasks manager\n inputs: Optional input values for the flow\n data: Optional flow data\n files: Optional files to include\n stop_component_id: Optional ID of component to stop at\n start_component_id: Optional ID of component to start from\n log_builds: Whether to log the build process\n current_user: The authenticated user\n queue_service: Queue service for job management\n flow_name: Optional name for the flow\n event_delivery: Optional event delivery type - default is streaming\n\nReturns:\n Dict with job_id that can be used to poll for build status", "operationId": "build_flow_api_v1_build__flow_id__flow_post", @@ -229,9 +225,7 @@ }, "/api/v1/build/{job_id}/events": { "get": { - "tags": [ - "Chat" - ], + "tags": ["Chat"], "summary": "Get Build Events", "description": "Get events for a specific build job.", "operationId": "get_build_events_api_v1_build__job_id__events_get", @@ -279,9 +273,7 @@ }, "/api/v1/build/{job_id}/cancel": { "post": { - "tags": [ - "Chat" - ], + "tags": ["Chat"], "summary": "Cancel Build", "description": "Cancel a specific build job.", "operationId": "cancel_build_api_v1_build__job_id__cancel_post", @@ -322,9 +314,7 @@ }, "/api/v1/build/{flow_id}/vertices/{vertex_id}": { "post": { - "tags": [ - "Chat" - ], + "tags": ["Chat"], "summary": "Build Vertex", "description": "Build a vertex instead of the entire graph.\n\nArgs:\n flow_id (str): The ID of the flow.\n vertex_id (str): The ID of the vertex to build.\n background_tasks (BackgroundTasks): The background tasks dependency.\n inputs (Optional[InputValueRequest], optional): The input values for the vertex. Defaults to None.\n files (List[str], optional): The files to use. Defaults to None.\n current_user (Any, optional): The current user dependency. Defaults to Depends(get_current_active_user).\n\nReturns:\n VertexBuildResponse: The response containing the built vertex information.\n\nRaises:\n HTTPException: If there is an error building the vertex.", "operationId": "build_vertex_api_v1_build__flow_id__vertices__vertex_id__post", @@ -396,9 +386,7 @@ }, "/api/v1/build/{flow_id}/{vertex_id}/stream": { "get": { - "tags": [ - "Chat" - ], + "tags": ["Chat"], "summary": "Build Vertex Stream", "description": "Build a vertex instead of the entire graph.\n\nThis function is responsible for building a single vertex instead of the entire graph.\nIt takes the `flow_id` and `vertex_id` as required parameters, and an optional `session_id`.\nIt also depends on the `ChatService` and `SessionService` services.\n\nIf `session_id` is not provided, it retrieves the graph from the cache using the `chat_service`.\nIf `session_id` is provided, it loads the session data using the `session_service`.\n\nOnce the graph is obtained, it retrieves the specified vertex using the `vertex_id`.\nIf the vertex does not support streaming, an error is raised.\nIf the vertex has a built result, it sends the result as a chunk.\nIf the vertex is not frozen or not built, it streams the vertex data.\nIf the vertex has a result, it sends the result as a chunk.\nIf none of the above conditions are met, an error is raised.\n\nIf any exception occurs during the process, an error message is sent.\nFinally, the stream is closed.\n\nReturns:\n A `StreamingResponse` object with the streamed vertex data in text/event-stream format.\n\nRaises:\n HTTPException: If an error occurs while building the vertex.", "operationId": "build_vertex_stream_api_v1_build__flow_id___vertex_id__stream_get", @@ -443,9 +431,7 @@ }, "/api/v1/build_public_tmp/{flow_id}/flow": { "post": { - "tags": [ - "Chat" - ], + "tags": ["Chat"], "summary": "Build Public Tmp", "description": "Build a public flow without requiring authentication.\n\nThis endpoint is specifically for public flows that don't require authentication.\nIt uses a client_id cookie to create a deterministic flow ID for tracking purposes.\n\nThe endpoint:\n1. Verifies the requested flow is marked as public in the database\n2. Creates a deterministic UUID based on client_id and flow_id\n3. Uses the flow owner's permissions to build the flow\n\nRequirements:\n- The flow must be marked as PUBLIC in the database\n- The request must include a client_id cookie\n\nArgs:\n flow_id: UUID of the public flow to build\n background_tasks: Background tasks manager\n inputs: Optional input values for the flow\n data: Optional flow data\n files: Optional files to include\n stop_component_id: Optional ID of component to stop at\n start_component_id: Optional ID of component to start from\n log_builds: Whether to log the build process\n flow_name: Optional name for the flow\n request: FastAPI request object (needed for cookie access)\n queue_service: Queue service for job management\n event_delivery: Optional event delivery type - default is streaming\n\nReturns:\n Dict with job_id that can be used to poll for build status", "operationId": "build_public_tmp_api_v1_build_public_tmp__flow_id__flow_post", @@ -568,9 +554,7 @@ }, "/api/v1/all": { "get": { - "tags": [ - "Base" - ], + "tags": ["Base"], "summary": "Get All", "description": "Retrieve all component types with compression for better performance.\n\nReturns a compressed response containing all available component types.", "operationId": "get_all_api_v1_all_get", @@ -599,9 +583,7 @@ }, "/api/v1/run/{flow_id_or_name}": { "post": { - "tags": [ - "Base" - ], + "tags": ["Base"], "summary": "Simplified Run Flow", "description": "Executes a specified flow by ID with support for streaming and telemetry.\n\nThis endpoint executes a flow identified by ID or name, with options for streaming the response\nand tracking execution metrics. It handles both streaming and non-streaming execution modes.\n\nArgs:\n background_tasks (BackgroundTasks): FastAPI background task manager\n flow (FlowRead | None): The flow to execute, loaded via dependency\n input_request (SimplifiedAPIRequest | None): Input parameters for the flow\n stream (bool): Whether to stream the response\n api_key_user (UserRead): Authenticated user from API key\n request (Request): The incoming HTTP request\n\nReturns:\n Union[StreamingResponse, RunResponse]: Either a streaming response for real-time results\n or a RunResponse with the complete execution results\n\nRaises:\n HTTPException: For flow not found (404) or invalid input (400)\n APIException: For internal execution errors (500)\n\nNotes:\n - Supports both streaming and non-streaming execution modes\n - Tracks execution time and success/failure via telemetry\n - Handles graceful client disconnection in streaming mode\n - Provides detailed error handling with appropriate HTTP status codes\n - In streaming mode, uses EventManager to handle events:\n - \"add_message\": New messages during execution\n - \"token\": Individual tokens during streaming\n - \"end\": Final execution result", "operationId": "simplified_run_flow_api_v1_run__flow_id_or_name__post", @@ -695,9 +677,7 @@ }, "/api/v1/webhook/{flow_id_or_name}": { "post": { - "tags": [ - "Base" - ], + "tags": ["Base"], "summary": "Webhook Run Flow", "description": "Run a flow using a webhook request.\n\nArgs:\n flow (Flow, optional): The flow to be executed. Defaults to Depends(get_flow_by_id).\n user (User): The flow user.\n request (Request): The incoming HTTP request.\n background_tasks (BackgroundTasks): The background tasks manager.\n\nReturns:\n dict: A dictionary containing the status of the task.\n\nRaises:\n HTTPException: If the flow is not found or if there is an error processing the request.", "operationId": "webhook_run_flow_api_v1_webhook__flow_id_or_name__post", @@ -759,9 +739,7 @@ }, "/api/v1/run/advanced/{flow_id}": { "post": { - "tags": [ - "Base" - ], + "tags": ["Base"], "summary": "Experimental Run Flow", "description": "Executes a specified flow by ID with optional input values, output selection, tweaks, and streaming capability.\n\nThis endpoint supports running flows with caching to enhance performance and efficiency.\n\n### Parameters:\n- `flow_id` (str): The unique identifier of the flow to be executed.\n- `inputs` (List[InputValueRequest], optional): A list of inputs specifying the input values and components\n for the flow. Each input can target specific components and provide custom values.\n- `outputs` (List[str], optional): A list of output names to retrieve from the executed flow.\n If not provided, all outputs are returned.\n- `tweaks` (Optional[Tweaks], optional): A dictionary of tweaks to customize the flow execution.\n The tweaks can be used to modify the flow's parameters and components.\n Tweaks can be overridden by the input values.\n- `stream` (bool, optional): Specifies whether the results should be streamed. Defaults to False.\n- `session_id` (Union[None, str], optional): An optional session ID to utilize existing session data for the flow\n execution.\n- `api_key_user` (User): The user associated with the current API key. Automatically resolved from the API key.\n\n### Returns:\nA `RunResponse` object containing the selected outputs (or all if not specified) of the executed flow\nand the session ID.\nThe structure of the response accommodates multiple inputs, providing a nested list of outputs for each input.\n\n### Raises:\nHTTPException: Indicates issues with finding the specified flow, invalid input formats, or internal errors during\nflow execution.\n\n### Example usage:\n```json\nPOST /run/flow_id\nx-api-key: YOUR_API_KEY\nPayload:\n{\n \"inputs\": [\n {\"components\": [\"component1\"], \"input_value\": \"value1\"},\n {\"components\": [\"component3\"], \"input_value\": \"value2\"}\n ],\n \"outputs\": [\"Component Name\", \"component_id\"],\n \"tweaks\": {\"parameter_name\": \"value\", \"Component Name\": {\"parameter_name\": \"value\"}, \"component_id\": {\"parameter_name\": \"value\"}}\n \"stream\": false\n}\n```\n\nThis endpoint facilitates complex flow executions with customized inputs, outputs, and configurations,\ncatering to diverse application requirements.", "operationId": "experimental_run_flow_api_v1_run_advanced__flow_id__post", @@ -820,9 +798,7 @@ }, "/api/v1/process/{_flow_id}": { "post": { - "tags": [ - "Base" - ], + "tags": ["Base"], "summary": "Process", "description": "Endpoint to process an input with a given flow_id.", "operationId": "process_api_v1_process___flow_id__post", @@ -871,9 +847,7 @@ }, "/api/v1/predict/{_flow_id}": { "post": { - "tags": [ - "Base" - ], + "tags": ["Base"], "summary": "Process", "description": "Endpoint to process an input with a given flow_id.", "operationId": "process_api_v1_predict___flow_id__post", @@ -922,9 +896,7 @@ }, "/api/v1/task/{_task_id}": { "get": { - "tags": [ - "Base" - ], + "tags": ["Base"], "summary": "Get Task Status", "description": "Get the status of a task by ID (Deprecated).\n\nThis endpoint is deprecated and will be removed in a future version.", "operationId": "get_task_status_api_v1_task___task_id__get", @@ -966,9 +938,7 @@ }, "/api/v1/upload/{flow_id}": { "post": { - "tags": [ - "Base" - ], + "tags": ["Base"], "summary": "Create Upload File", "description": "Upload a file for a specific flow (Deprecated).\n\nThis endpoint is deprecated and will be removed in a future version.", "operationId": "create_upload_file_api_v1_upload__flow_id__post", @@ -1021,9 +991,7 @@ }, "/api/v1/version": { "get": { - "tags": [ - "Base" - ], + "tags": ["Base"], "summary": "Get Version", "operationId": "get_version_api_v1_version_get", "responses": { @@ -1040,9 +1008,7 @@ }, "/api/v1/custom_component": { "post": { - "tags": [ - "Base" - ], + "tags": ["Base"], "summary": "Custom Component", "operationId": "custom_component_api_v1_custom_component_post", "requestBody": { @@ -1092,9 +1058,7 @@ }, "/api/v1/custom_component/update": { "post": { - "tags": [ - "Base" - ], + "tags": ["Base"], "summary": "Custom Component Update", "description": "Update a custom component with the provided code request.\n\nThis endpoint generates the CustomComponentFrontendNode normally but then runs the `update_build_config` method\non the latest version of the template.\nThis ensures that every time it runs, it has the latest version of the template.\n\nArgs:\n code_request (CustomComponentRequest): The code request containing the updated code for the custom component.\n user (User, optional): The user making the request. Defaults to the current active user.\n\nReturns:\n dict: The updated custom component node.\n\nRaises:\n HTTPException: If there's an error building or updating the component\n SerializationError: If there's an error serializing the component to JSON", "operationId": "custom_component_update_api_v1_custom_component_update_post", @@ -1143,9 +1107,7 @@ }, "/api/v1/config": { "get": { - "tags": [ - "Base" - ], + "tags": ["Base"], "summary": "Get Config", "operationId": "get_config_api_v1_config_get", "responses": { @@ -1164,9 +1126,7 @@ }, "/api/v1/validate/code": { "post": { - "tags": [ - "Validate" - ], + "tags": ["Validate"], "summary": "Post Validate Code", "operationId": "post_validate_code_api_v1_validate_code_post", "requestBody": { @@ -1216,9 +1176,7 @@ }, "/api/v1/validate/prompt": { "post": { - "tags": [ - "Validate" - ], + "tags": ["Validate"], "summary": "Post Validate Prompt", "operationId": "post_validate_prompt_api_v1_validate_prompt_post", "requestBody": { @@ -1257,9 +1215,7 @@ }, "/api/v1/store/check/": { "get": { - "tags": [ - "Components Store" - ], + "tags": ["Components Store"], "summary": "Check If Store Is Enabled", "operationId": "check_if_store_is_enabled_api_v1_store_check__get", "responses": { @@ -1276,9 +1232,7 @@ }, "/api/v1/store/check/api_key": { "get": { - "tags": [ - "Components Store" - ], + "tags": ["Components Store"], "summary": "Check If Store Has Api Key", "operationId": "check_if_store_has_api_key_api_v1_store_check_api_key_get", "responses": { @@ -1306,9 +1260,7 @@ }, "/api/v1/store/components/": { "post": { - "tags": [ - "Components Store" - ], + "tags": ["Components Store"], "summary": "Share Component", "operationId": "share_component_api_v1_store_components__post", "security": [ @@ -1356,9 +1308,7 @@ } }, "get": { - "tags": [ - "Components Store" - ], + "tags": ["Components Store"], "summary": "Get Components", "operationId": "get_components_api_v1_store_components__get", "security": [ @@ -1561,9 +1511,7 @@ }, "/api/v1/store/components/{component_id}": { "patch": { - "tags": [ - "Components Store" - ], + "tags": ["Components Store"], "summary": "Update Shared Component", "operationId": "update_shared_component_api_v1_store_components__component_id__patch", "security": [ @@ -1623,9 +1571,7 @@ } }, "get": { - "tags": [ - "Components Store" - ], + "tags": ["Components Store"], "summary": "Download Component", "operationId": "download_component_api_v1_store_components__component_id__get", "security": [ @@ -1677,9 +1623,7 @@ }, "/api/v1/store/tags": { "get": { - "tags": [ - "Components Store" - ], + "tags": ["Components Store"], "summary": "Get Tags", "operationId": "get_tags_api_v1_store_tags_get", "responses": { @@ -1702,9 +1646,7 @@ }, "/api/v1/store/users/likes": { "get": { - "tags": [ - "Components Store" - ], + "tags": ["Components Store"], "summary": "Get List Of Components Liked By User", "operationId": "get_list_of_components_liked_by_user_api_v1_store_users_likes_get", "responses": { @@ -1738,9 +1680,7 @@ }, "/api/v1/store/users/likes/{component_id}": { "post": { - "tags": [ - "Components Store" - ], + "tags": ["Components Store"], "summary": "Like Component", "operationId": "like_component_api_v1_store_users_likes__component_id__post", "security": [ @@ -1792,9 +1732,7 @@ }, "/api/v1/flows/": { "post": { - "tags": [ - "Flows" - ], + "tags": ["Flows"], "summary": "Create Flow", "operationId": "create_flow_api_v1_flows__post", "security": [ @@ -1842,9 +1780,7 @@ } }, "get": { - "tags": [ - "Flows" - ], + "tags": ["Flows"], "summary": "Read Flows", "description": "Retrieve a list of flows with pagination support.\n\nArgs:\n current_user (User): The current authenticated user.\n session (Session): The database session.\n settings_service (SettingsService): The settings service.\n components_only (bool, optional): Whether to return only components. Defaults to False.\n\n get_all (bool, optional): Whether to return all flows without pagination. Defaults to True.\n **This field must be True because of backward compatibility with the frontend - Release: 1.0.20**\n\n folder_id (UUID, optional): The project ID. Defaults to None.\n params (Params): Pagination parameters.\n remove_example_flows (bool, optional): Whether to remove example flows. Defaults to False.\n header_flows (bool, optional): Whether to return only specific headers of the flows. Defaults to False.\n\nReturns:\n list[FlowRead] | Page[FlowRead] | list[FlowHeader]\n A list of flows or a paginated response containing the list of flows or a list of flow headers.", "operationId": "read_flows_api_v1_flows__get", @@ -1982,9 +1918,7 @@ } }, "delete": { - "tags": [ - "Flows" - ], + "tags": ["Flows"], "summary": "Delete Multiple Flows", "description": "Delete multiple flows by their IDs.\n\nArgs:\n flow_ids (List[str]): The list of flow IDs to delete.\n user (User, optional): The user making the request. Defaults to the current active user.\n db (Session, optional): The database session.\n\nReturns:\n dict: A dictionary containing the number of flows deleted.", "operationId": "delete_multiple_flows_api_v1_flows__delete", @@ -2038,9 +1972,7 @@ }, "/api/v1/flows/{flow_id}": { "get": { - "tags": [ - "Flows" - ], + "tags": ["Flows"], "summary": "Read Flow", "description": "Read a flow.", "operationId": "read_flow_api_v1_flows__flow_id__get", @@ -2091,9 +2023,7 @@ } }, "patch": { - "tags": [ - "Flows" - ], + "tags": ["Flows"], "summary": "Update Flow", "description": "Update a flow.", "operationId": "update_flow_api_v1_flows__flow_id__patch", @@ -2154,9 +2084,7 @@ } }, "delete": { - "tags": [ - "Flows" - ], + "tags": ["Flows"], "summary": "Delete Flow", "description": "Delete a flow.", "operationId": "delete_flow_api_v1_flows__flow_id__delete", @@ -2207,9 +2135,7 @@ }, "/api/v1/flows/public_flow/{flow_id}": { "get": { - "tags": [ - "Flows" - ], + "tags": ["Flows"], "summary": "Read Public Flow", "description": "Read a public flow.", "operationId": "read_public_flow_api_v1_flows_public_flow__flow_id__get", @@ -2251,9 +2177,7 @@ }, "/api/v1/flows/batch/": { "post": { - "tags": [ - "Flows" - ], + "tags": ["Flows"], "summary": "Create Flows", "description": "Create multiple new flows.", "operationId": "create_flows_api_v1_flows_batch__post", @@ -2308,9 +2232,7 @@ }, "/api/v1/flows/upload/": { "post": { - "tags": [ - "Flows" - ], + "tags": ["Flows"], "summary": "Upload File", "description": "Upload flows from a file.", "operationId": "upload_file_api_v1_flows_upload__post", @@ -2384,9 +2306,7 @@ }, "/api/v1/flows/download/": { "post": { - "tags": [ - "Flows" - ], + "tags": ["Flows"], "summary": "Download Multiple File", "description": "Download all flows as a zip file.", "operationId": "download_multiple_file_api_v1_flows_download__post", @@ -2440,9 +2360,7 @@ }, "/api/v1/flows/basic_examples/": { "get": { - "tags": [ - "Flows" - ], + "tags": ["Flows"], "summary": "Read Basic Examples", "description": "Retrieve a list of basic example flows.\n\nArgs:\n session (Session): The database session.\n\nReturns:\n list[FlowRead]: A list of basic example flows.", "operationId": "read_basic_examples_api_v1_flows_basic_examples__get", @@ -2466,9 +2384,7 @@ }, "/api/v1/users/": { "post": { - "tags": [ - "Users" - ], + "tags": ["Users"], "summary": "Add User", "description": "Add a new user to the database.", "operationId": "add_user_api_v1_users__post", @@ -2506,9 +2422,7 @@ } }, "get": { - "tags": [ - "Users" - ], + "tags": ["Users"], "summary": "Read All Users", "description": "Retrieve a list of users from the database with pagination.", "operationId": "read_all_users_api_v1_users__get", @@ -2571,9 +2485,7 @@ }, "/api/v1/users/whoami": { "get": { - "tags": [ - "Users" - ], + "tags": ["Users"], "summary": "Read Current User", "description": "Retrieve the current user's data.", "operationId": "read_current_user_api_v1_users_whoami_get", @@ -2604,9 +2516,7 @@ }, "/api/v1/users/{user_id}": { "patch": { - "tags": [ - "Users" - ], + "tags": ["Users"], "summary": "Patch User", "description": "Update an existing user's data.", "operationId": "patch_user_api_v1_users__user_id__patch", @@ -2667,9 +2577,7 @@ } }, "delete": { - "tags": [ - "Users" - ], + "tags": ["Users"], "summary": "Delete User", "description": "Delete a user from the database.", "operationId": "delete_user_api_v1_users__user_id__delete", @@ -2723,9 +2631,7 @@ }, "/api/v1/users/{user_id}/reset-password": { "patch": { - "tags": [ - "Users" - ], + "tags": ["Users"], "summary": "Reset Password", "description": "Reset a user's password.", "operationId": "reset_password_api_v1_users__user_id__reset_password_patch", @@ -2788,9 +2694,7 @@ }, "/api/v1/api_key/": { "get": { - "tags": [ - "APIKey" - ], + "tags": ["APIKey"], "summary": "Get Api Keys Route", "operationId": "get_api_keys_route_api_v1_api_key__get", "responses": { @@ -2818,9 +2722,7 @@ ] }, "post": { - "tags": [ - "APIKey" - ], + "tags": ["APIKey"], "summary": "Create Api Key Route", "operationId": "create_api_key_route_api_v1_api_key__post", "requestBody": { @@ -2870,9 +2772,7 @@ }, "/api/v1/api_key/{api_key_id}": { "delete": { - "tags": [ - "APIKey" - ], + "tags": ["APIKey"], "summary": "Delete Api Key Route", "operationId": "delete_api_key_route_api_v1_api_key__api_key_id__delete", "security": [ @@ -2922,9 +2822,7 @@ }, "/api/v1/api_key/store": { "post": { - "tags": [ - "APIKey" - ], + "tags": ["APIKey"], "summary": "Save Store Api Key", "operationId": "save_store_api_key_api_v1_api_key_store_post", "requestBody": { @@ -2972,9 +2870,7 @@ }, "/api/v1/login": { "post": { - "tags": [ - "Login" - ], + "tags": ["Login"], "summary": "Login To Get Access Token", "operationId": "login_to_get_access_token_api_v1_login_post", "requestBody": { @@ -3013,9 +2909,7 @@ }, "/api/v1/auto_login": { "get": { - "tags": [ - "Login" - ], + "tags": ["Login"], "summary": "Auto Login", "operationId": "auto_login_api_v1_auto_login_get", "responses": { @@ -3032,9 +2926,7 @@ }, "/api/v1/refresh": { "post": { - "tags": [ - "Login" - ], + "tags": ["Login"], "summary": "Refresh Token", "operationId": "refresh_token_api_v1_refresh_post", "responses": { @@ -3051,9 +2943,7 @@ }, "/api/v1/logout": { "post": { - "tags": [ - "Login" - ], + "tags": ["Login"], "summary": "Logout", "operationId": "logout_api_v1_logout_post", "responses": { @@ -3070,9 +2960,7 @@ }, "/api/v1/variables/": { "get": { - "tags": [ - "Variables" - ], + "tags": ["Variables"], "summary": "Read Variables", "description": "Read all variables.", "operationId": "read_variables_api_v1_variables__get", @@ -3105,9 +2993,7 @@ ] }, "post": { - "tags": [ - "Variables" - ], + "tags": ["Variables"], "summary": "Create Variable", "description": "Create a new variable.", "operationId": "create_variable_api_v1_variables__post", @@ -3158,9 +3044,7 @@ }, "/api/v1/variables/{variable_id}": { "patch": { - "tags": [ - "Variables" - ], + "tags": ["Variables"], "summary": "Update Variable", "description": "Update a variable.", "operationId": "update_variable_api_v1_variables__variable_id__patch", @@ -3221,9 +3105,7 @@ } }, "delete": { - "tags": [ - "Variables" - ], + "tags": ["Variables"], "summary": "Delete Variable", "description": "Delete a variable.", "operationId": "delete_variable_api_v1_variables__variable_id__delete", @@ -3269,9 +3151,7 @@ }, "/api/v1/files/upload/{flow_id}": { "post": { - "tags": [ - "Files" - ], + "tags": ["Files"], "summary": "Upload File", "operationId": "upload_file_api_v1_files_upload__flow_id__post", "security": [ @@ -3333,9 +3213,7 @@ }, "/api/v1/files/download/{flow_id}/{file_name}": { "get": { - "tags": [ - "Files" - ], + "tags": ["Files"], "summary": "Download File", "operationId": "download_file_api_v1_files_download__flow_id___file_name__get", "parameters": [ @@ -3383,9 +3261,7 @@ }, "/api/v1/files/images/{flow_id}/{file_name}": { "get": { - "tags": [ - "Files" - ], + "tags": ["Files"], "summary": "Download Image", "operationId": "download_image_api_v1_files_images__flow_id___file_name__get", "parameters": [ @@ -3433,9 +3309,7 @@ }, "/api/v1/files/profile_pictures/{folder_name}/{file_name}": { "get": { - "tags": [ - "Files" - ], + "tags": ["Files"], "summary": "Download Profile Picture", "operationId": "download_profile_picture_api_v1_files_profile_pictures__folder_name___file_name__get", "parameters": [ @@ -3482,9 +3356,7 @@ }, "/api/v1/files/profile_pictures/list": { "get": { - "tags": [ - "Files" - ], + "tags": ["Files"], "summary": "List Profile Pictures", "operationId": "list_profile_pictures_api_v1_files_profile_pictures_list_get", "responses": { @@ -3501,9 +3373,7 @@ }, "/api/v1/files/list/{flow_id}": { "get": { - "tags": [ - "Files" - ], + "tags": ["Files"], "summary": "List Files", "operationId": "list_files_api_v1_files_list__flow_id__get", "security": [ @@ -3553,9 +3423,7 @@ }, "/api/v1/files/delete/{flow_id}/{file_name}": { "delete": { - "tags": [ - "Files" - ], + "tags": ["Files"], "summary": "Delete File", "operationId": "delete_file_api_v1_files_delete__flow_id___file_name__delete", "security": [ @@ -3614,9 +3482,7 @@ }, "/api/v1/monitor/builds": { "get": { - "tags": [ - "Monitor" - ], + "tags": ["Monitor"], "summary": "Get Vertex Builds", "operationId": "get_vertex_builds_api_v1_monitor_builds_get", "parameters": [ @@ -3655,9 +3521,7 @@ } }, "delete": { - "tags": [ - "Monitor" - ], + "tags": ["Monitor"], "summary": "Delete Vertex Builds", "operationId": "delete_vertex_builds_api_v1_monitor_builds_delete", "parameters": [ @@ -3691,9 +3555,7 @@ }, "/api/v1/monitor/messages": { "get": { - "tags": [ - "Monitor" - ], + "tags": ["Monitor"], "summary": "Get Messages", "operationId": "get_messages_api_v1_monitor_messages_get", "parameters": [ @@ -3808,9 +3670,7 @@ } }, "delete": { - "tags": [ - "Monitor" - ], + "tags": ["Monitor"], "summary": "Delete Messages", "operationId": "delete_messages_api_v1_monitor_messages_delete", "security": [ @@ -3858,9 +3718,7 @@ }, "/api/v1/monitor/messages/{message_id}": { "put": { - "tags": [ - "Monitor" - ], + "tags": ["Monitor"], "summary": "Update Message", "operationId": "update_message_api_v1_monitor_messages__message_id__put", "security": [ @@ -3922,9 +3780,7 @@ }, "/api/v1/monitor/messages/session/{old_session_id}": { "patch": { - "tags": [ - "Monitor" - ], + "tags": ["Monitor"], "summary": "Update Session Id", "operationId": "update_session_id_api_v1_monitor_messages_session__old_session_id__patch", "security": [ @@ -3990,9 +3846,7 @@ }, "/api/v1/monitor/messages/session/{session_id}": { "delete": { - "tags": [ - "Monitor" - ], + "tags": ["Monitor"], "summary": "Delete Messages Session", "operationId": "delete_messages_session_api_v1_monitor_messages_session__session_id__delete", "parameters": [ @@ -4025,9 +3879,7 @@ }, "/api/v1/monitor/transactions": { "get": { - "tags": [ - "Monitor" - ], + "tags": ["Monitor"], "summary": "Get Transactions", "operationId": "get_transactions_api_v1_monitor_transactions_get", "parameters": [ @@ -4095,9 +3947,7 @@ }, "/api/v1/folders/": { "get": { - "tags": [ - "Folders" - ], + "tags": ["Folders"], "summary": "Read Folders Redirect", "description": "Redirect to the projects endpoint.", "operationId": "read_folders_redirect_api_v1_folders__get", @@ -4119,9 +3969,7 @@ } }, "post": { - "tags": [ - "Folders" - ], + "tags": ["Folders"], "summary": "Create Folder Redirect", "description": "Redirect to the projects endpoint.", "operationId": "create_folder_redirect_api_v1_folders__post", @@ -4141,9 +3989,7 @@ }, "/api/v1/folders/{folder_id}": { "get": { - "tags": [ - "Folders" - ], + "tags": ["Folders"], "summary": "Read Folder Redirect", "description": "Redirect to the projects endpoint.", "operationId": "read_folder_redirect_api_v1_folders__folder_id__get", @@ -4253,9 +4099,7 @@ } }, "patch": { - "tags": [ - "Folders" - ], + "tags": ["Folders"], "summary": "Update Folder Redirect", "description": "Redirect to the projects endpoint.", "operationId": "update_folder_redirect_api_v1_folders__folder_id__patch", @@ -4295,9 +4139,7 @@ } }, "delete": { - "tags": [ - "Folders" - ], + "tags": ["Folders"], "summary": "Delete Folder Redirect", "description": "Redirect to the projects endpoint.", "operationId": "delete_folder_redirect_api_v1_folders__folder_id__delete", @@ -4332,9 +4174,7 @@ }, "/api/v1/folders/download/{folder_id}": { "get": { - "tags": [ - "Folders" - ], + "tags": ["Folders"], "summary": "Download File Redirect", "description": "Redirect to the projects endpoint.", "operationId": "download_file_redirect_api_v1_folders_download__folder_id__get", @@ -4374,9 +4214,7 @@ }, "/api/v1/folders/upload/": { "post": { - "tags": [ - "Folders" - ], + "tags": ["Folders"], "summary": "Upload File Redirect", "description": "Redirect to the projects endpoint.", "operationId": "upload_file_redirect_api_v1_folders_upload__post", @@ -4400,9 +4238,7 @@ }, "/api/v1/projects/": { "get": { - "tags": [ - "Projects" - ], + "tags": ["Projects"], "summary": "Read Projects", "operationId": "read_projects_api_v1_projects__get", "responses": { @@ -4434,9 +4270,7 @@ ] }, "post": { - "tags": [ - "Projects" - ], + "tags": ["Projects"], "summary": "Create Project", "operationId": "create_project_api_v1_projects__post", "requestBody": { @@ -4486,9 +4320,7 @@ }, "/api/v1/projects/{project_id}": { "get": { - "tags": [ - "Projects" - ], + "tags": ["Projects"], "summary": "Read Project", "operationId": "read_project_api_v1_projects__project_id__get", "security": [ @@ -4608,9 +4440,7 @@ } }, "patch": { - "tags": [ - "Projects" - ], + "tags": ["Projects"], "summary": "Update Project", "operationId": "update_project_api_v1_projects__project_id__patch", "security": [ @@ -4670,9 +4500,7 @@ } }, "delete": { - "tags": [ - "Projects" - ], + "tags": ["Projects"], "summary": "Delete Project", "operationId": "delete_project_api_v1_projects__project_id__delete", "security": [ @@ -4717,9 +4545,7 @@ }, "/api/v1/projects/download/{project_id}": { "get": { - "tags": [ - "Projects" - ], + "tags": ["Projects"], "summary": "Download File", "description": "Download all flows from project as a zip file.", "operationId": "download_file_api_v1_projects_download__project_id__get", @@ -4770,9 +4596,7 @@ }, "/api/v1/projects/upload/": { "post": { - "tags": [ - "Projects" - ], + "tags": ["Projects"], "summary": "Upload File", "description": "Upload flows from a file.", "operationId": "upload_file_api_v1_projects_upload__post", @@ -4827,9 +4651,7 @@ }, "/api/v1/starter-projects/": { "get": { - "tags": [ - "Flows" - ], + "tags": ["Flows"], "summary": "Get Starter Projects", "description": "Get a list of starter projects.", "operationId": "get_starter_projects_api_v1_starter_projects__get", @@ -4864,9 +4686,7 @@ }, "/api/v1/voice/elevenlabs/voice_ids": { "get": { - "tags": [ - "Voice" - ], + "tags": ["Voice"], "summary": "Get Elevenlabs Voice Ids", "description": "Get available voice IDs from ElevenLabs API.", "operationId": "get_elevenlabs_voice_ids_api_v1_voice_elevenlabs_voice_ids_get", @@ -4895,9 +4715,7 @@ }, "/api/v1/mcp/sse": { "get": { - "tags": [ - "mcp" - ], + "tags": ["mcp"], "summary": "Handle Sse", "operationId": "handle_sse_api_v1_mcp_sse_get", "responses": { @@ -4920,9 +4738,7 @@ }, "/api/v1/mcp/": { "post": { - "tags": [ - "mcp" - ], + "tags": ["mcp"], "summary": "Handle Messages", "operationId": "handle_messages_api_v1_mcp__post", "responses": { @@ -4939,9 +4755,7 @@ }, "/api/v1/mcp/project/{project_id}": { "get": { - "tags": [ - "mcp_projects" - ], + "tags": ["mcp_projects"], "summary": "List Project Tools", "description": "List all tools in a project that are enabled for MCP.", "operationId": "list_project_tools_api_v1_mcp_project__project_id__get", @@ -5006,9 +4820,7 @@ } }, "post": { - "tags": [ - "mcp_projects" - ], + "tags": ["mcp_projects"], "summary": "Handle Project Messages", "description": "Handle POST messages for a project-specific MCP server.", "operationId": "handle_project_messages_api_v1_mcp_project__project_id__post", @@ -5057,9 +4869,7 @@ } }, "patch": { - "tags": [ - "mcp_projects" - ], + "tags": ["mcp_projects"], "summary": "Update Project Mcp Settings", "description": "Update the MCP settings of all flows in a project.", "operationId": "update_project_mcp_settings_api_v1_mcp_project__project_id__patch", @@ -5124,9 +4934,7 @@ }, "/api/v1/mcp/project/{project_id}/sse": { "get": { - "tags": [ - "mcp_projects" - ], + "tags": ["mcp_projects"], "summary": "Handle Project Sse", "description": "Handle SSE connections for a specific project.", "operationId": "handle_project_sse_api_v1_mcp_project__project_id__sse_get", @@ -5179,9 +4987,7 @@ }, "/api/v1/mcp/project/{project_id}/": { "post": { - "tags": [ - "mcp_projects" - ], + "tags": ["mcp_projects"], "summary": "Handle Project Messages With Slash", "description": "Handle POST messages for a project-specific MCP server with trailing slash.", "operationId": "handle_project_messages_with_slash_api_v1_mcp_project__project_id___post", @@ -5232,9 +5038,7 @@ }, "/api/v2/files/": { "get": { - "tags": [ - "Files" - ], + "tags": ["Files"], "summary": "List Files", "description": "List the files available to the current user.", "operationId": "list_files_api_v2_files__get", @@ -5267,9 +5071,7 @@ ] }, "post": { - "tags": [ - "Files" - ], + "tags": ["Files"], "summary": "Upload User File", "description": "Upload a file for the current user and track it in the database.", "operationId": "upload_user_file_api_v2_files__post", @@ -5318,9 +5120,7 @@ ] }, "delete": { - "tags": [ - "Files" - ], + "tags": ["Files"], "summary": "Delete All Files", "description": "Delete all files for the current user.", "operationId": "delete_all_files_api_v2_files__delete", @@ -5349,9 +5149,7 @@ }, "/api/v2/files": { "get": { - "tags": [ - "Files" - ], + "tags": ["Files"], "summary": "List Files", "description": "List the files available to the current user.", "operationId": "list_files_api_v2_files_get", @@ -5384,9 +5182,7 @@ ] }, "post": { - "tags": [ - "Files" - ], + "tags": ["Files"], "summary": "Upload User File", "description": "Upload a file for the current user and track it in the database.", "operationId": "upload_user_file_api_v2_files_post", @@ -5435,9 +5231,7 @@ ] }, "delete": { - "tags": [ - "Files" - ], + "tags": ["Files"], "summary": "Delete All Files", "description": "Delete all files for the current user.", "operationId": "delete_all_files_api_v2_files_delete", @@ -5466,9 +5260,7 @@ }, "/api/v2/files/batch/": { "post": { - "tags": [ - "Files" - ], + "tags": ["Files"], "summary": "Download Files Batch", "description": "Download multiple files as a zip file by their IDs.", "operationId": "download_files_batch_api_v2_files_batch__post", @@ -5520,9 +5312,7 @@ ] }, "delete": { - "tags": [ - "Files" - ], + "tags": ["Files"], "summary": "Delete Files Batch", "description": "Delete multiple files by their IDs.", "operationId": "delete_files_batch_api_v2_files_batch__delete", @@ -5576,9 +5366,7 @@ }, "/api/v2/files/{file_id}": { "get": { - "tags": [ - "Files" - ], + "tags": ["Files"], "summary": "Download File", "description": "Download a file by its ID.", "operationId": "download_file_api_v2_files__file_id__get", @@ -5627,9 +5415,7 @@ } }, "put": { - "tags": [ - "Files" - ], + "tags": ["Files"], "summary": "Edit File Name", "description": "Edit the name of a file by its ID.", "operationId": "edit_file_name_api_v2_files__file_id__put", @@ -5689,9 +5475,7 @@ } }, "delete": { - "tags": [ - "Files" - ], + "tags": ["Files"], "summary": "Delete File", "description": "Delete a file by its ID.", "operationId": "delete_file_api_v2_files__file_id__delete", @@ -5742,9 +5526,7 @@ }, "/api/mcp/sse": { "get": { - "tags": [ - "mcp" - ], + "tags": ["mcp"], "summary": "Handle Sse", "operationId": "handle_sse_api_mcp_sse_get", "responses": { @@ -5767,9 +5549,7 @@ }, "/api/mcp/": { "post": { - "tags": [ - "mcp" - ], + "tags": ["mcp"], "summary": "Handle Messages", "operationId": "handle_messages_api_mcp__post", "responses": { @@ -5786,9 +5566,7 @@ }, "/health": { "get": { - "tags": [ - "Health Check" - ], + "tags": ["Health Check"], "summary": "Health", "operationId": "health_health_get", "responses": { @@ -5805,9 +5583,7 @@ }, "/health_check": { "get": { - "tags": [ - "Health Check" - ], + "tags": ["Health Check"], "summary": "Health Check", "operationId": "health_check_health_check_get", "responses": { @@ -5826,9 +5602,7 @@ }, "/logs-stream": { "get": { - "tags": [ - "Log" - ], + "tags": ["Log"], "summary": "Stream Logs", "description": "HTTP/2 Server-Sent-Event (SSE) endpoint for streaming logs.\n\nIt establishes a long-lived connection to the server and receives log messages in real-time.\nThe client should use the header \"Accept: text/event-stream\".", "operationId": "stream_logs_logs_stream_get", @@ -5846,9 +5620,7 @@ }, "/logs": { "get": { - "tags": [ - "Log" - ], + "tags": ["Log"], "summary": "Logs", "operationId": "logs_logs_get", "parameters": [ @@ -5916,10 +5688,7 @@ "schemas": { "AccessTypeEnum": { "type": "string", - "enum": [ - "PRIVATE", - "PUBLIC" - ], + "enum": ["PRIVATE", "PUBLIC"], "title": "AccessTypeEnum" }, "ApiKeyCreate": { @@ -6004,9 +5773,7 @@ } }, "type": "object", - "required": [ - "api_key" - ], + "required": ["api_key"], "title": "ApiKeyCreateRequest" }, "ApiKeyRead": { @@ -6065,12 +5832,7 @@ } }, "type": "object", - "required": [ - "id", - "api_key", - "user_id", - "created_at" - ], + "required": ["id", "api_key", "user_id", "created_at"], "title": "ApiKeyRead" }, "ApiKeysResponse": { @@ -6093,11 +5855,7 @@ } }, "type": "object", - "required": [ - "total_count", - "user_id", - "api_keys" - ], + "required": ["total_count", "user_id", "api_keys"], "title": "ApiKeysResponse" }, "BaseModel": { @@ -6224,9 +5982,7 @@ } }, "type": "object", - "required": [ - "file" - ], + "required": ["file"], "title": "Body_create_upload_file_api_v1_upload__flow_id__post" }, "Body_experimental_run_flow_api_v1_run_advanced__flow_id__post": { @@ -6340,10 +6096,7 @@ } }, "type": "object", - "required": [ - "username", - "password" - ], + "required": ["username", "password"], "title": "Body_login_to_get_access_token_api_v1_login_post" }, "Body_upload_file_api_v1_files_upload__flow_id__post": { @@ -6355,9 +6108,7 @@ } }, "type": "object", - "required": [ - "file" - ], + "required": ["file"], "title": "Body_upload_file_api_v1_files_upload__flow_id__post" }, "Body_upload_file_api_v1_flows_upload__post": { @@ -6369,9 +6120,7 @@ } }, "type": "object", - "required": [ - "file" - ], + "required": ["file"], "title": "Body_upload_file_api_v1_flows_upload__post" }, "Body_upload_file_api_v1_projects_upload__post": { @@ -6383,9 +6132,7 @@ } }, "type": "object", - "required": [ - "file" - ], + "required": ["file"], "title": "Body_upload_file_api_v1_projects_upload__post" }, "Body_upload_user_file_api_v2_files__post": { @@ -6397,9 +6144,7 @@ } }, "type": "object", - "required": [ - "file" - ], + "required": ["file"], "title": "Body_upload_user_file_api_v2_files__post" }, "Body_upload_user_file_api_v2_files_post": { @@ -6411,9 +6156,7 @@ } }, "type": "object", - "required": [ - "file" - ], + "required": ["file"], "title": "Body_upload_user_file_api_v2_files_post" }, "CancelFlowResponse": { @@ -6428,10 +6171,7 @@ } }, "type": "object", - "required": [ - "success", - "message" - ], + "required": ["success", "message"], "title": "CancelFlowResponse", "description": "Response model for flow build cancellation." }, @@ -6529,10 +6269,7 @@ } }, "type": "object", - "required": [ - "message", - "type" - ], + "required": ["message", "type"], "title": "ChatOutputResponse", "description": "Chat output response schema." }, @@ -6544,9 +6281,7 @@ } }, "type": "object", - "required": [ - "code" - ], + "required": ["code"], "title": "Code" }, "CodeContent": { @@ -6564,10 +6299,7 @@ } }, "type": "object", - "required": [ - "imports", - "function" - ], + "required": ["imports", "function"], "title": "CodeValidationResponse" }, "ConfigResponse": { @@ -6575,9 +6307,9 @@ "feature_flags": { "$ref": "#/components/schemas/FeatureFlags" }, - "serialization_max_items_lenght": { + "serialization_max_items_length": { "type": "integer", - "title": "Serialization Max Items Lenght", + "title": "Serialization Max Items Length", "default": 100 }, "serialization_max_text_length": { @@ -6619,11 +6351,7 @@ }, "event_delivery": { "type": "string", - "enum": [ - "polling", - "streaming", - "direct" - ], + "enum": ["polling", "streaming", "direct"], "title": "Event Delivery" } }, @@ -6676,10 +6404,7 @@ } }, "type": "object", - "required": [ - "title", - "contents" - ], + "required": ["title", "contents"], "title": "ContentBlock", "description": "A block of content that can contain different types of content." }, @@ -6692,9 +6417,7 @@ } }, "type": "object", - "required": [ - "id" - ], + "required": ["id"], "title": "CreateComponentResponse" }, "CustomComponentRequest": { @@ -6716,9 +6439,7 @@ } }, "type": "object", - "required": [ - "code" - ], + "required": ["code"], "title": "CustomComponentRequest" }, "CustomComponentResponse": { @@ -6733,10 +6454,7 @@ } }, "type": "object", - "required": [ - "data", - "type" - ], + "required": ["data", "type"], "title": "CustomComponentResponse" }, "DownloadComponentResponse": { @@ -6804,13 +6522,7 @@ } }, "type": "object", - "required": [ - "id", - "name", - "description", - "data", - "is_component" - ], + "required": ["id", "name", "description", "data", "is_component"], "title": "DownloadComponentResponse" }, "EdgeData": { @@ -6840,10 +6552,7 @@ } }, "type": "object", - "required": [ - "sourceHandle", - "targetHandle" - ], + "required": ["sourceHandle", "targetHandle"], "title": "EdgeDataDetails" }, "ErrorContent": { @@ -6861,19 +6570,12 @@ } }, "type": "object", - "required": [ - "errorMessage", - "stackTrace" - ], + "required": ["errorMessage", "stackTrace"], "title": "ErrorLog" }, "EventDeliveryType": { "type": "string", - "enum": [ - "streaming", - "direct", - "polling" - ], + "enum": ["streaming", "direct", "polling"], "title": "EventDeliveryType" }, "FeatureFlags": { @@ -7107,10 +6809,7 @@ } }, "type": "object", - "required": [ - "name", - "user_id" - ], + "required": ["name", "user_id"], "title": "Flow" }, "FlowCreate": { @@ -7326,9 +7025,7 @@ } }, "type": "object", - "required": [ - "name" - ], + "required": ["name"], "title": "FlowCreate" }, "FlowDataRequest": { @@ -7360,10 +7057,7 @@ } }, "type": "object", - "required": [ - "nodes", - "edges" - ], + "required": ["nodes", "edges"], "title": "FlowDataRequest" }, "FlowHeader": { @@ -7504,10 +7198,7 @@ } }, "type": "object", - "required": [ - "id", - "name" - ], + "required": ["id", "name"], "title": "FlowHeader", "description": "Model representing a header for a flow - Without the data." }, @@ -7522,9 +7213,7 @@ } }, "type": "object", - "required": [ - "flows" - ], + "required": ["flows"], "title": "FlowListCreate" }, "FlowRead": { @@ -7735,12 +7424,7 @@ } }, "type": "object", - "required": [ - "name", - "id", - "user_id", - "folder_id" - ], + "required": ["name", "id", "user_id", "folder_id"], "title": "FlowRead" }, "FlowUpdate": { @@ -7919,9 +7603,7 @@ } }, "type": "object", - "required": [ - "name" - ], + "required": ["name"], "title": "FolderCreate" }, "FolderRead": { @@ -7960,11 +7642,7 @@ } }, "type": "object", - "required": [ - "name", - "id", - "parent_id" - ], + "required": ["name", "id", "parent_id"], "title": "FolderRead" }, "FolderReadWithFlows": { @@ -8011,11 +7689,7 @@ } }, "type": "object", - "required": [ - "name", - "id", - "parent_id" - ], + "required": ["name", "id", "parent_id"], "title": "FolderReadWithFlows" }, "FolderUpdate": { @@ -8084,10 +7758,7 @@ } }, "type": "object", - "required": [ - "folder", - "flows" - ], + "required": ["folder", "flows"], "title": "FolderWithPaginatedFlows" }, "FrontendNodeRequest-Input": { @@ -8298,10 +7969,7 @@ } }, "type": "object", - "required": [ - "template", - "base_classes" - ], + "required": ["template", "base_classes"], "title": "FrontendNodeRequest" }, "FrontendNodeRequest-Output": { @@ -8504,10 +8172,7 @@ } }, "type": "object", - "required": [ - "template", - "base_classes" - ], + "required": ["template", "base_classes"], "title": "FrontendNodeRequest" }, "GraphData": { @@ -8531,10 +8196,7 @@ } }, "type": "object", - "required": [ - "nodes", - "edges" - ], + "required": ["nodes", "edges"], "title": "GraphData" }, "GraphDump": { @@ -8667,11 +8329,7 @@ "anyOf": [ { "type": "string", - "enum": [ - "chat", - "text", - "any" - ] + "enum": ["chat", "text", "any"] }, { "type": "null" @@ -8687,26 +8345,19 @@ "title": "InputValueRequest", "examples": [ { - "components": [ - "components_id", - "Component Name" - ], + "components": ["components_id", "Component Name"], "input_value": "input_value", "session": "session_id" }, { - "components": [ - "Component Name" - ], + "components": ["Component Name"], "input_value": "input_value" }, { "input_value": "input_value" }, { - "components": [ - "Component Name" - ], + "components": ["Component Name"], "input_value": "input_value", "session": "session_id" }, @@ -8905,10 +8556,7 @@ } }, "type": "object", - "required": [ - "authorized", - "results" - ], + "required": ["authorized", "results"], "title": "ListComponentResponseModel" }, "Log": { @@ -8956,11 +8604,7 @@ } }, "type": "object", - "required": [ - "name", - "message", - "type" - ], + "required": ["name", "message", "type"], "title": "Log" }, "MCPSettings": { @@ -9027,9 +8671,7 @@ } }, "type": "object", - "required": [ - "id" - ], + "required": ["id"], "title": "MCPSettings", "description": "Model representing MCP settings for a flow." }, @@ -9230,13 +8872,7 @@ } }, "type": "object", - "required": [ - "sender", - "sender_name", - "session_id", - "text", - "edit" - ], + "required": ["sender", "sender_name", "session_id", "text", "edit"], "title": "MessageResponse" }, "MessageUpdate": { @@ -9376,18 +9012,12 @@ } }, "type": "object", - "required": [ - "id", - "data" - ], + "required": ["id", "data"], "title": "NodeData" }, "NodeTypeEnum": { "type": "string", - "enum": [ - "noteNode", - "genericNode" - ], + "enum": ["noteNode", "genericNode"], "title": "NodeTypeEnum" }, "Output": { @@ -9500,9 +9130,7 @@ } }, "type": "object", - "required": [ - "name" - ], + "required": ["name"], "title": "Output" }, "OutputOptions": { @@ -9551,10 +9179,7 @@ } }, "type": "object", - "required": [ - "message", - "type" - ], + "required": ["message", "type"], "title": "OutputValue" }, "Page_FlowRead_": { @@ -9616,11 +9241,7 @@ } }, "type": "object", - "required": [ - "items", - "page", - "size" - ], + "required": ["items", "page", "size"], "title": "Page[FlowRead]" }, "Page_Flow_": { @@ -9682,11 +9303,7 @@ } }, "type": "object", - "required": [ - "items", - "page", - "size" - ], + "required": ["items", "page", "size"], "title": "Page[Flow]" }, "Page_TransactionTable_": { @@ -9748,11 +9365,7 @@ } }, "type": "object", - "required": [ - "items", - "page", - "size" - ], + "required": ["items", "page", "size"], "title": "Page[TransactionTable]" }, "PlaygroundEvent": { @@ -9794,12 +9407,7 @@ }, "format_type": { "type": "string", - "enum": [ - "default", - "error", - "warning", - "info" - ], + "enum": ["default", "error", "warning", "info"], "title": "Format Type", "default": "default" }, @@ -9864,10 +9472,7 @@ } }, "type": "object", - "required": [ - "x", - "y" - ], + "required": ["x", "y"], "title": "Position" }, "PromptValidationResponse": { @@ -9889,9 +9494,7 @@ } }, "type": "object", - "required": [ - "input_variables" - ], + "required": ["input_variables"], "title": "PromptValidationResponse" }, "Properties": { @@ -9955,10 +9558,7 @@ }, "state": { "type": "string", - "enum": [ - "partial", - "complete" - ], + "enum": ["partial", "complete"], "title": "State", "default": "complete" }, @@ -10166,11 +9766,7 @@ "anyOf": [ { "type": "string", - "enum": [ - "chat", - "text", - "any" - ] + "enum": ["chat", "text", "any"] }, { "type": "null" @@ -10184,12 +9780,7 @@ "anyOf": [ { "type": "string", - "enum": [ - "chat", - "text", - "any", - "debug" - ] + "enum": ["chat", "text", "any", "debug"] }, { "type": "null" @@ -10403,13 +9994,7 @@ } }, "type": "object", - "required": [ - "name", - "description", - "data", - "tags", - "is_component" - ], + "required": ["name", "description", "data", "tags", "is_component"], "title": "StoreComponentCreate" }, "StreamURL": { @@ -10420,9 +10005,7 @@ } }, "type": "object", - "required": [ - "location" - ], + "required": ["location"], "title": "StreamURL" }, "TagResponse": { @@ -10445,10 +10028,7 @@ } }, "type": "object", - "required": [ - "id", - "name" - ], + "required": ["id", "name"], "title": "TagResponse" }, "TargetHandleDict": { @@ -10481,12 +10061,7 @@ } }, "type": "object", - "required": [ - "fieldName", - "id", - "inputTypes", - "type" - ], + "required": ["fieldName", "id", "inputTypes", "type"], "title": "TargetHandleDict" }, "TaskStatusResponse": { @@ -10506,9 +10081,7 @@ } }, "type": "object", - "required": [ - "status" - ], + "required": ["status"], "title": "TaskStatusResponse", "description": "Task status response schema." }, @@ -10531,11 +10104,7 @@ } }, "type": "object", - "required": [ - "access_token", - "refresh_token", - "token_type" - ], + "required": ["access_token", "refresh_token", "token_type"], "title": "Token" }, "ToolContent": { @@ -10605,11 +10174,7 @@ } }, "type": "object", - "required": [ - "vertex_id", - "status", - "flow_id" - ], + "required": ["vertex_id", "status", "flow_id"], "title": "TransactionTable" }, "Tweaks": { @@ -10689,11 +10254,7 @@ } }, "type": "object", - "required": [ - "id", - "api_key", - "user_id" - ], + "required": ["id", "api_key", "user_id"], "title": "UnmaskedApiKeyRead" }, "UpdateCustomComponentRequest": { @@ -10755,11 +10316,7 @@ } }, "type": "object", - "required": [ - "code", - "field", - "template" - ], + "required": ["code", "field", "template"], "title": "UpdateCustomComponentRequest" }, "UserCreate": { @@ -10790,10 +10347,7 @@ } }, "type": "object", - "required": [ - "username", - "password" - ], + "required": ["username", "password"], "title": "UserCreate" }, "UserRead": { @@ -10994,10 +10548,7 @@ } }, "type": "object", - "required": [ - "likes_count", - "liked_by_user" - ], + "required": ["likes_count", "liked_by_user"], "title": "UsersLikesResponse" }, "UsersResponse": { @@ -11015,10 +10566,7 @@ } }, "type": "object", - "required": [ - "total_count", - "users" - ], + "required": ["total_count", "users"], "title": "UsersResponse" }, "ValidatePromptRequest": { @@ -11054,10 +10602,7 @@ } }, "type": "object", - "required": [ - "name", - "template" - ], + "required": ["name", "template"], "title": "ValidatePromptRequest" }, "ValidationError": { @@ -11086,11 +10631,7 @@ } }, "type": "object", - "required": [ - "loc", - "msg", - "type" - ], + "required": ["loc", "msg", "type"], "title": "ValidationError" }, "VariableCreate": { @@ -11159,11 +10700,7 @@ } }, "type": "object", - "required": [ - "name", - "value", - "default_fields" - ], + "required": ["name", "value", "default_fields"], "title": "VariableCreate" }, "VariableRead": { @@ -11226,9 +10763,7 @@ } }, "type": "object", - "required": [ - "id" - ], + "required": ["id"], "title": "VariableRead" }, "VariableUpdate": { @@ -11279,9 +10814,7 @@ } }, "type": "object", - "required": [ - "id" - ], + "required": ["id"], "title": "VariableUpdate" }, "VertexBuildMapModel": { @@ -11298,9 +10831,7 @@ } }, "type": "object", - "required": [ - "vertex_builds" - ], + "required": ["vertex_builds"], "title": "VertexBuildMapModel" }, "VertexBuildResponse": { @@ -11388,10 +10919,7 @@ } }, "type": "object", - "required": [ - "valid", - "data" - ], + "required": ["valid", "data"], "title": "VertexBuildResponse" }, "VertexBuildTable": { @@ -11440,11 +10968,7 @@ } }, "type": "object", - "required": [ - "id", - "valid", - "flow_id" - ], + "required": ["id", "valid", "flow_id"], "title": "VertexBuildTable" }, "VerticesOrderResponse": { @@ -11470,11 +10994,7 @@ } }, "type": "object", - "required": [ - "ids", - "run_id", - "vertices_to_run" - ], + "required": ["ids", "run_id", "vertices_to_run"], "title": "VerticesOrderResponse" }, "ViewPort": { @@ -11493,11 +11013,7 @@ } }, "type": "object", - "required": [ - "x", - "y", - "zoom" - ], + "required": ["x", "y", "zoom"], "title": "ViewPort" }, "langflow__api__schemas__UploadFileResponse": { @@ -11533,12 +11049,7 @@ } }, "type": "object", - "required": [ - "id", - "name", - "path", - "size" - ], + "required": ["id", "name", "path", "size"], "title": "UploadFileResponse", "description": "File upload response schema." }, @@ -11555,10 +11066,7 @@ } }, "type": "object", - "required": [ - "flowId", - "file_path" - ], + "required": ["flowId", "file_path"], "title": "UploadFileResponse", "description": "Upload file response schema." }, @@ -11609,12 +11117,7 @@ } }, "type": "object", - "required": [ - "user_id", - "name", - "path", - "size" - ], + "required": ["user_id", "name", "path", "size"], "title": "File" }, "langflow__utils__schemas__File": { @@ -11633,11 +11136,7 @@ } }, "type": "object", - "required": [ - "path", - "name", - "type" - ], + "required": ["path", "name", "type"], "title": "File", "description": "File schema." } diff --git a/src/backend/base/langflow/api/v1/schemas.py b/src/backend/base/langflow/api/v1/schemas.py index 26823c8c7..24df41e7a 100644 --- a/src/backend/base/langflow/api/v1/schemas.py +++ b/src/backend/base/langflow/api/v1/schemas.py @@ -377,7 +377,7 @@ class FlowDataRequest(BaseModel): class ConfigResponse(BaseModel): feature_flags: FeatureFlags - serialization_max_items_lenght: int = serialization_constants.MAX_ITEMS_LENGTH + serialization_max_items_length: int = serialization_constants.MAX_ITEMS_LENGTH serialization_max_text_length: int = serialization_constants.MAX_TEXT_LENGTH frontend_timeout: int auto_saving: bool diff --git a/src/frontend/src/components/core/dataOutputComponent/index.tsx b/src/frontend/src/components/core/dataOutputComponent/index.tsx index 3a4c52841..1b9d6be91 100644 --- a/src/frontend/src/components/core/dataOutputComponent/index.tsx +++ b/src/frontend/src/components/core/dataOutputComponent/index.tsx @@ -1,4 +1,5 @@ import TableComponent from "@/components/core/parameterRenderComponent/components/tableComponent"; +import { useUtilityStore } from "@/stores/utilityStore"; import { ColDef, ColGroupDef } from "ag-grid-community"; import "ag-grid-community/styles/ag-grid.css"; // Mandatory CSS required by the grid import "ag-grid-community/styles/ag-theme-balham.css"; // Optional Theme applied to the grid @@ -14,10 +15,15 @@ function DataOutputComponent({ rows: any[]; columnMode?: "intersection" | "union"; }) { - const [rowsInternal, setRowsInternal] = useState(rows.slice(0, 1000)); + const maxItemsLength = useUtilityStore( + (state) => state.serializationMaxItemsLength, + ); + const [rowsInternal, setRowsInternal] = useState( + rows.slice(0, maxItemsLength), + ); useEffect(() => { - const rowsSliced = rows.slice(0, 1000); + const rowsSliced = rows.slice(0, maxItemsLength); if (rowsSliced.some((row) => typeof row !== "object")) { setRowsInternal(rowsSliced.map((row) => ({ data: row }))); } else { @@ -34,10 +40,15 @@ function DataOutputComponent({ return ( 1000 ? rows[1000] : undefined} + paginationInfo={ + rows.length > maxItemsLength ? rows[maxItemsLength] : undefined + } suppressRowClickSelection={true} pagination={pagination} columnDefs={columnDefs} diff --git a/src/frontend/src/controllers/API/queries/config/use-get-config.ts b/src/frontend/src/controllers/API/queries/config/use-get-config.ts index 4a21634b8..6bb2bc629 100644 --- a/src/frontend/src/controllers/API/queries/config/use-get-config.ts +++ b/src/frontend/src/controllers/API/queries/config/use-get-config.ts @@ -19,6 +19,7 @@ export interface ConfigResponse { max_file_size_upload: number; feature_flags: Record; webhook_polling_interval: number; + serialization_max_items_length: number; event_delivery: EventDeliveryType; } @@ -35,6 +36,9 @@ export const useGetConfig: useQueryFunctionType = ( const setMaxFileSizeUpload = useUtilityStore( (state) => state.setMaxFileSizeUpload, ); + const setSerializationMaxItemsLength = useUtilityStore( + (state) => state.setSerializationMaxItemsLength, + ); const setFeatureFlags = useUtilityStore((state) => state.setFeatureFlags); const setWebhookPollingInterval = useUtilityStore( (state) => state.setWebhookPollingInterval, @@ -56,6 +60,7 @@ export const useGetConfig: useQueryFunctionType = ( setHealthCheckMaxRetries(data.health_check_max_retries); setMaxFileSizeUpload(data.max_file_size_upload); setFeatureFlags(data.feature_flags); + setSerializationMaxItemsLength(data.serialization_max_items_length); setWebhookPollingInterval( data.webhook_polling_interval ?? DEFAULT_POLLING_INTERVAL, ); diff --git a/src/frontend/src/stores/utilityStore.ts b/src/frontend/src/stores/utilityStore.ts index c5a472e09..df34882cb 100644 --- a/src/frontend/src/stores/utilityStore.ts +++ b/src/frontend/src/stores/utilityStore.ts @@ -27,6 +27,9 @@ export const useUtilityStore = create((set, get) => ({ maxFileSizeUpload: 100 * 1024 * 1024, // 100MB in bytes setMaxFileSizeUpload: (maxFileSizeUpload: number) => set({ maxFileSizeUpload: maxFileSizeUpload * 1024 * 1024 }), + serializationMaxItemsLength: 100, + setSerializationMaxItemsLength: (serializationMaxItemsLength: number) => + set({ serializationMaxItemsLength }), flowsPagination: { page: 1, size: 10, diff --git a/src/frontend/src/types/zustand/utility/index.ts b/src/frontend/src/types/zustand/utility/index.ts index 8bebaf8f5..9cc0ccb4e 100644 --- a/src/frontend/src/types/zustand/utility/index.ts +++ b/src/frontend/src/types/zustand/utility/index.ts @@ -9,6 +9,7 @@ export type UtilityStoreType = { playgroundScrollBehaves: ScrollBehavior; setPlaygroundScrollBehaves: (behaves: ScrollBehavior) => void; maxFileSizeUpload: number; + setMaxFileSizeUpload: (maxFileSizeUpload: number) => void; flowsPagination: Pagination; setFlowsPagination: (pagination: Pagination) => void; tags: Tag[]; @@ -25,4 +26,6 @@ export type UtilityStoreType = { clientId: string; eventDelivery: EventDeliveryType; setEventDelivery: (eventDelivery: EventDeliveryType) => void; + serializationMaxItemsLength: number; + setSerializationMaxItemsLength: (serializationMaxItemsLength: number) => void; }; diff --git a/src/frontend/tests/extended/regression/general-bugs-truncate-results.spec.ts b/src/frontend/tests/extended/regression/general-bugs-truncate-results.spec.ts new file mode 100644 index 000000000..38ea096e0 --- /dev/null +++ b/src/frontend/tests/extended/regression/general-bugs-truncate-results.spec.ts @@ -0,0 +1,51 @@ +import { expect, test } from "@playwright/test"; +import { awaitBootstrapTest } from "../../utils/await-bootstrap-test"; + +test( + "truncated values must be displayed correctly", + { tag: ["@release", "@components"] }, + async ({ page }) => { + await awaitBootstrapTest(page); + + await page.getByTestId("blank-flow").click(); + + await page.getByTestId("sidebar-search-input").click(); + await page.getByTestId("sidebar-search-input").fill("url"); + await page.waitForSelector('[data-testid="dataURL"]', { + timeout: 1000, + }); + + await page + .getByTestId("dataURL") + .dragTo(page.locator('//*[@id="react-flow-id"]'), { + targetPosition: { x: 300, y: 300 }, + }); + + await page + .getByTestId("inputlist_str_urls_0") + .fill("https://docs.langflow.org/"); + + await page.getByTestId("default_slider_display_value").click(); + await page.getByTestId("slider_input").fill("4"); + + await page.getByTestId("button_run_url").click(); + + await page.waitForSelector("text=built successfully", { + timeout: 30000, + }); + + await page.getByTestId("output-inspection-result-urlcomponent").click(); + + await page.getByText(`Inspect the output of the component below.`, { + exact: true, + }); + + expect(page.getByText(`[truncated`)).toBeVisible(); + + expect(page.locator("span.ag-header-cell-text").nth(1)).toHaveText("url"); + + expect(page.locator("span[data-ref=lbRecordCount]").first()).toHaveText( + "100", + ); + }, +);