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.
- {agentbyte-0.32.2 → agentbyte-0.34.0}/.gitignore +7 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/CHANGELOG.md +47 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/PKG-INFO +81 -133
- {agentbyte-0.32.2 → agentbyte-0.34.0}/README.md +76 -110
- agentbyte-0.34.0/pyproject.toml +112 -0
- agentbyte-0.34.0/src/agentbyte/__about__.py +2 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/__init__.py +2 -0
- agentbyte-0.34.0/src/agentbyte/_optional.py +39 -0
- agentbyte-0.34.0/src/agentbyte/cli/__main__.py +6 -0
- agentbyte-0.34.0/src/agentbyte/cli/eval_commands.py +303 -0
- agentbyte-0.34.0/src/agentbyte/cli/loading.py +115 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/cli/main.py +71 -31
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/compaction/counters.py +3 -3
- agentbyte-0.34.0/src/agentbyte/dataset/_aiosqlite.py +31 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/dataset/importer.py +5 -3
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/dataset/publish.py +2 -2
- agentbyte-0.34.0/src/agentbyte/dataset/publishers.py +84 -0
- agentbyte-0.34.0/src/agentbyte/dataset/s3.py +71 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/dataset/sources.py +22 -75
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/dataset/sqlite.py +2 -3
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/dataset/sqlite_db.py +6 -9
- agentbyte-0.34.0/src/agentbyte/dataset/writers.py +70 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/eval/__init__.py +2 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/eval/eval_dataset.py +64 -61
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/eval/history/recorder.py +81 -18
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/eval/history/sql.py +10 -3
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/eval/history/sqlite.py +2 -1
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/eval/history/transitions.py +5 -0
- agentbyte-0.34.0/src/agentbyte/eval/workbench/__init__.py +42 -0
- agentbyte-0.34.0/src/agentbyte/eval/workbench/coordinator.py +249 -0
- agentbyte-0.34.0/src/agentbyte/eval/workbench/jobs.py +291 -0
- agentbyte-0.34.0/src/agentbyte/eval/workbench/smoke.py +89 -0
- agentbyte-0.34.0/src/agentbyte/eval/workbench/smoke_tasks.json +11 -0
- agentbyte-0.34.0/src/agentbyte/eval/workbench/suite.py +151 -0
- agentbyte-0.34.0/src/agentbyte/eval/workbench/verdict.py +172 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/llm/__init__.py +4 -8
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/llm/azure/auth.py +5 -10
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/llm/azure/chat.py +3 -3
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/llm/azure/embedding.py +3 -3
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/middleware/otel.py +2 -2
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/middleware/sql_usage.py +10 -3
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/optim/gepa.py +2 -5
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/tools/research_tools.py +4 -7
- agentbyte-0.34.0/src/agentbyte/webui/eval_routes.py +201 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/webui/models.py +8 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/webui/server.py +97 -14
- agentbyte-0.34.0/src/agentbyte/webui/ui/assets/index-C-wj-OzO.js +82 -0
- agentbyte-0.34.0/src/agentbyte/webui/ui/assets/index-DW8IDODJ.css +1 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/webui/ui/index.html +2 -2
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/workflow/sqlite_checkpoint.py +2 -1
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/workflow/visualizer.py +3 -4
- agentbyte-0.34.0/tests/cli/test_loading.py +111 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/cli/test_registry_check.py +4 -1
- agentbyte-0.34.0/tests/dataset/fake_s3.py +92 -0
- agentbyte-0.34.0/tests/dataset/test_dataset_exit.py +66 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/dataset/test_loader.py +11 -25
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/dataset/test_publish.py +81 -58
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/dataset/test_sqlite_db.py +5 -19
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/eval/test_eval_dataset.py +22 -0
- agentbyte-0.34.0/tests/eval/test_eval_jobs.py +391 -0
- agentbyte-0.34.0/tests/eval/test_eval_workbench.py +470 -0
- agentbyte-0.34.0/tests/test_optional_extras.py +139 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/test_package_api.py +1 -2
- agentbyte-0.34.0/tests/webui/test_eval_routes.py +395 -0
- agentbyte-0.32.2/pyproject.toml +0 -224
- agentbyte-0.32.2/src/agentbyte/__about__.py +0 -2
- agentbyte-0.32.2/src/agentbyte/dataset/publishers.py +0 -131
- agentbyte-0.32.2/src/agentbyte/dataset/writers.py +0 -99
- agentbyte-0.32.2/src/agentbyte/webui/ui/assets/index-BF3DwXaF.js +0 -82
- agentbyte-0.32.2/src/agentbyte/webui/ui/assets/index-ar5tOeqt.css +0 -1
- {agentbyte-0.32.2 → agentbyte-0.34.0}/LICENSE +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/agents/__init__.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/agents/agent.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/agents/agent_as_tool.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/agents/base.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/agents/embedding_agent.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/agents/types.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/cancellation_token.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/catalog.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/cli/__init__.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/compaction/__init__.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/compaction/errors.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/compaction/grouping.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/compaction/strategies.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/component.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/context.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/context_providers/__init__.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/context_providers/base.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/context_providers/skill_tools.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/context_providers/skills.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/dataset/__init__.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/dataset/base.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/dataset/config.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/dataset/json.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/dataset/loader.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/dataset/publish_config.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/dataset/write_config.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/entity.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/eval/base.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/eval/checks/__init__.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/eval/checks/decorator.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/eval/checks/keyword.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/eval/checks/local.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/eval/checks/process.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/eval/checks/tool.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/eval/checks/types.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/eval/comparison.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/eval/history/__init__.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/eval/history/conformance.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/eval/history/errors.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/eval/history/models.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/eval/history/store.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/eval/judges/__init__.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/eval/judges/base.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/eval/judges/composite.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/eval/judges/llm.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/eval/judges/pairwise.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/eval/judges/reference.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/eval/judges/trajectory.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/eval/judges/validation.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/eval/pairwise.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/eval/report.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/eval/runner.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/eval/splitting.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/eval/targets/__init__.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/eval/targets/agent.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/eval/targets/model.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/eval/targets/multi_turn.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/eval/targets/orchestrator.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/eval/targets/runtime.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/eval/targets/workflow.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/eval/types.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/execution_trace/__init__.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/execution_trace/collector.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/execution_trace/models.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/llm/_retry_observability.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/llm/auth.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/llm/azure/__init__.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/llm/azure/settings.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/llm/azure_openai.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/llm/azure_openai_embedding.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/llm/base.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/llm/embeddings_base.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/llm/openai/__init__.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/llm/openai/chat.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/llm/openai/embedding.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/llm/openai/settings.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/llm/openai_embedding.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/llm/pricing.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/llm/retry_policy.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/llm/settings.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/llm/types.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/logger.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/memory/__init__.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/memory/base.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/messages.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/middleware/__init__.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/middleware/base.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/middleware/retry.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/middleware/usage_logger.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/notebook.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/optim/__init__.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/optim/base.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/optim/config.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/optim/mipro.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/optim/pareto.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/optim/reflective.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/optim/spec.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/optim/trace.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/orchestration/__init__.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/orchestration/ai.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/orchestration/base.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/orchestration/handoff.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/orchestration/plan.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/orchestration/policies.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/orchestration/round_robin.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/presets/__init__.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/presets/agents.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/presets/clients.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/presets/instruction_registry.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/presets/instructions/orchestrator.yaml +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/presets/instructions/query_rewriter.yaml +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/presets/instructions/researcher.yaml +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/presets/instructions/reviewer.yaml +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/presets/instructions/writer.yaml +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/presets/orchestration.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/presets/skills/contracts-analyst/SKILL.md +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/presets/skills/hr-analyst/SKILL.md +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/presets/skills/hr-analyst/resources/departments.md +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/presets/skills/hr-analyst/resources/employees.md +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/presets/skills/hr-analyst/resources/payroll.md +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/presets/streaming.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/presets/workflow.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/session_store.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/skills/__init__.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/skills/base.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/skills/resources.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/skills/scripts.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/skills/sources.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/skills/validation.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/termination/__init__.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/termination/base.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/termination/cancellation.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/termination/composite.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/termination/consecutive_agent.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/termination/external.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/termination/function_call.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/termination/handoff.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/termination/max_message.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/termination/predicate.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/termination/source.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/termination/text_mention.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/termination/timeout.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/termination/token_usage.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/tools/__init__.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/tools/base.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/tools/coding_tools.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/tools/core_tools.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/tools/decorator.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/tools/memory_tool.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/types.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/webui/__init__.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/webui/discovery.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/webui/execution.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/webui/registry.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/webui/session_store.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/webui/sessions.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/webui/ui/vite.svg +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/workflow/__init__.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/workflow/agent.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/workflow/core/__init__.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/workflow/core/_structure_hash.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/workflow/core/checkpoint.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/workflow/core/models.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/workflow/core/runner.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/workflow/core/workflow.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/workflow/defaults.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/workflow/errors.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/workflow/loader.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/workflow/schema.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/workflow/schema_utils.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/workflow/steps/__init__.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/workflow/steps/agent.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/workflow/steps/echo.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/workflow/steps/function.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/workflow/steps/http.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/workflow/steps/step.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/workflow/steps/subworkflow.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/src/agentbyte/workflow/steps/transform.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/agents/test_agent_as_tool.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/agents/test_agent_basic.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/agents/test_agent_context_providers.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/agents/test_agent_error_response.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/agents/test_agent_event_types.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/agents/test_agent_memory_integration.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/agents/test_agent_middleware_integration.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/agents/test_agent_response_accessors.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/agents/test_agent_retry_middleware.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/agents/test_agent_stream_events.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/agents/test_embedding_agent.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/agents/test_tool_approval.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/agents/test_tool_batch_resolution.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/agents/test_tool_metadata.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/compaction/test_compaction.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/context_providers/__init__.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/context_providers/test_skill_tools.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/context_providers/test_skills_provider.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/dataset/test_multi_table.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/eval/test_eval_history.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/eval/test_eval_history_backends.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/eval/test_execution_trajectories.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/eval/test_multi_turn.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/eval/test_pairwise.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/eval/test_phase1_runner_and_targets.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/eval/test_phase2_checks_and_reports.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/eval/test_score_integrity.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/eval/test_splitting.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/eval/test_types_and_judges.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/examples/test_compaction_webapp.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/llm/test_azure_client.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/llm/test_azure_embedding_client.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/llm/test_llm_types.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/llm/test_openai_client.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/llm/test_openai_embedding_client.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/llm/test_pricing.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/llm/test_retry_observability.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/llm/test_retry_policy_api.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/llm/test_retryable_error_substrings.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/memory/test_memory.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/middleware/test_context_compaction.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/middleware/test_deduplicate_tool_result.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/middleware/test_middleware_chain.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/middleware/test_otel.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/middleware/test_retry_middleware.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/middleware/test_sql_usage.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/middleware/test_usage_logger.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/optim/__init__.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/optim/test_base.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/optim/test_base_integration.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/optim/test_config.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/optim/test_gepa.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/optim/test_mipro.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/optim/test_pareto.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/optim/test_reflective.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/optim/test_score_integrity.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/optim/test_spec.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/optim/test_trace.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/orchestration/test_ai_orchestrator.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/orchestration/test_base_orchestrator.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/orchestration/test_handoff_orchestrator.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/orchestration/test_orchestrator_finalization.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/orchestration/test_plan_orchestrator.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/orchestration/test_round_robin.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/presets/test_agents.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/presets/test_clients.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/presets/test_instruction_registry.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/presets/test_orchestration.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/presets/test_streaming.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/presets/test_workflow.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/skills/__init__.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/skills/test_base.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/skills/test_resources.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/skills/test_scripts.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/skills/test_sources.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/termination/test_base.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/termination/test_cancellation.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/termination/test_composite.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/termination/test_consecutive_agent.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/termination/test_external.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/termination/test_function_call.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/termination/test_handoff.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/termination/test_max_message.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/termination/test_predicate.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/termination/test_source.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/termination/test_text_mention.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/termination/test_timeout.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/termination/test_token_usage.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/test_cancellation_token.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/test_context.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/test_logger.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/test_messages.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/test_session_store.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/test_types.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/test_vanilla_chunker.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/tools/test_coding_tools.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/tools/test_memory_tool.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/tools/test_research_tools.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/tools/test_tools.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/webui/__init__.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/webui/helpers.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/webui/test_execution.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/webui/test_package_api.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/webui/test_registry.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/webui/test_server.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/webui/test_sessions.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/webui/test_workflow_streaming.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/workflow/recovery_worker.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/workflow/test_agent_step_imports.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/workflow/test_checkpoint.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/workflow/test_subworkflow_step.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/workflow/test_workflow_agent.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/workflow/test_workflow_class.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/workflow/test_workflow_models.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/workflow/test_workflow_reliability.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/workflow/test_workflow_runner.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/workflow/test_workflow_schema.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/workflow/test_workflow_steps.py +0 -0
- {agentbyte-0.32.2 → agentbyte-0.34.0}/tests/workflow/test_workflow_visualizer.py +0 -0
|
@@ -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.
|
|
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:
|
|
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:
|
|
71
|
-
Requires-Dist:
|
|
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.
|
|
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
|
-
|
|
306
|
-
|
|
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
|
-
|
|
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[
|
|
298
|
+
uv add "agentbyte[openai,sqlite]"
|
|
343
299
|
```
|
|
344
300
|
|
|
345
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
371
|
-
|
|
372
|
-
```bash
|
|
373
|
-
uv run python examples/webui/presets_webui.py
|
|
374
|
-
```
|
|
333
|
+
### Option 1: Sample apps
|
|
375
334
|
|
|
376
|
-
|
|
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
|
|
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
|
-
|
|
342
|
+
With your OpenAI or Azure OpenAI credentials, the preset agents, teams and workflow:
|
|
397
343
|
|
|
398
344
|
```bash
|
|
399
|
-
uv
|
|
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
|
-
|
|
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
|
-
|
|
405
|
-
http://127.0.0.1:8080
|
|
406
|
-
```
|
|
353
|
+
### Option 2: Evaluations for your suites
|
|
407
354
|
|
|
408
|
-
|
|
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
|
|
412
|
-
uv run agentbyte
|
|
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
|
-
|
|
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
|
-
|
|
418
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
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.
|
|
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
|
-
|
|
218
|
-
|
|
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
|
-
|
|
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[
|
|
228
|
+
uv add "agentbyte[openai,sqlite]"
|
|
255
229
|
```
|
|
256
230
|
|
|
257
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
283
|
-
|
|
284
|
-
```bash
|
|
285
|
-
uv run python examples/webui/presets_webui.py
|
|
286
|
-
```
|
|
263
|
+
### Option 1: Sample apps
|
|
287
264
|
|
|
288
|
-
|
|
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
|
|
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
|
-
|
|
272
|
+
With your OpenAI or Azure OpenAI credentials, the preset agents, teams and workflow:
|
|
309
273
|
|
|
310
274
|
```bash
|
|
311
|
-
uv
|
|
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
|
-
|
|
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
|
-
|
|
317
|
-
http://127.0.0.1:8080
|
|
318
|
-
```
|
|
283
|
+
### Option 2: Evaluations for your suites
|
|
319
284
|
|
|
320
|
-
|
|
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
|
|
324
|
-
uv run agentbyte
|
|
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
|
-
|
|
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
|
-
|
|
330
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
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
|
|