diff --git a/src/backend/langflow/__main__.py b/src/backend/langflow/__main__.py index c63b371ed..c17d39d91 100644 --- a/src/backend/langflow/__main__.py +++ b/src/backend/langflow/__main__.py @@ -3,7 +3,7 @@ import time import httpx from langflow.services.database.utils import session_getter from langflow.services.manager import initialize_services, initialize_settings_service -from langflow.services.utils import get_db_service, get_settings_service +from langflow.services.getters import get_db_service, get_settings_service from multiprocess import Process, cpu_count # type: ignore import platform diff --git a/src/backend/langflow/api/v1/endpoints.py b/src/backend/langflow/api/v1/endpoints.py index 4d034a59f..ade2f19e7 100644 --- a/src/backend/langflow/api/v1/endpoints.py +++ b/src/backend/langflow/api/v1/endpoints.py @@ -26,7 +26,7 @@ from langflow.interface.types import ( build_langchain_template_custom_component, ) -from langflow.services.utils import get_session +from langflow.services.getters import get_session try: from langflow.worker import process_graph_cached_task diff --git a/src/backend/langflow/api/v1/flows.py b/src/backend/langflow/api/v1/flows.py index be49ad836..9953db0db 100644 --- a/src/backend/langflow/api/v1/flows.py +++ b/src/backend/langflow/api/v1/flows.py @@ -12,8 +12,8 @@ from langflow.services.database.models.flow import ( FlowUpdate, ) from langflow.services.database.models.user.user import User -from langflow.services.utils import get_session -from langflow.services.utils import get_settings_service +from langflow.services.getters import get_session +from langflow.services.getters import get_settings_service import orjson from sqlmodel import Session from fastapi import APIRouter, Depends, HTTPException diff --git a/src/backend/langflow/api/v1/login.py b/src/backend/langflow/api/v1/login.py index 969cf096e..d45302c2e 100644 --- a/src/backend/langflow/api/v1/login.py +++ b/src/backend/langflow/api/v1/login.py @@ -12,7 +12,7 @@ from langflow.services.auth.utils import ( get_current_active_user, ) -from langflow.services.utils import get_settings_service +from langflow.services.getters import get_settings_service router = APIRouter(tags=["Login"]) diff --git a/src/backend/langflow/interface/agents/base.py b/src/backend/langflow/interface/agents/base.py index 16df6d98f..696f5afd0 100644 --- a/src/backend/langflow/interface/agents/base.py +++ b/src/backend/langflow/interface/agents/base.py @@ -5,7 +5,7 @@ from langchain.agents import types from langflow.custom.customs import get_custom_nodes from langflow.interface.agents.custom import CUSTOM_AGENTS from langflow.interface.base import LangChainTypeCreator -from langflow.services.utils import get_settings_service +from langflow.services.getters import get_settings_service from langflow.template.frontend_node.agents import AgentFrontendNode from loguru import logger diff --git a/src/backend/langflow/interface/base.py b/src/backend/langflow/interface/base.py index f622cf478..13dd05619 100644 --- a/src/backend/langflow/interface/base.py +++ b/src/backend/langflow/interface/base.py @@ -2,7 +2,7 @@ from abc import ABC, abstractmethod from typing import Any, Dict, List, Optional, Type, Union from langchain.chains.base import Chain from langchain.agents import AgentExecutor -from langflow.services.utils import get_settings_service +from langflow.services.getters import get_settings_service from pydantic import BaseModel from langflow.template.field.base import TemplateField diff --git a/src/backend/langflow/interface/chains/base.py b/src/backend/langflow/interface/chains/base.py index c18ff34ab..b2d07b7e4 100644 --- a/src/backend/langflow/interface/chains/base.py +++ b/src/backend/langflow/interface/chains/base.py @@ -3,7 +3,7 @@ from typing import Any, Dict, List, Optional, Type from langflow.custom.customs import get_custom_nodes from langflow.interface.base import LangChainTypeCreator from langflow.interface.importing.utils import import_class -from langflow.services.utils import get_settings_service +from langflow.services.getters import get_settings_service from langflow.template.frontend_node.chains import ChainFrontendNode from loguru import logger diff --git a/src/backend/langflow/interface/custom/custom_component.py b/src/backend/langflow/interface/custom/custom_component.py index ef6761081..49ac81ab1 100644 --- a/src/backend/langflow/interface/custom/custom_component.py +++ b/src/backend/langflow/interface/custom/custom_component.py @@ -4,7 +4,7 @@ from fastapi import HTTPException from langflow.interface.custom.constants import CUSTOM_COMPONENT_SUPPORTED_TYPES from langflow.interface.custom.component import Component from langflow.interface.custom.directory_reader import DirectoryReader -from langflow.services.utils import get_db_service +from langflow.services.getters import get_db_service from langflow.interface.custom.utils import extract_inner_type from langflow.utils import validate diff --git a/src/backend/langflow/interface/document_loaders/base.py b/src/backend/langflow/interface/document_loaders/base.py index 84c84ee55..e2c379b67 100644 --- a/src/backend/langflow/interface/document_loaders/base.py +++ b/src/backend/langflow/interface/document_loaders/base.py @@ -1,7 +1,7 @@ from typing import Dict, List, Optional, Type from langflow.interface.base import LangChainTypeCreator -from langflow.services.utils import get_settings_service +from langflow.services.getters import get_settings_service from langflow.template.frontend_node.documentloaders import DocumentLoaderFrontNode from langflow.interface.custom_lists import documentloaders_type_to_cls_dict diff --git a/src/backend/langflow/interface/embeddings/base.py b/src/backend/langflow/interface/embeddings/base.py index 72d9a4cdb..d280cf1c1 100644 --- a/src/backend/langflow/interface/embeddings/base.py +++ b/src/backend/langflow/interface/embeddings/base.py @@ -2,7 +2,7 @@ from typing import Dict, List, Optional, Type from langflow.interface.base import LangChainTypeCreator from langflow.interface.custom_lists import embedding_type_to_cls_dict -from langflow.services.utils import get_settings_service +from langflow.services.getters import get_settings_service from langflow.template.frontend_node.base import FrontendNode from langflow.template.frontend_node.embeddings import EmbeddingFrontendNode diff --git a/src/backend/langflow/interface/listing.py b/src/backend/langflow/interface/listing.py index 2851e4ea8..aa72e568e 100644 --- a/src/backend/langflow/interface/listing.py +++ b/src/backend/langflow/interface/listing.py @@ -1,4 +1,4 @@ -from langflow.services.utils import get_settings_service +from langflow.services.getters import get_settings_service from langflow.utils.lazy_load import LazyLoadDictBase diff --git a/src/backend/langflow/interface/llms/base.py b/src/backend/langflow/interface/llms/base.py index 74ec78af6..ffb7fa2f2 100644 --- a/src/backend/langflow/interface/llms/base.py +++ b/src/backend/langflow/interface/llms/base.py @@ -2,7 +2,7 @@ from typing import Dict, List, Optional, Type from langflow.interface.base import LangChainTypeCreator from langflow.interface.custom_lists import llm_type_to_cls_dict -from langflow.services.utils import get_settings_service +from langflow.services.getters import get_settings_service from langflow.template.frontend_node.llms import LLMFrontendNode from loguru import logger diff --git a/src/backend/langflow/interface/memories/base.py b/src/backend/langflow/interface/memories/base.py index fa3576305..3f3658304 100644 --- a/src/backend/langflow/interface/memories/base.py +++ b/src/backend/langflow/interface/memories/base.py @@ -2,7 +2,7 @@ from typing import Dict, List, Optional, Type from langflow.interface.base import LangChainTypeCreator from langflow.interface.custom_lists import memory_type_to_cls_dict -from langflow.services.utils import get_settings_service +from langflow.services.getters import get_settings_service from langflow.template.frontend_node.base import FrontendNode from langflow.template.frontend_node.memories import MemoryFrontendNode diff --git a/src/backend/langflow/interface/output_parsers/base.py b/src/backend/langflow/interface/output_parsers/base.py index 93d4eeeda..06dfdf4eb 100644 --- a/src/backend/langflow/interface/output_parsers/base.py +++ b/src/backend/langflow/interface/output_parsers/base.py @@ -4,7 +4,7 @@ from langchain import output_parsers from langflow.interface.base import LangChainTypeCreator from langflow.interface.importing.utils import import_class -from langflow.services.utils import get_settings_service +from langflow.services.getters import get_settings_service from langflow.template.frontend_node.output_parsers import OutputParserFrontendNode from loguru import logger diff --git a/src/backend/langflow/interface/prompts/base.py b/src/backend/langflow/interface/prompts/base.py index 01ac40ab6..29d3e8ba8 100644 --- a/src/backend/langflow/interface/prompts/base.py +++ b/src/backend/langflow/interface/prompts/base.py @@ -5,7 +5,7 @@ from langchain import prompts from langflow.custom.customs import get_custom_nodes from langflow.interface.base import LangChainTypeCreator from langflow.interface.importing.utils import import_class -from langflow.services.utils import get_settings_service +from langflow.services.getters import get_settings_service from langflow.template.frontend_node.prompts import PromptFrontendNode from loguru import logger diff --git a/src/backend/langflow/interface/retrievers/base.py b/src/backend/langflow/interface/retrievers/base.py index 5562cf264..4ee40e659 100644 --- a/src/backend/langflow/interface/retrievers/base.py +++ b/src/backend/langflow/interface/retrievers/base.py @@ -4,7 +4,7 @@ from langchain import retrievers from langflow.interface.base import LangChainTypeCreator from langflow.interface.importing.utils import import_class -from langflow.services.utils import get_settings_service +from langflow.services.getters import get_settings_service from langflow.template.frontend_node.retrievers import RetrieverFrontendNode from loguru import logger diff --git a/src/backend/langflow/interface/text_splitters/base.py b/src/backend/langflow/interface/text_splitters/base.py index abf3640c8..4f337817f 100644 --- a/src/backend/langflow/interface/text_splitters/base.py +++ b/src/backend/langflow/interface/text_splitters/base.py @@ -1,7 +1,7 @@ from typing import Dict, List, Optional, Type from langflow.interface.base import LangChainTypeCreator -from langflow.services.utils import get_settings_service +from langflow.services.getters import get_settings_service from langflow.template.frontend_node.textsplitters import TextSplittersFrontendNode from langflow.interface.custom_lists import textsplitter_type_to_cls_dict diff --git a/src/backend/langflow/interface/toolkits/base.py b/src/backend/langflow/interface/toolkits/base.py index d358fcde8..73ca4852f 100644 --- a/src/backend/langflow/interface/toolkits/base.py +++ b/src/backend/langflow/interface/toolkits/base.py @@ -4,7 +4,7 @@ from langchain.agents import agent_toolkits from langflow.interface.base import LangChainTypeCreator from langflow.interface.importing.utils import import_class, import_module -from langflow.services.utils import get_settings_service +from langflow.services.getters import get_settings_service from loguru import logger from langflow.utils.util import build_template_from_class diff --git a/src/backend/langflow/interface/tools/base.py b/src/backend/langflow/interface/tools/base.py index cdc161d8f..a99025ff7 100644 --- a/src/backend/langflow/interface/tools/base.py +++ b/src/backend/langflow/interface/tools/base.py @@ -15,7 +15,7 @@ from langflow.interface.tools.constants import ( OTHER_TOOLS, ) from langflow.interface.tools.util import get_tool_params -from langflow.services.utils import get_settings_service +from langflow.services.getters import get_settings_service from langflow.template.field.base import TemplateField from langflow.template.template.base import Template diff --git a/src/backend/langflow/interface/utilities/base.py b/src/backend/langflow/interface/utilities/base.py index b1e7c461b..665143da2 100644 --- a/src/backend/langflow/interface/utilities/base.py +++ b/src/backend/langflow/interface/utilities/base.py @@ -5,7 +5,7 @@ from langchain import SQLDatabase, utilities from langflow.custom.customs import get_custom_nodes from langflow.interface.base import LangChainTypeCreator from langflow.interface.importing.utils import import_class -from langflow.services.utils import get_settings_service +from langflow.services.getters import get_settings_service from langflow.template.frontend_node.utilities import UtilitiesFrontendNode from loguru import logger diff --git a/src/backend/langflow/interface/utils.py b/src/backend/langflow/interface/utils.py index 388697b2a..7b78e75c5 100644 --- a/src/backend/langflow/interface/utils.py +++ b/src/backend/langflow/interface/utils.py @@ -10,7 +10,7 @@ from langchain.base_language import BaseLanguageModel from PIL.Image import Image from loguru import logger from langflow.services.chat.config import ChatConfig -from langflow.services.utils import get_settings_service +from langflow.services.getters import get_settings_service def load_file_into_dict(file_path: str) -> dict: diff --git a/src/backend/langflow/interface/vector_store/base.py b/src/backend/langflow/interface/vector_store/base.py index 7c0567362..786031a6b 100644 --- a/src/backend/langflow/interface/vector_store/base.py +++ b/src/backend/langflow/interface/vector_store/base.py @@ -4,7 +4,7 @@ from langchain import vectorstores from langflow.interface.base import LangChainTypeCreator from langflow.interface.importing.utils import import_class -from langflow.services.utils import get_settings_service +from langflow.services.getters import get_settings_service from langflow.template.frontend_node.vectorstores import VectorStoreFrontendNode from loguru import logger diff --git a/src/backend/langflow/processing/process.py b/src/backend/langflow/processing/process.py index fa35bd348..4c96e2fde 100644 --- a/src/backend/langflow/processing/process.py +++ b/src/backend/langflow/processing/process.py @@ -6,7 +6,7 @@ from langflow.interface.run import ( get_memory_key, update_memory_keys, ) -from langflow.services.utils import get_session_service +from langflow.services.getters import get_session_service from loguru import logger from langflow.graph import Graph from langchain.chains.base import Chain diff --git a/src/backend/langflow/services/auth/utils.py b/src/backend/langflow/services/auth/utils.py index a8c7d7b4f..b72514798 100644 --- a/src/backend/langflow/services/auth/utils.py +++ b/src/backend/langflow/services/auth/utils.py @@ -12,7 +12,7 @@ from langflow.services.database.models.user.crud import ( get_user_by_username, update_user_last_login_at, ) -from langflow.services.utils import get_session, get_settings_service +from langflow.services.getters import get_session, get_settings_service from sqlmodel import Session oauth2_login = OAuth2PasswordBearer(tokenUrl="api/v1/login") diff --git a/src/backend/langflow/services/chat/manager.py b/src/backend/langflow/services/chat/manager.py index 029c26ecd..3fe937ce8 100644 --- a/src/backend/langflow/services/chat/manager.py +++ b/src/backend/langflow/services/chat/manager.py @@ -52,7 +52,7 @@ class ChatService(Service): self.chat_history = ChatHistory() self.chat_cache = cache_service self.chat_cache.attach(self.update) - self.cache_service = service_manager.get(ServiceType.CACHE_MANAGER) + self.cache_service = service_manager.get(ServiceType.CACHE_SERVICE) def on_chat_history_update(self): """Send the last chat message to the client.""" diff --git a/src/backend/langflow/services/database/manager.py b/src/backend/langflow/services/database/manager.py index 46ced4524..ca7f34d10 100644 --- a/src/backend/langflow/services/database/manager.py +++ b/src/backend/langflow/services/database/manager.py @@ -3,7 +3,7 @@ from typing import TYPE_CHECKING from langflow.services.base import Service from langflow.services.database.models.user.crud import get_user_by_username from langflow.services.database.utils import Result, TableResults -from langflow.services.utils import get_settings_service +from langflow.services.getters import get_settings_service from sqlalchemy import inspect import sqlalchemy as sa from sqlmodel import SQLModel, Session, create_engine diff --git a/src/backend/langflow/services/database/utils.py b/src/backend/langflow/services/database/utils.py index 5ac62ee93..ce4990fa1 100644 --- a/src/backend/langflow/services/database/utils.py +++ b/src/backend/langflow/services/database/utils.py @@ -13,7 +13,7 @@ def initialize_database(): logger.debug("Initializing database") from langflow.services import service_manager, ServiceType - database_service = service_manager.get(ServiceType.DATABASE_MANAGER) + database_service = service_manager.get(ServiceType.DATABASE_SERVICE) try: database_service.check_schema_health() except Exception as exc: diff --git a/src/backend/langflow/services/getters.py b/src/backend/langflow/services/getters.py index 8b32aef02..43b344d40 100644 --- a/src/backend/langflow/services/getters.py +++ b/src/backend/langflow/services/getters.py @@ -3,24 +3,63 @@ from typing import TYPE_CHECKING, Generator if TYPE_CHECKING: - from langflow.services.database.manager import DatabaseManager - from langflow.services.settings.manager import SettingsManager - from langflow.services.chat.manager import ChatManager + from langflow.services.database.manager import DatabaseService + from langflow.services.settings.manager import SettingsService + from langflow.services.cache.manager import BaseCacheService + from langflow.services.session.manager import SessionService + from langflow.services.task.manager import TaskService + from langflow.services.chat.manager import ChatService from sqlmodel import Session -def get_settings_manager() -> "SettingsManager": - return service_manager.get(ServiceType.SETTINGS_MANAGER) +def get_settings_service() -> "SettingsService": + try: + return service_manager.get(ServiceType.SETTINGS_MANAGER) + except ValueError: + # initialize settings service + from langflow.services.manager import initialize_settings_service + + initialize_settings_service() + return service_manager.get(ServiceType.SETTINGS_MANAGER) -def get_db_manager() -> "DatabaseManager": +def get_db_service() -> "DatabaseService": return service_manager.get(ServiceType.DATABASE_MANAGER) def get_session() -> Generator["Session", None, None]: - db_manager = service_manager.get(ServiceType.DATABASE_MANAGER) - yield from db_manager.get_session() + db_service = service_manager.get(ServiceType.DATABASE_MANAGER) + yield from db_service.get_session() -def get_chat_manager() -> "ChatManager": +def get_cache_service() -> "BaseCacheService": + return service_manager.get(ServiceType.CACHE_MANAGER) + + +def get_session_service() -> "SessionService": + return service_manager.get(ServiceType.SESSION_MANAGER) + + +def get_task_service() -> "TaskService": + return service_manager.get(ServiceType.TASK_MANAGER) + + +def get_chat_service() -> "ChatService": return service_manager.get(ServiceType.CHAT_MANAGER) + + +def get_settings_service() -> "SettingsService": + return service_manager.get(ServiceType.SETTINGS_SERVICE) + + +def get_db_service() -> "DatabaseService": + return service_manager.get(ServiceType.DATABASE_SERVICE) + + +def get_session() -> Generator["Session", None, None]: + db_service = service_manager.get(ServiceType.DATABASE_SERVICE) + yield from db_service.get_session() + + +def get_chat_service() -> "ChatService": + return service_manager.get(ServiceType.CHAT_SERVICE) diff --git a/src/backend/langflow/services/plugins/langfuse.py b/src/backend/langflow/services/plugins/langfuse.py index bc50ccc2c..29d59808b 100644 --- a/src/backend/langflow/services/plugins/langfuse.py +++ b/src/backend/langflow/services/plugins/langfuse.py @@ -1,4 +1,4 @@ -from langflow.services.utils import get_settings_service +from langflow.services.getters import get_settings_service from langflow.utils.logger import logger ### Temporary implementation diff --git a/src/backend/langflow/services/schema.py b/src/backend/langflow/services/schema.py index 8b2bb75c2..8b3b41fcb 100644 --- a/src/backend/langflow/services/schema.py +++ b/src/backend/langflow/services/schema.py @@ -7,10 +7,10 @@ class ServiceType(str, Enum): registered with the service manager. """ - AUTH_MANAGER = "auth_service" - CACHE_MANAGER = "cache_service" - SETTINGS_MANAGER = "settings_service" - DATABASE_MANAGER = "database_service" - CHAT_MANAGER = "chat_service" - SESSION_MANAGER = "session_service" - TASK_MANAGER = "task_service" + AUTH_SERVICE = "auth_service" + CACHE_SERVICE = "cache_service" + SETTINGS_SERVICE = "settings_service" + DATABASE_SERVICE = "database_service" + CHAT_SERVICE = "chat_service" + SESSION_SERVICE = "session_service" + TASK_SERVICE = "task_service" diff --git a/src/backend/langflow/worker.py b/src/backend/langflow/worker.py index 92f6f1f7c..7b5f67b7b 100644 --- a/src/backend/langflow/worker.py +++ b/src/backend/langflow/worker.py @@ -10,7 +10,7 @@ from langflow.processing.process import ( process_inputs, ) from langflow.services.manager import initialize_session_service -from langflow.services.utils import get_session_service +from langflow.services.getters import get_session_service if TYPE_CHECKING: from langflow.graph.vertex.base import Vertex diff --git a/tests/test_process.py b/tests/test_process.py index 775d17145..0588800dc 100644 --- a/tests/test_process.py +++ b/tests/test_process.py @@ -1,5 +1,5 @@ from langflow.processing.process import process_tweaks -from langflow.services.utils import get_session_service +from langflow.services.getters import get_session_service def test_no_tweaks():