diff --git a/src/backend/langflow/api/v1/endpoints.py b/src/backend/langflow/api/v1/endpoints.py index 928d6609c..221091b7f 100644 --- a/src/backend/langflow/api/v1/endpoints.py +++ b/src/backend/langflow/api/v1/endpoints.py @@ -59,6 +59,8 @@ def get_all(): logger.info(f"Loading {len(custom_component_dicts)} category(ies)") for custom_component_dict in custom_component_dicts: # custom_component_dict is a dict of dicts + if not custom_component_dict: + continue category = list(custom_component_dict.keys())[0] logger.info( f"Loading {len(custom_component_dict[category])} component(s) from category {category}" diff --git a/src/backend/langflow/api/v1/schemas.py b/src/backend/langflow/api/v1/schemas.py index 7df546684..d38c32d26 100644 --- a/src/backend/langflow/api/v1/schemas.py +++ b/src/backend/langflow/api/v1/schemas.py @@ -2,7 +2,7 @@ from enum import Enum from pathlib import Path from typing import Any, Dict, List, Optional, Union from langflow.services.database.models.flow import FlowCreate, FlowRead -from pydantic import BaseModel, Field +from pydantic import BaseModel, Field, field_validator import json diff --git a/src/backend/langflow/interface/tools/base.py b/src/backend/langflow/interface/tools/base.py index 449957bfa..82d334512 100644 --- a/src/backend/langflow/interface/tools/base.py +++ b/src/backend/langflow/interface/tools/base.py @@ -136,10 +136,15 @@ class ToolCreator(LangChainTypeCreator): tool_dict = build_template_from_class(tool_type, OTHER_TOOLS) fields = tool_dict["template"] + # _type is the only key in fields + # return None + if len(fields) == 1 and "_type" in fields: + return None + # Pop unnecessary fields and add name fields.pop("_type") # type: ignore - fields.pop("return_direct") # type: ignore - fields.pop("verbose") # type: ignore + fields.pop("return_direct", None) # type: ignore + fields.pop("verbose", None) # type: ignore tool_params = { "name": fields.pop("name")["value"], # type: ignore diff --git a/src/backend/langflow/services/database/models/flow.py b/src/backend/langflow/services/database/models/flow.py index 952d47bc2..bf263993e 100644 --- a/src/backend/langflow/services/database/models/flow.py +++ b/src/backend/langflow/services/database/models/flow.py @@ -4,13 +4,14 @@ from langflow.services.database.models.base import SQLModelSerializable from sqlmodel import Field, JSON, Column from uuid import UUID, uuid4 from typing import Dict, Optional +from pydantic import field_validator # if TYPE_CHECKING: class FlowBase(SQLModelSerializable): name: str = Field(index=True) - description: Optional[str] = Field(index=True) + description: Optional[str] = Field(index=True, default="") data: Optional[Dict] = Field(default=None) @field_validator("data") diff --git a/src/backend/langflow/services/settings/base.py b/src/backend/langflow/services/settings/base.py index 750b2c02a..5545af45d 100644 --- a/src/backend/langflow/services/settings/base.py +++ b/src/backend/langflow/services/settings/base.py @@ -8,7 +8,7 @@ from pathlib import Path import yaml from pydantic_settings import SettingsConfigDict, BaseSettings -from pydantic import field_validator +from pydantic import field_validator, validator from langflow.utils.logger import logger # BASE_COMPONENTS_PATH = str(Path(__file__).parent / "components") diff --git a/tests/conftest.py b/tests/conftest.py index e90d03d0a..182e59e89 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -108,7 +108,7 @@ def session_fixture(): yield session -@pytest.fixture(name="client") +@pytest.fixture(name="client", scope="function", autouse=True) def client_fixture(session: Session): def get_session_override(): return session