diff --git a/backend/apps/webui/models/tools.py b/backend/apps/webui/models/tools.py index 9e5e63dc3..99463878b 100644 --- a/backend/apps/webui/models/tools.py +++ b/backend/apps/webui/models/tools.py @@ -41,7 +41,7 @@ class ToolModel(BaseModel): user_id: str name: str content: str - specs: dict + specs: List[dict] meta: ToolMeta updated_at: int # timestamp in epoch created_at: int # timestamp in epoch @@ -74,7 +74,7 @@ class ToolsTable: self.db.create_tables([Tool]) def insert_new_tool( - self, user_id: str, form_data: ToolForm, specs: dict + self, user_id: str, form_data: ToolForm, specs: List[dict] ) -> Optional[ToolModel]: tool = ToolModel( **{ diff --git a/backend/apps/webui/routers/tools.py b/backend/apps/webui/routers/tools.py index b4964345e..dc76bb312 100644 --- a/backend/apps/webui/routers/tools.py +++ b/backend/apps/webui/routers/tools.py @@ -52,7 +52,18 @@ def load_toolkit_module_from_path(tools_id, tools_path): @router.get("/", response_model=List[ToolResponse]) async def get_toolkits(user=Depends(get_current_user)): - toolkits = [ToolResponse(**toolkit) for toolkit in Tools.get_tools()] + toolkits = [toolkit for toolkit in Tools.get_tools()] + return toolkits + + +############################ +# ExportToolKits +############################ + + +@router.get("/export", response_model=List[ToolModel]) +async def get_toolkits(user=Depends(get_current_user)): + toolkits = [toolkit for toolkit in Tools.get_tools()] return toolkits @@ -77,7 +88,7 @@ async def create_new_toolkit(form_data: ToolForm, user=Depends(get_admin_user)): toolkit = Tools.insert_new_tool(user.id, form_data, specs) if toolkit: - return ToolResponse(**toolkit) + return toolkit else: raise HTTPException( status_code=status.HTTP_400_BAD_REQUEST, @@ -91,7 +102,7 @@ async def create_new_toolkit(form_data: ToolForm, user=Depends(get_admin_user)): else: raise HTTPException( status_code=status.HTTP_400_BAD_REQUEST, - detail=ERROR_MESSAGES.NAME_TAG_TAKEN, + detail=ERROR_MESSAGES.ID_TAKEN, ) @@ -105,7 +116,7 @@ async def get_toolkit_by_id(id: str, user=Depends(get_admin_user)): toolkit = Tools.get_tool_by_id(id) if toolkit: - return ToolResponse(**toolkit) + return toolkit else: raise HTTPException( status_code=status.HTTP_401_UNAUTHORIZED, @@ -137,7 +148,7 @@ async def update_toolkit_by_id( ) if toolkit: - return ToolResponse(**toolkit) + return toolkit else: raise HTTPException( status_code=status.HTTP_400_BAD_REQUEST, diff --git a/backend/constants.py b/backend/constants.py index 0740fa49d..f1eed43d3 100644 --- a/backend/constants.py +++ b/backend/constants.py @@ -32,6 +32,7 @@ class ERROR_MESSAGES(str, Enum): COMMAND_TAKEN = "Uh-oh! This command is already registered. Please choose another command string." FILE_EXISTS = "Uh-oh! This file is already registered. Please choose another file." + ID_TAKEN = "Uh-oh! This id is already registered. Please choose another id string." MODEL_ID_TAKEN = "Uh-oh! This model id is already registered. Please choose another model id string." NAME_TAG_TAKEN = "Uh-oh! This name tag is already registered. Please choose another name tag string." diff --git a/src/lib/components/workspace/Tools.svelte b/src/lib/components/workspace/Tools.svelte index ec76f1933..b7a5461e6 100644 --- a/src/lib/components/workspace/Tools.svelte +++ b/src/lib/components/workspace/Tools.svelte @@ -8,6 +8,7 @@ import { createNewPrompt, deletePromptByCommand, getPrompts } from '$lib/apis/prompts'; import { goto } from '$app/navigation'; + import { deleteToolById, getTools } from '$lib/apis/tools'; const i18n = getContext('i18n'); @@ -78,7 +79,12 @@