154 lines
6.4 KiB
Python
154 lines
6.4 KiB
Python
"""Composition root for the independent KnowledgeFS product services."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from typing import NamedTuple
|
|
|
|
from sqlalchemy.orm import Session, sessionmaker
|
|
|
|
from configs import dify_config
|
|
from repositories.sqlalchemy_knowledge_fs_capability_issuance_auditor import (
|
|
SQLAlchemyKnowledgeFSCapabilityIssuanceAuditor,
|
|
)
|
|
from services.knowledge_fs.app_admission_service import KnowledgeFSAppAdmissionService
|
|
from services.knowledge_fs.app_binding_management import (
|
|
KnowledgeFSAppBindingManagementService,
|
|
SQLKnowledgeFSAppCatalog,
|
|
)
|
|
from services.knowledge_fs.app_execution_capability import KnowledgeFSAppExecutionCapabilityService
|
|
from services.knowledge_fs.batch_capability import KnowledgeFSBatchCapabilityBroker
|
|
from services.knowledge_fs.capability_broker import KnowledgeFSCapabilityBroker
|
|
from services.knowledge_fs.control_plane_service import (
|
|
KnowledgeFSControlPlaneService,
|
|
SQLKnowledgeFSWorkspaceMemberPort,
|
|
)
|
|
from services.knowledge_fs.control_space_commands import KnowledgeFSControlSpaceCommandService
|
|
from services.knowledge_fs.credential_service import KnowledgeFSCredentialService
|
|
from services.knowledge_fs.cutover import KnowledgeFSWorkspaceCutoverService
|
|
from services.knowledge_fs.cutover_runtime_gate import SQLKnowledgeFSWorkspaceRuntimeGate
|
|
from services.knowledge_fs.data_facade import KnowledgeFSDataFacade
|
|
from services.knowledge_fs.greenfield_initializer import KnowledgeFSWorkspaceGreenfieldInitializer
|
|
from services.knowledge_fs.operation_admission import (
|
|
DifyKnowledgeFSBillingPort,
|
|
DifyKnowledgeFSWeightedRateLimitPort,
|
|
KnowledgeFSDirectOperationAdmissionService,
|
|
KnowledgeFSOperationAdmissionService,
|
|
LoggingKnowledgeFSRateLimitAudit,
|
|
)
|
|
from services.knowledge_fs.product_application_service import KnowledgeFSProductApplicationService
|
|
from services.knowledge_fs.product_authorization import DifyKnowledgeFSProductRBACPort
|
|
from services.knowledge_fs.product_remote import KnowledgeFSOperationUnavailableError
|
|
from services.knowledge_fs.product_remote_http import HTTPKnowledgeFSProductRemoteClient
|
|
from services.knowledge_fs.product_service import KnowledgeFSProductService
|
|
from services.knowledge_fs.remote_registry import get_knowledge_fs_lifecycle_remote
|
|
from services.knowledge_fs.revocation_commands import KnowledgeFSRevocationCommandProducer
|
|
from services.knowledge_fs_capability import create_configured_knowledge_fs_capability_issuer
|
|
|
|
|
|
class KnowledgeFSRuntime(NamedTuple):
|
|
application: KnowledgeFSProductApplicationService
|
|
app_admission: KnowledgeFSAppAdmissionService
|
|
app_bindings: KnowledgeFSAppBindingManagementService
|
|
app_capabilities: KnowledgeFSAppExecutionCapabilityService
|
|
broker: KnowledgeFSCapabilityBroker
|
|
control_plane: KnowledgeFSControlPlaneService
|
|
credentials: KnowledgeFSCredentialService
|
|
direct_operation_admission: KnowledgeFSDirectOperationAdmissionService
|
|
facade: KnowledgeFSDataFacade
|
|
operation_admission: KnowledgeFSOperationAdmissionService
|
|
|
|
|
|
def create_knowledge_fs_runtime(session_maker: sessionmaker[Session]) -> KnowledgeFSRuntime:
|
|
base_url = dify_config.KNOWLEDGE_FS_BASE_URL
|
|
if base_url is None:
|
|
raise KnowledgeFSOperationUnavailableError("KnowledgeFS integration is not configured")
|
|
rbac = DifyKnowledgeFSProductRBACPort()
|
|
remote = HTTPKnowledgeFSProductRemoteClient(
|
|
base_url=base_url,
|
|
timeout_seconds=dify_config.KNOWLEDGE_FS_TIMEOUT_SECONDS,
|
|
max_response_bytes=dify_config.KNOWLEDGE_FS_PRODUCT_MAX_RESPONSE_BYTES,
|
|
)
|
|
issuer = create_configured_knowledge_fs_capability_issuer(
|
|
audit=SQLAlchemyKnowledgeFSCapabilityIssuanceAuditor(session_maker)
|
|
)
|
|
greenfield_cutover = KnowledgeFSWorkspaceCutoverService(
|
|
session_maker,
|
|
remote_factory=get_knowledge_fs_lifecycle_remote,
|
|
)
|
|
greenfield_initializer = KnowledgeFSWorkspaceGreenfieldInitializer(
|
|
session_maker,
|
|
cutover=greenfield_cutover,
|
|
)
|
|
cutover_gate = SQLKnowledgeFSWorkspaceRuntimeGate(
|
|
session_maker,
|
|
initializer=greenfield_initializer,
|
|
)
|
|
batch_capabilities = KnowledgeFSBatchCapabilityBroker(
|
|
session_maker,
|
|
cutover_gate=cutover_gate,
|
|
issuer=issuer,
|
|
)
|
|
product = KnowledgeFSProductService(
|
|
session_maker,
|
|
batch_capabilities=batch_capabilities,
|
|
cutover_gate=cutover_gate,
|
|
remote=remote,
|
|
rbac=rbac,
|
|
)
|
|
revocations = KnowledgeFSRevocationCommandProducer()
|
|
control_plane = KnowledgeFSControlPlaneService(
|
|
session_maker,
|
|
product=product,
|
|
members=SQLKnowledgeFSWorkspaceMemberPort(),
|
|
revocations=revocations,
|
|
)
|
|
broker = KnowledgeFSCapabilityBroker(
|
|
session_maker,
|
|
cutover_gate=cutover_gate,
|
|
product=product,
|
|
issuer=issuer,
|
|
)
|
|
operation_admission = KnowledgeFSOperationAdmissionService(
|
|
rate_limit=DifyKnowledgeFSWeightedRateLimitPort(audit=LoggingKnowledgeFSRateLimitAudit()),
|
|
billing=DifyKnowledgeFSBillingPort(),
|
|
)
|
|
direct_operation_admission = KnowledgeFSDirectOperationAdmissionService(
|
|
admission=operation_admission,
|
|
broker=broker,
|
|
)
|
|
facade = KnowledgeFSDataFacade(admission=operation_admission, broker=broker, remote=remote)
|
|
credentials = KnowledgeFSCredentialService(session_maker, product=product, revocations=revocations)
|
|
application = KnowledgeFSProductApplicationService(
|
|
product=product,
|
|
control_plane=control_plane,
|
|
commands=KnowledgeFSControlSpaceCommandService(session_maker),
|
|
facade=facade,
|
|
rbac=rbac,
|
|
)
|
|
app_admission = KnowledgeFSAppAdmissionService(session_maker, revocations=revocations)
|
|
return KnowledgeFSRuntime(
|
|
application=application,
|
|
app_admission=app_admission,
|
|
app_bindings=KnowledgeFSAppBindingManagementService(
|
|
session_maker,
|
|
product=product,
|
|
apps=SQLKnowledgeFSAppCatalog(),
|
|
revocations=revocations,
|
|
),
|
|
app_capabilities=KnowledgeFSAppExecutionCapabilityService(
|
|
admission=app_admission,
|
|
broker=broker,
|
|
operation_admission=operation_admission,
|
|
remote=remote,
|
|
),
|
|
broker=broker,
|
|
control_plane=control_plane,
|
|
credentials=credentials,
|
|
direct_operation_admission=direct_operation_admission,
|
|
facade=facade,
|
|
operation_admission=operation_admission,
|
|
)
|
|
|
|
|
|
__all__ = ["KnowledgeFSRuntime", "create_knowledge_fs_runtime"]
|