chore: remove unused plugin-related code (#4826)

chore: refactor: remove unused plugin-related code
This commit is contained in:
Ítalo Johnny 2024-11-25 21:43:40 -03:00 committed by GitHub
commit 3c83e153ec
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
8 changed files with 0 additions and 234 deletions

View file

@ -1,44 +0,0 @@
from __future__ import annotations
from typing import TYPE_CHECKING
from loguru import logger
from langflow.services.deps import get_plugins_service
if TYPE_CHECKING:
from langchain_core.callbacks import BaseCallbackHandler
from langfuse.callback import CallbackHandler
def setup_callbacks(trace_id):
"""Setup callbacks for langchain object."""
callbacks = []
plugin_service = get_plugins_service()
plugin_callbacks = plugin_service.get_callbacks(_id=trace_id)
if plugin_callbacks:
callbacks.extend(plugin_callbacks)
return callbacks
def get_langfuse_callback(trace_id):
from langflow.services.deps import get_plugins_service
logger.debug("Initializing langfuse callback")
if langfuse := get_plugins_service().get("langfuse"):
logger.debug("Langfuse credentials found")
try:
trace = langfuse.trace(name="langflow-" + trace_id, id=trace_id)
return trace.getNewHandler()
except Exception: # noqa: BLE001
logger.exception("Error initializing langfuse callback")
return None
def flush_langfuse_callback_if_present(callbacks: list[BaseCallbackHandler | CallbackHandler]) -> None:
"""If langfuse callback is present, run callback.langfuse.flush()."""
for callback in callbacks:
if hasattr(callback, "langfuse") and hasattr(callback.langfuse, "flush"):
callback.langfuse.flush()
break

View file

@ -16,7 +16,6 @@ if TYPE_CHECKING:
from langflow.services.cache.service import AsyncBaseCacheService, CacheService
from langflow.services.chat.service import ChatService
from langflow.services.database.service import DatabaseService
from langflow.services.plugins.service import PluginService
from langflow.services.session.service import SessionService
from langflow.services.settings.service import SettingsService
from langflow.services.socket.service import SocketIOService
@ -115,15 +114,6 @@ def get_variable_service() -> VariableService:
return get_service(ServiceType.VARIABLE_SERVICE, VariableServiceFactory())
def get_plugins_service() -> PluginService:
"""Get the PluginService instance from the service manager.
Returns:
PluginService: The PluginService instance.
"""
return get_service(ServiceType.PLUGIN_SERVICE) # type: ignore[attr-defined]
def get_settings_service() -> SettingsService:
"""Retrieves the SettingsService instance.

View file

@ -1,17 +0,0 @@
from typing import Any
class BasePlugin:
def initialize(self) -> None:
pass
def teardown(self) -> None:
pass
def get(self) -> Any:
pass
class CallbackPlugin(BasePlugin):
def get_callback(self, _id=None):
pass

View file

@ -1,12 +0,0 @@
from __future__ import annotations
from langflow.services.factory import ServiceFactory
from langflow.services.plugins.service import PluginService
class PluginServiceFactory(ServiceFactory):
def __init__(self) -> None:
super().__init__(PluginService)
def create(self):
return PluginService()

View file

@ -1,86 +0,0 @@
from __future__ import annotations
from typing import TYPE_CHECKING
from loguru import logger
from langflow.services.deps import get_settings_service
from langflow.services.plugins.base import CallbackPlugin
if TYPE_CHECKING:
from langfuse import Langfuse
class LangfuseInstance:
_instance: Langfuse | None = None
@classmethod
def get(cls):
logger.debug("Getting Langfuse instance")
if cls._instance is None:
cls.create()
return cls._instance
@classmethod
def create(cls) -> None:
try:
logger.debug("Creating Langfuse instance")
from langfuse import Langfuse
settings_manager = get_settings_service()
if settings_manager.settings.langfuse_public_key and settings_manager.settings.langfuse_secret_key:
logger.debug("Langfuse credentials found")
cls._instance = Langfuse(
public_key=settings_manager.settings.langfuse_public_key,
secret_key=settings_manager.settings.langfuse_secret_key,
host=settings_manager.settings.langfuse_host,
)
else:
logger.debug("No Langfuse credentials found")
cls._instance = None
except ImportError:
logger.debug("Langfuse not installed")
cls._instance = None
@classmethod
def update(cls) -> None:
logger.debug("Updating Langfuse instance")
cls._instance = None
cls.create()
@classmethod
def teardown(cls) -> None:
logger.debug("Tearing down Langfuse instance")
if cls._instance is not None:
cls._instance.flush()
cls._instance = None
class LangfusePlugin(CallbackPlugin):
def initialize(self) -> None:
LangfuseInstance.create()
def teardown(self) -> None:
LangfuseInstance.teardown()
def get(self):
return LangfuseInstance.get()
def get_callback(self, _id: str | None = None):
if _id is None:
_id = "default"
logger.debug("Initializing langfuse callback")
try:
langfuse_instance = self.get()
if langfuse_instance is not None and hasattr(langfuse_instance, "trace"):
trace = langfuse_instance.trace(name="langflow-" + _id, id=_id)
if trace:
return trace.getNewHandler()
except Exception: # noqa: BLE001
logger.exception("Error initializing langfuse callback")
return None

View file

@ -1,64 +0,0 @@
from __future__ import annotations
import importlib
import inspect
from pathlib import Path
from loguru import logger
from langflow.services.base import Service
from langflow.services.plugins.base import BasePlugin, CallbackPlugin
class PluginService(Service):
name = "plugin_service"
def __init__(self) -> None:
self.plugins: dict[str, BasePlugin] = {}
self.plugin_dir = Path(__file__).parent
self.plugins_base_module = "langflow.services.plugins"
self.load_plugins()
def load_plugins(self) -> None:
base_files = ["base.py", "service.py", "factory.py", "__init__.py"]
for module in self.plugin_dir.iterdir():
if module.suffix == ".py" and module.name not in base_files:
plugin_name = module.stem
module_path = f"{self.plugins_base_module}.{plugin_name}"
try:
mod = importlib.import_module(module_path)
for attr_name in dir(mod):
attr = getattr(mod, attr_name)
if (
inspect.isclass(attr)
and issubclass(attr, BasePlugin)
and attr not in {CallbackPlugin, BasePlugin}
):
self.register_plugin(plugin_name, attr())
except Exception: # noqa: BLE001
logger.exception(f"Error loading plugin {plugin_name}")
def register_plugin(self, plugin_name, plugin_instance) -> None:
self.plugins[plugin_name] = plugin_instance
plugin_instance.initialize()
def get_plugin(self, plugin_name) -> BasePlugin | None:
return self.plugins.get(plugin_name)
def get(self, plugin_name):
if plugin := self.get_plugin(plugin_name):
return plugin.get()
return None
async def teardown(self) -> None:
for plugin in self.plugins.values():
plugin.teardown()
def get_callbacks(self, _id=None):
callbacks = []
for plugin in self.plugins.values():
if isinstance(plugin, CallbackPlugin):
callback = plugin.get_callback(_id=_id)
if callback:
callbacks.append(callback)
return callbacks

View file

@ -12,7 +12,6 @@ class ServiceType(str, Enum):
CHAT_SERVICE = "chat_service"
SESSION_SERVICE = "session_service"
TASK_SERVICE = "task_service"
PLUGINS_SERVICE = "plugins_service"
STORE_SERVICE = "store_service"
VARIABLE_SERVICE = "variable_service"
STORAGE_SERVICE = "storage_service"