add varaible service base

This commit is contained in:
ming luo 2024-06-19 15:42:11 -04:00 committed by Gabriel Luiz Freitas Almeida
commit 59f96c2ea3
4 changed files with 173 additions and 4 deletions

View file

@ -73,6 +73,10 @@ class Settings(BaseSettings):
max_overflow: int = 20
"""The number of connections to allow that can be opened beyond the pool size. If not provided, the default is 10."""
cache_type: str = "async"
"""The store can be 'db' or 'kubernetes'."""
variable_store: str = "db"
remove_api_keys: bool = False
components_path: List[str] = []
langchain_cache: str = "InMemoryCache"

View file

@ -0,0 +1,109 @@
import abc
from typing import Optional, Union
from uuid import UUID
from fastapi import Depends
from sqlmodel import Session
from langflow.services.base import Service
from langflow.services.database.models.variable.model import Variable
from langflow.services.deps import get_session
class VariableService(Service):
"""
Abstract base class for a variable service.
"""
name = "variable_service"
@abc.abstractmethod
def initialize_user_variables(self, user_id: Union[UUID, str], session: Session) -> None:
"""
Initialize user variables.
Args:
user_id: The user ID.
session: The database session.
"""
@abc.abstractmethod
def get_variable(self, user_id: Union[UUID, str], name: str, field: str, session: Session) -> str:
"""
Get a variable value.
Args:
user_id: The user ID.
name: The name of the variable.
field: The field of the variable.
session: The database session.
Returns:
The value of the variable.
"""
@abc.abstractmethod
def list_variables(self, user_id: Union[UUID, str], session: Session) -> list[Optional[str]]:
"""
List all variables.
Args:
user_id: The user ID.
session: The database session.
Returns:
A list of variable names.
"""
@abc.abstractmethod
def update_variable(self, user_id: Union[UUID, str], name: str, value: str, session: Session) -> Variable:
"""
Update a variable.
Args:
user_id: The user ID.
name: The name of the variable.
value: The value of the variable.
session: The database session.
Returns:
The updated variable.
"""
@abc.abstractmethod
def delete_variable(self, user_id: Union[UUID, str], name: str, session: Session) -> Variable:
"""
Delete a variable.
Args:
user_id: The user ID.
name: The name of the variable.
session: The database session.
Returns:
The deleted variable.
"""
@abc.abstractmethod
def create_variable(
self,
user_id: Union[UUID, str],
name: str,
value: str,
default_fields: list[str] = [],
_type: str = "Generic",
session: Session = Depends(get_session),
) -> Variable:
"""
Create a variable.
Args:
user_id: The user ID.
name: The name of the variable.
value: The value of the variable.
default_fields: The default fields of the variable.
_type: The type of the variable.
session: The database session.
Returns:
The created variable.
"""

View file

@ -1,7 +1,7 @@
from typing import TYPE_CHECKING
from langflow.services.factory import ServiceFactory
from langflow.services.variable.service import VariableService
from langflow.services.variable.service import DatabaseVariableService, KubernetesSecretService
if TYPE_CHECKING:
from langflow.services.settings.service import SettingsService
@ -12,4 +12,10 @@ class VariableServiceFactory(ServiceFactory):
super().__init__(VariableService)
def create(self, settings_service: "SettingsService"):
return VariableService(settings_service)
# here you would have logic to create and configure a VariableService
# based on the settings_service
if settings_service.settings.variable_store == "kubernetes":
return KubernetesSecretService(settings_service)
else:
return DatabaseVariableService(settings_service)

View file

@ -8,6 +8,7 @@ from sqlmodel import Session, select
from langflow.services.auth import utils as auth_utils
from langflow.services.base import Service
from langflow.services.variable.base import VariableService
from langflow.services.database.models.variable.model import Variable, VariableCreate
from langflow.services.deps import get_session
@ -15,8 +16,7 @@ if TYPE_CHECKING:
from langflow.services.settings.service import SettingsService
class VariableService(Service):
name = "variable_service"
class DatabaseVariableService(VariableService, Service):
def __init__(self, settings_service: "SettingsService"):
self.settings_service = settings_service
@ -127,3 +127,53 @@ class VariableService(Service):
session.commit()
session.refresh(variable)
return variable
class KubernetesSecretService(VariableService, Service):
def __init__(self, settings_service: "SettingsService"):
self.settings_service = settings_service
def initialize_user_variables(self, user_id: Union[UUID, str], session: Session = Depends(get_session)):
return
def get_variable(
self,
user_id: Union[UUID, str],
name: str,
field: str,
session: Session = Depends(get_session),
) -> str:
return ""
def list_variables(self, user_id: Union[UUID, str], session: Session = Depends(get_session)) -> list[Optional[str]]:
return []
def update_variable(
self,
user_id: Union[UUID, str],
name: str,
value: str,
session: Session = Depends(get_session),
):
return
def delete_variable(
self,
user_id: Union[UUID, str],
name: str,
session: Session = Depends(get_session),
):
return
def create_variable(
self,
user_id: Union[UUID, str],
name: str,
value: str,
default_fields: list[str] = [],
_type: str = "Generic",
session: Session = Depends(get_session),
):
return