agentkernel 0.9.4__tar.gz → 0.9.5__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.
- {agentkernel-0.9.4 → agentkernel-0.9.5}/PKG-INFO +5 -2
- {agentkernel-0.9.4 → agentkernel-0.9.5}/pyproject.toml +6 -2
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/core/__init__.py +2 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/core/base.py +14 -2
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/core/config.py +45 -1
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/core/event.py +16 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/core/model.py +35 -4
- agentkernel-0.9.5/src/agentkernel/core/realtime/__init__.py +8 -0
- agentkernel-0.9.5/src/agentkernel/core/realtime/pcm.py +46 -0
- agentkernel-0.9.5/src/agentkernel/core/realtime/runner.py +119 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/deployment/aws/containerized/akagentrunner.py +56 -3
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/deployment/aws/containerized/core/sqs_consumer.py +7 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/framework/adk/__init__.py +1 -1
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/framework/adk/adk.py +294 -6
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/framework/openai/__init__.py +1 -1
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/framework/openai/openai.py +277 -15
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/integration/adapter/__init__.py +6 -1
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/integration/adapter/base.py +104 -3
- agentkernel-0.9.5/src/agentkernel/integration/adapter/gateway.py +84 -0
- agentkernel-0.9.5/src/agentkernel/integration/adapter/registry.py +51 -0
- agentkernel-0.9.5/src/agentkernel/integration/livekit/__init__.py +14 -0
- agentkernel-0.9.5/src/agentkernel/integration/livekit/adapter.py +322 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/pipeline/agent_runner.py +43 -3
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/pipeline/consumer.py +15 -11
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/pipeline/envelope.py +4 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/pipeline/io_handler.py +31 -3
- agentkernel-0.9.5/src/agentkernel/pipeline/realtime_pool.py +545 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/pipeline/request_handler.py +10 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/pipeline/response_handler.py +71 -2
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/skills/ak-add-capabilities/SKILL.md +31 -31
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/skills/ak-add-capabilities/evals/evals.json +1 -1
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/skills/ak-add-integration/SKILL.md +8 -8
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/skills/ak-add-integration/evals/evals.json +1 -1
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/skills/ak-build/SKILL.md +1 -1
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/skills/ak-build/evals/evals.json +1 -1
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/skills/ak-cloud-deploy/SKILL.md +26 -26
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/skills/ak-cloud-deploy/evals/evals.json +1 -1
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/skills/ak-init/SKILL.md +2 -2
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/skills/ak-init/evals/evals.json +2 -2
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/skills/ak-test/SKILL.md +2 -2
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/skills/ak-test/evals/evals.json +1 -1
- {agentkernel-0.9.4 → agentkernel-0.9.5}/README.md +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/__init__.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/adk.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/agui.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/api/__init__.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/api/a2a/__init__.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/api/a2a/a2a.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/api/a2a/handler.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/api/handler.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/api/http.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/api/mcp/__init__.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/api/mcp/akmcp.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/auth/__init__.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/auth/authoriser.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/auth/handler.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/auth.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/aws.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/azure.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/cli/__init__.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/cli/ak.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/cli/cli.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/core/builder.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/core/chat_service.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/core/hooks.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/core/logger.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/core/module.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/core/multimodal/__init__.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/core/multimodal/factory.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/core/multimodal/hooks.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/core/multimodal/source.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/core/multimodal/storage/__init__.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/core/multimodal/storage/base.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/core/multimodal/storage/dynamodb.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/core/multimodal/storage/in_memory.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/core/multimodal/storage/redis.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/core/multimodal/storage/session_cache.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/core/multimodal/storage/storage_manager.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/core/multimodal/tools.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/core/paused_run.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/core/runtime.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/core/service.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/core/session/__init__.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/core/session/base.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/core/session/cosmosdb.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/core/session/dynamodb.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/core/session/firestore.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/core/session/in_memory.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/core/session/redis.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/core/session/redis_like.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/core/session/serde.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/core/session/valkey.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/core/tool.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/core/util/async_bridge.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/core/util/config_yaml_util.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/core/util/driver/__init__.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/core/util/driver/base.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/core/util/driver/cosmosdb.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/core/util/driver/dynamodb.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/core/util/driver/firestore.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/core/util/driver/redis.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/core/util/driver/redis_like.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/core/util/driver/s3.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/core/util/driver/valkey.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/core/util/error_util.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/core/util/factory.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/core/util/key_value_cache.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/core/util/pagination.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/core/util/picklable.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/crewai.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/deployment/__init__.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/deployment/aws/__init__.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/deployment/aws/containerized/__init__.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/deployment/aws/containerized/akoutputconsumer.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/deployment/aws/containerized/core/__init__.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/deployment/aws/containerized/core/api/__init__.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/deployment/aws/containerized/core/api/rest_api.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/deployment/aws/containerized/core/api/websocket_api.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/deployment/aws/containerized/ecs_io_handler.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/deployment/aws/core/__init__.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/deployment/aws/core/raw_queue_consumer.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/deployment/aws/core/response_store/__init__.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/deployment/aws/core/response_store/dynamodb.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/deployment/aws/core/response_store/factory.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/deployment/aws/core/response_store/redis.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/deployment/aws/core/response_store/valkey.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/deployment/aws/core/sqs_handler.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/deployment/aws/core/websocket_service.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/deployment/aws/serverless/__init__.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/deployment/aws/serverless/akagentrunner.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/deployment/aws/serverless/akauthorizer.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/deployment/aws/serverless/aklambda.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/deployment/aws/serverless/akresponsehandler.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/deployment/aws/serverless/akwsconnectionhandler.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/deployment/aws/serverless/core/__init__.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/deployment/aws/serverless/core/event_translator.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/deployment/aws/serverless/core/router/__init__.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/deployment/aws/serverless/core/router/common.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/deployment/aws/serverless/core/router/rest_lambda.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/deployment/aws/serverless/core/router/ws_lambda.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/deployment/aws/serverless/core/sqs_consumer.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/deployment/aws/serverless/core/webhook_host.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/deployment/azure/__init__.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/deployment/azure/akfunction.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/deployment/common/__init__.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/deployment/common/response_store.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/deployment/common/rest_handler.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/deployment/common/thread_runner.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/deployment/common/websocket_service.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/deployment/gcp/__init__.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/deployment/gcp/akauthorizer.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/deployment/gcp/akcloudrun.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/framework/__init__.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/framework/crewai/__init__.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/framework/crewai/crewai.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/framework/langgraph/__init__.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/framework/langgraph/langgraph.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/framework/pydanticai/__init__.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/framework/pydanticai/pydanticai.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/framework/smolagents/__init__.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/framework/smolagents/smolagents.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/gcp.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/gmail.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/guardrail/__init__.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/guardrail/bedrock.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/guardrail/guardrail.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/guardrail/openai.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/guardrail/walledai.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/instagram.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/integration/__init__.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/integration/adapter/factory.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/integration/adapter/meta.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/integration/adapter/poller.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/integration/adapter/producer.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/integration/adapter/route_matcher.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/integration/adapter/routes.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/integration/adapter/testing.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/integration/adapter/webhook.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/integration/agui/__init__.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/integration/agui/handler.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/integration/agui/mapping.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/integration/agui/run_input.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/integration/agui/state.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/integration/gmail/README.md +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/integration/gmail/__init__.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/integration/gmail/adapter.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/integration/instagram/README.md +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/integration/instagram/__init__.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/integration/instagram/adapter.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/integration/messenger/README.md +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/integration/messenger/__init__.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/integration/messenger/adapter.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/integration/slack/README.md +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/integration/slack/__init__.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/integration/slack/adapter.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/integration/teams/README.md +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/integration/teams/__init__.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/integration/teams/adapter.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/integration/telegram/README.md +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/integration/telegram/__init__.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/integration/telegram/adapter.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/integration/thread/__init__.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/integration/thread/manager.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/integration/thread/model.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/integration/thread/naming.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/integration/thread/recorder.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/integration/thread/store/__init__.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/integration/thread/store/base.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/integration/thread/store/cosmosdb.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/integration/thread/store/dynamodb.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/integration/thread/store/firestore.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/integration/thread/store/in_memory.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/integration/thread/store/redis.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/integration/thread/store/redis_like.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/integration/thread/store/valkey.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/integration/thread/thread_chat.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/integration/whatsapp/README.md +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/integration/whatsapp/__init__.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/integration/whatsapp/adapter.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/knowledgebase/__init__.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/knowledgebase/base.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/knowledgebase/chroma.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/knowledgebase/document.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/knowledgebase/errors.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/knowledgebase/knowledgebuilder.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/knowledgebase/model.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/knowledgebase/neo4j.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/knowledgebase/okf/__init__.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/knowledgebase/okf/capability.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/knowledgebase/okf/manager.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/knowledgebase/okf/model.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/knowledgebase/okf/parser.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/knowledgebase/okf/prompts.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/knowledgebase/okf/roles.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/knowledgebase/okf/tools.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/knowledgebase/starburst.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/knowledgebase/store/__init__.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/knowledgebase/store/base.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/knowledgebase/store/local.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/knowledgebase/store/s3.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/knowledgebase/testing.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/langgraph.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/mcp.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/messenger.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/openai.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/pipeline/__init__.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/pipeline/integration_delivery.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/pipeline/producer.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/pipeline/response_store/__init__.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/pipeline/response_store/base.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/pipeline/response_store/dynamodb.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/pipeline/response_store/factory.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/pipeline/response_store/in_memory.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/pipeline/response_store/redis.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/pipeline/response_store/valkey.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/pipeline/testing.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/pipeline/thread_runner.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/pipeline/transport/__init__.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/pipeline/transport/base.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/pipeline/transport/bookkeeping.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/pipeline/transport/in_memory.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/pipeline/transport/kafka.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/pipeline/transport/nats.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/pipeline/transport/sqs.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/pipeline/ws/__init__.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/pipeline/ws/base.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/pipeline/ws/endpoint.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/pipeline/ws/gateway.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/pipeline/ws/handler.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/pipeline/ws/push.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/pipeline/ws/registry.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/pydanticai.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/sandbox/__init__.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/sandbox/base.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/sandbox/broker/__init__.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/sandbox/broker/base.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/sandbox/broker/embedded.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/sandbox/broker/queue.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/sandbox/broker/queue_worker.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/sandbox/broker/thread.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/sandbox/broker/wire.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/sandbox/broker/worker.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/sandbox/errors.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/sandbox/factory.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/sandbox/hooks.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/sandbox/manager.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/sandbox/model.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/sandbox/principal.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/sandbox/providers/__init__.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/sandbox/providers/daytona.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/sandbox/providers/docker.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/sandbox/providers/e2b.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/sandbox/providers/ec2_ssm.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/sandbox/providers/kubernetes.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/sandbox/providers/local_subprocess.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/sandbox/testing.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/sandbox/tools.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/schedule/__init__.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/schedule/errors.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/schedule/handler.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/schedule/manager.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/schedule/model.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/schedule/provider/__init__.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/schedule/provider/base.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/schedule/provider/eventbridge.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/schedule/provider/local.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/schedule/store/__init__.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/schedule/store/base.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/schedule/store/dynamodb.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/schedule/store/in_memory.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/schedule/store/redis.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/schedule/store/redis_like.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/schedule/store/valkey.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/schedule/timing.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/schedule/tools.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/secret/__init__.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/secret/base.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/secret/cache.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/secret/errors.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/secret/factory.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/secret/manager.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/secret/providers/__init__.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/secret/providers/aws_ssm.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/secret/providers/env.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/secret/testing.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/skills/__init__.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/skills/skills.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/slack.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/smolagents.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/teams.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/telegram.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/test/__init__.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/test/config.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/test/core/__init__.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/test/core/evaluator/__init__.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/test/core/evaluator/base.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/test/core/evaluator/deepeval.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/test/core/evaluator/jev.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/test/core/evaluator/opik.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/test/test.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/thread.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/trace/__init__.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/trace/base.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/trace/cloudwatch/__init__.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/trace/cloudwatch/adk.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/trace/cloudwatch/cloudwatch.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/trace/cloudwatch/crewai.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/trace/cloudwatch/langgraph.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/trace/cloudwatch/openai.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/trace/cloudwatch/pydanticai.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/trace/cloudwatch/sigv4.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/trace/cloudwatch/smolagents.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/trace/langfuse/__init__.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/trace/langfuse/adk.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/trace/langfuse/crewai.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/trace/langfuse/langfuse.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/trace/langfuse/langgraph.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/trace/langfuse/openai.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/trace/langfuse/pydanticai.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/trace/langfuse/smolagents.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/trace/logfire/__init__.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/trace/logfire/adk.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/trace/logfire/crewai.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/trace/logfire/langgraph.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/trace/logfire/logfire.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/trace/logfire/openai.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/trace/logfire/pydanticai.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/trace/logfire/smolagents.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/trace/openllmetry/__init__.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/trace/openllmetry/adk.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/trace/openllmetry/crewai.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/trace/openllmetry/langgraph.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/trace/openllmetry/openai.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/trace/openllmetry/openllmetry.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/trace/openllmetry/pydanticai.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/trace/openllmetry/smolagents.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/trace/trace.py +0 -0
- {agentkernel-0.9.4 → agentkernel-0.9.5}/src/agentkernel/whatsapp.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: agentkernel
|
|
3
|
-
Version: 0.9.
|
|
3
|
+
Version: 0.9.5
|
|
4
4
|
Summary: Agent Kernel - Unified AI Agents Runtime
|
|
5
5
|
Author: Yaala Labs
|
|
6
6
|
Author-email: Yaala Labs <agentkernel@yaalalabs.com>
|
|
@@ -52,6 +52,8 @@ Requires-Dist: langgraph-prebuilt~=1.1.0 ; extra == 'langgraph'
|
|
|
52
52
|
Requires-Dist: langchain~=1.3.10 ; extra == 'langgraph'
|
|
53
53
|
Requires-Dist: langchain-community~=0.4.1 ; extra == 'langgraph'
|
|
54
54
|
Requires-Dist: litellm~=1.89.2 ; extra == 'langgraph'
|
|
55
|
+
Requires-Dist: livekit-api>=0.4.0 ; extra == 'livekit'
|
|
56
|
+
Requires-Dist: livekit>=0.18.0 ; extra == 'livekit'
|
|
55
57
|
Requires-Dist: logfire>=3.0 ; extra == 'logfire'
|
|
56
58
|
Requires-Dist: fastmcp>=3.2.0,<4.0.0 ; extra == 'mcp'
|
|
57
59
|
Requires-Dist: httpx>=0.27.0 ; extra == 'messenger'
|
|
@@ -60,7 +62,7 @@ Requires-Dist: litellm>=1.74.9 ; extra == 'multimodal'
|
|
|
60
62
|
Requires-Dist: python-multipart>=0.0.12 ; extra == 'multimodal'
|
|
61
63
|
Requires-Dist: nats-py>=2.15.0 ; extra == 'nats'
|
|
62
64
|
Requires-Dist: neo4j>=5.0.0 ; extra == 'neo4j'
|
|
63
|
-
Requires-Dist: openai-agents>=0.
|
|
65
|
+
Requires-Dist: openai-agents>=0.20.0 ; extra == 'openai'
|
|
64
66
|
Requires-Dist: openinference-instrumentation-openai-agents>=1.4.0 ; extra == 'openai'
|
|
65
67
|
Requires-Dist: openai-guardrails>=0.2.1 ; extra == 'openai'
|
|
66
68
|
Requires-Dist: traceloop-sdk>=0.61.0 ; extra == 'openllmetry'
|
|
@@ -118,6 +120,7 @@ Provides-Extra: kafka
|
|
|
118
120
|
Provides-Extra: kubernetes
|
|
119
121
|
Provides-Extra: langfuse
|
|
120
122
|
Provides-Extra: langgraph
|
|
123
|
+
Provides-Extra: livekit
|
|
121
124
|
Provides-Extra: logfire
|
|
122
125
|
Provides-Extra: mcp
|
|
123
126
|
Provides-Extra: messenger
|
|
@@ -4,7 +4,7 @@ build-backend = "uv_build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "agentkernel"
|
|
7
|
-
version = "0.9.
|
|
7
|
+
version = "0.9.5"
|
|
8
8
|
description = "Agent Kernel - Unified AI Agents Runtime"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.12,<3.14"
|
|
@@ -61,6 +61,10 @@ pydanticai = [
|
|
|
61
61
|
]
|
|
62
62
|
cli = [
|
|
63
63
|
|
|
64
|
+
]
|
|
65
|
+
livekit = [
|
|
66
|
+
"livekit-api>=0.4.0",
|
|
67
|
+
"livekit>=0.18.0",
|
|
64
68
|
]
|
|
65
69
|
aws = [
|
|
66
70
|
"boto3>=1.41.4",
|
|
@@ -111,7 +115,7 @@ trino = [
|
|
|
111
115
|
]
|
|
112
116
|
|
|
113
117
|
openai = [
|
|
114
|
-
"openai-agents>=0.
|
|
118
|
+
"openai-agents>=0.20.0",
|
|
115
119
|
"openinference-instrumentation-openai-agents>=1.4.0",
|
|
116
120
|
"openai-guardrails>=0.2.1",
|
|
117
121
|
]
|
|
@@ -12,6 +12,7 @@ except importlib.metadata.PackageNotFoundError:
|
|
|
12
12
|
__version__ = "0.1.0"
|
|
13
13
|
|
|
14
14
|
from .base import Agent, Runner, RunOptionsFactory, Session
|
|
15
|
+
from .realtime import RealtimeRunner
|
|
15
16
|
from .event import (
|
|
16
17
|
MessageEnd,
|
|
17
18
|
MessageStart,
|
|
@@ -34,6 +35,7 @@ from .model import (
|
|
|
34
35
|
AgentRequestFile,
|
|
35
36
|
AgentRequestImage,
|
|
36
37
|
AgentRequestText,
|
|
38
|
+
AgentRequestVoice,
|
|
37
39
|
AgentReply,
|
|
38
40
|
AgentReplyAny,
|
|
39
41
|
AgentReplyText,
|
|
@@ -8,7 +8,7 @@ import pickle
|
|
|
8
8
|
from abc import ABC, abstractmethod
|
|
9
9
|
from collections.abc import AsyncGenerator, Awaitable, Callable, Iterable, Iterator, Mapping
|
|
10
10
|
from enum import Enum
|
|
11
|
-
from typing import TYPE_CHECKING, Any, ClassVar, Self, cast
|
|
11
|
+
from typing import TYPE_CHECKING, Any, ClassVar, Self, Type, cast
|
|
12
12
|
|
|
13
13
|
from .event import StreamEvent
|
|
14
14
|
from .hooks import PostHook, PreHook
|
|
@@ -19,6 +19,9 @@ from .util.picklable import first_unpicklable_entry
|
|
|
19
19
|
if TYPE_CHECKING:
|
|
20
20
|
from .paused_run import PausedRun
|
|
21
21
|
|
|
22
|
+
if TYPE_CHECKING: # pragma: no cover: typing only; avoids a base <-> realtime import cycle
|
|
23
|
+
from .realtime import RealtimeRunner
|
|
24
|
+
|
|
22
25
|
_log = logging.getLogger("ak.core.runner")
|
|
23
26
|
|
|
24
27
|
|
|
@@ -517,14 +520,16 @@ class Agent(ABC):
|
|
|
517
520
|
"""
|
|
518
521
|
return cls.current_agent.get()
|
|
519
522
|
|
|
520
|
-
def __init__(self, name: str, runner: Runner):
|
|
523
|
+
def __init__(self, name: str, runner: Runner, realtime_runner_cls: "Type[RealtimeRunner] | None" = None):
|
|
521
524
|
"""
|
|
522
525
|
Initializes an Agent instance.
|
|
523
526
|
:param name: Name of the agent.
|
|
524
527
|
:param runner: Runner associated with the agent.
|
|
528
|
+
:param realtime_runner_cls: Optional realtime runner class for WebSocket connections.
|
|
525
529
|
"""
|
|
526
530
|
self._name: str = name
|
|
527
531
|
self._runner: Runner = runner
|
|
532
|
+
self._realtime_runner_cls: "Type[RealtimeRunner] | None" = realtime_runner_cls
|
|
528
533
|
self._pre_hooks: list[PreHook] = []
|
|
529
534
|
self._post_hooks: list[PostHook] = []
|
|
530
535
|
self._run_options: dict[str, Any] = {}
|
|
@@ -551,6 +556,13 @@ class Agent(ABC):
|
|
|
551
556
|
"""
|
|
552
557
|
return self._runner
|
|
553
558
|
|
|
559
|
+
@property
|
|
560
|
+
def realtime_runner_cls(self) -> "Type[RealtimeRunner] | None":
|
|
561
|
+
"""
|
|
562
|
+
Returns the realtime runner class associated with the agent, if any.
|
|
563
|
+
"""
|
|
564
|
+
return self._realtime_runner_cls
|
|
565
|
+
|
|
554
566
|
@property
|
|
555
567
|
def pre_hooks(self) -> list[PreHook]:
|
|
556
568
|
"""
|
|
@@ -249,6 +249,19 @@ class _GmailConfig(BaseModel):
|
|
|
249
249
|
)
|
|
250
250
|
|
|
251
251
|
|
|
252
|
+
class _LiveKitConfig(BaseModel):
|
|
253
|
+
"""LiveKit realtime voice gateway settings.
|
|
254
|
+
|
|
255
|
+
Bound like every other block, from YAML or ``AK_LIVEKIT__<FIELD>`` env vars (e.g.
|
|
256
|
+
``AK_LIVEKIT__URL``, ``AK_LIVEKIT__API_KEY``, ``AK_LIVEKIT__API_SECRET``).
|
|
257
|
+
"""
|
|
258
|
+
|
|
259
|
+
agent: str = Field(default="", description="Default agent to use for LiveKit interactions")
|
|
260
|
+
url: str = Field(default="", description="LiveKit server WebSocket URL")
|
|
261
|
+
api_key: str = Field(default="", description="LiveKit API Key")
|
|
262
|
+
api_secret: str = Field(default="", description="LiveKit API Secret")
|
|
263
|
+
|
|
264
|
+
|
|
252
265
|
class _MultimodalStorageRedisConfig(_RedisConfig):
|
|
253
266
|
ttl: int = Field(default=604800, description="Attachment TTL in seconds")
|
|
254
267
|
prefix: str = Field(default="ak:attachments:", description="Key prefix for attachment keys")
|
|
@@ -652,10 +665,36 @@ class _LoggingConfig(BaseModel):
|
|
|
652
665
|
system: _LogLevelConfig = Field(description="System logging configuration", default_factory=_LogLevelConfig)
|
|
653
666
|
|
|
654
667
|
|
|
668
|
+
class _RealtimeConfig(BaseModel):
|
|
669
|
+
"""Realtime-mode playback pacing.
|
|
670
|
+
|
|
671
|
+
Outbound model audio is paced so the edge holds ``playback_lead_ms`` of audio ahead of
|
|
672
|
+
wall-clock. A larger lead absorbs the per-chunk latency and jitter of a store-and-forward
|
|
673
|
+
broker (SQS adds more than Kafka/NATS), trading a little added latency for smoother playback;
|
|
674
|
+
a small lead is right for a low-latency transport. Only read when ``execution.mode`` is
|
|
675
|
+
``realtime``.
|
|
676
|
+
"""
|
|
677
|
+
|
|
678
|
+
playback_lead_ms: int = Field(
|
|
679
|
+
default=50,
|
|
680
|
+
ge=0,
|
|
681
|
+
description="Audio buffered ahead of playback at the edge, in milliseconds (higher = smoother over higher-latency transports)",
|
|
682
|
+
)
|
|
683
|
+
input_batch_ms: int = Field(
|
|
684
|
+
default=100,
|
|
685
|
+
ge=0,
|
|
686
|
+
description="Mic audio batched into this many milliseconds per input-queue message; 0 passes every frame through (lowest input latency, many more messages)",
|
|
687
|
+
)
|
|
688
|
+
|
|
689
|
+
|
|
655
690
|
class _ExecutionConfig(BaseModel):
|
|
656
691
|
mode: Optional[ExecutionMode] = Field(
|
|
657
692
|
default=None,
|
|
658
|
-
description=
|
|
693
|
+
description=(
|
|
694
|
+
"Execution mode: rest_sync for synchronous REST, rest_async for asynchronous REST, "
|
|
695
|
+
"stream for token streaming over WebSocket, async for whole-reply WebSocket delivery, "
|
|
696
|
+
"realtime for persistent realtime sockets (e.g. the LiveKit voice gateway)"
|
|
697
|
+
),
|
|
659
698
|
)
|
|
660
699
|
# The default carries the transport type explicitly: `type` is mandatory inside a declared
|
|
661
700
|
# queues block, and a config that declares no block at all still runs single-process on the
|
|
@@ -668,6 +707,10 @@ class _ExecutionConfig(BaseModel):
|
|
|
668
707
|
default=None,
|
|
669
708
|
description="Response storage configuration for async execution mode",
|
|
670
709
|
)
|
|
710
|
+
realtime: _RealtimeConfig = Field(
|
|
711
|
+
default_factory=_RealtimeConfig,
|
|
712
|
+
description="Realtime execution playback pacing (used only when execution.mode is realtime)",
|
|
713
|
+
)
|
|
671
714
|
|
|
672
715
|
|
|
673
716
|
class _SandboxIdentityConfig(BaseModel):
|
|
@@ -967,6 +1010,7 @@ class AKConfig(YamlBaseSettingsModified):
|
|
|
967
1010
|
default_factory=_MCPConfig,
|
|
968
1011
|
)
|
|
969
1012
|
slack: _SlackConfig = Field(description="Slack related configurations", default_factory=_SlackConfig)
|
|
1013
|
+
livekit: _LiveKitConfig = Field(description="LiveKit related configurations", default_factory=_LiveKitConfig)
|
|
970
1014
|
whatsapp: _WhatsAppConfig = Field(description="WhatsApp related configurations", default_factory=_WhatsAppConfig)
|
|
971
1015
|
messenger: _MessengerConfig = Field(description="Facebook Messenger related configurations", default_factory=_MessengerConfig)
|
|
972
1016
|
instagram: _InstagramConfig = Field(description="Instagram Business API related configurations", default_factory=_InstagramConfig)
|
|
@@ -131,6 +131,20 @@ class ReasoningEnd(StreamEventBase):
|
|
|
131
131
|
message_id: str
|
|
132
132
|
|
|
133
133
|
|
|
134
|
+
class AudioDelta(StreamEventBase):
|
|
135
|
+
"""A fragment of audio returned by the model."""
|
|
136
|
+
|
|
137
|
+
type: Literal["audio_delta"] = "audio_delta"
|
|
138
|
+
message_id: str
|
|
139
|
+
content: str
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
class Interrupt(StreamEventBase):
|
|
143
|
+
"""The user interrupted the model's in-progress turn (barge-in)."""
|
|
144
|
+
|
|
145
|
+
type: Literal["interrupt"] = "interrupt"
|
|
146
|
+
|
|
147
|
+
|
|
134
148
|
class PausedInterruption(BaseModel):
|
|
135
149
|
"""
|
|
136
150
|
One thing a human must decide before a paused run can continue.
|
|
@@ -190,6 +204,8 @@ type StreamEvent = Annotated[
|
|
|
190
204
|
ReasoningStart,
|
|
191
205
|
ReasoningDelta,
|
|
192
206
|
ReasoningEnd,
|
|
207
|
+
AudioDelta,
|
|
208
|
+
Interrupt,
|
|
193
209
|
RunPaused,
|
|
194
210
|
],
|
|
195
211
|
Field(discriminator="type"),
|
|
@@ -70,6 +70,23 @@ class AgentRequestAny(BaseModel):
|
|
|
70
70
|
type: Literal["other"] = "other"
|
|
71
71
|
|
|
72
72
|
|
|
73
|
+
class AgentRequestVoice(BaseModel):
|
|
74
|
+
"""
|
|
75
|
+
AgentRequestVoice encapsulates a voice request to an agent
|
|
76
|
+
|
|
77
|
+
audio_data: str : This should be base64 encoded string or url
|
|
78
|
+
name: str : name of the voice clip
|
|
79
|
+
type: Literal["voice"]
|
|
80
|
+
mime_type: str | None = None : Optional. The IANA standard MIME type of the voice clip
|
|
81
|
+
"""
|
|
82
|
+
|
|
83
|
+
prompt: str = ""
|
|
84
|
+
audio_data: str
|
|
85
|
+
name: str
|
|
86
|
+
type: Literal["voice"] = "voice"
|
|
87
|
+
mime_type: str | None = None
|
|
88
|
+
|
|
89
|
+
|
|
73
90
|
class AgentRequestAttachmentRef(BaseModel):
|
|
74
91
|
"""
|
|
75
92
|
AgentRequestAttachmentRef references an attachment whose bytes are already
|
|
@@ -185,11 +202,15 @@ class AgentResumeRequestAny(_ResumeDecisions):
|
|
|
185
202
|
type: Literal["resume"] = "resume"
|
|
186
203
|
|
|
187
204
|
|
|
188
|
-
type AgentRequest = Union[
|
|
205
|
+
type AgentRequest = Union[
|
|
206
|
+
AgentRequestText, AgentRequestFile, AgentRequestImage, AgentRequestVoice, AgentRequestAny, AgentRequestAttachmentRef, AgentResumeRequestAny
|
|
207
|
+
]
|
|
189
208
|
type AgentReply = Union[AgentReplyText, AgentReplyImage, AgentReplyAny]
|
|
190
209
|
|
|
191
210
|
AgentRequestUnion = Annotated[
|
|
192
|
-
Union[
|
|
211
|
+
Union[
|
|
212
|
+
AgentRequestText, AgentRequestFile, AgentRequestImage, AgentRequestVoice, AgentRequestAny, AgentRequestAttachmentRef, AgentResumeRequestAny
|
|
213
|
+
],
|
|
193
214
|
Field(discriminator="type"),
|
|
194
215
|
]
|
|
195
216
|
|
|
@@ -273,14 +294,24 @@ class AgentPausedReplyAny(AgentReplyAny):
|
|
|
273
294
|
|
|
274
295
|
|
|
275
296
|
class ExecutionMode(str, Enum):
|
|
276
|
-
"""
|
|
277
|
-
|
|
297
|
+
"""How a request is executed and how its reply is delivered.
|
|
298
|
+
|
|
299
|
+
The mode is a process-level configuration value (``execution.mode``), read wherever a
|
|
300
|
+
component must branch on it; it is never carried on a request.
|
|
301
|
+
|
|
302
|
+
- ``REST_SYNC`` / ``REST_ASYNC``: the reply is written to the response store and read back
|
|
303
|
+
over REST.
|
|
304
|
+
- ``ASYNC``: WebSocket delivery, whole replies.
|
|
305
|
+
- ``STREAM``: token streaming (``StreamAgentRunner``), delivered over WebSocket.
|
|
306
|
+
- ``REALTIME``: a persistent model socket (voice), streamed and delivered through an
|
|
307
|
+
integration adapter such as the LiveKit gateway.
|
|
278
308
|
"""
|
|
279
309
|
|
|
280
310
|
REST_SYNC = "rest_sync"
|
|
281
311
|
REST_ASYNC = "rest_async"
|
|
282
312
|
STREAM = "stream"
|
|
283
313
|
ASYNC = "async"
|
|
314
|
+
REALTIME = "realtime"
|
|
284
315
|
|
|
285
316
|
|
|
286
317
|
class StreamChunk(BaseModel):
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"""Core building blocks for realtime (persistent-socket) execution.
|
|
2
|
+
|
|
3
|
+
The framework-agnostic contract every realtime adapter implements, plus the shared PCM16 helpers
|
|
4
|
+
(the edge sample rate and a resampler) the pipeline and the edge both use.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from .pcm import EDGE_SAMPLE_RATE, PCM16Resampler
|
|
8
|
+
from .runner import RealtimeRunner
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"""PCM16 audio helpers shared by the realtime edge and the framework adapters.
|
|
2
|
+
|
|
3
|
+
The realtime edge (e.g. the LiveKit gateway) carries PCM16 mono audio at a single rate in both
|
|
4
|
+
directions. A model adapter declares the rates its model wants, and the pipeline converts. Keeping
|
|
5
|
+
the rate and the resampler here gives every layer one source of truth, without naming any vendor.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
import array
|
|
9
|
+
import sys
|
|
10
|
+
|
|
11
|
+
# PCM16 mono, in and out: the rate the realtime edge carries audio at end to end.
|
|
12
|
+
EDGE_SAMPLE_RATE = 24000
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class PCM16Resampler:
|
|
16
|
+
"""Converts little-endian mono PCM16 audio between sample rates.
|
|
17
|
+
|
|
18
|
+
The pipeline uses it at the one place each direction crosses a rate boundary: edge to model
|
|
19
|
+
input, and model output to edge, so no adapter resamples.
|
|
20
|
+
"""
|
|
21
|
+
|
|
22
|
+
@staticmethod
|
|
23
|
+
def resample(data: bytes, source_rate: int, target_rate: int) -> bytes:
|
|
24
|
+
"""Linearly resample ``data`` from ``source_rate`` to ``target_rate``."""
|
|
25
|
+
if not data or source_rate == target_rate:
|
|
26
|
+
return data
|
|
27
|
+
samples = array.array("h")
|
|
28
|
+
samples.frombytes(data[: len(data) - (len(data) % 2)])
|
|
29
|
+
if not samples:
|
|
30
|
+
return b""
|
|
31
|
+
if sys.byteorder == "big":
|
|
32
|
+
samples.byteswap()
|
|
33
|
+
|
|
34
|
+
ratio = source_rate / target_rate
|
|
35
|
+
out_count = int(len(samples) / ratio)
|
|
36
|
+
out = array.array("h", bytes(out_count * 2))
|
|
37
|
+
for i in range(out_count):
|
|
38
|
+
position = i * ratio
|
|
39
|
+
left = int(position)
|
|
40
|
+
right = min(left + 1, len(samples) - 1)
|
|
41
|
+
fraction = position - left
|
|
42
|
+
out[i] = int(samples[left] + (samples[right] - samples[left]) * fraction)
|
|
43
|
+
|
|
44
|
+
if sys.byteorder == "big":
|
|
45
|
+
out.byteswap()
|
|
46
|
+
return out.tobytes()
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from abc import abstractmethod
|
|
4
|
+
from collections.abc import AsyncGenerator
|
|
5
|
+
from typing import TYPE_CHECKING, Any, Callable
|
|
6
|
+
|
|
7
|
+
from ..base import Agent, Runner, Session
|
|
8
|
+
from ..event import StreamEvent
|
|
9
|
+
from ..model import AgentReply, AgentRequest
|
|
10
|
+
from .pcm import EDGE_SAMPLE_RATE
|
|
11
|
+
|
|
12
|
+
if TYPE_CHECKING: # typing only; ..tool imports ..base, so this avoids a cycle
|
|
13
|
+
from ..tool import ToolContext
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class RealtimeRunner(Runner):
|
|
17
|
+
"""Base class for framework adapters handling realtime streaming via persistent
|
|
18
|
+
WebSocket/WebRTC connections (e.g. OpenAI Realtime API).
|
|
19
|
+
|
|
20
|
+
``input_sample_rate`` and ``output_sample_rate`` are the PCM16 mono rates the model wants. The
|
|
21
|
+
pipeline converts between these and :data:`~agentkernel.core.realtime.pcm.EDGE_SAMPLE_RATE`, so
|
|
22
|
+
an adapter never resamples and no adapter hardcodes the edge's rate.
|
|
23
|
+
|
|
24
|
+
The realtime pool creates one instance per session connection, so an instance may keep that
|
|
25
|
+
connection's socket and state on ``self``. The pool owns everything around the model socket
|
|
26
|
+
(audio pacing, barge-in decisions, tool execution scopes, queue emission); an adapter only
|
|
27
|
+
talks to the model and reports what it does through the ``callback`` given to :meth:`connect`,
|
|
28
|
+
which is why an adapter never imports pipeline types.
|
|
29
|
+
|
|
30
|
+
Bring your own adapter by passing its class as ``realtime_runner_cls`` to the framework's
|
|
31
|
+
``Module``.
|
|
32
|
+
"""
|
|
33
|
+
|
|
34
|
+
input_sample_rate: int = EDGE_SAMPLE_RATE
|
|
35
|
+
output_sample_rate: int = EDGE_SAMPLE_RATE
|
|
36
|
+
|
|
37
|
+
async def run(self, agent: Any, session: Session, requests: list[AgentRequest]) -> AgentReply:
|
|
38
|
+
"""Not supported for realtime runners."""
|
|
39
|
+
raise NotImplementedError("Realtime runners do not support unary run().")
|
|
40
|
+
|
|
41
|
+
async def stream(self, agent: Any, session: Session, requests: list[AgentRequest]) -> AsyncGenerator[StreamEvent, None]:
|
|
42
|
+
"""Not supported for realtime runners."""
|
|
43
|
+
raise NotImplementedError("Realtime runners do not support unary stream().")
|
|
44
|
+
yield
|
|
45
|
+
|
|
46
|
+
@abstractmethod
|
|
47
|
+
async def connect(self, session: Session, agent: "Agent", callback: Callable) -> None:
|
|
48
|
+
"""
|
|
49
|
+
Establishes a persistent socket connection to the framework's Realtime API backend.
|
|
50
|
+
|
|
51
|
+
The pool relies on these rules:
|
|
52
|
+
|
|
53
|
+
- Report model events through ``callback`` **in the order the model sent them**: the pool
|
|
54
|
+
paces audio and orders ``done`` / ``interrupt`` behind it on that basis.
|
|
55
|
+
- ``callback`` is a coroutine function; await every call.
|
|
56
|
+
- If connecting fails, close anything already opened before raising: the pool drops a
|
|
57
|
+
connection that failed to connect without calling :meth:`disconnect`.
|
|
58
|
+
- Report a socket that fails while connected as ``error``, but not a close caused by
|
|
59
|
+
:meth:`disconnect`.
|
|
60
|
+
|
|
61
|
+
:param session: The session to bind this connection to.
|
|
62
|
+
:param agent: The agent instance.
|
|
63
|
+
:param callback: The event callback from the pool, awaited as ``callback(event_type, data)``:
|
|
64
|
+
|
|
65
|
+
- ``audio_delta``: ``{"delta": <base64 PCM16 at output_sample_rate>, "message_id": str}``
|
|
66
|
+
- ``transcript_delta``: ``{"delta": <text>, "message_id": str}``
|
|
67
|
+
- ``tool_call``: ``{"call_id": str, "name": str, "arguments": <JSON string>}``; the pool
|
|
68
|
+
then calls :meth:`execute_tool` and :meth:`send_tool_result`
|
|
69
|
+
- ``done``: ``{"status": ...}``, the end of a model turn
|
|
70
|
+
- ``error``: ``{"message": str}``, the socket failed; the pool tells the user and
|
|
71
|
+
replaces the connection
|
|
72
|
+
- ``interrupt``: ``{}``, the user spoke while the model was responding
|
|
73
|
+
- ``speech_started``: ``{}``, the user spoke outside a response; the pool treats it as a
|
|
74
|
+
barge-in only while it still holds audio the user has not heard
|
|
75
|
+
"""
|
|
76
|
+
raise NotImplementedError()
|
|
77
|
+
|
|
78
|
+
@abstractmethod
|
|
79
|
+
async def append_audio(self, base64_audio: str) -> None:
|
|
80
|
+
"""Appends audio to the model's input buffer, at :attr:`input_sample_rate`."""
|
|
81
|
+
raise NotImplementedError()
|
|
82
|
+
|
|
83
|
+
@abstractmethod
|
|
84
|
+
async def send_text(self, text: str) -> None:
|
|
85
|
+
"""Sends a text message and requests a response."""
|
|
86
|
+
raise NotImplementedError()
|
|
87
|
+
|
|
88
|
+
@abstractmethod
|
|
89
|
+
async def send_tool_result(self, call_id: str, result: str) -> None:
|
|
90
|
+
"""Sends a tool execution result back to the model."""
|
|
91
|
+
raise NotImplementedError()
|
|
92
|
+
|
|
93
|
+
@abstractmethod
|
|
94
|
+
async def execute_tool(self, name: str, arguments: str, context: "ToolContext", call_id: str) -> str:
|
|
95
|
+
"""Executes the named tool with JSON ``arguments`` and returns its string result.
|
|
96
|
+
|
|
97
|
+
Owned by the adapter because both the tool object and the context it needs are
|
|
98
|
+
framework-native: the OpenAI SDK expects its own ``ToolContext`` built around the run
|
|
99
|
+
context, and ADK injects a ``ToolContext`` (session state, actions) into tools that
|
|
100
|
+
declare one. The adapter activates ``context`` the way its framework expects; the
|
|
101
|
+
caller only constructs it.
|
|
102
|
+
|
|
103
|
+
:param name: Tool name, matching the model's function call.
|
|
104
|
+
:param arguments: Raw JSON argument string the model emitted.
|
|
105
|
+
:param context: The Agent Kernel tool context for this call.
|
|
106
|
+
:param call_id: The model's function-call id (frameworks correlate the response by it).
|
|
107
|
+
:return: The tool result as a string.
|
|
108
|
+
"""
|
|
109
|
+
raise NotImplementedError()
|
|
110
|
+
|
|
111
|
+
@abstractmethod
|
|
112
|
+
async def disconnect(self) -> None:
|
|
113
|
+
"""
|
|
114
|
+
Closes the active persistent socket connection.
|
|
115
|
+
|
|
116
|
+
Must be safe to call more than once, and after a :meth:`connect` that failed or never ran:
|
|
117
|
+
the pool calls it on idle eviction, on a failed socket, and at shutdown.
|
|
118
|
+
"""
|
|
119
|
+
raise NotImplementedError()
|
|
@@ -6,6 +6,9 @@ import logging
|
|
|
6
6
|
from ....core.chat_service import ChatService
|
|
7
7
|
from ....core.config import AKConfig, ExecutionMode
|
|
8
8
|
from ....core.model import BaseRunRequest, StreamChunk
|
|
9
|
+
from ....pipeline.realtime_pool import RealtimeConnectionPool
|
|
10
|
+
from ....pipeline.thread_runner import ThreadRunner
|
|
11
|
+
from ....pipeline.transport.base import QueueTransportFactory
|
|
9
12
|
from ..core.sqs_handler import SQSHandler
|
|
10
13
|
from .core import ECSSQSConsumer
|
|
11
14
|
|
|
@@ -163,10 +166,13 @@ class ECSAgentRunner(ECSSQSConsumer):
|
|
|
163
166
|
|
|
164
167
|
@classmethod
|
|
165
168
|
def run(cls) -> None:
|
|
166
|
-
"""Dispatch to ECSStreamAgentRunner
|
|
169
|
+
"""Dispatch to ECSStreamAgentRunner or ECSRealtimeAgentRunner based on execution.mode."""
|
|
167
170
|
# cls check avoids redirect loops when a subclass (e.g. ECSStreamAgentRunner) calls this via inheritance.
|
|
168
|
-
if cls is ECSAgentRunner
|
|
169
|
-
|
|
171
|
+
if cls is ECSAgentRunner:
|
|
172
|
+
if cls._config.execution.mode == ExecutionMode.STREAM:
|
|
173
|
+
return ECSStreamAgentRunner.run()
|
|
174
|
+
elif cls._config.execution.mode == ExecutionMode.REALTIME:
|
|
175
|
+
return ECSRealtimeAgentRunner.run()
|
|
170
176
|
return super().run()
|
|
171
177
|
|
|
172
178
|
|
|
@@ -277,3 +283,50 @@ class ECSStreamAgentRunner(ECSAgentRunner):
|
|
|
277
283
|
)
|
|
278
284
|
except Exception:
|
|
279
285
|
cls._log.exception("Failed to send permanent-failure stream chunk to output queue")
|
|
286
|
+
|
|
287
|
+
|
|
288
|
+
class ECSRealtimeAgentRunner(ECSAgentRunner):
|
|
289
|
+
"""
|
|
290
|
+
ECS Agent Runner for REALTIME execution mode — polls the Input Queue and forwards
|
|
291
|
+
audio/text chunks to the RealtimeConnectionPool.
|
|
292
|
+
|
|
293
|
+
The ECS equivalent of pipeline.agent_runner.RealtimeAgentRunner.
|
|
294
|
+
"""
|
|
295
|
+
|
|
296
|
+
_log = logging.getLogger("ak.ecs.realtimeagentrunner")
|
|
297
|
+
|
|
298
|
+
@classmethod
|
|
299
|
+
def _get_extra_tasks(cls) -> list[ThreadRunner.Task]:
|
|
300
|
+
pool = RealtimeConnectionPool.initialize()
|
|
301
|
+
return [pool.get_task()]
|
|
302
|
+
|
|
303
|
+
@classmethod
|
|
304
|
+
def on_permanent_failure(cls, record: dict) -> None:
|
|
305
|
+
"""Tell the room its input failed, as a marked error chunk its edge can deliver. Catches own exceptions."""
|
|
306
|
+
cls._log.error(f"Permanent failure for message {record.get('MessageId')}")
|
|
307
|
+
try:
|
|
308
|
+
record_attributes = cls._get_record_attributes(raw_queue_message=record)
|
|
309
|
+
attributes = {**SQSHandler.get_message_custom_attributes(record), "request_id": record_attributes["request_id"]}
|
|
310
|
+
if record_attributes.get("user_id"):
|
|
311
|
+
attributes["user_id"] = record_attributes["user_id"]
|
|
312
|
+
dedup_id = record_attributes.get("message_deduplication_id")
|
|
313
|
+
RealtimeConnectionPool.send_permanent_failure(
|
|
314
|
+
QueueTransportFactory.create(),
|
|
315
|
+
attributes,
|
|
316
|
+
record_attributes["message_group_id"],
|
|
317
|
+
f"{dedup_id}-error" if dedup_id else None,
|
|
318
|
+
f"Failed to process message after {cls._config.execution.queues.input.max_receive_count} retries",
|
|
319
|
+
)
|
|
320
|
+
except Exception:
|
|
321
|
+
cls._log.exception("Failed to send permanent-failure error chunk to output queue")
|
|
322
|
+
|
|
323
|
+
@classmethod
|
|
324
|
+
def process_message(cls, record: dict) -> None:
|
|
325
|
+
receive_count = record.get("Attributes", {}).get("ApproximateReceiveCount", "1")
|
|
326
|
+
body = BaseRunRequest.model_validate(json.loads(record["Body"]))
|
|
327
|
+
record_attributes = cls._get_record_attributes(raw_queue_message=record, body=body)
|
|
328
|
+
request_id = record_attributes["request_id"]
|
|
329
|
+
RealtimeConnectionPool.initialize().dispatch(
|
|
330
|
+
body, request_id, record_attributes.get("user_id"), SQSHandler.get_message_custom_attributes(record), cls._get_chat_service()
|
|
331
|
+
)
|
|
332
|
+
cls._log.debug(f"[REALTIME CHUNK] request_id={request_id} (receive_count={receive_count})")
|
|
@@ -13,6 +13,7 @@ import boto3
|
|
|
13
13
|
from .....core.config import AKConfig
|
|
14
14
|
from .....pipeline.consumer import ConsumerLoop
|
|
15
15
|
from .....pipeline.envelope import QueueMessage
|
|
16
|
+
from .....pipeline.thread_runner import ThreadRunner
|
|
16
17
|
from .....pipeline.transport.base import TransportConsumer
|
|
17
18
|
from ...core.raw_queue_consumer import RawQueueConsumer
|
|
18
19
|
|
|
@@ -155,6 +156,11 @@ class ECSSQSConsumer(RawQueueConsumer):
|
|
|
155
156
|
else:
|
|
156
157
|
cls.process_message(record)
|
|
157
158
|
|
|
159
|
+
@classmethod
|
|
160
|
+
def _get_extra_tasks(cls) -> List[ThreadRunner.Task]:
|
|
161
|
+
"""Additional background tasks to run alongside the queue consumers."""
|
|
162
|
+
return []
|
|
163
|
+
|
|
158
164
|
@classmethod
|
|
159
165
|
def _build_consumer_loop(cls) -> ConsumerLoop:
|
|
160
166
|
"""Bind a ConsumerLoop to this class's SQS surface; built per call so subclass overrides apply."""
|
|
@@ -167,6 +173,7 @@ class ECSSQSConsumer(RawQueueConsumer):
|
|
|
167
173
|
consumer_factory=lambda: _ECSRecordConsumer(cls),
|
|
168
174
|
thread_name_prefix="sqs-consumer",
|
|
169
175
|
logger=cls._log,
|
|
176
|
+
extra_tasks=cls._get_extra_tasks(),
|
|
170
177
|
)
|
|
171
178
|
|
|
172
179
|
@classmethod
|