232 lines
8.0 KiB
Python
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,
|
|
)
|
|
)
|