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