agentbyte 0.49.0__tar.gz → 0.51.0__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 (427) hide show
  1. {agentbyte-0.49.0 → agentbyte-0.51.0}/CHANGELOG.md +68 -0
  2. {agentbyte-0.49.0 → agentbyte-0.51.0}/PKG-INFO +2 -2
  3. {agentbyte-0.49.0 → agentbyte-0.51.0}/README.md +1 -1
  4. agentbyte-0.51.0/src/agentbyte/__about__.py +2 -0
  5. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/cli/eval_commands.py +97 -60
  6. agentbyte-0.51.0/src/agentbyte/cli/history_args.py +28 -0
  7. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/cli/optim_commands.py +99 -37
  8. agentbyte-0.51.0/src/agentbyte/cli/report_output.py +66 -0
  9. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/context_providers/skills.py +11 -1
  10. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/eval/history/config.py +13 -7
  11. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/eval/workbench/compare.py +21 -3
  12. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/eval/workbench/verdict.py +67 -2
  13. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/optim/__init__.py +6 -1
  14. agentbyte-0.51.0/src/agentbyte/optim/binding.py +308 -0
  15. agentbyte-0.51.0/src/agentbyte/optim/job.py +194 -0
  16. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/optim/report.py +6 -0
  17. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/presets/__init__.py +2 -0
  18. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/presets/capitals.py +13 -2
  19. agentbyte-0.51.0/src/agentbyte/presets/skills/capitals-format/SKILL.md +18 -0
  20. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/skills/__init__.py +2 -0
  21. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/skills/sources.py +13 -0
  22. agentbyte-0.51.0/src/agentbyte/webui/ui/assets/index-BreogZut.js +82 -0
  23. agentbyte-0.51.0/src/agentbyte/webui/ui/assets/index-ptxe7GHs.css +1 -0
  24. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/webui/ui/index.html +2 -2
  25. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/cli/test_eval_benchmark_commands.py +58 -1
  26. agentbyte-0.51.0/tests/cli/test_report_output.py +72 -0
  27. agentbyte-0.51.0/tests/eval/test_dimension_scores.py +108 -0
  28. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/eval/test_history_config.py +26 -0
  29. agentbyte-0.51.0/tests/optim/fakes.py +44 -0
  30. agentbyte-0.51.0/tests/optim/test_binding.py +460 -0
  31. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/optim/test_report.py +72 -8
  32. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/presets/test_capitals.py +18 -0
  33. agentbyte-0.49.0/src/agentbyte/__about__.py +0 -2
  34. agentbyte-0.49.0/src/agentbyte/optim/job.py +0 -28
  35. agentbyte-0.49.0/src/agentbyte/webui/ui/assets/index-BbvXWBMU.css +0 -1
  36. agentbyte-0.49.0/src/agentbyte/webui/ui/assets/index-CG-NmR7I.js +0 -82
  37. {agentbyte-0.49.0 → agentbyte-0.51.0}/.gitignore +0 -0
  38. {agentbyte-0.49.0 → agentbyte-0.51.0}/LICENSE +0 -0
  39. {agentbyte-0.49.0 → agentbyte-0.51.0}/pyproject.toml +0 -0
  40. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/__init__.py +0 -0
  41. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/_optional.py +0 -0
  42. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/a2a/__init__.py +0 -0
  43. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/a2a/app.py +0 -0
  44. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/a2a/distributed_context.py +0 -0
  45. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/a2a/executor.py +0 -0
  46. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/a2a/tool.py +0 -0
  47. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/agents/__init__.py +0 -0
  48. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/agents/agent.py +0 -0
  49. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/agents/agent_as_tool.py +0 -0
  50. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/agents/base.py +0 -0
  51. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/agents/embedding_agent.py +0 -0
  52. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/agents/types.py +0 -0
  53. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/cancellation_token.py +0 -0
  54. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/catalog.py +0 -0
  55. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/cli/__init__.py +0 -0
  56. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/cli/__main__.py +0 -0
  57. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/cli/loading.py +0 -0
  58. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/cli/main.py +0 -0
  59. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/cli/serve_commands.py +0 -0
  60. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/compaction/__init__.py +0 -0
  61. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/compaction/counters.py +0 -0
  62. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/compaction/errors.py +0 -0
  63. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/compaction/grouping.py +0 -0
  64. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/compaction/strategies.py +0 -0
  65. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/component.py +0 -0
  66. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/context.py +0 -0
  67. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/context_providers/__init__.py +0 -0
  68. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/context_providers/base.py +0 -0
  69. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/context_providers/skill_tools.py +0 -0
  70. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/dataset/__init__.py +0 -0
  71. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/dataset/_aiosqlite.py +0 -0
  72. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/dataset/base.py +0 -0
  73. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/dataset/config.py +0 -0
  74. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/dataset/importer.py +0 -0
  75. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/dataset/json.py +0 -0
  76. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/dataset/loader.py +0 -0
  77. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/dataset/publish.py +0 -0
  78. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/dataset/publish_config.py +0 -0
  79. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/dataset/publishers.py +0 -0
  80. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/dataset/s3.py +0 -0
  81. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/dataset/sources.py +0 -0
  82. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/dataset/sqlite.py +0 -0
  83. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/dataset/sqlite_db.py +0 -0
  84. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/dataset/write_config.py +0 -0
  85. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/dataset/writers.py +0 -0
  86. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/entity.py +0 -0
  87. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/eval/__init__.py +0 -0
  88. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/eval/base.py +0 -0
  89. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/eval/checks/__init__.py +0 -0
  90. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/eval/checks/decorator.py +0 -0
  91. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/eval/checks/keyword.py +0 -0
  92. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/eval/checks/local.py +0 -0
  93. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/eval/checks/process.py +0 -0
  94. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/eval/checks/tool.py +0 -0
  95. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/eval/checks/types.py +0 -0
  96. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/eval/comparison.py +0 -0
  97. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/eval/eval_dataset.py +0 -0
  98. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/eval/history/__init__.py +0 -0
  99. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/eval/history/_writer_lock.py +0 -0
  100. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/eval/history/conformance.py +0 -0
  101. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/eval/history/errors.py +0 -0
  102. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/eval/history/models.py +0 -0
  103. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/eval/history/recorder.py +0 -0
  104. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/eval/history/sql.py +0 -0
  105. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/eval/history/sqlite.py +0 -0
  106. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/eval/history/store.py +0 -0
  107. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/eval/history/transitions.py +0 -0
  108. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/eval/judges/__init__.py +0 -0
  109. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/eval/judges/base.py +0 -0
  110. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/eval/judges/composite.py +0 -0
  111. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/eval/judges/llm.py +0 -0
  112. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/eval/judges/pairwise.py +0 -0
  113. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/eval/judges/reference.py +0 -0
  114. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/eval/judges/trajectory.py +0 -0
  115. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/eval/judges/validation.py +0 -0
  116. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/eval/pairwise.py +0 -0
  117. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/eval/report.py +0 -0
  118. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/eval/runner.py +0 -0
  119. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/eval/splitting.py +0 -0
  120. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/eval/targets/__init__.py +0 -0
  121. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/eval/targets/agent.py +0 -0
  122. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/eval/targets/model.py +0 -0
  123. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/eval/targets/multi_turn.py +0 -0
  124. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/eval/targets/orchestrator.py +0 -0
  125. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/eval/targets/runtime.py +0 -0
  126. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/eval/targets/workflow.py +0 -0
  127. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/eval/types.py +0 -0
  128. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/eval/workbench/__init__.py +0 -0
  129. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/eval/workbench/benchmark.py +0 -0
  130. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/eval/workbench/coordinator.py +0 -0
  131. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/eval/workbench/jobs.py +0 -0
  132. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/eval/workbench/smoke.py +0 -0
  133. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/eval/workbench/smoke_tasks.json +0 -0
  134. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/eval/workbench/suite.py +0 -0
  135. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/execution_trace/__init__.py +0 -0
  136. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/execution_trace/collector.py +0 -0
  137. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/execution_trace/models.py +0 -0
  138. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/llm/__init__.py +0 -0
  139. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/llm/_retry_observability.py +0 -0
  140. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/llm/auth.py +0 -0
  141. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/llm/azure/__init__.py +0 -0
  142. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/llm/azure/auth.py +0 -0
  143. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/llm/azure/chat.py +0 -0
  144. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/llm/azure/embedding.py +0 -0
  145. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/llm/azure/settings.py +0 -0
  146. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/llm/azure_openai.py +0 -0
  147. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/llm/azure_openai_embedding.py +0 -0
  148. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/llm/base.py +0 -0
  149. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/llm/embeddings_base.py +0 -0
  150. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/llm/openai/__init__.py +0 -0
  151. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/llm/openai/chat.py +0 -0
  152. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/llm/openai/embedding.py +0 -0
  153. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/llm/openai/settings.py +0 -0
  154. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/llm/openai_embedding.py +0 -0
  155. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/llm/pricing.py +0 -0
  156. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/llm/retry_policy.py +0 -0
  157. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/llm/settings.py +0 -0
  158. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/llm/types.py +0 -0
  159. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/logger.py +0 -0
  160. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/memory/__init__.py +0 -0
  161. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/memory/base.py +0 -0
  162. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/messages.py +0 -0
  163. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/middleware/__init__.py +0 -0
  164. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/middleware/base.py +0 -0
  165. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/middleware/otel.py +0 -0
  166. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/middleware/retry.py +0 -0
  167. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/middleware/sql_usage.py +0 -0
  168. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/middleware/usage_logger.py +0 -0
  169. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/notebook.py +0 -0
  170. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/optim/base.py +0 -0
  171. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/optim/config.py +0 -0
  172. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/optim/gepa.py +0 -0
  173. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/optim/mipro.py +0 -0
  174. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/optim/pareto.py +0 -0
  175. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/optim/reflective.py +0 -0
  176. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/optim/spec.py +0 -0
  177. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/optim/trace.py +0 -0
  178. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/orchestration/__init__.py +0 -0
  179. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/orchestration/ai.py +0 -0
  180. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/orchestration/base.py +0 -0
  181. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/orchestration/handoff.py +0 -0
  182. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/orchestration/plan.py +0 -0
  183. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/orchestration/policies.py +0 -0
  184. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/orchestration/round_robin.py +0 -0
  185. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/presets/agents.py +0 -0
  186. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/presets/benchmark.py +0 -0
  187. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/presets/clients.py +0 -0
  188. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/presets/instruction_registry.py +0 -0
  189. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/presets/instructions/orchestrator.yaml +0 -0
  190. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/presets/instructions/query_rewriter.yaml +0 -0
  191. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/presets/instructions/researcher.yaml +0 -0
  192. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/presets/instructions/reviewer.yaml +0 -0
  193. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/presets/instructions/writer.yaml +0 -0
  194. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/presets/orchestration.py +0 -0
  195. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/presets/skills/contracts-analyst/SKILL.md +0 -0
  196. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/presets/skills/hr-analyst/SKILL.md +0 -0
  197. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/presets/skills/hr-analyst/resources/departments.md +0 -0
  198. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/presets/skills/hr-analyst/resources/employees.md +0 -0
  199. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/presets/skills/hr-analyst/resources/payroll.md +0 -0
  200. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/presets/streaming.py +0 -0
  201. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/presets/workflow.py +0 -0
  202. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/session_store.py +0 -0
  203. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/skills/base.py +0 -0
  204. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/skills/resources.py +0 -0
  205. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/skills/scripts.py +0 -0
  206. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/skills/validation.py +0 -0
  207. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/termination/__init__.py +0 -0
  208. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/termination/base.py +0 -0
  209. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/termination/cancellation.py +0 -0
  210. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/termination/composite.py +0 -0
  211. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/termination/consecutive_agent.py +0 -0
  212. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/termination/external.py +0 -0
  213. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/termination/function_call.py +0 -0
  214. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/termination/handoff.py +0 -0
  215. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/termination/max_message.py +0 -0
  216. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/termination/predicate.py +0 -0
  217. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/termination/source.py +0 -0
  218. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/termination/text_mention.py +0 -0
  219. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/termination/timeout.py +0 -0
  220. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/termination/token_usage.py +0 -0
  221. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/tools/__init__.py +0 -0
  222. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/tools/base.py +0 -0
  223. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/tools/coding_tools.py +0 -0
  224. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/tools/core_tools.py +0 -0
  225. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/tools/decorator.py +0 -0
  226. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/tools/mcp/__init__.py +0 -0
  227. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/tools/mcp/client.py +0 -0
  228. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/tools/mcp/config.py +0 -0
  229. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/tools/mcp/errors.py +0 -0
  230. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/tools/mcp/tool.py +0 -0
  231. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/tools/mcp/transports.py +0 -0
  232. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/tools/memory_tool.py +0 -0
  233. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/tools/research_tools.py +0 -0
  234. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/types.py +0 -0
  235. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/webui/__init__.py +0 -0
  236. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/webui/discovery.py +0 -0
  237. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/webui/eval_routes.py +0 -0
  238. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/webui/execution.py +0 -0
  239. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/webui/mcp/__init__.py +0 -0
  240. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/webui/mcp/servers/__init__.py +0 -0
  241. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/webui/mcp/servers/apps_server.py +0 -0
  242. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/webui/mcp/servers/auth_server.py +0 -0
  243. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/webui/mcp/servers/basic_server.py +0 -0
  244. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/webui/mcp/servers/mrtr_server.py +0 -0
  245. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/webui/mcp/servers/notify_server.py +0 -0
  246. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/webui/mcp_playground.py +0 -0
  247. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/webui/mcp_routes.py +0 -0
  248. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/webui/models.py +0 -0
  249. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/webui/registry.py +0 -0
  250. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/webui/server.py +0 -0
  251. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/webui/session_store.py +0 -0
  252. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/webui/sessions.py +0 -0
  253. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/webui/ui/vite.svg +0 -0
  254. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/workflow/__init__.py +0 -0
  255. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/workflow/agent.py +0 -0
  256. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/workflow/core/__init__.py +0 -0
  257. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/workflow/core/_structure_hash.py +0 -0
  258. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/workflow/core/checkpoint.py +0 -0
  259. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/workflow/core/models.py +0 -0
  260. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/workflow/core/runner.py +0 -0
  261. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/workflow/core/workflow.py +0 -0
  262. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/workflow/defaults.py +0 -0
  263. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/workflow/errors.py +0 -0
  264. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/workflow/loader.py +0 -0
  265. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/workflow/schema.py +0 -0
  266. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/workflow/schema_utils.py +0 -0
  267. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/workflow/sqlite_checkpoint.py +0 -0
  268. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/workflow/steps/__init__.py +0 -0
  269. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/workflow/steps/agent.py +0 -0
  270. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/workflow/steps/echo.py +0 -0
  271. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/workflow/steps/function.py +0 -0
  272. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/workflow/steps/http.py +0 -0
  273. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/workflow/steps/step.py +0 -0
  274. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/workflow/steps/subworkflow.py +0 -0
  275. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/workflow/steps/transform.py +0 -0
  276. {agentbyte-0.49.0 → agentbyte-0.51.0}/src/agentbyte/workflow/visualizer.py +0 -0
  277. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/a2a/a2a_helpers.py +0 -0
  278. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/a2a/test_a2a_adapters.py +0 -0
  279. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/a2a/test_distributed_context.py +0 -0
  280. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/agents/test_agent_as_tool.py +0 -0
  281. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/agents/test_agent_basic.py +0 -0
  282. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/agents/test_agent_context_providers.py +0 -0
  283. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/agents/test_agent_error_response.py +0 -0
  284. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/agents/test_agent_event_types.py +0 -0
  285. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/agents/test_agent_memory_integration.py +0 -0
  286. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/agents/test_agent_middleware_integration.py +0 -0
  287. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/agents/test_agent_response_accessors.py +0 -0
  288. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/agents/test_agent_retry_middleware.py +0 -0
  289. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/agents/test_agent_stop_at_tools.py +0 -0
  290. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/agents/test_agent_stream_events.py +0 -0
  291. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/agents/test_embedding_agent.py +0 -0
  292. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/agents/test_tool_approval.py +0 -0
  293. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/agents/test_tool_batch_resolution.py +0 -0
  294. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/agents/test_tool_metadata.py +0 -0
  295. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/cli/test_loading.py +0 -0
  296. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/cli/test_registry_check.py +0 -0
  297. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/cli/test_serve_command.py +0 -0
  298. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/compaction/test_compaction.py +0 -0
  299. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/conftest.py +0 -0
  300. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/context_providers/__init__.py +0 -0
  301. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/context_providers/test_skill_tools.py +0 -0
  302. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/context_providers/test_skills_provider.py +0 -0
  303. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/dataset/fake_s3.py +0 -0
  304. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/dataset/test_dataset_exit.py +0 -0
  305. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/dataset/test_loader.py +0 -0
  306. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/dataset/test_multi_table.py +0 -0
  307. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/dataset/test_publish.py +0 -0
  308. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/dataset/test_sqlite_db.py +0 -0
  309. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/eval/test_eval_benchmarks.py +0 -0
  310. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/eval/test_eval_dataset.py +0 -0
  311. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/eval/test_eval_history.py +0 -0
  312. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/eval/test_eval_history_backends.py +0 -0
  313. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/eval/test_eval_jobs.py +0 -0
  314. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/eval/test_eval_workbench.py +0 -0
  315. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/eval/test_execution_trajectories.py +0 -0
  316. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/eval/test_multi_turn.py +0 -0
  317. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/eval/test_pairwise.py +0 -0
  318. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/eval/test_phase1_runner_and_targets.py +0 -0
  319. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/eval/test_phase2_checks_and_reports.py +0 -0
  320. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/eval/test_run_comparison.py +0 -0
  321. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/eval/test_score_integrity.py +0 -0
  322. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/eval/test_splitting.py +0 -0
  323. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/eval/test_types_and_judges.py +0 -0
  324. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/llm/test_azure_client.py +0 -0
  325. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/llm/test_azure_embedding_client.py +0 -0
  326. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/llm/test_llm_types.py +0 -0
  327. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/llm/test_openai_client.py +0 -0
  328. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/llm/test_openai_embedding_client.py +0 -0
  329. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/llm/test_pricing.py +0 -0
  330. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/llm/test_retry_observability.py +0 -0
  331. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/llm/test_retry_policy_api.py +0 -0
  332. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/llm/test_retryable_error_substrings.py +0 -0
  333. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/memory/test_memory.py +0 -0
  334. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/middleware/test_context_compaction.py +0 -0
  335. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/middleware/test_deduplicate_tool_result.py +0 -0
  336. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/middleware/test_middleware_chain.py +0 -0
  337. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/middleware/test_otel.py +0 -0
  338. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/middleware/test_retry_middleware.py +0 -0
  339. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/middleware/test_sql_usage.py +0 -0
  340. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/middleware/test_usage_logger.py +0 -0
  341. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/optim/__init__.py +0 -0
  342. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/optim/test_base.py +0 -0
  343. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/optim/test_base_integration.py +0 -0
  344. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/optim/test_config.py +0 -0
  345. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/optim/test_description_tunable.py +0 -0
  346. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/optim/test_gepa.py +0 -0
  347. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/optim/test_mipro.py +0 -0
  348. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/optim/test_orchestrator_optim.py +0 -0
  349. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/optim/test_pareto.py +0 -0
  350. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/optim/test_reflective.py +0 -0
  351. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/optim/test_score_integrity.py +0 -0
  352. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/optim/test_spec.py +0 -0
  353. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/optim/test_trace.py +0 -0
  354. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/orchestration/test_ai_orchestrator.py +0 -0
  355. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/orchestration/test_base_orchestrator.py +0 -0
  356. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/orchestration/test_handoff_orchestrator.py +0 -0
  357. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/orchestration/test_history_tool_call_pairing.py +0 -0
  358. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/orchestration/test_orchestration_usage_breakdown.py +0 -0
  359. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/orchestration/test_orchestrator_agent_contract.py +0 -0
  360. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/orchestration/test_orchestrator_finalization.py +0 -0
  361. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/orchestration/test_orchestrator_member_events.py +0 -0
  362. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/orchestration/test_orchestrator_otel.py +0 -0
  363. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/orchestration/test_orchestrator_synthesis.py +0 -0
  364. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/orchestration/test_plan_orchestrator.py +0 -0
  365. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/orchestration/test_round_robin.py +0 -0
  366. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/presets/test_agents.py +0 -0
  367. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/presets/test_benchmark.py +0 -0
  368. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/presets/test_clients.py +0 -0
  369. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/presets/test_instruction_registry.py +0 -0
  370. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/presets/test_orchestration.py +0 -0
  371. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/presets/test_streaming.py +0 -0
  372. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/presets/test_workflow.py +0 -0
  373. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/skills/__init__.py +0 -0
  374. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/skills/test_base.py +0 -0
  375. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/skills/test_resources.py +0 -0
  376. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/skills/test_scripts.py +0 -0
  377. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/skills/test_sources.py +0 -0
  378. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/termination/test_base.py +0 -0
  379. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/termination/test_cancellation.py +0 -0
  380. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/termination/test_composite.py +0 -0
  381. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/termination/test_consecutive_agent.py +0 -0
  382. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/termination/test_external.py +0 -0
  383. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/termination/test_function_call.py +0 -0
  384. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/termination/test_handoff.py +0 -0
  385. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/termination/test_max_message.py +0 -0
  386. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/termination/test_predicate.py +0 -0
  387. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/termination/test_source.py +0 -0
  388. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/termination/test_text_mention.py +0 -0
  389. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/termination/test_timeout.py +0 -0
  390. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/termination/test_token_usage.py +0 -0
  391. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/test_cancellation_token.py +0 -0
  392. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/test_context.py +0 -0
  393. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/test_logger.py +0 -0
  394. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/test_messages.py +0 -0
  395. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/test_option_enums.py +0 -0
  396. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/test_optional_extras.py +0 -0
  397. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/test_package_api.py +0 -0
  398. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/test_session_store.py +0 -0
  399. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/test_types.py +0 -0
  400. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/tools/fixtures/mcp_stdio_server.py +0 -0
  401. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/tools/test_coding_tools.py +0 -0
  402. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/tools/test_mcp_tools.py +0 -0
  403. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/tools/test_memory_tool.py +0 -0
  404. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/tools/test_research_tools.py +0 -0
  405. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/tools/test_tools.py +0 -0
  406. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/webui/__init__.py +0 -0
  407. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/webui/helpers.py +0 -0
  408. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/webui/test_eval_routes.py +0 -0
  409. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/webui/test_execution.py +0 -0
  410. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/webui/test_mcp_routes.py +0 -0
  411. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/webui/test_package_api.py +0 -0
  412. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/webui/test_registry.py +0 -0
  413. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/webui/test_server.py +0 -0
  414. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/webui/test_sessions.py +0 -0
  415. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/webui/test_workflow_streaming.py +0 -0
  416. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/workflow/recovery_worker.py +0 -0
  417. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/workflow/test_agent_step_imports.py +0 -0
  418. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/workflow/test_checkpoint.py +0 -0
  419. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/workflow/test_subworkflow_step.py +0 -0
  420. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/workflow/test_workflow_agent.py +0 -0
  421. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/workflow/test_workflow_class.py +0 -0
  422. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/workflow/test_workflow_models.py +0 -0
  423. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/workflow/test_workflow_reliability.py +0 -0
  424. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/workflow/test_workflow_runner.py +0 -0
  425. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/workflow/test_workflow_schema.py +0 -0
  426. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/workflow/test_workflow_steps.py +0 -0
  427. {agentbyte-0.49.0 → agentbyte-0.51.0}/tests/workflow/test_workflow_visualizer.py +0 -0
@@ -6,6 +6,74 @@ The format follows Keep a Changelog principles and semantic versioning.
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [0.51.0] - 2026-10-09
10
+
11
+ ### Added
12
+
13
+ - Per-dimension scores in the WebUI and reports: `SuiteItemVerdict.dimensions` and
14
+ `SuiteRunSummary.dimension_means`, `TaskCell.dimensions` and `RunColumn.mean_dimensions` (over the
15
+ shared tasks). The run page gets a Dimensions table, run comparisons and benchmark reports get
16
+ per-dimension means with the change against the baseline plus a per-task breakdown, and the run and
17
+ benchmark Markdown reports list the dimension means. Runs without dimensions are unchanged.
18
+ - Benchmark report page: a "Show per-task" selector switches the task-by-variant matrix between the
19
+ overall score and any judged dimension, with the change against the baseline variant.
20
+
21
+ ## [0.50.0] - 2026-10-09
22
+
23
+ ### Changed (breaking)
24
+
25
+ - `OptimizationJob` now takes `agent_factory`, a `suite` object and a `reflector` client instead of an
26
+ `optimizer` instance, a hand-written `AgentConfig` seed, a suite name and a pass mark. The seed is
27
+ derived from the agent the factory builds; tasks, judge, criteria, pass mark and agent identity come
28
+ from the suite. The factory runs when the job runs and is validated (fresh agents, no shared memory,
29
+ middleware or providers, faithful rebuild) before the first paid evaluation. Pick another optimizer
30
+ with `optimizer=` and `optimizer_options=`. Edits are applied to a fresh agent per evaluated task, so
31
+ memory, middleware and other runtime settings stay as the factory built them.
32
+
33
+ ### Added
34
+
35
+ - Tuning of tools and of inline and file skills through the factory path; file skills keep their
36
+ resources and scripts, and class skills stay fixed and raise a clear error if a candidate replaces
37
+ them. `SkillsProvider.load_skills()` and `transform_skills()`, `TransformingSkillsSource`,
38
+ `OptimizationJob.prepare()` and `AgentBinding`.
39
+ - `--out DIR` and `--format {text,json,markdown}` on `eval run`, `eval results`, `eval benchmark run`
40
+ and `eval comparison`, plus `SuiteRunSummary.to_markdown()`: write one Markdown or JSON report per
41
+ run into `DIR/<run-id>/`, so runs never overwrite each other.
42
+ - `OptimizationJob.agent_id` and `agent_name`: `agentbyte optim run` now stores the run under the
43
+ suite's agent, as the Python path already could.
44
+ - `--trace` flag on `optim run` and `optim report` (writes `trace.json` next to the report), and
45
+ `OptimizationReport.save_trace()`.
46
+ - `--concurrency` on `eval benchmark run`: tasks evaluated at once per variant (default 4, at least 1),
47
+ as `eval run` already had. All variants still run together, so up to variants x concurrency tasks are
48
+ in flight.
49
+ - `optim run --capture {summary,full}`: `full` keeps agent transcripts in the stored optimization trace
50
+ (the same word `eval run --capture` uses). `optim report --format text` prints a short summary.
51
+
52
+ ### Removed
53
+
54
+ - `eval comparison --markdown`; use `--format markdown`.
55
+
56
+ ### Changed
57
+
58
+ - `examples/eval/comprehensive_workbench.py` is now a plain catalog (a module-level `registry`) run with
59
+ `agentbyte eval benchmark run comprehensive --task-set mini --catalog examples/eval/comprehensive_workbench.py`.
60
+ It no longer has its own script arguments or history setup, and a benchmark run exits 0 once its
61
+ report is recorded rather than failing on low scores. The old documented `--catalog ...:build_registry`
62
+ form never loaded, because `build_registry` is a function.
63
+ - `optim run` and `optim report` write one report per run, `DIR/<run-id>/report.md` (or `report.json`
64
+ with `--format json`), instead of `report.md`, `report.json` and `trace.json` directly in `DIR`; the
65
+ trace is written only with `--trace`. `--format` defaults to the screen format without `--out` and to
66
+ Markdown with it. `OptimizationReport.save(directory)` is unchanged.
67
+ - The eval_app example reads the history backend from the environment and declares its agent identity;
68
+ `run_optim.py` and `run_webui.py` default to the same SQLite path as `run_eval.py`.
69
+ - WebUI Evaluations page lists Eval suites first and Benchmarks below them; the WebUI eval docs and the
70
+ optimization guide cover the environment-driven credentials and history setup.
71
+
72
+ ### Fixed
73
+
74
+ - WebUI item page: expanded Tool Call and Tool Result details were unreadable (light text on a white
75
+ box); they now use a dark text colour.
76
+
9
77
  ## [0.49.0] - 2026-10-08
10
78
 
11
79
  ### Added
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: agentbyte
3
- Version: 0.49.0
3
+ Version: 0.51.0
4
4
  Summary: A toolkit for designing multiagent systems
5
5
  Author-email: MrDataPsycho <mr.data.psycho@gmail.com>
6
6
  License-Expression: LicenseRef-Proprietary
@@ -84,7 +84,7 @@ Description-Content-Type: text/markdown
84
84
 
85
85
  Agentbyte is an observability-first agentic AI framework for building and studying multiagent systems with a learning-first, implementation-oriented workflow.
86
86
 
87
- Current release: **0.49.0**
87
+ Current release: **0.51.0**
88
88
 
89
89
  ## Building an Agent
90
90
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  Agentbyte is an observability-first agentic AI framework for building and studying multiagent systems with a learning-first, implementation-oriented workflow.
4
4
 
5
- Current release: **0.49.0**
5
+ Current release: **0.51.0**
6
6
 
7
7
  ## Building an Agent
8
8
 
@@ -0,0 +1,2 @@
1
+ __version__ = "0.51.0"
2
+ VERSION = __version__
@@ -13,6 +13,9 @@ import json
13
13
  import sys
14
14
  from typing import Any
15
15
 
16
+ from agentbyte.cli.history_args import HistoryPathAction, history_is_explicit
17
+ from agentbyte.cli.report_output import deliver
18
+
16
19
  EXIT_PASSED = 0
17
20
  EXIT_FAILED = 1
18
21
  EXIT_ERROR = 2
@@ -21,12 +24,28 @@ EXIT_INTERRUPTED = 130
21
24
  DEFAULT_CATALOG = "agentbyte.eval.workbench.smoke"
22
25
  DEFAULT_HISTORY = ".agentbyte/eval/default/eval.sqlite"
23
26
  DEFAULT_UI_PORT = 8090
27
+ CONCURRENCY_HELP = "Tasks evaluated at once"
24
28
 
25
29
 
26
30
  class _CliError(Exception):
27
31
  """A configuration or storage problem reported with exit code 2."""
28
32
 
29
33
 
34
+ def _add_report_flags(parser: argparse.ArgumentParser) -> None:
35
+ parser.add_argument(
36
+ "--format",
37
+ choices=["text", "json", "markdown"],
38
+ default=None,
39
+ help="Output format (default: text on screen, Markdown in the --out file)",
40
+ )
41
+ parser.add_argument(
42
+ "--out",
43
+ metavar="DIR",
44
+ default=None,
45
+ help="Write the report to DIR/<run-id>/report.md (report.json with --format json)",
46
+ )
47
+
48
+
30
49
  def add_eval_parser(subparsers: Any) -> None:
31
50
  """Register ``agentbyte eval`` and its sub-commands."""
32
51
  eval_parser = subparsers.add_parser("eval", help="Run registered evaluation suites")
@@ -38,8 +57,8 @@ def add_eval_parser(subparsers: Any) -> None:
38
57
  f"(default: the built-in smoke suite, {DEFAULT_CATALOG})"
39
58
  )
40
59
  history_help = (
41
- f"SQLite evaluation history file (default: ./{DEFAULT_HISTORY}); ignored when "
42
- "AGENTBYTE_EXPERIMENT_HISTORY_BACKEND=postgres"
60
+ f"SQLite evaluation history file (default: ./{DEFAULT_HISTORY}). An explicit value "
61
+ "takes precedence over AGENTBYTE_EXPERIMENT_HISTORY_BACKEND=postgres."
43
62
  )
44
63
 
45
64
  list_parser = eval_sub.add_parser("list", help="List the suites in a catalog")
@@ -49,20 +68,20 @@ def add_eval_parser(subparsers: Any) -> None:
49
68
  run_parser = eval_sub.add_parser("run", help="Run one suite and record it")
50
69
  run_parser.add_argument("suite", help="Registered suite name")
51
70
  run_parser.add_argument("--catalog", default=DEFAULT_CATALOG, help=catalog_help)
52
- run_parser.add_argument("--history", default=DEFAULT_HISTORY, help=history_help)
71
+ run_parser.add_argument("--history", default=DEFAULT_HISTORY, action=HistoryPathAction, help=history_help)
53
72
  run_parser.add_argument(
54
73
  "--capture",
55
74
  choices=["summary", "full"],
56
75
  default="summary",
57
76
  help="What to store per item (default: summary; full also stores trajectories)",
58
77
  )
59
- run_parser.add_argument("--concurrency", type=int, default=4, help="Tasks evaluated at once")
60
- run_parser.add_argument("--format", choices=["text", "json"], default="text")
78
+ run_parser.add_argument("--concurrency", type=int, default=4, help=CONCURRENCY_HELP)
79
+ _add_report_flags(run_parser)
61
80
 
62
81
  results_parser = eval_sub.add_parser("results", help="Show the verdict of a recorded run")
63
82
  results_parser.add_argument("run_id", help="Run ID printed by 'agentbyte eval run'")
64
- results_parser.add_argument("--history", default=DEFAULT_HISTORY, help=history_help)
65
- results_parser.add_argument("--format", choices=["text", "json"], default="text")
83
+ results_parser.add_argument("--history", default=DEFAULT_HISTORY, action=HistoryPathAction, help=history_help)
84
+ _add_report_flags(results_parser)
66
85
 
67
86
  compare_parser = eval_sub.add_parser(
68
87
  "compare", help="Compare two or more recorded runs task by task"
@@ -70,7 +89,7 @@ def add_eval_parser(subparsers: Any) -> None:
70
89
  compare_parser.add_argument(
71
90
  "run_ids", nargs="+", help="Run IDs to compare; the first is the baseline"
72
91
  )
73
- compare_parser.add_argument("--history", default=DEFAULT_HISTORY, help=history_help)
92
+ compare_parser.add_argument("--history", default=DEFAULT_HISTORY, action=HistoryPathAction, help=history_help)
74
93
  compare_parser.add_argument("--format", choices=["text", "json"], default="text")
75
94
  compare_parser.add_argument(
76
95
  "--regression-threshold",
@@ -100,19 +119,26 @@ def add_eval_parser(subparsers: Any) -> None:
100
119
  help="A task set to run (repeat to combine, e.g. --task-set mini --task-set hard)",
101
120
  )
102
121
  bench_run.add_argument("--catalog", default=DEFAULT_CATALOG, help=catalog_help)
103
- bench_run.add_argument("--history", default=DEFAULT_HISTORY, help=history_help)
122
+ bench_run.add_argument("--history", default=DEFAULT_HISTORY, action=HistoryPathAction, help=history_help)
104
123
  bench_run.add_argument(
105
124
  "--capture",
106
125
  choices=["summary", "full"],
107
126
  default="summary",
108
127
  help="What to store per item (default: summary; full also stores trajectories)",
109
128
  )
110
- bench_run.add_argument("--format", choices=["text", "json", "markdown"], default="text")
129
+ bench_run.add_argument(
130
+ "--concurrency",
131
+ type=int,
132
+ default=4,
133
+ help="Tasks evaluated at once per variant; all variants run together, so up to "
134
+ "(variants x this) tasks are in flight",
135
+ )
136
+ _add_report_flags(bench_run)
111
137
 
112
138
  comparisons_parser = eval_sub.add_parser(
113
139
  "comparisons", help="List recorded benchmark comparison reports"
114
140
  )
115
- comparisons_parser.add_argument("--history", default=DEFAULT_HISTORY, help=history_help)
141
+ comparisons_parser.add_argument("--history", default=DEFAULT_HISTORY, action=HistoryPathAction, help=history_help)
116
142
  comparisons_parser.add_argument("--benchmark", help="Only comparisons of this benchmark")
117
143
  comparisons_parser.add_argument("--format", choices=["text", "json"], default="text")
118
144
 
@@ -120,17 +146,14 @@ def add_eval_parser(subparsers: Any) -> None:
120
146
  "comparison", help="Show one recorded benchmark comparison report"
121
147
  )
122
148
  comparison_parser.add_argument("comparison_id", help="Comparison ID from 'eval comparisons'")
123
- comparison_parser.add_argument("--history", default=DEFAULT_HISTORY, help=history_help)
124
- comparison_parser.add_argument("--format", choices=["text", "json", "markdown"], default="text")
125
- comparison_parser.add_argument(
126
- "--markdown", action="store_true", help="Print the report as Markdown (same as --format markdown)"
127
- )
149
+ comparison_parser.add_argument("--history", default=DEFAULT_HISTORY, action=HistoryPathAction, help=history_help)
150
+ _add_report_flags(comparison_parser)
128
151
 
129
152
  ui_parser = eval_sub.add_parser(
130
153
  "ui", help="Open the evaluation pages in the browser (Evaluations only, no Playground)"
131
154
  )
132
155
  ui_parser.add_argument("--catalog", default=DEFAULT_CATALOG, help=catalog_help)
133
- ui_parser.add_argument("--history", default=DEFAULT_HISTORY, help=history_help)
156
+ ui_parser.add_argument("--history", default=DEFAULT_HISTORY, action=HistoryPathAction, help=history_help)
134
157
  ui_parser.add_argument("--port", "-p", type=int, default=DEFAULT_UI_PORT,
135
158
  help=f"Port to serve on (default: {DEFAULT_UI_PORT})")
136
159
  ui_parser.add_argument("--host", default="127.0.0.1", help="Host to bind (default: 127.0.0.1)")
@@ -177,9 +200,9 @@ def _cmd_ui(args: argparse.Namespace) -> int:
177
200
  from agentbyte.webui import launch
178
201
  except (MissingExtraError, ImportError) as exc:
179
202
  raise _CliError(str(exc)) from exc
180
- asyncio.run(_check_history_is_free(args.history))
203
+ asyncio.run(_check_history_is_free(args.history, force_sqlite=history_is_explicit(args)))
181
204
  print(
182
- f"Evaluations: http://{args.host}:{args.port} (history {_history_label(args.history)}; Ctrl-C to stop)",
205
+ f"Evaluations: http://{args.host}:{args.port} (history {_history_label(args.history, force_sqlite=history_is_explicit(args))}; Ctrl-C to stop)",
183
206
  file=sys.stderr,
184
207
  )
185
208
  try:
@@ -199,12 +222,12 @@ def _cmd_ui(args: argparse.Namespace) -> int:
199
222
  return EXIT_PASSED
200
223
 
201
224
 
202
- async def _check_history_is_free(path: str) -> None:
225
+ async def _check_history_is_free(path: str, *, force_sqlite: bool = False) -> None:
203
226
  """Fail fast when another process (a CLI run, another server) holds the history file."""
204
227
  from agentbyte.eval.history import EvalHistoryError
205
228
 
206
229
  try:
207
- async with _open_store(path, writer=True):
230
+ async with _open_store(path, writer=True, force_sqlite=force_sqlite):
208
231
  pass
209
232
  except EvalHistoryError as exc:
210
233
  raise _CliError(f"{exc} (only one process can write {path!r} at a time)") from exc
@@ -248,9 +271,13 @@ def _cmd_list(args: argparse.Namespace) -> int:
248
271
  # -- run --------------------------------------------------------------------------
249
272
 
250
273
 
251
- def _cmd_run(args: argparse.Namespace) -> int:
274
+ def _require_concurrency(args: argparse.Namespace) -> None:
252
275
  if args.concurrency < 1:
253
276
  raise _CliError("--concurrency must be at least 1")
277
+
278
+
279
+ def _cmd_run(args: argparse.Namespace) -> int:
280
+ _require_concurrency(args)
254
281
  registry = load_registry(args.catalog)
255
282
  if args.suite not in registry:
256
283
  raise _CliError(f"Unknown evaluation suite {args.suite!r}")
@@ -269,7 +296,7 @@ async def _run(args: argparse.Namespace, registry: Any, started: list[str]) -> i
269
296
  from agentbyte.eval.history import EvalHistoryError
270
297
  from agentbyte.eval.workbench import EvalSuiteCoordinator, EvalSuiteError
271
298
 
272
- text = args.format == "text"
299
+ text = args.format in (None, "text")
273
300
 
274
301
  def on_start(run: Any) -> None:
275
302
  started.append(run.id)
@@ -277,7 +304,7 @@ async def _run(args: argparse.Namespace, registry: Any, started: list[str]) -> i
277
304
  print(f"run {run.id} started (suite {args.suite})", file=sys.stderr, flush=True)
278
305
 
279
306
  try:
280
- async with _open_store(args.history, writer=True) as store:
307
+ async with _open_store(args.history, writer=True, force_sqlite=history_is_explicit(args)) as store:
281
308
  await store.recover_interrupted()
282
309
  coordinator = EvalSuiteCoordinator(
283
310
  store, registry, capture=args.capture, concurrency=args.concurrency
@@ -290,7 +317,7 @@ async def _run(args: argparse.Namespace, registry: Any, started: list[str]) -> i
290
317
  if started:
291
318
  print(f"run {started[0]} did not complete.", file=sys.stderr)
292
319
  raise _CliError(str(exc)) from exc
293
- _print_summary(summary, args.format)
320
+ _print_summary(summary, args.format, args.out)
294
321
  return EXIT_PASSED if summary.passed else EXIT_FAILED
295
322
 
296
323
 
@@ -305,13 +332,13 @@ async def _results(args: argparse.Namespace) -> int:
305
332
  from agentbyte.eval.history import EvalHistoryError
306
333
  from agentbyte.eval.workbench import EvalSuiteCoordinator, EvalSuiteError
307
334
 
308
- _require_history(args.history)
335
+ _require_history(args.history, force_sqlite=history_is_explicit(args))
309
336
  try:
310
- async with _open_store(args.history, writer=False) as store:
337
+ async with _open_store(args.history, writer=False, force_sqlite=history_is_explicit(args)) as store:
311
338
  summary = await EvalSuiteCoordinator(store).summary(args.run_id)
312
339
  except (EvalSuiteError, EvalHistoryError) as exc:
313
340
  raise _CliError(str(exc)) from exc
314
- _print_summary(summary, args.format)
341
+ _print_summary(summary, args.format, args.out)
315
342
  return EXIT_PASSED if summary.passed else EXIT_FAILED
316
343
 
317
344
 
@@ -328,9 +355,9 @@ async def _compare(args: argparse.Namespace) -> int:
328
355
 
329
356
  if len(args.run_ids) < 2:
330
357
  raise _CliError("compare needs at least two run IDs (the first is the baseline)")
331
- _require_history(args.history)
358
+ _require_history(args.history, force_sqlite=history_is_explicit(args))
332
359
  try:
333
- async with _open_store(args.history, writer=False) as store:
360
+ async with _open_store(args.history, writer=False, force_sqlite=history_is_explicit(args)) as store:
334
361
  coordinator = EvalSuiteCoordinator(store)
335
362
  summaries = [await coordinator.summary(run_id) for run_id in args.run_ids]
336
363
  except (EvalSuiteError, EvalHistoryError) as exc:
@@ -471,6 +498,7 @@ def _cmd_benchmark_list(args: argparse.Namespace) -> int:
471
498
 
472
499
 
473
500
  def _cmd_benchmark_run(args: argparse.Namespace) -> int:
501
+ _require_concurrency(args)
474
502
  registry = load_registry(args.catalog)
475
503
  task_sets = args.task_sets or []
476
504
  if not task_sets:
@@ -487,9 +515,11 @@ async def _benchmark_run(args: argparse.Namespace, registry: Any, task_sets: lis
487
515
  from agentbyte.eval.workbench import EvalSuiteCoordinator, EvalSuiteError
488
516
 
489
517
  try:
490
- async with _open_store(args.history, writer=True) as store:
518
+ async with _open_store(args.history, writer=True, force_sqlite=history_is_explicit(args)) as store:
491
519
  await store.recover_interrupted()
492
- coordinator = EvalSuiteCoordinator(store, registry, capture=args.capture)
520
+ coordinator = EvalSuiteCoordinator(
521
+ store, registry, capture=args.capture, concurrency=args.concurrency
522
+ )
493
523
  print(
494
524
  f"running benchmark {args.name!r} over task sets: {', '.join(task_sets)}",
495
525
  file=sys.stderr,
@@ -498,7 +528,7 @@ async def _benchmark_run(args: argparse.Namespace, registry: Any, task_sets: lis
498
528
  record = await coordinator.run_benchmark(args.name, task_sets, capture=args.capture)
499
529
  except (EvalSuiteError, EvalHistoryError) as exc:
500
530
  raise _CliError(str(exc)) from exc
501
- _print_comparison_record(record, args.format)
531
+ _print_comparison_record(record, args.format, args.out)
502
532
  return EXIT_PASSED if record.status == "completed" else EXIT_FAILED
503
533
 
504
534
 
@@ -510,9 +540,9 @@ async def _comparisons(args: argparse.Namespace) -> int:
510
540
  from agentbyte.eval.history import EvalHistoryError
511
541
  from agentbyte.eval.workbench import EvalSuiteCoordinator, EvalSuiteError
512
542
 
513
- _require_history(args.history)
543
+ _require_history(args.history, force_sqlite=history_is_explicit(args))
514
544
  try:
515
- async with _open_store(args.history, writer=False) as store:
545
+ async with _open_store(args.history, writer=False, force_sqlite=history_is_explicit(args)) as store:
516
546
  coordinator = EvalSuiteCoordinator(store)
517
547
  records = await store.list_comparisons(
518
548
  benchmark=args.benchmark, owner=coordinator.owner, limit=200
@@ -541,30 +571,31 @@ async def _comparison(args: argparse.Namespace) -> int:
541
571
  from agentbyte.eval.history import EvalHistoryError
542
572
  from agentbyte.eval.workbench import EvalSuiteCoordinator, EvalSuiteError
543
573
 
544
- _require_history(args.history)
574
+ _require_history(args.history, force_sqlite=history_is_explicit(args))
545
575
  try:
546
- async with _open_store(args.history, writer=False) as store:
576
+ async with _open_store(args.history, writer=False, force_sqlite=history_is_explicit(args)) as store:
547
577
  coordinator = EvalSuiteCoordinator(store)
548
578
  record = await store.get_comparison(args.comparison_id)
549
579
  except (EvalSuiteError, EvalHistoryError) as exc:
550
580
  raise _CliError(str(exc)) from exc
551
581
  if record is None or record.owner != coordinator.owner:
552
582
  raise _CliError(f"Unknown benchmark comparison {args.comparison_id!r}")
553
- _print_comparison_record(record, "markdown" if args.markdown else args.format)
583
+ _print_comparison_record(record, args.format, args.out)
554
584
  return EXIT_PASSED if record.status == "completed" else EXIT_FAILED
555
585
 
556
586
 
557
- def _print_comparison_record(record: Any, output_format: str) -> None:
558
- if output_format == "json":
559
- print(json.dumps(record.model_dump(mode="json"), indent=2))
560
- return
561
- if output_format == "markdown":
587
+ def _print_comparison_record(record: Any, output_format: str | None, out: str | None = None) -> None:
588
+ def render(kind: str) -> str:
589
+ if kind == "json":
590
+ return json.dumps(record.model_dump(mode="json"), indent=2)
562
591
  if record.report_data is None:
563
- print(f"Comparison {record.id} has no report (status {record.status}).")
564
- return
565
- print(record.report().to_markdown())
566
- return
592
+ return f"Comparison {record.id} has no report (status {record.status})."
593
+ return record.report().to_markdown()
594
+
595
+ deliver(output_format, out, render, lambda: _print_comparison_text(record), run_id=record.id)
567
596
 
597
+
598
+ def _print_comparison_text(record: Any) -> None:
568
599
  print(f"benchmark {record.benchmark} comparison {record.id} status {record.status}")
569
600
  print(f" task sets: {', '.join(record.task_sets)}")
570
601
  if record.error:
@@ -599,29 +630,29 @@ def load_registry(import_path: str) -> Any:
599
630
  raise _CliError(str(exc)) from exc
600
631
 
601
632
 
602
- def _open_store(path: str, *, writer: bool) -> Any:
633
+ def _open_store(path: str, *, writer: bool, force_sqlite: bool = False) -> Any:
603
634
  from agentbyte._optional import MissingExtraError, require
604
635
  from agentbyte.eval.history import EvalHistoryError, EvalHistorySettings, open_history
605
636
 
606
637
  try:
607
638
  settings = EvalHistorySettings()
608
- if not settings.is_postgres:
639
+ if force_sqlite or not settings.is_postgres:
609
640
  require("aiosqlite", extra="sqlite", feature="Evaluation history")
610
- return open_history(path, writer=writer, settings=settings)
641
+ return open_history(path, writer=writer, settings=settings, force_sqlite=force_sqlite)
611
642
  except (MissingExtraError, EvalHistoryError) as exc:
612
643
  raise _CliError(str(exc)) from exc
613
644
 
614
645
 
615
- def _history_label(path: str) -> str:
646
+ def _history_label(path: str, *, force_sqlite: bool = False) -> str:
616
647
  from agentbyte.eval.history import describe_history
617
648
 
618
- return describe_history(path)
649
+ return describe_history(path, force_sqlite=force_sqlite)
619
650
 
620
651
 
621
- def _require_history(path: str) -> None:
652
+ def _require_history(path: str, *, force_sqlite: bool = False) -> None:
622
653
  from agentbyte.eval.history import history_exists
623
654
 
624
- if not history_exists(path):
655
+ if not history_exists(path, force_sqlite=force_sqlite):
625
656
  raise _CliError(f"History file {path!r} does not exist")
626
657
 
627
658
 
@@ -632,12 +663,18 @@ def _item_line(item: Any) -> str:
632
663
  return f" #{item.item_index} {item.task_name}: {status} {score}{reason}"
633
664
 
634
665
 
635
- def _print_summary(summary: Any, output_format: str) -> None:
636
- if output_format == "json":
637
- data = summary.model_dump(mode="json")
638
- data["failed_count"] = summary.failed_count
639
- print(json.dumps(data, indent=2))
640
- return
666
+ def _print_summary(summary: Any, output_format: str | None, out: str | None = None) -> None:
667
+ def render(kind: str) -> str:
668
+ if kind == "json":
669
+ data = summary.model_dump(mode="json")
670
+ data["failed_count"] = summary.failed_count
671
+ return json.dumps(data, indent=2)
672
+ return summary.to_markdown()
673
+
674
+ deliver(output_format, out, render, lambda: _print_summary_text(summary), run_id=summary.run_id)
675
+
676
+
677
+ def _print_summary_text(summary: Any) -> None:
641
678
  verdict = "PASSED" if summary.passed else "FAILED"
642
679
  print(f"suite {summary.suite} run {summary.run_id} status {summary.status} {verdict}")
643
680
  print(
@@ -0,0 +1,28 @@
1
+ """Argument parsing helpers for evaluation-history selection."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import argparse
6
+ from typing import Any
7
+
8
+
9
+ class HistoryPathAction(argparse.Action):
10
+ """Record that ``--history`` was explicitly supplied as well as its path."""
11
+
12
+ def __call__(
13
+ self,
14
+ parser: argparse.ArgumentParser,
15
+ namespace: argparse.Namespace,
16
+ values: str | None,
17
+ option_string: str | None = None,
18
+ ) -> None:
19
+ setattr(namespace, self.dest, values)
20
+ setattr(namespace, "history_explicit", True)
21
+
22
+
23
+ def history_is_explicit(args: Any) -> bool:
24
+ """Whether a CLI command supplied ``--history`` rather than accepting its default."""
25
+ return bool(getattr(args, "history_explicit", False))
26
+
27
+
28
+ __all__ = ["HistoryPathAction", "history_is_explicit"]