agentkernel 0.9.0__tar.gz → 0.9.2__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.0 → agentkernel-0.9.2}/PKG-INFO +10 -6
- {agentkernel-0.9.0 → agentkernel-0.9.2}/README.md +6 -4
- {agentkernel-0.9.0 → agentkernel-0.9.2}/pyproject.toml +5 -2
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/api/handler.py +2 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/api/http.py +20 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/core/__init__.py +1 -1
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/core/chat_service.py +48 -40
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/core/config.py +28 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/core/hooks.py +47 -7
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/core/model.py +15 -2
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/core/multimodal/storage/__init__.py +10 -8
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/core/multimodal/storage/base.py +78 -69
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/core/multimodal/storage/dynamodb.py +3 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/core/multimodal/storage/redis.py +3 -0
- agentkernel-0.9.2/src/agentkernel/core/multimodal/storage/storage_manager.py +307 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/core/runtime.py +106 -22
- agentkernel-0.9.2/src/agentkernel/core/util/async_bridge.py +150 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/deployment/aws/containerized/ecs_io_handler.py +13 -3
- agentkernel-0.9.2/src/agentkernel/integration/adapter/__init__.py +46 -0
- agentkernel-0.9.2/src/agentkernel/integration/adapter/base.py +218 -0
- agentkernel-0.9.2/src/agentkernel/integration/adapter/factory.py +99 -0
- agentkernel-0.9.2/src/agentkernel/integration/adapter/meta.py +142 -0
- agentkernel-0.9.2/src/agentkernel/integration/adapter/poller.py +105 -0
- agentkernel-0.9.2/src/agentkernel/integration/adapter/producer.py +100 -0
- agentkernel-0.9.2/src/agentkernel/integration/adapter/testing.py +157 -0
- agentkernel-0.9.2/src/agentkernel/integration/adapter/webhook.py +82 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/integration/gmail/README.md +307 -307
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/integration/gmail/__init__.py +10 -10
- agentkernel-0.9.2/src/agentkernel/integration/gmail/adapter.py +497 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/integration/instagram/README.md +5 -5
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/integration/instagram/__init__.py +1 -1
- agentkernel-0.9.2/src/agentkernel/integration/instagram/adapter.py +190 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/integration/messenger/README.md +7 -7
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/integration/messenger/__init__.py +1 -1
- agentkernel-0.9.2/src/agentkernel/integration/messenger/adapter.py +183 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/integration/slack/README.md +9 -8
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/integration/slack/__init__.py +1 -1
- agentkernel-0.9.2/src/agentkernel/integration/slack/adapter.py +285 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/integration/teams/README.md +1 -1
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/integration/teams/__init__.py +1 -1
- agentkernel-0.9.0/src/agentkernel/integration/teams/teams_chat.py → agentkernel-0.9.2/src/agentkernel/integration/teams/adapter.py +246 -268
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/integration/telegram/README.md +241 -241
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/integration/telegram/__init__.py +10 -10
- agentkernel-0.9.2/src/agentkernel/integration/telegram/adapter.py +309 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/integration/thread/__init__.py +4 -3
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/integration/thread/manager.py +17 -44
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/integration/thread/thread_chat.py +104 -4
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/integration/whatsapp/README.md +9 -9
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/integration/whatsapp/__init__.py +1 -1
- agentkernel-0.9.2/src/agentkernel/integration/whatsapp/adapter.py +287 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/pipeline/__init__.py +2 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/pipeline/agent_runner.py +81 -6
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/pipeline/envelope.py +3 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/pipeline/io_handler.py +63 -8
- agentkernel-0.9.2/src/agentkernel/pipeline/producer.py +50 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/pipeline/request_handler.py +35 -18
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/pipeline/response_handler.py +64 -3
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/skills/ak-add-capabilities/SKILL.md +35 -31
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/skills/ak-add-capabilities/evals/evals.json +1 -1
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/skills/ak-add-integration/SKILL.md +48 -38
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/skills/ak-add-integration/evals/evals.json +40 -22
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/skills/ak-build/SKILL.md +1 -1
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/skills/ak-build/evals/evals.json +1 -1
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/skills/ak-cloud-deploy/SKILL.md +50 -76
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/skills/ak-cloud-deploy/evals/evals.json +2 -1
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/skills/ak-init/SKILL.md +2 -2
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/skills/ak-init/evals/evals.json +2 -2
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/skills/ak-test/SKILL.md +86 -11
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/skills/ak-test/evals/evals.json +3 -3
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/test/config.py +1 -1
- {agentkernel-0.9.0/src/agentkernel/test/core/akevaluators → agentkernel-0.9.2/src/agentkernel/test/core/evaluator}/base.py +2 -2
- {agentkernel-0.9.0/src/agentkernel/test/core/akevaluators → agentkernel-0.9.2/src/agentkernel/test/core/evaluator}/deepeval.py +4 -4
- agentkernel-0.9.2/src/agentkernel/test/core/evaluator/opik.py +92 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/test/test.py +14 -10
- agentkernel-0.9.0/src/agentkernel/core/multimodal/storage/storage_manager.py +0 -172
- agentkernel-0.9.0/src/agentkernel/integration/gmail/gmail_chat.py +0 -625
- agentkernel-0.9.0/src/agentkernel/integration/instagram/instagram_chat.py +0 -410
- agentkernel-0.9.0/src/agentkernel/integration/messenger/messenger_chat.py +0 -396
- agentkernel-0.9.0/src/agentkernel/integration/slack/slack_chat.py +0 -317
- agentkernel-0.9.0/src/agentkernel/integration/telegram/telegram_chat.py +0 -499
- agentkernel-0.9.0/src/agentkernel/integration/whatsapp/whatsapp_chat.py +0 -447
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/adk.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/agui.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/api/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/api/a2a/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/api/a2a/a2a.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/api/a2a/handler.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/api/mcp/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/api/mcp/akmcp.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/auth/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/auth/authoriser.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/auth/handler.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/auth.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/aws.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/azure.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/cli/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/cli/ak.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/cli/cli.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/core/base.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/core/builder.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/core/event.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/core/logger.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/core/module.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/core/multimodal/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/core/multimodal/factory.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/core/multimodal/hooks.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/core/multimodal/source.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/core/multimodal/storage/in_memory.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/core/multimodal/storage/session_cache.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/core/multimodal/tools.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/core/service.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/core/session/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/core/session/base.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/core/session/cosmosdb.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/core/session/dynamodb.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/core/session/firestore.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/core/session/in_memory.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/core/session/redis.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/core/session/redis_like.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/core/session/serde.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/core/session/valkey.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/core/tool.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/core/util/config_yaml_util.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/core/util/driver/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/core/util/driver/base.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/core/util/driver/cosmosdb.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/core/util/driver/dynamodb.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/core/util/driver/firestore.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/core/util/driver/redis.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/core/util/driver/redis_like.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/core/util/driver/valkey.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/core/util/error_util.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/core/util/factory.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/core/util/key_value_cache.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/core/util/pagination.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/crewai.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/deployment/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/deployment/aws/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/deployment/aws/containerized/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/deployment/aws/containerized/akagentrunner.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/deployment/aws/containerized/akoutputconsumer.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/deployment/aws/containerized/core/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/deployment/aws/containerized/core/api/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/deployment/aws/containerized/core/api/rest_api.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/deployment/aws/containerized/core/api/websocket_api.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/deployment/aws/containerized/core/sqs_consumer.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/deployment/aws/core/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/deployment/aws/core/raw_queue_consumer.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/deployment/aws/core/response_store/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/deployment/aws/core/response_store/dynamodb.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/deployment/aws/core/response_store/factory.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/deployment/aws/core/response_store/redis.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/deployment/aws/core/response_store/valkey.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/deployment/aws/core/sqs_handler.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/deployment/aws/core/websocket_service.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/deployment/aws/serverless/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/deployment/aws/serverless/akagentrunner.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/deployment/aws/serverless/akauthorizer.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/deployment/aws/serverless/aklambda.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/deployment/aws/serverless/akresponsehandler.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/deployment/aws/serverless/akwsconnectionhandler.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/deployment/aws/serverless/core/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/deployment/aws/serverless/core/router/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/deployment/aws/serverless/core/router/common.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/deployment/aws/serverless/core/router/rest_lambda.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/deployment/aws/serverless/core/router/ws_lambda.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/deployment/aws/serverless/core/sqs_consumer.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/deployment/azure/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/deployment/azure/akfunction.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/deployment/common/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/deployment/common/response_store.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/deployment/common/rest_handler.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/deployment/common/thread_runner.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/deployment/common/websocket_service.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/deployment/gcp/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/deployment/gcp/akauthorizer.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/deployment/gcp/akcloudrun.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/framework/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/framework/adk/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/framework/adk/adk.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/framework/crewai/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/framework/crewai/crewai.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/framework/langgraph/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/framework/langgraph/langgraph.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/framework/openai/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/framework/openai/openai.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/framework/pydanticai/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/framework/pydanticai/pydanticai.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/framework/smolagents/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/framework/smolagents/smolagents.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/gcp.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/gmail.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/guardrail/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/guardrail/bedrock.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/guardrail/guardrail.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/guardrail/openai.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/guardrail/walledai.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/instagram.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/integration/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/integration/agui/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/integration/agui/handler.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/integration/agui/mapping.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/integration/agui/run_input.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/integration/agui/state.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/integration/thread/model.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/integration/thread/naming.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/integration/thread/recorder.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/integration/thread/store/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/integration/thread/store/base.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/integration/thread/store/cosmosdb.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/integration/thread/store/dynamodb.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/integration/thread/store/firestore.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/integration/thread/store/in_memory.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/integration/thread/store/redis.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/integration/thread/store/redis_like.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/integration/thread/store/valkey.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/knowledgebase/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/knowledgebase/base.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/knowledgebase/chroma.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/knowledgebase/knowledgebuilder.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/knowledgebase/neo4j.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/knowledgebase/starburst.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/langgraph.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/mcp.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/messenger.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/openai.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/pipeline/consumer.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/pipeline/response_store/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/pipeline/response_store/base.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/pipeline/response_store/dynamodb.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/pipeline/response_store/factory.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/pipeline/response_store/in_memory.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/pipeline/response_store/redis.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/pipeline/response_store/valkey.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/pipeline/testing.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/pipeline/thread_runner.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/pipeline/transport/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/pipeline/transport/base.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/pipeline/transport/bookkeeping.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/pipeline/transport/in_memory.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/pipeline/transport/kafka.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/pipeline/transport/nats.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/pipeline/transport/sqs.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/pipeline/ws/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/pipeline/ws/base.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/pipeline/ws/endpoint.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/pipeline/ws/gateway.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/pipeline/ws/handler.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/pipeline/ws/push.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/pipeline/ws/registry.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/pydanticai.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/sandbox/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/sandbox/base.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/sandbox/broker/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/sandbox/broker/base.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/sandbox/broker/embedded.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/sandbox/broker/queue.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/sandbox/broker/queue_worker.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/sandbox/broker/thread.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/sandbox/broker/wire.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/sandbox/broker/worker.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/sandbox/errors.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/sandbox/factory.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/sandbox/hooks.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/sandbox/manager.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/sandbox/model.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/sandbox/principal.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/sandbox/providers/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/sandbox/providers/daytona.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/sandbox/providers/docker.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/sandbox/providers/e2b.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/sandbox/providers/ec2_ssm.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/sandbox/providers/kubernetes.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/sandbox/providers/local_subprocess.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/sandbox/testing.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/sandbox/tools.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/schedule/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/schedule/errors.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/schedule/handler.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/schedule/manager.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/schedule/model.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/schedule/provider/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/schedule/provider/base.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/schedule/provider/eventbridge.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/schedule/provider/local.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/schedule/store/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/schedule/store/base.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/schedule/store/dynamodb.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/schedule/store/in_memory.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/schedule/store/redis.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/schedule/store/redis_like.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/schedule/store/valkey.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/schedule/timing.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/schedule/tools.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/skills/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/skills/skills.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/slack.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/smolagents.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/teams.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/telegram.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/test/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/test/core/__init__.py +0 -0
- {agentkernel-0.9.0/src/agentkernel/test/core/akevaluators → agentkernel-0.9.2/src/agentkernel/test/core/evaluator}/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/thread.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/trace/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/trace/base.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/trace/langfuse/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/trace/langfuse/adk.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/trace/langfuse/crewai.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/trace/langfuse/langfuse.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/trace/langfuse/langgraph.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/trace/langfuse/openai.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/trace/langfuse/pydanticai.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/trace/langfuse/smolagents.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/trace/logfire/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/trace/logfire/adk.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/trace/logfire/crewai.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/trace/logfire/langgraph.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/trace/logfire/logfire.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/trace/logfire/openai.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/trace/logfire/pydanticai.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/trace/logfire/smolagents.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/trace/openllmetry/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/trace/openllmetry/adk.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/trace/openllmetry/crewai.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/trace/openllmetry/langgraph.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/trace/openllmetry/openai.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/trace/openllmetry/openllmetry.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/trace/openllmetry/pydanticai.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/trace/openllmetry/smolagents.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/src/agentkernel/trace/trace.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.2}/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.2
|
|
4
4
|
Summary: Agent Kernel - Unified AI Agents Runtime
|
|
5
5
|
Author: Yaala Labs
|
|
6
6
|
Author-email: Yaala Labs <agentkernel@yaalalabs.com>
|
|
@@ -44,7 +44,7 @@ Requires-Dist: nest-asyncio>=1.6.0 ; extra == 'langfuse'
|
|
|
44
44
|
Requires-Dist: langgraph~=1.2.10 ; extra == 'langgraph'
|
|
45
45
|
Requires-Dist: langgraph-prebuilt~=1.1.0 ; extra == 'langgraph'
|
|
46
46
|
Requires-Dist: langchain~=1.3.10 ; extra == 'langgraph'
|
|
47
|
-
Requires-Dist: langchain-community
|
|
47
|
+
Requires-Dist: langchain-community~=0.4.1 ; extra == 'langgraph'
|
|
48
48
|
Requires-Dist: litellm~=1.89.2 ; extra == 'langgraph'
|
|
49
49
|
Requires-Dist: logfire>=3.0 ; extra == 'logfire'
|
|
50
50
|
Requires-Dist: fastmcp>=3.2.0,<4.0.0 ; extra == 'mcp'
|
|
@@ -57,6 +57,7 @@ Requires-Dist: openai-agents>=0.7.0 ; extra == 'openai'
|
|
|
57
57
|
Requires-Dist: openinference-instrumentation-openai-agents>=1.4.0 ; extra == 'openai'
|
|
58
58
|
Requires-Dist: openai-guardrails>=0.2.1 ; extra == 'openai'
|
|
59
59
|
Requires-Dist: traceloop-sdk>=0.61.0 ; extra == 'openllmetry'
|
|
60
|
+
Requires-Dist: opik>=1.7.0 ; extra == 'opik'
|
|
60
61
|
Requires-Dist: pydantic-ai-slim~=2.13.0 ; extra == 'pydanticai'
|
|
61
62
|
Requires-Dist: openinference-instrumentation-pydantic-ai>=0.1.17 ; extra == 'pydanticai'
|
|
62
63
|
Requires-Dist: redis>=7.1.0 ; extra == 'redis'
|
|
@@ -111,6 +112,7 @@ Provides-Extra: nats
|
|
|
111
112
|
Provides-Extra: neo4j
|
|
112
113
|
Provides-Extra: openai
|
|
113
114
|
Provides-Extra: openllmetry
|
|
115
|
+
Provides-Extra: opik
|
|
114
116
|
Provides-Extra: pydanticai
|
|
115
117
|
Provides-Extra: redis
|
|
116
118
|
Provides-Extra: sandbox-docker
|
|
@@ -1261,7 +1263,7 @@ Configure test comparison modes for automated testing. Test configuration is sep
|
|
|
1261
1263
|
- **Evaluator**
|
|
1262
1264
|
- **Field**: `evaluator`
|
|
1263
1265
|
- **Default**: `deepeval`
|
|
1264
|
-
- **Description**: Built-in evaluator short name, or a dotted path to your own `AKEvaluator` subclass
|
|
1266
|
+
- **Description**: Built-in evaluator short name (`deepeval` or `opik`), or a dotted path to your own `AKEvaluator` subclass
|
|
1265
1267
|
- **Environment Variable**: `AK_TEST__EVALUATOR`
|
|
1266
1268
|
|
|
1267
1269
|
- **Llm Model**
|
|
@@ -1283,8 +1285,8 @@ Configure test comparison modes for automated testing. Test configuration is sep
|
|
|
1283
1285
|
- **Environment Variable**: `AK_TEST__LLM__EMBEDDING_MODEL`
|
|
1284
1286
|
|
|
1285
1287
|
**Test Modes:**
|
|
1286
|
-
- `score`: Deterministic, offline string-match scoring via the configured evaluator (built-in
|
|
1287
|
-
- `llm`: LLM-as-judge evaluation via the configured evaluator (built-in
|
|
1288
|
+
- `score`: Deterministic, offline string-match scoring via the configured evaluator (built-in `deepeval`: `Scorer.quasi_exact_match_score`; built-in `opik`: `LevenshteinRatio`, requires `pip install "agentkernel[opik]"`)
|
|
1289
|
+
- `llm`: LLM-as-judge evaluation via the configured evaluator (built-in `deepeval` or `opik`: `GEval`) for semantic similarity
|
|
1288
1290
|
- `fallback`: Tries score first, falls back to llm if score fails
|
|
1289
1291
|
|
|
1290
1292
|
```yaml
|
|
@@ -1646,7 +1648,7 @@ export AK_TRACE__TYPE=langfuse # or openllmetry, logfire
|
|
|
1646
1648
|
# export LOGFIRE_TOKEN=your-write-token
|
|
1647
1649
|
# Test harness (loaded from the separate test-config.yaml — see Test Configuration)
|
|
1648
1650
|
export AK_TEST__MODE=fallback # Options: score, llm, fallback
|
|
1649
|
-
export AK_TEST__EVALUATOR=deepeval # Built-in short name, or a dotted path to your own AKEvaluator subclass
|
|
1651
|
+
export AK_TEST__EVALUATOR=deepeval # Built-in short name (deepeval or opik), or a dotted path to your own AKEvaluator subclass
|
|
1650
1652
|
export AK_TEST__LLM__MODEL=gpt-4o-mini
|
|
1651
1653
|
export AK_TEST__LLM__PROVIDER=openai
|
|
1652
1654
|
export AK_TEST__LLM__EMBEDDING_MODEL=text-embedding-3-small
|
|
@@ -1916,6 +1918,8 @@ gmail:
|
|
|
1916
1918
|
|
|
1917
1919
|
Test harness configuration (comparison mode, evaluator backend, llm models) is separate from the application configuration. It is not part of `config.yaml` — it lives in its own `test-config.yaml` file, resolved from the current working directory, and is only loaded when the testing utilities (`agentkernel.test`) are used. A legacy `test:` section in `config.yaml` is ignored. See [Test Configuration](#test-configuration) under Configuration Options for the full list of fields and defaults.
|
|
1918
1920
|
|
|
1921
|
+
The `evaluator` field accepts two built-in short names — `deepeval` (default, `pip install "agentkernel[test]"`) or `opik` (`pip install "agentkernel[opik]"`, [Opik](https://www.comet.com/docs/opik/) by Comet, runs entirely locally with `OPIK_TRACK_DISABLE` set so no Opik Cloud account or API key is needed) — or a dotted path to your own `AKEvaluator` subclass.
|
|
1922
|
+
|
|
1919
1923
|
**test-config.yaml:**
|
|
1920
1924
|
|
|
1921
1925
|
```yaml
|
|
@@ -1133,7 +1133,7 @@ Configure test comparison modes for automated testing. Test configuration is sep
|
|
|
1133
1133
|
- **Evaluator**
|
|
1134
1134
|
- **Field**: `evaluator`
|
|
1135
1135
|
- **Default**: `deepeval`
|
|
1136
|
-
- **Description**: Built-in evaluator short name, or a dotted path to your own `AKEvaluator` subclass
|
|
1136
|
+
- **Description**: Built-in evaluator short name (`deepeval` or `opik`), or a dotted path to your own `AKEvaluator` subclass
|
|
1137
1137
|
- **Environment Variable**: `AK_TEST__EVALUATOR`
|
|
1138
1138
|
|
|
1139
1139
|
- **Llm Model**
|
|
@@ -1155,8 +1155,8 @@ Configure test comparison modes for automated testing. Test configuration is sep
|
|
|
1155
1155
|
- **Environment Variable**: `AK_TEST__LLM__EMBEDDING_MODEL`
|
|
1156
1156
|
|
|
1157
1157
|
**Test Modes:**
|
|
1158
|
-
- `score`: Deterministic, offline string-match scoring via the configured evaluator (built-in
|
|
1159
|
-
- `llm`: LLM-as-judge evaluation via the configured evaluator (built-in
|
|
1158
|
+
- `score`: Deterministic, offline string-match scoring via the configured evaluator (built-in `deepeval`: `Scorer.quasi_exact_match_score`; built-in `opik`: `LevenshteinRatio`, requires `pip install "agentkernel[opik]"`)
|
|
1159
|
+
- `llm`: LLM-as-judge evaluation via the configured evaluator (built-in `deepeval` or `opik`: `GEval`) for semantic similarity
|
|
1160
1160
|
- `fallback`: Tries score first, falls back to llm if score fails
|
|
1161
1161
|
|
|
1162
1162
|
```yaml
|
|
@@ -1518,7 +1518,7 @@ export AK_TRACE__TYPE=langfuse # or openllmetry, logfire
|
|
|
1518
1518
|
# export LOGFIRE_TOKEN=your-write-token
|
|
1519
1519
|
# Test harness (loaded from the separate test-config.yaml — see Test Configuration)
|
|
1520
1520
|
export AK_TEST__MODE=fallback # Options: score, llm, fallback
|
|
1521
|
-
export AK_TEST__EVALUATOR=deepeval # Built-in short name, or a dotted path to your own AKEvaluator subclass
|
|
1521
|
+
export AK_TEST__EVALUATOR=deepeval # Built-in short name (deepeval or opik), or a dotted path to your own AKEvaluator subclass
|
|
1522
1522
|
export AK_TEST__LLM__MODEL=gpt-4o-mini
|
|
1523
1523
|
export AK_TEST__LLM__PROVIDER=openai
|
|
1524
1524
|
export AK_TEST__LLM__EMBEDDING_MODEL=text-embedding-3-small
|
|
@@ -1788,6 +1788,8 @@ gmail:
|
|
|
1788
1788
|
|
|
1789
1789
|
Test harness configuration (comparison mode, evaluator backend, llm models) is separate from the application configuration. It is not part of `config.yaml` — it lives in its own `test-config.yaml` file, resolved from the current working directory, and is only loaded when the testing utilities (`agentkernel.test`) are used. A legacy `test:` section in `config.yaml` is ignored. See [Test Configuration](#test-configuration) under Configuration Options for the full list of fields and defaults.
|
|
1790
1790
|
|
|
1791
|
+
The `evaluator` field accepts two built-in short names — `deepeval` (default, `pip install "agentkernel[test]"`) or `opik` (`pip install "agentkernel[opik]"`, [Opik](https://www.comet.com/docs/opik/) by Comet, runs entirely locally with `OPIK_TRACK_DISABLE` set so no Opik Cloud account or API key is needed) — or a dotted path to your own `AKEvaluator` subclass.
|
|
1792
|
+
|
|
1791
1793
|
**test-config.yaml:**
|
|
1792
1794
|
|
|
1793
1795
|
```yaml
|
|
@@ -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.2"
|
|
8
8
|
description = "Agent Kernel - Unified AI Agents Runtime"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.12,<3.14"
|
|
@@ -43,7 +43,7 @@ langgraph = [
|
|
|
43
43
|
"langgraph~=1.2.10",
|
|
44
44
|
"langgraph-prebuilt~=1.1.0",
|
|
45
45
|
"langchain~=1.3.10",
|
|
46
|
-
"langchain_community
|
|
46
|
+
"langchain_community~=0.4.1",
|
|
47
47
|
"litellm~=1.89.2"
|
|
48
48
|
]
|
|
49
49
|
smolagents = [
|
|
@@ -188,6 +188,9 @@ daytona = [
|
|
|
188
188
|
kubernetes = [
|
|
189
189
|
"kubernetes>=29.0.0",
|
|
190
190
|
]
|
|
191
|
+
opik = [
|
|
192
|
+
"opik>=1.7.0",
|
|
193
|
+
]
|
|
191
194
|
|
|
192
195
|
[project.scripts]
|
|
193
196
|
ak = "agentkernel.cli.ak:main"
|
|
@@ -105,11 +105,31 @@ class RESTAPI:
|
|
|
105
105
|
cls._log.info("in_memory queue transport resolved: starting the single-process pipeline topology")
|
|
106
106
|
return IOHandler.run()
|
|
107
107
|
|
|
108
|
+
handlers = handlers if handlers is not None else cls.get_default_handlers()
|
|
109
|
+
cls._reject_pipeline_only_handlers(handlers)
|
|
110
|
+
|
|
108
111
|
host = AKConfig.get().api.host
|
|
109
112
|
port = AKConfig.get().api.port
|
|
110
113
|
cls._log.info(f"Agent Kernel REST API listening on http://{host}:{port}")
|
|
111
114
|
uvicorn.run(app=cls.build_app(handlers), host=host, port=port, reload=False)
|
|
112
115
|
|
|
116
|
+
@classmethod
|
|
117
|
+
def _reject_pipeline_only_handlers(cls, handlers: list[RESTRequestHandler] = None) -> None:
|
|
118
|
+
"""Refuse to serve a handler that only works inside the queue pipeline.
|
|
119
|
+
|
|
120
|
+
:param handlers: The handlers this run was asked to serve.
|
|
121
|
+
:raises AKConfigError: If any of them declares ``requires_pipeline``.
|
|
122
|
+
"""
|
|
123
|
+
offenders = sorted({type(handler).__name__ for handler in handlers or [] if getattr(handler, "requires_pipeline", False) is True})
|
|
124
|
+
if offenders:
|
|
125
|
+
from ..core.util.factory import AKConfigError
|
|
126
|
+
|
|
127
|
+
raise AKConfigError(
|
|
128
|
+
f"{', '.join(offenders)} require the queue pipeline: serve them with "
|
|
129
|
+
"IOHandler.run(handlers=[...]) instead of RESTAPI.run([...]), which builds a bare "
|
|
130
|
+
"API with no runner to drain what they enqueue"
|
|
131
|
+
)
|
|
132
|
+
|
|
113
133
|
@classmethod
|
|
114
134
|
def build_app(cls, handlers: list[RESTRequestHandler] = None) -> FastAPI:
|
|
115
135
|
"""Assemble the complete FastAPI app (handlers, A2A/MCP mounts, custom routers) without serving it.
|
|
@@ -44,7 +44,7 @@ from .config import AKConfig as Config
|
|
|
44
44
|
from .module import Module
|
|
45
45
|
from .runtime import ACTING_USER_CACHE_KEY, Runtime
|
|
46
46
|
from .service import AgentService
|
|
47
|
-
from .hooks import PreHook, PostHook
|
|
47
|
+
from .hooks import PreHook, PostHook, StreamHalt
|
|
48
48
|
from .tool import ToolContext, ToolBuilder
|
|
49
49
|
from .util.key_value_cache import KeyValueCache
|
|
50
50
|
from .chat_service import ChatService
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import asyncio
|
|
2
1
|
import base64
|
|
2
|
+
import contextlib
|
|
3
3
|
import json
|
|
4
4
|
import logging
|
|
5
|
-
from collections.abc import AsyncGenerator, Generator
|
|
5
|
+
from collections.abc import AsyncGenerator, Generator, Iterator
|
|
6
6
|
from typing import Any, Dict, List, Optional, Union
|
|
7
7
|
|
|
8
8
|
from .config import AKConfig
|
|
@@ -21,6 +21,7 @@ from .model import (
|
|
|
21
21
|
StreamChunk,
|
|
22
22
|
)
|
|
23
23
|
from .service import AgentService
|
|
24
|
+
from .util.async_bridge import iterate_async_sync, run_async_sync
|
|
24
25
|
|
|
25
26
|
|
|
26
27
|
class RequestBuilder:
|
|
@@ -138,6 +139,7 @@ class RequestBuilder:
|
|
|
138
139
|
"schedule",
|
|
139
140
|
"scheduled_task_id",
|
|
140
141
|
"scheduled_time",
|
|
142
|
+
"requests",
|
|
141
143
|
}
|
|
142
144
|
for key, value in req.model_dump().items():
|
|
143
145
|
if key in known_fields:
|
|
@@ -225,21 +227,25 @@ class AgentHandler:
|
|
|
225
227
|
def _run_async_sync(coro) -> Any:
|
|
226
228
|
"""Run an async coroutine from sync code, handling event loop state.
|
|
227
229
|
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
second await of the already-consumed coroutine.
|
|
230
|
+
Kept as a method because callers (and their tests) reach the bridge through it; the
|
|
231
|
+
loop handling itself is shared with the pipeline's synchronous consumers.
|
|
231
232
|
|
|
232
233
|
:param coro: Coroutine to execute
|
|
233
234
|
:return: Result of the coroutine
|
|
234
235
|
"""
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
236
|
+
return run_async_sync(coro)
|
|
237
|
+
|
|
238
|
+
@staticmethod
|
|
239
|
+
def _iterate_async_sync(agen) -> Iterator[Any]:
|
|
240
|
+
"""Consume an async generator from sync code, handling event loop state.
|
|
241
|
+
|
|
242
|
+
The streaming sibling of _run_async_sync, and a method for the same reason: callers
|
|
243
|
+
(and their tests) reach the bridge through the handler.
|
|
244
|
+
|
|
245
|
+
:param agen: Async generator to consume
|
|
246
|
+
:return: Iterator over the generator's items
|
|
247
|
+
"""
|
|
248
|
+
return iterate_async_sync(agen)
|
|
243
249
|
|
|
244
250
|
def run_sync(self, requests: List[Any], acting_user_id: Optional[str] = None) -> Any:
|
|
245
251
|
"""Run agent requests synchronously.
|
|
@@ -259,23 +265,17 @@ class AgentHandler:
|
|
|
259
265
|
"""
|
|
260
266
|
return await self.service.run_multi(requests=requests, acting_user_id=acting_user_id)
|
|
261
267
|
|
|
262
|
-
def run_stream_sync(self, requests: List[Any], acting_user_id: Optional[str] = None) ->
|
|
268
|
+
def run_stream_sync(self, requests: List[Any], acting_user_id: Optional[str] = None) -> Iterator[Any]:
|
|
263
269
|
"""Run agent streaming requests synchronously.
|
|
264
270
|
|
|
265
|
-
Manages event loop lifecycle internally and
|
|
271
|
+
Manages event loop lifecycle internally and hands over each chunk as the run produces
|
|
272
|
+
it, so a sync consumer streams live instead of receiving the whole run at once.
|
|
266
273
|
|
|
267
274
|
:param requests: List of AgentRequest objects to process
|
|
268
275
|
:param acting_user_id: When given, published as the run's acting user (see Runtime.stream)
|
|
269
|
-
:return:
|
|
276
|
+
:return: Iterator of StreamChunk objects
|
|
270
277
|
"""
|
|
271
|
-
|
|
272
|
-
async def _collect():
|
|
273
|
-
chunks = []
|
|
274
|
-
async for chunk in self.service.stream_multi(requests=requests, acting_user_id=acting_user_id):
|
|
275
|
-
chunks.append(chunk)
|
|
276
|
-
return chunks
|
|
277
|
-
|
|
278
|
-
return AgentHandler._run_async_sync(_collect())
|
|
278
|
+
return AgentHandler._iterate_async_sync(self.service.stream_multi(requests=requests, acting_user_id=acting_user_id))
|
|
279
279
|
|
|
280
280
|
async def run_stream_async(self, requests: List[Any], acting_user_id: Optional[str] = None) -> AsyncGenerator[Any, None]:
|
|
281
281
|
"""Run agent streaming requests asynchronously.
|
|
@@ -444,8 +444,9 @@ class ChatService:
|
|
|
444
444
|
def execute_stream_sync(self, req: BaseRunRequest, requests: Optional[List[AgentRequest]] = None) -> Generator[StreamChunk, None, None]:
|
|
445
445
|
"""Synchronous counterpart of execute_stream().
|
|
446
446
|
|
|
447
|
-
|
|
448
|
-
|
|
447
|
+
Chunks arrive as the run produces them: AgentHandler.run_stream_sync pumps the async
|
|
448
|
+
stream one chunk at a time, so an exception mid-run reaches the caller as an error
|
|
449
|
+
chunk after the chunks already yielded, exactly as on the async path.
|
|
449
450
|
|
|
450
451
|
:param req: Run request carrying prompt, agent, and session_id
|
|
451
452
|
:param requests: Optional prebuilt AgentRequest list (see execute())
|
|
@@ -460,11 +461,12 @@ class ChatService:
|
|
|
460
461
|
handler = self.prepare_agent_handler(req.session_id, req.agent)
|
|
461
462
|
|
|
462
463
|
def _stream() -> Generator[StreamChunk, None, None]:
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
464
|
+
with contextlib.closing(handler.run_stream_sync(requests, acting_user_id=req.user_id)) as chunks:
|
|
465
|
+
try:
|
|
466
|
+
for chunk in chunks:
|
|
467
|
+
yield chunk
|
|
468
|
+
except Exception as e:
|
|
469
|
+
yield StreamChunk(error=str(e), done=True)
|
|
468
470
|
|
|
469
471
|
return _stream()
|
|
470
472
|
|
|
@@ -575,15 +577,18 @@ class ChatService:
|
|
|
575
577
|
self._validate(req, requests)
|
|
576
578
|
return RequestBuilder.from_base_request_sync(req) if requests is None else requests
|
|
577
579
|
|
|
578
|
-
def process_chat_request(
|
|
580
|
+
def process_chat_request(
|
|
581
|
+
self, req: BaseRunRequest, requests: Optional[List[AgentRequest]] = None
|
|
582
|
+
) -> Union[tuple[int, Dict[str, Any]], Dict[str, Any]]:
|
|
579
583
|
"""Process a chat request synchronously.
|
|
580
584
|
|
|
581
585
|
:param req: Base run request with prompt, session_id, agent, and attachments
|
|
586
|
+
:param requests: Optional prebuilt AgentRequest list (see execute_sync())
|
|
582
587
|
:return: When rest_api_mode=False: tuple of (status_code, response_dict).
|
|
583
588
|
When rest_api_mode=True: response_dict only.
|
|
584
589
|
"""
|
|
585
590
|
try:
|
|
586
|
-
result, session_id = self.execute_sync(req)
|
|
591
|
+
result, session_id = self.execute_sync(req, requests)
|
|
587
592
|
return ResponseBuilder.build_response(self._success_status(req), session_id, self.rest_api_mode, result=result)
|
|
588
593
|
except ValueError as ve:
|
|
589
594
|
self._log.error(f"ValueError processing request: {ve}")
|
|
@@ -642,6 +647,7 @@ class ChatService:
|
|
|
642
647
|
self,
|
|
643
648
|
req: BaseRunRequest,
|
|
644
649
|
sse_format: bool = False,
|
|
650
|
+
requests: Optional[List[AgentRequest]] = None,
|
|
645
651
|
) -> Generator[str, None, None]:
|
|
646
652
|
"""Process a streaming chat request synchronously.
|
|
647
653
|
|
|
@@ -652,19 +658,21 @@ class ChatService:
|
|
|
652
658
|
:param req: Base run request with prompt, session_id, agent, and attachments
|
|
653
659
|
:param sse_format: When True, yield Server-Sent Events formatted frames.
|
|
654
660
|
When False, yield raw StreamChunk JSON payloads.
|
|
661
|
+
:param requests: Optional prebuilt AgentRequest list (see execute_stream_sync())
|
|
655
662
|
:return: Generator yielding StreamChunk payloads as JSON or SSE-formatted strings
|
|
656
663
|
:raises ValueError: If session_id or prompt is missing, or no agent is available
|
|
657
664
|
"""
|
|
658
665
|
session_id = req.session_id
|
|
659
|
-
chunks = self.execute_stream_sync(req)
|
|
666
|
+
chunks = self.execute_stream_sync(req, requests)
|
|
660
667
|
|
|
661
668
|
def _stream() -> Generator[str, None, None]:
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
669
|
+
with contextlib.closing(chunks) as raw_chunks:
|
|
670
|
+
try:
|
|
671
|
+
for chunk in raw_chunks:
|
|
672
|
+
yield ResponseBuilder.stream_chunk(chunk, session_id, sse_format=sse_format)
|
|
673
|
+
except Exception as e:
|
|
674
|
+
error_chunk = StreamChunk(error=str(e), done=True)
|
|
675
|
+
yield ResponseBuilder.stream_chunk(error_chunk, session_id, sse_format=sse_format)
|
|
668
676
|
|
|
669
677
|
return _stream()
|
|
670
678
|
|
|
@@ -161,6 +161,10 @@ class _SlackConfig(BaseModel):
|
|
|
161
161
|
default="",
|
|
162
162
|
description="The message to send as an acknowledgement when a Slack message is received",
|
|
163
163
|
)
|
|
164
|
+
outbound_adapter: str = Field(
|
|
165
|
+
default="",
|
|
166
|
+
description="Dotted path to an OutboundAdapter subclass replacing the built-in Slack outbound adapter",
|
|
167
|
+
)
|
|
164
168
|
|
|
165
169
|
|
|
166
170
|
class _WhatsAppConfig(BaseModel):
|
|
@@ -174,6 +178,10 @@ class _WhatsAppConfig(BaseModel):
|
|
|
174
178
|
app_secret: str = Field(default="", description="WhatsApp app secret for signature verification")
|
|
175
179
|
phone_number_id: str = Field(default="", description="WhatsApp Business phone number ID")
|
|
176
180
|
api_version: str = Field(default="v24.0", description="WhatsApp API version")
|
|
181
|
+
outbound_adapter: str = Field(
|
|
182
|
+
default="",
|
|
183
|
+
description="Dotted path to an OutboundAdapter subclass replacing the built-in WhatsApp outbound adapter",
|
|
184
|
+
)
|
|
177
185
|
|
|
178
186
|
|
|
179
187
|
class _MessengerConfig(BaseModel):
|
|
@@ -182,6 +190,10 @@ class _MessengerConfig(BaseModel):
|
|
|
182
190
|
access_token: str = Field(default="", description="Facebook Page access token")
|
|
183
191
|
app_secret: str = Field(default="", description="Facebook app secret for signature verification")
|
|
184
192
|
api_version: str = Field(default="v24.0", description="Facebook Graph API version")
|
|
193
|
+
outbound_adapter: str = Field(
|
|
194
|
+
default="",
|
|
195
|
+
description="Dotted path to an OutboundAdapter subclass replacing the built-in Facebook Messenger outbound adapter",
|
|
196
|
+
)
|
|
185
197
|
|
|
186
198
|
|
|
187
199
|
class _InstagramConfig(BaseModel):
|
|
@@ -191,6 +203,10 @@ class _InstagramConfig(BaseModel):
|
|
|
191
203
|
app_secret: str = Field(default="", description="Instagram app secret for signature verification")
|
|
192
204
|
instagram_account_id: str = Field(default="", description="Instagram Business Account ID (IGSID)")
|
|
193
205
|
api_version: str = Field(default="v21.0", description="Instagram Graph API version")
|
|
206
|
+
outbound_adapter: str = Field(
|
|
207
|
+
default="",
|
|
208
|
+
description="Dotted path to an OutboundAdapter subclass replacing the built-in Instagram outbound adapter",
|
|
209
|
+
)
|
|
194
210
|
|
|
195
211
|
|
|
196
212
|
class _TelegramConfig(BaseModel):
|
|
@@ -198,6 +214,10 @@ class _TelegramConfig(BaseModel):
|
|
|
198
214
|
bot_token: str = Field(default="", description="Telegram bot token from BotFather")
|
|
199
215
|
webhook_secret: str = Field(default="", description="Optional secret token for webhook security")
|
|
200
216
|
api_version: str = Field(default="bot", description="Telegram Bot API version prefix")
|
|
217
|
+
outbound_adapter: str = Field(
|
|
218
|
+
default="",
|
|
219
|
+
description="Dotted path to an OutboundAdapter subclass replacing the built-in Telegram outbound adapter",
|
|
220
|
+
)
|
|
201
221
|
|
|
202
222
|
|
|
203
223
|
class _TeamsConfig(BaseModel):
|
|
@@ -212,6 +232,10 @@ class _TeamsConfig(BaseModel):
|
|
|
212
232
|
default="",
|
|
213
233
|
description="Entra ID tenant that owns the bot's app registration. Required only for a single-tenant registration, whose channel tokens must be issued by its own tenant; leave empty for a multi-tenant bot. Also the fallback tenant for the app-only token used to download attachments whose URL is not pre-authenticated, when the incoming activity carries none",
|
|
214
234
|
)
|
|
235
|
+
outbound_adapter: str = Field(
|
|
236
|
+
default="",
|
|
237
|
+
description="Dotted path to an OutboundAdapter subclass replacing the built-in Microsoft Teams outbound adapter",
|
|
238
|
+
)
|
|
215
239
|
|
|
216
240
|
|
|
217
241
|
class _GmailConfig(BaseModel):
|
|
@@ -219,6 +243,10 @@ class _GmailConfig(BaseModel):
|
|
|
219
243
|
token_file: str = Field(default="token.pickle", description="Path to store OAuth2 token")
|
|
220
244
|
poll_interval: int = Field(default=30, description="Email polling interval in seconds")
|
|
221
245
|
label_filter: str = Field(default="INBOX", description="Gmail label to monitor (e.g., INBOX, UNREAD)")
|
|
246
|
+
outbound_adapter: str = Field(
|
|
247
|
+
default="",
|
|
248
|
+
description="Dotted path to an OutboundAdapter subclass replacing the built-in Gmail outbound adapter",
|
|
249
|
+
)
|
|
222
250
|
|
|
223
251
|
|
|
224
252
|
class _MultimodalStorageRedisConfig(_RedisConfig):
|
|
@@ -6,6 +6,7 @@ from typing import TYPE_CHECKING
|
|
|
6
6
|
if TYPE_CHECKING:
|
|
7
7
|
from .base import Agent, Session
|
|
8
8
|
|
|
9
|
+
from .event import StreamEvent
|
|
9
10
|
from .model import AgentReply, AgentRequest
|
|
10
11
|
|
|
11
12
|
"""
|
|
@@ -16,6 +17,26 @@ Currently, they will get only called for the initial execution of an agent when
|
|
|
16
17
|
"""
|
|
17
18
|
|
|
18
19
|
|
|
20
|
+
class StreamHalt(Exception):
|
|
21
|
+
"""
|
|
22
|
+
Raised by a post-hook to end a streamed run early.
|
|
23
|
+
|
|
24
|
+
Runtime.stream catches it, emits the closing event for any boundary the stream left open, and
|
|
25
|
+
yields one terminal StreamChunk carrying `reason` as its error. The session is not stored, so a
|
|
26
|
+
halted turn leaves no trace in conversation state.
|
|
27
|
+
|
|
28
|
+
The partial response is invalid rather than merely truncated: a client must discard what it has
|
|
29
|
+
already rendered instead of presenting it as a short answer.
|
|
30
|
+
"""
|
|
31
|
+
|
|
32
|
+
def __init__(self, reason: str):
|
|
33
|
+
"""
|
|
34
|
+
:param reason: Why the run was halted. Reaches the client verbatim as StreamChunk.error.
|
|
35
|
+
"""
|
|
36
|
+
super().__init__(reason)
|
|
37
|
+
self.reason = reason
|
|
38
|
+
|
|
39
|
+
|
|
19
40
|
class PreHook(ABC):
|
|
20
41
|
@abstractmethod
|
|
21
42
|
async def on_run(self, session: "Session", agent: "Agent", requests: list[AgentRequest]) -> list[AgentRequest] | AgentReply:
|
|
@@ -70,19 +91,38 @@ class PostHook(ABC):
|
|
|
70
91
|
"""
|
|
71
92
|
raise NotImplementedError
|
|
72
93
|
|
|
73
|
-
async def
|
|
94
|
+
async def on_stream_event(
|
|
74
95
|
self,
|
|
75
96
|
session: "Session",
|
|
76
97
|
requests: list[AgentRequest],
|
|
77
98
|
agent: "Agent",
|
|
78
|
-
|
|
79
|
-
) ->
|
|
99
|
+
event: StreamEvent,
|
|
100
|
+
) -> StreamEvent | list[StreamEvent] | None:
|
|
80
101
|
"""
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
102
|
+
Hook method called for every event a streamed run produces, before it reaches the client.
|
|
103
|
+
|
|
104
|
+
Unlike on_run, this sees the whole stream: message and reasoning text, tool call names,
|
|
105
|
+
arguments and results, and the boundaries that pair them.
|
|
106
|
+
|
|
107
|
+
Returning a list emits several events in place of one, which is what makes hold-and-release
|
|
108
|
+
possible: return None per fragment while accumulating in the session's volatile cache, then
|
|
109
|
+
return [rewritten_payload, closing_event] at the boundary. Accumulate there, not on `self` —
|
|
110
|
+
one hook instance serves every concurrent request. A returned list is emitted as-is and ends
|
|
111
|
+
the chain for that event, so `return event` and `return [event]` are not equivalent.
|
|
112
|
+
|
|
113
|
+
:param: session (Session): The session instance.
|
|
114
|
+
:param: requests (list[AgentRequest]): The requests provided to the agent, after pre-hooks.
|
|
115
|
+
:param: agent (Agent): The agent being streamed.
|
|
116
|
+
:param: event (StreamEvent): The event to process, as produced by the runner or by an
|
|
117
|
+
earlier hook in the chain.
|
|
118
|
+
:return:
|
|
119
|
+
- StreamEvent: The event, or a modified event of the same `type`, to pass on. A
|
|
120
|
+
different `type` raises TypeError; use a list to emit another type.
|
|
121
|
+
- list[StreamEvent]: Emitted in order, in place of `event`, ending the chain for it.
|
|
122
|
+
- None: Drops the event; nothing is sent to the client for it.
|
|
123
|
+
:raises StreamHalt: To end the run without emitting anything further.
|
|
84
124
|
"""
|
|
85
|
-
return
|
|
125
|
+
return event
|
|
86
126
|
|
|
87
127
|
@abstractmethod
|
|
88
128
|
def name(self) -> str:
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import json
|
|
2
2
|
import uuid
|
|
3
3
|
from enum import Enum
|
|
4
|
-
from typing import Any, Callable, List, Literal, Optional, Union
|
|
4
|
+
from typing import Annotated, Any, Callable, List, Literal, Optional, Union
|
|
5
5
|
|
|
6
|
-
from pydantic import BaseModel, ConfigDict, model_validator
|
|
6
|
+
from pydantic import BaseModel, ConfigDict, Field, model_validator
|
|
7
7
|
|
|
8
8
|
from .event import StreamEvent
|
|
9
9
|
|
|
@@ -125,6 +125,11 @@ class AgentReplyImage(AgentRequestImage):
|
|
|
125
125
|
type AgentRequest = Union[AgentRequestText, AgentRequestFile, AgentRequestImage, AgentRequestAny, AgentRequestAttachmentRef]
|
|
126
126
|
type AgentReply = Union[AgentReplyText, AgentReplyImage, AgentReplyAny]
|
|
127
127
|
|
|
128
|
+
AgentRequestUnion = Annotated[
|
|
129
|
+
Union[AgentRequestText, AgentRequestFile, AgentRequestImage, AgentRequestAny, AgentRequestAttachmentRef],
|
|
130
|
+
Field(discriminator="type"),
|
|
131
|
+
]
|
|
132
|
+
|
|
128
133
|
|
|
129
134
|
class AgentReplyAny(BaseModel):
|
|
130
135
|
"""
|
|
@@ -268,10 +273,18 @@ class BaseRunRequest(BaseChatRequest):
|
|
|
268
273
|
it delivers, identifying the task and the occurrence this run belongs to. They are
|
|
269
274
|
typed fields (not extras) so an occurrence's metadata never reaches the agent as
|
|
270
275
|
additional context.
|
|
276
|
+
|
|
277
|
+
requests carries an already-built AgentRequest list, for producers that compose it
|
|
278
|
+
themselves rather than leaving it to RequestBuilder: a messaging integration downloads
|
|
279
|
+
its attachments at the edge and stores them, so what reaches the queue is a request list
|
|
280
|
+
(including AgentRequestAttachmentRef entries, which files/images cannot express). Typed
|
|
281
|
+
for the same reason as the scheduling fields: an extra would reach the agent as
|
|
282
|
+
AgentRequestAny context.
|
|
271
283
|
"""
|
|
272
284
|
|
|
273
285
|
files: Optional[List[FileData]] = None
|
|
274
286
|
images: Optional[List[ImageData]] = None
|
|
287
|
+
requests: Optional[List[AgentRequestUnion]] = None
|
|
275
288
|
scheduled_task_id: Optional[str] = None
|
|
276
289
|
scheduled_time: Optional[str] = None
|
|
277
290
|
model_config = ConfigDict(extra="allow")
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
"""
|
|
2
|
-
Storage sub-package for multimodal attachments.
|
|
3
|
-
|
|
4
|
-
Provides pluggable storage backends (in_memory, session_cache, redis, dynamodb)
|
|
5
|
-
and the ``AttachmentStorageManager`` high-level API.
|
|
6
|
-
"""
|
|
7
|
-
|
|
8
|
-
from .storage_manager import AttachmentStorageManager
|
|
1
|
+
"""
|
|
2
|
+
Storage sub-package for multimodal attachments.
|
|
3
|
+
|
|
4
|
+
Provides pluggable storage backends (in_memory, session_cache, redis, dynamodb)
|
|
5
|
+
and the ``AttachmentStorageManager`` high-level API.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from .storage_manager import AttachmentStorageManager, StoredAttachment
|
|
9
|
+
|
|
10
|
+
__all__ = ["AttachmentStorageManager", "StoredAttachment"]
|