digitalkin 1.0.0.dev25__tar.gz → 1.0.2.dev0__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-1.0.0.dev25 → digitalkin-1.0.2.dev0}/PKG-INFO +8 -6
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/pyproject.toml +27 -26
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/__version__.py +1 -1
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/community/agno/__init__.py +16 -1
- digitalkin-1.0.2.dev0/src/digitalkin/community/agno/models.py +164 -0
- digitalkin-1.0.2.dev0/src/digitalkin/community/agno/module_toolkit.py +540 -0
- digitalkin-1.0.2.dev0/src/digitalkin/community/agno/toolkits/__init__.py +20 -0
- digitalkin-1.0.2.dev0/src/digitalkin/community/agno/toolkits/base.py +91 -0
- digitalkin-1.0.2.dev0/src/digitalkin/community/agno/toolkits/chat_history.py +298 -0
- digitalkin-1.0.2.dev0/src/digitalkin/community/agno/toolkits/defaults.py +57 -0
- digitalkin-1.0.2.dev0/src/digitalkin/community/agno/toolkits/registry.py +166 -0
- digitalkin-1.0.2.dev0/src/digitalkin/community/agno/toolkits/user_profile.py +59 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/core/task_manager/module_runner.py +39 -16
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/grpc_servers/gateway_servicer.py +14 -8
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/grpc_servers/module_server.py +2 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/models/grpc_servers/stream_error_codes.py +1 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/models/module/module_context.py +9 -1
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/models/module/tool_reference.py +9 -3
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/models/services/registry.py +23 -1
- digitalkin-1.0.2.dev0/src/digitalkin/models/settings/registry.py +29 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/modules/_base_module.py +26 -1
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/modules/archetype_module.py +2 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/modules/tool_module.py +4 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/services/communication/exceptions.py +4 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/services/registry/default_registry.py +97 -12
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/services/registry/grpc_registry.py +176 -17
- digitalkin-1.0.2.dev0/src/digitalkin/services/registry/registry_strategy.py +215 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/services/storage/grpc_storage.py +28 -1
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin.egg-info/PKG-INFO +8 -6
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin.egg-info/SOURCES.txt +8 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin.egg-info/requires.txt +8 -5
- digitalkin-1.0.0.dev25/src/digitalkin/community/agno/models.py +0 -28
- digitalkin-1.0.0.dev25/src/digitalkin/services/registry/registry_strategy.py +0 -128
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/LICENSE +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/README.md +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/examples/base_server/__init__.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/examples/base_server/mock/__init__.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/examples/base_server/mock/mock_pb2.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/examples/base_server/mock/mock_pb2_grpc.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/examples/base_server/server_async_insecure.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/examples/base_server/server_async_secure.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/examples/base_server/server_sync_insecure.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/examples/base_server/server_sync_secure.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/examples/bench_module/__init__.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/examples/bench_module/echo_module.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/examples/bench_module/models/__init__.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/examples/bench_module/models/input.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/examples/bench_module/models/output.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/examples/bench_module/models/secret.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/examples/bench_module/models/setup.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/examples/bench_module/server.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/examples/bench_module/triggers/__init__.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/examples/bench_module/triggers/message_trigger.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/examples/modules/__init__.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/examples/modules/archetype_with_tools_module.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/examples/modules/cpu_intensive_module.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/examples/modules/dynamic_setup_module.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/examples/modules/minimal_llm_module.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/examples/modules/text_transform_module.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/examples/monitoring/digitalkin_observability/__init__.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/examples/monitoring/digitalkin_observability/http_server.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/examples/monitoring/digitalkin_observability/interceptors.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/examples/monitoring/digitalkin_observability/metrics.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/examples/monitoring/digitalkin_observability/prometheus.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/examples/monitoring/tests/test_metrics.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/examples/redis_demo/client.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/examples/redis_demo/echo_module.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/examples/redis_demo/models/__init__.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/examples/redis_demo/models/input.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/examples/redis_demo/models/output.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/examples/redis_demo/models/secret.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/examples/redis_demo/models/setup.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/examples/redis_demo/server.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/examples/redis_demo/triggers/__init__.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/examples/redis_demo/triggers/message_trigger.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/examples/services/filesystem_module.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/examples/services/storage_module.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/setup.cfg +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/__init__.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/community/__init__.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/community/agno/agno_adapter.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/community/agno/agui_tools.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/community/agno/hitl.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/core/__init__.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/core/common/__init__.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/core/common/factories.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/core/exceptions.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/core/job_manager/__init__.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/core/job_manager/base_job_manager.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/core/job_manager/single_job_manager.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/core/profiling/__init__.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/core/profiling/step_timer.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/core/profiling/task_profiler.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/core/resilience/__init__.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/core/resilience/bulkhead.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/core/resilience/task_supervisor.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/core/task_manager/__init__.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/core/task_manager/base_task_manager.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/core/task_manager/local_task_manager.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/core/task_manager/redis/__init__.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/core/task_manager/redis/proto_streams.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/core/task_manager/redis/redis_client.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/core/task_manager/redis/redis_idempotency.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/core/task_manager/redis/redis_signal.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/core/task_manager/redis/redis_state.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/core/task_manager/remote_task_manager.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/core/task_manager/task_executor.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/core/task_manager/task_session.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/exceptions.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/grpc_servers/__init__.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/grpc_servers/_base_server.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/grpc_servers/exceptions.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/grpc_servers/interceptors/__init__.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/grpc_servers/interceptors/permission.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/grpc_servers/interceptors/request_ids.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/grpc_servers/m2m_call_registry.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/grpc_servers/module_servicer.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/grpc_servers/stream_registry.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/grpc_servers/stream_session.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/grpc_servers/utils/__init__.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/grpc_servers/utils/circuit_breaker.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/grpc_servers/utils/grpc_client_wrapper.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/grpc_servers/utils/grpc_error_handler.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/grpc_servers/utils/utility_schema_extender.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/grpc_servers/utils/validators.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/logger.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/mixins/__init__.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/mixins/agui_mixin.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/mixins/base_mixin.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/mixins/cost_mixin.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/mixins/file_history_mixin.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/mixins/filesystem_mixin.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/mixins/logger_mixin.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/mixins/storage_mixin.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/models/__init__.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/models/core/__init__.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/models/core/job_manager_models.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/models/core/redis.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/models/core/task_monitor.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/models/events/__init__.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/models/events/agent_events.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/models/grpc_servers/__init__.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/models/grpc_servers/circuit_breaker.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/models/grpc_servers/m2m.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/models/grpc_servers/models.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/models/grpc_servers/types.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/models/module/__init__.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/models/module/ag_ui.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/models/module/base_types.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/models/module/module.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/models/module/module_types.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/models/module/request_metadata.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/models/module/select_schema.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/models/module/setup_types.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/models/module/tool_cache.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/models/module/utility.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/models/services/__init__.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/models/services/cost.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/models/services/services.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/models/services/storage.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/models/settings/__init__.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/models/settings/gateway.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/models/settings/grpc_client.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/models/settings/log.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/models/settings/module.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/models/settings/profiling.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/models/settings/queue.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/models/settings/redis.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/models/settings/resilience.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/models/settings/server/__init__.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/models/settings/server/channel.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/models/settings/server/grpc.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/models/settings/server/server.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/models/settings/server/servicer.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/models/settings/task_manager.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/models/settings/utils/__init__.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/models/settings/utils/channel.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/models/utils/__init__.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/models/utils/dynamic_schema.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/modules/__init__.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/modules/trigger_handler.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/modules/triggers/__init__.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/modules/triggers/healthcheck_ping_trigger.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/modules/triggers/healthcheck_services_trigger.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/modules/triggers/healthcheck_status_trigger.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/py.typed +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/services/__init__.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/services/base_strategy.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/services/communication/__init__.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/services/communication/communication_strategy.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/services/communication/default_communication.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/services/communication/grpc_communication.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/services/cost/__init__.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/services/cost/cost_strategy.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/services/cost/default_cost.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/services/cost/exceptions.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/services/cost/grpc_cost.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/services/filesystem/__init__.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/services/filesystem/default_filesystem.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/services/filesystem/exceptions.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/services/filesystem/filesystem_strategy.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/services/filesystem/grpc_filesystem.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/services/identity/__init__.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/services/identity/default_identity.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/services/identity/identity_strategy.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/services/registry/__init__.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/services/registry/exceptions.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/services/registry/registry_models.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/services/secret/__init__.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/services/secret/default_secret.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/services/secret/exceptions.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/services/secret/grpc_secret.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/services/secret/secret_strategy.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/services/services_config.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/services/services_models.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/services/setup/__init__.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/services/setup/default_setup.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/services/setup/exceptions.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/services/setup/grpc_setup.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/services/setup/setup_strategy.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/services/storage/__init__.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/services/storage/default_storage.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/services/storage/exceptions.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/services/storage/storage_strategy.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/services/task_manager/__init__.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/services/task_manager/default_task_manager.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/services/task_manager/exceptions.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/services/task_manager/redis_task_manager.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/services/task_manager/task_manager_strategy.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/services/user_profile/__init__.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/services/user_profile/default_user_profile.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/services/user_profile/exceptions.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/services/user_profile/grpc_user_profile.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/services/user_profile/user_profile_strategy.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/utils/__init__.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/utils/arg_parser.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/utils/conditional_schema.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/utils/development_mode_action.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/utils/dynamic_schema.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/utils/exceptions.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/utils/llm_ready_schema.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/utils/package_discover.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/utils/proto_utils.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin/utils/schema_splitter.py +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin.egg-info/dependency_links.txt +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/src/digitalkin.egg-info/top_level.txt +0 -0
- {digitalkin-1.0.0.dev25 → digitalkin-1.0.2.dev0}/tests/test_exceptions.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: digitalkin
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.2.dev0
|
|
4
4
|
Summary: SDK to build kin used in DigitalKin
|
|
5
5
|
Author-email: "DigitalKin.ai" <contact@digitalkin.ai>
|
|
6
6
|
License: Attribution-NonCommercial-ShareAlike 4.0 International
|
|
@@ -453,14 +453,16 @@ Requires-Python: >=3.10
|
|
|
453
453
|
Description-Content-Type: text/markdown
|
|
454
454
|
License-File: LICENSE
|
|
455
455
|
Requires-Dist: ag-ui-protocol>=0.1.18
|
|
456
|
-
Requires-Dist: agentic-mesh-protocol==1.0.
|
|
456
|
+
Requires-Dist: agentic-mesh-protocol==1.0.1.dev2
|
|
457
457
|
Requires-Dist: anyio>=4.13.0
|
|
458
|
-
Requires-Dist: grpcio-health-checking==1.
|
|
459
|
-
Requires-Dist: grpcio-reflection==1.
|
|
460
|
-
Requires-Dist: grpcio-status==1.
|
|
461
|
-
Requires-Dist: pydantic>=2.12.4
|
|
458
|
+
Requires-Dist: grpcio-health-checking==1.82.1
|
|
459
|
+
Requires-Dist: grpcio-reflection==1.82.1
|
|
460
|
+
Requires-Dist: grpcio-status==1.82.1
|
|
462
461
|
Requires-Dist: pydantic-settings>=2.14.1
|
|
462
|
+
Requires-Dist: pydantic>=2.12.4
|
|
463
463
|
Requires-Dist: redis[hiredis]<9,>=7.4.0
|
|
464
|
+
Provides-Extra: agno
|
|
465
|
+
Requires-Dist: agno>=2.6; extra == "agno"
|
|
464
466
|
Provides-Extra: performance
|
|
465
467
|
Requires-Dist: uvloop>=0.21; extra == "performance"
|
|
466
468
|
Provides-Extra: profiling
|
|
@@ -28,18 +28,19 @@
|
|
|
28
28
|
|
|
29
29
|
dependencies = [
|
|
30
30
|
"ag-ui-protocol>=0.1.18",
|
|
31
|
-
"agentic-mesh-protocol==1.0.
|
|
31
|
+
"agentic-mesh-protocol==1.0.1.dev2",
|
|
32
32
|
"anyio>=4.13.0",
|
|
33
|
-
"grpcio-health-checking==1.
|
|
34
|
-
"grpcio-reflection==1.
|
|
35
|
-
"grpcio-status==1.
|
|
36
|
-
"pydantic>=2.12.4",
|
|
33
|
+
"grpcio-health-checking==1.82.1",
|
|
34
|
+
"grpcio-reflection==1.82.1",
|
|
35
|
+
"grpcio-status==1.82.1",
|
|
37
36
|
"pydantic-settings>=2.14.1",
|
|
37
|
+
"pydantic>=2.12.4",
|
|
38
38
|
"redis[hiredis]>=7.4.0,<9",
|
|
39
39
|
]
|
|
40
|
-
version = "1.0.
|
|
40
|
+
version = "1.0.2.dev0"
|
|
41
41
|
|
|
42
42
|
[project.optional-dependencies]
|
|
43
|
+
agno = [ "agno>=2.6" ]
|
|
43
44
|
performance = [ "uvloop>=0.21" ]
|
|
44
45
|
profiling = [
|
|
45
46
|
"pyinstrument>=5.1.2",
|
|
@@ -56,6 +57,22 @@
|
|
|
56
57
|
name = "DigitalKin.ai"
|
|
57
58
|
|
|
58
59
|
[dependency-groups]
|
|
60
|
+
tests = [
|
|
61
|
+
"fakeredis[lua]>=2.35.1",
|
|
62
|
+
"freezegun>=1.5.5",
|
|
63
|
+
"grpcio-testing>=1.81.0",
|
|
64
|
+
"hdrhistogram>=0.10.3",
|
|
65
|
+
"hypothesis>=6.152.8",
|
|
66
|
+
"objgraph>=3.6",
|
|
67
|
+
"psutil>=7.2.2",
|
|
68
|
+
"pytest-asyncio>=1.3.0",
|
|
69
|
+
"pytest-benchmark>=5.2.3",
|
|
70
|
+
"pytest-cov>=7.1.0",
|
|
71
|
+
"pytest-html>=4.2.0",
|
|
72
|
+
"pytest-json-report>=1.5.0",
|
|
73
|
+
"pytest-timeout>=2.4.0",
|
|
74
|
+
"pytest>=9.0.3",
|
|
75
|
+
]
|
|
59
76
|
dev = [
|
|
60
77
|
"build>=1.5.0",
|
|
61
78
|
"bump-my-version>=1.3.0",
|
|
@@ -67,7 +84,7 @@
|
|
|
67
84
|
"twine>=6.2.0",
|
|
68
85
|
"types-grpcio-health-checking>=1.0.0.20260518",
|
|
69
86
|
"types-grpcio-reflection>=1.0.0.20260508",
|
|
70
|
-
"types-grpcio>=1.
|
|
87
|
+
"types-grpcio>=1.82.1.20260711",
|
|
71
88
|
"types-protobuf>=7.34.1.20260518",
|
|
72
89
|
"typos>=1.48.0",
|
|
73
90
|
]
|
|
@@ -95,22 +112,6 @@
|
|
|
95
112
|
"mkdocstrings>=1.0.4",
|
|
96
113
|
"tomli>=2.4.1",
|
|
97
114
|
]
|
|
98
|
-
tests = [
|
|
99
|
-
"fakeredis[lua]>=2.35.1",
|
|
100
|
-
"freezegun>=1.5.5",
|
|
101
|
-
"grpcio-testing>=1.81.0",
|
|
102
|
-
"hdrhistogram>=0.10.3",
|
|
103
|
-
"hypothesis>=6.152.8",
|
|
104
|
-
"objgraph>=3.6",
|
|
105
|
-
"psutil>=7.2.2",
|
|
106
|
-
"pytest-asyncio>=1.3.0",
|
|
107
|
-
"pytest-benchmark>=4.0",
|
|
108
|
-
"pytest-cov>=7.1.0",
|
|
109
|
-
"pytest-html>=4.2.0",
|
|
110
|
-
"pytest-json-report>=1.5.0",
|
|
111
|
-
"pytest-timeout>=2.4.0",
|
|
112
|
-
"pytest>=9.0.3",
|
|
113
|
-
]
|
|
114
115
|
[tool.setuptools]
|
|
115
116
|
package-dir = { "" = "src" }
|
|
116
117
|
|
|
@@ -146,12 +147,12 @@
|
|
|
146
147
|
"buck-out",
|
|
147
148
|
"build",
|
|
148
149
|
"dist",
|
|
149
|
-
"scripts",
|
|
150
150
|
"docs/*",
|
|
151
151
|
"examples/*",
|
|
152
152
|
"factory.py",
|
|
153
153
|
"generate_certificates.py",
|
|
154
154
|
"node_modules",
|
|
155
|
+
"scripts",
|
|
155
156
|
"tests/*",
|
|
156
157
|
"venv",
|
|
157
158
|
]
|
|
@@ -268,10 +269,10 @@
|
|
|
268
269
|
skip-magic-trailing-comma = false
|
|
269
270
|
|
|
270
271
|
[tool.mypy]
|
|
271
|
-
exclude = [ "examples", "
|
|
272
|
+
exclude = [ "examples", "scripts", "tests" ]
|
|
272
273
|
ignore_missing_imports = true
|
|
273
|
-
warn_unused_ignores = true
|
|
274
274
|
warn_redundant_casts = true
|
|
275
|
+
warn_unused_ignores = true
|
|
275
276
|
|
|
276
277
|
[tool.pytest.ini_options]
|
|
277
278
|
|
|
@@ -12,6 +12,19 @@ on top of the Agno agent framework. Exports:
|
|
|
12
12
|
paused Agno run via the module's
|
|
13
13
|
:class:`~digitalkin.services.storage.StorageStrategy` and resumes it
|
|
14
14
|
when the front replies with a ``ToolMessage``.
|
|
15
|
+
- :class:`ToolCallMetadata`, :class:`ToolOutputMetadata` — metadata models
|
|
16
|
+
for module tool calls made through the toolkit.
|
|
17
|
+
|
|
18
|
+
``ModuleToolkit`` (Agno Toolkit wrapping a module's remote tools) requires the
|
|
19
|
+
optional ``agno`` dependency at import time and is therefore NOT exported here;
|
|
20
|
+
import it directly::
|
|
21
|
+
|
|
22
|
+
from digitalkin.community.agno.module_toolkit import ModuleToolkit
|
|
23
|
+
|
|
24
|
+
Default agent toolkits (``ChatHistoryTools``, ``UserProfileTools``,
|
|
25
|
+
``RegistryTools``, ``DefaultToolkits``) live in
|
|
26
|
+
:mod:`digitalkin.community.agno.toolkits` — imported separately because they
|
|
27
|
+
require the optional ``agno`` dependency at import time.
|
|
15
28
|
"""
|
|
16
29
|
|
|
17
30
|
from digitalkin.community.agno.agno_adapter import AgnoStreamAdapter
|
|
@@ -23,7 +36,7 @@ from digitalkin.community.agno.hitl import (
|
|
|
23
36
|
PausedRunRecord,
|
|
24
37
|
PausedRunStore,
|
|
25
38
|
)
|
|
26
|
-
from digitalkin.community.agno.models import PauseInfo
|
|
39
|
+
from digitalkin.community.agno.models import PauseInfo, ToolCallMetadata, ToolOutputMetadata
|
|
27
40
|
|
|
28
41
|
__all__ = [
|
|
29
42
|
"HITL_STORAGE_CONFIG",
|
|
@@ -34,4 +47,6 @@ __all__ = [
|
|
|
34
47
|
"PauseInfo",
|
|
35
48
|
"PausedRunRecord",
|
|
36
49
|
"PausedRunStore",
|
|
50
|
+
"ToolCallMetadata",
|
|
51
|
+
"ToolOutputMetadata",
|
|
37
52
|
]
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
"""Models for the Agno community integration."""
|
|
2
|
+
|
|
3
|
+
from typing import Any
|
|
4
|
+
|
|
5
|
+
from ag_ui.core.types import Message as AgUiMessage
|
|
6
|
+
from pydantic import BaseModel, Field
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class PauseInfo(BaseModel):
|
|
10
|
+
"""Summary of a paused Agno run.
|
|
11
|
+
|
|
12
|
+
Returned by :meth:`AgnoHitlRunner.run` and related methods whenever
|
|
13
|
+
the run paused on one or more external tool calls. Callers typically
|
|
14
|
+
use it to emit the AG-UI awaiting-tool-result event to the front.
|
|
15
|
+
|
|
16
|
+
``new_messages`` carries the AG-UI messages generated by Agno during
|
|
17
|
+
the paused run (user echoes, the assistant message with ``tool_calls``,
|
|
18
|
+
and any tool results emitted before the pause). It's provided because
|
|
19
|
+
Agno does not emit stream events from which the front can reconstruct
|
|
20
|
+
the assistant-with-tool-calls message — in particular, when the LLM
|
|
21
|
+
goes straight from reasoning to a frontend tool call without emitting
|
|
22
|
+
any text. Consumers typically push these messages to the front via a
|
|
23
|
+
:class:`~ag_ui.core.events.MessagesSnapshotEvent` so the client has an
|
|
24
|
+
authoritative view of the conversation.
|
|
25
|
+
"""
|
|
26
|
+
|
|
27
|
+
thread_id: str
|
|
28
|
+
run_id: str
|
|
29
|
+
pending_tool_call_ids: list[str]
|
|
30
|
+
new_messages: list[AgUiMessage] = Field(default_factory=list)
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
class ToolOutputMetadata(BaseModel):
|
|
34
|
+
"""Cost and execution metadata reported by a tool module itself.
|
|
35
|
+
|
|
36
|
+
Enables accurate cost aggregation across modules.
|
|
37
|
+
|
|
38
|
+
Attributes:
|
|
39
|
+
response_time_ms: Time taken for the API call(s) in milliseconds.
|
|
40
|
+
api_calls_made: Number of API calls made by the tool.
|
|
41
|
+
cost_estimate_usd: Estimated cost in USD.
|
|
42
|
+
tavily_credits_used: Tavily API credits consumed (if applicable).
|
|
43
|
+
search_depth: Search depth used (basic, advanced, etc.).
|
|
44
|
+
include_raw_content: Whether raw content was requested.
|
|
45
|
+
queries_count: Number of queries executed.
|
|
46
|
+
results_returned: Number of results returned.
|
|
47
|
+
urls_processed: Number of URLs processed (for extract operations).
|
|
48
|
+
"""
|
|
49
|
+
|
|
50
|
+
response_time_ms: float | None = Field(default=None, description="API response time in ms")
|
|
51
|
+
api_calls_made: int = Field(default=1, description="Number of API calls made")
|
|
52
|
+
cost_estimate_usd: float | None = Field(default=None, description="Estimated cost in USD")
|
|
53
|
+
tavily_credits_used: int | None = Field(default=None, description="Tavily credits consumed")
|
|
54
|
+
search_depth: str | None = Field(default=None, description="Search depth used")
|
|
55
|
+
include_raw_content: bool = Field(default=False, description="Whether raw content was requested")
|
|
56
|
+
queries_count: int = Field(default=1, description="Number of queries executed")
|
|
57
|
+
results_returned: int = Field(default=0, description="Number of results returned")
|
|
58
|
+
urls_processed: int = Field(default=0, description="Number of URLs processed")
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
class ToolCallMetadata(BaseModel):
|
|
62
|
+
"""Metadata from a module tool call including cost and timing information.
|
|
63
|
+
|
|
64
|
+
Attributes:
|
|
65
|
+
module_id: The SDK module ID that was called (e.g., "modules:tool_websearch").
|
|
66
|
+
success: Whether the tool call completed successfully.
|
|
67
|
+
duration_ms: Execution time in milliseconds.
|
|
68
|
+
cost_tracked: Whether cost metadata is available from the tool.
|
|
69
|
+
error: Error message if the call failed, None otherwise.
|
|
70
|
+
input_kwargs: The kwargs passed to the tool (for debugging).
|
|
71
|
+
output_summary: Brief summary of the output (truncated for logs).
|
|
72
|
+
tool_metadata: Metadata returned by the tool itself (cost, API calls, etc.).
|
|
73
|
+
"""
|
|
74
|
+
|
|
75
|
+
module_id: str = Field(..., description="The SDK module ID that was called")
|
|
76
|
+
success: bool = Field(..., description="Whether the tool call succeeded")
|
|
77
|
+
duration_ms: float = Field(..., description="Execution time in milliseconds")
|
|
78
|
+
cost_tracked: bool = Field(default=False, description="Whether cost metadata is available from tool")
|
|
79
|
+
error: str | None = Field(default=None, description="Error message if failed")
|
|
80
|
+
input_kwargs: dict[str, Any] | None = Field(
|
|
81
|
+
default=None,
|
|
82
|
+
description="Input kwargs passed to the tool for debugging",
|
|
83
|
+
)
|
|
84
|
+
output_summary: str | None = Field(
|
|
85
|
+
default=None,
|
|
86
|
+
description="Brief summary of the output (truncated)",
|
|
87
|
+
)
|
|
88
|
+
tool_metadata: ToolOutputMetadata | None = Field(
|
|
89
|
+
default=None,
|
|
90
|
+
description="Metadata returned by the tool module (cost, API calls, etc.)",
|
|
91
|
+
)
|
|
92
|
+
|
|
93
|
+
def to_success_dict(self) -> dict[str, Any]:
|
|
94
|
+
"""Convert metadata to dict for successful responses.
|
|
95
|
+
|
|
96
|
+
Returns:
|
|
97
|
+
Dictionary with success-relevant fields (error excluded).
|
|
98
|
+
"""
|
|
99
|
+
return self.model_dump(exclude={"error"})
|
|
100
|
+
|
|
101
|
+
def to_error_dict(self) -> dict[str, Any]:
|
|
102
|
+
"""Convert metadata to dict for error responses.
|
|
103
|
+
|
|
104
|
+
Returns:
|
|
105
|
+
Dictionary with error-relevant fields.
|
|
106
|
+
"""
|
|
107
|
+
return self.model_dump(include={"module_id", "success", "duration_ms", "error"})
|
|
108
|
+
|
|
109
|
+
def to_log_dict(self) -> dict[str, Any]:
|
|
110
|
+
"""Convert metadata to dict for logging.
|
|
111
|
+
|
|
112
|
+
Returns:
|
|
113
|
+
Dictionary suitable for log extra data, large kwargs truncated.
|
|
114
|
+
"""
|
|
115
|
+
data: dict[str, Any] = {
|
|
116
|
+
"module_id": self.module_id,
|
|
117
|
+
"success": self.success,
|
|
118
|
+
"duration_ms": self.duration_ms,
|
|
119
|
+
"cost_tracked": self.cost_tracked,
|
|
120
|
+
}
|
|
121
|
+
if self.error:
|
|
122
|
+
data["error"] = self.error
|
|
123
|
+
if self.input_kwargs:
|
|
124
|
+
max_len = 100
|
|
125
|
+
data["input_kwargs"] = {
|
|
126
|
+
k: (str(v)[:max_len] + "..." if len(str(v)) > max_len else v) for k, v in self.input_kwargs.items()
|
|
127
|
+
}
|
|
128
|
+
if self.output_summary:
|
|
129
|
+
data["output_summary"] = self.output_summary
|
|
130
|
+
if self.tool_metadata:
|
|
131
|
+
data["tool_metadata"] = self.tool_metadata.model_dump(exclude_none=True)
|
|
132
|
+
return data
|
|
133
|
+
|
|
134
|
+
@staticmethod
|
|
135
|
+
def extract_tool_metadata(output: dict[str, Any]) -> "ToolOutputMetadata | None":
|
|
136
|
+
"""Extract tool metadata from a tool's output if present.
|
|
137
|
+
|
|
138
|
+
Args:
|
|
139
|
+
output: The tool output dictionary.
|
|
140
|
+
|
|
141
|
+
Returns:
|
|
142
|
+
ToolOutputMetadata if metadata is present, None otherwise.
|
|
143
|
+
"""
|
|
144
|
+
if not isinstance(output, dict):
|
|
145
|
+
return None
|
|
146
|
+
|
|
147
|
+
metadata = output.get("metadata")
|
|
148
|
+
if not metadata or not isinstance(metadata, dict):
|
|
149
|
+
return None
|
|
150
|
+
|
|
151
|
+
try:
|
|
152
|
+
return ToolOutputMetadata(
|
|
153
|
+
response_time_ms=metadata.get("response_time_ms"),
|
|
154
|
+
api_calls_made=metadata.get("api_calls_made", 1),
|
|
155
|
+
cost_estimate_usd=metadata.get("cost_estimate_usd"),
|
|
156
|
+
tavily_credits_used=metadata.get("tavily_credits_used"),
|
|
157
|
+
search_depth=metadata.get("search_depth"),
|
|
158
|
+
include_raw_content=metadata.get("include_raw_content", False),
|
|
159
|
+
queries_count=metadata.get("queries_count", 1),
|
|
160
|
+
results_returned=metadata.get("results_returned", 0),
|
|
161
|
+
urls_processed=metadata.get("urls_processed", 0),
|
|
162
|
+
)
|
|
163
|
+
except Exception:
|
|
164
|
+
return None
|