diff --git a/src/backend/langflow/api/v1/chat.py b/src/backend/langflow/api/v1/chat.py index f97c65aff..a7a50a39f 100644 --- a/src/backend/langflow/api/v1/chat.py +++ b/src/backend/langflow/api/v1/chat.py @@ -15,7 +15,6 @@ from langflow.graph.graph.base import Graph from langflow.services.auth.utils import get_current_active_user, get_current_user from loguru import logger from langflow.services.getters import get_chat_service, get_session, get_cache_service -from cachetools import LRUCache from sqlmodel import Session from langflow.services.chat.manager import ChatService from langflow.services.cache.manager import BaseCacheService diff --git a/src/backend/langflow/api/v1/endpoints.py b/src/backend/langflow/api/v1/endpoints.py index b08715254..b0fffebda 100644 --- a/src/backend/langflow/api/v1/endpoints.py +++ b/src/backend/langflow/api/v1/endpoints.py @@ -117,7 +117,7 @@ async def process_flow( if isinstance(result, dict) and "result" in result: task_result = result["result"] session_id = result["session_id"] - else: + elif hasattr(result, "result") and hasattr(result, "session_id"): task_result = result.result session_id = result.session_id diff --git a/src/backend/langflow/graph/vertex/base.py b/src/backend/langflow/graph/vertex/base.py index 5f5f8eaa7..3877e59b1 100644 --- a/src/backend/langflow/graph/vertex/base.py +++ b/src/backend/langflow/graph/vertex/base.py @@ -37,7 +37,7 @@ class Vertex: self.artifacts: Dict[str, Any] = {} self.task_id: Optional[str] = None self.is_task = is_task - self.params = params + self.params = params or {} def reset_params(self): for edge in self.edges: diff --git a/src/backend/langflow/graph/vertex/types.py b/src/backend/langflow/graph/vertex/types.py index a64324285..7609982a5 100644 --- a/src/backend/langflow/graph/vertex/types.py +++ b/src/backend/langflow/graph/vertex/types.py @@ -4,7 +4,6 @@ from typing import Any, Dict, List, Optional, Union from langflow.graph.vertex.base import Vertex from langflow.graph.utils import flatten_list from langflow.interface.utils import extract_input_variables_from_prompt -from zmq import has class AgentVertex(Vertex): @@ -127,8 +126,8 @@ class EmbeddingVertex(Vertex): class VectorStoreVertex(Vertex): def __init__(self, data: Dict, params=None): super().__init__(data, base_type="vectorstores") - if params: - self.params = params + + self.params = params or {} # VectorStores may contain databse connections # so we need to define the __reduce__ method and the __setstate__ method @@ -264,7 +263,7 @@ class PromptVertex(Vertex): self.params["input_variables"] = list( set(self.params["input_variables"]) ) - else: + elif isinstance(self.params, dict): self.params.pop("input_variables", None) self._build(user_id=user_id) diff --git a/src/backend/langflow/interface/run.py b/src/backend/langflow/interface/run.py index 531a3e247..63391204a 100644 --- a/src/backend/langflow/interface/run.py +++ b/src/backend/langflow/interface/run.py @@ -1,4 +1,4 @@ -from typing import Any, Dict, Tuple +from typing import Dict, Tuple from langflow.graph import Graph from loguru import logger diff --git a/src/backend/langflow/interface/tools/util.py b/src/backend/langflow/interface/tools/util.py index fc91387ed..8e4f582c1 100644 --- a/src/backend/langflow/interface/tools/util.py +++ b/src/backend/langflow/interface/tools/util.py @@ -4,7 +4,6 @@ import textwrap from typing import Dict, Union from langchain.agents.tools import Tool -from loguru import logger def get_func_tool_params(func, **kwargs) -> Union[Dict, None]: diff --git a/src/backend/langflow/services/auth/utils.py b/src/backend/langflow/services/auth/utils.py index b72514798..f88a1cd12 100644 --- a/src/backend/langflow/services/auth/utils.py +++ b/src/backend/langflow/services/auth/utils.py @@ -37,13 +37,13 @@ async def api_key_security( result: Optional[Union[ApiKey, User]] = None if settings_service.auth_settings.AUTO_LOGIN: # Get the first user - if not settings_manager.auth_settings.SUPERUSER: + if not settings_service.auth_settings.SUPERUSER: raise HTTPException( status_code=status.HTTP_400_BAD_REQUEST, detail="Missing first superuser credentials", ) - result = get_user_by_username(db, settings_manager.auth_settings.SUPERUSER) + result = get_user_by_username(db, settings_service.auth_settings.SUPERUSER) elif not query_param and not header_param: raise HTTPException( @@ -179,9 +179,9 @@ def create_super_user( def create_user_longterm_token(db: Session = Depends(get_session)) -> dict: - settings_manager = get_settings_service() - username = settings_manager.auth_settings.SUPERUSER - password = settings_manager.auth_settings.SUPERUSER_PASSWORD + settings_service = get_settings_service() + username = settings_service.auth_settings.SUPERUSER + password = settings_service.auth_settings.SUPERUSER_PASSWORD if not username or not password: raise HTTPException( status_code=status.HTTP_400_BAD_REQUEST, diff --git a/src/backend/langflow/services/manager.py b/src/backend/langflow/services/manager.py index 31aeeda60..e74146a20 100644 --- a/src/backend/langflow/services/manager.py +++ b/src/backend/langflow/services/manager.py @@ -148,13 +148,6 @@ def reinitialize_services(): """ Reinitialize all the services needed. """ - from langflow.services.database import factory as database_factory - from langflow.services.cache import factory as cache_factory - from langflow.services.chat import factory as chat_factory - from langflow.services.settings import factory as settings_factory - from langflow.services.session import factory as session_service_factory - from langflow.services.auth import factory as auth_factory - from langflow.services.task import factory as task_factory service_manager.update(ServiceType.SETTINGS_SERVICE) service_manager.update(ServiceType.DATABASE_SERVICE) diff --git a/src/backend/langflow/services/session/manager.py b/src/backend/langflow/services/session/manager.py index e0ddeb0c2..6bdebf6b3 100644 --- a/src/backend/langflow/services/session/manager.py +++ b/src/backend/langflow/services/session/manager.py @@ -2,7 +2,6 @@ from typing import TYPE_CHECKING from langflow.interface.run import build_sorted_vertices from langflow.services.base import Service from langflow.services.cache.utils import compute_dict_hash -from loguru import logger from langflow.services.session.utils import session_id_generator if TYPE_CHECKING: diff --git a/src/backend/langflow/services/task/backends/anyio.py b/src/backend/langflow/services/task/backends/anyio.py index 6c833443a..ca91eca19 100644 --- a/src/backend/langflow/services/task/backends/anyio.py +++ b/src/backend/langflow/services/task/backends/anyio.py @@ -1,4 +1,4 @@ -from typing import Any, Callable, Tuple +from typing import Any, Callable, Optional, Tuple import anyio from langflow.services.task.backends.base import TaskBackend from loguru import logger @@ -39,7 +39,7 @@ class AnyIOBackend(TaskBackend): async def launch_task( self, task_func: Callable[..., Any], *args: Any, **kwargs: Any - ) -> Tuple[str, AnyIOTaskResult]: + ) -> Tuple[Optional[str], Optional[AnyIOTaskResult]]: """ Launch a new task in an asynchronous manner. diff --git a/src/backend/langflow/services/task/backends/celery.py b/src/backend/langflow/services/task/backends/celery.py index f4f81b9cc..5b0a035ef 100644 --- a/src/backend/langflow/services/task/backends/celery.py +++ b/src/backend/langflow/services/task/backends/celery.py @@ -1,5 +1,5 @@ from typing import Any, Callable -from celery.result import AsyncResult +from celery.result import AsyncResult # type: ignore from langflow.services.task.backends.base import TaskBackend from langflow.worker import celery_app @@ -10,9 +10,9 @@ class CeleryBackend(TaskBackend): def launch_task( self, task_func: Callable[..., Any], *args: Any, **kwargs: Any - ) -> str: + ) -> tuple[str, AsyncResult]: # I need to type the delay method to make it easier - from celery import Task + from celery import Task # type: ignore if not hasattr(task_func, "delay"): raise ValueError(f"Task function {task_func} does not have a delay method") diff --git a/src/backend/langflow/services/utils.py b/src/backend/langflow/services/utils.py index 940ebc068..02d9816f5 100644 --- a/src/backend/langflow/services/utils.py +++ b/src/backend/langflow/services/utils.py @@ -1,4 +1,3 @@ -from langflow.services.auth import service from langflow.services.auth.utils import create_super_user from langflow.services.database.utils import initialize_database from langflow.services.manager import service_manager @@ -147,7 +146,7 @@ def initialize_services(): # Test cache connection service_manager.get(ServiceType.CACHE_SERVICE) # Test database connection - db_service = service_manager.get(ServiceType.DATABASE_SERVICE) + service_manager.get(ServiceType.DATABASE_SERVICE) # Setup the superuser initialize_database() session = next(get_session()) diff --git a/tests/conftest.py b/tests/conftest.py index 90622aeee..d6e25addf 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -10,7 +10,7 @@ from langflow.services.database.models.flow.flow import Flow, FlowCreate from langflow.services.database.models.user.user import User, UserCreate import orjson from langflow.services.database.utils import session_getter -from langflow.services.getters import get_db_service, get_session +from langflow.services.getters import get_db_service import pytest from fastapi.testclient import TestClient from httpx import AsyncClient @@ -88,10 +88,7 @@ def setup_env(monkeypatch): @pytest.fixture(name="distributed_client") def distributed_client_fixture(session: Session, monkeypatch, distributed_env): # Here we load the .env from ../deploy/.env - from dotenv import load_dotenv - from langflow.services.task import manager from langflow.core import celery_app - from langflow.services.manager import reinitialize_services, initialize_services db_dir = tempfile.mkdtemp() db_path = Path(db_dir) / "test.db" diff --git a/tests/test_graph.py b/tests/test_graph.py index f88d89a1b..fdb249eda 100644 --- a/tests/test_graph.py +++ b/tests/test_graph.py @@ -3,7 +3,6 @@ import os from pathlib import Path import pickle from typing import Type, Union -from langflow import graph from langflow.graph.edge.base import Edge from langflow.graph.vertex.base import Vertex from langchain.agents import AgentExecutor @@ -12,11 +11,9 @@ from langchain.chains.base import Chain from langchain.llms.fake import FakeListLLM from langflow.graph import Graph from langflow.graph.vertex.types import ( - AgentVertex, FileToolVertex, LLMVertex, ToolkitVertex, - VectorStoreVertex, ) from langflow.processing.process import get_result_and_thought from langflow.utils.payload import get_root_node diff --git a/tests/test_setup_superuser.py b/tests/test_setup_superuser.py index af048140a..6cf4b3a3a 100644 --- a/tests/test_setup_superuser.py +++ b/tests/test_setup_superuser.py @@ -1,4 +1,3 @@ -from unittest import mock from unittest.mock import patch, Mock, MagicMock, call from langflow.services.database.models.user.user import User from langflow.services.settings.constants import ( @@ -6,7 +5,6 @@ from langflow.services.settings.constants import ( DEFAULT_SUPERUSER_PASSWORD, ) from langflow.services.utils import ( - initialize_settings_service, setup_superuser, teardown_superuser, )