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.
Files changed (316) hide show
  1. {agentkernel-0.9.0 → agentkernel-0.9.1}/PKG-INFO +10 -6
  2. {agentkernel-0.9.0 → agentkernel-0.9.1}/README.md +6 -4
  3. {agentkernel-0.9.0 → agentkernel-0.9.1}/pyproject.toml +5 -2
  4. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/core/__init__.py +1 -1
  5. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/core/hooks.py +47 -7
  6. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/core/runtime.py +106 -22
  7. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/deployment/aws/containerized/ecs_io_handler.py +13 -3
  8. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/integration/whatsapp/README.md +1 -1
  9. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/skills/ak-add-capabilities/SKILL.md +35 -31
  10. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/skills/ak-add-capabilities/evals/evals.json +1 -1
  11. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/skills/ak-add-integration/SKILL.md +8 -8
  12. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/skills/ak-add-integration/evals/evals.json +1 -1
  13. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/skills/ak-build/SKILL.md +1 -1
  14. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/skills/ak-build/evals/evals.json +1 -1
  15. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/skills/ak-cloud-deploy/SKILL.md +33 -27
  16. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/skills/ak-cloud-deploy/evals/evals.json +2 -1
  17. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/skills/ak-init/SKILL.md +2 -2
  18. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/skills/ak-init/evals/evals.json +2 -2
  19. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/skills/ak-test/SKILL.md +86 -11
  20. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/skills/ak-test/evals/evals.json +3 -3
  21. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/test/config.py +1 -1
  22. {agentkernel-0.9.0/src/agentkernel/test/core/akevaluators → agentkernel-0.9.1/src/agentkernel/test/core/evaluator}/base.py +2 -2
  23. {agentkernel-0.9.0/src/agentkernel/test/core/akevaluators → agentkernel-0.9.1/src/agentkernel/test/core/evaluator}/deepeval.py +4 -4
  24. agentkernel-0.9.1/src/agentkernel/test/core/evaluator/opik.py +92 -0
  25. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/test/test.py +14 -10
  26. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/__init__.py +0 -0
  27. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/adk.py +0 -0
  28. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/agui.py +0 -0
  29. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/api/__init__.py +0 -0
  30. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/api/a2a/__init__.py +0 -0
  31. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/api/a2a/a2a.py +0 -0
  32. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/api/a2a/handler.py +0 -0
  33. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/api/handler.py +0 -0
  34. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/api/http.py +0 -0
  35. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/api/mcp/__init__.py +0 -0
  36. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/api/mcp/akmcp.py +0 -0
  37. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/auth/__init__.py +0 -0
  38. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/auth/authoriser.py +0 -0
  39. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/auth/handler.py +0 -0
  40. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/auth.py +0 -0
  41. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/aws.py +0 -0
  42. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/azure.py +0 -0
  43. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/cli/__init__.py +0 -0
  44. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/cli/ak.py +0 -0
  45. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/cli/cli.py +0 -0
  46. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/core/base.py +0 -0
  47. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/core/builder.py +0 -0
  48. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/core/chat_service.py +0 -0
  49. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/core/config.py +0 -0
  50. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/core/event.py +0 -0
  51. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/core/logger.py +0 -0
  52. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/core/model.py +0 -0
  53. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/core/module.py +0 -0
  54. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/core/multimodal/__init__.py +0 -0
  55. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/core/multimodal/factory.py +0 -0
  56. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/core/multimodal/hooks.py +0 -0
  57. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/core/multimodal/source.py +0 -0
  58. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/core/multimodal/storage/__init__.py +0 -0
  59. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/core/multimodal/storage/base.py +0 -0
  60. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/core/multimodal/storage/dynamodb.py +0 -0
  61. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/core/multimodal/storage/in_memory.py +0 -0
  62. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/core/multimodal/storage/redis.py +0 -0
  63. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/core/multimodal/storage/session_cache.py +0 -0
  64. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/core/multimodal/storage/storage_manager.py +0 -0
  65. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/core/multimodal/tools.py +0 -0
  66. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/core/service.py +0 -0
  67. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/core/session/__init__.py +0 -0
  68. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/core/session/base.py +0 -0
  69. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/core/session/cosmosdb.py +0 -0
  70. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/core/session/dynamodb.py +0 -0
  71. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/core/session/firestore.py +0 -0
  72. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/core/session/in_memory.py +0 -0
  73. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/core/session/redis.py +0 -0
  74. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/core/session/redis_like.py +0 -0
  75. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/core/session/serde.py +0 -0
  76. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/core/session/valkey.py +0 -0
  77. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/core/tool.py +0 -0
  78. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/core/util/config_yaml_util.py +0 -0
  79. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/core/util/driver/__init__.py +0 -0
  80. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/core/util/driver/base.py +0 -0
  81. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/core/util/driver/cosmosdb.py +0 -0
  82. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/core/util/driver/dynamodb.py +0 -0
  83. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/core/util/driver/firestore.py +0 -0
  84. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/core/util/driver/redis.py +0 -0
  85. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/core/util/driver/redis_like.py +0 -0
  86. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/core/util/driver/valkey.py +0 -0
  87. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/core/util/error_util.py +0 -0
  88. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/core/util/factory.py +0 -0
  89. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/core/util/key_value_cache.py +0 -0
  90. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/core/util/pagination.py +0 -0
  91. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/crewai.py +0 -0
  92. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/deployment/__init__.py +0 -0
  93. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/deployment/aws/__init__.py +0 -0
  94. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/deployment/aws/containerized/__init__.py +0 -0
  95. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/deployment/aws/containerized/akagentrunner.py +0 -0
  96. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/deployment/aws/containerized/akoutputconsumer.py +0 -0
  97. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/deployment/aws/containerized/core/__init__.py +0 -0
  98. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/deployment/aws/containerized/core/api/__init__.py +0 -0
  99. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/deployment/aws/containerized/core/api/rest_api.py +0 -0
  100. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/deployment/aws/containerized/core/api/websocket_api.py +0 -0
  101. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/deployment/aws/containerized/core/sqs_consumer.py +0 -0
  102. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/deployment/aws/core/__init__.py +0 -0
  103. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/deployment/aws/core/raw_queue_consumer.py +0 -0
  104. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/deployment/aws/core/response_store/__init__.py +0 -0
  105. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/deployment/aws/core/response_store/dynamodb.py +0 -0
  106. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/deployment/aws/core/response_store/factory.py +0 -0
  107. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/deployment/aws/core/response_store/redis.py +0 -0
  108. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/deployment/aws/core/response_store/valkey.py +0 -0
  109. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/deployment/aws/core/sqs_handler.py +0 -0
  110. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/deployment/aws/core/websocket_service.py +0 -0
  111. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/deployment/aws/serverless/__init__.py +0 -0
  112. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/deployment/aws/serverless/akagentrunner.py +0 -0
  113. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/deployment/aws/serverless/akauthorizer.py +0 -0
  114. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/deployment/aws/serverless/aklambda.py +0 -0
  115. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/deployment/aws/serverless/akresponsehandler.py +0 -0
  116. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/deployment/aws/serverless/akwsconnectionhandler.py +0 -0
  117. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/deployment/aws/serverless/core/__init__.py +0 -0
  118. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/deployment/aws/serverless/core/router/__init__.py +0 -0
  119. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/deployment/aws/serverless/core/router/common.py +0 -0
  120. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/deployment/aws/serverless/core/router/rest_lambda.py +0 -0
  121. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/deployment/aws/serverless/core/router/ws_lambda.py +0 -0
  122. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/deployment/aws/serverless/core/sqs_consumer.py +0 -0
  123. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/deployment/azure/__init__.py +0 -0
  124. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/deployment/azure/akfunction.py +0 -0
  125. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/deployment/common/__init__.py +0 -0
  126. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/deployment/common/response_store.py +0 -0
  127. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/deployment/common/rest_handler.py +0 -0
  128. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/deployment/common/thread_runner.py +0 -0
  129. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/deployment/common/websocket_service.py +0 -0
  130. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/deployment/gcp/__init__.py +0 -0
  131. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/deployment/gcp/akauthorizer.py +0 -0
  132. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/deployment/gcp/akcloudrun.py +0 -0
  133. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/framework/__init__.py +0 -0
  134. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/framework/adk/__init__.py +0 -0
  135. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/framework/adk/adk.py +0 -0
  136. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/framework/crewai/__init__.py +0 -0
  137. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/framework/crewai/crewai.py +0 -0
  138. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/framework/langgraph/__init__.py +0 -0
  139. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/framework/langgraph/langgraph.py +0 -0
  140. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/framework/openai/__init__.py +0 -0
  141. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/framework/openai/openai.py +0 -0
  142. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/framework/pydanticai/__init__.py +0 -0
  143. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/framework/pydanticai/pydanticai.py +0 -0
  144. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/framework/smolagents/__init__.py +0 -0
  145. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/framework/smolagents/smolagents.py +0 -0
  146. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/gcp.py +0 -0
  147. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/gmail.py +0 -0
  148. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/guardrail/__init__.py +0 -0
  149. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/guardrail/bedrock.py +0 -0
  150. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/guardrail/guardrail.py +0 -0
  151. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/guardrail/openai.py +0 -0
  152. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/guardrail/walledai.py +0 -0
  153. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/instagram.py +0 -0
  154. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/integration/__init__.py +0 -0
  155. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/integration/agui/__init__.py +0 -0
  156. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/integration/agui/handler.py +0 -0
  157. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/integration/agui/mapping.py +0 -0
  158. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/integration/agui/run_input.py +0 -0
  159. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/integration/agui/state.py +0 -0
  160. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/integration/gmail/README.md +0 -0
  161. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/integration/gmail/__init__.py +0 -0
  162. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/integration/gmail/gmail_chat.py +0 -0
  163. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/integration/instagram/README.md +0 -0
  164. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/integration/instagram/__init__.py +0 -0
  165. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/integration/instagram/instagram_chat.py +0 -0
  166. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/integration/messenger/README.md +0 -0
  167. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/integration/messenger/__init__.py +0 -0
  168. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/integration/messenger/messenger_chat.py +0 -0
  169. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/integration/slack/README.md +0 -0
  170. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/integration/slack/__init__.py +0 -0
  171. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/integration/slack/slack_chat.py +0 -0
  172. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/integration/teams/README.md +0 -0
  173. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/integration/teams/__init__.py +0 -0
  174. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/integration/teams/teams_chat.py +0 -0
  175. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/integration/telegram/README.md +0 -0
  176. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/integration/telegram/__init__.py +0 -0
  177. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/integration/telegram/telegram_chat.py +0 -0
  178. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/integration/thread/__init__.py +0 -0
  179. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/integration/thread/manager.py +0 -0
  180. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/integration/thread/model.py +0 -0
  181. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/integration/thread/naming.py +0 -0
  182. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/integration/thread/recorder.py +0 -0
  183. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/integration/thread/store/__init__.py +0 -0
  184. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/integration/thread/store/base.py +0 -0
  185. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/integration/thread/store/cosmosdb.py +0 -0
  186. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/integration/thread/store/dynamodb.py +0 -0
  187. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/integration/thread/store/firestore.py +0 -0
  188. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/integration/thread/store/in_memory.py +0 -0
  189. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/integration/thread/store/redis.py +0 -0
  190. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/integration/thread/store/redis_like.py +0 -0
  191. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/integration/thread/store/valkey.py +0 -0
  192. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/integration/thread/thread_chat.py +0 -0
  193. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/integration/whatsapp/__init__.py +0 -0
  194. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/integration/whatsapp/whatsapp_chat.py +0 -0
  195. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/knowledgebase/__init__.py +0 -0
  196. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/knowledgebase/base.py +0 -0
  197. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/knowledgebase/chroma.py +0 -0
  198. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/knowledgebase/knowledgebuilder.py +0 -0
  199. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/knowledgebase/neo4j.py +0 -0
  200. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/knowledgebase/starburst.py +0 -0
  201. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/langgraph.py +0 -0
  202. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/mcp.py +0 -0
  203. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/messenger.py +0 -0
  204. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/openai.py +0 -0
  205. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/pipeline/__init__.py +0 -0
  206. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/pipeline/agent_runner.py +0 -0
  207. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/pipeline/consumer.py +0 -0
  208. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/pipeline/envelope.py +0 -0
  209. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/pipeline/io_handler.py +0 -0
  210. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/pipeline/request_handler.py +0 -0
  211. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/pipeline/response_handler.py +0 -0
  212. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/pipeline/response_store/__init__.py +0 -0
  213. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/pipeline/response_store/base.py +0 -0
  214. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/pipeline/response_store/dynamodb.py +0 -0
  215. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/pipeline/response_store/factory.py +0 -0
  216. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/pipeline/response_store/in_memory.py +0 -0
  217. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/pipeline/response_store/redis.py +0 -0
  218. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/pipeline/response_store/valkey.py +0 -0
  219. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/pipeline/testing.py +0 -0
  220. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/pipeline/thread_runner.py +0 -0
  221. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/pipeline/transport/__init__.py +0 -0
  222. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/pipeline/transport/base.py +0 -0
  223. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/pipeline/transport/bookkeeping.py +0 -0
  224. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/pipeline/transport/in_memory.py +0 -0
  225. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/pipeline/transport/kafka.py +0 -0
  226. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/pipeline/transport/nats.py +0 -0
  227. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/pipeline/transport/sqs.py +0 -0
  228. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/pipeline/ws/__init__.py +0 -0
  229. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/pipeline/ws/base.py +0 -0
  230. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/pipeline/ws/endpoint.py +0 -0
  231. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/pipeline/ws/gateway.py +0 -0
  232. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/pipeline/ws/handler.py +0 -0
  233. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/pipeline/ws/push.py +0 -0
  234. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/pipeline/ws/registry.py +0 -0
  235. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/pydanticai.py +0 -0
  236. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/sandbox/__init__.py +0 -0
  237. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/sandbox/base.py +0 -0
  238. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/sandbox/broker/__init__.py +0 -0
  239. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/sandbox/broker/base.py +0 -0
  240. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/sandbox/broker/embedded.py +0 -0
  241. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/sandbox/broker/queue.py +0 -0
  242. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/sandbox/broker/queue_worker.py +0 -0
  243. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/sandbox/broker/thread.py +0 -0
  244. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/sandbox/broker/wire.py +0 -0
  245. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/sandbox/broker/worker.py +0 -0
  246. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/sandbox/errors.py +0 -0
  247. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/sandbox/factory.py +0 -0
  248. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/sandbox/hooks.py +0 -0
  249. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/sandbox/manager.py +0 -0
  250. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/sandbox/model.py +0 -0
  251. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/sandbox/principal.py +0 -0
  252. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/sandbox/providers/__init__.py +0 -0
  253. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/sandbox/providers/daytona.py +0 -0
  254. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/sandbox/providers/docker.py +0 -0
  255. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/sandbox/providers/e2b.py +0 -0
  256. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/sandbox/providers/ec2_ssm.py +0 -0
  257. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/sandbox/providers/kubernetes.py +0 -0
  258. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/sandbox/providers/local_subprocess.py +0 -0
  259. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/sandbox/testing.py +0 -0
  260. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/sandbox/tools.py +0 -0
  261. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/schedule/__init__.py +0 -0
  262. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/schedule/errors.py +0 -0
  263. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/schedule/handler.py +0 -0
  264. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/schedule/manager.py +0 -0
  265. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/schedule/model.py +0 -0
  266. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/schedule/provider/__init__.py +0 -0
  267. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/schedule/provider/base.py +0 -0
  268. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/schedule/provider/eventbridge.py +0 -0
  269. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/schedule/provider/local.py +0 -0
  270. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/schedule/store/__init__.py +0 -0
  271. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/schedule/store/base.py +0 -0
  272. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/schedule/store/dynamodb.py +0 -0
  273. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/schedule/store/in_memory.py +0 -0
  274. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/schedule/store/redis.py +0 -0
  275. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/schedule/store/redis_like.py +0 -0
  276. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/schedule/store/valkey.py +0 -0
  277. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/schedule/timing.py +0 -0
  278. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/schedule/tools.py +0 -0
  279. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/skills/__init__.py +0 -0
  280. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/skills/skills.py +0 -0
  281. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/slack.py +0 -0
  282. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/smolagents.py +0 -0
  283. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/teams.py +0 -0
  284. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/telegram.py +0 -0
  285. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/test/__init__.py +0 -0
  286. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/test/core/__init__.py +0 -0
  287. {agentkernel-0.9.0/src/agentkernel/test/core/akevaluators → agentkernel-0.9.1/src/agentkernel/test/core/evaluator}/__init__.py +0 -0
  288. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/thread.py +0 -0
  289. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/trace/__init__.py +0 -0
  290. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/trace/base.py +0 -0
  291. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/trace/langfuse/__init__.py +0 -0
  292. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/trace/langfuse/adk.py +0 -0
  293. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/trace/langfuse/crewai.py +0 -0
  294. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/trace/langfuse/langfuse.py +0 -0
  295. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/trace/langfuse/langgraph.py +0 -0
  296. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/trace/langfuse/openai.py +0 -0
  297. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/trace/langfuse/pydanticai.py +0 -0
  298. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/trace/langfuse/smolagents.py +0 -0
  299. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/trace/logfire/__init__.py +0 -0
  300. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/trace/logfire/adk.py +0 -0
  301. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/trace/logfire/crewai.py +0 -0
  302. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/trace/logfire/langgraph.py +0 -0
  303. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/trace/logfire/logfire.py +0 -0
  304. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/trace/logfire/openai.py +0 -0
  305. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/trace/logfire/pydanticai.py +0 -0
  306. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/trace/logfire/smolagents.py +0 -0
  307. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/trace/openllmetry/__init__.py +0 -0
  308. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/trace/openllmetry/adk.py +0 -0
  309. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/trace/openllmetry/crewai.py +0 -0
  310. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/trace/openllmetry/langgraph.py +0 -0
  311. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/trace/openllmetry/openai.py +0 -0
  312. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/trace/openllmetry/openllmetry.py +0 -0
  313. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/trace/openllmetry/pydanticai.py +0 -0
  314. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/trace/openllmetry/smolagents.py +0 -0
  315. {agentkernel-0.9.0 → agentkernel-0.9.1}/src/agentkernel/trace/trace.py +0 -0
  316. {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.0
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==0.4.1 ; extra == 'langgraph'
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 DeepEval evaluator: `Scorer.quasi_exact_match_score`)
1287
- - `llm`: LLM-as-judge evaluation via the configured evaluator (built-in DeepEval evaluator: `GEval`) for semantic similarity
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 DeepEval evaluator: `Scorer.quasi_exact_match_score`)
1159
- - `llm`: LLM-as-judge evaluation via the configured evaluator (built-in DeepEval evaluator: `GEval`) for semantic similarity
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.0"
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==0.4.1",
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 on_stream_chunk(
94
+ async def on_stream_event(
74
95
  self,
75
96
  session: "Session",
76
97
  requests: list[AgentRequest],
77
98
  agent: "Agent",
78
- delta: str,
79
- ) -> str | None:
99
+ event: StreamEvent,
100
+ ) -> StreamEvent | list[StreamEvent] | None:
80
101
  """
81
- Called for each streaming token delta before it is sent to the client.
82
- Return the (optionally modified) delta string, or None to drop the token.
83
- Default implementation passes the delta through unchanged.
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 delta
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 ReasoningDelta, TextDelta
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
- The runner's events pass through the post-hook chain via on_stream_chunk(), which sees
241
- text only: TextDelta and ReasoningDelta content reaches the hooks, and a hook's edit is
242
- written back into the event so `delta` and `event` never disagree. Returning None drops
243
- the chunk entirely, event included. Only TextDelta content is projected into `delta`,
244
- keeping reasoning out of consumers that concatenate it as the answer; every event still
245
- reaches `event`. The volatile cache is cleared on exit.
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
- async for ev in agent.runner.stream(agent, session, requests):
271
- text = ev.content if isinstance(ev, (TextDelta, ReasoningDelta)) else None
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
- text = await hook.on_stream_chunk(session, requests, agent, text)
276
- if text is None:
343
+ result = await hook.on_stream_event(session, requests, agent, ev)
344
+ if result is None:
345
+ emitted: list[StreamEvent] = []
277
346
  break
278
- if text is None:
279
- continue # hook dropped the whole chunk, event included
280
- if text != ev.content:
281
- ev = ev.model_copy(update={"content": text})
282
-
283
- yield StreamChunk(delta=text if isinstance(ev, TextDelta) else None, event=ev)
284
-
285
- self.sessions().store(session)
286
- yield StreamChunk(done=True)
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). WebSocket mode requires ``run(auth_validator=MyValidator())``.
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(cls, auth_validator: Optional[AuthValidator] = None, handlers: Optional[list[RESTRequestHandler]] = None) -> None:
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; unused in the REST queue modes.
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.
@@ -70,7 +70,7 @@ OpenAIModule([general_agent])
70
70
 
71
71
  if __name__ == "__main__":
72
72
  handler = AgentWhatsAppRequestHandler()
73
- RESTAPI.run(handler=handler)
73
+ RESTAPI.run([handler])
74
74
  ```
75
75
 
76
76
  ## Configuration Options