From a6b684f1391fbe18a1f8900dd0740690d35d509e Mon Sep 17 00:00:00 2001 From: Cristhian Zanforlin Lousa Date: Thu, 17 Oct 2024 10:34:05 -0300 Subject: [PATCH] feat: add new categories endpoint (#4184) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * ✨ (endpoints.py): Add new endpoint to retrieve sidebar categories for the frontend application. * 📝 (schemas.py): add SidebarCategory and SidebarCategoriesResponse models to define sidebar categories and response structure for API endpoint. * ✨ (constants.py): Add sidebar categories with display names, names, icons, and beta status for different components to enhance the user interface and navigation experience. * 📝 (constants.py): Update icons names to use proper casing for consistency and clarity in the code. --- src/backend/base/langflow/api/v1/endpoints.py | 7 + src/backend/base/langflow/api/v1/schemas.py | 11 ++ src/backend/base/langflow/utils/constants.py | 136 ++++++++++++++++++ 3 files changed, 154 insertions(+) diff --git a/src/backend/base/langflow/api/v1/endpoints.py b/src/backend/base/langflow/api/v1/endpoints.py index 220ac5bc3..5d442fe65 100644 --- a/src/backend/base/langflow/api/v1/endpoints.py +++ b/src/backend/base/langflow/api/v1/endpoints.py @@ -18,6 +18,7 @@ from langflow.api.v1.schemas import ( InputValueRequest, ProcessResponse, RunResponse, + SidebarCategoriesResponse, SimplifiedAPIRequest, TaskStatusResponse, UpdateCustomComponentRequest, @@ -49,6 +50,7 @@ from langflow.services.deps import ( from langflow.services.session.service import SessionService from langflow.services.telemetry.schema import RunPayload from langflow.services.telemetry.service import TelemetryService +from langflow.utils.constants import SIDEBAR_CATEGORIES from langflow.utils.version import get_version_info if TYPE_CHECKING: @@ -640,3 +642,8 @@ def get_config(): return settings_service.settings.model_dump() except Exception as exc: raise HTTPException(status_code=500, detail=str(exc)) from exc + + +@router.get("/sidebar_categories", response_model=SidebarCategoriesResponse) +def get_sidebar_categories(): + return SidebarCategoriesResponse(categories=SIDEBAR_CATEGORIES) diff --git a/src/backend/base/langflow/api/v1/schemas.py b/src/backend/base/langflow/api/v1/schemas.py index f986765dd..c909038d6 100644 --- a/src/backend/base/langflow/api/v1/schemas.py +++ b/src/backend/base/langflow/api/v1/schemas.py @@ -355,3 +355,14 @@ class ConfigResponse(BaseModel): auto_saving_interval: int health_check_max_retries: int max_file_size_upload: int + + +class SidebarCategory(BaseModel): + display_name: str + name: str + icon: str + beta: bool + + +class SidebarCategoriesResponse(BaseModel): + categories: list[SidebarCategory] diff --git a/src/backend/base/langflow/utils/constants.py b/src/backend/base/langflow/utils/constants.py index 6cf837b9b..d85bd615e 100644 --- a/src/backend/base/langflow/utils/constants.py +++ b/src/backend/base/langflow/utils/constants.py @@ -175,3 +175,139 @@ MESSAGE_SENDER_NAME_AI = "AI" MESSAGE_SENDER_NAME_USER = "User" MAX_TEXT_LENGTH = 99999 + + +SIDEBAR_CATEGORIES = [ + { + "display_name": "Saved", + "name": "saved_components", + "icon": "GradientSave", + "beta": False, + }, + { + "display_name": "Inputs", + "name": "inputs", + "icon": "Download", + "beta": False, + }, + { + "display_name": "Outputs", + "name": "outputs", + "icon": "Upload", + "beta": False, + }, + { + "display_name": "Prompts", + "name": "prompts", + "icon": "TerminalSquare", + "beta": False, + }, + { + "display_name": "Data", + "name": "data", + "icon": "Database", + "beta": False, + }, + { + "display_name": "Models", + "name": "models", + "icon": "BrainCircuit", + "beta": False, + }, + { + "display_name": "Helpers", + "name": "helpers", + "icon": "Wand2", + "beta": False, + }, + { + "display_name": "Vector Stores", + "name": "vectorstores", + "icon": "Layers", + "beta": False, + }, + { + "display_name": "Embeddings", + "name": "embeddings", + "icon": "Binary", + "beta": False, + }, + { + "display_name": "Agents", + "name": "agents", + "icon": "Bot", + "beta": True, + }, + { + "display_name": "Astra Assistants", + "name": "astra_assistants", + "icon": "Sparkles", + "beta": True, + }, + { + "display_name": "Chains", + "name": "chains", + "icon": "Link", + "beta": True, + }, + { + "display_name": "Loaders", + "name": "documentloaders", + "icon": "Paperclip", + "beta": True, + }, + { + "display_name": "Utilities", + "name": "langchain_utilities", + "icon": "PocketKnife", + "beta": True, + }, + { + "display_name": "Link Extractors", + "name": "link_extractors", + "icon": "Link2", + "beta": True, + }, + { + "display_name": "Memories", + "name": "memories", + "icon": "Cpu", + "beta": True, + }, + { + "display_name": "Output Parsers", + "name": "output_parsers", + "icon": "Compass", + "beta": True, + }, + { + "display_name": "Prototypes", + "name": "prototypes", + "icon": "FlaskConical", + "beta": True, + }, + { + "display_name": "Retrievers", + "name": "retrievers", + "icon": "FileSearch", + "beta": True, + }, + { + "display_name": "Text Splitters", + "name": "textsplitters", + "icon": "Scissors", + "beta": True, + }, + { + "display_name": "Toolkits", + "name": "toolkits", + "icon": "Package2", + "beta": True, + }, + { + "display_name": "Tools", + "name": "tools", + "icon": "Hammer", + "beta": True, + }, +]