agentbyte 0.55.0__tar.gz → 0.56.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.55.0 → agentbyte-0.56.0}/.gitignore +4 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/CHANGELOG.md +22 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/PKG-INFO +2 -2
- {agentbyte-0.55.0 → agentbyte-0.56.0}/README.md +1 -1
- agentbyte-0.56.0/src/agentbyte/__about__.py +2 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/llm/anthropic/chat.py +8 -1
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/llm/bedrock/anthropic_chat.py +9 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/llm/bedrock/cohere_embedding.py +10 -6
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/llm/openai/chat.py +8 -1
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/llm/openai/embedding.py +8 -1
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/llm/pricing.py +77 -7
- agentbyte-0.56.0/tests/llm/test_pricing_model.py +197 -0
- agentbyte-0.55.0/src/agentbyte/__about__.py +0 -2
- {agentbyte-0.55.0 → agentbyte-0.56.0}/LICENSE +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/pyproject.toml +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/__init__.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/_optional.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/a2a/__init__.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/a2a/app.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/a2a/distributed_context.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/a2a/executor.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/a2a/tool.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/agents/__init__.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/agents/agent.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/agents/agent_as_tool.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/agents/base.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/agents/types.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/cancellation_token.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/catalog.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/cli/__init__.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/cli/__main__.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/cli/eval_commands.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/cli/history_args.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/cli/loading.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/cli/main.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/cli/optim_commands.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/cli/report_output.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/cli/serve_commands.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/compaction/__init__.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/compaction/counters.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/compaction/errors.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/compaction/grouping.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/compaction/strategies.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/component.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/context.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/context_providers/__init__.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/context_providers/base.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/context_providers/skill_tools.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/context_providers/skills.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/dataset/__init__.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/dataset/_aiosqlite.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/dataset/base.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/dataset/config.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/dataset/importer.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/dataset/json.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/dataset/loader.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/dataset/publish.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/dataset/publish_config.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/dataset/publishers.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/dataset/s3.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/dataset/sources.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/dataset/sqlite.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/dataset/sqlite_db.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/dataset/write_config.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/dataset/writers.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/entity.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/eval/__init__.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/eval/base.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/eval/checks/__init__.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/eval/checks/decorator.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/eval/checks/keyword.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/eval/checks/local.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/eval/checks/process.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/eval/checks/tool.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/eval/checks/types.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/eval/comparison.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/eval/eval_dataset.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/eval/history/__init__.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/eval/history/_writer_lock.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/eval/history/config.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/eval/history/conformance.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/eval/history/errors.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/eval/history/models.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/eval/history/recorder.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/eval/history/sql.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/eval/history/sqlite.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/eval/history/store.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/eval/history/transitions.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/eval/judges/__init__.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/eval/judges/base.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/eval/judges/composite.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/eval/judges/llm.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/eval/judges/pairwise.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/eval/judges/reference.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/eval/judges/trajectory.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/eval/judges/validation.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/eval/pairwise.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/eval/report.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/eval/runner.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/eval/splitting.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/eval/targets/__init__.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/eval/targets/agent.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/eval/targets/model.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/eval/targets/multi_turn.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/eval/targets/orchestrator.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/eval/targets/runtime.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/eval/targets/workflow.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/eval/types.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/eval/workbench/__init__.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/eval/workbench/benchmark.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/eval/workbench/compare.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/eval/workbench/coordinator.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/eval/workbench/jobs.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/eval/workbench/smoke.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/eval/workbench/smoke_tasks.json +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/eval/workbench/suite.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/eval/workbench/verdict.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/execution_trace/__init__.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/execution_trace/collector.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/execution_trace/models.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/llm/__init__.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/llm/_retry_observability.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/llm/anthropic/__init__.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/llm/anthropic/_conversion.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/llm/anthropic/settings.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/llm/auth.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/llm/azure/__init__.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/llm/azure/auth.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/llm/azure/chat.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/llm/azure/embedding.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/llm/azure/settings.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/llm/azure_openai.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/llm/azure_openai_embedding.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/llm/base.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/llm/bedrock/__init__.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/llm/bedrock/_client.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/llm/bedrock/settings.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/llm/embedding_batcher.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/llm/embeddings_base.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/llm/openai/__init__.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/llm/openai/settings.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/llm/openai_embedding.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/llm/retry_policy.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/llm/settings.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/llm/types.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/logger.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/memory/__init__.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/memory/base.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/messages.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/middleware/__init__.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/middleware/base.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/middleware/otel.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/middleware/retry.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/middleware/sql_usage.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/middleware/usage_logger.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/notebook.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/optim/__init__.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/optim/base.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/optim/binding.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/optim/config.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/optim/gepa.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/optim/job.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/optim/mipro.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/optim/pareto.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/optim/reflective.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/optim/report.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/optim/spec.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/optim/trace.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/orchestration/__init__.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/orchestration/ai.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/orchestration/base.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/orchestration/handoff.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/orchestration/plan.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/orchestration/policies.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/orchestration/round_robin.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/presets/__init__.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/presets/agents.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/presets/benchmark.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/presets/capitals.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/presets/clients.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/presets/instruction_registry.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/presets/instructions/orchestrator.yaml +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/presets/instructions/query_rewriter.yaml +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/presets/instructions/researcher.yaml +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/presets/instructions/reviewer.yaml +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/presets/instructions/writer.yaml +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/presets/orchestration.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/presets/skills/capitals-format/SKILL.md +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/presets/skills/contracts-analyst/SKILL.md +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/presets/skills/hr-analyst/SKILL.md +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/presets/skills/hr-analyst/resources/departments.md +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/presets/skills/hr-analyst/resources/employees.md +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/presets/skills/hr-analyst/resources/payroll.md +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/presets/streaming.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/presets/workflow.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/session_store.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/skills/__init__.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/skills/base.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/skills/resources.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/skills/scripts.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/skills/sources.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/skills/validation.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/termination/__init__.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/termination/base.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/termination/cancellation.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/termination/composite.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/termination/consecutive_agent.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/termination/external.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/termination/function_call.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/termination/handoff.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/termination/max_message.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/termination/predicate.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/termination/source.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/termination/text_mention.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/termination/timeout.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/termination/token_usage.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/tools/__init__.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/tools/base.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/tools/coding_tools.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/tools/core_tools.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/tools/decorator.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/tools/mcp/__init__.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/tools/mcp/client.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/tools/mcp/config.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/tools/mcp/errors.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/tools/mcp/tool.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/tools/mcp/transports.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/tools/memory_tool.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/tools/research_tools.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/types.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/webui/__init__.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/webui/discovery.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/webui/eval_routes.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/webui/execution.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/webui/mcp/__init__.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/webui/mcp/servers/__init__.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/webui/mcp/servers/apps_server.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/webui/mcp/servers/auth_server.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/webui/mcp/servers/basic_server.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/webui/mcp/servers/mrtr_server.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/webui/mcp/servers/notify_server.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/webui/mcp_playground.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/webui/mcp_routes.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/webui/models.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/webui/registry.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/webui/server.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/webui/session_store.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/webui/sessions.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/webui/ui/assets/index-BreogZut.js +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/webui/ui/assets/index-ptxe7GHs.css +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/webui/ui/index.html +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/webui/ui/vite.svg +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/workflow/__init__.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/workflow/agent.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/workflow/core/__init__.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/workflow/core/_structure_hash.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/workflow/core/checkpoint.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/workflow/core/models.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/workflow/core/runner.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/workflow/core/workflow.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/workflow/defaults.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/workflow/errors.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/workflow/loader.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/workflow/schema.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/workflow/schema_utils.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/workflow/sqlite_checkpoint.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/workflow/steps/__init__.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/workflow/steps/agent.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/workflow/steps/echo.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/workflow/steps/function.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/workflow/steps/http.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/workflow/steps/step.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/workflow/steps/subworkflow.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/workflow/steps/transform.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/src/agentbyte/workflow/visualizer.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/a2a/a2a_helpers.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/a2a/test_a2a_adapters.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/a2a/test_distributed_context.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/agents/test_agent_as_tool.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/agents/test_agent_basic.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/agents/test_agent_client_middleware_overlap.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/agents/test_agent_context_providers.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/agents/test_agent_error_response.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/agents/test_agent_event_types.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/agents/test_agent_memory_integration.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/agents/test_agent_middleware_integration.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/agents/test_agent_response_accessors.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/agents/test_agent_retry_middleware.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/agents/test_agent_stop_at_tools.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/agents/test_agent_stream_events.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/agents/test_tool_approval.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/agents/test_tool_batch_resolution.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/agents/test_tool_metadata.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/cli/test_eval_benchmark_commands.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/cli/test_loading.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/cli/test_registry_check.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/cli/test_report_output.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/cli/test_serve_command.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/compaction/test_compaction.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/conftest.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/context_providers/__init__.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/context_providers/test_skill_tools.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/context_providers/test_skills_provider.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/dataset/fake_s3.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/dataset/test_dataset_exit.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/dataset/test_loader.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/dataset/test_multi_table.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/dataset/test_publish.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/dataset/test_sqlite_db.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/eval/test_dimension_scores.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/eval/test_eval_benchmarks.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/eval/test_eval_dataset.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/eval/test_eval_history.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/eval/test_eval_history_backends.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/eval/test_eval_jobs.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/eval/test_eval_workbench.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/eval/test_execution_trajectories.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/eval/test_history_config.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/eval/test_multi_turn.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/eval/test_pairwise.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/eval/test_phase1_runner_and_targets.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/eval/test_phase2_checks_and_reports.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/eval/test_run_comparison.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/eval/test_score_integrity.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/eval/test_splitting.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/eval/test_types_and_judges.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/llm/test_anthropic_bedrock_client.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/llm/test_anthropic_client.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/llm/test_azure_client.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/llm/test_azure_embedding_client.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/llm/test_client_middleware.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/llm/test_cohere_bedrock_embedding_client.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/llm/test_embedding_batcher.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/llm/test_llm_types.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/llm/test_openai_client.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/llm/test_openai_embedding_client.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/llm/test_pricing.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/llm/test_retry_observability.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/llm/test_retry_policy_api.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/llm/test_retryable_error_substrings.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/memory/test_memory.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/middleware/test_context_compaction.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/middleware/test_deduplicate_tool_result.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/middleware/test_middleware_chain.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/middleware/test_otel.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/middleware/test_retry_middleware.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/middleware/test_sql_usage.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/middleware/test_usage_logger.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/optim/__init__.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/optim/fakes.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/optim/test_base.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/optim/test_base_integration.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/optim/test_binding.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/optim/test_config.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/optim/test_description_tunable.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/optim/test_gepa.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/optim/test_mipro.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/optim/test_orchestrator_optim.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/optim/test_pareto.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/optim/test_reflective.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/optim/test_report.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/optim/test_score_integrity.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/optim/test_spec.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/optim/test_trace.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/orchestration/test_ai_orchestrator.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/orchestration/test_base_orchestrator.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/orchestration/test_handoff_orchestrator.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/orchestration/test_history_tool_call_pairing.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/orchestration/test_orchestration_usage_breakdown.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/orchestration/test_orchestrator_agent_contract.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/orchestration/test_orchestrator_finalization.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/orchestration/test_orchestrator_member_events.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/orchestration/test_orchestrator_otel.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/orchestration/test_orchestrator_synthesis.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/orchestration/test_plan_orchestrator.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/orchestration/test_round_robin.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/presets/test_agents.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/presets/test_benchmark.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/presets/test_capitals.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/presets/test_clients.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/presets/test_instruction_registry.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/presets/test_orchestration.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/presets/test_streaming.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/presets/test_workflow.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/skills/__init__.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/skills/test_base.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/skills/test_resources.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/skills/test_scripts.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/skills/test_sources.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/termination/test_base.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/termination/test_cancellation.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/termination/test_composite.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/termination/test_consecutive_agent.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/termination/test_external.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/termination/test_function_call.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/termination/test_handoff.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/termination/test_max_message.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/termination/test_predicate.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/termination/test_source.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/termination/test_text_mention.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/termination/test_timeout.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/termination/test_token_usage.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/test_cancellation_token.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/test_context.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/test_logger.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/test_messages.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/test_option_enums.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/test_optional_extras.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/test_package_api.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/test_session_store.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/test_types.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/tools/fixtures/mcp_stdio_server.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/tools/test_coding_tools.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/tools/test_mcp_tools.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/tools/test_memory_tool.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/tools/test_research_tools.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/tools/test_tools.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/webui/__init__.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/webui/helpers.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/webui/test_eval_routes.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/webui/test_execution.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/webui/test_mcp_routes.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/webui/test_package_api.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/webui/test_registry.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/webui/test_server.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/webui/test_sessions.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/webui/test_workflow_streaming.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/workflow/recovery_worker.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/workflow/test_agent_step_imports.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/workflow/test_checkpoint.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/workflow/test_subworkflow_step.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/workflow/test_workflow_agent.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/workflow/test_workflow_class.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/workflow/test_workflow_models.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/workflow/test_workflow_reliability.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/workflow/test_workflow_runner.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/workflow/test_workflow_schema.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/workflow/test_workflow_steps.py +0 -0
- {agentbyte-0.55.0 → agentbyte-0.56.0}/tests/workflow/test_workflow_visualizer.py +0 -0
|
@@ -6,6 +6,28 @@ The format follows Keep a Changelog principles and semantic versioning.
|
|
|
6
6
|
|
|
7
7
|
## [Unreleased]
|
|
8
8
|
|
|
9
|
+
## [0.56.0] - 2026-10-23
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
|
|
13
|
+
- `pricing_model=` on OpenAI chat/embedding, Anthropic direct/Bedrock chat, and Cohere Bedrock
|
|
14
|
+
embedding constructors and factories, matching Azure pricing aliases. Component configs preserve
|
|
15
|
+
the alias; manual `model_pricing` takes precedence while transport model IDs remain unchanged.
|
|
16
|
+
- Standard short-context catalog entries for `gpt-6.1-sol`, `gpt-6-astra`, and `gpt-6-luna`,
|
|
17
|
+
including cached-input and 30-minute cache-write metadata.
|
|
18
|
+
|
|
19
|
+
### Changed
|
|
20
|
+
|
|
21
|
+
- Consolidated 19 AgentByte coding skills into one topic router with references loaded on demand;
|
|
22
|
+
removed the WebUI smoke-test skill and repaired migration-guide links.
|
|
23
|
+
- Added proposed spec 0077 for OpenAI models on Bedrock over SigV4 and updated the spec index.
|
|
24
|
+
|
|
25
|
+
### Fixed
|
|
26
|
+
|
|
27
|
+
- Exact Claude Sonnet 5.5, Fable 5.1, Mythos 5, and Mythos 5.1 pricing prevents sibling fallback.
|
|
28
|
+
Claude 5-series rates now include cache reads and 5-minute cache-write metadata, including
|
|
29
|
+
Haiku 5.5 below the 100K prompt threshold.
|
|
30
|
+
|
|
9
31
|
## [0.55.0] - 2026-10-12
|
|
10
32
|
|
|
11
33
|
### Added
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: agentbyte
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.56.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.56.0**
|
|
94
94
|
|
|
95
95
|
## Building an Agent
|
|
96
96
|
|
|
@@ -19,6 +19,7 @@ from ._conversion import AnthropicConversionMixin
|
|
|
19
19
|
class AnthropicChatCompletionClientConfig(BaseChatCompletionClientConfig):
|
|
20
20
|
"""Configuration for AnthropicChatCompletionClient serialization."""
|
|
21
21
|
|
|
22
|
+
pricing_model: str | None = None
|
|
22
23
|
retry_policy: RetryPolicy = RetryPolicy()
|
|
23
24
|
key_env_var: str = "ANTHROPIC_API_KEY"
|
|
24
25
|
|
|
@@ -46,9 +47,11 @@ class AnthropicChatCompletionClient(
|
|
|
46
47
|
max_retry_delay: float = 60.0,
|
|
47
48
|
retry_policy: Optional[RetryPolicy] = None,
|
|
48
49
|
middlewares: Optional[List[ClientMiddleware]] = None,
|
|
50
|
+
pricing_model: str | None = None,
|
|
49
51
|
):
|
|
50
52
|
super().__init__(model, client, config, middlewares=middlewares)
|
|
51
53
|
self.model_pricing = model_pricing
|
|
54
|
+
self.pricing_model = pricing_model
|
|
52
55
|
if retry_policy is not None:
|
|
53
56
|
self.retry_policy = retry_policy
|
|
54
57
|
else:
|
|
@@ -83,6 +86,7 @@ class AnthropicChatCompletionClient(
|
|
|
83
86
|
max_retry_delay: float = 60.0,
|
|
84
87
|
retry_policy: Optional[RetryPolicy] = None,
|
|
85
88
|
middlewares: Optional[List[ClientMiddleware]] = None,
|
|
89
|
+
pricing_model: str | None = None,
|
|
86
90
|
) -> "AnthropicChatCompletionClient":
|
|
87
91
|
"""Create a client from an explicit or env-backed API key."""
|
|
88
92
|
from pydantic import ValidationError
|
|
@@ -109,6 +113,7 @@ class AnthropicChatCompletionClient(
|
|
|
109
113
|
client=anthropic_client,
|
|
110
114
|
config=config,
|
|
111
115
|
model_pricing=model_pricing,
|
|
116
|
+
pricing_model=pricing_model,
|
|
112
117
|
max_retries=max_retries,
|
|
113
118
|
initial_retry_delay=initial_retry_delay,
|
|
114
119
|
max_retry_delay=max_retry_delay,
|
|
@@ -126,13 +131,14 @@ class AnthropicChatCompletionClient(
|
|
|
126
131
|
if self.model_pricing is not None:
|
|
127
132
|
pricing = self.model_pricing
|
|
128
133
|
else:
|
|
129
|
-
pricing = PricingRegistry.resolve_anthropic_chat_pricing(self.model)
|
|
134
|
+
pricing = PricingRegistry.resolve_anthropic_chat_pricing(self.pricing_model or self.model)
|
|
130
135
|
return pricing.calculate_cost(input_tokens, output_tokens, cached_tokens)
|
|
131
136
|
|
|
132
137
|
def _to_config(self) -> AnthropicChatCompletionClientConfig:
|
|
133
138
|
"""Serialize to config without persisting secrets."""
|
|
134
139
|
return AnthropicChatCompletionClientConfig(
|
|
135
140
|
model=self.model,
|
|
141
|
+
pricing_model=self.pricing_model,
|
|
136
142
|
config=self.config.copy(),
|
|
137
143
|
retry_policy=self.retry_policy,
|
|
138
144
|
key_env_var=getattr(self, "_key_env_var", "ANTHROPIC_API_KEY"),
|
|
@@ -153,6 +159,7 @@ class AnthropicChatCompletionClient(
|
|
|
153
159
|
)
|
|
154
160
|
instance = cls.from_api_key(
|
|
155
161
|
model=config.model,
|
|
162
|
+
pricing_model=config.pricing_model,
|
|
156
163
|
api_key=api_key,
|
|
157
164
|
config=config.config or None,
|
|
158
165
|
retry_policy=config.retry_policy,
|
|
@@ -27,6 +27,7 @@ _BEDROCK_ID_SUFFIX_RE = re.compile(r"-v\d+:\d+$")
|
|
|
27
27
|
class AnthropicBedrockChatCompletionClientConfig(BaseChatCompletionClientConfig):
|
|
28
28
|
"""Serializable Bedrock Claude client configuration."""
|
|
29
29
|
|
|
30
|
+
pricing_model: str | None = None
|
|
30
31
|
retry_policy: RetryPolicy = RetryPolicy()
|
|
31
32
|
region_env_var: str = "AWS_REGION"
|
|
32
33
|
profile_env_var: str = "AWS_PROFILE"
|
|
@@ -69,9 +70,11 @@ class AnthropicBedrockChatCompletionClient(
|
|
|
69
70
|
max_retry_delay: float = 60.0,
|
|
70
71
|
retry_policy: Optional[RetryPolicy] = None,
|
|
71
72
|
middlewares: Optional[List[ClientMiddleware]] = None,
|
|
73
|
+
pricing_model: str | None = None,
|
|
72
74
|
):
|
|
73
75
|
super().__init__(model, client, config, middlewares=middlewares)
|
|
74
76
|
self.model_pricing = model_pricing
|
|
77
|
+
self.pricing_model = pricing_model
|
|
75
78
|
if retry_policy is not None:
|
|
76
79
|
self.retry_policy = retry_policy
|
|
77
80
|
else:
|
|
@@ -106,6 +109,7 @@ class AnthropicBedrockChatCompletionClient(
|
|
|
106
109
|
max_retry_delay: float = 60.0,
|
|
107
110
|
retry_policy: Optional[RetryPolicy] = None,
|
|
108
111
|
middlewares: Optional[List[ClientMiddleware]] = None,
|
|
112
|
+
pricing_model: str | None = None,
|
|
109
113
|
) -> "AnthropicBedrockChatCompletionClient":
|
|
110
114
|
"""Create a client from an explicit or env-backed AWS region/profile.
|
|
111
115
|
|
|
@@ -127,6 +131,7 @@ class AnthropicBedrockChatCompletionClient(
|
|
|
127
131
|
client=bedrock_client,
|
|
128
132
|
config=config,
|
|
129
133
|
model_pricing=model_pricing,
|
|
134
|
+
pricing_model=pricing_model,
|
|
130
135
|
max_retries=max_retries,
|
|
131
136
|
initial_retry_delay=initial_retry_delay,
|
|
132
137
|
max_retry_delay=max_retry_delay,
|
|
@@ -143,6 +148,8 @@ class AnthropicBedrockChatCompletionClient(
|
|
|
143
148
|
"""Estimate cost, normalizing the Bedrock model ID before resolving."""
|
|
144
149
|
if self.model_pricing is not None:
|
|
145
150
|
pricing = self.model_pricing
|
|
151
|
+
elif self.pricing_model is not None:
|
|
152
|
+
pricing = PricingRegistry.resolve_anthropic_chat_pricing(self.pricing_model)
|
|
146
153
|
else:
|
|
147
154
|
stripped_region = _BEDROCK_ID_REGION_PREFIX_RE.sub("", self.model)
|
|
148
155
|
normalized_model = _BEDROCK_ID_SUFFIX_RE.sub(
|
|
@@ -155,6 +162,7 @@ class AnthropicBedrockChatCompletionClient(
|
|
|
155
162
|
"""Serialize to config without persisting secrets (region/profile stay in env)."""
|
|
156
163
|
return AnthropicBedrockChatCompletionClientConfig(
|
|
157
164
|
model=self.model,
|
|
165
|
+
pricing_model=self.pricing_model,
|
|
158
166
|
config=self.config.copy(),
|
|
159
167
|
retry_policy=self.retry_policy,
|
|
160
168
|
)
|
|
@@ -166,6 +174,7 @@ class AnthropicBedrockChatCompletionClient(
|
|
|
166
174
|
"""Reconstruct client from saved config, re-resolving region/profile from env."""
|
|
167
175
|
return cls.from_region(
|
|
168
176
|
model=config.model,
|
|
177
|
+
pricing_model=config.pricing_model,
|
|
169
178
|
config=config.config or None,
|
|
170
179
|
retry_policy=config.retry_policy,
|
|
171
180
|
)
|
|
@@ -32,6 +32,7 @@ class CohereTruncate(StrEnum):
|
|
|
32
32
|
|
|
33
33
|
|
|
34
34
|
class CohereBedrockEmbeddingClientConfig(BaseEmbeddingClientConfig):
|
|
35
|
+
pricing_model: str | None = None
|
|
35
36
|
retry_policy: RetryPolicy = RetryPolicy()
|
|
36
37
|
region_env_var: str = "AWS_REGION"
|
|
37
38
|
profile_env_var: str = "AWS_PROFILE"
|
|
@@ -50,8 +51,10 @@ class CohereBedrockEmbeddingClient(
|
|
|
50
51
|
model_pricing: Optional[ModelPricing] = None, max_retries: int = 3,
|
|
51
52
|
initial_retry_delay: float = 1.0, max_retry_delay: float = 60.0,
|
|
52
53
|
retry_policy: Optional[RetryPolicy] = None, region: str | None = None,
|
|
53
|
-
profile: str | None = None, middlewares: Optional[List[ClientMiddleware]] = None
|
|
54
|
+
profile: str | None = None, middlewares: Optional[List[ClientMiddleware]] = None,
|
|
55
|
+
pricing_model: str | None = None):
|
|
54
56
|
super().__init__(model, client, config, middlewares=middlewares)
|
|
57
|
+
self.pricing_model = pricing_model
|
|
55
58
|
self.model_pricing, self.region, self.profile = model_pricing, region, profile
|
|
56
59
|
self.retry_policy = retry_policy or RetryPolicy(max_retries=max_retries, initial_retry_delay=initial_retry_delay, max_retry_delay=max_retry_delay)
|
|
57
60
|
|
|
@@ -60,9 +63,10 @@ class CohereBedrockEmbeddingClient(
|
|
|
60
63
|
config: Optional[Dict[str, Any]] = None, model_pricing: Optional[ModelPricing] = None,
|
|
61
64
|
max_retries: int = 3, initial_retry_delay: float = 1.0, max_retry_delay: float = 60.0,
|
|
62
65
|
retry_policy: Optional[RetryPolicy] = None,
|
|
63
|
-
middlewares: Optional[List[ClientMiddleware]] = None
|
|
66
|
+
middlewares: Optional[List[ClientMiddleware]] = None,
|
|
67
|
+
pricing_model: str | None = None) -> "CohereBedrockEmbeddingClient":
|
|
64
68
|
settings = BedrockSettings()
|
|
65
|
-
return cls(model, config=config, model_pricing=model_pricing, max_retries=max_retries,
|
|
69
|
+
return cls(model, config=config, model_pricing=model_pricing, pricing_model=pricing_model, max_retries=max_retries,
|
|
66
70
|
initial_retry_delay=initial_retry_delay, max_retry_delay=max_retry_delay, retry_policy=retry_policy,
|
|
67
71
|
region=region or settings.region, profile=profile or settings.profile, middlewares=middlewares)
|
|
68
72
|
|
|
@@ -114,15 +118,15 @@ class CohereBedrockEmbeddingClient(
|
|
|
114
118
|
return await client.invoke_model(modelId=self.model, body=json.dumps(request), contentType="application/json", accept="application/json")
|
|
115
119
|
|
|
116
120
|
def _estimate_cost(self, tokens: int) -> float:
|
|
117
|
-
pricing = self.model_pricing or PricingRegistry.resolve_cohere_bedrock_embedding_pricing(self.model)
|
|
121
|
+
pricing = self.model_pricing or PricingRegistry.resolve_cohere_bedrock_embedding_pricing(self.pricing_model or self.model)
|
|
118
122
|
return pricing.calculate_cost(tokens, 0)
|
|
119
123
|
|
|
120
124
|
def _to_config(self) -> CohereBedrockEmbeddingClientConfig:
|
|
121
|
-
return CohereBedrockEmbeddingClientConfig(model=self.model, config=self.config.copy(), retry_policy=self.retry_policy)
|
|
125
|
+
return CohereBedrockEmbeddingClientConfig(model=self.model, pricing_model=self.pricing_model, config=self.config.copy(), retry_policy=self.retry_policy)
|
|
122
126
|
|
|
123
127
|
@classmethod
|
|
124
128
|
def _from_config(cls, config: CohereBedrockEmbeddingClientConfig) -> "CohereBedrockEmbeddingClient":
|
|
125
|
-
return cls.from_region(config.model, config=config.config or None, retry_policy=config.retry_policy)
|
|
129
|
+
return cls.from_region(config.model, pricing_model=config.pricing_model, config=config.config or None, retry_policy=config.retry_policy)
|
|
126
130
|
|
|
127
131
|
def _handle_error(self, error: Exception) -> None:
|
|
128
132
|
code = str(getattr(error, "response", {}).get("Error", {}).get("Code", ""))
|
|
@@ -39,6 +39,7 @@ logger = logging.getLogger(__name__)
|
|
|
39
39
|
class OpenAIChatCompletionClientConfig(BaseChatCompletionClientConfig):
|
|
40
40
|
"""Configuration for OpenAIChatCompletionClient serialization."""
|
|
41
41
|
|
|
42
|
+
pricing_model: str | None = None
|
|
42
43
|
retry_policy: RetryPolicy = RetryPolicy()
|
|
43
44
|
key_env_var: str = "OPENAI_API_KEY"
|
|
44
45
|
|
|
@@ -65,9 +66,11 @@ class OpenAIChatCompletionClient(
|
|
|
65
66
|
max_retry_delay: float = 60.0,
|
|
66
67
|
retry_policy: Optional[RetryPolicy] = None,
|
|
67
68
|
middlewares: Optional[List[ClientMiddleware]] = None,
|
|
69
|
+
pricing_model: str | None = None,
|
|
68
70
|
):
|
|
69
71
|
super().__init__(model, client, config, middlewares=middlewares)
|
|
70
72
|
self.model_pricing = model_pricing
|
|
73
|
+
self.pricing_model = pricing_model
|
|
71
74
|
if retry_policy is not None:
|
|
72
75
|
self.retry_policy = retry_policy
|
|
73
76
|
else:
|
|
@@ -102,6 +105,7 @@ class OpenAIChatCompletionClient(
|
|
|
102
105
|
max_retry_delay: float = 60.0,
|
|
103
106
|
retry_policy: Optional[RetryPolicy] = None,
|
|
104
107
|
middlewares: Optional[List[ClientMiddleware]] = None,
|
|
108
|
+
pricing_model: str | None = None,
|
|
105
109
|
) -> "OpenAIChatCompletionClient":
|
|
106
110
|
"""Create a client from an explicit or env-backed API key."""
|
|
107
111
|
from pydantic import ValidationError
|
|
@@ -128,6 +132,7 @@ class OpenAIChatCompletionClient(
|
|
|
128
132
|
client=openai_client,
|
|
129
133
|
config=config,
|
|
130
134
|
model_pricing=model_pricing,
|
|
135
|
+
pricing_model=pricing_model,
|
|
131
136
|
max_retries=max_retries,
|
|
132
137
|
initial_retry_delay=initial_retry_delay,
|
|
133
138
|
max_retry_delay=max_retry_delay,
|
|
@@ -426,7 +431,7 @@ class OpenAIChatCompletionClient(
|
|
|
426
431
|
if self.model_pricing is not None:
|
|
427
432
|
pricing = self.model_pricing
|
|
428
433
|
else:
|
|
429
|
-
pricing = PricingRegistry.resolve_openai_chat_pricing(self.model)
|
|
434
|
+
pricing = PricingRegistry.resolve_openai_chat_pricing(self.pricing_model or self.model)
|
|
430
435
|
return pricing.calculate_cost(prompt_tokens, completion_tokens, cached_tokens)
|
|
431
436
|
|
|
432
437
|
@staticmethod
|
|
@@ -439,6 +444,7 @@ class OpenAIChatCompletionClient(
|
|
|
439
444
|
"""Serialize to config without persisting secrets."""
|
|
440
445
|
return OpenAIChatCompletionClientConfig(
|
|
441
446
|
model=self.model,
|
|
447
|
+
pricing_model=self.pricing_model,
|
|
442
448
|
config=self.config.copy(),
|
|
443
449
|
retry_policy=self.retry_policy,
|
|
444
450
|
key_env_var=getattr(self, "_key_env_var", "OPENAI_API_KEY"),
|
|
@@ -457,6 +463,7 @@ class OpenAIChatCompletionClient(
|
|
|
457
463
|
)
|
|
458
464
|
instance = cls.from_api_key(
|
|
459
465
|
model=config.model,
|
|
466
|
+
pricing_model=config.pricing_model,
|
|
460
467
|
api_key=api_key,
|
|
461
468
|
config=config.config or None,
|
|
462
469
|
retry_policy=config.retry_policy,
|
|
@@ -24,6 +24,7 @@ logger = logging.getLogger(__name__)
|
|
|
24
24
|
class OpenAIEmbeddingClientConfig(BaseEmbeddingClientConfig):
|
|
25
25
|
"""Configuration for OpenAIEmbeddingClient serialization."""
|
|
26
26
|
|
|
27
|
+
pricing_model: str | None = None
|
|
27
28
|
retry_policy: RetryPolicy = RetryPolicy()
|
|
28
29
|
key_env_var: str = "OPENAI_API_KEY"
|
|
29
30
|
|
|
@@ -50,9 +51,11 @@ class OpenAIEmbeddingClient(
|
|
|
50
51
|
max_retry_delay: float = 60.0,
|
|
51
52
|
retry_policy: Optional[RetryPolicy] = None,
|
|
52
53
|
middlewares: Optional[List[ClientMiddleware]] = None,
|
|
54
|
+
pricing_model: str | None = None,
|
|
53
55
|
):
|
|
54
56
|
super().__init__(model, client, config, middlewares=middlewares)
|
|
55
57
|
self.model_pricing = model_pricing
|
|
58
|
+
self.pricing_model = pricing_model
|
|
56
59
|
if retry_policy is not None:
|
|
57
60
|
self.retry_policy = retry_policy
|
|
58
61
|
else:
|
|
@@ -87,6 +90,7 @@ class OpenAIEmbeddingClient(
|
|
|
87
90
|
max_retry_delay: float = 60.0,
|
|
88
91
|
retry_policy: Optional[RetryPolicy] = None,
|
|
89
92
|
middlewares: Optional[List[ClientMiddleware]] = None,
|
|
93
|
+
pricing_model: str | None = None,
|
|
90
94
|
) -> "OpenAIEmbeddingClient":
|
|
91
95
|
"""Create an OpenAIEmbeddingClient from explicit or env-backed API key."""
|
|
92
96
|
from pydantic import ValidationError
|
|
@@ -113,6 +117,7 @@ class OpenAIEmbeddingClient(
|
|
|
113
117
|
client=openai_client,
|
|
114
118
|
config=config,
|
|
115
119
|
model_pricing=model_pricing,
|
|
120
|
+
pricing_model=pricing_model,
|
|
116
121
|
max_retries=max_retries,
|
|
117
122
|
initial_retry_delay=initial_retry_delay,
|
|
118
123
|
max_retry_delay=max_retry_delay,
|
|
@@ -230,13 +235,14 @@ class OpenAIEmbeddingClient(
|
|
|
230
235
|
if self.model_pricing is not None:
|
|
231
236
|
pricing = self.model_pricing
|
|
232
237
|
else:
|
|
233
|
-
pricing = PricingRegistry.resolve_openai_embedding_pricing(self.model)
|
|
238
|
+
pricing = PricingRegistry.resolve_openai_embedding_pricing(self.pricing_model or self.model)
|
|
234
239
|
return pricing.calculate_cost(prompt_tokens, completion_tokens)
|
|
235
240
|
|
|
236
241
|
def _to_config(self) -> OpenAIEmbeddingClientConfig:
|
|
237
242
|
"""Serialize client to config without persisting secret values."""
|
|
238
243
|
return OpenAIEmbeddingClientConfig(
|
|
239
244
|
model=self.model,
|
|
245
|
+
pricing_model=self.pricing_model,
|
|
240
246
|
config=self.config.copy(),
|
|
241
247
|
retry_policy=self.retry_policy,
|
|
242
248
|
key_env_var=getattr(self, "_key_env_var", "OPENAI_API_KEY"),
|
|
@@ -255,6 +261,7 @@ class OpenAIEmbeddingClient(
|
|
|
255
261
|
)
|
|
256
262
|
instance = cls.from_api_key(
|
|
257
263
|
model=config.model,
|
|
264
|
+
pricing_model=config.pricing_model,
|
|
258
265
|
api_key=api_key,
|
|
259
266
|
config=config.config or None,
|
|
260
267
|
retry_policy=config.retry_policy,
|
|
@@ -77,7 +77,31 @@ class PricingRegistry:
|
|
|
77
77
|
"""Central registry of model pricing with resolver functions for all providers."""
|
|
78
78
|
|
|
79
79
|
# ===== OpenAI Standard Short-Context Chat Model Pricing (per 1M tokens) =====
|
|
80
|
+
# GPT-6 Standard short-context rates verified 2026-10-23:
|
|
81
|
+
# https://developers.openai.com/api/docs/pricing (30-minute cache writes).
|
|
80
82
|
OPENAI_CHAT_PRICING: dict[str, ModelPricing] = {
|
|
83
|
+
"gpt-6.1-sol": ModelPricing(
|
|
84
|
+
input_per_1m=2,
|
|
85
|
+
output_per_1m=10,
|
|
86
|
+
cached_input_per_1m=0.1,
|
|
87
|
+
cache_write_per_1m=2.5,
|
|
88
|
+
context_tier="short",
|
|
89
|
+
),
|
|
90
|
+
"gpt-6-astra": ModelPricing(
|
|
91
|
+
input_per_1m=10,
|
|
92
|
+
output_per_1m=50,
|
|
93
|
+
cached_input_per_1m=1,
|
|
94
|
+
cache_write_per_1m=12.5,
|
|
95
|
+
context_tier="short",
|
|
96
|
+
),
|
|
97
|
+
"gpt-6-luna": ModelPricing(
|
|
98
|
+
input_per_1m=0.1,
|
|
99
|
+
output_per_1m=0.5,
|
|
100
|
+
cached_input_per_1m=0.01,
|
|
101
|
+
cache_write_per_1m=0.125,
|
|
102
|
+
context_tier="short",
|
|
103
|
+
),
|
|
104
|
+
|
|
81
105
|
"gpt-5.6": ModelPricing(
|
|
82
106
|
input_per_1m=4.00,
|
|
83
107
|
output_per_1m=20.00,
|
|
@@ -429,9 +453,9 @@ class PricingRegistry:
|
|
|
429
453
|
|
|
430
454
|
# ===== Anthropic Claude Chat Pricing (per 1M tokens) =====
|
|
431
455
|
# Verified against platform.claude.com/docs/en/about-claude/pricing (Oct 2026).
|
|
432
|
-
#
|
|
433
|
-
#
|
|
434
|
-
#
|
|
456
|
+
# Shared default estimates for direct API and Bedrock; regional/transport
|
|
457
|
+
# premiums are not represented. Override model_pricing for negotiated rates.
|
|
458
|
+
# Anthropic cache-write rates below use the 5-minute TTL.
|
|
435
459
|
#
|
|
436
460
|
# Ordered most-specific prefix first for readability; `_resolve`'s prefix fallback
|
|
437
461
|
# sorts candidate keys by length before matching, so the dict's literal insertion
|
|
@@ -447,15 +471,59 @@ class PricingRegistry:
|
|
|
447
471
|
# has no representation in this registry (lookup is by model name only), so only
|
|
448
472
|
# the common sub-100k-token rate is listed below.
|
|
449
473
|
ANTHROPIC_CHAT_PRICING: dict[str, ModelPricing] = {
|
|
450
|
-
"claude-
|
|
451
|
-
|
|
452
|
-
|
|
474
|
+
"claude-mythos-5-1": ModelPricing(
|
|
475
|
+
input_per_1m=10,
|
|
476
|
+
output_per_1m=50,
|
|
477
|
+
cached_input_per_1m=0.25,
|
|
478
|
+
cache_write_per_1m=12.5,
|
|
479
|
+
),
|
|
480
|
+
"claude-mythos-5": ModelPricing(
|
|
481
|
+
input_per_1m=10,
|
|
482
|
+
output_per_1m=50,
|
|
483
|
+
cached_input_per_1m=1,
|
|
484
|
+
cache_write_per_1m=12.5,
|
|
485
|
+
),
|
|
486
|
+
"claude-fable-5-1": ModelPricing(
|
|
487
|
+
input_per_1m=10,
|
|
488
|
+
output_per_1m=50,
|
|
489
|
+
cached_input_per_1m=0.25,
|
|
490
|
+
cache_write_per_1m=12.5,
|
|
491
|
+
),
|
|
492
|
+
"claude-sonnet-5-5": ModelPricing(
|
|
493
|
+
input_per_1m=2,
|
|
494
|
+
output_per_1m=10,
|
|
495
|
+
cached_input_per_1m=0.1,
|
|
496
|
+
cache_write_per_1m=2.5,
|
|
497
|
+
),
|
|
498
|
+
"claude-fable-5": ModelPricing(
|
|
499
|
+
input_per_1m=10.0,
|
|
500
|
+
output_per_1m=50.0,
|
|
501
|
+
cached_input_per_1m=1.0,
|
|
502
|
+
cache_write_per_1m=12.5,
|
|
503
|
+
),
|
|
504
|
+
"claude-opus-5-5": ModelPricing(
|
|
505
|
+
input_per_1m=4.0,
|
|
506
|
+
output_per_1m=20.0,
|
|
507
|
+
cached_input_per_1m=0.2,
|
|
508
|
+
cache_write_per_1m=5.0,
|
|
509
|
+
),
|
|
510
|
+
"claude-opus-5": ModelPricing(
|
|
511
|
+
input_per_1m=5.0,
|
|
512
|
+
output_per_1m=25.0,
|
|
513
|
+
cached_input_per_1m=0.5,
|
|
514
|
+
cache_write_per_1m=6.25,
|
|
515
|
+
),
|
|
453
516
|
"claude-opus-4-8": ModelPricing(input_per_1m=5.0, output_per_1m=25.0),
|
|
454
517
|
"claude-opus-4-7": ModelPricing(input_per_1m=5.0, output_per_1m=25.0),
|
|
455
518
|
"claude-opus-4-6": ModelPricing(input_per_1m=5.0, output_per_1m=25.0),
|
|
456
519
|
"claude-opus-4-5": ModelPricing(input_per_1m=5.0, output_per_1m=25.0),
|
|
457
520
|
"claude-opus-4": ModelPricing(input_per_1m=15.0, output_per_1m=75.0),
|
|
458
|
-
"claude-sonnet-5": ModelPricing(
|
|
521
|
+
"claude-sonnet-5": ModelPricing(
|
|
522
|
+
input_per_1m=2.0,
|
|
523
|
+
output_per_1m=10.0,
|
|
524
|
+
cached_input_per_1m=0.2,
|
|
525
|
+
cache_write_per_1m=2.5,
|
|
526
|
+
),
|
|
459
527
|
# claude-sonnet-4-6/-4-5 currently price identically to claude-sonnet-4 ($3/$15,
|
|
460
528
|
# verified against platform.claude.com/docs/en/about-claude/pricing), so the
|
|
461
529
|
# prefix fallback already resolved them correctly -- listed explicitly anyway so a
|
|
@@ -467,6 +535,8 @@ class PricingRegistry:
|
|
|
467
535
|
"claude-haiku-5-5": ModelPricing(
|
|
468
536
|
input_per_1m=0.10,
|
|
469
537
|
output_per_1m=0.50,
|
|
538
|
+
cached_input_per_1m=0.01,
|
|
539
|
+
cache_write_per_1m=0.125,
|
|
470
540
|
context_tier="<=100K tokens per request",
|
|
471
541
|
),
|
|
472
542
|
"claude-haiku-4-5": ModelPricing(input_per_1m=1.0, output_per_1m=5.0),
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
"""Provider aliases select catalog pricing without changing transport model IDs."""
|
|
2
|
+
|
|
3
|
+
from importlib import import_module
|
|
4
|
+
from unittest.mock import Mock
|
|
5
|
+
|
|
6
|
+
import pytest
|
|
7
|
+
|
|
8
|
+
from agentbyte.llm import (
|
|
9
|
+
AnthropicBedrockChatCompletionClient,
|
|
10
|
+
AnthropicChatCompletionClient,
|
|
11
|
+
AzureOpenAIChatCompletionClient,
|
|
12
|
+
AzureOpenAIEmbeddingClient,
|
|
13
|
+
CohereBedrockEmbeddingClient,
|
|
14
|
+
OpenAIChatCompletionClient,
|
|
15
|
+
OpenAIEmbeddingClient,
|
|
16
|
+
)
|
|
17
|
+
from agentbyte.llm.pricing import PricingRegistry
|
|
18
|
+
from agentbyte.llm.types import ModelPricing
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
CLIENTS = [
|
|
22
|
+
(OpenAIChatCompletionClient, "gpt-6.1-sol", (1000, 200, 600)),
|
|
23
|
+
(AzureOpenAIChatCompletionClient, "gpt-5.6-sol", (1000, 200, 600)),
|
|
24
|
+
(AnthropicChatCompletionClient, "claude-sonnet-5-5", (1000, 200, 600)),
|
|
25
|
+
(AnthropicBedrockChatCompletionClient, "claude-sonnet-5-5", (1000, 200, 600)),
|
|
26
|
+
(OpenAIEmbeddingClient, "text-embedding-3-small", (1000,)),
|
|
27
|
+
(AzureOpenAIEmbeddingClient, "text-embedding-3-small", (1000,)),
|
|
28
|
+
(CohereBedrockEmbeddingClient, "cohere.embed-english-v3", (1000,)),
|
|
29
|
+
]
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
@pytest.mark.parametrize("client_type,canonical,tokens", CLIENTS)
|
|
33
|
+
def test_pricing_precedence(client_type, canonical, tokens):
|
|
34
|
+
bare = client_type(model=canonical, client=Mock())
|
|
35
|
+
aliased = client_type(
|
|
36
|
+
model="account-specific-profile", pricing_model=canonical, client=Mock()
|
|
37
|
+
)
|
|
38
|
+
assert aliased._estimate_cost(*tokens) == bare._estimate_cost(*tokens)
|
|
39
|
+
assert aliased.model == "account-specific-profile"
|
|
40
|
+
|
|
41
|
+
manual = ModelPricing(input_per_1m=17, output_per_1m=23, cached_input_per_1m=3)
|
|
42
|
+
override = client_type(
|
|
43
|
+
model=canonical,
|
|
44
|
+
pricing_model="unknown-model",
|
|
45
|
+
model_pricing=manual,
|
|
46
|
+
client=Mock(),
|
|
47
|
+
)
|
|
48
|
+
assert override._estimate_cost(*tokens) == manual.calculate_cost(*tokens)
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
@pytest.mark.parametrize(
|
|
52
|
+
"client_type,canonical,tokens",
|
|
53
|
+
[row for row in CLIENTS if "Azure" not in row[0].__name__],
|
|
54
|
+
)
|
|
55
|
+
def test_factory_and_config_round_trip(client_type, canonical, tokens, monkeypatch):
|
|
56
|
+
monkeypatch.setenv("OPENAI_API_KEY", "unit-test-placeholder")
|
|
57
|
+
monkeypatch.setenv("ANTHROPIC_API_KEY", "unit-test-placeholder")
|
|
58
|
+
module = import_module(client_type.__module__)
|
|
59
|
+
if client_type is AnthropicBedrockChatCompletionClient:
|
|
60
|
+
monkeypatch.setattr(module, "AsyncAnthropicBedrock", Mock())
|
|
61
|
+
factory = client_type.from_region
|
|
62
|
+
elif client_type is CohereBedrockEmbeddingClient:
|
|
63
|
+
factory = client_type.from_region
|
|
64
|
+
else:
|
|
65
|
+
sdk_name = (
|
|
66
|
+
"AsyncAnthropic"
|
|
67
|
+
if client_type is AnthropicChatCompletionClient
|
|
68
|
+
else "AsyncOpenAI"
|
|
69
|
+
)
|
|
70
|
+
monkeypatch.setattr(module, sdk_name, Mock())
|
|
71
|
+
factory = client_type.from_api_key
|
|
72
|
+
|
|
73
|
+
instance = factory(model="deployment-xyz", pricing_model=canonical)
|
|
74
|
+
assert instance.pricing_model == canonical
|
|
75
|
+
config = instance._to_config()
|
|
76
|
+
# Cross a JSON boundary, as saved components do.
|
|
77
|
+
restored = client_type._from_config(
|
|
78
|
+
type(config).model_validate_json(config.model_dump_json())
|
|
79
|
+
)
|
|
80
|
+
assert restored.model == "deployment-xyz"
|
|
81
|
+
assert restored.pricing_model == canonical
|
|
82
|
+
assert restored._estimate_cost(*tokens) == instance._estimate_cost(*tokens)
|
|
83
|
+
legacy = type(config).model_validate({"model": canonical})
|
|
84
|
+
assert legacy.pricing_model is None
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
@pytest.mark.parametrize(
|
|
88
|
+
"model,rates",
|
|
89
|
+
[
|
|
90
|
+
("gpt-6.1-sol", (2, 10, 0.1, 2.5)),
|
|
91
|
+
("gpt-6-astra", (10, 50, 1, 12.5)),
|
|
92
|
+
("gpt-6-luna", (0.1, 0.5, 0.01, 0.125)),
|
|
93
|
+
("claude-sonnet-5-5", (2, 10, 0.1, 2.5)),
|
|
94
|
+
("claude-opus-5-5", (4, 20, 0.2, 5)),
|
|
95
|
+
("claude-fable-5-1", (10, 50, 0.25, 12.5)),
|
|
96
|
+
("claude-sonnet-5", (2, 10, 0.2, 2.5)),
|
|
97
|
+
("claude-opus-5", (5, 25, 0.5, 6.25)),
|
|
98
|
+
("claude-fable-5", (10, 50, 1, 12.5)),
|
|
99
|
+
("claude-mythos-5", (10, 50, 1, 12.5)),
|
|
100
|
+
("claude-mythos-5-1", (10, 50, 0.25, 12.5)),
|
|
101
|
+
("claude-haiku-5-5", (0.1, 0.5, 0.01, 0.125)),
|
|
102
|
+
],
|
|
103
|
+
)
|
|
104
|
+
def test_catalog_rates_and_cached_cost(model, rates, caplog):
|
|
105
|
+
resolver = (
|
|
106
|
+
PricingRegistry.resolve_openai_chat_pricing
|
|
107
|
+
if model.startswith("gpt")
|
|
108
|
+
else PricingRegistry.resolve_anthropic_chat_pricing
|
|
109
|
+
)
|
|
110
|
+
pricing = resolver(model)
|
|
111
|
+
assert (
|
|
112
|
+
pricing.input_per_1m,
|
|
113
|
+
pricing.output_per_1m,
|
|
114
|
+
pricing.cached_input_per_1m,
|
|
115
|
+
pricing.cache_write_per_1m,
|
|
116
|
+
) == rates
|
|
117
|
+
assert pricing.calculate_cost(1000, 200, 600) == pytest.approx(
|
|
118
|
+
(400 * rates[0] + 600 * rates[2] + 200 * rates[1]) / 1_000_000
|
|
119
|
+
)
|
|
120
|
+
assert not caplog.records
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
@pytest.mark.parametrize("model", list(PricingRegistry.ANTHROPIC_CHAT_PRICING))
|
|
124
|
+
def test_anthropic_exact_entries_win_over_nested_prefixes(model):
|
|
125
|
+
pricing = PricingRegistry.ANTHROPIC_CHAT_PRICING[model]
|
|
126
|
+
assert PricingRegistry.resolve_anthropic_chat_pricing(model) is pricing
|
|
127
|
+
assert (
|
|
128
|
+
PricingRegistry.resolve_anthropic_chat_pricing(model + "-20261023") is pricing
|
|
129
|
+
)
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
def test_bedrock_legacy_normalization_and_explicit_alias():
|
|
133
|
+
legacy = AnthropicBedrockChatCompletionClient(
|
|
134
|
+
model="eu.anthropic.claude-sonnet-5-5-v1:0", client=Mock()
|
|
135
|
+
)
|
|
136
|
+
explicit = AnthropicBedrockChatCompletionClient(
|
|
137
|
+
model="opaque-profile", pricing_model="claude-sonnet-5-5", client=Mock()
|
|
138
|
+
)
|
|
139
|
+
assert legacy._estimate_cost(1000, 200, 600) == explicit._estimate_cost(
|
|
140
|
+
1000, 200, 600
|
|
141
|
+
)
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
@pytest.mark.asyncio
|
|
145
|
+
@pytest.mark.parametrize(
|
|
146
|
+
"client_type,canonical",
|
|
147
|
+
[
|
|
148
|
+
(OpenAIChatCompletionClient, "gpt-6.1-sol"),
|
|
149
|
+
(AnthropicChatCompletionClient, "claude-sonnet-5-5"),
|
|
150
|
+
(AnthropicBedrockChatCompletionClient, "claude-sonnet-5-5"),
|
|
151
|
+
],
|
|
152
|
+
)
|
|
153
|
+
async def test_create_uses_alias_for_cost_but_profile_for_request(
|
|
154
|
+
client_type, canonical, caplog
|
|
155
|
+
):
|
|
156
|
+
from types import SimpleNamespace
|
|
157
|
+
from unittest.mock import AsyncMock
|
|
158
|
+
|
|
159
|
+
from agentbyte.messages import UserMessage
|
|
160
|
+
|
|
161
|
+
if client_type is OpenAIChatCompletionClient:
|
|
162
|
+
response = SimpleNamespace(
|
|
163
|
+
model="account-profile",
|
|
164
|
+
choices=[
|
|
165
|
+
SimpleNamespace(
|
|
166
|
+
message=SimpleNamespace(content="hello", tool_calls=None),
|
|
167
|
+
finish_reason="stop",
|
|
168
|
+
)
|
|
169
|
+
],
|
|
170
|
+
usage=SimpleNamespace(
|
|
171
|
+
prompt_tokens=1000,
|
|
172
|
+
completion_tokens=200,
|
|
173
|
+
prompt_tokens_details=SimpleNamespace(cached_tokens=600),
|
|
174
|
+
),
|
|
175
|
+
)
|
|
176
|
+
create = AsyncMock(return_value=response)
|
|
177
|
+
sdk = SimpleNamespace(
|
|
178
|
+
chat=SimpleNamespace(completions=SimpleNamespace(create=create))
|
|
179
|
+
)
|
|
180
|
+
else:
|
|
181
|
+
response = SimpleNamespace(
|
|
182
|
+
model="account-profile",
|
|
183
|
+
content=[SimpleNamespace(type="text", text="hello")],
|
|
184
|
+
stop_reason="end_turn",
|
|
185
|
+
usage=SimpleNamespace(
|
|
186
|
+
input_tokens=1000, output_tokens=200, cache_read_input_tokens=600
|
|
187
|
+
),
|
|
188
|
+
)
|
|
189
|
+
create = AsyncMock(return_value=response)
|
|
190
|
+
sdk = SimpleNamespace(messages=SimpleNamespace(create=create))
|
|
191
|
+
client = client_type(model="account-profile", pricing_model=canonical, client=sdk)
|
|
192
|
+
result = await client.create([UserMessage(content="hi", source="user")])
|
|
193
|
+
assert create.call_args.kwargs["model"] == "account-profile"
|
|
194
|
+
assert "pricing_model" not in create.call_args.kwargs
|
|
195
|
+
assert result.message.content == "hello"
|
|
196
|
+
assert result.usage.cost_estimate == pytest.approx(0.00286)
|
|
197
|
+
assert not [r for r in caplog.records if "pricing" in r.message.lower()]
|