agentkernel 0.9.0__tar.gz → 0.9.1__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.1}/PKG-INFO +10 -6
- {agentkernel-0.9.0 → agentkernel-0.9.1}/README.md +6 -4
- {agentkernel-0.9.0 → agentkernel-0.9.1}/pyproject.toml +5 -2
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/core/__init__.py +1 -1
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/core/hooks.py +47 -7
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/core/runtime.py +106 -22
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/deployment/aws/containerized/ecs_io_handler.py +13 -3
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/integration/whatsapp/README.md +1 -1
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/skills/ak-add-capabilities/SKILL.md +35 -31
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/skills/ak-add-capabilities/evals/evals.json +1 -1
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/skills/ak-add-integration/SKILL.md +8 -8
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/skills/ak-add-integration/evals/evals.json +1 -1
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/skills/ak-build/SKILL.md +1 -1
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/skills/ak-build/evals/evals.json +1 -1
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/skills/ak-cloud-deploy/SKILL.md +33 -27
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/skills/ak-cloud-deploy/evals/evals.json +2 -1
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/skills/ak-init/SKILL.md +2 -2
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/skills/ak-init/evals/evals.json +2 -2
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/skills/ak-test/SKILL.md +86 -11
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/skills/ak-test/evals/evals.json +3 -3
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/test/config.py +1 -1
- {agentkernel-0.9.0/src/agentkernel/test/core/akevaluators → agentkernel-0.9.1/src/agentkernel/test/core/evaluator}/base.py +2 -2
- {agentkernel-0.9.0/src/agentkernel/test/core/akevaluators → agentkernel-0.9.1/src/agentkernel/test/core/evaluator}/deepeval.py +4 -4
- agentkernel-0.9.1/src/agentkernel/test/core/evaluator/opik.py +92 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/test/test.py +14 -10
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/adk.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/agui.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/api/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/api/a2a/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/api/a2a/a2a.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/api/a2a/handler.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/api/handler.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/api/http.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/api/mcp/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/api/mcp/akmcp.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/auth/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/auth/authoriser.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/auth/handler.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/auth.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/aws.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/azure.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/cli/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/cli/ak.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/cli/cli.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/core/base.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/core/builder.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/core/chat_service.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/core/config.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/core/event.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/core/logger.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/core/model.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/core/module.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/core/multimodal/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/core/multimodal/factory.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/core/multimodal/hooks.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/core/multimodal/source.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/core/multimodal/storage/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/core/multimodal/storage/base.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/core/multimodal/storage/dynamodb.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/core/multimodal/storage/in_memory.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/core/multimodal/storage/redis.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/core/multimodal/storage/session_cache.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/core/multimodal/storage/storage_manager.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/core/multimodal/tools.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/core/service.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/core/session/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/core/session/base.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/core/session/cosmosdb.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/core/session/dynamodb.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/core/session/firestore.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/core/session/in_memory.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/core/session/redis.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/core/session/redis_like.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/core/session/serde.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/core/session/valkey.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/core/tool.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/core/util/config_yaml_util.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/core/util/driver/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/core/util/driver/base.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/core/util/driver/cosmosdb.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/core/util/driver/dynamodb.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/core/util/driver/firestore.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/core/util/driver/redis.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/core/util/driver/redis_like.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/core/util/driver/valkey.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/core/util/error_util.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/core/util/factory.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/core/util/key_value_cache.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/core/util/pagination.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/crewai.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/deployment/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/deployment/aws/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/deployment/aws/containerized/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/deployment/aws/containerized/akagentrunner.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/deployment/aws/containerized/akoutputconsumer.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/deployment/aws/containerized/core/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/deployment/aws/containerized/core/api/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/deployment/aws/containerized/core/api/rest_api.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/deployment/aws/containerized/core/api/websocket_api.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/deployment/aws/containerized/core/sqs_consumer.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/deployment/aws/core/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/deployment/aws/core/raw_queue_consumer.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/deployment/aws/core/response_store/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/deployment/aws/core/response_store/dynamodb.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/deployment/aws/core/response_store/factory.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/deployment/aws/core/response_store/redis.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/deployment/aws/core/response_store/valkey.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/deployment/aws/core/sqs_handler.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/deployment/aws/core/websocket_service.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/deployment/aws/serverless/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/deployment/aws/serverless/akagentrunner.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/deployment/aws/serverless/akauthorizer.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/deployment/aws/serverless/aklambda.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/deployment/aws/serverless/akresponsehandler.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/deployment/aws/serverless/akwsconnectionhandler.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/deployment/aws/serverless/core/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/deployment/aws/serverless/core/router/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/deployment/aws/serverless/core/router/common.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/deployment/aws/serverless/core/router/rest_lambda.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/deployment/aws/serverless/core/router/ws_lambda.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/deployment/aws/serverless/core/sqs_consumer.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/deployment/azure/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/deployment/azure/akfunction.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/deployment/common/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/deployment/common/response_store.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/deployment/common/rest_handler.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/deployment/common/thread_runner.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/deployment/common/websocket_service.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/deployment/gcp/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/deployment/gcp/akauthorizer.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/deployment/gcp/akcloudrun.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/framework/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/framework/adk/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/framework/adk/adk.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/framework/crewai/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/framework/crewai/crewai.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/framework/langgraph/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/framework/langgraph/langgraph.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/framework/openai/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/framework/openai/openai.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/framework/pydanticai/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/framework/pydanticai/pydanticai.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/framework/smolagents/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/framework/smolagents/smolagents.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/gcp.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/gmail.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/guardrail/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/guardrail/bedrock.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/guardrail/guardrail.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/guardrail/openai.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/guardrail/walledai.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/instagram.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/integration/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/integration/agui/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/integration/agui/handler.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/integration/agui/mapping.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/integration/agui/run_input.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/integration/agui/state.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/integration/gmail/README.md +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/integration/gmail/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/integration/gmail/gmail_chat.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/integration/instagram/README.md +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/integration/instagram/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/integration/instagram/instagram_chat.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/integration/messenger/README.md +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/integration/messenger/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/integration/messenger/messenger_chat.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/integration/slack/README.md +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/integration/slack/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/integration/slack/slack_chat.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/integration/teams/README.md +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/integration/teams/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/integration/teams/teams_chat.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/integration/telegram/README.md +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/integration/telegram/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/integration/telegram/telegram_chat.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/integration/thread/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/integration/thread/manager.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/integration/thread/model.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/integration/thread/naming.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/integration/thread/recorder.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/integration/thread/store/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/integration/thread/store/base.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/integration/thread/store/cosmosdb.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/integration/thread/store/dynamodb.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/integration/thread/store/firestore.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/integration/thread/store/in_memory.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/integration/thread/store/redis.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/integration/thread/store/redis_like.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/integration/thread/store/valkey.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/integration/thread/thread_chat.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/integration/whatsapp/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/integration/whatsapp/whatsapp_chat.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/knowledgebase/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/knowledgebase/base.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/knowledgebase/chroma.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/knowledgebase/knowledgebuilder.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/knowledgebase/neo4j.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/knowledgebase/starburst.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/langgraph.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/mcp.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/messenger.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/openai.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/pipeline/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/pipeline/agent_runner.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/pipeline/consumer.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/pipeline/envelope.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/pipeline/io_handler.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/pipeline/request_handler.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/pipeline/response_handler.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/pipeline/response_store/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/pipeline/response_store/base.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/pipeline/response_store/dynamodb.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/pipeline/response_store/factory.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/pipeline/response_store/in_memory.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/pipeline/response_store/redis.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/pipeline/response_store/valkey.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/pipeline/testing.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/pipeline/thread_runner.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/pipeline/transport/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/pipeline/transport/base.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/pipeline/transport/bookkeeping.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/pipeline/transport/in_memory.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/pipeline/transport/kafka.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/pipeline/transport/nats.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/pipeline/transport/sqs.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/pipeline/ws/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/pipeline/ws/base.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/pipeline/ws/endpoint.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/pipeline/ws/gateway.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/pipeline/ws/handler.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/pipeline/ws/push.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/pipeline/ws/registry.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/pydanticai.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/sandbox/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/sandbox/base.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/sandbox/broker/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/sandbox/broker/base.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/sandbox/broker/embedded.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/sandbox/broker/queue.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/sandbox/broker/queue_worker.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/sandbox/broker/thread.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/sandbox/broker/wire.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/sandbox/broker/worker.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/sandbox/errors.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/sandbox/factory.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/sandbox/hooks.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/sandbox/manager.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/sandbox/model.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/sandbox/principal.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/sandbox/providers/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/sandbox/providers/daytona.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/sandbox/providers/docker.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/sandbox/providers/e2b.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/sandbox/providers/ec2_ssm.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/sandbox/providers/kubernetes.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/sandbox/providers/local_subprocess.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/sandbox/testing.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/sandbox/tools.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/schedule/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/schedule/errors.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/schedule/handler.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/schedule/manager.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/schedule/model.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/schedule/provider/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/schedule/provider/base.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/schedule/provider/eventbridge.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/schedule/provider/local.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/schedule/store/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/schedule/store/base.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/schedule/store/dynamodb.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/schedule/store/in_memory.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/schedule/store/redis.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/schedule/store/redis_like.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/schedule/store/valkey.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/schedule/timing.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/schedule/tools.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/skills/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/skills/skills.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/slack.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/smolagents.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/teams.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/telegram.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/test/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/test/core/__init__.py +0 -0
- {agentkernel-0.9.0/src/agentkernel/test/core/akevaluators → agentkernel-0.9.1/src/agentkernel/test/core/evaluator}/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/thread.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/trace/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/trace/base.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/trace/langfuse/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/trace/langfuse/adk.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/trace/langfuse/crewai.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/trace/langfuse/langfuse.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/trace/langfuse/langgraph.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/trace/langfuse/openai.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/trace/langfuse/pydanticai.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/trace/langfuse/smolagents.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/trace/logfire/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/trace/logfire/adk.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/trace/logfire/crewai.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/trace/logfire/langgraph.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/trace/logfire/logfire.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/trace/logfire/openai.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/trace/logfire/pydanticai.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/trace/logfire/smolagents.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/trace/openllmetry/__init__.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/trace/openllmetry/adk.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/trace/openllmetry/crewai.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/trace/openllmetry/langgraph.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/trace/openllmetry/openai.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/trace/openllmetry/openllmetry.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/trace/openllmetry/pydanticai.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/trace/openllmetry/smolagents.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/trace/trace.py +0 -0
- {agentkernel-0.9.0 → agentkernel-0.9.1}/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.1
|
|
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.1"
|
|
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"
|
|
@@ -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
|
|
@@ -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:
|
|
@@ -13,7 +13,8 @@ from ..guardrail.guardrail import InputGuardrailFactory, OutputGuardrailFactory
|
|
|
13
13
|
from ..sandbox.hooks import SandboxPreHookFactory
|
|
14
14
|
from .base import Agent, Session
|
|
15
15
|
from .builder import SessionStoreBuilder
|
|
16
|
-
from .event import
|
|
16
|
+
from .event import MessageEnd, ReasoningEnd, StepEnd, StreamEvent, TextDelta, ToolCallEnd
|
|
17
|
+
from .hooks import StreamHalt
|
|
17
18
|
from .model import (
|
|
18
19
|
AgentReply,
|
|
19
20
|
AgentReplyAny,
|
|
@@ -35,6 +36,72 @@ from .session import SessionStore
|
|
|
35
36
|
ACTING_USER_CACHE_KEY = "ak.acting_user_id"
|
|
36
37
|
|
|
37
38
|
|
|
39
|
+
class StreamBoundaryTracker:
|
|
40
|
+
"""
|
|
41
|
+
Remembers which paired events a streamed run has left open, and how to close them.
|
|
42
|
+
|
|
43
|
+
Several of the events in `event.py` come in pairs: a `MessageStart` is closed by a `MessageEnd`, a
|
|
44
|
+
`ToolCallStart` by a `ToolCallEnd`. A post-hook can end a run part-way through such a pair by
|
|
45
|
+
raising `StreamHalt`, which would otherwise leave the client holding something that never closes —
|
|
46
|
+
an AG-UI frontend renders an unclosed tool call as work still in progress. `Runtime.stream` tracks
|
|
47
|
+
what it has emitted so its halt path can emit the closes the stream still owes.
|
|
48
|
+
|
|
49
|
+
Only events that were actually emitted are observed, never what the runner yielded, so a hook that
|
|
50
|
+
holds, drops or injects a boundary cannot desynchronise the tracker from the client's view.
|
|
51
|
+
|
|
52
|
+
Malformed sequences are tolerated rather than rejected: closing an id that was never opened is a
|
|
53
|
+
no-op, and opening one twice keeps the later close. Validating a runner's event sequence is a wider
|
|
54
|
+
contract question than this class, and raising mid-stream would turn a third-party adapter's bug
|
|
55
|
+
into a failed run.
|
|
56
|
+
|
|
57
|
+
Internal to `Runtime.stream`, and deliberately not exported from the package.
|
|
58
|
+
"""
|
|
59
|
+
|
|
60
|
+
def __init__(self) -> None:
|
|
61
|
+
self._open: dict[tuple[str, str], StreamEvent] = {}
|
|
62
|
+
|
|
63
|
+
def observe(self, event: StreamEvent) -> None:
|
|
64
|
+
"""
|
|
65
|
+
Records an emitted event, opening or closing the boundary it represents.
|
|
66
|
+
|
|
67
|
+
The closing event is built when the boundary opens and stored against it, so `drain` needs no
|
|
68
|
+
mapping from a boundary back to its event type. Events that open nothing are ignored.
|
|
69
|
+
|
|
70
|
+
:param event: An event that has just been emitted to the client.
|
|
71
|
+
"""
|
|
72
|
+
match event.type:
|
|
73
|
+
case "message_start":
|
|
74
|
+
self._open[("message", event.message_id)] = MessageEnd(message_id=event.message_id)
|
|
75
|
+
case "message_end":
|
|
76
|
+
self._open.pop(("message", event.message_id), None)
|
|
77
|
+
case "reasoning_start":
|
|
78
|
+
self._open[("reasoning", event.message_id)] = ReasoningEnd(message_id=event.message_id)
|
|
79
|
+
case "reasoning_end":
|
|
80
|
+
self._open.pop(("reasoning", event.message_id), None)
|
|
81
|
+
case "tool_call_start":
|
|
82
|
+
self._open[("tool", event.tool_call_id)] = ToolCallEnd(tool_call_id=event.tool_call_id)
|
|
83
|
+
case "tool_call_end":
|
|
84
|
+
self._open.pop(("tool", event.tool_call_id), None)
|
|
85
|
+
case "step_start":
|
|
86
|
+
self._open[("step", event.name)] = StepEnd(name=event.name)
|
|
87
|
+
case "step_end":
|
|
88
|
+
self._open.pop(("step", event.name), None)
|
|
89
|
+
|
|
90
|
+
def drain(self) -> list[StreamEvent]:
|
|
91
|
+
"""
|
|
92
|
+
Returns the closing events for everything still open, innermost first, and forgets them.
|
|
93
|
+
|
|
94
|
+
Insertion order is the order the boundaries opened, so reversing it closes the innermost
|
|
95
|
+
boundary first — a tool call opened inside a message is closed before the message. The tracker
|
|
96
|
+
is emptied, since a halted run emits these once and then ends.
|
|
97
|
+
|
|
98
|
+
:return: The closing events the run still owes its client, innermost first.
|
|
99
|
+
"""
|
|
100
|
+
closes = list(reversed(self._open.values()))
|
|
101
|
+
self._open.clear()
|
|
102
|
+
return closes
|
|
103
|
+
|
|
104
|
+
|
|
38
105
|
class Runtime:
|
|
39
106
|
"""
|
|
40
107
|
Runtime class provides the environment for hosting and running agents.
|
|
@@ -237,12 +304,14 @@ class Runtime:
|
|
|
237
304
|
Streams the specified agent response as StreamChunks carrying typed stream events.
|
|
238
305
|
|
|
239
306
|
Pre-hooks run first; if halted, yields a StreamChunk with error and done=True.
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
307
|
+
Every event the runner yields passes through the post-hook chain via on_stream_event(), which
|
|
308
|
+
may pass it, rewrite it in place, drop it by returning None, or return a list to emit several
|
|
309
|
+
events in its place; a returned list ends the chain for that event. Only TextDelta content is
|
|
310
|
+
projected into `delta`, keeping reasoning out of consumers that concatenate it as the answer,
|
|
311
|
+
and `delta` is taken from the event finally emitted so the two can never disagree. A hook
|
|
312
|
+
raising StreamHalt ends the run: the closing event for any boundary the stream left open is
|
|
313
|
+
emitted, then a single error chunk, and the session is not stored. Any other exception
|
|
314
|
+
propagates unchanged. The volatile cache is cleared on exit.
|
|
246
315
|
|
|
247
316
|
:param agent: The agent to run.
|
|
248
317
|
:param session: The session to use for the agent.
|
|
@@ -266,24 +335,39 @@ class Runtime:
|
|
|
266
335
|
self._log.debug(f"Streaming agent '{agent.name}' with requests: {requests}")
|
|
267
336
|
|
|
268
337
|
post_hooks = self._get_system_post_hooks() + agent.post_hooks
|
|
338
|
+
boundaries = StreamBoundaryTracker()
|
|
269
339
|
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
if text is not None:
|
|
340
|
+
try:
|
|
341
|
+
async for ev in agent.runner.stream(agent, session, requests):
|
|
274
342
|
for hook in post_hooks:
|
|
275
|
-
|
|
276
|
-
if
|
|
343
|
+
result = await hook.on_stream_event(session, requests, agent, ev)
|
|
344
|
+
if result is None:
|
|
345
|
+
emitted: list[StreamEvent] = []
|
|
277
346
|
break
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
347
|
+
if isinstance(result, list):
|
|
348
|
+
emitted = result
|
|
349
|
+
break
|
|
350
|
+
if result.type != ev.type:
|
|
351
|
+
raise TypeError(
|
|
352
|
+
f"PostHook '{hook.name()}' returned event type '{result.type}' for a '{ev.type}'. "
|
|
353
|
+
"Return a list to emit a different type"
|
|
354
|
+
)
|
|
355
|
+
ev = result
|
|
356
|
+
else:
|
|
357
|
+
emitted = [ev]
|
|
358
|
+
|
|
359
|
+
for event in emitted:
|
|
360
|
+
chunk = StreamChunk(delta=event.content if isinstance(event, TextDelta) else None, event=event)
|
|
361
|
+
boundaries.observe(event)
|
|
362
|
+
yield chunk
|
|
363
|
+
|
|
364
|
+
self.sessions().store(session)
|
|
365
|
+
yield StreamChunk(done=True)
|
|
366
|
+
except StreamHalt as halt:
|
|
367
|
+
self._log.warning(f"Stream halted for agent '{agent.name}': {halt.reason}")
|
|
368
|
+
for closing in boundaries.drain():
|
|
369
|
+
yield StreamChunk(event=closing)
|
|
370
|
+
yield StreamChunk(error=halt.reason, done=True)
|
|
287
371
|
finally:
|
|
288
372
|
session.get_volatile_cache().clear()
|
|
289
373
|
|
|
@@ -16,7 +16,9 @@ class ECSIOHandler:
|
|
|
16
16
|
Thread 1 (rest-api) runs the FastAPI/uvicorn app: ECSQueueRequestHandler in REST queue
|
|
17
17
|
modes, or WebSocket (ASYNC/STREAM) frames via ECSWebSocketRequestHandler. Thread 2
|
|
18
18
|
(output-queue-consumer) runs ECSOutputConsumer.run, writing to DB (REST) or pushing
|
|
19
|
-
over WebSocket (ASYNC).
|
|
19
|
+
over WebSocket (ASYNC). Both modes take a single ``run(auth_validator=MyValidator())``:
|
|
20
|
+
it authenticates the ``$connect`` handshake in WebSocket mode (mandatory there), and in
|
|
21
|
+
REST modes it is bound onto every REST route via ``RESTAPI.add_auth_handlers``.
|
|
20
22
|
|
|
21
23
|
Optional REST surfaces (the schedule and thread management routes, a Slack handler) are
|
|
22
24
|
mounted by passing them as ``handlers``, the way the pipeline's ``IOHandler`` takes them.
|
|
@@ -26,11 +28,16 @@ class ECSIOHandler:
|
|
|
26
28
|
_config = AKConfig.get()
|
|
27
29
|
|
|
28
30
|
@classmethod
|
|
29
|
-
def run(
|
|
31
|
+
def run(
|
|
32
|
+
cls,
|
|
33
|
+
auth_validator: Optional[AuthValidator] = None,
|
|
34
|
+
handlers: Optional[list[RESTRequestHandler]] = None,
|
|
35
|
+
) -> None:
|
|
30
36
|
"""Boot the REST/WebSocket API and the output-queue consumer as peer threads, and serve until shutdown.
|
|
31
37
|
|
|
32
38
|
:param auth_validator: Authenticates the ``$connect`` handshake in WebSocket (ASYNC/STREAM)
|
|
33
|
-
mode, where it is mandatory
|
|
39
|
+
mode, where it is mandatory. In the REST queue modes it is bound onto every REST route
|
|
40
|
+
via ``RESTAPI.add_auth_handlers``.
|
|
34
41
|
:param handlers: Optional REST handlers mounted alongside the API's own defaults, which are
|
|
35
42
|
always served (the chat route is the queue producer, not a replaceable default).
|
|
36
43
|
Mounting an optional surface is the application's job here, as it is on the pipeline's
|
|
@@ -56,6 +63,9 @@ class ECSIOHandler:
|
|
|
56
63
|
else:
|
|
57
64
|
from .core.api.rest_api import AWSRestAPI
|
|
58
65
|
|
|
66
|
+
if auth_validator is not None:
|
|
67
|
+
AWSRestAPI.add_auth_handlers(auth_validators=[auth_validator])
|
|
68
|
+
|
|
59
69
|
def run_api() -> None:
|
|
60
70
|
# Defaults first, then the application's: RESTAPI.run() replaces the defaults with
|
|
61
71
|
# whatever it is handed, and the queue-producing chat route must survive.
|