dashboard-nanobot/backend/bootstrap/app_runtime_support.py

232 lines
8.0 KiB
Python

from typing import Any
from sqlmodel import Session, select
from api.dashboard_router import build_dashboard_router
from models.bot import NanobotImage
from services.image_service import ImageService
from services.speech_transcription_service import SpeechTranscriptionService
from services.system_service import SystemService
def reconcile_image_registry(session: Session, *, docker_manager: Any) -> None:
db_images = session.exec(select(NanobotImage)).all()
for image in db_images:
if docker_manager.has_image(image.tag):
try:
docker_image = docker_manager.client.images.get(image.tag) if docker_manager.client else None
image.image_id = docker_image.id if docker_image else image.image_id
except Exception:
pass
image.status = "READY"
else:
image.status = "UNKNOWN"
session.add(image)
session.commit()
def register_provider_runtime(
*,
app: Any,
provider_registry: Any,
local_provider_target: Any,
local_provision_provider: Any,
local_runtime_provider: Any,
local_workspace_provider: Any,
edge_provision_provider: Any,
edge_runtime_provider: Any,
edge_workspace_provider: Any,
resolve_bot_provider_target_for_instance: Any,
resolve_edge_client: Any,
) -> None:
provider_registry.register_bundle(
key=local_provider_target.key,
runtime_provider=local_runtime_provider,
workspace_provider=local_workspace_provider,
provision_provider=local_provision_provider,
)
provider_registry.register_bundle(
key=type(local_provider_target)(
node_id="local",
transport_kind="edge",
runtime_kind="docker",
core_adapter="nanobot",
).key,
runtime_provider=edge_runtime_provider,
workspace_provider=edge_workspace_provider,
provision_provider=edge_provision_provider,
)
provider_registry.register_bundle(
key=type(local_provider_target)(
node_id="local",
transport_kind="edge",
runtime_kind="native",
core_adapter="nanobot",
).key,
runtime_provider=edge_runtime_provider,
workspace_provider=edge_workspace_provider,
provision_provider=edge_provision_provider,
)
app.state.provider_default_node_id = local_provider_target.node_id
app.state.provider_default_transport_kind = local_provider_target.transport_kind
app.state.provider_default_runtime_kind = local_provider_target.runtime_kind
app.state.provider_default_core_adapter = local_provider_target.core_adapter
app.state.provider_registry = provider_registry
app.state.resolve_bot_provider_target = resolve_bot_provider_target_for_instance
app.state.resolve_edge_client = resolve_edge_client
app.state.edge_provision_provider = edge_provision_provider
app.state.edge_runtime_provider = edge_runtime_provider
app.state.edge_workspace_provider = edge_workspace_provider
app.state.provision_provider = local_provision_provider
app.state.runtime_provider = local_runtime_provider
app.state.workspace_provider = local_workspace_provider
def build_speech_transcription_runtime_service(
*,
data_root: str,
speech_service: Any,
get_speech_runtime_settings: Any,
logger: Any,
) -> SpeechTranscriptionService:
return SpeechTranscriptionService(
data_root=data_root,
speech_service=speech_service,
get_speech_runtime_settings=get_speech_runtime_settings,
logger=logger,
)
def build_image_runtime_service(
*,
cache: Any,
cache_key_images: Any,
invalidate_images_cache: Any,
docker_manager: Any,
reconcile_image_registry_fn: Any,
) -> ImageService:
return ImageService(
cache=cache,
cache_key_images=cache_key_images,
invalidate_images_cache=invalidate_images_cache,
reconcile_image_registry=reconcile_image_registry_fn,
docker_manager=docker_manager,
)
def build_system_runtime_service(
*,
engine: Any,
cache: Any,
database_engine: str,
redis_enabled: bool,
redis_url: str,
redis_prefix: str,
agent_md_templates_file: str,
topic_presets_templates_file: str,
default_soul_md: str,
default_agents_md: str,
default_user_md: str,
default_tools_md: str,
default_identity_md: str,
topic_preset_templates: Any,
get_default_system_timezone: Any,
load_agent_md_templates: Any,
load_topic_presets_template: Any,
get_platform_settings_snapshot: Any,
get_speech_runtime_settings: Any,
) -> SystemService:
return SystemService(
engine=engine,
cache=cache,
database_engine=database_engine,
redis_enabled=redis_enabled,
redis_url=redis_url,
redis_prefix=redis_prefix,
agent_md_templates_file=agent_md_templates_file,
topic_presets_templates_file=topic_presets_templates_file,
default_soul_md=default_soul_md,
default_agents_md=default_agents_md,
default_user_md=default_user_md,
default_tools_md=default_tools_md,
default_identity_md=default_identity_md,
topic_preset_templates=topic_preset_templates,
get_default_system_timezone=get_default_system_timezone,
load_agent_md_templates=load_agent_md_templates,
load_topic_presets_template=load_topic_presets_template,
get_platform_settings_snapshot=get_platform_settings_snapshot,
get_speech_runtime_settings=get_speech_runtime_settings,
)
def attach_runtime_services(
*,
app: Any,
bot_command_service: Any,
bot_lifecycle_service: Any,
app_lifecycle_service: Any,
bot_query_service: Any,
bot_channel_service: Any,
bot_message_service: Any,
bot_runtime_snapshot_service: Any,
image_service: Any,
provider_test_service: Any,
runtime_event_service: Any,
speech_transcription_service: Any,
system_service: Any,
workspace_service: Any,
runtime_service: Any,
) -> None:
app.state.bot_command_service = bot_command_service
app.state.bot_lifecycle_service = bot_lifecycle_service
app.state.app_lifecycle_service = app_lifecycle_service
app.state.bot_query_service = bot_query_service
app.state.bot_channel_service = bot_channel_service
app.state.bot_message_service = bot_message_service
app.state.bot_runtime_snapshot_service = bot_runtime_snapshot_service
app.state.image_service = image_service
app.state.provider_test_service = provider_test_service
app.state.runtime_event_service = runtime_event_service
app.state.speech_transcription_service = speech_transcription_service
app.state.system_service = system_service
app.state.workspace_service = workspace_service
app.state.runtime_service = runtime_service
def include_dashboard_api(
*,
app: Any,
image_service: Any,
provider_test_service: Any,
bot_lifecycle_service: Any,
bot_query_service: Any,
bot_channel_service: Any,
skill_service: Any,
bot_config_state_service: Any,
runtime_service: Any,
bot_message_service: Any,
workspace_service: Any,
speech_transcription_service: Any,
app_lifecycle_service: Any,
resolve_edge_state_context: Any,
logger: Any,
) -> None:
app.include_router(
build_dashboard_router(
image_service=image_service,
provider_test_service=provider_test_service,
bot_lifecycle_service=bot_lifecycle_service,
bot_query_service=bot_query_service,
bot_channel_service=bot_channel_service,
skill_service=skill_service,
bot_config_state_service=bot_config_state_service,
runtime_service=runtime_service,
bot_message_service=bot_message_service,
workspace_service=workspace_service,
speech_transcription_service=speech_transcription_service,
app_lifecycle_service=app_lifecycle_service,
resolve_edge_state_context=resolve_edge_state_context,
logger=logger,
)
)