agentbyte 0.43.0__tar.gz → 0.44.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.43.0 → agentbyte-0.44.0}/CHANGELOG.md +32 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/PKG-INFO +2 -2
- {agentbyte-0.43.0 → agentbyte-0.44.0}/README.md +1 -1
- agentbyte-0.44.0/src/agentbyte/__about__.py +2 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/compaction/grouping.py +11 -2
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/eval/__init__.py +2 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/eval/history/__init__.py +2 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/eval/history/conformance.py +2 -2
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/eval/history/models.py +49 -12
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/eval/history/recorder.py +2 -2
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/eval/history/transitions.py +13 -8
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/eval/judges/pairwise.py +10 -5
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/eval/splitting.py +3 -3
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/eval/targets/model.py +3 -2
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/eval/targets/runtime.py +4 -3
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/eval/types.py +18 -5
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/eval/workbench/smoke.py +3 -3
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/eval/workbench/verdict.py +27 -16
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/execution_trace/collector.py +24 -21
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/execution_trace/models.py +13 -5
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/llm/_retry_observability.py +10 -2
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/llm/retry_policy.py +7 -3
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/llm/types.py +10 -3
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/middleware/base.py +25 -14
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/optim/spec.py +3 -3
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/orchestration/__init__.py +15 -1
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/orchestration/ai.py +5 -3
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/orchestration/base.py +23 -15
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/orchestration/handoff.py +18 -6
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/orchestration/policies.py +58 -10
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/presets/__init__.py +2 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/presets/orchestration.py +42 -25
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/termination/__init__.py +2 -1
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/termination/composite.py +15 -5
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/tools/research_tools.py +42 -12
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/types.py +23 -4
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/webui/models.py +20 -3
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/workflow/__init__.py +4 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/workflow/agent.py +8 -8
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/workflow/core/checkpoint.py +20 -4
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/workflow/core/models.py +18 -10
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/workflow/core/runner.py +10 -5
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/workflow/core/workflow.py +2 -1
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/workflow/schema.py +2 -2
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/workflow/steps/step.py +2 -1
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/workflow/visualizer.py +20 -9
- agentbyte-0.44.0/tests/test_option_enums.py +206 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/tools/test_research_tools.py +17 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/workflow/test_workflow_reliability.py +2 -1
- agentbyte-0.43.0/src/agentbyte/__about__.py +0 -2
- {agentbyte-0.43.0 → agentbyte-0.44.0}/.gitignore +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/LICENSE +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/pyproject.toml +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/__init__.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/_optional.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/agents/__init__.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/agents/agent.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/agents/agent_as_tool.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/agents/base.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/agents/embedding_agent.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/agents/types.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/cancellation_token.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/catalog.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/cli/__init__.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/cli/__main__.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/cli/eval_commands.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/cli/loading.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/cli/main.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/compaction/__init__.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/compaction/counters.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/compaction/errors.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/compaction/strategies.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/component.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/context.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/context_providers/__init__.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/context_providers/base.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/context_providers/skill_tools.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/context_providers/skills.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/dataset/__init__.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/dataset/_aiosqlite.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/dataset/base.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/dataset/config.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/dataset/importer.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/dataset/json.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/dataset/loader.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/dataset/publish.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/dataset/publish_config.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/dataset/publishers.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/dataset/s3.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/dataset/sources.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/dataset/sqlite.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/dataset/sqlite_db.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/dataset/write_config.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/dataset/writers.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/entity.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/eval/base.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/eval/checks/__init__.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/eval/checks/decorator.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/eval/checks/keyword.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/eval/checks/local.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/eval/checks/process.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/eval/checks/tool.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/eval/checks/types.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/eval/comparison.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/eval/eval_dataset.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/eval/history/errors.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/eval/history/sql.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/eval/history/sqlite.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/eval/history/store.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/eval/judges/__init__.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/eval/judges/base.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/eval/judges/composite.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/eval/judges/llm.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/eval/judges/reference.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/eval/judges/trajectory.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/eval/judges/validation.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/eval/pairwise.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/eval/report.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/eval/runner.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/eval/targets/__init__.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/eval/targets/agent.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/eval/targets/multi_turn.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/eval/targets/orchestrator.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/eval/targets/workflow.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/eval/workbench/__init__.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/eval/workbench/coordinator.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/eval/workbench/jobs.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/eval/workbench/smoke_tasks.json +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/eval/workbench/suite.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/execution_trace/__init__.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/llm/__init__.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/llm/auth.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/llm/azure/__init__.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/llm/azure/auth.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/llm/azure/chat.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/llm/azure/embedding.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/llm/azure/settings.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/llm/azure_openai.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/llm/azure_openai_embedding.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/llm/base.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/llm/embeddings_base.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/llm/openai/__init__.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/llm/openai/chat.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/llm/openai/embedding.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/llm/openai/settings.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/llm/openai_embedding.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/llm/pricing.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/llm/settings.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/logger.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/memory/__init__.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/memory/base.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/messages.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/middleware/__init__.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/middleware/otel.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/middleware/retry.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/middleware/sql_usage.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/middleware/usage_logger.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/notebook.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/optim/__init__.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/optim/base.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/optim/config.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/optim/gepa.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/optim/mipro.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/optim/pareto.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/optim/reflective.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/optim/trace.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/orchestration/plan.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/orchestration/round_robin.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/presets/agents.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/presets/clients.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/presets/instruction_registry.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/presets/instructions/orchestrator.yaml +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/presets/instructions/query_rewriter.yaml +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/presets/instructions/researcher.yaml +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/presets/instructions/reviewer.yaml +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/presets/instructions/writer.yaml +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/presets/skills/contracts-analyst/SKILL.md +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/presets/skills/hr-analyst/SKILL.md +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/presets/skills/hr-analyst/resources/departments.md +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/presets/skills/hr-analyst/resources/employees.md +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/presets/skills/hr-analyst/resources/payroll.md +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/presets/streaming.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/presets/workflow.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/session_store.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/skills/__init__.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/skills/base.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/skills/resources.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/skills/scripts.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/skills/sources.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/skills/validation.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/termination/base.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/termination/cancellation.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/termination/consecutive_agent.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/termination/external.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/termination/function_call.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/termination/handoff.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/termination/max_message.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/termination/predicate.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/termination/source.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/termination/text_mention.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/termination/timeout.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/termination/token_usage.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/tools/__init__.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/tools/base.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/tools/coding_tools.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/tools/core_tools.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/tools/decorator.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/tools/memory_tool.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/webui/__init__.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/webui/discovery.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/webui/eval_routes.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/webui/execution.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/webui/registry.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/webui/server.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/webui/session_store.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/webui/sessions.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/webui/ui/assets/index-BsS4WYZu.css +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/webui/ui/assets/index-tGvO1yue.js +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/webui/ui/index.html +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/webui/ui/vite.svg +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/workflow/core/__init__.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/workflow/core/_structure_hash.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/workflow/defaults.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/workflow/errors.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/workflow/loader.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/workflow/schema_utils.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/workflow/sqlite_checkpoint.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/workflow/steps/__init__.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/workflow/steps/agent.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/workflow/steps/echo.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/workflow/steps/function.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/workflow/steps/http.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/workflow/steps/subworkflow.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/src/agentbyte/workflow/steps/transform.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/agents/test_agent_as_tool.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/agents/test_agent_basic.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/agents/test_agent_context_providers.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/agents/test_agent_error_response.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/agents/test_agent_event_types.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/agents/test_agent_memory_integration.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/agents/test_agent_middleware_integration.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/agents/test_agent_response_accessors.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/agents/test_agent_retry_middleware.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/agents/test_agent_stop_at_tools.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/agents/test_agent_stream_events.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/agents/test_embedding_agent.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/agents/test_tool_approval.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/agents/test_tool_batch_resolution.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/agents/test_tool_metadata.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/cli/test_loading.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/cli/test_registry_check.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/compaction/test_compaction.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/context_providers/__init__.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/context_providers/test_skill_tools.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/context_providers/test_skills_provider.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/dataset/fake_s3.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/dataset/test_dataset_exit.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/dataset/test_loader.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/dataset/test_multi_table.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/dataset/test_publish.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/dataset/test_sqlite_db.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/eval/test_eval_dataset.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/eval/test_eval_history.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/eval/test_eval_history_backends.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/eval/test_eval_jobs.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/eval/test_eval_workbench.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/eval/test_execution_trajectories.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/eval/test_multi_turn.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/eval/test_pairwise.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/eval/test_phase1_runner_and_targets.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/eval/test_phase2_checks_and_reports.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/eval/test_score_integrity.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/eval/test_splitting.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/eval/test_types_and_judges.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/examples/test_compaction_webapp.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/llm/test_azure_client.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/llm/test_azure_embedding_client.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/llm/test_llm_types.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/llm/test_openai_client.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/llm/test_openai_embedding_client.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/llm/test_pricing.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/llm/test_retry_observability.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/llm/test_retry_policy_api.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/llm/test_retryable_error_substrings.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/memory/test_memory.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/middleware/test_context_compaction.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/middleware/test_deduplicate_tool_result.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/middleware/test_middleware_chain.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/middleware/test_otel.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/middleware/test_retry_middleware.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/middleware/test_sql_usage.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/middleware/test_usage_logger.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/optim/__init__.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/optim/test_base.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/optim/test_base_integration.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/optim/test_config.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/optim/test_description_tunable.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/optim/test_gepa.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/optim/test_mipro.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/optim/test_orchestrator_optim.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/optim/test_pareto.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/optim/test_reflective.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/optim/test_score_integrity.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/optim/test_spec.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/optim/test_trace.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/orchestration/test_ai_orchestrator.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/orchestration/test_base_orchestrator.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/orchestration/test_handoff_orchestrator.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/orchestration/test_history_tool_call_pairing.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/orchestration/test_orchestration_usage_breakdown.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/orchestration/test_orchestrator_agent_contract.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/orchestration/test_orchestrator_finalization.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/orchestration/test_orchestrator_member_events.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/orchestration/test_orchestrator_otel.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/orchestration/test_orchestrator_synthesis.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/orchestration/test_plan_orchestrator.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/orchestration/test_round_robin.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/presets/test_agents.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/presets/test_clients.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/presets/test_instruction_registry.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/presets/test_orchestration.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/presets/test_streaming.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/presets/test_workflow.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/skills/__init__.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/skills/test_base.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/skills/test_resources.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/skills/test_scripts.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/skills/test_sources.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/termination/test_base.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/termination/test_cancellation.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/termination/test_composite.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/termination/test_consecutive_agent.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/termination/test_external.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/termination/test_function_call.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/termination/test_handoff.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/termination/test_max_message.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/termination/test_predicate.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/termination/test_source.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/termination/test_text_mention.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/termination/test_timeout.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/termination/test_token_usage.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/test_cancellation_token.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/test_context.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/test_logger.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/test_messages.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/test_optional_extras.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/test_package_api.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/test_session_store.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/test_types.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/test_vanilla_chunker.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/tools/test_coding_tools.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/tools/test_memory_tool.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/tools/test_tools.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/webui/__init__.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/webui/helpers.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/webui/test_eval_routes.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/webui/test_execution.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/webui/test_package_api.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/webui/test_registry.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/webui/test_server.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/webui/test_sessions.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/webui/test_workflow_streaming.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/workflow/recovery_worker.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/workflow/test_agent_step_imports.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/workflow/test_checkpoint.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/workflow/test_subworkflow_step.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/workflow/test_workflow_agent.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/workflow/test_workflow_class.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/workflow/test_workflow_models.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/workflow/test_workflow_runner.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/workflow/test_workflow_schema.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/workflow/test_workflow_steps.py +0 -0
- {agentbyte-0.43.0 → agentbyte-0.44.0}/tests/workflow/test_workflow_visualizer.py +0 -0
|
@@ -6,6 +6,38 @@ The format follows Keep a Changelog principles and semantic versioning.
|
|
|
6
6
|
|
|
7
7
|
## [Unreleased]
|
|
8
8
|
|
|
9
|
+
## [0.44.0] - 2026-10-05
|
|
10
|
+
|
|
11
|
+
### Changed
|
|
12
|
+
|
|
13
|
+
- Fixed string option sets are `StrEnum`s (spec 0067). Plain strings are still accepted
|
|
14
|
+
everywhere (`AgentHistoryPolicy(window="run")` keeps working) and serialize to the same values.
|
|
15
|
+
New enums: `HistoryWindow`, `HistoryFormat`, `SelectorWindow`, `SelectorFormat`, `StripMode`,
|
|
16
|
+
`FallbackStrategy`, `TurnKind` (`agentbyte.orchestration`); `OrchestratorPattern`
|
|
17
|
+
(`agentbyte.presets`); `CompositeMode` (`agentbyte.termination`); `PairwiseWinner`
|
|
18
|
+
(`agentbyte.eval`); `TaskType` (`agentbyte.eval.history`); `CheckpointType`, `WorkflowMemoryMode`
|
|
19
|
+
(`agentbyte.workflow`); `GraphView`, `EntitySource`, `EntityType`, `SafeSearch`, `PageFormat`,
|
|
20
|
+
`RetrySequenceOutcome`, `RetryAttemptOutcome`. The literal aliases `ScoringStatus`, `RunStatus`,
|
|
21
|
+
`ItemState`, `EvidenceStatus`, `ItemOutcome`, `ExecutionStatus`, `PricingStatus`, `GroupKind`
|
|
22
|
+
are now `StrEnum` classes with the same names (iterate them instead of `typing.get_args`).
|
|
23
|
+
- The 16 `class X(str, Enum)` classes (workflow statuses and modes, `OperationType`, optim
|
|
24
|
+
`Operation`/`ProposalMode`, eval splitting) are `StrEnum`: `str(member)` and f-strings print the
|
|
25
|
+
value (`"completed"`) instead of `"StepStatus.COMPLETED"`.
|
|
26
|
+
- Unknown values for `HandoffOrchestrator(fallback_strategy=...)`, `CompositeTermination(mode=...)`,
|
|
27
|
+
`WorkflowAgent(memory_mode=...)`, `WorkflowVisualizer` `view` and the research tools'
|
|
28
|
+
`default_safe_search` raise `ValueError` instead of silently using a default branch.
|
|
29
|
+
- `WebFetchTool` / `ExtractTextTool` return a failed `ToolResult` listing the valid values for an
|
|
30
|
+
unknown model-supplied `output_format` (previously silently plain text).
|
|
31
|
+
- `SuiteItemVerdict.state/scoring_status/execution_status/evidence_status`,
|
|
32
|
+
`EvalItemRecord.execution_status` and `WorkflowCheckpoint.checkpoint_type` are typed with their
|
|
33
|
+
enums instead of bare `str`.
|
|
34
|
+
|
|
35
|
+
### Fixed
|
|
36
|
+
|
|
37
|
+
- OTel span-name fallback rendered `"OperationType.MEMORY_ACCESS <agent>"`, and the logger printed
|
|
38
|
+
workflow event types as `"WorkflowEventType.…"`; both print the value now.
|
|
39
|
+
- `copy_tool_metadata` accepts `StrEnum` members (stored as their plain value).
|
|
40
|
+
|
|
9
41
|
## [0.43.0] - 2026-10-05
|
|
10
42
|
|
|
11
43
|
### Added
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: agentbyte
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.44.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
|
|
@@ -77,7 +77,7 @@ Description-Content-Type: text/markdown
|
|
|
77
77
|
|
|
78
78
|
Agentbyte is an observability-first agentic AI framework for building and studying multiagent systems with a learning-first, implementation-oriented workflow.
|
|
79
79
|
|
|
80
|
-
Current release: **0.
|
|
80
|
+
Current release: **0.44.0**
|
|
81
81
|
|
|
82
82
|
## Building an Agent
|
|
83
83
|
|
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
5
|
from dataclasses import dataclass
|
|
6
|
-
from
|
|
6
|
+
from enum import StrEnum
|
|
7
|
+
from typing import Any
|
|
7
8
|
|
|
8
9
|
from agentbyte.compaction.errors import PendingToolExchangeError, ToolExchangeError
|
|
9
10
|
from agentbyte.messages import (
|
|
@@ -14,7 +15,15 @@ from agentbyte.messages import (
|
|
|
14
15
|
UserMessage,
|
|
15
16
|
)
|
|
16
17
|
|
|
17
|
-
|
|
18
|
+
|
|
19
|
+
class GroupKind(StrEnum):
|
|
20
|
+
"""What an indivisible message group contains."""
|
|
21
|
+
|
|
22
|
+
SYSTEM = "system"
|
|
23
|
+
USER = "user"
|
|
24
|
+
ASSISTANT = "assistant"
|
|
25
|
+
TOOL_EXCHANGE = "tool_exchange"
|
|
26
|
+
OPAQUE = "opaque"
|
|
18
27
|
|
|
19
28
|
|
|
20
29
|
@dataclass(frozen=True)
|
|
@@ -58,6 +58,7 @@ from .types import (
|
|
|
58
58
|
MultiTurnEvalTask,
|
|
59
59
|
WorkflowEvalTask,
|
|
60
60
|
PairwiseResult,
|
|
61
|
+
PairwiseWinner,
|
|
61
62
|
)
|
|
62
63
|
|
|
63
64
|
__all__ = [
|
|
@@ -76,6 +77,7 @@ __all__ = [
|
|
|
76
77
|
"BaseEvalRunner",
|
|
77
78
|
"JudgeScoringError",
|
|
78
79
|
"ScoringStatus",
|
|
80
|
+
"PairwiseWinner",
|
|
79
81
|
"ExactMatchJudge",
|
|
80
82
|
"ContainsJudge",
|
|
81
83
|
"FuzzyMatchJudge",
|
|
@@ -30,6 +30,7 @@ from .models import (
|
|
|
30
30
|
Redactor,
|
|
31
31
|
RunStatus,
|
|
32
32
|
StructuredPayload,
|
|
33
|
+
TaskType,
|
|
33
34
|
)
|
|
34
35
|
from .recorder import EvalRunRecorder
|
|
35
36
|
from .sqlite import SQLiteEvalRunStore
|
|
@@ -71,5 +72,6 @@ __all__ = [
|
|
|
71
72
|
"SQLiteEvalRunStore",
|
|
72
73
|
"SqlEvalRunStore",
|
|
73
74
|
"StructuredPayload",
|
|
75
|
+
"TaskType",
|
|
74
76
|
"history_metadata",
|
|
75
77
|
]
|
|
@@ -22,7 +22,7 @@ from pydantic import BaseModel
|
|
|
22
22
|
|
|
23
23
|
from agentbyte.eval.base import BaseEvalJudge, BaseEvalTarget, JudgeScoringError
|
|
24
24
|
from agentbyte.eval.runner import EvalRunner
|
|
25
|
-
from agentbyte.eval.types import EvalScore, EvalTask, EvalTrajectory, WorkflowEvalTask
|
|
25
|
+
from agentbyte.eval.types import EvalScore, EvalTask, EvalTrajectory, ScoringStatus, WorkflowEvalTask
|
|
26
26
|
from agentbyte.execution_trace.models import ExecutionEvent, ExecutionSpan, ExecutionTrace
|
|
27
27
|
from agentbyte.messages import AssistantMessage, UserMessage, Usage
|
|
28
28
|
|
|
@@ -152,7 +152,7 @@ async def check_lifecycle_updates_counters_and_revisions(store: EvalRunStore) ->
|
|
|
152
152
|
assert (saved.state, saved.revision, saved.overall) == ("finished", 4, 6.0)
|
|
153
153
|
assert saved.started_at == running.started_at and saved.finished_at is not None
|
|
154
154
|
failed = await store.save_item(_outcome(run, 1).model_copy(update={
|
|
155
|
-
"scoring_status":
|
|
155
|
+
"scoring_status": ScoringStatus.FAILED, "overall": None, "failure_reason": "target_error",
|
|
156
156
|
}))
|
|
157
157
|
assert failed.revision == 5
|
|
158
158
|
|
|
@@ -13,12 +13,13 @@ import re
|
|
|
13
13
|
from collections.abc import Callable
|
|
14
14
|
from datetime import date, datetime, timezone
|
|
15
15
|
from enum import StrEnum
|
|
16
|
-
from typing import Any
|
|
16
|
+
from typing import Any
|
|
17
17
|
from uuid import uuid4
|
|
18
18
|
|
|
19
19
|
from pydantic import BaseModel, ConfigDict, Field
|
|
20
20
|
|
|
21
21
|
from agentbyte.eval.types import EvalScore, EvalTask, MultiTurnEvalTask, ScoringStatus, WorkflowEvalTask
|
|
22
|
+
from agentbyte.execution_trace.models import ExecutionStatus
|
|
22
23
|
from agentbyte.messages import Usage
|
|
23
24
|
|
|
24
25
|
from .errors import EvalSchemaVersionError, EvalSerializationError
|
|
@@ -29,8 +30,26 @@ SCHEMA_VERSION = 1
|
|
|
29
30
|
EVIDENCE_VERSION = 1
|
|
30
31
|
"""Version of the serialized full-capture evidence envelope."""
|
|
31
32
|
|
|
32
|
-
|
|
33
|
-
|
|
33
|
+
|
|
34
|
+
class RunStatus(StrEnum):
|
|
35
|
+
"""Lifecycle status of a recorded evaluation run."""
|
|
36
|
+
|
|
37
|
+
QUEUED = "queued"
|
|
38
|
+
RUNNING = "running"
|
|
39
|
+
COMPLETED = "completed"
|
|
40
|
+
FAILED = "failed"
|
|
41
|
+
CANCELLED = "cancelled"
|
|
42
|
+
INTERRUPTED = "interrupted"
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
class ItemState(StrEnum):
|
|
46
|
+
"""Lifecycle state of one recorded evaluation item."""
|
|
47
|
+
|
|
48
|
+
PENDING = "pending"
|
|
49
|
+
RUNNING = "running"
|
|
50
|
+
FINISHED = "finished"
|
|
51
|
+
CANCELLED = "cancelled"
|
|
52
|
+
NOT_STARTED = "not_started"
|
|
34
53
|
|
|
35
54
|
|
|
36
55
|
class CaptureMode(StrEnum):
|
|
@@ -45,11 +64,29 @@ class CaptureMode(StrEnum):
|
|
|
45
64
|
FULL = "full"
|
|
46
65
|
|
|
47
66
|
|
|
48
|
-
EvidenceStatus
|
|
49
|
-
|
|
67
|
+
class EvidenceStatus(StrEnum):
|
|
68
|
+
"""Whether an item's full evidence is stored."""
|
|
69
|
+
|
|
70
|
+
NOT_CAPTURED = "not_captured"
|
|
71
|
+
CAPTURED = "captured"
|
|
72
|
+
REDACTED = "redacted"
|
|
73
|
+
UNAVAILABLE = "unavailable"
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
class TaskType(StrEnum):
|
|
77
|
+
"""Kind of evaluation task an item ran."""
|
|
78
|
+
|
|
79
|
+
TASK = "task"
|
|
80
|
+
WORKFLOW = "workflow"
|
|
81
|
+
MULTI_TURN = "multi_turn"
|
|
82
|
+
|
|
50
83
|
|
|
51
|
-
ACTIVE_RUN_STATUSES: tuple[RunStatus, ...] = (
|
|
52
|
-
TERMINAL_ITEM_STATES: tuple[ItemState, ...] = (
|
|
84
|
+
ACTIVE_RUN_STATUSES: tuple[RunStatus, ...] = (RunStatus.QUEUED, RunStatus.RUNNING)
|
|
85
|
+
TERMINAL_ITEM_STATES: tuple[ItemState, ...] = (
|
|
86
|
+
ItemState.FINISHED,
|
|
87
|
+
ItemState.CANCELLED,
|
|
88
|
+
ItemState.NOT_STARTED,
|
|
89
|
+
)
|
|
53
90
|
|
|
54
91
|
Redactor = Callable[[EvalScore], EvalScore]
|
|
55
92
|
|
|
@@ -83,7 +120,7 @@ class EvalRunRecord(BaseModel):
|
|
|
83
120
|
|
|
84
121
|
id: str = Field(default_factory=lambda: str(uuid4()))
|
|
85
122
|
schema_version: int = SCHEMA_VERSION
|
|
86
|
-
status: RunStatus =
|
|
123
|
+
status: RunStatus = RunStatus.QUEUED
|
|
87
124
|
revision: int = 0
|
|
88
125
|
capture: CaptureMode = CaptureMode.SUMMARY
|
|
89
126
|
dataset_id: str
|
|
@@ -134,8 +171,8 @@ class EvalItemRecord(BaseModel):
|
|
|
134
171
|
run_id: str
|
|
135
172
|
item_index: int
|
|
136
173
|
task_name: str
|
|
137
|
-
task_type: TaskType =
|
|
138
|
-
state: ItemState =
|
|
174
|
+
task_type: TaskType = TaskType.TASK
|
|
175
|
+
state: ItemState = ItemState.PENDING
|
|
139
176
|
revision: int = 0
|
|
140
177
|
started_at: datetime | None = None
|
|
141
178
|
finished_at: datetime | None = None
|
|
@@ -145,10 +182,10 @@ class EvalItemRecord(BaseModel):
|
|
|
145
182
|
failure_reason: str | None = None
|
|
146
183
|
error_type: str | None = None
|
|
147
184
|
success: bool | None = None
|
|
148
|
-
execution_status:
|
|
185
|
+
execution_status: ExecutionStatus | None = None
|
|
149
186
|
usage: Usage | None = None
|
|
150
187
|
trace_id: str | None = None
|
|
151
|
-
evidence_status: EvidenceStatus =
|
|
188
|
+
evidence_status: EvidenceStatus = EvidenceStatus.NOT_CAPTURED
|
|
152
189
|
evidence: EvalScore | None = None
|
|
153
190
|
|
|
154
191
|
@property
|
|
@@ -318,9 +318,9 @@ class EvalRunRecorder:
|
|
|
318
318
|
|
|
319
319
|
def _outcome(self, run_id: str, index: int, task: EvalTask, score: EvalScore) -> EvalItemRecord:
|
|
320
320
|
evidence: EvalScore | None = None
|
|
321
|
-
evidence_status: EvidenceStatus =
|
|
321
|
+
evidence_status: EvidenceStatus = EvidenceStatus.NOT_CAPTURED
|
|
322
322
|
if self.capture == CaptureMode.FULL:
|
|
323
|
-
evidence, evidence_status = score,
|
|
323
|
+
evidence, evidence_status = score, EvidenceStatus.CAPTURED
|
|
324
324
|
if self.redact is not None:
|
|
325
325
|
try:
|
|
326
326
|
evidence = self.redact(score)
|
|
@@ -10,9 +10,14 @@ from __future__ import annotations
|
|
|
10
10
|
from typing import Any
|
|
11
11
|
|
|
12
12
|
from .errors import EvalHistoryConflictError, EvalQueueFullError
|
|
13
|
-
from .models import EvalItemRecord, EvalRunRecord, RunStatus, utc_now
|
|
13
|
+
from .models import EvalItemRecord, EvalRunRecord, ItemState, RunStatus, utc_now
|
|
14
14
|
|
|
15
|
-
FINAL_RUN_STATUSES: tuple[RunStatus, ...] = (
|
|
15
|
+
FINAL_RUN_STATUSES: tuple[RunStatus, ...] = (
|
|
16
|
+
RunStatus.COMPLETED,
|
|
17
|
+
RunStatus.FAILED,
|
|
18
|
+
RunStatus.CANCELLED,
|
|
19
|
+
RunStatus.INTERRUPTED,
|
|
20
|
+
)
|
|
16
21
|
|
|
17
22
|
def admitted_duplicate(existing: EvalRunRecord, run: EvalRunRecord, planned: int) -> EvalRunRecord:
|
|
18
23
|
same = (
|
|
@@ -44,7 +49,7 @@ def admit(run: EvalRunRecord, items: list[EvalItemRecord]) -> tuple[EvalRunRecor
|
|
|
44
49
|
raise ValueError("items must be indexed 0..n-1 in order")
|
|
45
50
|
if any(item.run_id != run.id or item.state != "pending" for item in items):
|
|
46
51
|
raise ValueError("items must be pending and belong to the run")
|
|
47
|
-
admitted = run.model_copy(update={"status":
|
|
52
|
+
admitted = run.model_copy(update={"status": RunStatus.QUEUED, "revision": 1, "planned_count": len(items)})
|
|
48
53
|
return admitted, [item.model_copy(update={"revision": 1}) for item in items]
|
|
49
54
|
|
|
50
55
|
|
|
@@ -52,7 +57,7 @@ def start(run: EvalRunRecord, worker_id: str | None) -> EvalRunRecord:
|
|
|
52
57
|
if run.status != "queued":
|
|
53
58
|
raise EvalHistoryConflictError(f"Run {run.id} is {run.status}, not queued")
|
|
54
59
|
return run.model_copy(update={
|
|
55
|
-
"status":
|
|
60
|
+
"status": RunStatus.RUNNING, "revision": run.revision + 1,
|
|
56
61
|
"started_at": utc_now(), "worker_id": worker_id,
|
|
57
62
|
})
|
|
58
63
|
|
|
@@ -65,7 +70,7 @@ def item_running(run: EvalRunRecord, item: EvalItemRecord) -> tuple[EvalRunRecor
|
|
|
65
70
|
revision = run.revision + 1
|
|
66
71
|
return (
|
|
67
72
|
run.model_copy(update={"revision": revision}),
|
|
68
|
-
item.model_copy(update={"state":
|
|
73
|
+
item.model_copy(update={"state": ItemState.RUNNING, "revision": revision, "started_at": utc_now()}),
|
|
69
74
|
)
|
|
70
75
|
|
|
71
76
|
|
|
@@ -125,14 +130,14 @@ def finish(
|
|
|
125
130
|
closed: list[EvalItemRecord] = []
|
|
126
131
|
for item in open_items:
|
|
127
132
|
if item.state == "pending":
|
|
128
|
-
update: dict[str, Any] = {"state":
|
|
133
|
+
update: dict[str, Any] = {"state": ItemState.NOT_STARTED}
|
|
129
134
|
else:
|
|
130
|
-
update = {"state":
|
|
135
|
+
update = {"state": ItemState.CANCELLED, "failure_reason": "cancelled", "finished_at": now}
|
|
131
136
|
closed.append(item.model_copy(update={**update, "revision": revision}))
|
|
132
137
|
updated = run.model_copy(update={"revision": revision})
|
|
133
138
|
for item in closed:
|
|
134
139
|
updated = updated.model_copy(update=_count(updated, item))
|
|
135
|
-
return updated.model_copy(update={"status": status, "finished_at": now, "error": error}), closed
|
|
140
|
+
return updated.model_copy(update={"status": RunStatus(status), "finished_at": now, "error": error}), closed
|
|
136
141
|
|
|
137
142
|
|
|
138
143
|
def check_same_evidence(item: EvalItemRecord, stored: str | None, new: str | None) -> None:
|
|
@@ -21,6 +21,7 @@ from agentbyte.eval.types import (
|
|
|
21
21
|
EvalScore,
|
|
22
22
|
EvalTrajectory,
|
|
23
23
|
PairwiseResult,
|
|
24
|
+
PairwiseWinner,
|
|
24
25
|
)
|
|
25
26
|
|
|
26
27
|
|
|
@@ -129,16 +130,20 @@ class PairwiseJudge(BaseEvalJudge):
|
|
|
129
130
|
parsed = self._parse_response(result.structured_output, result.message.content)
|
|
130
131
|
except (ValidationError, json.JSONDecodeError, TypeError) as exc:
|
|
131
132
|
raise JudgeScoringError("invalid_response", "Malformed pairwise response") from exc
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
133
|
+
# The model's raw label stays a str until normalized and validated here.
|
|
134
|
+
try:
|
|
135
|
+
winner = PairwiseWinner(parsed.winner.strip().lower())
|
|
136
|
+
except ValueError:
|
|
137
|
+
raise JudgeScoringError(
|
|
138
|
+
"invalid_response", f"Unknown winner: {parsed.winner!r}"
|
|
139
|
+
) from None
|
|
135
140
|
margin = float(parsed.margin)
|
|
136
141
|
if not math.isfinite(margin) or not 0.0 <= margin <= 1.0:
|
|
137
142
|
raise JudgeScoringError("invalid_score", f"Margin outside 0-1: {parsed.margin!r}")
|
|
138
143
|
return PairwiseResult(
|
|
139
144
|
task=trajectory_a.task,
|
|
140
|
-
winner=winner,
|
|
141
|
-
margin=0.0 if winner ==
|
|
145
|
+
winner=winner,
|
|
146
|
+
margin=0.0 if winner == PairwiseWinner.TIE else margin,
|
|
142
147
|
reasoning=parsed.reasoning,
|
|
143
148
|
trajectory_a=trajectory_a,
|
|
144
149
|
trajectory_b=trajectory_b,
|
|
@@ -8,7 +8,7 @@ import math
|
|
|
8
8
|
from abc import ABC, abstractmethod
|
|
9
9
|
from collections import Counter
|
|
10
10
|
from collections.abc import Sequence
|
|
11
|
-
from enum import
|
|
11
|
+
from enum import StrEnum
|
|
12
12
|
from typing import Any
|
|
13
13
|
|
|
14
14
|
from pydantic import BaseModel, ConfigDict, Field, field_validator, model_validator
|
|
@@ -16,14 +16,14 @@ from pydantic import BaseModel, ConfigDict, Field, field_validator, model_valida
|
|
|
16
16
|
from agentbyte.eval.types import EvalTask
|
|
17
17
|
|
|
18
18
|
|
|
19
|
-
class EvalSplitStrategy(
|
|
19
|
+
class EvalSplitStrategy(StrEnum):
|
|
20
20
|
"""Supported holdout partition layouts."""
|
|
21
21
|
|
|
22
22
|
TRAIN_TEST = "train_test"
|
|
23
23
|
TRAIN_VALIDATION_TEST = "train_validation_test"
|
|
24
24
|
|
|
25
25
|
|
|
26
|
-
class EvalPartition(
|
|
26
|
+
class EvalPartition(StrEnum):
|
|
27
27
|
"""Named partitions produced by an eval split."""
|
|
28
28
|
|
|
29
29
|
TRAIN = "train"
|
|
@@ -5,6 +5,7 @@ from __future__ import annotations
|
|
|
5
5
|
import time
|
|
6
6
|
|
|
7
7
|
from agentbyte.cancellation_token import CancellationToken
|
|
8
|
+
from agentbyte.execution_trace import ExecutionStatus
|
|
8
9
|
from agentbyte.llm import BaseChatCompletionClient
|
|
9
10
|
from agentbyte.messages import SystemMessage, Usage, UserMessage
|
|
10
11
|
|
|
@@ -36,7 +37,7 @@ class ModelEvalTarget(BaseEvalTarget):
|
|
|
36
37
|
task,
|
|
37
38
|
start_time,
|
|
38
39
|
error="Execution cancelled before model call",
|
|
39
|
-
status=
|
|
40
|
+
status=ExecutionStatus.CANCELLED,
|
|
40
41
|
)
|
|
41
42
|
|
|
42
43
|
messages = []
|
|
@@ -70,7 +71,7 @@ class ModelEvalTarget(BaseEvalTarget):
|
|
|
70
71
|
start_time: float,
|
|
71
72
|
*,
|
|
72
73
|
error: str,
|
|
73
|
-
status:
|
|
74
|
+
status: ExecutionStatus = ExecutionStatus.FAILED,
|
|
74
75
|
) -> EvalTrajectory:
|
|
75
76
|
elapsed_ms = int((time.perf_counter() - start_time) * 1000)
|
|
76
77
|
return EvalTrajectory(
|
|
@@ -9,7 +9,7 @@ from collections.abc import AsyncIterator
|
|
|
9
9
|
from typing import Any
|
|
10
10
|
from weakref import WeakKeyDictionary
|
|
11
11
|
|
|
12
|
-
from agentbyte.execution_trace import TraceCollector
|
|
12
|
+
from agentbyte.execution_trace import ExecutionStatus, TraceCollector
|
|
13
13
|
from agentbyte.messages import Usage
|
|
14
14
|
from agentbyte.eval.types import EvalTask, EvalTrajectory
|
|
15
15
|
|
|
@@ -34,18 +34,19 @@ def build_trajectory(
|
|
|
34
34
|
started: float,
|
|
35
35
|
*,
|
|
36
36
|
messages: list,
|
|
37
|
-
status: str,
|
|
37
|
+
status: ExecutionStatus | str,
|
|
38
38
|
error: str | None = None,
|
|
39
39
|
usage: Usage | None = None,
|
|
40
40
|
**metadata: Any,
|
|
41
41
|
) -> EvalTrajectory:
|
|
42
|
+
status = ExecutionStatus(status)
|
|
42
43
|
elapsed = int((time.perf_counter() - started) * 1000)
|
|
43
44
|
total = usage if usage is not None else collector.trace.aggregate_usage()
|
|
44
45
|
total = total.model_copy(update={"duration_ms": elapsed})
|
|
45
46
|
return EvalTrajectory(
|
|
46
47
|
task=task,
|
|
47
48
|
messages=messages,
|
|
48
|
-
success=status ==
|
|
49
|
+
success=status == ExecutionStatus.COMPLETED,
|
|
49
50
|
error=error,
|
|
50
51
|
usage=total,
|
|
51
52
|
trace=collector.trace,
|
|
@@ -4,7 +4,7 @@ from __future__ import annotations
|
|
|
4
4
|
|
|
5
5
|
import math
|
|
6
6
|
from enum import StrEnum
|
|
7
|
-
from typing import Any
|
|
7
|
+
from typing import Any
|
|
8
8
|
|
|
9
9
|
from pydantic import (
|
|
10
10
|
BaseModel,
|
|
@@ -130,7 +130,20 @@ class EvalTrajectory(BaseModel):
|
|
|
130
130
|
return value
|
|
131
131
|
|
|
132
132
|
|
|
133
|
-
ScoringStatus
|
|
133
|
+
class ScoringStatus(StrEnum):
|
|
134
|
+
"""Whether a score (or comparison) is valid measured evidence."""
|
|
135
|
+
|
|
136
|
+
SCORED = "scored"
|
|
137
|
+
FAILED = "failed"
|
|
138
|
+
CANCELLED = "cancelled"
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
class PairwiseWinner(StrEnum):
|
|
142
|
+
"""Which trajectory a pairwise comparison preferred."""
|
|
143
|
+
|
|
144
|
+
A = "a"
|
|
145
|
+
B = "b"
|
|
146
|
+
TIE = "tie"
|
|
134
147
|
|
|
135
148
|
|
|
136
149
|
# Markers written by pre-0055 judges on placeholder scores. Such records are
|
|
@@ -158,7 +171,7 @@ class EvalScore(BaseModel):
|
|
|
158
171
|
description="Overall score on a 0-10 scale; None when not scored",
|
|
159
172
|
)
|
|
160
173
|
scoring_status: ScoringStatus = Field(
|
|
161
|
-
default=
|
|
174
|
+
default=ScoringStatus.SCORED,
|
|
162
175
|
description="Whether this outcome is a valid measurement",
|
|
163
176
|
)
|
|
164
177
|
failure_reason: str | None = Field(
|
|
@@ -251,14 +264,14 @@ class PairwiseResult(BaseModel):
|
|
|
251
264
|
|
|
252
265
|
task: EvalTask = Field(..., description="Task both trajectories were evaluated on")
|
|
253
266
|
comparison_status: ScoringStatus = Field(
|
|
254
|
-
default=
|
|
267
|
+
default=ScoringStatus.SCORED,
|
|
255
268
|
description="Whether this comparison is a valid measured preference",
|
|
256
269
|
)
|
|
257
270
|
failure_reason: str | None = Field(
|
|
258
271
|
default=None,
|
|
259
272
|
description="Safe reason code for failed or cancelled comparisons",
|
|
260
273
|
)
|
|
261
|
-
winner:
|
|
274
|
+
winner: PairwiseWinner | None = Field(
|
|
262
275
|
default=None,
|
|
263
276
|
description="Which trajectory was better, or tie; None when not compared",
|
|
264
277
|
)
|
|
@@ -18,7 +18,7 @@ from agentbyte.cancellation_token import CancellationToken
|
|
|
18
18
|
from agentbyte.eval.base import BaseEvalTarget
|
|
19
19
|
from agentbyte.eval.judges import ContainsJudge
|
|
20
20
|
from agentbyte.eval.types import EvalTask, EvalTrajectory
|
|
21
|
-
from agentbyte.execution_trace.models import ExecutionSpan, ExecutionTrace
|
|
21
|
+
from agentbyte.execution_trace.models import ExecutionSpan, ExecutionStatus, ExecutionTrace
|
|
22
22
|
from agentbyte.messages import AssistantMessage, UserMessage
|
|
23
23
|
|
|
24
24
|
from .suite import EvalSuite, EvalSuiteRegistry
|
|
@@ -40,11 +40,11 @@ class ArithmeticTarget(BaseEvalTarget):
|
|
|
40
40
|
span = ExecutionSpan(kind="agent", name=self.name, input=task.input)
|
|
41
41
|
match = _QUESTION.search(task.input)
|
|
42
42
|
if match is None:
|
|
43
|
-
answer, status, error = None,
|
|
43
|
+
answer, status, error = None, ExecutionStatus.FAILED, "unsupported_question"
|
|
44
44
|
else:
|
|
45
45
|
left, symbol, right = match.groups()
|
|
46
46
|
answer = str(_OPERATORS[symbol](int(left), int(right)))
|
|
47
|
-
status, error =
|
|
47
|
+
status, error = ExecutionStatus.COMPLETED, None
|
|
48
48
|
span = span.model_copy(update={"status": status, "output": answer})
|
|
49
49
|
messages = [UserMessage(content=task.input, source="user")]
|
|
50
50
|
if answer is not None:
|
|
@@ -4,22 +4,33 @@ from __future__ import annotations
|
|
|
4
4
|
|
|
5
5
|
import math
|
|
6
6
|
from datetime import datetime
|
|
7
|
-
from
|
|
7
|
+
from enum import StrEnum
|
|
8
8
|
|
|
9
9
|
from pydantic import BaseModel, ConfigDict
|
|
10
10
|
|
|
11
|
-
from agentbyte.eval.history import
|
|
11
|
+
from agentbyte.eval.history import (
|
|
12
|
+
CaptureMode,
|
|
13
|
+
EvalItemRecord,
|
|
14
|
+
EvalRunRecord,
|
|
15
|
+
EvidenceStatus,
|
|
16
|
+
ItemState,
|
|
17
|
+
RunStatus,
|
|
18
|
+
)
|
|
19
|
+
from agentbyte.eval.types import ScoringStatus
|
|
20
|
+
from agentbyte.execution_trace.models import ExecutionStatus
|
|
12
21
|
from agentbyte.messages import Usage
|
|
13
22
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
"
|
|
17
|
-
|
|
18
|
-
"
|
|
19
|
-
"
|
|
20
|
-
"
|
|
21
|
-
"
|
|
22
|
-
|
|
23
|
+
|
|
24
|
+
class ItemOutcome(StrEnum):
|
|
25
|
+
"""Why a planned suite item passed or did not."""
|
|
26
|
+
|
|
27
|
+
PASSED = "passed"
|
|
28
|
+
BELOW_THRESHOLD = "below_threshold"
|
|
29
|
+
SCORING_FAILED = "scoring_failed"
|
|
30
|
+
EXECUTION_FAILED = "execution_failed"
|
|
31
|
+
CANCELLED = "cancelled"
|
|
32
|
+
NOT_STARTED = "not_started"
|
|
33
|
+
INCOMPLETE = "incomplete"
|
|
23
34
|
|
|
24
35
|
|
|
25
36
|
class SuiteItemVerdict(BaseModel):
|
|
@@ -29,14 +40,14 @@ class SuiteItemVerdict(BaseModel):
|
|
|
29
40
|
|
|
30
41
|
item_index: int
|
|
31
42
|
task_name: str
|
|
32
|
-
state:
|
|
43
|
+
state: ItemState
|
|
33
44
|
outcome: ItemOutcome
|
|
34
45
|
passed: bool
|
|
35
46
|
overall: float | None = None
|
|
36
|
-
scoring_status:
|
|
47
|
+
scoring_status: ScoringStatus | None = None
|
|
37
48
|
failure_reason: str | None = None
|
|
38
|
-
execution_status:
|
|
39
|
-
evidence_status:
|
|
49
|
+
execution_status: ExecutionStatus | None = None
|
|
50
|
+
evidence_status: EvidenceStatus = EvidenceStatus.NOT_CAPTURED
|
|
40
51
|
|
|
41
52
|
|
|
42
53
|
class SuiteRunSummary(BaseModel):
|
|
@@ -116,7 +127,7 @@ def summarize(
|
|
|
116
127
|
) -> SuiteRunSummary:
|
|
117
128
|
"""Build the run verdict: it passes only when the run completed and every planned item passed."""
|
|
118
129
|
verdicts = [item_verdict(item, min_score) for item in sorted(items, key=lambda i: i.item_index)]
|
|
119
|
-
counts = dict.fromkeys(
|
|
130
|
+
counts = dict.fromkeys(ItemOutcome, 0)
|
|
120
131
|
for verdict in verdicts:
|
|
121
132
|
counts[verdict.outcome] += 1
|
|
122
133
|
planned = run.planned_count
|