agentbyte 0.32.2__tar.gz → 0.34.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 (368) hide show
  1. {agentbyte-0.32.2 → agentbyte-0.34.0}/.gitignore +7 -0
  2. {agentbyte-0.32.2 → agentbyte-0.34.0}/CHANGELOG.md +47 -0
  3. {agentbyte-0.32.2 → agentbyte-0.34.0}/PKG-INFO +81 -133
  4. {agentbyte-0.32.2 → agentbyte-0.34.0}/README.md +76 -110
  5. agentbyte-0.34.0/pyproject.toml +112 -0
  6. agentbyte-0.34.0/src/agentbyte/__about__.py +2 -0
  7. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/__init__.py +2 -0
  8. agentbyte-0.34.0/src/agentbyte/_optional.py +39 -0
  9. agentbyte-0.34.0/src/agentbyte/cli/__main__.py +6 -0
  10. agentbyte-0.34.0/src/agentbyte/cli/eval_commands.py +303 -0
  11. agentbyte-0.34.0/src/agentbyte/cli/loading.py +115 -0
  12. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/cli/main.py +71 -31
  13. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/compaction/counters.py +3 -3
  14. agentbyte-0.34.0/src/agentbyte/dataset/_aiosqlite.py +31 -0
  15. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/dataset/importer.py +5 -3
  16. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/dataset/publish.py +2 -2
  17. agentbyte-0.34.0/src/agentbyte/dataset/publishers.py +84 -0
  18. agentbyte-0.34.0/src/agentbyte/dataset/s3.py +71 -0
  19. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/dataset/sources.py +22 -75
  20. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/dataset/sqlite.py +2 -3
  21. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/dataset/sqlite_db.py +6 -9
  22. agentbyte-0.34.0/src/agentbyte/dataset/writers.py +70 -0
  23. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/eval/__init__.py +2 -0
  24. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/eval/eval_dataset.py +64 -61
  25. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/eval/history/recorder.py +81 -18
  26. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/eval/history/sql.py +10 -3
  27. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/eval/history/sqlite.py +2 -1
  28. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/eval/history/transitions.py +5 -0
  29. agentbyte-0.34.0/src/agentbyte/eval/workbench/__init__.py +42 -0
  30. agentbyte-0.34.0/src/agentbyte/eval/workbench/coordinator.py +249 -0
  31. agentbyte-0.34.0/src/agentbyte/eval/workbench/jobs.py +291 -0
  32. agentbyte-0.34.0/src/agentbyte/eval/workbench/smoke.py +89 -0
  33. agentbyte-0.34.0/src/agentbyte/eval/workbench/smoke_tasks.json +11 -0
  34. agentbyte-0.34.0/src/agentbyte/eval/workbench/suite.py +151 -0
  35. agentbyte-0.34.0/src/agentbyte/eval/workbench/verdict.py +172 -0
  36. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/llm/__init__.py +4 -8
  37. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/llm/azure/auth.py +5 -10
  38. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/llm/azure/chat.py +3 -3
  39. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/llm/azure/embedding.py +3 -3
  40. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/middleware/otel.py +2 -2
  41. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/middleware/sql_usage.py +10 -3
  42. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/optim/gepa.py +2 -5
  43. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/tools/research_tools.py +4 -7
  44. agentbyte-0.34.0/src/agentbyte/webui/eval_routes.py +201 -0
  45. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/webui/models.py +8 -0
  46. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/webui/server.py +97 -14
  47. agentbyte-0.34.0/src/agentbyte/webui/ui/assets/index-C-wj-OzO.js +82 -0
  48. agentbyte-0.34.0/src/agentbyte/webui/ui/assets/index-DW8IDODJ.css +1 -0
  49. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/webui/ui/index.html +2 -2
  50. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/workflow/sqlite_checkpoint.py +2 -1
  51. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/workflow/visualizer.py +3 -4
  52. agentbyte-0.34.0/tests/cli/test_loading.py +111 -0
  53. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/cli/test_registry_check.py +4 -1
  54. agentbyte-0.34.0/tests/dataset/fake_s3.py +92 -0
  55. agentbyte-0.34.0/tests/dataset/test_dataset_exit.py +66 -0
  56. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/dataset/test_loader.py +11 -25
  57. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/dataset/test_publish.py +81 -58
  58. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/dataset/test_sqlite_db.py +5 -19
  59. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/eval/test_eval_dataset.py +22 -0
  60. agentbyte-0.34.0/tests/eval/test_eval_jobs.py +391 -0
  61. agentbyte-0.34.0/tests/eval/test_eval_workbench.py +470 -0
  62. agentbyte-0.34.0/tests/test_optional_extras.py +139 -0
  63. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/test_package_api.py +1 -2
  64. agentbyte-0.34.0/tests/webui/test_eval_routes.py +395 -0
  65. agentbyte-0.32.2/pyproject.toml +0 -224
  66. agentbyte-0.32.2/src/agentbyte/__about__.py +0 -2
  67. agentbyte-0.32.2/src/agentbyte/dataset/publishers.py +0 -131
  68. agentbyte-0.32.2/src/agentbyte/dataset/writers.py +0 -99
  69. agentbyte-0.32.2/src/agentbyte/webui/ui/assets/index-BF3DwXaF.js +0 -82
  70. agentbyte-0.32.2/src/agentbyte/webui/ui/assets/index-ar5tOeqt.css +0 -1
  71. {agentbyte-0.32.2 → agentbyte-0.34.0}/LICENSE +0 -0
  72. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/agents/__init__.py +0 -0
  73. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/agents/agent.py +0 -0
  74. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/agents/agent_as_tool.py +0 -0
  75. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/agents/base.py +0 -0
  76. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/agents/embedding_agent.py +0 -0
  77. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/agents/types.py +0 -0
  78. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/cancellation_token.py +0 -0
  79. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/catalog.py +0 -0
  80. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/cli/__init__.py +0 -0
  81. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/compaction/__init__.py +0 -0
  82. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/compaction/errors.py +0 -0
  83. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/compaction/grouping.py +0 -0
  84. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/compaction/strategies.py +0 -0
  85. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/component.py +0 -0
  86. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/context.py +0 -0
  87. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/context_providers/__init__.py +0 -0
  88. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/context_providers/base.py +0 -0
  89. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/context_providers/skill_tools.py +0 -0
  90. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/context_providers/skills.py +0 -0
  91. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/dataset/__init__.py +0 -0
  92. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/dataset/base.py +0 -0
  93. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/dataset/config.py +0 -0
  94. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/dataset/json.py +0 -0
  95. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/dataset/loader.py +0 -0
  96. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/dataset/publish_config.py +0 -0
  97. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/dataset/write_config.py +0 -0
  98. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/entity.py +0 -0
  99. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/eval/base.py +0 -0
  100. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/eval/checks/__init__.py +0 -0
  101. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/eval/checks/decorator.py +0 -0
  102. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/eval/checks/keyword.py +0 -0
  103. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/eval/checks/local.py +0 -0
  104. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/eval/checks/process.py +0 -0
  105. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/eval/checks/tool.py +0 -0
  106. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/eval/checks/types.py +0 -0
  107. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/eval/comparison.py +0 -0
  108. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/eval/history/__init__.py +0 -0
  109. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/eval/history/conformance.py +0 -0
  110. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/eval/history/errors.py +0 -0
  111. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/eval/history/models.py +0 -0
  112. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/eval/history/store.py +0 -0
  113. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/eval/judges/__init__.py +0 -0
  114. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/eval/judges/base.py +0 -0
  115. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/eval/judges/composite.py +0 -0
  116. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/eval/judges/llm.py +0 -0
  117. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/eval/judges/pairwise.py +0 -0
  118. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/eval/judges/reference.py +0 -0
  119. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/eval/judges/trajectory.py +0 -0
  120. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/eval/judges/validation.py +0 -0
  121. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/eval/pairwise.py +0 -0
  122. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/eval/report.py +0 -0
  123. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/eval/runner.py +0 -0
  124. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/eval/splitting.py +0 -0
  125. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/eval/targets/__init__.py +0 -0
  126. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/eval/targets/agent.py +0 -0
  127. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/eval/targets/model.py +0 -0
  128. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/eval/targets/multi_turn.py +0 -0
  129. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/eval/targets/orchestrator.py +0 -0
  130. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/eval/targets/runtime.py +0 -0
  131. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/eval/targets/workflow.py +0 -0
  132. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/eval/types.py +0 -0
  133. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/execution_trace/__init__.py +0 -0
  134. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/execution_trace/collector.py +0 -0
  135. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/execution_trace/models.py +0 -0
  136. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/llm/_retry_observability.py +0 -0
  137. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/llm/auth.py +0 -0
  138. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/llm/azure/__init__.py +0 -0
  139. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/llm/azure/settings.py +0 -0
  140. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/llm/azure_openai.py +0 -0
  141. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/llm/azure_openai_embedding.py +0 -0
  142. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/llm/base.py +0 -0
  143. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/llm/embeddings_base.py +0 -0
  144. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/llm/openai/__init__.py +0 -0
  145. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/llm/openai/chat.py +0 -0
  146. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/llm/openai/embedding.py +0 -0
  147. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/llm/openai/settings.py +0 -0
  148. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/llm/openai_embedding.py +0 -0
  149. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/llm/pricing.py +0 -0
  150. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/llm/retry_policy.py +0 -0
  151. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/llm/settings.py +0 -0
  152. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/llm/types.py +0 -0
  153. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/logger.py +0 -0
  154. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/memory/__init__.py +0 -0
  155. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/memory/base.py +0 -0
  156. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/messages.py +0 -0
  157. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/middleware/__init__.py +0 -0
  158. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/middleware/base.py +0 -0
  159. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/middleware/retry.py +0 -0
  160. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/middleware/usage_logger.py +0 -0
  161. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/notebook.py +0 -0
  162. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/optim/__init__.py +0 -0
  163. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/optim/base.py +0 -0
  164. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/optim/config.py +0 -0
  165. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/optim/mipro.py +0 -0
  166. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/optim/pareto.py +0 -0
  167. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/optim/reflective.py +0 -0
  168. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/optim/spec.py +0 -0
  169. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/optim/trace.py +0 -0
  170. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/orchestration/__init__.py +0 -0
  171. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/orchestration/ai.py +0 -0
  172. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/orchestration/base.py +0 -0
  173. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/orchestration/handoff.py +0 -0
  174. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/orchestration/plan.py +0 -0
  175. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/orchestration/policies.py +0 -0
  176. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/orchestration/round_robin.py +0 -0
  177. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/presets/__init__.py +0 -0
  178. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/presets/agents.py +0 -0
  179. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/presets/clients.py +0 -0
  180. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/presets/instruction_registry.py +0 -0
  181. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/presets/instructions/orchestrator.yaml +0 -0
  182. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/presets/instructions/query_rewriter.yaml +0 -0
  183. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/presets/instructions/researcher.yaml +0 -0
  184. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/presets/instructions/reviewer.yaml +0 -0
  185. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/presets/instructions/writer.yaml +0 -0
  186. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/presets/orchestration.py +0 -0
  187. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/presets/skills/contracts-analyst/SKILL.md +0 -0
  188. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/presets/skills/hr-analyst/SKILL.md +0 -0
  189. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/presets/skills/hr-analyst/resources/departments.md +0 -0
  190. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/presets/skills/hr-analyst/resources/employees.md +0 -0
  191. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/presets/skills/hr-analyst/resources/payroll.md +0 -0
  192. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/presets/streaming.py +0 -0
  193. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/presets/workflow.py +0 -0
  194. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/session_store.py +0 -0
  195. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/skills/__init__.py +0 -0
  196. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/skills/base.py +0 -0
  197. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/skills/resources.py +0 -0
  198. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/skills/scripts.py +0 -0
  199. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/skills/sources.py +0 -0
  200. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/skills/validation.py +0 -0
  201. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/termination/__init__.py +0 -0
  202. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/termination/base.py +0 -0
  203. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/termination/cancellation.py +0 -0
  204. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/termination/composite.py +0 -0
  205. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/termination/consecutive_agent.py +0 -0
  206. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/termination/external.py +0 -0
  207. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/termination/function_call.py +0 -0
  208. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/termination/handoff.py +0 -0
  209. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/termination/max_message.py +0 -0
  210. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/termination/predicate.py +0 -0
  211. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/termination/source.py +0 -0
  212. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/termination/text_mention.py +0 -0
  213. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/termination/timeout.py +0 -0
  214. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/termination/token_usage.py +0 -0
  215. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/tools/__init__.py +0 -0
  216. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/tools/base.py +0 -0
  217. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/tools/coding_tools.py +0 -0
  218. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/tools/core_tools.py +0 -0
  219. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/tools/decorator.py +0 -0
  220. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/tools/memory_tool.py +0 -0
  221. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/types.py +0 -0
  222. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/webui/__init__.py +0 -0
  223. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/webui/discovery.py +0 -0
  224. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/webui/execution.py +0 -0
  225. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/webui/registry.py +0 -0
  226. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/webui/session_store.py +0 -0
  227. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/webui/sessions.py +0 -0
  228. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/webui/ui/vite.svg +0 -0
  229. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/workflow/__init__.py +0 -0
  230. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/workflow/agent.py +0 -0
  231. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/workflow/core/__init__.py +0 -0
  232. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/workflow/core/_structure_hash.py +0 -0
  233. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/workflow/core/checkpoint.py +0 -0
  234. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/workflow/core/models.py +0 -0
  235. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/workflow/core/runner.py +0 -0
  236. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/workflow/core/workflow.py +0 -0
  237. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/workflow/defaults.py +0 -0
  238. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/workflow/errors.py +0 -0
  239. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/workflow/loader.py +0 -0
  240. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/workflow/schema.py +0 -0
  241. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/workflow/schema_utils.py +0 -0
  242. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/workflow/steps/__init__.py +0 -0
  243. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/workflow/steps/agent.py +0 -0
  244. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/workflow/steps/echo.py +0 -0
  245. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/workflow/steps/function.py +0 -0
  246. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/workflow/steps/http.py +0 -0
  247. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/workflow/steps/step.py +0 -0
  248. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/workflow/steps/subworkflow.py +0 -0
  249. {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/workflow/steps/transform.py +0 -0
  250. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/agents/test_agent_as_tool.py +0 -0
  251. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/agents/test_agent_basic.py +0 -0
  252. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/agents/test_agent_context_providers.py +0 -0
  253. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/agents/test_agent_error_response.py +0 -0
  254. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/agents/test_agent_event_types.py +0 -0
  255. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/agents/test_agent_memory_integration.py +0 -0
  256. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/agents/test_agent_middleware_integration.py +0 -0
  257. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/agents/test_agent_response_accessors.py +0 -0
  258. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/agents/test_agent_retry_middleware.py +0 -0
  259. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/agents/test_agent_stream_events.py +0 -0
  260. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/agents/test_embedding_agent.py +0 -0
  261. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/agents/test_tool_approval.py +0 -0
  262. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/agents/test_tool_batch_resolution.py +0 -0
  263. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/agents/test_tool_metadata.py +0 -0
  264. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/compaction/test_compaction.py +0 -0
  265. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/context_providers/__init__.py +0 -0
  266. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/context_providers/test_skill_tools.py +0 -0
  267. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/context_providers/test_skills_provider.py +0 -0
  268. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/dataset/test_multi_table.py +0 -0
  269. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/eval/test_eval_history.py +0 -0
  270. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/eval/test_eval_history_backends.py +0 -0
  271. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/eval/test_execution_trajectories.py +0 -0
  272. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/eval/test_multi_turn.py +0 -0
  273. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/eval/test_pairwise.py +0 -0
  274. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/eval/test_phase1_runner_and_targets.py +0 -0
  275. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/eval/test_phase2_checks_and_reports.py +0 -0
  276. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/eval/test_score_integrity.py +0 -0
  277. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/eval/test_splitting.py +0 -0
  278. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/eval/test_types_and_judges.py +0 -0
  279. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/examples/test_compaction_webapp.py +0 -0
  280. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/llm/test_azure_client.py +0 -0
  281. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/llm/test_azure_embedding_client.py +0 -0
  282. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/llm/test_llm_types.py +0 -0
  283. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/llm/test_openai_client.py +0 -0
  284. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/llm/test_openai_embedding_client.py +0 -0
  285. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/llm/test_pricing.py +0 -0
  286. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/llm/test_retry_observability.py +0 -0
  287. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/llm/test_retry_policy_api.py +0 -0
  288. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/llm/test_retryable_error_substrings.py +0 -0
  289. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/memory/test_memory.py +0 -0
  290. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/middleware/test_context_compaction.py +0 -0
  291. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/middleware/test_deduplicate_tool_result.py +0 -0
  292. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/middleware/test_middleware_chain.py +0 -0
  293. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/middleware/test_otel.py +0 -0
  294. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/middleware/test_retry_middleware.py +0 -0
  295. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/middleware/test_sql_usage.py +0 -0
  296. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/middleware/test_usage_logger.py +0 -0
  297. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/optim/__init__.py +0 -0
  298. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/optim/test_base.py +0 -0
  299. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/optim/test_base_integration.py +0 -0
  300. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/optim/test_config.py +0 -0
  301. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/optim/test_gepa.py +0 -0
  302. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/optim/test_mipro.py +0 -0
  303. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/optim/test_pareto.py +0 -0
  304. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/optim/test_reflective.py +0 -0
  305. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/optim/test_score_integrity.py +0 -0
  306. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/optim/test_spec.py +0 -0
  307. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/optim/test_trace.py +0 -0
  308. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/orchestration/test_ai_orchestrator.py +0 -0
  309. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/orchestration/test_base_orchestrator.py +0 -0
  310. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/orchestration/test_handoff_orchestrator.py +0 -0
  311. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/orchestration/test_orchestrator_finalization.py +0 -0
  312. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/orchestration/test_plan_orchestrator.py +0 -0
  313. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/orchestration/test_round_robin.py +0 -0
  314. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/presets/test_agents.py +0 -0
  315. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/presets/test_clients.py +0 -0
  316. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/presets/test_instruction_registry.py +0 -0
  317. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/presets/test_orchestration.py +0 -0
  318. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/presets/test_streaming.py +0 -0
  319. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/presets/test_workflow.py +0 -0
  320. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/skills/__init__.py +0 -0
  321. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/skills/test_base.py +0 -0
  322. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/skills/test_resources.py +0 -0
  323. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/skills/test_scripts.py +0 -0
  324. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/skills/test_sources.py +0 -0
  325. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/termination/test_base.py +0 -0
  326. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/termination/test_cancellation.py +0 -0
  327. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/termination/test_composite.py +0 -0
  328. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/termination/test_consecutive_agent.py +0 -0
  329. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/termination/test_external.py +0 -0
  330. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/termination/test_function_call.py +0 -0
  331. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/termination/test_handoff.py +0 -0
  332. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/termination/test_max_message.py +0 -0
  333. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/termination/test_predicate.py +0 -0
  334. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/termination/test_source.py +0 -0
  335. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/termination/test_text_mention.py +0 -0
  336. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/termination/test_timeout.py +0 -0
  337. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/termination/test_token_usage.py +0 -0
  338. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/test_cancellation_token.py +0 -0
  339. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/test_context.py +0 -0
  340. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/test_logger.py +0 -0
  341. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/test_messages.py +0 -0
  342. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/test_session_store.py +0 -0
  343. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/test_types.py +0 -0
  344. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/test_vanilla_chunker.py +0 -0
  345. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/tools/test_coding_tools.py +0 -0
  346. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/tools/test_memory_tool.py +0 -0
  347. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/tools/test_research_tools.py +0 -0
  348. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/tools/test_tools.py +0 -0
  349. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/webui/__init__.py +0 -0
  350. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/webui/helpers.py +0 -0
  351. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/webui/test_execution.py +0 -0
  352. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/webui/test_package_api.py +0 -0
  353. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/webui/test_registry.py +0 -0
  354. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/webui/test_server.py +0 -0
  355. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/webui/test_sessions.py +0 -0
  356. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/webui/test_workflow_streaming.py +0 -0
  357. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/workflow/recovery_worker.py +0 -0
  358. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/workflow/test_agent_step_imports.py +0 -0
  359. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/workflow/test_checkpoint.py +0 -0
  360. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/workflow/test_subworkflow_step.py +0 -0
  361. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/workflow/test_workflow_agent.py +0 -0
  362. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/workflow/test_workflow_class.py +0 -0
  363. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/workflow/test_workflow_models.py +0 -0
  364. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/workflow/test_workflow_reliability.py +0 -0
  365. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/workflow/test_workflow_runner.py +0 -0
  366. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/workflow/test_workflow_schema.py +0 -0
  367. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/workflow/test_workflow_steps.py +0 -0
  368. {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/workflow/test_workflow_visualizer.py +0 -0
@@ -64,3 +64,10 @@ data/flatfiles/*
64
64
 
65
65
  # lean-ctx context runtime cache
66
66
  .lean-ctx/
67
+
68
+ # Local SQLite stores (evaluation history, checkpoints) and their writer locks
69
+ *.sqlite
70
+ *.sqlite-journal
71
+ *.sqlite-wal
72
+ *.sqlite-shm
73
+ *.writer.lock
@@ -6,6 +6,53 @@ The format follows Keep a Changelog principles and semantic versioning.
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [0.34.0] - 2026-10-01
10
+
11
+ ### Added
12
+
13
+ - Evaluation workbench, step 3 (spec 0052): WebUI Evaluations section next to the Playground — registered suites with Run (summary or full evidence), run history with pass/fail verdicts and filters, a live run page (durable snapshots, outcome counts, Cancel) and an item page (transcript, judge scores and reasoning, execution facts, labelled evidence state). Pages have shareable `#/evals/...` links. A server with evaluations but no agents or workflows opens on Evaluations.
14
+ - `/api/health` reports `eval_enabled`; `GET /api/eval/runs` entries include a `verdict` with pass/fail and outcome counts.
15
+ - Simpler eval commands: `--catalog` / `--eval-catalog` (and `registry check`) accept a `.py` file path as well as a module, and `:name` is optional when the module defines exactly one matching object. `agentbyte eval run|results` and `agentbyte webui --eval-catalog` store runs in `./eval.sqlite` unless a history path is given. Example: `agentbyte webui --eval-catalog examples/eval/workbench_catalog.py`.
16
+ - `agentbyte eval ui [--catalog CATALOG] [--history PATH] [--port 8090]`: the Evaluations pages on their own, without the Playground (`AgentbyteWebUIServer(playground=False)`, `serve`/`webui(playground=False)`); `/api/health` reports `playground_enabled`. It refuses to start, with exit code 2, when another process holds the history file.
17
+ - `agentbyte.eval.tasks_from_eval_records(records)`: the tasks a saved eval dataset would produce, built synchronously from in-memory `EvalDatasetRecord`s (for suite catalogs). Saving and loading now share one record/row mapping.
18
+ - Evaluation guide `docs/guides/evaluation-end-to-end.md` (how datasets, suites, runners, history, CLI, HTTP and the UI connect; on-the-fly vs stored runs; CI), the real-model example catalog `examples/eval/acme_support.py` with its fake FAQ dataset (`data/datasets/examples/acme-support`), and the notebook `notebooks/usecases/eval/06-eval-end-to-end.ipynb`.
19
+ - The sample WebUI launchers (`examples/webui/in_memory.py`, `presets_webui.py`) accept `--eval-history`, `--eval-catalog`, `--port` and `--no-open`, serving the demo entities and the Evaluations pages together.
20
+
21
+ ### Fixed
22
+
23
+ - The packaged WebUI called `http://localhost:8080` regardless of the port it was served from; it now calls its own origin, so `agentbyte webui --port N` works.
24
+ - README "Run The WebUI": removed the `--dir examples` suggestion (discovery finds no entities there) and documented the sample launchers, Evaluations and the discovery convention.
25
+
26
+ ## [0.33.0] - 2026-10-01
27
+
28
+ Upgrade notes (breaking):
29
+
30
+ - Removed the `test`, `dev` and `coding` extras; they only held contributor tooling. Contributors use `uv sync --all-extras --all-groups`.
31
+ - S3 datasets use native async `aioboto3` (`aws` extra) instead of synchronous `boto3`. `DatasetWriter.write_files`/`dataset_exists`, `DatasetPublisher.publish_dataset` and `agentbyte.dataset.publish_dataset` are now coroutines: `await` them, and make custom writers/publishers `async def`. A `client=` passed to `S3DatasetSource`, `S3DatasetWriter` or `S3DatasetPublisher` must be an async S3 client; it is used as-is and never closed.
32
+ - A missing optional dependency now raises `agentbyte.MissingExtraError` (a `ModuleNotFoundError`) everywhere. The WebUI and `WorkflowVisualizer.to_dot()` previously raised `RuntimeError`.
33
+
34
+ ### Added
35
+
36
+ - Evaluation workbench, step 1 (spec 0052): `agentbyte.eval.workbench` with `EvalSuite`, `EvalSuiteRegistry`, `EvalSuiteCoordinator` and pass/fail verdicts (`SuiteRunSummary`); an item passes only when execution completed, the judge scored it and `overall >= min_score`. New CLI `agentbyte eval list|run|results` (exit codes 0 passed, 1 failed/incomplete, 2 configuration/storage error, 130 interrupted) and a packaged, provider-free `smoke` suite. `EvalRunRecorder.evaluate`/`evaluate_stream` accept `on_start`. `python -m agentbyte.cli` works.
37
+ - Evaluation workbench, step 2 (spec 0052): HTTP job lifecycle. `EvalJobManager` runs suites in the background (one active, ten queued); admission is idempotent per owner and key and atomic in the store, a full queue is rejected without a record, cancel is idempotent, shutdown commits owned jobs as `cancelled` and startup marks leftovers `interrupted`. WebUI routes under `/api/eval` (suites, runs, items, SSE `snapshot` events keyed by run revision, cancel), enabled by `AgentbyteWebUIServer(eval_store=... | eval_history=..., eval_registry=...)` or `agentbyte webui --eval-history PATH [--eval-catalog module:registry]`. `EvalRunRecorder.admit()`/`execute_stream()` split admission from execution; `SuiteRunSummary.revision`.
38
+ - Evaluation workbench docs: study guide `docs/study/05-eval_topics/05_topic_eval_workbench.md`, offline example catalog `examples/eval/workbench_catalog.py` and notebook `notebooks/usecases/eval/05-eval-workbench.ipynb`.
39
+ - `tiktoken` extra for `TiktokenCounter`.
40
+ - `agentbyte.MissingExtraError`: one error type and message format ("<feature> needs the '<extra>' extra: pip install 'agentbyte[<extra>]'") for every optional dependency, via `agentbyte._optional.require`.
41
+ - `agentbyte.cli.loading.import_object(reference, expected_type)`: one loader for `module.path:object` CLI arguments.
42
+
43
+ ### Changed
44
+
45
+ - CLI `--catalog` / `registry check` references are imported like `python -m`: modules in the current working directory are found without installing them.
46
+ - Evaluation history idempotency: reusing a key now also requires the same capture, criteria, labels, judge and target fingerprint; otherwise `EvalHistoryConflictError`.
47
+ - README "Installation" is now one table of extras, what they install and which features need them.
48
+ - The S3 dataset importer no longer wraps writer calls in `asyncio.to_thread`.
49
+ - `all` (and `sql`) are composed from the other extras by reference, so they can no longer drift. Dependency groups now hold only local tooling (`test`, `dev`, `experiment`); groups that mirrored extras and the unused `extlib` group (Microsoft Agent Framework packages) were removed.
50
+
51
+ ### Fixed
52
+
53
+ - SQLite datasets (`sqlite`, `sqlite_db` engines) no longer keep a script from exiting when they are not closed: their cached aiosqlite connection runs on a daemon thread. `aclose()` / `async with` remain the way to release them promptly.
54
+ - Use-case notebooks (eval 01–04, workflow 01–02) updated for the current async dataset, eval-dataset and judge-integrity APIs; the repository's `contracting/metadata26` eval dataset was re-saved with the current schema (`metadata` column). OTel install hints now say `uv sync --extra otel`.
55
+
9
56
  ## [0.32.2] - 2026-10-01
10
57
 
11
58
  ### Fixed
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: agentbyte
3
- Version: 0.32.2
3
+ Version: 0.34.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
@@ -27,22 +27,14 @@ Requires-Dist: opentelemetry-exporter-otlp-proto-http>=1.39.1; extra == 'all'
27
27
  Requires-Dist: opentelemetry-sdk>=1.39.1; extra == 'all'
28
28
  Requires-Dist: sqlalchemy[asyncio]>=2.0.43; extra == 'all'
29
29
  Requires-Dist: sqlmodel>=0.0.38; extra == 'all'
30
- Requires-Dist: uvicorn>=0.42.0; extra == 'all'
30
+ Requires-Dist: tiktoken>=0.9.0; extra == 'all'
31
+ Requires-Dist: uvicorn[standard]>=0.44.0; extra == 'all'
31
32
  Requires-Dist: youtube-transcript-api>=0.6; extra == 'all'
32
33
  Provides-Extra: aws
33
34
  Requires-Dist: aioboto3>=15.5.0; extra == 'aws'
34
35
  Provides-Extra: azureopenai
35
36
  Requires-Dist: azure-identity>=1.25.1; extra == 'azureopenai'
36
37
  Requires-Dist: openai>=1.107.1; extra == 'azureopenai'
37
- Provides-Extra: coding
38
- Provides-Extra: dev
39
- Requires-Dist: ipykernel>=7.1.0; extra == 'dev'
40
- Requires-Dist: nbclient>=0.10.4; extra == 'dev'
41
- Requires-Dist: nbformat>=5.10.4; extra == 'dev'
42
- Requires-Dist: picoagents>=0.4.0; extra == 'dev'
43
- Requires-Dist: pydantic-settings>=2.13.0; extra == 'dev'
44
- Requires-Dist: pymupdf-layout>=1.26.6; extra == 'dev'
45
- Requires-Dist: pymupdf4llm>=0.2.9; extra == 'dev'
46
38
  Provides-Extra: openai
47
39
  Requires-Dist: openai>=1.107.1; extra == 'openai'
48
40
  Provides-Extra: optim
@@ -67,18 +59,8 @@ Requires-Dist: sqlalchemy[asyncio]>=2.0.43; extra == 'sql'
67
59
  Requires-Dist: sqlmodel>=0.0.38; extra == 'sql'
68
60
  Provides-Extra: sqlite
69
61
  Requires-Dist: aiosqlite>=0.22.1; extra == 'sqlite'
70
- Provides-Extra: test
71
- Requires-Dist: aiosqlite>=0.22.1; extra == 'test'
72
- Requires-Dist: arxiv>=2.1; extra == 'test'
73
- Requires-Dist: beautifulsoup4>=4.12; extra == 'test'
74
- Requires-Dist: greenlet>=3.0.0; extra == 'test'
75
- Requires-Dist: html2text>=2024.2; extra == 'test'
76
- Requires-Dist: pytest-asyncio>=1.3.0; extra == 'test'
77
- Requires-Dist: pytest-cov>=7.0.0; extra == 'test'
78
- Requires-Dist: pytest>=9.0.1; extra == 'test'
79
- Requires-Dist: ruff>=0.15.0; extra == 'test'
80
- Requires-Dist: sqlmodel>=0.0.38; extra == 'test'
81
- Requires-Dist: youtube-transcript-api>=0.6; extra == 'test'
62
+ Provides-Extra: tiktoken
63
+ Requires-Dist: tiktoken>=0.9.0; extra == 'tiktoken'
82
64
  Provides-Extra: viz
83
65
  Requires-Dist: graphviz>=0.21; extra == 'viz'
84
66
  Provides-Extra: webui
@@ -90,12 +72,16 @@ Description-Content-Type: text/markdown
90
72
 
91
73
  Agentbyte is an observability-first agentic AI framework for building and studying multiagent systems with a learning-first, implementation-oriented workflow.
92
74
 
93
- Current release: **0.32.2**
75
+ Current release: **0.34.0**
94
76
 
95
77
  ## Building an Agent
96
78
 
97
79
  Every example below builds on the same domain: a customer **support agent**. Start with a plain agent and a model client — no tools, no middleware:
98
80
 
81
+ ```bash
82
+ pip install "agentbyte[openai]" # the model client lives in an extra; see Install below
83
+ ```
84
+
99
85
  ```python
100
86
  from agentbyte import Agent
101
87
  from agentbyte.llm import OpenAIChatCompletionClient
@@ -302,160 +288,122 @@ Reading a trace: `chat gpt-4.1-mini` spans show **per-call** usage/cost/finish r
302
288
 
303
289
  Python requirement: **3.11+**
304
290
 
305
- ```bash
306
- uv sync --all-groups
307
- ```
308
-
309
- Optional extras:
291
+ The base package (`pip install agentbyte`) has no model provider or storage driver. Add the
292
+ extras for the features you use. Using a feature without its extra raises
293
+ `MissingExtraError` (an `ImportError`) that names the extra to install.
310
294
 
311
295
  ```bash
312
- uv sync --extra openai # OpenAI client
313
- uv sync --extra azureopenai # Azure OpenAI client + azure-identity
314
- uv sync --extra aws # S3 datasets (aioboto3)
315
- uv sync --extra otel # OpenTelemetry export
316
- uv sync --extra webui # WebUI playground (FastAPI)
317
- uv sync --extra sqlite # SQLite stores: datasets, workflow checkpoints, eval history
318
- uv sync --extra postgres # PostgreSQL stores: usage logging, eval history
319
- uv sync --extra sql # sqlite + postgres
320
- uv sync --extra optim # prompt optimization (GEPA)
321
- uv sync --extra viz # workflow diagrams (graphviz)
322
- uv sync --extra research # research tools
323
- ```
324
-
325
- ### Install in another project (pip / uv add)
326
-
327
- Use extras to enable provider + telemetry support:
328
-
329
- ```bash
330
- pip install "agentbyte[azureopenai,otel]"
331
- ```
332
-
333
- ```bash
334
- uv add "agentbyte[azureopenai,otel]"
335
- ```
336
-
337
- For the browser WebUI:
338
-
339
- ```bash
340
- pip install "agentbyte[webui]"
296
+ pip install "agentbyte[openai,sqlite]"
341
297
  # or
342
- uv add "agentbyte[webui]"
298
+ uv add "agentbyte[openai,sqlite]"
343
299
  ```
344
300
 
345
- Install all optional features:
301
+ | Extra | Installs | Needed for |
302
+ | --- | --- | --- |
303
+ | `openai` | `openai` | `OpenAIChatCompletionClient`, `OpenAIEmbeddingClient` |
304
+ | `azureopenai` | `openai`, `azure-identity` | Azure OpenAI clients and Entra ID credentials |
305
+ | `aws` | `aioboto3` | S3 dataset sources, writers and publishers |
306
+ | `otel` | OpenTelemetry API, SDK, OTLP exporter | OpenTelemetry tracing and metrics |
307
+ | `webui` | `fastapi`, `uvicorn` | `agentbyte webui` |
308
+ | `sqlite` | `aiosqlite` | SQLite datasets, workflow checkpoints, evaluation history |
309
+ | `postgres` | `sqlalchemy[asyncio]`, `sqlmodel`, `asyncpg` | `SqlUsageBackend`, `SqlEvalRunStore` |
310
+ | `sql` | `sqlite` + `postgres` | Both SQL backends |
311
+ | `tiktoken` | `tiktoken` | `TiktokenCounter` for exact compaction token counts |
312
+ | `optim` | `gepa` | `optimize_with_gepa()` |
313
+ | `viz` | `graphviz` | `WorkflowVisualizer.to_dot()` |
314
+ | `research` | `beautifulsoup4`, `html2text`, `arxiv`, `youtube-transcript-api` | `agentbyte.tools.research_tools` |
315
+ | `all` | every extra above | Everything |
316
+
317
+ Contributors working in this repository install every extra plus the local tooling groups
318
+ (`test`, `dev`, `experiment`):
346
319
 
347
320
  ```bash
348
- pip install "agentbyte[all]"
349
- # or
350
- uv add "agentbyte[all]"
321
+ uv sync --all-extras --all-groups
351
322
  ```
352
323
 
353
- Note: the Azure extra is `azureopenai`.
354
-
355
324
  ## Run The WebUI
356
325
 
357
- ### Option 1: Run the preset-backed app
358
-
359
- This is the easiest way to see the WebUI working end to end with real preset entities:
360
- - preset agents
361
- - preset orchestrators
362
- - preset workflow
363
-
364
- Step 1. Install the WebUI extra:
326
+ The WebUI has two sections: the **Playground** (chat with agents, orchestrators and workflows) and
327
+ **Evaluations** (run registered evaluation suites and inspect the results). Install the extra first:
365
328
 
366
329
  ```bash
367
- uv sync --extra webui
330
+ uv sync --extra webui # add --extra sqlite for Evaluations
368
331
  ```
369
332
 
370
- Step 2. Start the preset-backed app:
371
-
372
- ```bash
373
- uv run python examples/webui/presets_webui.py
374
- ```
333
+ ### Option 1: Sample apps
375
334
 
376
- Step 3. Open the browser:
377
-
378
- ```text
379
- http://127.0.0.1:8080
380
- ```
381
-
382
- If auto-open is enabled in your environment, the browser may open automatically.
383
-
384
- ### Option 2: Run the WebUI against your current project directory
385
-
386
- Use this when you want Agentbyte to scan a directory for exported `agent`, `workflow`, or `orchestrator` objects.
387
-
388
- Important: discovery is convention-based. The scanned directory must contain Python modules that expose top-level variables literally named `agent`, `workflow`, or `orchestrator`. If you point `--dir` at a folder that does not export those names, the UI will load but show `No entities found`.
389
-
390
- Step 1. Install the WebUI extra:
335
+ No API key needed: three demo agents, a team and a workflow on a fake model client.
391
336
 
392
337
  ```bash
393
- uv sync --extra webui
338
+ uv run python examples/webui/in_memory.py # http://127.0.0.1:8070
339
+ uv run python examples/webui/in_memory.py --eval-history eval.sqlite # plus Evaluations
394
340
  ```
395
341
 
396
- Step 2. Launch the WebUI and scan the current directory:
342
+ With your OpenAI or Azure OpenAI credentials, the preset agents, teams and workflow:
397
343
 
398
344
  ```bash
399
- uv run agentbyte webui --dir .
345
+ uv sync --extra webui --extra openai # or --extra azureopenai
346
+ uv run python examples/webui/presets_webui.py # http://127.0.0.1:8080
347
+ uv run python examples/webui/presets_webui.py --eval-history eval.sqlite
400
348
  ```
401
349
 
402
- Step 3. Open the browser:
350
+ Both launchers accept `--port`, `--no-open`, `--eval-history PATH` and `--eval-catalog CATALOG`
351
+ (default: the example suites in `examples/eval/workbench_catalog.py`).
403
352
 
404
- ```text
405
- http://127.0.0.1:8080
406
- ```
353
+ ### Option 2: Evaluations for your suites
407
354
 
408
- Useful variants:
355
+ `agentbyte eval ui` opens the Evaluations pages on their own (no Playground). Point it at the
356
+ Python file that defines your `EvalSuiteRegistry`:
409
357
 
410
358
  ```bash
411
- uv run agentbyte webui --dir . --port 8080 --host 127.0.0.1 --no-open
412
- uv run agentbyte webui --dir examples --port 8090
359
+ uv sync --extra webui --extra sqlite
360
+ uv run agentbyte eval ui --catalog examples/eval/workbench_catalog.py # http://127.0.0.1:8090
413
361
  ```
414
362
 
415
- For this repository, the most reliable first-run path is the preset-backed launcher:
363
+ - `--catalog` takes a `.py` file or a module path (`myapp.evaluations`); add `:name` only when the
364
+ file defines more than one registry. Without `--catalog` it serves the built-in smoke suite.
365
+ - Runs are stored in `./eval.sqlite` unless you pass `--history PATH`. Only one process can write
366
+ a history file: stop the UI before `agentbyte eval run` on the same file, or use another file.
367
+ - The same catalog works in the terminal: `uv run agentbyte eval run capitals --catalog examples/eval/workbench_catalog.py`.
368
+ - To serve agents and Evaluations together: `agentbyte webui --dir my_entities --eval-catalog myapp/evaluations.py`.
416
369
 
417
- ```bash
418
- uv run python examples/webui/presets_webui.py
419
- ```
370
+ Start with the end-to-end guide, `docs/guides/evaluation-end-to-end.md` (dataset → suite → history → UI), and the
371
+ notebook `notebooks/usecases/eval/06-eval-end-to-end.ipynb` (real OpenAI/Azure model). Details: `docs/study/05-eval_topics/`.
372
+
373
+ ### Option 3: Scan a project directory
420
374
 
421
- Use `agentbyte webui --dir ...` when you have a directory of exportable demo modules, for example:
375
+ `agentbyte webui --dir PATH` loads entities from Python files. Discovery is convention-based: each
376
+ module (or package) must define a top-level variable named `agent`, `orchestrator` or `workflow`
377
+ holding an Agentbyte object. Folders without those names show "No agents, orchestrators, or
378
+ workflows found"; this is the case for `examples/`, which uses the launchers above instead.
422
379
 
423
380
  ```python
424
- # my_entities.py
425
- agent = ...
426
- workflow = ...
427
- orchestrator = ...
381
+ # my_entities/support.py
382
+ agent = Agent(name="support", ...)
428
383
  ```
429
384
 
430
- ### Option 3: Run it programmatically
385
+ ```bash
386
+ uv run agentbyte webui --dir my_entities
387
+ uv run agentbyte webui --dir my_entities --eval-catalog myapp/evaluations.py # both sections
388
+ ```
431
389
 
432
- Use this when you want to serve in-memory entities directly from Python.
390
+ ### Option 4: From Python
433
391
 
434
392
  ```python
435
393
  from agentbyte.webui import serve
436
394
 
437
- serve(entities=[agent], port=8080, auto_open=True)
395
+ serve(entities=[agent], port=8080)
396
+ serve(entities=[agent], eval_registry=registry, eval_history="eval.sqlite") # with Evaluations
438
397
  ```
439
398
 
440
399
  ### Quick Troubleshooting
441
400
 
442
- If the app does not start:
443
-
444
- ```bash
445
- uv sync --extra webui
446
- ```
447
-
448
- If port `8080` is already in use:
449
-
450
- ```bash
451
- uv run agentbyte webui --dir . --port 8090
452
- ```
453
-
454
- If you do not want the browser to open automatically:
455
-
456
- ```bash
457
- uv run agentbyte webui --dir . --no-open
458
- ```
401
+ - Port in use: add `--port 8090`. The UI works on any port.
402
+ - No browser wanted: add `--no-open`.
403
+ - "No agents, orchestrators, or workflows found": the `--dir` folder has no module with a top-level
404
+ `agent`, `orchestrator` or `workflow`; use a launcher from Option 1 to see the samples.
405
+ - No Evaluations switch in the header: start `agentbyte webui` with `--eval-catalog`, or use `agentbyte eval ui`.
406
+ - After upgrading, hard-reload the page (Cmd/Ctrl-Shift-R) to load the new UI.
459
407
 
460
408
  ## Development
461
409
 
@@ -2,12 +2,16 @@
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.32.2**
5
+ Current release: **0.34.0**
6
6
 
7
7
  ## Building an Agent
8
8
 
9
9
  Every example below builds on the same domain: a customer **support agent**. Start with a plain agent and a model client — no tools, no middleware:
10
10
 
11
+ ```bash
12
+ pip install "agentbyte[openai]" # the model client lives in an extra; see Install below
13
+ ```
14
+
11
15
  ```python
12
16
  from agentbyte import Agent
13
17
  from agentbyte.llm import OpenAIChatCompletionClient
@@ -214,160 +218,122 @@ Reading a trace: `chat gpt-4.1-mini` spans show **per-call** usage/cost/finish r
214
218
 
215
219
  Python requirement: **3.11+**
216
220
 
217
- ```bash
218
- uv sync --all-groups
219
- ```
220
-
221
- Optional extras:
221
+ The base package (`pip install agentbyte`) has no model provider or storage driver. Add the
222
+ extras for the features you use. Using a feature without its extra raises
223
+ `MissingExtraError` (an `ImportError`) that names the extra to install.
222
224
 
223
225
  ```bash
224
- uv sync --extra openai # OpenAI client
225
- uv sync --extra azureopenai # Azure OpenAI client + azure-identity
226
- uv sync --extra aws # S3 datasets (aioboto3)
227
- uv sync --extra otel # OpenTelemetry export
228
- uv sync --extra webui # WebUI playground (FastAPI)
229
- uv sync --extra sqlite # SQLite stores: datasets, workflow checkpoints, eval history
230
- uv sync --extra postgres # PostgreSQL stores: usage logging, eval history
231
- uv sync --extra sql # sqlite + postgres
232
- uv sync --extra optim # prompt optimization (GEPA)
233
- uv sync --extra viz # workflow diagrams (graphviz)
234
- uv sync --extra research # research tools
235
- ```
236
-
237
- ### Install in another project (pip / uv add)
238
-
239
- Use extras to enable provider + telemetry support:
240
-
241
- ```bash
242
- pip install "agentbyte[azureopenai,otel]"
243
- ```
244
-
245
- ```bash
246
- uv add "agentbyte[azureopenai,otel]"
247
- ```
248
-
249
- For the browser WebUI:
250
-
251
- ```bash
252
- pip install "agentbyte[webui]"
226
+ pip install "agentbyte[openai,sqlite]"
253
227
  # or
254
- uv add "agentbyte[webui]"
228
+ uv add "agentbyte[openai,sqlite]"
255
229
  ```
256
230
 
257
- Install all optional features:
231
+ | Extra | Installs | Needed for |
232
+ | --- | --- | --- |
233
+ | `openai` | `openai` | `OpenAIChatCompletionClient`, `OpenAIEmbeddingClient` |
234
+ | `azureopenai` | `openai`, `azure-identity` | Azure OpenAI clients and Entra ID credentials |
235
+ | `aws` | `aioboto3` | S3 dataset sources, writers and publishers |
236
+ | `otel` | OpenTelemetry API, SDK, OTLP exporter | OpenTelemetry tracing and metrics |
237
+ | `webui` | `fastapi`, `uvicorn` | `agentbyte webui` |
238
+ | `sqlite` | `aiosqlite` | SQLite datasets, workflow checkpoints, evaluation history |
239
+ | `postgres` | `sqlalchemy[asyncio]`, `sqlmodel`, `asyncpg` | `SqlUsageBackend`, `SqlEvalRunStore` |
240
+ | `sql` | `sqlite` + `postgres` | Both SQL backends |
241
+ | `tiktoken` | `tiktoken` | `TiktokenCounter` for exact compaction token counts |
242
+ | `optim` | `gepa` | `optimize_with_gepa()` |
243
+ | `viz` | `graphviz` | `WorkflowVisualizer.to_dot()` |
244
+ | `research` | `beautifulsoup4`, `html2text`, `arxiv`, `youtube-transcript-api` | `agentbyte.tools.research_tools` |
245
+ | `all` | every extra above | Everything |
246
+
247
+ Contributors working in this repository install every extra plus the local tooling groups
248
+ (`test`, `dev`, `experiment`):
258
249
 
259
250
  ```bash
260
- pip install "agentbyte[all]"
261
- # or
262
- uv add "agentbyte[all]"
251
+ uv sync --all-extras --all-groups
263
252
  ```
264
253
 
265
- Note: the Azure extra is `azureopenai`.
266
-
267
254
  ## Run The WebUI
268
255
 
269
- ### Option 1: Run the preset-backed app
270
-
271
- This is the easiest way to see the WebUI working end to end with real preset entities:
272
- - preset agents
273
- - preset orchestrators
274
- - preset workflow
275
-
276
- Step 1. Install the WebUI extra:
256
+ The WebUI has two sections: the **Playground** (chat with agents, orchestrators and workflows) and
257
+ **Evaluations** (run registered evaluation suites and inspect the results). Install the extra first:
277
258
 
278
259
  ```bash
279
- uv sync --extra webui
260
+ uv sync --extra webui # add --extra sqlite for Evaluations
280
261
  ```
281
262
 
282
- Step 2. Start the preset-backed app:
283
-
284
- ```bash
285
- uv run python examples/webui/presets_webui.py
286
- ```
263
+ ### Option 1: Sample apps
287
264
 
288
- Step 3. Open the browser:
289
-
290
- ```text
291
- http://127.0.0.1:8080
292
- ```
293
-
294
- If auto-open is enabled in your environment, the browser may open automatically.
295
-
296
- ### Option 2: Run the WebUI against your current project directory
297
-
298
- Use this when you want Agentbyte to scan a directory for exported `agent`, `workflow`, or `orchestrator` objects.
299
-
300
- Important: discovery is convention-based. The scanned directory must contain Python modules that expose top-level variables literally named `agent`, `workflow`, or `orchestrator`. If you point `--dir` at a folder that does not export those names, the UI will load but show `No entities found`.
301
-
302
- Step 1. Install the WebUI extra:
265
+ No API key needed: three demo agents, a team and a workflow on a fake model client.
303
266
 
304
267
  ```bash
305
- uv sync --extra webui
268
+ uv run python examples/webui/in_memory.py # http://127.0.0.1:8070
269
+ uv run python examples/webui/in_memory.py --eval-history eval.sqlite # plus Evaluations
306
270
  ```
307
271
 
308
- Step 2. Launch the WebUI and scan the current directory:
272
+ With your OpenAI or Azure OpenAI credentials, the preset agents, teams and workflow:
309
273
 
310
274
  ```bash
311
- uv run agentbyte webui --dir .
275
+ uv sync --extra webui --extra openai # or --extra azureopenai
276
+ uv run python examples/webui/presets_webui.py # http://127.0.0.1:8080
277
+ uv run python examples/webui/presets_webui.py --eval-history eval.sqlite
312
278
  ```
313
279
 
314
- Step 3. Open the browser:
280
+ Both launchers accept `--port`, `--no-open`, `--eval-history PATH` and `--eval-catalog CATALOG`
281
+ (default: the example suites in `examples/eval/workbench_catalog.py`).
315
282
 
316
- ```text
317
- http://127.0.0.1:8080
318
- ```
283
+ ### Option 2: Evaluations for your suites
319
284
 
320
- Useful variants:
285
+ `agentbyte eval ui` opens the Evaluations pages on their own (no Playground). Point it at the
286
+ Python file that defines your `EvalSuiteRegistry`:
321
287
 
322
288
  ```bash
323
- uv run agentbyte webui --dir . --port 8080 --host 127.0.0.1 --no-open
324
- uv run agentbyte webui --dir examples --port 8090
289
+ uv sync --extra webui --extra sqlite
290
+ uv run agentbyte eval ui --catalog examples/eval/workbench_catalog.py # http://127.0.0.1:8090
325
291
  ```
326
292
 
327
- For this repository, the most reliable first-run path is the preset-backed launcher:
293
+ - `--catalog` takes a `.py` file or a module path (`myapp.evaluations`); add `:name` only when the
294
+ file defines more than one registry. Without `--catalog` it serves the built-in smoke suite.
295
+ - Runs are stored in `./eval.sqlite` unless you pass `--history PATH`. Only one process can write
296
+ a history file: stop the UI before `agentbyte eval run` on the same file, or use another file.
297
+ - The same catalog works in the terminal: `uv run agentbyte eval run capitals --catalog examples/eval/workbench_catalog.py`.
298
+ - To serve agents and Evaluations together: `agentbyte webui --dir my_entities --eval-catalog myapp/evaluations.py`.
328
299
 
329
- ```bash
330
- uv run python examples/webui/presets_webui.py
331
- ```
300
+ Start with the end-to-end guide, `docs/guides/evaluation-end-to-end.md` (dataset → suite → history → UI), and the
301
+ notebook `notebooks/usecases/eval/06-eval-end-to-end.ipynb` (real OpenAI/Azure model). Details: `docs/study/05-eval_topics/`.
302
+
303
+ ### Option 3: Scan a project directory
332
304
 
333
- Use `agentbyte webui --dir ...` when you have a directory of exportable demo modules, for example:
305
+ `agentbyte webui --dir PATH` loads entities from Python files. Discovery is convention-based: each
306
+ module (or package) must define a top-level variable named `agent`, `orchestrator` or `workflow`
307
+ holding an Agentbyte object. Folders without those names show "No agents, orchestrators, or
308
+ workflows found"; this is the case for `examples/`, which uses the launchers above instead.
334
309
 
335
310
  ```python
336
- # my_entities.py
337
- agent = ...
338
- workflow = ...
339
- orchestrator = ...
311
+ # my_entities/support.py
312
+ agent = Agent(name="support", ...)
340
313
  ```
341
314
 
342
- ### Option 3: Run it programmatically
315
+ ```bash
316
+ uv run agentbyte webui --dir my_entities
317
+ uv run agentbyte webui --dir my_entities --eval-catalog myapp/evaluations.py # both sections
318
+ ```
343
319
 
344
- Use this when you want to serve in-memory entities directly from Python.
320
+ ### Option 4: From Python
345
321
 
346
322
  ```python
347
323
  from agentbyte.webui import serve
348
324
 
349
- serve(entities=[agent], port=8080, auto_open=True)
325
+ serve(entities=[agent], port=8080)
326
+ serve(entities=[agent], eval_registry=registry, eval_history="eval.sqlite") # with Evaluations
350
327
  ```
351
328
 
352
329
  ### Quick Troubleshooting
353
330
 
354
- If the app does not start:
355
-
356
- ```bash
357
- uv sync --extra webui
358
- ```
359
-
360
- If port `8080` is already in use:
361
-
362
- ```bash
363
- uv run agentbyte webui --dir . --port 8090
364
- ```
365
-
366
- If you do not want the browser to open automatically:
367
-
368
- ```bash
369
- uv run agentbyte webui --dir . --no-open
370
- ```
331
+ - Port in use: add `--port 8090`. The UI works on any port.
332
+ - No browser wanted: add `--no-open`.
333
+ - "No agents, orchestrators, or workflows found": the `--dir` folder has no module with a top-level
334
+ `agent`, `orchestrator` or `workflow`; use a launcher from Option 1 to see the samples.
335
+ - No Evaluations switch in the header: start `agentbyte webui` with `--eval-catalog`, or use `agentbyte eval ui`.
336
+ - After upgrading, hard-reload the page (Cmd/Ctrl-Shift-R) to load the new UI.
371
337
 
372
338
  ## Development
373
339