digitalkin 0.3.5.dev9__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.dev9 → digitalkin-0.3.5.dev10}/PKG-INFO +1 -1
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/pyproject.toml +1 -1
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/__version__.py +1 -1
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/community/agno/agno_adapter.py +200 -94
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/mixins/agui_mixin.py +95 -176
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/models/events/__init__.py +4 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/models/events/agent_events.py +23 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin.egg-info/PKG-INFO +1 -1
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/LICENSE +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/README.md +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/examples/base_server/__init__.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/examples/base_server/mock/__init__.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/examples/base_server/mock/mock_pb2.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/examples/base_server/mock/mock_pb2_grpc.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/examples/base_server/server_async_insecure.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/examples/base_server/server_async_secure.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/examples/base_server/server_sync_insecure.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/examples/base_server/server_sync_secure.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/examples/modules/__init__.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/examples/modules/archetype_with_tools_module.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/examples/modules/cpu_intensive_module.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/examples/modules/dynamic_setup_module.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/examples/modules/minimal_llm_module.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/examples/modules/text_transform_module.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/examples/monitoring/digitalkin_observability/__init__.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/examples/monitoring/digitalkin_observability/http_server.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/examples/monitoring/digitalkin_observability/interceptors.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/examples/monitoring/digitalkin_observability/metrics.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/examples/monitoring/digitalkin_observability/prometheus.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/examples/monitoring/tests/test_metrics.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/examples/services/filesystem_module.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/examples/services/storage_module.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/setup.cfg +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/__init__.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/community/__init__.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/community/agno/__init__.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/core/__init__.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/core/common/__init__.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/core/common/factories.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/core/job_manager/__init__.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/core/job_manager/base_job_manager.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/core/job_manager/single_job_manager.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/core/job_manager/taskiq_broker.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/core/job_manager/taskiq_job_manager.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/core/profiling/__init__.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/core/profiling/asyncio_monitor.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/core/profiling/task_profiler.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/core/task_manager/__init__.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/core/task_manager/base_task_manager.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/core/task_manager/local_task_manager.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/core/task_manager/remote_task_manager.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/core/task_manager/task_executor.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/core/task_manager/task_session.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/grpc_servers/__init__.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/grpc_servers/_base_server.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/grpc_servers/module_server.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/grpc_servers/module_servicer.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/grpc_servers/utils/__init__.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/grpc_servers/utils/exceptions.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/grpc_servers/utils/grpc_client_wrapper.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/grpc_servers/utils/grpc_error_handler.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/grpc_servers/utils/utility_schema_extender.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/logger.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/mixins/__init__.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/mixins/base_mixin.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/mixins/callback_mixin.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/mixins/chat_history_mixin.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/mixins/cost_mixin.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/mixins/file_history_mixin.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/mixins/filesystem_mixin.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/mixins/logger_mixin.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/mixins/storage_mixin.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/models/__init__.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/models/core/__init__.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/models/core/job_manager_models.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/models/core/task_monitor.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/models/grpc_servers/__init__.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/models/grpc_servers/models.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/models/grpc_servers/types.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/models/module/__init__.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/models/module/ag_ui.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/models/module/base_types.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/models/module/module.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/models/module/module_context.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/models/module/module_types.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/models/module/request_metadata.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/models/module/select_schema.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/models/module/setup_types.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/models/module/tool_cache.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/models/module/tool_reference.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/models/module/utility.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/models/services/__init__.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/models/services/cost.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/models/services/registry.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/models/services/storage.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/modules/__init__.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/modules/_base_module.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/modules/archetype_module.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/modules/tool_module.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/modules/trigger_handler.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/modules/triggers/__init__.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/modules/triggers/healthcheck_ping_trigger.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/modules/triggers/healthcheck_services_trigger.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/modules/triggers/healthcheck_status_trigger.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/py.typed +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/services/__init__.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/services/agent/__init__.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/services/agent/agent_strategy.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/services/agent/default_agent.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/services/base_strategy.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/services/communication/__init__.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/services/communication/communication_strategy.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/services/communication/default_communication.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/services/communication/grpc_communication.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/services/cost/__init__.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/services/cost/cost_strategy.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/services/cost/default_cost.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/services/cost/grpc_cost.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/services/filesystem/__init__.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/services/filesystem/default_filesystem.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/services/filesystem/filesystem_strategy.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/services/filesystem/grpc_filesystem.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/services/identity/__init__.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/services/identity/default_identity.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/services/identity/identity_strategy.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/services/registry/__init__.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/services/registry/default_registry.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/services/registry/exceptions.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/services/registry/grpc_registry.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/services/registry/registry_models.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/services/registry/registry_strategy.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/services/services_config.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/services/services_models.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/services/setup/__init__.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/services/setup/default_setup.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/services/setup/grpc_setup.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/services/setup/setup_strategy.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/services/snapshot/__init__.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/services/snapshot/default_snapshot.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/services/snapshot/snapshot_strategy.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/services/storage/__init__.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/services/storage/default_storage.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/services/storage/grpc_storage.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/services/storage/storage_strategy.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/services/task_manager/__init__.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/services/task_manager/default_task_manager.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/services/task_manager/grpc_task_manager.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/services/task_manager/task_manager_strategy.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/services/user_profile/__init__.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/services/user_profile/default_user_profile.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/services/user_profile/grpc_user_profile.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/services/user_profile/user_profile_strategy.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/utils/__init__.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/utils/arg_parser.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/utils/conditional_schema.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/utils/development_mode_action.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/utils/dynamic_schema.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/utils/llm_ready_schema.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/utils/package_discover.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/utils/proto_utils.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin/utils/schema_splitter.py +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin.egg-info/SOURCES.txt +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin.egg-info/dependency_links.txt +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin.egg-info/requires.txt +0 -0
- {digitalkin-0.3.5.dev9 → digitalkin-0.3.5.dev10}/src/digitalkin.egg-info/top_level.txt +0 -0
{digitalkin-0.3.5.dev9 → 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,38 +177,27 @@ 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:
|
|
172
|
-
events
|
|
193
|
+
events = []
|
|
173
194
|
|
|
174
|
-
#
|
|
195
|
+
# Close both reasoning and content before tool calls
|
|
175
196
|
if self._reasoning_active:
|
|
176
197
|
logger.info("[DK STREAM-DEBUG => agno_adapter] Reasoning auto-completed (tool call started)")
|
|
177
|
-
events.
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
timestamp=timestamp,
|
|
181
|
-
metadata=None,
|
|
182
|
-
)
|
|
183
|
-
)
|
|
184
|
-
self._reasoning_active = False
|
|
198
|
+
events.extend(self._close_reasoning(timestamp))
|
|
199
|
+
if self._content_active:
|
|
200
|
+
events.extend(self._close_content(timestamp))
|
|
185
201
|
|
|
186
202
|
tool = getattr(agno_event, "tool", None)
|
|
187
203
|
tool_info = None
|
|
@@ -247,99 +263,189 @@ class AgnoStreamAdapter:
|
|
|
247
263
|
return []
|
|
248
264
|
|
|
249
265
|
def flush(self) -> list[BaseAgentRunEvent]:
|
|
250
|
-
"""Emit closing events
|
|
266
|
+
"""Emit closing events for any active sequences at end of stream.
|
|
251
267
|
|
|
252
268
|
Returns:
|
|
253
|
-
List of closing events (empty if
|
|
269
|
+
List of closing events (empty if nothing is active).
|
|
254
270
|
"""
|
|
255
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))
|
|
256
275
|
if self._reasoning_active:
|
|
257
276
|
logger.info("[DK STREAM-DEBUG => agno_adapter] Flushing: closing active reasoning")
|
|
258
|
-
events.
|
|
259
|
-
ReasoningCompletedEvent(
|
|
260
|
-
event=AgentRunEvent.REASONING_COMPLETED,
|
|
261
|
-
timestamp=None,
|
|
262
|
-
metadata=None,
|
|
263
|
-
)
|
|
264
|
-
)
|
|
265
|
-
self._reasoning_active = False
|
|
277
|
+
events.extend(self._close_reasoning(None))
|
|
266
278
|
return events
|
|
267
279
|
|
|
268
280
|
# ── Private Helpers ──────────────────────────────────────────────────
|
|
269
281
|
|
|
270
|
-
def
|
|
271
|
-
"""
|
|
282
|
+
def _close_reasoning(self, timestamp: Any) -> list[BaseAgentRunEvent]:
|
|
283
|
+
"""Close active reasoning sequence.
|
|
272
284
|
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
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
|
|
276
302
|
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
timestamp: The timestamp for the event.
|
|
303
|
+
def _close_content(self, timestamp: Any) -> list[BaseAgentRunEvent]:
|
|
304
|
+
"""Close active text message sequence.
|
|
280
305
|
|
|
281
306
|
Returns:
|
|
282
|
-
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.
|
|
283
336
|
"""
|
|
284
337
|
events: list[BaseAgentRunEvent] = []
|
|
285
338
|
|
|
286
339
|
reasoning_content = getattr(agno_event, "reasoning_content", None)
|
|
287
340
|
content = agno_event.content
|
|
288
341
|
|
|
289
|
-
# ── Reasoning content
|
|
290
|
-
if reasoning_content:
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
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.
|
|
302
358
|
|
|
359
|
+
Returns:
|
|
360
|
+
List of reasoning lifecycle and content events.
|
|
361
|
+
"""
|
|
362
|
+
events: list[BaseAgentRunEvent] = []
|
|
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())
|
|
303
378
|
logger.info(
|
|
304
|
-
"[DK STREAM-DEBUG => agno_adapter] Reasoning
|
|
305
|
-
|
|
379
|
+
"[DK STREAM-DEBUG => agno_adapter] Reasoning auto-started from run_content, id=%s",
|
|
380
|
+
self._current_reasoning_id,
|
|
306
381
|
)
|
|
307
382
|
events.append(
|
|
308
|
-
|
|
309
|
-
event=AgentRunEvent.
|
|
310
|
-
|
|
383
|
+
ReasoningStartedEvent(
|
|
384
|
+
event=AgentRunEvent.REASONING_STARTED,
|
|
385
|
+
reasoning_id=self._current_reasoning_id,
|
|
311
386
|
timestamp=timestamp,
|
|
312
387
|
metadata=None,
|
|
313
388
|
)
|
|
314
389
|
)
|
|
390
|
+
self._reasoning_active = True
|
|
315
391
|
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
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.
|
|
329
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())
|
|
330
430
|
events.append(
|
|
331
|
-
|
|
332
|
-
event=AgentRunEvent.
|
|
333
|
-
|
|
334
|
-
reasoning_content=None,
|
|
335
|
-
content_type=None,
|
|
431
|
+
TextMessageStartedEvent(
|
|
432
|
+
event=AgentRunEvent.TEXT_MESSAGE_STARTED,
|
|
433
|
+
message_id=self._current_message_id,
|
|
336
434
|
timestamp=timestamp,
|
|
337
435
|
metadata=None,
|
|
338
436
|
)
|
|
339
437
|
)
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
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
|
+
)
|
|
345
451
|
return events
|