agentbyte 0.24.0__tar.gz → 0.24.2__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.24.0 → agentbyte-0.24.2}/.gitignore +7 -3
- {agentbyte-0.24.0 → agentbyte-0.24.2}/CHANGELOG.md +23 -0
- agentbyte-0.24.2/PKG-INFO +443 -0
- agentbyte-0.24.2/README.md +362 -0
- agentbyte-0.24.2/src/agentbyte/__about__.py +2 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/agents/agent.py +4 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/llm/azure/chat.py +18 -3
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/llm/openai/chat.py +18 -3
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/llm/types.py +25 -4
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/messages.py +8 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/tests/dataset/test_loader.py +1 -1
- {agentbyte-0.24.0 → agentbyte-0.24.2}/tests/dataset/test_multi_table.py +1 -1
- {agentbyte-0.24.0 → agentbyte-0.24.2}/tests/llm/test_azure_client.py +69 -1
- {agentbyte-0.24.0 → agentbyte-0.24.2}/tests/llm/test_openai_client.py +70 -1
- agentbyte-0.24.0/PKG-INFO +0 -326
- agentbyte-0.24.0/README.md +0 -245
- agentbyte-0.24.0/src/agentbyte/__about__.py +0 -2
- agentbyte-0.24.0/src/agentbyte/llm/openai.py +0 -12
- agentbyte-0.24.0/src/agentbyte/webui/frontend/.gitignore +0 -22
- agentbyte-0.24.0/src/agentbyte/webui/frontend/README.md +0 -69
- agentbyte-0.24.0/src/agentbyte/webui/frontend/components.json +0 -21
- agentbyte-0.24.0/src/agentbyte/webui/frontend/eslint.config.js +0 -23
- agentbyte-0.24.0/src/agentbyte/webui/frontend/index.html +0 -12
- agentbyte-0.24.0/src/agentbyte/webui/frontend/package-lock.json +0 -5426
- agentbyte-0.24.0/src/agentbyte/webui/frontend/package.json +0 -49
- agentbyte-0.24.0/src/agentbyte/webui/frontend/plan.md +0 -0
- agentbyte-0.24.0/src/agentbyte/webui/frontend/src/App.css +0 -42
- agentbyte-0.24.0/src/agentbyte/webui/frontend/src/App.tsx +0 -460
- agentbyte-0.24.0/src/agentbyte/webui/frontend/src/assets/react.svg +0 -1
- agentbyte-0.24.0/src/agentbyte/webui/frontend/src/components/agent/agent-view.tsx +0 -329
- agentbyte-0.24.0/src/agentbyte/webui/frontend/src/components/message_renderer/ContentRenderer.tsx +0 -275
- agentbyte-0.24.0/src/agentbyte/webui/frontend/src/components/message_renderer/MessageRenderer.tsx +0 -20
- agentbyte-0.24.0/src/agentbyte/webui/frontend/src/components/message_renderer/index.ts +0 -7
- agentbyte-0.24.0/src/agentbyte/webui/frontend/src/components/message_renderer/types.ts +0 -24
- agentbyte-0.24.0/src/agentbyte/webui/frontend/src/components/mode-toggle.tsx +0 -39
- agentbyte-0.24.0/src/agentbyte/webui/frontend/src/components/orchestrator/orchestrator-view.tsx +0 -608
- agentbyte-0.24.0/src/agentbyte/webui/frontend/src/components/shared/app-header.tsx +0 -53
- agentbyte-0.24.0/src/agentbyte/webui/frontend/src/components/shared/chat-base.tsx +0 -296
- agentbyte-0.24.0/src/agentbyte/webui/frontend/src/components/shared/context-inspector.tsx +0 -460
- agentbyte-0.24.0/src/agentbyte/webui/frontend/src/components/shared/debug-panel.tsx +0 -366
- agentbyte-0.24.0/src/agentbyte/webui/frontend/src/components/shared/entity-selector.tsx +0 -242
- agentbyte-0.24.0/src/agentbyte/webui/frontend/src/components/shared/example-tasks-display.tsx +0 -41
- agentbyte-0.24.0/src/agentbyte/webui/frontend/src/components/shared/session-switcher.tsx +0 -202
- agentbyte-0.24.0/src/agentbyte/webui/frontend/src/components/shared/tool-approval-banner.tsx +0 -142
- agentbyte-0.24.0/src/agentbyte/webui/frontend/src/components/theme-provider.tsx +0 -33
- agentbyte-0.24.0/src/agentbyte/webui/frontend/src/components/ui/attachment-gallery.tsx +0 -166
- agentbyte-0.24.0/src/agentbyte/webui/frontend/src/components/ui/badge.tsx +0 -36
- agentbyte-0.24.0/src/agentbyte/webui/frontend/src/components/ui/button.tsx +0 -59
- agentbyte-0.24.0/src/agentbyte/webui/frontend/src/components/ui/card.tsx +0 -92
- agentbyte-0.24.0/src/agentbyte/webui/frontend/src/components/ui/dialog.tsx +0 -71
- agentbyte-0.24.0/src/agentbyte/webui/frontend/src/components/ui/dropdown-menu.tsx +0 -255
- agentbyte-0.24.0/src/agentbyte/webui/frontend/src/components/ui/file-upload.tsx +0 -141
- agentbyte-0.24.0/src/agentbyte/webui/frontend/src/components/ui/input.tsx +0 -21
- agentbyte-0.24.0/src/agentbyte/webui/frontend/src/components/ui/label.tsx +0 -22
- agentbyte-0.24.0/src/agentbyte/webui/frontend/src/components/ui/loading-spinner.tsx +0 -23
- agentbyte-0.24.0/src/agentbyte/webui/frontend/src/components/ui/loading-state.tsx +0 -52
- agentbyte-0.24.0/src/agentbyte/webui/frontend/src/components/ui/message-input.tsx +0 -237
- agentbyte-0.24.0/src/agentbyte/webui/frontend/src/components/ui/scroll-area.tsx +0 -46
- agentbyte-0.24.0/src/agentbyte/webui/frontend/src/components/ui/slider.tsx +0 -26
- agentbyte-0.24.0/src/agentbyte/webui/frontend/src/components/ui/tabs.tsx +0 -53
- agentbyte-0.24.0/src/agentbyte/webui/frontend/src/components/ui/textarea.tsx +0 -24
- agentbyte-0.24.0/src/agentbyte/webui/frontend/src/components/workflow/workflow-result-renderer.tsx +0 -508
- agentbyte-0.24.0/src/agentbyte/webui/frontend/src/components/workflow/workflow-view.tsx +0 -486
- agentbyte-0.24.0/src/agentbyte/webui/frontend/src/hooks/messageHandlers.ts +0 -305
- agentbyte-0.24.0/src/agentbyte/webui/frontend/src/hooks/useEntityExecution.ts +0 -451
- agentbyte-0.24.0/src/agentbyte/webui/frontend/src/index.css +0 -147
- agentbyte-0.24.0/src/agentbyte/webui/frontend/src/lib/format-utils.ts +0 -3
- agentbyte-0.24.0/src/agentbyte/webui/frontend/src/lib/user-id.ts +0 -23
- agentbyte-0.24.0/src/agentbyte/webui/frontend/src/lib/utils.ts +0 -6
- agentbyte-0.24.0/src/agentbyte/webui/frontend/src/main.tsx +0 -18
- agentbyte-0.24.0/src/agentbyte/webui/frontend/src/services/api.ts +0 -361
- agentbyte-0.24.0/src/agentbyte/webui/frontend/src/types/index.ts +0 -52
- agentbyte-0.24.0/src/agentbyte/webui/frontend/src/types/picoagents.ts +0 -276
- agentbyte-0.24.0/src/agentbyte/webui/frontend/src/utils/message-utils.ts +0 -149
- agentbyte-0.24.0/src/agentbyte/webui/frontend/src/vite-env.d.ts +0 -9
- agentbyte-0.24.0/src/agentbyte/webui/frontend/tsconfig.app.json +0 -31
- agentbyte-0.24.0/src/agentbyte/webui/frontend/tsconfig.json +0 -13
- agentbyte-0.24.0/src/agentbyte/webui/frontend/tsconfig.node.json +0 -25
- agentbyte-0.24.0/src/agentbyte/webui/frontend/vite.config.ts +0 -34
- agentbyte-0.24.0/src/agentbyte/webui/frontend/yarn.lock +0 -2512
- agentbyte-0.24.0/src/agentbyte/webui/ui/vite.svg +0 -1
- {agentbyte-0.24.0 → agentbyte-0.24.2}/LICENSE +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/pyproject.toml +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/__init__.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/agents/__init__.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/agents/agent_as_tool.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/agents/base.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/agents/embedding_agent.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/agents/types.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/cancellation_token.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/catalog.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/cli/__init__.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/cli/main.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/component.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/context.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/context_providers/__init__.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/context_providers/base.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/context_providers/skill_tools.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/context_providers/skills.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/dataset/__init__.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/dataset/base.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/dataset/config.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/dataset/importer.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/dataset/json.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/dataset/loader.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/dataset/publish.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/dataset/publish_config.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/dataset/publishers.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/dataset/sources.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/dataset/sqlite.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/dataset/sqlite_db.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/dataset/write_config.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/dataset/writers.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/entity.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/eval/__init__.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/eval/base.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/eval/checks/__init__.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/eval/checks/decorator.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/eval/checks/keyword.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/eval/checks/local.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/eval/checks/tool.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/eval/checks/types.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/eval/comparison.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/eval/eval_dataset.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/eval/judges/__init__.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/eval/judges/base.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/eval/judges/composite.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/eval/judges/llm.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/eval/judges/pairwise.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/eval/judges/reference.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/eval/pairwise.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/eval/report.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/eval/runner.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/eval/splitting.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/eval/targets/__init__.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/eval/targets/agent.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/eval/targets/model.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/eval/targets/multi_turn.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/eval/targets/orchestrator.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/eval/types.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/llm/__init__.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/llm/_retry_observability.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/llm/auth.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/llm/azure/__init__.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/llm/azure/auth.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/llm/azure/embedding.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/llm/azure/settings.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/llm/azure_openai.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/llm/azure_openai_embedding.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/llm/base.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/llm/embeddings_base.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/llm/openai/__init__.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/llm/openai/embedding.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/llm/openai/settings.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/llm/openai_embedding.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/llm/pricing.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/llm/retry_policy.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/llm/settings.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/logger.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/memory/__init__.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/memory/base.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/middleware/__init__.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/middleware/base.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/middleware/otel.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/middleware/retry.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/middleware/sql_usage.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/middleware/usage_logger.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/notebook.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/orchestration/__init__.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/orchestration/ai.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/orchestration/base.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/orchestration/handoff.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/orchestration/plan.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/orchestration/policies.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/orchestration/round_robin.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/presets/__init__.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/presets/agents.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/presets/clients.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/presets/instruction_registry.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/presets/instructions/orchestrator.yaml +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/presets/instructions/query_rewriter.yaml +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/presets/instructions/researcher.yaml +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/presets/instructions/reviewer.yaml +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/presets/instructions/writer.yaml +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/presets/orchestration.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/presets/skills/contracts-analyst/SKILL.md +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/presets/skills/hr-analyst/SKILL.md +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/presets/skills/hr-analyst/resources/departments.md +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/presets/skills/hr-analyst/resources/employees.md +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/presets/skills/hr-analyst/resources/payroll.md +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/presets/streaming.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/presets/workflow.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/session_store.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/skills/__init__.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/skills/base.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/skills/resources.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/skills/scripts.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/skills/sources.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/termination/__init__.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/termination/base.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/termination/cancellation.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/termination/composite.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/termination/consecutive_agent.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/termination/external.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/termination/function_call.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/termination/handoff.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/termination/max_message.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/termination/predicate.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/termination/source.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/termination/text_mention.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/termination/timeout.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/termination/token_usage.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/tools/__init__.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/tools/base.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/tools/coding_tools.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/tools/core_tools.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/tools/decorator.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/tools/memory_tool.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/tools/research_tools.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/types.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/webui/__init__.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/webui/discovery.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/webui/execution.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/webui/models.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/webui/registry.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/webui/server.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/webui/session_store.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/webui/sessions.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/webui/ui/assets/index-BF3DwXaF.js +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/webui/ui/assets/index-ar5tOeqt.css +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/webui/ui/index.html +0 -0
- {agentbyte-0.24.0/src/agentbyte/webui/frontend/public → agentbyte-0.24.2/src/agentbyte/webui/ui}/vite.svg +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/workflow/__init__.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/workflow/agent.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/workflow/core/__init__.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/workflow/core/_structure_hash.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/workflow/core/checkpoint.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/workflow/core/models.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/workflow/core/runner.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/workflow/core/workflow.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/workflow/defaults.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/workflow/loader.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/workflow/schema.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/workflow/schema_utils.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/workflow/steps/__init__.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/workflow/steps/agentbyte_agent.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/workflow/steps/echo.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/workflow/steps/function.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/workflow/steps/http.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/workflow/steps/step.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/workflow/steps/subworkflow.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/workflow/steps/transform.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/src/agentbyte/workflow/visualizer.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/tests/agents/test_agent_as_tool.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/tests/agents/test_agent_basic.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/tests/agents/test_agent_context_providers.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/tests/agents/test_agent_event_types.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/tests/agents/test_agent_memory_integration.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/tests/agents/test_agent_middleware_integration.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/tests/agents/test_agent_response_accessors.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/tests/agents/test_agent_retry_middleware.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/tests/agents/test_agent_stream_events.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/tests/agents/test_embedding_agent.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/tests/agents/test_tool_approval.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/tests/cli/test_registry_check.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/tests/context_providers/__init__.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/tests/context_providers/test_skill_tools.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/tests/context_providers/test_skills_provider.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/tests/dataset/test_publish.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/tests/dataset/test_sqlite_db.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/tests/eval/test_eval_dataset.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/tests/eval/test_multi_turn.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/tests/eval/test_pairwise.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/tests/eval/test_phase1_runner_and_targets.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/tests/eval/test_phase2_checks_and_reports.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/tests/eval/test_splitting.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/tests/eval/test_types_and_judges.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/tests/llm/test_azure_embedding_client.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/tests/llm/test_llm_types.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/tests/llm/test_openai_embedding_client.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/tests/llm/test_pricing.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/tests/llm/test_retry_observability.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/tests/llm/test_retry_policy_api.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/tests/memory/test_memory.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/tests/middleware/test_middleware_chain.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/tests/middleware/test_otel.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/tests/middleware/test_retry_middleware.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/tests/middleware/test_sql_usage.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/tests/middleware/test_usage_logger.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/tests/orchestration/test_ai_orchestrator.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/tests/orchestration/test_base_orchestrator.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/tests/orchestration/test_handoff_orchestrator.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/tests/orchestration/test_plan_orchestrator.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/tests/orchestration/test_round_robin.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/tests/presets/test_agents.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/tests/presets/test_clients.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/tests/presets/test_instruction_registry.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/tests/presets/test_orchestration.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/tests/presets/test_streaming.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/tests/presets/test_workflow.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/tests/skills/__init__.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/tests/skills/test_base.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/tests/skills/test_resources.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/tests/skills/test_scripts.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/tests/skills/test_sources.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/tests/termination/test_base.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/tests/termination/test_cancellation.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/tests/termination/test_composite.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/tests/termination/test_consecutive_agent.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/tests/termination/test_external.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/tests/termination/test_function_call.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/tests/termination/test_handoff.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/tests/termination/test_max_message.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/tests/termination/test_predicate.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/tests/termination/test_source.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/tests/termination/test_text_mention.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/tests/termination/test_timeout.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/tests/termination/test_token_usage.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/tests/test_cancellation_token.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/tests/test_context.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/tests/test_logger.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/tests/test_messages.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/tests/test_package_api.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/tests/test_session_store.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/tests/test_types.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/tests/tools/test_coding_tools.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/tests/tools/test_memory_tool.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/tests/tools/test_research_tools.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/tests/tools/test_tools.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/tests/webui/__init__.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/tests/webui/helpers.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/tests/webui/test_execution.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/tests/webui/test_package_api.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/tests/webui/test_registry.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/tests/webui/test_server.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/tests/webui/test_sessions.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/tests/workflow/test_checkpoint.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/tests/workflow/test_subworkflow_step.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/tests/workflow/test_workflow_agent.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/tests/workflow/test_workflow_class.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/tests/workflow/test_workflow_models.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/tests/workflow/test_workflow_runner.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/tests/workflow/test_workflow_schema.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/tests/workflow/test_workflow_steps.py +0 -0
- {agentbyte-0.24.0 → agentbyte-0.24.2}/tests/workflow/test_workflow_visualizer.py +0 -0
|
@@ -49,14 +49,18 @@ htmlcov/
|
|
|
49
49
|
**/.sessions/
|
|
50
50
|
|
|
51
51
|
docs/chapters/
|
|
52
|
-
data/Designing-Multi-Agent-Systems.pdf
|
|
53
|
-
data/eval/
|
|
54
52
|
docs/book-designing-multi-agent-system.md
|
|
53
|
+
data/Designing-Multi-Agent-Systems.pdf
|
|
54
|
+
data/datasets/sqlite/
|
|
55
|
+
data/datasets/sqlite_db/
|
|
55
56
|
artifacts/
|
|
56
57
|
|
|
57
58
|
# Machine-local agent config (each machine maintains its own)
|
|
58
59
|
AGENTS.LOCAL.md
|
|
59
|
-
|
|
60
|
+
|
|
61
|
+
# Flat raw files (PDFs, xlsx, etc.): keep the directory via .gitkeep, ignore contents
|
|
62
|
+
data/flatfiles/*
|
|
63
|
+
!data/flatfiles/.gitkeep
|
|
60
64
|
|
|
61
65
|
# lean-ctx context runtime cache
|
|
62
66
|
.lean-ctx/
|
|
@@ -6,6 +6,29 @@ The format follows Keep a Changelog principles and semantic versioning.
|
|
|
6
6
|
|
|
7
7
|
## [Unreleased]
|
|
8
8
|
|
|
9
|
+
## [0.24.2] - 2026-08-31
|
|
10
|
+
|
|
11
|
+
### Fixed
|
|
12
|
+
|
|
13
|
+
- Excluded the `frontend/` React/TS source tree (and its lockfiles) from the sdist build target; only the compiled `src/agentbyte/webui/ui` assets are packaged now.
|
|
14
|
+
|
|
15
|
+
## [0.24.1] - 2026-08-28
|
|
16
|
+
|
|
17
|
+
### Fixed
|
|
18
|
+
|
|
19
|
+
- OpenAI and Azure OpenAI chat completion clients now discount cached prompt tokens when estimating cost instead of billing the full prompt at the uncached input rate on every cache hit. `Usage.tokens_cached` reports the cached portion of `response.usage.prompt_tokens_details.cached_tokens`, and `ModelPricing.calculate_cost(..., cached_tokens=...)` bills it at the model's verified `cached_input_per_1m` rate, falling back to the full input rate only when no verified cached rate is on record.
|
|
20
|
+
- `Agent.run()` and `Agent.run_stream()` now aggregate `tokens_cached` from each model call into the final `AgentResponse.usage`. Previously this field was always reported as `0` regardless of actual provider cache hits, even though `cost_estimate` was already being discounted correctly.
|
|
21
|
+
- Fixed `tests/dataset/test_loader.py` and `tests/dataset/test_multi_table.py`, which still pointed at the removed `data/samples` directory after the `data/` layout was restructured into `data/flatfiles/` and `data/datasets/`.
|
|
22
|
+
|
|
23
|
+
### Removed
|
|
24
|
+
|
|
25
|
+
- Removed the unreachable legacy `agentbyte.llm.openai` flat-module file (`openai.py`), which was always shadowed by the `agentbyte.llm.openai` package of the same name and never actually importable.
|
|
26
|
+
|
|
27
|
+
### Added
|
|
28
|
+
|
|
29
|
+
- Added `examples/prompt_caching_cost_smoke_test.py`, a live smoke test that verifies prompt-caching cost accounting across `gpt-4.1-mini`, `gpt-4.1`, and `gpt-5.4-mini` through the raw chat completion client.
|
|
30
|
+
- Added `examples/agent_prompt_caching_cost_smoke_test.py`, the same smoke test driven through the `Agent` layer, to verify caching accounting survives the agent execution loop.
|
|
31
|
+
|
|
9
32
|
## [0.24.0] - 2026-08-27
|
|
10
33
|
|
|
11
34
|
### Changed
|
|
@@ -0,0 +1,443 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: agentbyte
|
|
3
|
+
Version: 0.24.2
|
|
4
|
+
Summary: A toolkit for designing multiagent systems
|
|
5
|
+
Author-email: MrDataPsycho <mr.data.psycho@gmail.com>
|
|
6
|
+
License-Expression: LicenseRef-Proprietary
|
|
7
|
+
License-File: LICENSE
|
|
8
|
+
Requires-Python: >=3.11
|
|
9
|
+
Requires-Dist: httpx>=0.28.1
|
|
10
|
+
Requires-Dist: pydantic-settings>=2.13.0
|
|
11
|
+
Requires-Dist: pydantic>=2.12.5
|
|
12
|
+
Requires-Dist: pyyaml>=6.0.3
|
|
13
|
+
Provides-Extra: all
|
|
14
|
+
Requires-Dist: aioboto3>=15.5.0; extra == 'all'
|
|
15
|
+
Requires-Dist: aiosqlite>=0.22.1; extra == 'all'
|
|
16
|
+
Requires-Dist: arxiv>=2.1; extra == 'all'
|
|
17
|
+
Requires-Dist: asyncpg>=0.31.0; extra == 'all'
|
|
18
|
+
Requires-Dist: azure-identity>=1.25.1; extra == 'all'
|
|
19
|
+
Requires-Dist: beautifulsoup4>=4.12; extra == 'all'
|
|
20
|
+
Requires-Dist: fastapi>=0.135.2; extra == 'all'
|
|
21
|
+
Requires-Dist: graphviz>=0.21; extra == 'all'
|
|
22
|
+
Requires-Dist: html2text>=2024.2; extra == 'all'
|
|
23
|
+
Requires-Dist: openai>=1.107.1; extra == 'all'
|
|
24
|
+
Requires-Dist: opentelemetry-api>=1.39.1; extra == 'all'
|
|
25
|
+
Requires-Dist: opentelemetry-exporter-otlp-proto-http>=1.39.1; extra == 'all'
|
|
26
|
+
Requires-Dist: opentelemetry-sdk>=1.39.1; extra == 'all'
|
|
27
|
+
Requires-Dist: sqlalchemy>=2.0.43; extra == 'all'
|
|
28
|
+
Requires-Dist: sqlmodel>=0.0.38; extra == 'all'
|
|
29
|
+
Requires-Dist: uvicorn>=0.42.0; extra == 'all'
|
|
30
|
+
Requires-Dist: youtube-transcript-api>=0.6; extra == 'all'
|
|
31
|
+
Provides-Extra: aws
|
|
32
|
+
Requires-Dist: aioboto3>=15.5.0; extra == 'aws'
|
|
33
|
+
Provides-Extra: azureopenai
|
|
34
|
+
Requires-Dist: azure-identity>=1.25.1; extra == 'azureopenai'
|
|
35
|
+
Requires-Dist: openai>=1.107.1; extra == 'azureopenai'
|
|
36
|
+
Provides-Extra: coding
|
|
37
|
+
Provides-Extra: dataset
|
|
38
|
+
Requires-Dist: aiosqlite>=0.22.1; extra == 'dataset'
|
|
39
|
+
Provides-Extra: dev
|
|
40
|
+
Requires-Dist: ipykernel>=7.1.0; extra == 'dev'
|
|
41
|
+
Requires-Dist: nbclient>=0.10.4; extra == 'dev'
|
|
42
|
+
Requires-Dist: nbformat>=5.10.4; extra == 'dev'
|
|
43
|
+
Requires-Dist: picoagents>=0.4.0; extra == 'dev'
|
|
44
|
+
Requires-Dist: pydantic-settings>=2.13.0; extra == 'dev'
|
|
45
|
+
Requires-Dist: pymupdf-layout>=1.26.6; extra == 'dev'
|
|
46
|
+
Requires-Dist: pymupdf4llm>=0.2.9; extra == 'dev'
|
|
47
|
+
Provides-Extra: openai
|
|
48
|
+
Requires-Dist: openai>=1.107.1; extra == 'openai'
|
|
49
|
+
Provides-Extra: otel
|
|
50
|
+
Requires-Dist: opentelemetry-api>=1.39.1; extra == 'otel'
|
|
51
|
+
Requires-Dist: opentelemetry-exporter-otlp-proto-http>=1.39.1; extra == 'otel'
|
|
52
|
+
Requires-Dist: opentelemetry-sdk>=1.39.1; extra == 'otel'
|
|
53
|
+
Provides-Extra: research
|
|
54
|
+
Requires-Dist: arxiv>=2.1; extra == 'research'
|
|
55
|
+
Requires-Dist: beautifulsoup4>=4.12; extra == 'research'
|
|
56
|
+
Requires-Dist: html2text>=2024.2; extra == 'research'
|
|
57
|
+
Requires-Dist: youtube-transcript-api>=0.6; extra == 'research'
|
|
58
|
+
Provides-Extra: sql
|
|
59
|
+
Requires-Dist: aiosqlite>=0.22.1; extra == 'sql'
|
|
60
|
+
Requires-Dist: asyncpg>=0.31.0; extra == 'sql'
|
|
61
|
+
Requires-Dist: sqlalchemy>=2.0.43; extra == 'sql'
|
|
62
|
+
Requires-Dist: sqlmodel>=0.0.38; extra == 'sql'
|
|
63
|
+
Provides-Extra: test
|
|
64
|
+
Requires-Dist: aiosqlite>=0.22.1; extra == 'test'
|
|
65
|
+
Requires-Dist: arxiv>=2.1; extra == 'test'
|
|
66
|
+
Requires-Dist: beautifulsoup4>=4.12; extra == 'test'
|
|
67
|
+
Requires-Dist: greenlet>=3.0.0; extra == 'test'
|
|
68
|
+
Requires-Dist: html2text>=2024.2; extra == 'test'
|
|
69
|
+
Requires-Dist: pytest-asyncio>=1.3.0; extra == 'test'
|
|
70
|
+
Requires-Dist: pytest-cov>=7.0.0; extra == 'test'
|
|
71
|
+
Requires-Dist: pytest>=9.0.1; extra == 'test'
|
|
72
|
+
Requires-Dist: ruff>=0.15.0; extra == 'test'
|
|
73
|
+
Requires-Dist: sqlmodel>=0.0.38; extra == 'test'
|
|
74
|
+
Requires-Dist: youtube-transcript-api>=0.6; extra == 'test'
|
|
75
|
+
Provides-Extra: viz
|
|
76
|
+
Requires-Dist: graphviz>=0.21; extra == 'viz'
|
|
77
|
+
Provides-Extra: webui
|
|
78
|
+
Requires-Dist: fastapi>=0.135.2; extra == 'webui'
|
|
79
|
+
Requires-Dist: uvicorn[standard]>=0.44.0; extra == 'webui'
|
|
80
|
+
Description-Content-Type: text/markdown
|
|
81
|
+
|
|
82
|
+
# Agentbyte
|
|
83
|
+
|
|
84
|
+
Agentbyte is an observability-first agentic AI framework for building and studying multiagent systems with a learning-first, implementation-oriented workflow.
|
|
85
|
+
|
|
86
|
+
Current release: **0.24.2**
|
|
87
|
+
|
|
88
|
+
## Building an Agent
|
|
89
|
+
|
|
90
|
+
Every example below builds on the same domain: a customer **support agent**. Start with a plain agent and a model client — no tools, no middleware:
|
|
91
|
+
|
|
92
|
+
```python
|
|
93
|
+
from agentbyte import Agent
|
|
94
|
+
from agentbyte.llm import OpenAIChatCompletionClient
|
|
95
|
+
|
|
96
|
+
model_client = OpenAIChatCompletionClient.from_api_key(model="gpt-4.1-mini")
|
|
97
|
+
|
|
98
|
+
support_agent = Agent(
|
|
99
|
+
name="support_agent",
|
|
100
|
+
description="Answers customer support questions about orders and shipping.",
|
|
101
|
+
instructions="You are a helpful support agent. Be concise and accurate.",
|
|
102
|
+
model_client=model_client,
|
|
103
|
+
)
|
|
104
|
+
|
|
105
|
+
response = await support_agent.run("Where is my order #1234?")
|
|
106
|
+
|
|
107
|
+
print(response.final_message.content)
|
|
108
|
+
print(response.usage) # tokens, cost, cache hits
|
|
109
|
+
print(response.finish_reason) # "stop" | "max_iterations" | ...
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
`run()` executes to completion and returns one `AgentResponse`. For live progress — token-by-token streaming, tool calls as they happen — use `run_stream()` instead, which yields events and finishes with that same `AgentResponse`:
|
|
113
|
+
|
|
114
|
+
```python
|
|
115
|
+
async for item in support_agent.run_stream("Where is my order #1234?", verbose=True):
|
|
116
|
+
print(item)
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
## Adding Tools
|
|
120
|
+
|
|
121
|
+
A support agent is only useful once it can look things up. Turn any function into a tool with `@tool`; gate risky ones with `approval_mode`:
|
|
122
|
+
|
|
123
|
+
```python
|
|
124
|
+
from agentbyte import Agent
|
|
125
|
+
from agentbyte.tools import ApprovalMode, tool
|
|
126
|
+
|
|
127
|
+
@tool
|
|
128
|
+
def get_order_status(order_id: str) -> str:
|
|
129
|
+
"""Look up the status of an order."""
|
|
130
|
+
return f"Order {order_id} is in transit."
|
|
131
|
+
|
|
132
|
+
@tool(approval_mode=ApprovalMode.ALWAYS)
|
|
133
|
+
def issue_refund(order_id: str, amount: float) -> str:
|
|
134
|
+
"""Issue a refund for an order (requires human approval)."""
|
|
135
|
+
return f"Refunded ${amount} for order {order_id}"
|
|
136
|
+
|
|
137
|
+
support_agent = Agent(
|
|
138
|
+
name="support_agent",
|
|
139
|
+
description="Answers order/shipping questions and can issue refunds.",
|
|
140
|
+
instructions="Look up orders before answering. Refunds always need approval.",
|
|
141
|
+
model_client=model_client,
|
|
142
|
+
tools=[get_order_status, issue_refund],
|
|
143
|
+
)
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
Agentbyte also ships ready-made tools you can drop in without writing any code — pass them straight into `tools=[...]`:
|
|
147
|
+
|
|
148
|
+
- **Core:** `ThinkTool`, `TaskStatusTool`, `CalculatorTool`, `DateTimeTool`, `JSONParserTool`, `RegexTool` (all at once via `create_core_tools()`)
|
|
149
|
+
- **Coding:** `ReadFileTool`, `WriteFileTool`, `ListDirectoryTool`, `GrepSearchTool`, `BashExecuteTool`, `PythonREPLTool`
|
|
150
|
+
- **Memory:** `MemoryTool` — lets the agent read/write a memory backend (`ListMemory` or `FileMemory`) as a tool call, on top of the automatic context injection every agent already gets
|
|
151
|
+
|
|
152
|
+
## Agentic Workflows
|
|
153
|
+
|
|
154
|
+
When support handling is a fixed multi-step pipeline rather than a single agent call — triage, then route — model it as a `Workflow` instead:
|
|
155
|
+
|
|
156
|
+
```python
|
|
157
|
+
import asyncio
|
|
158
|
+
from pydantic import BaseModel
|
|
159
|
+
from agentbyte.workflow import FunctionStep, StepMetadata, Workflow, WorkflowConfig, WorkflowRunner
|
|
160
|
+
|
|
161
|
+
class TicketInput(BaseModel):
|
|
162
|
+
text: str
|
|
163
|
+
|
|
164
|
+
class TriagedTicket(BaseModel):
|
|
165
|
+
text: str
|
|
166
|
+
priority: str
|
|
167
|
+
|
|
168
|
+
async def triage(input_data: TicketInput, context) -> TriagedTicket:
|
|
169
|
+
priority = "high" if "urgent" in input_data.text.lower() else "normal"
|
|
170
|
+
return TriagedTicket(text=input_data.text, priority=priority)
|
|
171
|
+
|
|
172
|
+
async def route(input_data: TriagedTicket, context) -> TriagedTicket:
|
|
173
|
+
return input_data # e.g. assign to a queue here
|
|
174
|
+
|
|
175
|
+
workflow = Workflow(WorkflowConfig(name="support_ticket_pipeline"))
|
|
176
|
+
workflow.chain(
|
|
177
|
+
FunctionStep("triage", StepMetadata(name="triage"), TicketInput, TriagedTicket, triage),
|
|
178
|
+
FunctionStep("route", StepMetadata(name="route"), TriagedTicket, TriagedTicket, route),
|
|
179
|
+
)
|
|
180
|
+
|
|
181
|
+
execution = asyncio.run(
|
|
182
|
+
WorkflowRunner().run(workflow, {"text": "urgent: order not received"})
|
|
183
|
+
)
|
|
184
|
+
print(execution.state["route_output"])
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
Steps can also wrap an agent (`AgentStep`), call HTTP endpoints (`HttpStep`), transform data (`TransformStep`), or nest another workflow (`SubWorkflowStep`) — with conditional routing, parallel branches, checkpoint/resume, and human-in-the-loop suspend/resume.
|
|
188
|
+
|
|
189
|
+
## Orchestrator Patterns
|
|
190
|
+
|
|
191
|
+
Two different ways to combine multiple agents — pick based on who's in control:
|
|
192
|
+
|
|
193
|
+
- **`AgentAsTool`** — one agent decides *if and when* to delegate. The support agent stays the single decision-maker and calls the billing agent like any other tool.
|
|
194
|
+
- **An orchestrator** (e.g. `RoundRobinOrchestrator`) — a separate controller drives the conversation between agents in turns, until a termination condition fires. Neither agent decides when the other speaks.
|
|
195
|
+
|
|
196
|
+
**Agent as a tool** — the support agent delegates billing questions:
|
|
197
|
+
|
|
198
|
+
```python
|
|
199
|
+
from agentbyte import Agent
|
|
200
|
+
from agentbyte.agents import AgentAsTool
|
|
201
|
+
|
|
202
|
+
billing_agent = Agent(
|
|
203
|
+
name="billing_agent",
|
|
204
|
+
description="Handles billing and refund questions.",
|
|
205
|
+
instructions="Answer billing questions and process refund requests.",
|
|
206
|
+
model_client=model_client,
|
|
207
|
+
)
|
|
208
|
+
|
|
209
|
+
support_agent = Agent(
|
|
210
|
+
name="support_agent",
|
|
211
|
+
description="Front-line support agent that can delegate billing issues.",
|
|
212
|
+
instructions="Handle general support; delegate billing questions to the billing tool.",
|
|
213
|
+
model_client=model_client,
|
|
214
|
+
tools=[AgentAsTool(agent=billing_agent)],
|
|
215
|
+
)
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
**Orchestrated turns** — support and escalation agents collaborate until the ticket is resolved:
|
|
219
|
+
|
|
220
|
+
```python
|
|
221
|
+
from agentbyte import (
|
|
222
|
+
MaxMessageTermination,
|
|
223
|
+
RoundRobinOrchestrator,
|
|
224
|
+
TextMentionTermination,
|
|
225
|
+
UserMessage,
|
|
226
|
+
)
|
|
227
|
+
|
|
228
|
+
orchestrator = RoundRobinOrchestrator(
|
|
229
|
+
agents=[support_agent, escalation_agent],
|
|
230
|
+
termination=TextMentionTermination("RESOLVED") | MaxMessageTermination(6),
|
|
231
|
+
)
|
|
232
|
+
|
|
233
|
+
task = UserMessage(content="Customer says their package never arrived.", source="user")
|
|
234
|
+
async for item in orchestrator.run_stream(task, verbose=True):
|
|
235
|
+
print(item)
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
Other orchestrators follow the same `run()`/`run_stream()` shape: `AIOrchestrator` (a model picks the next speaker), `HandoffOrchestrator` (agents explicitly hand off control), `PlanBasedOrchestrator` (a plan is drafted, then executed step by step).
|
|
239
|
+
|
|
240
|
+
## Middleware
|
|
241
|
+
|
|
242
|
+
Built in: `LoggingMiddleware`, `PIIRedactionMiddleware`, `GuardrailMiddleware`, `MetricsMiddleware`, `RateLimitMiddleware`, `ApprovalMiddleware`, `ContextCompactionMiddleware`, `RetryMiddleware`, `OTelMiddleware`. Attach any combination to the same support agent via `middlewares=[...]`:
|
|
243
|
+
|
|
244
|
+
```python
|
|
245
|
+
from agentbyte import Agent
|
|
246
|
+
from agentbyte.middleware import ApprovalMiddleware, LoggingMiddleware, RateLimitMiddleware
|
|
247
|
+
|
|
248
|
+
support_agent = Agent(
|
|
249
|
+
name="support_agent",
|
|
250
|
+
description="Answers order/shipping questions and can issue refunds.",
|
|
251
|
+
instructions="Look up orders before answering. Refunds always need approval.",
|
|
252
|
+
model_client=model_client,
|
|
253
|
+
tools=[get_order_status, issue_refund],
|
|
254
|
+
middlewares=[
|
|
255
|
+
LoggingMiddleware(),
|
|
256
|
+
RateLimitMiddleware(max_requests=10, window_seconds=60),
|
|
257
|
+
ApprovalMiddleware(tool_names=["issue_refund"]),
|
|
258
|
+
],
|
|
259
|
+
)
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
## Observability-First Telemetry
|
|
263
|
+
|
|
264
|
+
Agentbyte exposes two complementary telemetry layers via `OTelMiddleware`:
|
|
265
|
+
|
|
266
|
+
- **Per-call spans** (`chat <model>`, `tool <name>`, `embedding <model>`) for model/tool/embedding-level diagnostics.
|
|
267
|
+
- **Task-level root span** (`agent <name>`) wrapping every per-call span in one run, carrying the final aggregated usage and outcome.
|
|
268
|
+
|
|
269
|
+
Enable telemetry:
|
|
270
|
+
|
|
271
|
+
```bash
|
|
272
|
+
export AGENTBYTE_ENABLE_OTEL=true
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
Per-call span attributes emitted by `OTelMiddleware`:
|
|
276
|
+
|
|
277
|
+
- `gen_ai.system`, `gen_ai.operation.name`, `gen_ai.agent.name`, `gen_ai.session.id`
|
|
278
|
+
- `gen_ai.request.model`, `gen_ai.response.model`, `gen_ai.response.finish_reason`
|
|
279
|
+
- `gen_ai.usage.input_tokens`, `gen_ai.usage.output_tokens`, `gen_ai.usage.total_tokens`, `gen_ai.usage.cost_estimate_usd`
|
|
280
|
+
- `gen_ai.tool.name`, `gen_ai.tool.success`
|
|
281
|
+
- `gen_ai.embedding.input_count`, `gen_ai.embedding.output_count`
|
|
282
|
+
- `gen_ai.input.messages`, `gen_ai.output.messages`, `gen_ai.tool.parameters`, `gen_ai.tool.result` (opt-in content capture — only when `AGENTBYTE_OTEL_CAPTURE_CONTENT=true`, since these can carry PII)
|
|
283
|
+
|
|
284
|
+
Reading a trace: `chat gpt-4.1-mini` spans show **per-call** usage/cost/finish reason; the wrapping `agent <name>` span shows the **final accumulated** usage and task outcome for the whole `run()`/`run_stream()` call.
|
|
285
|
+
|
|
286
|
+
## Installation
|
|
287
|
+
|
|
288
|
+
Python requirement: **3.11+**
|
|
289
|
+
|
|
290
|
+
```bash
|
|
291
|
+
uv sync --all-groups
|
|
292
|
+
```
|
|
293
|
+
|
|
294
|
+
Optional extras:
|
|
295
|
+
|
|
296
|
+
```bash
|
|
297
|
+
uv sync --extra openai
|
|
298
|
+
uv sync --extra azureopenai
|
|
299
|
+
uv sync --extra otel
|
|
300
|
+
uv sync --extra webui
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
### Install in another project (pip / uv add)
|
|
304
|
+
|
|
305
|
+
Use extras to enable provider + telemetry support:
|
|
306
|
+
|
|
307
|
+
```bash
|
|
308
|
+
pip install "agentbyte[azureopenai,otel]"
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
```bash
|
|
312
|
+
uv add "agentbyte[azureopenai,otel]"
|
|
313
|
+
```
|
|
314
|
+
|
|
315
|
+
For the browser WebUI:
|
|
316
|
+
|
|
317
|
+
```bash
|
|
318
|
+
pip install "agentbyte[webui]"
|
|
319
|
+
# or
|
|
320
|
+
uv add "agentbyte[webui]"
|
|
321
|
+
```
|
|
322
|
+
|
|
323
|
+
Install all optional features:
|
|
324
|
+
|
|
325
|
+
```bash
|
|
326
|
+
pip install "agentbyte[all]"
|
|
327
|
+
# or
|
|
328
|
+
uv add "agentbyte[all]"
|
|
329
|
+
```
|
|
330
|
+
|
|
331
|
+
Note: the Azure extra is `azureopenai`.
|
|
332
|
+
|
|
333
|
+
## Run The WebUI
|
|
334
|
+
|
|
335
|
+
### Option 1: Run the preset-backed app
|
|
336
|
+
|
|
337
|
+
This is the easiest way to see the WebUI working end to end with real preset entities:
|
|
338
|
+
- preset agents
|
|
339
|
+
- preset orchestrators
|
|
340
|
+
- preset workflow
|
|
341
|
+
|
|
342
|
+
Step 1. Install the WebUI extra:
|
|
343
|
+
|
|
344
|
+
```bash
|
|
345
|
+
uv sync --extra webui
|
|
346
|
+
```
|
|
347
|
+
|
|
348
|
+
Step 2. Start the preset-backed app:
|
|
349
|
+
|
|
350
|
+
```bash
|
|
351
|
+
uv run python examples/webui/presets_webui.py
|
|
352
|
+
```
|
|
353
|
+
|
|
354
|
+
Step 3. Open the browser:
|
|
355
|
+
|
|
356
|
+
```text
|
|
357
|
+
http://127.0.0.1:8080
|
|
358
|
+
```
|
|
359
|
+
|
|
360
|
+
If auto-open is enabled in your environment, the browser may open automatically.
|
|
361
|
+
|
|
362
|
+
### Option 2: Run the WebUI against your current project directory
|
|
363
|
+
|
|
364
|
+
Use this when you want Agentbyte to scan a directory for exported `agent`, `workflow`, or `orchestrator` objects.
|
|
365
|
+
|
|
366
|
+
Important: discovery is convention-based. The scanned directory must contain Python modules that expose top-level variables literally named `agent`, `workflow`, or `orchestrator`. If you point `--dir` at a folder that does not export those names, the UI will load but show `No entities found`.
|
|
367
|
+
|
|
368
|
+
Step 1. Install the WebUI extra:
|
|
369
|
+
|
|
370
|
+
```bash
|
|
371
|
+
uv sync --extra webui
|
|
372
|
+
```
|
|
373
|
+
|
|
374
|
+
Step 2. Launch the WebUI and scan the current directory:
|
|
375
|
+
|
|
376
|
+
```bash
|
|
377
|
+
uv run agentbyte webui --dir .
|
|
378
|
+
```
|
|
379
|
+
|
|
380
|
+
Step 3. Open the browser:
|
|
381
|
+
|
|
382
|
+
```text
|
|
383
|
+
http://127.0.0.1:8080
|
|
384
|
+
```
|
|
385
|
+
|
|
386
|
+
Useful variants:
|
|
387
|
+
|
|
388
|
+
```bash
|
|
389
|
+
uv run agentbyte webui --dir . --port 8080 --host 127.0.0.1 --no-open
|
|
390
|
+
uv run agentbyte webui --dir examples --port 8090
|
|
391
|
+
```
|
|
392
|
+
|
|
393
|
+
For this repository, the most reliable first-run path is the preset-backed launcher:
|
|
394
|
+
|
|
395
|
+
```bash
|
|
396
|
+
uv run python examples/webui/presets_webui.py
|
|
397
|
+
```
|
|
398
|
+
|
|
399
|
+
Use `agentbyte webui --dir ...` when you have a directory of exportable demo modules, for example:
|
|
400
|
+
|
|
401
|
+
```python
|
|
402
|
+
# my_entities.py
|
|
403
|
+
agent = ...
|
|
404
|
+
workflow = ...
|
|
405
|
+
orchestrator = ...
|
|
406
|
+
```
|
|
407
|
+
|
|
408
|
+
### Option 3: Run it programmatically
|
|
409
|
+
|
|
410
|
+
Use this when you want to serve in-memory entities directly from Python.
|
|
411
|
+
|
|
412
|
+
```python
|
|
413
|
+
from agentbyte.webui import serve
|
|
414
|
+
|
|
415
|
+
serve(entities=[agent], port=8080, auto_open=True)
|
|
416
|
+
```
|
|
417
|
+
|
|
418
|
+
### Quick Troubleshooting
|
|
419
|
+
|
|
420
|
+
If the app does not start:
|
|
421
|
+
|
|
422
|
+
```bash
|
|
423
|
+
uv sync --extra webui
|
|
424
|
+
```
|
|
425
|
+
|
|
426
|
+
If port `8080` is already in use:
|
|
427
|
+
|
|
428
|
+
```bash
|
|
429
|
+
uv run agentbyte webui --dir . --port 8090
|
|
430
|
+
```
|
|
431
|
+
|
|
432
|
+
If you do not want the browser to open automatically:
|
|
433
|
+
|
|
434
|
+
```bash
|
|
435
|
+
uv run agentbyte webui --dir . --no-open
|
|
436
|
+
```
|
|
437
|
+
|
|
438
|
+
## Development
|
|
439
|
+
|
|
440
|
+
```bash
|
|
441
|
+
uv run ruff check src tests
|
|
442
|
+
uv run pytest tests -v
|
|
443
|
+
```
|