agentbyte 0.52.0__tar.gz → 0.53.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.52.0 → agentbyte-0.53.0}/CHANGELOG.md +40 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/PKG-INFO +4 -2
- {agentbyte-0.52.0 → agentbyte-0.53.0}/README.md +3 -1
- agentbyte-0.53.0/src/agentbyte/__about__.py +2 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/agents/__init__.py +0 -4
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/agents/base.py +32 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/agents/types.py +0 -12
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/llm/__init__.py +4 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/llm/anthropic/_conversion.py +6 -5
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/llm/anthropic/chat.py +6 -2
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/llm/azure/chat.py +17 -6
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/llm/azure/embedding.py +11 -1
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/llm/base.py +38 -3
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/llm/bedrock/anthropic_chat.py +6 -2
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/llm/bedrock/cohere_embedding.py +6 -4
- agentbyte-0.52.0/src/agentbyte/agents/embedding_agent.py → agentbyte-0.53.0/src/agentbyte/llm/embedding_batcher.py +18 -47
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/llm/embeddings_base.py +40 -2
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/llm/openai/chat.py +11 -6
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/llm/openai/embedding.py +5 -1
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/llm/types.py +14 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/middleware/__init__.py +2 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/middleware/base.py +16 -3
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/middleware/otel.py +2 -2
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/presets/streaming.py +1 -1
- agentbyte-0.53.0/tests/agents/test_agent_client_middleware_overlap.py +83 -0
- agentbyte-0.53.0/tests/llm/test_client_middleware.py +185 -0
- agentbyte-0.52.0/tests/agents/test_embedding_agent.py → agentbyte-0.53.0/tests/llm/test_embedding_batcher.py +26 -90
- agentbyte-0.52.0/src/agentbyte/__about__.py +0 -2
- {agentbyte-0.52.0 → agentbyte-0.53.0}/.gitignore +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/LICENSE +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/pyproject.toml +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/__init__.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/_optional.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/a2a/__init__.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/a2a/app.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/a2a/distributed_context.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/a2a/executor.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/a2a/tool.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/agents/agent.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/agents/agent_as_tool.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/cancellation_token.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/catalog.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/cli/__init__.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/cli/__main__.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/cli/eval_commands.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/cli/history_args.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/cli/loading.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/cli/main.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/cli/optim_commands.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/cli/report_output.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/cli/serve_commands.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/compaction/__init__.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/compaction/counters.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/compaction/errors.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/compaction/grouping.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/compaction/strategies.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/component.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/context.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/context_providers/__init__.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/context_providers/base.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/context_providers/skill_tools.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/context_providers/skills.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/dataset/__init__.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/dataset/_aiosqlite.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/dataset/base.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/dataset/config.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/dataset/importer.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/dataset/json.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/dataset/loader.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/dataset/publish.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/dataset/publish_config.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/dataset/publishers.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/dataset/s3.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/dataset/sources.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/dataset/sqlite.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/dataset/sqlite_db.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/dataset/write_config.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/dataset/writers.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/entity.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/eval/__init__.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/eval/base.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/eval/checks/__init__.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/eval/checks/decorator.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/eval/checks/keyword.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/eval/checks/local.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/eval/checks/process.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/eval/checks/tool.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/eval/checks/types.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/eval/comparison.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/eval/eval_dataset.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/eval/history/__init__.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/eval/history/_writer_lock.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/eval/history/config.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/eval/history/conformance.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/eval/history/errors.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/eval/history/models.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/eval/history/recorder.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/eval/history/sql.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/eval/history/sqlite.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/eval/history/store.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/eval/history/transitions.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/eval/judges/__init__.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/eval/judges/base.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/eval/judges/composite.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/eval/judges/llm.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/eval/judges/pairwise.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/eval/judges/reference.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/eval/judges/trajectory.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/eval/judges/validation.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/eval/pairwise.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/eval/report.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/eval/runner.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/eval/splitting.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/eval/targets/__init__.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/eval/targets/agent.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/eval/targets/model.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/eval/targets/multi_turn.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/eval/targets/orchestrator.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/eval/targets/runtime.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/eval/targets/workflow.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/eval/types.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/eval/workbench/__init__.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/eval/workbench/benchmark.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/eval/workbench/compare.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/eval/workbench/coordinator.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/eval/workbench/jobs.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/eval/workbench/smoke.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/eval/workbench/smoke_tasks.json +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/eval/workbench/suite.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/eval/workbench/verdict.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/execution_trace/__init__.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/execution_trace/collector.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/execution_trace/models.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/llm/_retry_observability.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/llm/anthropic/__init__.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/llm/anthropic/settings.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/llm/auth.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/llm/azure/__init__.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/llm/azure/auth.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/llm/azure/settings.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/llm/azure_openai.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/llm/azure_openai_embedding.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/llm/bedrock/__init__.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/llm/bedrock/_client.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/llm/bedrock/settings.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/llm/openai/__init__.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/llm/openai/settings.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/llm/openai_embedding.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/llm/pricing.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/llm/retry_policy.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/llm/settings.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/logger.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/memory/__init__.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/memory/base.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/messages.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/middleware/retry.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/middleware/sql_usage.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/middleware/usage_logger.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/notebook.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/optim/__init__.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/optim/base.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/optim/binding.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/optim/config.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/optim/gepa.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/optim/job.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/optim/mipro.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/optim/pareto.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/optim/reflective.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/optim/report.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/optim/spec.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/optim/trace.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/orchestration/__init__.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/orchestration/ai.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/orchestration/base.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/orchestration/handoff.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/orchestration/plan.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/orchestration/policies.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/orchestration/round_robin.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/presets/__init__.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/presets/agents.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/presets/benchmark.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/presets/capitals.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/presets/clients.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/presets/instruction_registry.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/presets/instructions/orchestrator.yaml +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/presets/instructions/query_rewriter.yaml +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/presets/instructions/researcher.yaml +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/presets/instructions/reviewer.yaml +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/presets/instructions/writer.yaml +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/presets/orchestration.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/presets/skills/capitals-format/SKILL.md +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/presets/skills/contracts-analyst/SKILL.md +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/presets/skills/hr-analyst/SKILL.md +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/presets/skills/hr-analyst/resources/departments.md +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/presets/skills/hr-analyst/resources/employees.md +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/presets/skills/hr-analyst/resources/payroll.md +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/presets/workflow.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/session_store.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/skills/__init__.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/skills/base.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/skills/resources.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/skills/scripts.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/skills/sources.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/skills/validation.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/termination/__init__.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/termination/base.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/termination/cancellation.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/termination/composite.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/termination/consecutive_agent.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/termination/external.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/termination/function_call.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/termination/handoff.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/termination/max_message.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/termination/predicate.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/termination/source.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/termination/text_mention.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/termination/timeout.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/termination/token_usage.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/tools/__init__.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/tools/base.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/tools/coding_tools.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/tools/core_tools.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/tools/decorator.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/tools/mcp/__init__.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/tools/mcp/client.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/tools/mcp/config.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/tools/mcp/errors.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/tools/mcp/tool.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/tools/mcp/transports.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/tools/memory_tool.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/tools/research_tools.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/types.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/webui/__init__.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/webui/discovery.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/webui/eval_routes.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/webui/execution.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/webui/mcp/__init__.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/webui/mcp/servers/__init__.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/webui/mcp/servers/apps_server.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/webui/mcp/servers/auth_server.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/webui/mcp/servers/basic_server.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/webui/mcp/servers/mrtr_server.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/webui/mcp/servers/notify_server.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/webui/mcp_playground.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/webui/mcp_routes.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/webui/models.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/webui/registry.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/webui/server.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/webui/session_store.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/webui/sessions.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/webui/ui/assets/index-BreogZut.js +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/webui/ui/assets/index-ptxe7GHs.css +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/webui/ui/index.html +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/webui/ui/vite.svg +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/workflow/__init__.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/workflow/agent.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/workflow/core/__init__.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/workflow/core/_structure_hash.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/workflow/core/checkpoint.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/workflow/core/models.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/workflow/core/runner.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/workflow/core/workflow.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/workflow/defaults.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/workflow/errors.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/workflow/loader.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/workflow/schema.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/workflow/schema_utils.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/workflow/sqlite_checkpoint.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/workflow/steps/__init__.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/workflow/steps/agent.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/workflow/steps/echo.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/workflow/steps/function.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/workflow/steps/http.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/workflow/steps/step.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/workflow/steps/subworkflow.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/workflow/steps/transform.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/src/agentbyte/workflow/visualizer.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/a2a/a2a_helpers.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/a2a/test_a2a_adapters.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/a2a/test_distributed_context.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/agents/test_agent_as_tool.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/agents/test_agent_basic.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/agents/test_agent_context_providers.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/agents/test_agent_error_response.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/agents/test_agent_event_types.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/agents/test_agent_memory_integration.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/agents/test_agent_middleware_integration.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/agents/test_agent_response_accessors.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/agents/test_agent_retry_middleware.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/agents/test_agent_stop_at_tools.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/agents/test_agent_stream_events.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/agents/test_tool_approval.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/agents/test_tool_batch_resolution.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/agents/test_tool_metadata.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/cli/test_eval_benchmark_commands.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/cli/test_loading.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/cli/test_registry_check.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/cli/test_report_output.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/cli/test_serve_command.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/compaction/test_compaction.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/conftest.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/context_providers/__init__.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/context_providers/test_skill_tools.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/context_providers/test_skills_provider.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/dataset/fake_s3.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/dataset/test_dataset_exit.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/dataset/test_loader.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/dataset/test_multi_table.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/dataset/test_publish.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/dataset/test_sqlite_db.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/eval/test_dimension_scores.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/eval/test_eval_benchmarks.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/eval/test_eval_dataset.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/eval/test_eval_history.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/eval/test_eval_history_backends.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/eval/test_eval_jobs.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/eval/test_eval_workbench.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/eval/test_execution_trajectories.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/eval/test_history_config.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/eval/test_multi_turn.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/eval/test_pairwise.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/eval/test_phase1_runner_and_targets.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/eval/test_phase2_checks_and_reports.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/eval/test_run_comparison.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/eval/test_score_integrity.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/eval/test_splitting.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/eval/test_types_and_judges.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/llm/test_anthropic_bedrock_client.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/llm/test_anthropic_client.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/llm/test_azure_client.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/llm/test_azure_embedding_client.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/llm/test_cohere_bedrock_embedding_client.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/llm/test_llm_types.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/llm/test_openai_client.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/llm/test_openai_embedding_client.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/llm/test_pricing.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/llm/test_retry_observability.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/llm/test_retry_policy_api.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/llm/test_retryable_error_substrings.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/memory/test_memory.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/middleware/test_context_compaction.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/middleware/test_deduplicate_tool_result.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/middleware/test_middleware_chain.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/middleware/test_otel.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/middleware/test_retry_middleware.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/middleware/test_sql_usage.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/middleware/test_usage_logger.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/optim/__init__.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/optim/fakes.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/optim/test_base.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/optim/test_base_integration.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/optim/test_binding.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/optim/test_config.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/optim/test_description_tunable.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/optim/test_gepa.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/optim/test_mipro.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/optim/test_orchestrator_optim.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/optim/test_pareto.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/optim/test_reflective.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/optim/test_report.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/optim/test_score_integrity.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/optim/test_spec.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/optim/test_trace.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/orchestration/test_ai_orchestrator.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/orchestration/test_base_orchestrator.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/orchestration/test_handoff_orchestrator.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/orchestration/test_history_tool_call_pairing.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/orchestration/test_orchestration_usage_breakdown.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/orchestration/test_orchestrator_agent_contract.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/orchestration/test_orchestrator_finalization.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/orchestration/test_orchestrator_member_events.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/orchestration/test_orchestrator_otel.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/orchestration/test_orchestrator_synthesis.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/orchestration/test_plan_orchestrator.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/orchestration/test_round_robin.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/presets/test_agents.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/presets/test_benchmark.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/presets/test_capitals.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/presets/test_clients.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/presets/test_instruction_registry.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/presets/test_orchestration.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/presets/test_streaming.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/presets/test_workflow.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/skills/__init__.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/skills/test_base.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/skills/test_resources.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/skills/test_scripts.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/skills/test_sources.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/termination/test_base.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/termination/test_cancellation.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/termination/test_composite.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/termination/test_consecutive_agent.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/termination/test_external.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/termination/test_function_call.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/termination/test_handoff.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/termination/test_max_message.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/termination/test_predicate.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/termination/test_source.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/termination/test_text_mention.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/termination/test_timeout.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/termination/test_token_usage.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/test_cancellation_token.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/test_context.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/test_logger.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/test_messages.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/test_option_enums.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/test_optional_extras.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/test_package_api.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/test_session_store.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/test_types.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/tools/fixtures/mcp_stdio_server.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/tools/test_coding_tools.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/tools/test_mcp_tools.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/tools/test_memory_tool.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/tools/test_research_tools.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/tools/test_tools.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/webui/__init__.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/webui/helpers.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/webui/test_eval_routes.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/webui/test_execution.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/webui/test_mcp_routes.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/webui/test_package_api.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/webui/test_registry.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/webui/test_server.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/webui/test_sessions.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/webui/test_workflow_streaming.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/workflow/recovery_worker.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/workflow/test_agent_step_imports.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/workflow/test_checkpoint.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/workflow/test_subworkflow_step.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/workflow/test_workflow_agent.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/workflow/test_workflow_class.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/workflow/test_workflow_models.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/workflow/test_workflow_reliability.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/workflow/test_workflow_runner.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/workflow/test_workflow_schema.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/workflow/test_workflow_steps.py +0 -0
- {agentbyte-0.52.0 → agentbyte-0.53.0}/tests/workflow/test_workflow_visualizer.py +0 -0
|
@@ -6,6 +6,46 @@ The format follows Keep a Changelog principles and semantic versioning.
|
|
|
6
6
|
|
|
7
7
|
## [Unreleased]
|
|
8
8
|
|
|
9
|
+
## [0.53.0] - 2026-10-10
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
|
|
13
|
+
- `ClientMiddleware`: a marker subclass of `BaseMiddleware` for middleware safe to attach
|
|
14
|
+
directly to a client — no `AgentContext` or conversational state required. `OTelMiddleware`,
|
|
15
|
+
`LoggingMiddleware`, `MetricsMiddleware`, and `RateLimitMiddleware` now qualify. Every
|
|
16
|
+
embedding client (`OpenAIEmbeddingClient`, `AzureOpenAIEmbeddingClient`,
|
|
17
|
+
`CohereBedrockEmbeddingClient`) and every chat client (`OpenAIChatCompletionClient`,
|
|
18
|
+
`AzureOpenAIChatCompletionClient`, `AnthropicChatCompletionClient`,
|
|
19
|
+
`AnthropicBedrockChatCompletionClient`) accepts a `middlewares=[...]` constructor argument,
|
|
20
|
+
getting OTel tracing/logging on direct calls with no `Agent` wrapper required. Passing a
|
|
21
|
+
plain `BaseMiddleware` that needs agent state (e.g. `ApprovalMiddleware`,
|
|
22
|
+
`ContextCompactionMiddleware`) raises `TypeError` immediately. Chat clients wrap only the
|
|
23
|
+
non-streaming `create()`; `create_stream()` remains unwrapped (documented gap for a future
|
|
24
|
+
spec — see `docs/specs/0075-client-level-middleware/`).
|
|
25
|
+
- `agentbyte.llm.EmbeddingBatcher`: batching/concurrency orchestration over any embedding
|
|
26
|
+
client (sequential or semaphore-bounded concurrent batches, `run()`/`run_stream()` with
|
|
27
|
+
`EmbeddingBatchProgressEvent` progress).
|
|
28
|
+
- `BaseEmbeddingClient.middleware_types` / `BaseChatCompletionClient.middleware_types`: a
|
|
29
|
+
public, read-only property exposing the concrete middleware types attached to a client.
|
|
30
|
+
`Agent` uses it to warn (`warnings.warn`, not an error) when it and its `model_client` both
|
|
31
|
+
configure the same middleware class — that call would otherwise run through two nested
|
|
32
|
+
`MiddlewareChain`s, double-emitting spans/logs/metrics for one real API call. See
|
|
33
|
+
`docs/design-guide/01-agent_topics/topic_middleware.md`'s "Client-Level Middleware" caveat.
|
|
34
|
+
|
|
35
|
+
### Changed (breaking)
|
|
36
|
+
|
|
37
|
+
- Removed `agentbyte.agents.EmbeddingAgent`. It bundled two unrelated concerns — batching and
|
|
38
|
+
middleware/OTel access — under a misleading "agent" name (no reasoning, no tool calls, no
|
|
39
|
+
conversational state). Middleware now lives on the embedding client itself (see
|
|
40
|
+
`ClientMiddleware` above); batching moved to `agentbyte.llm.EmbeddingBatcher`, which drops the
|
|
41
|
+
`middlewares` and `context: AgentContext` parameters entirely since the client it wraps owns
|
|
42
|
+
that chain. No compatibility shim. Migration guide:
|
|
43
|
+
`docs/design-guide/01-agent_topics/topic_embedding_batcher.md`.
|
|
44
|
+
- `EmbeddingBatchProgressEvent` moved from `agentbyte.agents.types` to `agentbyte.llm.types` (now
|
|
45
|
+
a standalone `pydantic.BaseModel`, not an `agents.types.BaseEvent` subclass) — it was never an
|
|
46
|
+
agent event, and keeping it in `agents.types` would have made `agentbyte.llm` depend on
|
|
47
|
+
`agentbyte.agents`, inverting the package layering.
|
|
48
|
+
|
|
9
49
|
## [0.52.0] - 2026-10-10
|
|
10
50
|
|
|
11
51
|
### Added
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: agentbyte
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.53.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
|
|
@@ -90,7 +90,7 @@ Description-Content-Type: text/markdown
|
|
|
90
90
|
|
|
91
91
|
Agentbyte is an observability-first agentic AI framework for building and studying multiagent systems with a learning-first, implementation-oriented workflow.
|
|
92
92
|
|
|
93
|
-
Current release: **0.
|
|
93
|
+
Current release: **0.53.0**
|
|
94
94
|
|
|
95
95
|
## Building an Agent
|
|
96
96
|
|
|
@@ -258,6 +258,8 @@ Other orchestrators follow the same `run()`/`run_stream()` shape: `AIOrchestrato
|
|
|
258
258
|
|
|
259
259
|
## Middleware
|
|
260
260
|
|
|
261
|
+
Chat and embedding clients also accept `middlewares=[...]` directly for client-safe middleware.
|
|
262
|
+
|
|
261
263
|
Built in: `LoggingMiddleware`, `PIIRedactionMiddleware`, `GuardrailMiddleware`, `MetricsMiddleware`, `RateLimitMiddleware`, `ApprovalMiddleware`, `ContextCompactionMiddleware`, `RetryMiddleware`, `OTelMiddleware`. Attach any combination to the same support agent via `middlewares=[...]`:
|
|
262
264
|
|
|
263
265
|
```python
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Agentbyte is an observability-first agentic AI framework for building and studying multiagent systems with a learning-first, implementation-oriented workflow.
|
|
4
4
|
|
|
5
|
-
Current release: **0.
|
|
5
|
+
Current release: **0.53.0**
|
|
6
6
|
|
|
7
7
|
## Building an Agent
|
|
8
8
|
|
|
@@ -170,6 +170,8 @@ Other orchestrators follow the same `run()`/`run_stream()` shape: `AIOrchestrato
|
|
|
170
170
|
|
|
171
171
|
## Middleware
|
|
172
172
|
|
|
173
|
+
Chat and embedding clients also accept `middlewares=[...]` directly for client-safe middleware.
|
|
174
|
+
|
|
173
175
|
Built in: `LoggingMiddleware`, `PIIRedactionMiddleware`, `GuardrailMiddleware`, `MetricsMiddleware`, `RateLimitMiddleware`, `ApprovalMiddleware`, `ContextCompactionMiddleware`, `RetryMiddleware`, `OTelMiddleware`. Attach any combination to the same support agent via `middlewares=[...]`:
|
|
174
176
|
|
|
175
177
|
```python
|
|
@@ -11,13 +11,11 @@ from .base import (
|
|
|
11
11
|
AgentToolError,
|
|
12
12
|
BaseAgent,
|
|
13
13
|
)
|
|
14
|
-
from .embedding_agent import EmbeddingAgent
|
|
15
14
|
from .types import (
|
|
16
15
|
AgentErrorDetail,
|
|
17
16
|
AgentEvent,
|
|
18
17
|
AgentResponse,
|
|
19
18
|
BaseEvent,
|
|
20
|
-
EmbeddingBatchProgressEvent,
|
|
21
19
|
ErrorEvent,
|
|
22
20
|
FatalErrorEvent,
|
|
23
21
|
MemoryRetrievalEvent,
|
|
@@ -37,7 +35,6 @@ __all__ = [
|
|
|
37
35
|
"BaseAgent",
|
|
38
36
|
"Agent",
|
|
39
37
|
"AgentAsTool",
|
|
40
|
-
"EmbeddingAgent",
|
|
41
38
|
"AgentError",
|
|
42
39
|
"AgentConfigurationError",
|
|
43
40
|
"AgentExecutionError",
|
|
@@ -57,7 +54,6 @@ __all__ = [
|
|
|
57
54
|
"MemoryRetrievalEvent",
|
|
58
55
|
"ErrorEvent",
|
|
59
56
|
"FatalErrorEvent",
|
|
60
|
-
"EmbeddingBatchProgressEvent",
|
|
61
57
|
"AgentResponse",
|
|
62
58
|
"AgentErrorDetail",
|
|
63
59
|
]
|
|
@@ -3,6 +3,7 @@ Base agent abstraction and shared helper behavior.
|
|
|
3
3
|
"""
|
|
4
4
|
|
|
5
5
|
import json
|
|
6
|
+
import warnings
|
|
6
7
|
from abc import ABC, abstractmethod
|
|
7
8
|
from collections.abc import AsyncGenerator, Callable
|
|
8
9
|
from typing import Any, Dict, List, Optional, Type, Union
|
|
@@ -98,6 +99,37 @@ class BaseAgent(ABC):
|
|
|
98
99
|
self.extra_config = kwargs
|
|
99
100
|
|
|
100
101
|
self._validate_configuration()
|
|
102
|
+
self._warn_on_duplicate_client_middleware()
|
|
103
|
+
|
|
104
|
+
def _warn_on_duplicate_client_middleware(self) -> None:
|
|
105
|
+
"""Warn when this agent and its model_client both configure the same
|
|
106
|
+
middleware type.
|
|
107
|
+
|
|
108
|
+
A client's own ``middlewares`` already wraps its provider call in a
|
|
109
|
+
``MiddlewareChain``; this agent wraps that same call in a second chain.
|
|
110
|
+
Attaching the same middleware class at both layers runs it twice per
|
|
111
|
+
logical call — e.g. two nested OTel spans and the token/duration
|
|
112
|
+
histograms recorded twice for one real API call. This is sometimes
|
|
113
|
+
intentional (e.g. two differently configured rate limiters), so it is
|
|
114
|
+
a warning, not an error — see ``topic_middleware.md``'s "Client-Level
|
|
115
|
+
Middleware" section for the full caveat.
|
|
116
|
+
"""
|
|
117
|
+
client_types = getattr(self.model_client, "middleware_types", None)
|
|
118
|
+
if not client_types:
|
|
119
|
+
return
|
|
120
|
+
agent_types = {type(m) for m in self.middleware_chain.middlewares}
|
|
121
|
+
overlap = agent_types & client_types
|
|
122
|
+
if not overlap:
|
|
123
|
+
return
|
|
124
|
+
names = ", ".join(sorted(t.__name__ for t in overlap))
|
|
125
|
+
warnings.warn(
|
|
126
|
+
f"Agent '{self.name}' and its model_client "
|
|
127
|
+
f"({type(self.model_client).__name__}) both configure: {names}. "
|
|
128
|
+
"Each model call will run through both middleware chains, "
|
|
129
|
+
"double-emitting spans/logs/metrics for one real API call. "
|
|
130
|
+
"Configure each middleware at one layer only.",
|
|
131
|
+
stacklevel=3,
|
|
132
|
+
)
|
|
101
133
|
|
|
102
134
|
def _validate_configuration(self) -> None:
|
|
103
135
|
"""Validate required configuration fields."""
|
|
@@ -164,16 +164,6 @@ class FatalErrorEvent(BaseEvent):
|
|
|
164
164
|
)
|
|
165
165
|
|
|
166
166
|
|
|
167
|
-
class EmbeddingBatchProgressEvent(BaseEvent):
|
|
168
|
-
"""Event emitted after each batch completes during an EmbeddingAgent run."""
|
|
169
|
-
|
|
170
|
-
event_type: Literal["embedding_batch_progress"] = "embedding_batch_progress"
|
|
171
|
-
batch_index: int = Field(..., description="Zero-based index of the completed batch")
|
|
172
|
-
total_batches: int = Field(..., description="Total number of batches for this run")
|
|
173
|
-
completed_texts: int = Field(..., description="Cumulative number of texts embedded so far")
|
|
174
|
-
total_texts: int = Field(..., description="Total number of texts in this run")
|
|
175
|
-
|
|
176
|
-
|
|
177
167
|
class AgentErrorDetail(BaseModel):
|
|
178
168
|
"""Structured detail for a run that ended with ``finish_reason="error"``.
|
|
179
169
|
|
|
@@ -350,7 +340,6 @@ AgentEvent = Union[
|
|
|
350
340
|
MemoryRetrievalEvent,
|
|
351
341
|
ErrorEvent,
|
|
352
342
|
FatalErrorEvent,
|
|
353
|
-
EmbeddingBatchProgressEvent,
|
|
354
343
|
]
|
|
355
344
|
|
|
356
345
|
|
|
@@ -370,7 +359,6 @@ __all__ = [
|
|
|
370
359
|
"ModelStreamChunkEvent",
|
|
371
360
|
"ErrorEvent",
|
|
372
361
|
"FatalErrorEvent",
|
|
373
|
-
"EmbeddingBatchProgressEvent",
|
|
374
362
|
"AgentResponse",
|
|
375
363
|
"AgentErrorDetail",
|
|
376
364
|
]
|
|
@@ -33,6 +33,7 @@ from .base import (
|
|
|
33
33
|
)
|
|
34
34
|
from .retry_policy import RetryPolicy
|
|
35
35
|
from .embeddings_base import BaseEmbeddingClient, BaseEmbeddingClientConfig
|
|
36
|
+
from .embedding_batcher import EmbeddingBatcher
|
|
36
37
|
# Import message types and usage from root module (picoagents-aligned)
|
|
37
38
|
from agentbyte.messages import (
|
|
38
39
|
BaseMessage,
|
|
@@ -49,6 +50,7 @@ from agentbyte.messages import (
|
|
|
49
50
|
from .types import (
|
|
50
51
|
ChatCompletionChunk,
|
|
51
52
|
ChatCompletionResult,
|
|
53
|
+
EmbeddingBatchProgressEvent,
|
|
52
54
|
EmbeddingResult,
|
|
53
55
|
ModelClientError,
|
|
54
56
|
ModelPricing,
|
|
@@ -60,6 +62,8 @@ __all__ = [
|
|
|
60
62
|
"BaseChatCompletionClientConfig",
|
|
61
63
|
"BaseEmbeddingClient",
|
|
62
64
|
"BaseEmbeddingClientConfig",
|
|
65
|
+
"EmbeddingBatcher",
|
|
66
|
+
"EmbeddingBatchProgressEvent",
|
|
63
67
|
# Provider implementations
|
|
64
68
|
"OpenAIChatCompletionClient",
|
|
65
69
|
"OpenAIChatCompletionClientConfig",
|
|
@@ -47,14 +47,15 @@ DEFAULT_MAX_TOKENS = 4096
|
|
|
47
47
|
class AnthropicConversionMixin:
|
|
48
48
|
"""Messages API request/response conversion shared by both Claude transports."""
|
|
49
49
|
|
|
50
|
-
async def
|
|
50
|
+
async def _execute_chat_operation(
|
|
51
51
|
self,
|
|
52
|
-
|
|
53
|
-
tools: Optional[List[Dict[str, Any]]] = None,
|
|
54
|
-
output_format: Optional[type] = None,
|
|
55
|
-
**kwargs: Any,
|
|
52
|
+
payload: Dict[str, Any],
|
|
56
53
|
) -> ChatCompletionResult:
|
|
57
54
|
"""Make a single Anthropic Messages API call."""
|
|
55
|
+
messages = payload["messages"]
|
|
56
|
+
tools = payload["tools"]
|
|
57
|
+
output_format = payload["output_format"]
|
|
58
|
+
kwargs = payload["kwargs"]
|
|
58
59
|
retry_history: List = []
|
|
59
60
|
try:
|
|
60
61
|
result = await self._retry_with_backoff(
|
|
@@ -2,11 +2,12 @@
|
|
|
2
2
|
Anthropic Claude chat completion client implementation (direct API).
|
|
3
3
|
"""
|
|
4
4
|
|
|
5
|
-
from typing import Any, Dict, Optional
|
|
5
|
+
from typing import Any, Dict, List, Optional
|
|
6
6
|
|
|
7
7
|
from anthropic import AsyncAnthropic
|
|
8
8
|
|
|
9
9
|
from agentbyte.component import Component
|
|
10
|
+
from agentbyte.middleware.base import ClientMiddleware
|
|
10
11
|
|
|
11
12
|
from ..base import BaseChatCompletionClient, BaseChatCompletionClientConfig
|
|
12
13
|
from ..pricing import PricingRegistry
|
|
@@ -44,8 +45,9 @@ class AnthropicChatCompletionClient(
|
|
|
44
45
|
initial_retry_delay: float = 1.0,
|
|
45
46
|
max_retry_delay: float = 60.0,
|
|
46
47
|
retry_policy: Optional[RetryPolicy] = None,
|
|
48
|
+
middlewares: Optional[List[ClientMiddleware]] = None,
|
|
47
49
|
):
|
|
48
|
-
super().__init__(model, client, config)
|
|
50
|
+
super().__init__(model, client, config, middlewares=middlewares)
|
|
49
51
|
self.model_pricing = model_pricing
|
|
50
52
|
if retry_policy is not None:
|
|
51
53
|
self.retry_policy = retry_policy
|
|
@@ -80,6 +82,7 @@ class AnthropicChatCompletionClient(
|
|
|
80
82
|
initial_retry_delay: float = 1.0,
|
|
81
83
|
max_retry_delay: float = 60.0,
|
|
82
84
|
retry_policy: Optional[RetryPolicy] = None,
|
|
85
|
+
middlewares: Optional[List[ClientMiddleware]] = None,
|
|
83
86
|
) -> "AnthropicChatCompletionClient":
|
|
84
87
|
"""Create a client from an explicit or env-backed API key."""
|
|
85
88
|
from pydantic import ValidationError
|
|
@@ -110,6 +113,7 @@ class AnthropicChatCompletionClient(
|
|
|
110
113
|
initial_retry_delay=initial_retry_delay,
|
|
111
114
|
max_retry_delay=max_retry_delay,
|
|
112
115
|
retry_policy=retry_policy,
|
|
116
|
+
middlewares=middlewares,
|
|
113
117
|
)
|
|
114
118
|
|
|
115
119
|
def _estimate_cost(
|
|
@@ -14,6 +14,7 @@ from agentbyte._optional import MissingExtraError
|
|
|
14
14
|
from agentbyte.messages import AssistantMessage, Message, ToolCallRequest
|
|
15
15
|
|
|
16
16
|
from agentbyte.component import Component
|
|
17
|
+
from agentbyte.middleware.base import ClientMiddleware
|
|
17
18
|
|
|
18
19
|
from .._retry_observability import build_retry_summary
|
|
19
20
|
from ..base import (
|
|
@@ -70,8 +71,9 @@ class AzureOpenAIChatCompletionClient(
|
|
|
70
71
|
initial_retry_delay: float = 1.0,
|
|
71
72
|
max_retry_delay: float = 60.0,
|
|
72
73
|
retry_policy: Optional[RetryPolicy] = None,
|
|
74
|
+
middlewares: Optional[List[ClientMiddleware]] = None,
|
|
73
75
|
):
|
|
74
|
-
super().__init__(model, client, config)
|
|
76
|
+
super().__init__(model, client, config, middlewares=middlewares)
|
|
75
77
|
self.model_pricing = model_pricing
|
|
76
78
|
self.pricing_model = pricing_model
|
|
77
79
|
if retry_policy is not None:
|
|
@@ -109,6 +111,7 @@ class AzureOpenAIChatCompletionClient(
|
|
|
109
111
|
initial_retry_delay: float = 1.0,
|
|
110
112
|
max_retry_delay: float = 60.0,
|
|
111
113
|
retry_policy: Optional[RetryPolicy] = None,
|
|
114
|
+
middlewares: Optional[List[ClientMiddleware]] = None,
|
|
112
115
|
) -> "AzureOpenAIChatCompletionClient":
|
|
113
116
|
"""Create a client using an Azure OpenAI API key."""
|
|
114
117
|
from pydantic import ValidationError
|
|
@@ -159,6 +162,7 @@ class AzureOpenAIChatCompletionClient(
|
|
|
159
162
|
initial_retry_delay=initial_retry_delay,
|
|
160
163
|
max_retry_delay=max_retry_delay,
|
|
161
164
|
retry_policy=retry_policy,
|
|
165
|
+
middlewares=middlewares,
|
|
162
166
|
)
|
|
163
167
|
|
|
164
168
|
@classmethod
|
|
@@ -175,6 +179,7 @@ class AzureOpenAIChatCompletionClient(
|
|
|
175
179
|
initial_retry_delay: float = 1.0,
|
|
176
180
|
max_retry_delay: float = 60.0,
|
|
177
181
|
retry_policy: Optional[RetryPolicy] = None,
|
|
182
|
+
middlewares: Optional[List[ClientMiddleware]] = None,
|
|
178
183
|
) -> "AzureOpenAIChatCompletionClient":
|
|
179
184
|
"""Create a client using DefaultAzureCredential."""
|
|
180
185
|
try:
|
|
@@ -226,6 +231,7 @@ class AzureOpenAIChatCompletionClient(
|
|
|
226
231
|
initial_retry_delay=initial_retry_delay,
|
|
227
232
|
max_retry_delay=max_retry_delay,
|
|
228
233
|
retry_policy=retry_policy,
|
|
234
|
+
middlewares=middlewares,
|
|
229
235
|
)
|
|
230
236
|
|
|
231
237
|
@classmethod
|
|
@@ -243,6 +249,7 @@ class AzureOpenAIChatCompletionClient(
|
|
|
243
249
|
initial_retry_delay: float = 1.0,
|
|
244
250
|
max_retry_delay: float = 60.0,
|
|
245
251
|
retry_policy: Optional[RetryPolicy] = None,
|
|
252
|
+
middlewares: Optional[List[ClientMiddleware]] = None,
|
|
246
253
|
) -> "AzureOpenAIChatCompletionClient":
|
|
247
254
|
"""Create a client using certificate-based Azure AD service principal auth."""
|
|
248
255
|
from pydantic import ValidationError
|
|
@@ -303,6 +310,7 @@ class AzureOpenAIChatCompletionClient(
|
|
|
303
310
|
initial_retry_delay=initial_retry_delay,
|
|
304
311
|
max_retry_delay=max_retry_delay,
|
|
305
312
|
retry_policy=retry_policy,
|
|
313
|
+
middlewares=middlewares,
|
|
306
314
|
)
|
|
307
315
|
|
|
308
316
|
@classmethod
|
|
@@ -319,6 +327,7 @@ class AzureOpenAIChatCompletionClient(
|
|
|
319
327
|
initial_retry_delay: float = 1.0,
|
|
320
328
|
max_retry_delay: float = 60.0,
|
|
321
329
|
retry_policy: Optional[RetryPolicy] = None,
|
|
330
|
+
middlewares: Optional[List[ClientMiddleware]] = None,
|
|
322
331
|
) -> "AzureOpenAIChatCompletionClient":
|
|
323
332
|
"""Create a client using a pre-fetched Azure AD bearer token."""
|
|
324
333
|
from pydantic import ValidationError
|
|
@@ -362,16 +371,18 @@ class AzureOpenAIChatCompletionClient(
|
|
|
362
371
|
initial_retry_delay=initial_retry_delay,
|
|
363
372
|
max_retry_delay=max_retry_delay,
|
|
364
373
|
retry_policy=retry_policy,
|
|
374
|
+
middlewares=middlewares,
|
|
365
375
|
)
|
|
366
376
|
|
|
367
|
-
async def
|
|
377
|
+
async def _execute_chat_operation(
|
|
368
378
|
self,
|
|
369
|
-
|
|
370
|
-
tools: Optional[List[Dict[str, Any]]] = None,
|
|
371
|
-
output_format: Optional[type] = None,
|
|
372
|
-
**kwargs: Any,
|
|
379
|
+
payload: Dict[str, Any],
|
|
373
380
|
) -> ChatCompletionResult:
|
|
374
381
|
"""Make a single Azure OpenAI API call."""
|
|
382
|
+
messages = payload["messages"]
|
|
383
|
+
tools = payload["tools"]
|
|
384
|
+
output_format = payload["output_format"]
|
|
385
|
+
kwargs = payload["kwargs"]
|
|
375
386
|
retry_history: List = []
|
|
376
387
|
try:
|
|
377
388
|
result = await self._retry_with_backoff(
|
|
@@ -10,6 +10,7 @@ from openai import AsyncAzureOpenAI
|
|
|
10
10
|
|
|
11
11
|
from agentbyte._optional import MissingExtraError
|
|
12
12
|
from agentbyte.component import Component
|
|
13
|
+
from agentbyte.middleware.base import ClientMiddleware
|
|
13
14
|
|
|
14
15
|
from .._retry_observability import build_retry_summary
|
|
15
16
|
from ..base import AuthenticationError, InvalidRequestError, RateLimitError
|
|
@@ -53,8 +54,9 @@ class AzureOpenAIEmbeddingClient(
|
|
|
53
54
|
initial_retry_delay: float = 1.0,
|
|
54
55
|
max_retry_delay: float = 60.0,
|
|
55
56
|
retry_policy: Optional[RetryPolicy] = None,
|
|
57
|
+
middlewares: Optional[List[ClientMiddleware]] = None,
|
|
56
58
|
):
|
|
57
|
-
super().__init__(model, client, config)
|
|
59
|
+
super().__init__(model, client, config, middlewares=middlewares)
|
|
58
60
|
self.model_pricing = model_pricing
|
|
59
61
|
self.pricing_model = pricing_model
|
|
60
62
|
if retry_policy is not None:
|
|
@@ -93,6 +95,7 @@ class AzureOpenAIEmbeddingClient(
|
|
|
93
95
|
initial_retry_delay: float = 1.0,
|
|
94
96
|
max_retry_delay: float = 60.0,
|
|
95
97
|
retry_policy: Optional[RetryPolicy] = None,
|
|
98
|
+
middlewares: Optional[List[ClientMiddleware]] = None,
|
|
96
99
|
) -> "AzureOpenAIEmbeddingClient":
|
|
97
100
|
"""Create client using Azure OpenAI API key authentication."""
|
|
98
101
|
from pydantic import ValidationError
|
|
@@ -143,6 +146,7 @@ class AzureOpenAIEmbeddingClient(
|
|
|
143
146
|
initial_retry_delay=initial_retry_delay,
|
|
144
147
|
max_retry_delay=max_retry_delay,
|
|
145
148
|
retry_policy=retry_policy,
|
|
149
|
+
middlewares=middlewares,
|
|
146
150
|
)
|
|
147
151
|
|
|
148
152
|
@classmethod
|
|
@@ -160,6 +164,7 @@ class AzureOpenAIEmbeddingClient(
|
|
|
160
164
|
initial_retry_delay: float = 1.0,
|
|
161
165
|
max_retry_delay: float = 60.0,
|
|
162
166
|
retry_policy: Optional[RetryPolicy] = None,
|
|
167
|
+
middlewares: Optional[List[ClientMiddleware]] = None,
|
|
163
168
|
) -> "AzureOpenAIEmbeddingClient":
|
|
164
169
|
"""Create client using DefaultAzureCredential token provider."""
|
|
165
170
|
try:
|
|
@@ -211,6 +216,7 @@ class AzureOpenAIEmbeddingClient(
|
|
|
211
216
|
initial_retry_delay=initial_retry_delay,
|
|
212
217
|
max_retry_delay=max_retry_delay,
|
|
213
218
|
retry_policy=retry_policy,
|
|
219
|
+
middlewares=middlewares,
|
|
214
220
|
)
|
|
215
221
|
|
|
216
222
|
@classmethod
|
|
@@ -229,6 +235,7 @@ class AzureOpenAIEmbeddingClient(
|
|
|
229
235
|
initial_retry_delay: float = 1.0,
|
|
230
236
|
max_retry_delay: float = 60.0,
|
|
231
237
|
retry_policy: Optional[RetryPolicy] = None,
|
|
238
|
+
middlewares: Optional[List[ClientMiddleware]] = None,
|
|
232
239
|
) -> "AzureOpenAIEmbeddingClient":
|
|
233
240
|
"""Create client using certificate-based Azure AD authentication."""
|
|
234
241
|
from pydantic import ValidationError
|
|
@@ -289,6 +296,7 @@ class AzureOpenAIEmbeddingClient(
|
|
|
289
296
|
initial_retry_delay=initial_retry_delay,
|
|
290
297
|
max_retry_delay=max_retry_delay,
|
|
291
298
|
retry_policy=retry_policy,
|
|
299
|
+
middlewares=middlewares,
|
|
292
300
|
)
|
|
293
301
|
|
|
294
302
|
@classmethod
|
|
@@ -306,6 +314,7 @@ class AzureOpenAIEmbeddingClient(
|
|
|
306
314
|
initial_retry_delay: float = 1.0,
|
|
307
315
|
max_retry_delay: float = 60.0,
|
|
308
316
|
retry_policy: Optional[RetryPolicy] = None,
|
|
317
|
+
middlewares: Optional[List[ClientMiddleware]] = None,
|
|
309
318
|
) -> "AzureOpenAIEmbeddingClient":
|
|
310
319
|
"""Create client using a pre-fetched Azure AD bearer token."""
|
|
311
320
|
from pydantic import ValidationError
|
|
@@ -349,6 +358,7 @@ class AzureOpenAIEmbeddingClient(
|
|
|
349
358
|
initial_retry_delay=initial_retry_delay,
|
|
350
359
|
max_retry_delay=max_retry_delay,
|
|
351
360
|
retry_policy=retry_policy,
|
|
361
|
+
middlewares=middlewares,
|
|
352
362
|
)
|
|
353
363
|
|
|
354
364
|
async def create(self, input_text: str, **kwargs: Any) -> EmbeddingResult:
|
|
@@ -21,6 +21,7 @@ from pydantic import BaseModel
|
|
|
21
21
|
|
|
22
22
|
from agentbyte.component import ComponentLoader
|
|
23
23
|
from agentbyte.messages import AssistantMessage, Message, MultiModalMessage, ToolMessage
|
|
24
|
+
from agentbyte.middleware.base import ClientMiddleware, MiddlewareChain, OperationType
|
|
24
25
|
|
|
25
26
|
from .types import (
|
|
26
27
|
ChatCompletionChunk,
|
|
@@ -171,6 +172,7 @@ class BaseChatCompletionClient(ABC, ComponentLoader):
|
|
|
171
172
|
model: str,
|
|
172
173
|
client: Any,
|
|
173
174
|
config: Optional[Dict[str, Any]] = None,
|
|
175
|
+
middlewares: Optional[List[ClientMiddleware]] = None,
|
|
174
176
|
**kwargs: Any,
|
|
175
177
|
):
|
|
176
178
|
"""
|
|
@@ -226,8 +228,26 @@ class BaseChatCompletionClient(ABC, ComponentLoader):
|
|
|
226
228
|
self.config = config or {}
|
|
227
229
|
# Additional kwargs override config
|
|
228
230
|
self.config.update(kwargs)
|
|
231
|
+
for middleware in middlewares or []:
|
|
232
|
+
if not isinstance(middleware, ClientMiddleware):
|
|
233
|
+
raise TypeError(
|
|
234
|
+
f"{type(middleware).__name__} is not a ClientMiddleware — only "
|
|
235
|
+
"middleware that does not require AgentContext or conversational "
|
|
236
|
+
"state (e.g. OTelMiddleware, LoggingMiddleware) can attach "
|
|
237
|
+
"directly to a client."
|
|
238
|
+
)
|
|
239
|
+
self._middleware_chain = MiddlewareChain(list(middlewares or []))
|
|
240
|
+
|
|
241
|
+
@property
|
|
242
|
+
def middleware_types(self) -> frozenset:
|
|
243
|
+
"""Concrete types of middleware attached to this client.
|
|
244
|
+
|
|
245
|
+
Public introspection surface for callers that need to check this
|
|
246
|
+
client's middleware without reaching into ``_middleware_chain``
|
|
247
|
+
directly (e.g. a wrapping ``Agent`` detecting duplicate instrumentation).
|
|
248
|
+
"""
|
|
249
|
+
return frozenset(type(m) for m in self._middleware_chain.middlewares)
|
|
229
250
|
|
|
230
|
-
@abstractmethod
|
|
231
251
|
async def create(
|
|
232
252
|
self,
|
|
233
253
|
messages: List[Message],
|
|
@@ -338,7 +358,23 @@ class BaseChatCompletionClient(ABC, ComponentLoader):
|
|
|
338
358
|
print(f"Tokens: {result.usage.total_tokens}")
|
|
339
359
|
```
|
|
340
360
|
"""
|
|
341
|
-
|
|
361
|
+
return await self._middleware_chain.execute(
|
|
362
|
+
operation=OperationType.MODEL_CALL.value,
|
|
363
|
+
agent_name=type(self).__name__,
|
|
364
|
+
agent_context=None,
|
|
365
|
+
data={
|
|
366
|
+
"messages": messages,
|
|
367
|
+
"tools": tools,
|
|
368
|
+
"output_format": output_format,
|
|
369
|
+
"kwargs": kwargs,
|
|
370
|
+
},
|
|
371
|
+
func=self._execute_chat_operation,
|
|
372
|
+
metadata={"model": self.model},
|
|
373
|
+
)
|
|
374
|
+
|
|
375
|
+
async def _execute_chat_operation(self, payload: Dict[str, Any]) -> ChatCompletionResult:
|
|
376
|
+
"""Execute a non-streaming provider call after middleware processing."""
|
|
377
|
+
raise NotImplementedError
|
|
342
378
|
|
|
343
379
|
@abstractmethod
|
|
344
380
|
async def create_stream(
|
|
@@ -636,4 +672,3 @@ __all__ = [
|
|
|
636
672
|
"AuthenticationError",
|
|
637
673
|
"InvalidRequestError",
|
|
638
674
|
]
|
|
639
|
-
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
"""Anthropic Claude chat client transported through AWS Bedrock."""
|
|
2
2
|
|
|
3
3
|
import re
|
|
4
|
-
from typing import Any, Dict, Optional
|
|
4
|
+
from typing import Any, Dict, List, Optional
|
|
5
5
|
|
|
6
6
|
from anthropic import AsyncAnthropicBedrock
|
|
7
7
|
|
|
8
8
|
from agentbyte.component import Component
|
|
9
|
+
from agentbyte.middleware.base import ClientMiddleware
|
|
9
10
|
from agentbyte.llm.anthropic._conversion import AnthropicConversionMixin
|
|
10
11
|
from agentbyte.llm.base import BaseChatCompletionClient, BaseChatCompletionClientConfig
|
|
11
12
|
from agentbyte.llm.pricing import PricingRegistry
|
|
@@ -67,8 +68,9 @@ class AnthropicBedrockChatCompletionClient(
|
|
|
67
68
|
initial_retry_delay: float = 1.0,
|
|
68
69
|
max_retry_delay: float = 60.0,
|
|
69
70
|
retry_policy: Optional[RetryPolicy] = None,
|
|
71
|
+
middlewares: Optional[List[ClientMiddleware]] = None,
|
|
70
72
|
):
|
|
71
|
-
super().__init__(model, client, config)
|
|
73
|
+
super().__init__(model, client, config, middlewares=middlewares)
|
|
72
74
|
self.model_pricing = model_pricing
|
|
73
75
|
if retry_policy is not None:
|
|
74
76
|
self.retry_policy = retry_policy
|
|
@@ -103,6 +105,7 @@ class AnthropicBedrockChatCompletionClient(
|
|
|
103
105
|
initial_retry_delay: float = 1.0,
|
|
104
106
|
max_retry_delay: float = 60.0,
|
|
105
107
|
retry_policy: Optional[RetryPolicy] = None,
|
|
108
|
+
middlewares: Optional[List[ClientMiddleware]] = None,
|
|
106
109
|
) -> "AnthropicBedrockChatCompletionClient":
|
|
107
110
|
"""Create a client from an explicit or env-backed AWS region/profile.
|
|
108
111
|
|
|
@@ -128,6 +131,7 @@ class AnthropicBedrockChatCompletionClient(
|
|
|
128
131
|
initial_retry_delay=initial_retry_delay,
|
|
129
132
|
max_retry_delay=max_retry_delay,
|
|
130
133
|
retry_policy=retry_policy,
|
|
134
|
+
middlewares=middlewares,
|
|
131
135
|
)
|
|
132
136
|
|
|
133
137
|
def _estimate_cost(
|
|
@@ -7,6 +7,7 @@ from typing import Any, Dict, List, Optional
|
|
|
7
7
|
|
|
8
8
|
from agentbyte.component import Component
|
|
9
9
|
from agentbyte.llm._retry_observability import build_retry_summary
|
|
10
|
+
from agentbyte.middleware.base import ClientMiddleware
|
|
10
11
|
from agentbyte.llm.base import AuthenticationError, InvalidRequestError, RateLimitError
|
|
11
12
|
from agentbyte.llm.embeddings_base import BaseEmbeddingClient, BaseEmbeddingClientConfig
|
|
12
13
|
from agentbyte.llm.pricing import PricingRegistry
|
|
@@ -49,8 +50,8 @@ class CohereBedrockEmbeddingClient(
|
|
|
49
50
|
model_pricing: Optional[ModelPricing] = None, max_retries: int = 3,
|
|
50
51
|
initial_retry_delay: float = 1.0, max_retry_delay: float = 60.0,
|
|
51
52
|
retry_policy: Optional[RetryPolicy] = None, region: str | None = None,
|
|
52
|
-
profile: str | None = None):
|
|
53
|
-
super().__init__(model, client, config)
|
|
53
|
+
profile: str | None = None, middlewares: Optional[List[ClientMiddleware]] = None):
|
|
54
|
+
super().__init__(model, client, config, middlewares=middlewares)
|
|
54
55
|
self.model_pricing, self.region, self.profile = model_pricing, region, profile
|
|
55
56
|
self.retry_policy = retry_policy or RetryPolicy(max_retries=max_retries, initial_retry_delay=initial_retry_delay, max_retry_delay=max_retry_delay)
|
|
56
57
|
|
|
@@ -58,11 +59,12 @@ class CohereBedrockEmbeddingClient(
|
|
|
58
59
|
def from_region(cls, model: str, region: str | None = None, profile: str | None = None,
|
|
59
60
|
config: Optional[Dict[str, Any]] = None, model_pricing: Optional[ModelPricing] = None,
|
|
60
61
|
max_retries: int = 3, initial_retry_delay: float = 1.0, max_retry_delay: float = 60.0,
|
|
61
|
-
retry_policy: Optional[RetryPolicy] = None
|
|
62
|
+
retry_policy: Optional[RetryPolicy] = None,
|
|
63
|
+
middlewares: Optional[List[ClientMiddleware]] = None) -> "CohereBedrockEmbeddingClient":
|
|
62
64
|
settings = BedrockSettings()
|
|
63
65
|
return cls(model, config=config, model_pricing=model_pricing, max_retries=max_retries,
|
|
64
66
|
initial_retry_delay=initial_retry_delay, max_retry_delay=max_retry_delay, retry_policy=retry_policy,
|
|
65
|
-
region=region or settings.region, profile=profile or settings.profile)
|
|
67
|
+
region=region or settings.region, profile=profile or settings.profile, middlewares=middlewares)
|
|
66
68
|
|
|
67
69
|
async def create(self, input_text: str, **kwargs: Any) -> EmbeddingResult:
|
|
68
70
|
return await self.create_batch([input_text], **kwargs)
|