Add VariableService and related files

This commit is contained in:
Gabriel Luiz Freitas Almeida 2024-03-26 20:40:03 -03:00
commit 532615533a
5 changed files with 4 additions and 10 deletions

View file

@ -4,20 +4,14 @@ import inspect
import types
from enum import Enum
from typing import TYPE_CHECKING, Any, AsyncIterator, Callable, Dict, Iterator, List, Optional
from loguru import logger
from langflow.graph.schema import (
INPUT_COMPONENTS,
INPUT_FIELD_NAME,
OUTPUT_COMPONENTS,
InterfaceComponentTypes,
ResultData,
)
from langflow.graph.schema import INPUT_COMPONENTS, OUTPUT_COMPONENTS, InterfaceComponentTypes, ResultData
from langflow.graph.utils import UnbuiltObject, UnbuiltResult
from langflow.graph.vertex.utils import generate_result
from langflow.interface.initialize import loading
from langflow.interface.listing import lazy_load_dict
from langflow.schema.schema import INPUT_FIELD_NAME
from langflow.services.deps import get_storage_service
from langflow.utils.constants import DIRECT_TYPES
from langflow.utils.schemas import ChatOutputResponse

View file

@ -8,7 +8,6 @@ if TYPE_CHECKING:
from langflow.services.cache.service import CacheService
from langflow.services.chat.service import ChatService
from langflow.services.credentials.service import VariableService
from langflow.services.database.service import DatabaseService
from langflow.services.monitor.service import MonitorService
from langflow.services.plugins.service import PluginService
@ -18,6 +17,7 @@ if TYPE_CHECKING:
from langflow.services.storage.service import StorageService
from langflow.services.store.service import StoreService
from langflow.services.task.service import TaskService
from langflow.services.variable.service import VariableService
def get_socket_service() -> "SocketIOService":

View file

@ -0,0 +1,15 @@
from typing import TYPE_CHECKING
from langflow.services.factory import ServiceFactory
from langflow.services.variable.service import VariableService
if TYPE_CHECKING:
from langflow.services.settings.service import SettingsService
class VariableServiceFactory(ServiceFactory):
def __init__(self):
super().__init__(VariableService)
def create(self, settings_service: "SettingsService"):
return VariableService(settings_service)

View file

@ -0,0 +1,36 @@
from typing import TYPE_CHECKING, Optional, Union
from uuid import UUID
from fastapi import Depends
from sqlmodel import Session, select
from langflow.services.auth import utils as auth_utils
from langflow.services.base import Service
from langflow.services.database.models.variable.model import Variable
from langflow.services.deps import get_session
if TYPE_CHECKING:
from langflow.services.settings.service import SettingsService
class VariableService(Service):
name = "variable_service"
def __init__(self, settings_service: "SettingsService"):
self.settings_service = settings_service
def get_credential(self, user_id: Union[UUID, str], name: str, session: Session = Depends(get_session)) -> str:
# we get the credential from the database
# credential = session.query(Variable).filter(Variable.user_id == user_id, Variable.name == name).first()
credential = session.exec(select(Variable).where(Variable.user_id == user_id, Variable.name == name)).first()
# we decrypt the value
if not credential or not credential.value:
raise ValueError(f"{name} credential not found.")
decrypted = auth_utils.decrypt_api_key(credential.value, settings_service=self.settings_service)
return decrypted
def list_credentials(
self, user_id: Union[UUID, str], session: Session = Depends(get_session)
) -> list[Optional[str]]:
credentials = session.exec(select(Variable).where(Variable.user_id == user_id)).all()
return [credential.name for credential in credentials]