digitalkin 0.3.5.dev8__tar.gz → 0.3.5.dev10__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/PKG-INFO +1 -1
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/pyproject.toml +1 -1
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/__version__.py +1 -1
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/community/agno/agno_adapter.py +207 -86
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/mixins/agui_mixin.py +95 -176
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/models/events/__init__.py +4 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/models/events/agent_events.py +23 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin.egg-info/PKG-INFO +1 -1
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/LICENSE +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/README.md +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/examples/base_server/__init__.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/examples/base_server/mock/__init__.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/examples/base_server/mock/mock_pb2.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/examples/base_server/mock/mock_pb2_grpc.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/examples/base_server/server_async_insecure.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/examples/base_server/server_async_secure.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/examples/base_server/server_sync_insecure.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/examples/base_server/server_sync_secure.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/examples/modules/__init__.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/examples/modules/archetype_with_tools_module.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/examples/modules/cpu_intensive_module.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/examples/modules/dynamic_setup_module.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/examples/modules/minimal_llm_module.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/examples/modules/text_transform_module.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/examples/monitoring/digitalkin_observability/__init__.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/examples/monitoring/digitalkin_observability/http_server.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/examples/monitoring/digitalkin_observability/interceptors.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/examples/monitoring/digitalkin_observability/metrics.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/examples/monitoring/digitalkin_observability/prometheus.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/examples/monitoring/tests/test_metrics.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/examples/services/filesystem_module.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/examples/services/storage_module.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/setup.cfg +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/__init__.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/community/__init__.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/community/agno/__init__.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/core/__init__.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/core/common/__init__.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/core/common/factories.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/core/job_manager/__init__.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/core/job_manager/base_job_manager.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/core/job_manager/single_job_manager.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/core/job_manager/taskiq_broker.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/core/job_manager/taskiq_job_manager.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/core/profiling/__init__.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/core/profiling/asyncio_monitor.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/core/profiling/task_profiler.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/core/task_manager/__init__.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/core/task_manager/base_task_manager.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/core/task_manager/local_task_manager.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/core/task_manager/remote_task_manager.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/core/task_manager/task_executor.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/core/task_manager/task_session.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/grpc_servers/__init__.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/grpc_servers/_base_server.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/grpc_servers/module_server.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/grpc_servers/module_servicer.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/grpc_servers/utils/__init__.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/grpc_servers/utils/exceptions.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/grpc_servers/utils/grpc_client_wrapper.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/grpc_servers/utils/grpc_error_handler.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/grpc_servers/utils/utility_schema_extender.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/logger.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/mixins/__init__.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/mixins/base_mixin.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/mixins/callback_mixin.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/mixins/chat_history_mixin.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/mixins/cost_mixin.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/mixins/file_history_mixin.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/mixins/filesystem_mixin.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/mixins/logger_mixin.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/mixins/storage_mixin.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/models/__init__.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/models/core/__init__.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/models/core/job_manager_models.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/models/core/task_monitor.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/models/grpc_servers/__init__.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/models/grpc_servers/models.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/models/grpc_servers/types.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/models/module/__init__.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/models/module/ag_ui.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/models/module/base_types.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/models/module/module.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/models/module/module_context.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/models/module/module_types.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/models/module/request_metadata.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/models/module/select_schema.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/models/module/setup_types.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/models/module/tool_cache.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/models/module/tool_reference.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/models/module/utility.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/models/services/__init__.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/models/services/cost.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/models/services/registry.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/models/services/storage.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/modules/__init__.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/modules/_base_module.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/modules/archetype_module.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/modules/tool_module.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/modules/trigger_handler.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/modules/triggers/__init__.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/modules/triggers/healthcheck_ping_trigger.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/modules/triggers/healthcheck_services_trigger.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/modules/triggers/healthcheck_status_trigger.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/py.typed +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/services/__init__.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/services/agent/__init__.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/services/agent/agent_strategy.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/services/agent/default_agent.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/services/base_strategy.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/services/communication/__init__.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/services/communication/communication_strategy.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/services/communication/default_communication.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/services/communication/grpc_communication.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/services/cost/__init__.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/services/cost/cost_strategy.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/services/cost/default_cost.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/services/cost/grpc_cost.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/services/filesystem/__init__.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/services/filesystem/default_filesystem.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/services/filesystem/filesystem_strategy.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/services/filesystem/grpc_filesystem.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/services/identity/__init__.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/services/identity/default_identity.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/services/identity/identity_strategy.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/services/registry/__init__.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/services/registry/default_registry.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/services/registry/exceptions.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/services/registry/grpc_registry.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/services/registry/registry_models.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/services/registry/registry_strategy.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/services/services_config.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/services/services_models.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/services/setup/__init__.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/services/setup/default_setup.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/services/setup/grpc_setup.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/services/setup/setup_strategy.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/services/snapshot/__init__.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/services/snapshot/default_snapshot.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/services/snapshot/snapshot_strategy.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/services/storage/__init__.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/services/storage/default_storage.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/services/storage/grpc_storage.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/services/storage/storage_strategy.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/services/task_manager/__init__.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/services/task_manager/default_task_manager.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/services/task_manager/grpc_task_manager.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/services/task_manager/task_manager_strategy.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/services/user_profile/__init__.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/services/user_profile/default_user_profile.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/services/user_profile/grpc_user_profile.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/services/user_profile/user_profile_strategy.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/utils/__init__.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/utils/arg_parser.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/utils/conditional_schema.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/utils/development_mode_action.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/utils/dynamic_schema.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/utils/llm_ready_schema.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/utils/package_discover.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/utils/proto_utils.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/utils/schema_splitter.py +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin.egg-info/SOURCES.txt +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin.egg-info/dependency_links.txt +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin.egg-info/requires.txt +0 -0
- {digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin.egg-info/top_level.txt +0 -0
{digitalkin-0.3.5.dev8 → digitalkin-0.3.5.dev10}/src/digitalkin/community/agno/agno_adapter.py
RENAMED
|
@@ -2,11 +2,16 @@
|
|
|
2
2
|
|
|
3
3
|
This adapter bridges Agno-specific events to the DigitalKin event model,
|
|
4
4
|
allowing the core DigitalKin SDK to remain independent of Agno.
|
|
5
|
+
|
|
6
|
+
The adapter owns ALL state management: tracking reasoning/content lifecycle,
|
|
7
|
+
generating message_id and reasoning_id on each phase start, and emitting
|
|
8
|
+
proper start/completed events for text message and reasoning sequences.
|
|
5
9
|
"""
|
|
6
10
|
|
|
7
11
|
from __future__ import annotations
|
|
8
12
|
|
|
9
13
|
import logging
|
|
14
|
+
import uuid
|
|
10
15
|
from typing import Any
|
|
11
16
|
|
|
12
17
|
from digitalkin.models.events import (
|
|
@@ -20,6 +25,8 @@ from digitalkin.models.events import (
|
|
|
20
25
|
RunContentEvent,
|
|
21
26
|
RunErrorEvent,
|
|
22
27
|
RunStartedEvent,
|
|
28
|
+
TextMessageCompletedEvent,
|
|
29
|
+
TextMessageStartedEvent,
|
|
23
30
|
ToolCallCompletedEvent,
|
|
24
31
|
ToolCallErrorEvent,
|
|
25
32
|
ToolCallStartedEvent,
|
|
@@ -32,9 +39,9 @@ logger = logging.getLogger(__name__)
|
|
|
32
39
|
class AgnoStreamAdapter:
|
|
33
40
|
"""Stateful converter: Agno streaming events -> DigitalKin events.
|
|
34
41
|
|
|
35
|
-
Tracks reasoning state so that
|
|
36
|
-
``RunEvent.run_content``
|
|
37
|
-
|
|
42
|
+
Tracks reasoning and content state so that events arriving on
|
|
43
|
+
``RunEvent.run_content`` are automatically wrapped in proper
|
|
44
|
+
lifecycle events (TextMessageStarted/Completed, ReasoningStarted/Completed).
|
|
38
45
|
|
|
39
46
|
Usage::
|
|
40
47
|
|
|
@@ -47,14 +54,14 @@ class AgnoStreamAdapter:
|
|
|
47
54
|
"""
|
|
48
55
|
|
|
49
56
|
def __init__(self) -> None:
|
|
50
|
-
"""Initialize the AgnoStreamAdapter.
|
|
51
|
-
|
|
52
|
-
This adapter tracks reasoning state to properly handle reasoning_content
|
|
53
|
-
that arrives on RunEvent.run_content events.
|
|
54
|
-
"""
|
|
57
|
+
"""Initialize the AgnoStreamAdapter."""
|
|
55
58
|
self._reasoning_active: bool = False
|
|
59
|
+
self._current_reasoning_id: str | None = None
|
|
56
60
|
|
|
57
|
-
|
|
61
|
+
self._content_active: bool = False
|
|
62
|
+
self._current_message_id: str | None = None
|
|
63
|
+
|
|
64
|
+
def to_digitalkin_events(self, agno_event: Any) -> list[BaseAgentRunEvent]: # noqa: C901, PLR0911, PLR0912, PLR0915
|
|
58
65
|
"""Convert one Agno event into one or more DigitalKin events.
|
|
59
66
|
|
|
60
67
|
Args:
|
|
@@ -73,10 +80,8 @@ class AgnoStreamAdapter:
|
|
|
73
80
|
raise ImportError(message) from exc
|
|
74
81
|
|
|
75
82
|
event_type = agno_event.event
|
|
76
|
-
event_types = getattr(agno_event, "events", None)
|
|
77
83
|
|
|
78
84
|
logger.info("[DK STREAM-DEBUG => agno_adapter] Converting Agno event type: %s", event_type)
|
|
79
|
-
logger.info("[DK STREAM-DEBUG => agno_adapter event_types] Converting Agno event types: %s", event_types)
|
|
80
85
|
|
|
81
86
|
timestamp = getattr(agno_event, "timestamp", None)
|
|
82
87
|
|
|
@@ -97,7 +102,15 @@ class AgnoStreamAdapter:
|
|
|
97
102
|
return self._handle_run_content(agno_event, timestamp)
|
|
98
103
|
|
|
99
104
|
if event_type == RunEvent.run_completed:
|
|
100
|
-
|
|
105
|
+
events: list[BaseAgentRunEvent] = []
|
|
106
|
+
|
|
107
|
+
# Close any open sequences before completing the run
|
|
108
|
+
if self._content_active:
|
|
109
|
+
events.extend(self._close_content(timestamp))
|
|
110
|
+
if self._reasoning_active:
|
|
111
|
+
events.extend(self._close_reasoning(timestamp))
|
|
112
|
+
|
|
113
|
+
events.append(
|
|
101
114
|
RunCompletedEvent(
|
|
102
115
|
event=AgentRunEvent.RUN_COMPLETED,
|
|
103
116
|
run_id=getattr(agno_event, "run_id", None),
|
|
@@ -106,7 +119,8 @@ class AgnoStreamAdapter:
|
|
|
106
119
|
timestamp=timestamp,
|
|
107
120
|
metadata=None,
|
|
108
121
|
)
|
|
109
|
-
|
|
122
|
+
)
|
|
123
|
+
return events
|
|
110
124
|
|
|
111
125
|
if event_type == RunEvent.run_error:
|
|
112
126
|
return [
|
|
@@ -123,15 +137,27 @@ class AgnoStreamAdapter:
|
|
|
123
137
|
# ── Explicit Reasoning Events (native Agno reasoning models) ────
|
|
124
138
|
|
|
125
139
|
if event_type == RunEvent.reasoning_started:
|
|
140
|
+
events = []
|
|
141
|
+
|
|
142
|
+
# Close content if active
|
|
143
|
+
if self._content_active:
|
|
144
|
+
events.extend(self._close_content(timestamp))
|
|
145
|
+
|
|
146
|
+
self._current_reasoning_id = str(uuid.uuid4())
|
|
126
147
|
self._reasoning_active = True
|
|
127
|
-
logger.info(
|
|
128
|
-
|
|
148
|
+
logger.info(
|
|
149
|
+
"[DK STREAM-DEBUG => agno_adapter] Reasoning started (explicit), id=%s",
|
|
150
|
+
self._current_reasoning_id,
|
|
151
|
+
)
|
|
152
|
+
events.append(
|
|
129
153
|
ReasoningStartedEvent(
|
|
130
154
|
event=AgentRunEvent.REASONING_STARTED,
|
|
155
|
+
reasoning_id=self._current_reasoning_id,
|
|
131
156
|
timestamp=timestamp,
|
|
132
157
|
metadata=None,
|
|
133
158
|
)
|
|
134
|
-
|
|
159
|
+
)
|
|
160
|
+
return events
|
|
135
161
|
|
|
136
162
|
if event_type == RunEvent.reasoning_content_delta:
|
|
137
163
|
reasoning_content = getattr(agno_event, "reasoning_content", "")
|
|
@@ -139,6 +165,7 @@ class AgnoStreamAdapter:
|
|
|
139
165
|
ReasoningContentDeltaEvent(
|
|
140
166
|
event=AgentRunEvent.REASONING_CONTENT_DELTA,
|
|
141
167
|
delta=reasoning_content,
|
|
168
|
+
reasoning_id=self._current_reasoning_id,
|
|
142
169
|
timestamp=timestamp,
|
|
143
170
|
metadata=None,
|
|
144
171
|
)
|
|
@@ -150,25 +177,28 @@ class AgnoStreamAdapter:
|
|
|
150
177
|
ReasoningStepEvent(
|
|
151
178
|
event=AgentRunEvent.REASONING_STEP,
|
|
152
179
|
delta=reasoning_content,
|
|
180
|
+
reasoning_id=self._current_reasoning_id,
|
|
153
181
|
timestamp=timestamp,
|
|
154
182
|
metadata=None,
|
|
155
183
|
)
|
|
156
184
|
]
|
|
157
185
|
|
|
158
186
|
if event_type == RunEvent.reasoning_completed:
|
|
159
|
-
self._reasoning_active = False
|
|
160
187
|
logger.info("[DK STREAM-DEBUG => agno_adapter] Reasoning completed (explicit)")
|
|
161
|
-
return
|
|
162
|
-
ReasoningCompletedEvent(
|
|
163
|
-
event=AgentRunEvent.REASONING_COMPLETED,
|
|
164
|
-
timestamp=timestamp,
|
|
165
|
-
metadata=None,
|
|
166
|
-
)
|
|
167
|
-
]
|
|
188
|
+
return self._close_reasoning(timestamp)
|
|
168
189
|
|
|
169
190
|
# ── Tool Call Events ─────────────────────────────────────────────
|
|
170
191
|
|
|
171
192
|
if event_type == RunEvent.tool_call_started:
|
|
193
|
+
events = []
|
|
194
|
+
|
|
195
|
+
# Close both reasoning and content before tool calls
|
|
196
|
+
if self._reasoning_active:
|
|
197
|
+
logger.info("[DK STREAM-DEBUG => agno_adapter] Reasoning auto-completed (tool call started)")
|
|
198
|
+
events.extend(self._close_reasoning(timestamp))
|
|
199
|
+
if self._content_active:
|
|
200
|
+
events.extend(self._close_content(timestamp))
|
|
201
|
+
|
|
172
202
|
tool = getattr(agno_event, "tool", None)
|
|
173
203
|
tool_info = None
|
|
174
204
|
if tool:
|
|
@@ -178,14 +208,15 @@ class AgnoStreamAdapter:
|
|
|
178
208
|
tool_args=getattr(tool, "tool_args", None),
|
|
179
209
|
result=None,
|
|
180
210
|
)
|
|
181
|
-
|
|
211
|
+
events.append(
|
|
182
212
|
ToolCallStartedEvent(
|
|
183
213
|
event=AgentRunEvent.TOOL_CALL_STARTED,
|
|
184
214
|
tool=tool_info,
|
|
185
215
|
timestamp=timestamp,
|
|
186
216
|
metadata=None,
|
|
187
217
|
)
|
|
188
|
-
|
|
218
|
+
)
|
|
219
|
+
return events
|
|
189
220
|
|
|
190
221
|
if event_type == RunEvent.tool_call_completed:
|
|
191
222
|
tool = getattr(agno_event, "tool", None)
|
|
@@ -232,99 +263,189 @@ class AgnoStreamAdapter:
|
|
|
232
263
|
return []
|
|
233
264
|
|
|
234
265
|
def flush(self) -> list[BaseAgentRunEvent]:
|
|
235
|
-
"""Emit closing events
|
|
266
|
+
"""Emit closing events for any active sequences at end of stream.
|
|
236
267
|
|
|
237
268
|
Returns:
|
|
238
|
-
List of closing events (empty if
|
|
269
|
+
List of closing events (empty if nothing is active).
|
|
239
270
|
"""
|
|
240
271
|
events: list[BaseAgentRunEvent] = []
|
|
272
|
+
if self._content_active:
|
|
273
|
+
logger.info("[DK STREAM-DEBUG => agno_adapter] Flushing: closing active content")
|
|
274
|
+
events.extend(self._close_content(None))
|
|
241
275
|
if self._reasoning_active:
|
|
242
276
|
logger.info("[DK STREAM-DEBUG => agno_adapter] Flushing: closing active reasoning")
|
|
243
|
-
events.
|
|
244
|
-
ReasoningCompletedEvent(
|
|
245
|
-
event=AgentRunEvent.REASONING_COMPLETED,
|
|
246
|
-
timestamp=None,
|
|
247
|
-
metadata=None,
|
|
248
|
-
)
|
|
249
|
-
)
|
|
250
|
-
self._reasoning_active = False
|
|
277
|
+
events.extend(self._close_reasoning(None))
|
|
251
278
|
return events
|
|
252
279
|
|
|
253
280
|
# ── Private Helpers ──────────────────────────────────────────────────
|
|
254
281
|
|
|
255
|
-
def
|
|
256
|
-
"""
|
|
282
|
+
def _close_reasoning(self, timestamp: Any) -> list[BaseAgentRunEvent]:
|
|
283
|
+
"""Close active reasoning sequence.
|
|
257
284
|
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
285
|
+
Returns:
|
|
286
|
+
List of closing events (empty if reasoning is not active).
|
|
287
|
+
"""
|
|
288
|
+
if not self._reasoning_active:
|
|
289
|
+
return []
|
|
290
|
+
|
|
291
|
+
events: list[BaseAgentRunEvent] = [
|
|
292
|
+
ReasoningCompletedEvent(
|
|
293
|
+
event=AgentRunEvent.REASONING_COMPLETED,
|
|
294
|
+
reasoning_id=self._current_reasoning_id,
|
|
295
|
+
timestamp=timestamp,
|
|
296
|
+
metadata=None,
|
|
297
|
+
)
|
|
298
|
+
]
|
|
299
|
+
self._reasoning_active = False
|
|
300
|
+
self._current_reasoning_id = None
|
|
301
|
+
return events
|
|
261
302
|
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
timestamp: The timestamp for the event.
|
|
303
|
+
def _close_content(self, timestamp: Any) -> list[BaseAgentRunEvent]:
|
|
304
|
+
"""Close active text message sequence.
|
|
265
305
|
|
|
266
306
|
Returns:
|
|
267
|
-
List of
|
|
307
|
+
List of closing events (empty if content is not active).
|
|
308
|
+
"""
|
|
309
|
+
if not self._content_active:
|
|
310
|
+
return []
|
|
311
|
+
|
|
312
|
+
events: list[BaseAgentRunEvent] = [
|
|
313
|
+
TextMessageCompletedEvent(
|
|
314
|
+
event=AgentRunEvent.TEXT_MESSAGE_COMPLETED,
|
|
315
|
+
message_id=self._current_message_id or "",
|
|
316
|
+
timestamp=timestamp,
|
|
317
|
+
metadata=None,
|
|
318
|
+
)
|
|
319
|
+
]
|
|
320
|
+
self._content_active = False
|
|
321
|
+
self._current_message_id = None
|
|
322
|
+
return events
|
|
323
|
+
|
|
324
|
+
def _handle_run_content(self, agno_event: Any, timestamp: Any) -> list[BaseAgentRunEvent]:
|
|
325
|
+
"""Handle RunEvent.run_content — the core state machine.
|
|
326
|
+
|
|
327
|
+
Rules:
|
|
328
|
+
- reasoning_content non-empty: reasoning data (close content if transitioning)
|
|
329
|
+
- content non-empty: text data (close reasoning if transitioning)
|
|
330
|
+
- reasoning_content == "": close reasoning if active
|
|
331
|
+
- content == "": close content if active
|
|
332
|
+
- None values: ignored
|
|
333
|
+
|
|
334
|
+
Returns:
|
|
335
|
+
List of DigitalKin events for this run_content chunk.
|
|
268
336
|
"""
|
|
269
337
|
events: list[BaseAgentRunEvent] = []
|
|
270
338
|
|
|
271
339
|
reasoning_content = getattr(agno_event, "reasoning_content", None)
|
|
272
340
|
content = agno_event.content
|
|
273
341
|
|
|
274
|
-
# ── Reasoning content
|
|
275
|
-
if reasoning_content:
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
342
|
+
# ── Reasoning content handling ──
|
|
343
|
+
if reasoning_content is not None:
|
|
344
|
+
events.extend(self._process_reasoning_content(reasoning_content, timestamp))
|
|
345
|
+
|
|
346
|
+
# ── Text content handling ──
|
|
347
|
+
if content is not None:
|
|
348
|
+
events.extend(self._process_text_content(content, timestamp))
|
|
349
|
+
|
|
350
|
+
# Edge case: neither reasoning_content nor content
|
|
351
|
+
if reasoning_content is None and content is None:
|
|
352
|
+
logger.debug("[DK STREAM-DEBUG => agno_adapter] run_content with no content, skipping")
|
|
353
|
+
|
|
354
|
+
return events
|
|
355
|
+
|
|
356
|
+
def _process_reasoning_content(self, reasoning_content: str, timestamp: Any) -> list[BaseAgentRunEvent]:
|
|
357
|
+
"""Process reasoning_content from a run_content event.
|
|
358
|
+
|
|
359
|
+
Returns:
|
|
360
|
+
List of reasoning lifecycle and content events.
|
|
361
|
+
"""
|
|
362
|
+
events: list[BaseAgentRunEvent] = []
|
|
287
363
|
|
|
364
|
+
if not reasoning_content:
|
|
365
|
+
# Empty string "" → signal to close reasoning
|
|
366
|
+
if self._reasoning_active:
|
|
367
|
+
events.extend(self._close_reasoning(timestamp))
|
|
368
|
+
return events
|
|
369
|
+
|
|
370
|
+
# Non-empty string → reasoning data
|
|
371
|
+
# Close text message if transitioning from content to reasoning
|
|
372
|
+
if self._content_active:
|
|
373
|
+
events.extend(self._close_content(timestamp))
|
|
374
|
+
|
|
375
|
+
# Auto-open reasoning on first chunk
|
|
376
|
+
if not self._reasoning_active:
|
|
377
|
+
self._current_reasoning_id = str(uuid.uuid4())
|
|
288
378
|
logger.info(
|
|
289
|
-
"[DK STREAM-DEBUG => agno_adapter] Reasoning
|
|
290
|
-
|
|
379
|
+
"[DK STREAM-DEBUG => agno_adapter] Reasoning auto-started from run_content, id=%s",
|
|
380
|
+
self._current_reasoning_id,
|
|
291
381
|
)
|
|
292
382
|
events.append(
|
|
293
|
-
|
|
294
|
-
event=AgentRunEvent.
|
|
295
|
-
|
|
383
|
+
ReasoningStartedEvent(
|
|
384
|
+
event=AgentRunEvent.REASONING_STARTED,
|
|
385
|
+
reasoning_id=self._current_reasoning_id,
|
|
296
386
|
timestamp=timestamp,
|
|
297
387
|
metadata=None,
|
|
298
388
|
)
|
|
299
389
|
)
|
|
390
|
+
self._reasoning_active = True
|
|
300
391
|
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
392
|
+
logger.info(
|
|
393
|
+
"[DK STREAM-DEBUG => agno_adapter] Reasoning content delta (len=%d)",
|
|
394
|
+
len(reasoning_content),
|
|
395
|
+
)
|
|
396
|
+
events.append(
|
|
397
|
+
ReasoningContentDeltaEvent(
|
|
398
|
+
event=AgentRunEvent.REASONING_CONTENT_DELTA,
|
|
399
|
+
delta=reasoning_content,
|
|
400
|
+
reasoning_id=self._current_reasoning_id,
|
|
401
|
+
timestamp=timestamp,
|
|
402
|
+
metadata=None,
|
|
403
|
+
)
|
|
404
|
+
)
|
|
405
|
+
return events
|
|
406
|
+
|
|
407
|
+
def _process_text_content(self, content: str, timestamp: Any) -> list[BaseAgentRunEvent]:
|
|
408
|
+
"""Process text content from a run_content event.
|
|
314
409
|
|
|
410
|
+
Returns:
|
|
411
|
+
List of text message lifecycle and content events.
|
|
412
|
+
"""
|
|
413
|
+
events: list[BaseAgentRunEvent] = []
|
|
414
|
+
|
|
415
|
+
if not content:
|
|
416
|
+
# Empty string "" → signal to close text message
|
|
417
|
+
if self._content_active:
|
|
418
|
+
events.extend(self._close_content(timestamp))
|
|
419
|
+
return events
|
|
420
|
+
|
|
421
|
+
# Non-empty string → text data
|
|
422
|
+
# Close reasoning if transitioning from reasoning to content
|
|
423
|
+
if self._reasoning_active:
|
|
424
|
+
logger.info("[DK STREAM-DEBUG => agno_adapter] Reasoning auto-completed (text content arrived)")
|
|
425
|
+
events.extend(self._close_reasoning(timestamp))
|
|
426
|
+
|
|
427
|
+
# Auto-open text message on first chunk
|
|
428
|
+
if not self._content_active:
|
|
429
|
+
self._current_message_id = str(uuid.uuid4())
|
|
315
430
|
events.append(
|
|
316
|
-
|
|
317
|
-
event=AgentRunEvent.
|
|
318
|
-
|
|
319
|
-
reasoning_content=None,
|
|
320
|
-
content_type=None,
|
|
431
|
+
TextMessageStartedEvent(
|
|
432
|
+
event=AgentRunEvent.TEXT_MESSAGE_STARTED,
|
|
433
|
+
message_id=self._current_message_id,
|
|
321
434
|
timestamp=timestamp,
|
|
322
435
|
metadata=None,
|
|
323
436
|
)
|
|
324
437
|
)
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
438
|
+
self._content_active = True
|
|
439
|
+
|
|
440
|
+
events.append(
|
|
441
|
+
RunContentEvent(
|
|
442
|
+
event=AgentRunEvent.RUN_CONTENT,
|
|
443
|
+
content=str(content),
|
|
444
|
+
message_id=self._current_message_id,
|
|
445
|
+
reasoning_content=None,
|
|
446
|
+
content_type=None,
|
|
447
|
+
timestamp=timestamp,
|
|
448
|
+
metadata=None,
|
|
449
|
+
)
|
|
450
|
+
)
|
|
330
451
|
return events
|