Refactor code for initializing services and socketio server
This commit is contained in:
parent
3a989cb9fe
commit
2316beea93
5 changed files with 10 additions and 32 deletions
|
|
@ -20,9 +20,7 @@ from langflow.utils.logger import configure
|
||||||
def get_lifespan(fix_migration=False, socketio_server=None):
|
def get_lifespan(fix_migration=False, socketio_server=None):
|
||||||
@asynccontextmanager
|
@asynccontextmanager
|
||||||
async def lifespan(app: FastAPI):
|
async def lifespan(app: FastAPI):
|
||||||
initialize_services(
|
initialize_services(fix_migration=fix_migration, socketio_server=socketio_server)
|
||||||
fix_migration=fix_migration, socketio_server=socketio_server
|
|
||||||
)
|
|
||||||
setup_llm_caching()
|
setup_llm_caching()
|
||||||
LangfuseInstance.update()
|
LangfuseInstance.update()
|
||||||
create_or_update_starter_projects()
|
create_or_update_starter_projects()
|
||||||
|
|
@ -36,9 +34,7 @@ def create_app():
|
||||||
"""Create the FastAPI app and include the router."""
|
"""Create the FastAPI app and include the router."""
|
||||||
|
|
||||||
configure()
|
configure()
|
||||||
socketio_server = socketio.AsyncServer(
|
socketio_server = socketio.AsyncServer(async_mode="asgi", cors_allowed_origins="*", logger=True)
|
||||||
async_mode="asgi", cors_allowed_origins="*", logger=True
|
|
||||||
)
|
|
||||||
lifespan = get_lifespan(socketio_server=socketio_server)
|
lifespan = get_lifespan(socketio_server=socketio_server)
|
||||||
app = FastAPI(lifespan=lifespan)
|
app = FastAPI(lifespan=lifespan)
|
||||||
origins = ["*"]
|
origins = ["*"]
|
||||||
|
|
@ -105,9 +101,7 @@ def get_static_files_dir():
|
||||||
return frontend_path / "frontend"
|
return frontend_path / "frontend"
|
||||||
|
|
||||||
|
|
||||||
def setup_app(
|
def setup_app(static_files_dir: Optional[Path] = None, backend_only: bool = False) -> FastAPI:
|
||||||
static_files_dir: Optional[Path] = None, backend_only: bool = False
|
|
||||||
) -> FastAPI:
|
|
||||||
"""Setup the FastAPI app."""
|
"""Setup the FastAPI app."""
|
||||||
# get the directory of the current file
|
# get the directory of the current file
|
||||||
if not static_files_dir:
|
if not static_files_dir:
|
||||||
|
|
|
||||||
|
|
@ -31,18 +31,14 @@ def hash_dict(d: dict) -> str:
|
||||||
return str(d)
|
return str(d)
|
||||||
|
|
||||||
|
|
||||||
def hash_infer_service_types_args(
|
def hash_infer_service_types_args(factory_class: Type[ServiceFactory], available_services=None) -> str:
|
||||||
factory_class: Type[ServiceFactory], available_services=None
|
|
||||||
) -> str:
|
|
||||||
factory_hash = hash_factory(factory_class)
|
factory_hash = hash_factory(factory_class)
|
||||||
services_hash = hash_dict(available_services)
|
services_hash = hash_dict(available_services)
|
||||||
return f"{factory_hash}_{services_hash}"
|
return f"{factory_hash}_{services_hash}"
|
||||||
|
|
||||||
|
|
||||||
@cached(cache=LRUCache(maxsize=10), key=hash_infer_service_types_args)
|
@cached(cache=LRUCache(maxsize=10), key=hash_infer_service_types_args)
|
||||||
def infer_service_types(
|
def infer_service_types(factory_class: Type[ServiceFactory], available_services=None) -> "ServiceType":
|
||||||
factory_class: Type[ServiceFactory], available_services=None
|
|
||||||
) -> "ServiceType":
|
|
||||||
create_method = factory_class.create
|
create_method = factory_class.create
|
||||||
type_hints = get_type_hints(create_method, globalns=available_services)
|
type_hints = get_type_hints(create_method, globalns=available_services)
|
||||||
service_types = []
|
service_types = []
|
||||||
|
|
@ -59,9 +55,7 @@ def infer_service_types(
|
||||||
service_type = ServiceType[type_name]
|
service_type = ServiceType[type_name]
|
||||||
service_types.append(service_type)
|
service_types.append(service_type)
|
||||||
except KeyError:
|
except KeyError:
|
||||||
raise ValueError(
|
raise ValueError(f"No matching ServiceType for parameter type: {param_type.__name__}")
|
||||||
f"No matching ServiceType for parameter type: {param_type.__name__}"
|
|
||||||
)
|
|
||||||
return service_types
|
return service_types
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -85,7 +79,5 @@ def import_all_services_into_a_dict():
|
||||||
break
|
break
|
||||||
except Exception as exc:
|
except Exception as exc:
|
||||||
logger.exception(exc)
|
logger.exception(exc)
|
||||||
raise RuntimeError(
|
raise RuntimeError("Could not initialize services. Please check your settings.") from exc
|
||||||
f"Could not initialize services. Please check your settings."
|
|
||||||
) from exc
|
|
||||||
return services
|
return services
|
||||||
|
|
|
||||||
|
|
@ -51,14 +51,10 @@ class ServiceManager:
|
||||||
self._create_service(dependency)
|
self._create_service(dependency)
|
||||||
|
|
||||||
# Collect the dependent services
|
# Collect the dependent services
|
||||||
dependent_services = {
|
dependent_services = {dep.value: self.services[dep] for dep in factory.dependencies}
|
||||||
dep.value: self.services[dep] for dep in factory.dependencies
|
|
||||||
}
|
|
||||||
|
|
||||||
# Create the actual service
|
# Create the actual service
|
||||||
self.services[service_name] = self.factories[service_name].create(
|
self.services[service_name] = self.factories[service_name].create(**dependent_services)
|
||||||
**dependent_services
|
|
||||||
)
|
|
||||||
self.services[service_name].set_ready()
|
self.services[service_name].set_ready()
|
||||||
|
|
||||||
def _validate_service_creation(self, service_name: "ServiceType"):
|
def _validate_service_creation(self, service_name: "ServiceType"):
|
||||||
|
|
@ -66,9 +62,7 @@ class ServiceManager:
|
||||||
Validate whether the service can be created.
|
Validate whether the service can be created.
|
||||||
"""
|
"""
|
||||||
if service_name not in self.factories:
|
if service_name not in self.factories:
|
||||||
raise ValueError(
|
raise ValueError(f"No factory registered for the service class '{service_name.name}'")
|
||||||
f"No factory registered for the service class '{service_name.name}'"
|
|
||||||
)
|
|
||||||
|
|
||||||
def update(self, service_name: "ServiceType"):
|
def update(self, service_name: "ServiceType"):
|
||||||
"""
|
"""
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,5 @@
|
||||||
from langflow.services.factory import ServiceFactory
|
from langflow.services.factory import ServiceFactory
|
||||||
from langflow.services.monitor.service import MonitorService
|
from langflow.services.monitor.service import MonitorService
|
||||||
from langflow.services.schema import ServiceType
|
|
||||||
|
|
||||||
|
|
||||||
class MonitorServiceFactory(ServiceFactory):
|
class MonitorServiceFactory(ServiceFactory):
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,6 @@
|
||||||
from typing import TYPE_CHECKING
|
from typing import TYPE_CHECKING
|
||||||
|
|
||||||
from langflow.services.factory import ServiceFactory
|
from langflow.services.factory import ServiceFactory
|
||||||
from langflow.services.schema import ServiceType
|
|
||||||
from langflow.services.socket.service import SocketIOService
|
from langflow.services.socket.service import SocketIOService
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue