agentbyte 0.7.0__tar.gz → 0.9.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.7.0 → agentbyte-0.9.0}/.github/skills/agentbyte-plan-based-orchestration/SKILL.md +6 -1
- {agentbyte-0.7.0 → agentbyte-0.9.0}/.github/skills/agentbyte-workflow/SKILL.md +56 -8
- {agentbyte-0.7.0 → agentbyte-0.9.0}/CHANGELOG.md +49 -0
- agentbyte-0.9.0/PKG-INFO +319 -0
- agentbyte-0.9.0/README.md +259 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/pyproject.toml +8 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/__about__.py +1 -1
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/__init__.py +2 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/agents/agent.py +3 -0
- agentbyte-0.9.0/src/agentbyte/middleware/sql_usage.py +140 -0
- agentbyte-0.9.0/src/agentbyte/middleware/usage_logger.py +177 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/orchestration/__init__.py +2 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/orchestration/ai.py +8 -1
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/orchestration/base.py +40 -7
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/orchestration/plan.py +8 -15
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/orchestration/policies.py +17 -1
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/orchestration/round_robin.py +3 -1
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/presets/agents.py +11 -7
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/presets/orchestration.py +18 -2
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/presets/workflow.py +53 -6
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/__init__.py +4 -1
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/execution.py +33 -5
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/index.html +1 -2
- agentbyte-0.9.0/src/agentbyte/webui/frontend/package-lock.json +4893 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/package.json +4 -2
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/src/App.tsx +22 -48
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/src/components/agent/agent-view.tsx +21 -4
- agentbyte-0.9.0/src/agentbyte/webui/frontend/src/components/orchestrator/orchestrator-view.tsx +608 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/src/components/shared/app-header.tsx +12 -8
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/src/components/shared/chat-base.tsx +56 -13
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/src/components/shared/debug-panel.tsx +113 -13
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/src/components/shared/entity-selector.tsx +2 -24
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/src/components/shared/session-switcher.tsx +7 -3
- agentbyte-0.9.0/src/agentbyte/webui/frontend/src/components/workflow/workflow-result-renderer.tsx +508 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/src/components/workflow/workflow-view.tsx +97 -33
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/src/hooks/messageHandlers.ts +41 -10
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/src/hooks/useEntityExecution.ts +165 -26
- agentbyte-0.9.0/src/agentbyte/webui/frontend/src/lib/format-utils.ts +3 -0
- agentbyte-0.9.0/src/agentbyte/webui/frontend/src/lib/user-id.ts +23 -0
- agentbyte-0.9.0/src/agentbyte/webui/frontend/src/lib/utils.ts +6 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/src/services/api.ts +102 -31
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/src/types/index.ts +2 -2
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/src/types/picoagents.ts +26 -11
- agentbyte-0.9.0/src/agentbyte/webui/frontend/yarn.lock +2401 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/models.py +32 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/registry.py +1 -1
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/server.py +130 -73
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/sessions.py +69 -4
- agentbyte-0.9.0/src/agentbyte/webui/ui/assets/index-DDp5MYFO.js +82 -0
- agentbyte-0.9.0/src/agentbyte/webui/ui/assets/index-ar5tOeqt.css +1 -0
- agentbyte-0.9.0/src/agentbyte/webui/ui/index.html +13 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/workflow/core/models.py +1 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/workflow/core/runner.py +11 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/workflow/steps/agentbyte_agent.py +20 -3
- agentbyte-0.9.0/tests/middleware/test_sql_usage.py +245 -0
- agentbyte-0.9.0/tests/middleware/test_usage_logger.py +221 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/orchestration/test_base_orchestrator.py +121 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/orchestration/test_plan_orchestrator.py +3 -4
- {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/presets/test_orchestration.py +38 -0
- agentbyte-0.9.0/tests/presets/test_workflow.py +96 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/termination/test_source.py +1 -1
- {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/test_package_api.py +3 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/webui/test_execution.py +34 -2
- {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/webui/test_registry.py +10 -1
- agentbyte-0.9.0/tests/webui/test_server.py +240 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/webui/test_sessions.py +51 -1
- {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/workflow/test_workflow_models.py +21 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/workflow/test_workflow_runner.py +15 -0
- agentbyte-0.7.0/PKG-INFO +0 -433
- agentbyte-0.7.0/README.md +0 -377
- agentbyte-0.7.0/src/agentbyte/webui/agent_framework_devui/ui/assets/index-BzhEszHZ.css +0 -1
- agentbyte-0.7.0/src/agentbyte/webui/agent_framework_devui/ui/assets/index-DByFJNGD.js +0 -245
- agentbyte-0.7.0/src/agentbyte/webui/agent_framework_devui/ui/index.html +0 -14
- agentbyte-0.7.0/src/agentbyte/webui/frontend/src/components/orchestrator/orchestrator-view.tsx +0 -280
- agentbyte-0.7.0/src/agentbyte/webui/frontend/src/components/shared/examples-gallery.tsx +0 -268
- agentbyte-0.7.0/src/agentbyte/webui/frontend/yarn.lock +0 -2282
- agentbyte-0.7.0/src/agentbyte/webui/ui/assets/index-CWk64UM3.js +0 -359
- agentbyte-0.7.0/src/agentbyte/webui/ui/assets/index-vt1cujlT.css +0 -1
- agentbyte-0.7.0/src/agentbyte/webui/ui/index.html +0 -14
- agentbyte-0.7.0/src/agentbyte/webui/ui/vite.svg +0 -1
- agentbyte-0.7.0/tests/presets/test_workflow.py +0 -30
- agentbyte-0.7.0/tests/webui/test_server.py +0 -54
- {agentbyte-0.7.0 → agentbyte-0.9.0}/.github/skills/agentbyte-agent-as-tool/SKILL.md +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/.github/skills/agentbyte-ai-driven-orchestration/SKILL.md +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/.github/skills/agentbyte-dataset/SKILL.md +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/.github/skills/agentbyte-fastapi-sse-streaming/SKILL.md +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/.github/skills/agentbyte-function-tools/SKILL.md +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/.github/skills/agentbyte-handoff-orchestration/SKILL.md +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/.github/skills/agentbyte-list-memory/SKILL.md +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/.github/skills/agentbyte-llm-client/SKILL.md +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/.github/skills/agentbyte-memory-tool/SKILL.md +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/.github/skills/agentbyte-middleware/SKILL.md +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/.github/skills/agentbyte-multi-turn-context/SKILL.md +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/.github/skills/agentbyte-otel-tracing/SKILL.md +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/.github/skills/agentbyte-round-robin-orchestration/SKILL.md +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/.github/skills/agentbyte-simple-agent/SKILL.md +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/.github/skills/agentbyte-tool-approval/SKILL.md +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/.github/skills/skill-authoring/SKILL.md +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/.gitignore +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/LICENSE +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/agents/__init__.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/agents/agent_as_tool.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/agents/base.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/agents/types.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/cancellation_token.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/cli/__init__.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/cli/main.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/component.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/context.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/dataset/__init__.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/dataset/base.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/dataset/config.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/dataset/json.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/dataset/loader.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/dataset/loaders.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/dataset/sources.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/dataset/sqlite.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/entity.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/llm/__init__.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/llm/_retry_observability.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/llm/auth.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/llm/azure/__init__.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/llm/azure/auth.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/llm/azure/chat.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/llm/azure/embedding.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/llm/azure/settings.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/llm/azure_openai.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/llm/azure_openai_embedding.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/llm/base.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/llm/embeddings_base.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/llm/openai/__init__.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/llm/openai/chat.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/llm/openai/embedding.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/llm/openai/settings.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/llm/openai.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/llm/openai_embedding.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/llm/pricing.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/llm/retry_policy.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/llm/settings.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/llm/types.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/memory/__init__.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/memory/base.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/messages.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/microwebui/__init__.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/microwebui/server.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/microwebui/ui/index.html +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/middleware/__init__.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/middleware/base.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/middleware/otel.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/middleware/retry.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/notebook.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/orchestration/handoff.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/presets/__init__.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/presets/clients.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/session_store.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/termination/__init__.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/termination/base.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/termination/cancellation.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/termination/composite.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/termination/consecutive_agent.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/termination/external.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/termination/function_call.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/termination/handoff.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/termination/max_message.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/termination/predicate.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/termination/source.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/termination/text_mention.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/termination/timeout.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/termination/token_usage.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/tools/__init__.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/tools/base.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/tools/core_tools.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/tools/decorator.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/tools/memory_tool.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/types.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/discovery.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/.gitignore +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/README.md +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/components.json +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/eslint.config.js +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/plan.md +0 -0
- {agentbyte-0.7.0/src/agentbyte/webui/agent_framework_devui/ui → agentbyte-0.9.0/src/agentbyte/webui/frontend/public}/vite.svg +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/src/App.css +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/src/assets/react.svg +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/src/components/message_renderer/ContentRenderer.tsx +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/src/components/message_renderer/MessageRenderer.tsx +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/src/components/message_renderer/index.ts +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/src/components/message_renderer/types.ts +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/src/components/mode-toggle.tsx +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/src/components/shared/context-inspector.tsx +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/src/components/shared/example-tasks-display.tsx +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/src/components/shared/tool-approval-banner.tsx +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/src/components/theme-provider.tsx +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/src/components/ui/attachment-gallery.tsx +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/src/components/ui/badge.tsx +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/src/components/ui/button.tsx +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/src/components/ui/card.tsx +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/src/components/ui/dialog.tsx +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/src/components/ui/dropdown-menu.tsx +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/src/components/ui/file-upload.tsx +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/src/components/ui/input.tsx +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/src/components/ui/label.tsx +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/src/components/ui/loading-spinner.tsx +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/src/components/ui/loading-state.tsx +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/src/components/ui/message-input.tsx +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/src/components/ui/scroll-area.tsx +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/src/components/ui/slider.tsx +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/src/components/ui/tabs.tsx +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/src/components/ui/textarea.tsx +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/src/index.css +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/src/main.tsx +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/src/utils/message-utils.ts +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/src/vite-env.d.ts +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/tsconfig.app.json +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/tsconfig.json +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/tsconfig.node.json +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/frontend/vite.config.ts +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/webui/session_store.py +0 -0
- {agentbyte-0.7.0/src/agentbyte/webui/frontend/public → agentbyte-0.9.0/src/agentbyte/webui/ui}/vite.svg +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/workflow/__init__.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/workflow/agent.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/workflow/core/__init__.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/workflow/core/_structure_hash.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/workflow/core/checkpoint.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/workflow/core/workflow.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/workflow/defaults.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/workflow/loader.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/workflow/schema.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/workflow/schema_utils.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/workflow/steps/__init__.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/workflow/steps/echo.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/workflow/steps/function.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/workflow/steps/http.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/workflow/steps/step.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/workflow/steps/subworkflow.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/workflow/steps/transform.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/src/agentbyte/workflow/visualizer.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/agents/test_agent_as_tool.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/agents/test_agent_basic.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/agents/test_agent_event_types.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/agents/test_agent_memory_integration.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/agents/test_agent_middleware_integration.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/agents/test_agent_retry_middleware.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/agents/test_agent_stream_events.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/agents/test_tool_approval.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/cli/test_create_skills.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/dataset/test_loader.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/llm/test_azure_client.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/llm/test_azure_embedding_client.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/llm/test_llm_types.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/llm/test_openai_client.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/llm/test_openai_embedding_client.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/llm/test_retry_observability.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/llm/test_retry_policy_api.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/memory/test_memory.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/middleware/test_middleware_chain.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/middleware/test_otel.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/middleware/test_retry_middleware.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/orchestration/test_ai_orchestrator.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/orchestration/test_handoff_orchestrator.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/orchestration/test_round_robin.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/presets/test_agents.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/presets/test_clients.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/termination/test_base.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/termination/test_cancellation.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/termination/test_composite.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/termination/test_consecutive_agent.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/termination/test_external.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/termination/test_function_call.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/termination/test_handoff.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/termination/test_max_message.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/termination/test_predicate.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/termination/test_text_mention.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/termination/test_timeout.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/termination/test_token_usage.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/test_cancellation_token.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/test_context.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/test_messages.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/test_session_store.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/test_types.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/tools/test_memory_tool.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/tools/test_tools.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/webui/__init__.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/webui/helpers.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/webui/test_package_api.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/workflow/test_checkpoint.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/workflow/test_subworkflow_step.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/workflow/test_workflow_agent.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/workflow/test_workflow_class.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/workflow/test_workflow_schema.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/workflow/test_workflow_steps.py +0 -0
- {agentbyte-0.7.0 → agentbyte-0.9.0}/tests/workflow/test_workflow_visualizer.py +0 -0
{agentbyte-0.7.0 → agentbyte-0.9.0}/.github/skills/agentbyte-plan-based-orchestration/SKILL.md
RENAMED
|
@@ -19,6 +19,7 @@ import asyncio
|
|
|
19
19
|
from agentbyte import (
|
|
20
20
|
Agent,
|
|
21
21
|
AgentHistoryPolicy,
|
|
22
|
+
FinalResultPolicy,
|
|
22
23
|
HistoryContextPolicy,
|
|
23
24
|
PlanBasedOrchestrator,
|
|
24
25
|
ReviewGatePolicy,
|
|
@@ -84,7 +85,11 @@ async def main():
|
|
|
84
85
|
revision_agent_name="writer",
|
|
85
86
|
approval_signal="APPROVED",
|
|
86
87
|
max_revision_rounds=2,
|
|
87
|
-
|
|
88
|
+
),
|
|
89
|
+
final_result_policy=FinalResultPolicy(
|
|
90
|
+
prefer_agent="writer",
|
|
91
|
+
strip_signals=["APPROVED"],
|
|
92
|
+
strip_mode="trailing",
|
|
88
93
|
),
|
|
89
94
|
)
|
|
90
95
|
|
|
@@ -82,7 +82,7 @@ Use `run_stream()` when you need logging, live progress, or execution telemetry.
|
|
|
82
82
|
- `FunctionStep`: wrap sync/async Python functions
|
|
83
83
|
- `TransformStep`: map fields between schemas
|
|
84
84
|
- `HttpStep`: perform HTTP requests
|
|
85
|
-
- `
|
|
85
|
+
- `AgentStep`: wrap an Agentbyte agent inside a deterministic workflow
|
|
86
86
|
- `EchoStep`: simple testing/demo step
|
|
87
87
|
|
|
88
88
|
## Construction Process
|
|
@@ -97,7 +97,7 @@ Use `run_stream()` when you need logging, live progress, or execution telemetry.
|
|
|
97
97
|
- `StepCompletedEvent` and `StepFailedEvent` include `duration_seconds`.
|
|
98
98
|
- `StepStartedEvent` includes `input_data`.
|
|
99
99
|
- `StepCompletedEvent` includes `output_data`.
|
|
100
|
-
- `
|
|
100
|
+
- `context.emit_progress(...)` (`WorkflowContext` method) inside a step produces `StepProgressEvent`.
|
|
101
101
|
- The runner also creates per-step OTel spans when tracing is enabled.
|
|
102
102
|
|
|
103
103
|
## Defaults
|
|
@@ -105,10 +105,57 @@ Use `run_stream()` when you need logging, live progress, or execution telemetry.
|
|
|
105
105
|
- Use `WorkflowRunner.run_stream(...)` when debugging or logging execution.
|
|
106
106
|
- Use `context.emit_progress(...)` for long-running steps that should report intermediate status.
|
|
107
107
|
|
|
108
|
-
## Pattern:
|
|
108
|
+
## Pattern: WorkflowContext — Cross-Step State Sharing
|
|
109
|
+
|
|
110
|
+
Each `FunctionStep` receives a `WorkflowContext` as its second argument.
|
|
111
|
+
Use `context.set()` / `context.get()` to pass values between steps without
|
|
112
|
+
embedding them in typed Pydantic output models.
|
|
113
|
+
|
|
114
|
+
```python
|
|
115
|
+
from agentbyte.workflow import Workflow, WorkflowConfig, WorkflowRunner, WorkflowContext
|
|
116
|
+
from agentbyte.workflow.steps import FunctionStep, StepMetadata
|
|
117
|
+
from pydantic import BaseModel
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
class MyInput(BaseModel):
|
|
121
|
+
value: str
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
class MyOutput(BaseModel):
|
|
125
|
+
value: str
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
def step_a(input_data: MyInput, context: WorkflowContext) -> dict:
|
|
129
|
+
context.set("shared_value", input_data.value.upper())
|
|
130
|
+
return {"value": input_data.value}
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
def step_b(input_data: MyOutput, context: WorkflowContext) -> dict:
|
|
134
|
+
shared = context.get("shared_value", "")
|
|
135
|
+
return {"value": f"Got: {shared}"}
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
workflow = Workflow(WorkflowConfig(name="state_sharing"))
|
|
139
|
+
workflow.chain(
|
|
140
|
+
FunctionStep("step_a", StepMetadata(name="step_a"), MyInput, MyOutput, step_a),
|
|
141
|
+
FunctionStep("step_b", StepMetadata(name="step_b"), MyOutput, MyOutput, step_b),
|
|
142
|
+
)
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
`WorkflowContext` API:
|
|
146
|
+
- `context.set(key, value)` — write into shared workflow state
|
|
147
|
+
- `context.get(key, default)` — read from shared workflow state
|
|
148
|
+
- `context.update({...})` — bulk write
|
|
149
|
+
- `context.emit_progress(message, completed, total)` — emit a `StepProgressEvent`
|
|
150
|
+
- `context.request_input(...)` — suspend and request typed external input
|
|
151
|
+
- `context.request_approval(...)` — suspend and request human approval
|
|
152
|
+
|
|
153
|
+
Import path: `from agentbyte.workflow import WorkflowContext`
|
|
154
|
+
|
|
155
|
+
## Pattern: AgentContext Opt-In with AgentStep
|
|
109
156
|
|
|
110
157
|
Workflows are pipelines — they do not thread conversation history by default.
|
|
111
|
-
When an `
|
|
158
|
+
When an `AgentStep` needs session continuity (e.g., the same agent is
|
|
112
159
|
called across multiple workflow invocations), pass an `AgentContext` via
|
|
113
160
|
`agent_context` on the input model.
|
|
114
161
|
|
|
@@ -118,7 +165,8 @@ import asyncio
|
|
|
118
165
|
from agentbyte.context import AgentContext
|
|
119
166
|
from agentbyte.session_store import CachedFileSessionStore
|
|
120
167
|
from agentbyte.workflow import Workflow, WorkflowConfig, WorkflowRunner
|
|
121
|
-
from agentbyte.workflow.steps import
|
|
168
|
+
from agentbyte.workflow.steps import AgentStep, StepMetadata
|
|
169
|
+
from agentbyte.workflow.steps.agentbyte_agent import AgentbyteAgentInput
|
|
122
170
|
|
|
123
171
|
# Retrieve or create a persistent context for the agent in this step
|
|
124
172
|
store = CachedFileSessionStore(".sessions")
|
|
@@ -126,7 +174,7 @@ session_id = "user-abc"
|
|
|
126
174
|
ctx = await store.get(session_id) or AgentContext(session_id=session_id)
|
|
127
175
|
|
|
128
176
|
# Pass context as part of the step input — it is not coupled to the workflow graph
|
|
129
|
-
step =
|
|
177
|
+
step = AgentStep("writer", StepMetadata(name="writer"), writer_agent)
|
|
130
178
|
workflow = Workflow(WorkflowConfig(name="draft_pipeline"))
|
|
131
179
|
workflow.add_step(step)
|
|
132
180
|
|
|
@@ -143,7 +191,7 @@ await store.save(session_id, ctx)
|
|
|
143
191
|
Two distinct context types coexist in a workflow:
|
|
144
192
|
| Type | Scope | Purpose |
|
|
145
193
|
|------|-------|---------|
|
|
146
|
-
| `
|
|
194
|
+
| `WorkflowContext` | One workflow run | Pass state between steps |
|
|
147
195
|
| `AgentContext` | Across runs | Persist agent conversation history |
|
|
148
196
|
|
|
149
197
|
`agent_context` is always optional. Omit it (or pass `None`) for a stateless
|
|
@@ -154,4 +202,4 @@ step that starts fresh every time.
|
|
|
154
202
|
- Do not skip typed input/output models for non-trivial steps.
|
|
155
203
|
- Do not assume workflow has agent-style middleware; logging should currently be done from streamed workflow events.
|
|
156
204
|
- Prefer checkpoint/resume only when the workflow graph is stable and long-running execution makes it worthwhile.
|
|
157
|
-
- Do not thread `AgentContext` through the
|
|
205
|
+
- Do not thread `AgentContext` through the `WorkflowContext` state dict — keep it in `AgentbyteAgentInput.agent_context`.
|
|
@@ -4,6 +4,55 @@ All notable changes to Agentbyte are documented in this file.
|
|
|
4
4
|
|
|
5
5
|
The format follows Keep a Changelog principles and semantic versioning.
|
|
6
6
|
|
|
7
|
+
## [0.9.0] - 2026-04-14
|
|
8
|
+
|
|
9
|
+
### Added
|
|
10
|
+
|
|
11
|
+
- Added `FinalResultPolicy` Pydantic model to the orchestration layer with `prefer_agent`, `strip_signals`, and `strip_mode` fields for explicit control over which agent message becomes the canonical `final_result`.
|
|
12
|
+
- Added `_generate_final_result`, `_select_final_message`, and `_strip_signals` methods to `BaseOrchestrator`, replacing the bare last-assistant-message read with a policy-driven selection algorithm.
|
|
13
|
+
- Wired `FinalResultPolicy` into `RoundRobinOrchestrator`, `AIOrchestrator`, and `PlanBasedOrchestrator` constructors and into all three preset builders in `agentbyte.presets`.
|
|
14
|
+
- Added `FinalResultPolicy` to the `agentbyte.orchestration` and root `agentbyte` public exports.
|
|
15
|
+
- Added `final_result` and `stop_reason` fields to `SessionMessagesResponse` so orchestrator session reloads include the persisted primary answer.
|
|
16
|
+
- Added orchestrator-specific final-first presentation to the WebUI: the main chat surface shows only the user prompt and `final_result`, with agent turn-taking inside a collapsible inline Thinking section.
|
|
17
|
+
- Added `final_result` and `stop_reason` persistence to orchestrator session metadata on both streaming and non-streaming paths in the execution engine.
|
|
18
|
+
|
|
19
|
+
### Changed
|
|
20
|
+
|
|
21
|
+
- Tightened writer preset prompt to prevent coordinator drift: writer now produces the final draft immediately without asking questions or suggesting additions.
|
|
22
|
+
- Tightened reviewer preset prompt to enforce binary output: reviewer outputs only the approval signal or one specific revision sentence, no production or formatting suggestions.
|
|
23
|
+
- Updated all three preset orchestrators to supply a `FinalResultPolicy` aligned with their control flow (TERMINATE strip for round-robin, APPROVED strip for AI-driven and plan-based).
|
|
24
|
+
- Updated notebook `08.1-default-presets.ipynb` and `agentbyte-plan-based-orchestration` skill to use `FinalResultPolicy` instead of the removed `prefer_final_result_from_agent` field.
|
|
25
|
+
|
|
26
|
+
### Fixed
|
|
27
|
+
|
|
28
|
+
- Fixed orchestrator `final_result` always returning the reviewer's approval signal instead of the writer's output by implementing `FinalResultPolicy.prefer_agent` selection logic.
|
|
29
|
+
- Fixed `_strip_signals` anywhere-mode to be truly case-insensitive using `re.IGNORECASE` instead of string replace variants.
|
|
30
|
+
|
|
31
|
+
### Breaking Changes
|
|
32
|
+
|
|
33
|
+
- Removed `ReviewGatePolicy.prefer_final_result_from_agent`. Migrate to `FinalResultPolicy(prefer_agent=...)` passed directly to the orchestrator constructor.
|
|
34
|
+
|
|
35
|
+
## [0.8.0] - 2026-04-13
|
|
36
|
+
|
|
37
|
+
### Added
|
|
38
|
+
|
|
39
|
+
- Added SQL-backed usage logging middleware with a typed persistence contract plus SQLModel-backed storage for LLM usage records.
|
|
40
|
+
- Added `examples/webui/in_memory.py` and `examples/webui/presets_webui.py` as concrete launchers for the packaged AgentByte WebUI.
|
|
41
|
+
- Added plan-based orchestration to the preset-backed WebUI catalog so round-robin, AI-driven, and plan-based teams are all selectable from the same real-entities launcher.
|
|
42
|
+
|
|
43
|
+
### Changed
|
|
44
|
+
|
|
45
|
+
- Completed the `agentbyte.webui` session contract: WebUI sessions now support `user_id`, stricter session/entity binding, and injected durable session stores for persisted `AgentContext` reload across restarts.
|
|
46
|
+
- Rebased and adapted the packaged WebUI frontend to AgentByte's backend contracts, including fixed session query handling, stable post-stream message refresh, richer workflow result rendering, cleaner orchestration event classification, and improved debug-panel payload inspection.
|
|
47
|
+
- Extended agent and orchestrator WebUI usage surfaces to show both token counts and cost estimates when providers supply pricing data.
|
|
48
|
+
- Removed the unused bundled examples-gallery flow and other stale picoagents-only frontend assumptions from the packaged WebUI.
|
|
49
|
+
|
|
50
|
+
### Fixed
|
|
51
|
+
|
|
52
|
+
- Fixed agent stream completion handling in the WebUI so final agent state events no longer fall through to `unknown`, immediate UI finalization works again, and post-stream session refresh reliably recalculates session totals.
|
|
53
|
+
- Fixed round-robin and other orchestrator debug events so lifecycle payloads render as labeled orchestration events instead of opaque `unknown` entries.
|
|
54
|
+
- Fixed workflow completion rendering so the WebUI shows terminal workflow outputs directly instead of dumping the raw completion envelope.
|
|
55
|
+
|
|
7
56
|
## [0.7.0] - 2026-04-09
|
|
8
57
|
|
|
9
58
|
### Added
|
agentbyte-0.9.0/PKG-INFO
ADDED
|
@@ -0,0 +1,319 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: agentbyte
|
|
3
|
+
Version: 0.9.0
|
|
4
|
+
Summary: A toolkit for designing multiagent systems
|
|
5
|
+
Project-URL: Homepage, https://gitlab.com/pyninja/aiengineering/agentbyte
|
|
6
|
+
Project-URL: Repository, https://gitlab.com/pyninja/aiengineering/agentbyte
|
|
7
|
+
Project-URL: Issues, https://gitlab.com/pyninja/aiengineering/agentbyte/-/issues
|
|
8
|
+
Project-URL: Changelog, https://gitlab.com/pyninja/aiengineering/agentbyte/-/blob/main/CHANGELOG.md
|
|
9
|
+
Author-email: MrDataPsycho <mr.data.psycho@gmail.com>
|
|
10
|
+
License-Expression: MIT
|
|
11
|
+
License-File: LICENSE
|
|
12
|
+
Requires-Python: >=3.11
|
|
13
|
+
Requires-Dist: httpx>=0.28.1
|
|
14
|
+
Requires-Dist: pydantic-settings>=2.13.0
|
|
15
|
+
Requires-Dist: pydantic>=2.12.5
|
|
16
|
+
Provides-Extra: all
|
|
17
|
+
Requires-Dist: aioboto3>=15.5.0; extra == 'all'
|
|
18
|
+
Requires-Dist: azure-identity>=1.25.1; extra == 'all'
|
|
19
|
+
Requires-Dist: boto3; extra == 'all'
|
|
20
|
+
Requires-Dist: fastapi>=0.135.2; extra == 'all'
|
|
21
|
+
Requires-Dist: graphviz>=0.21; extra == 'all'
|
|
22
|
+
Requires-Dist: openai>=1.107.1; extra == 'all'
|
|
23
|
+
Requires-Dist: opentelemetry-api>=1.39.1; extra == 'all'
|
|
24
|
+
Requires-Dist: opentelemetry-exporter-otlp-proto-http>=1.39.1; extra == 'all'
|
|
25
|
+
Requires-Dist: opentelemetry-sdk>=1.39.1; extra == 'all'
|
|
26
|
+
Requires-Dist: uvicorn>=0.42.0; extra == 'all'
|
|
27
|
+
Provides-Extra: aws
|
|
28
|
+
Requires-Dist: aioboto3>=15.5.0; extra == 'aws'
|
|
29
|
+
Requires-Dist: boto3; extra == 'aws'
|
|
30
|
+
Provides-Extra: azureopenai
|
|
31
|
+
Requires-Dist: azure-identity>=1.25.1; extra == 'azureopenai'
|
|
32
|
+
Requires-Dist: openai>=1.107.1; extra == 'azureopenai'
|
|
33
|
+
Provides-Extra: dev
|
|
34
|
+
Requires-Dist: ipykernel>=7.1.0; extra == 'dev'
|
|
35
|
+
Requires-Dist: picoagents>=0.4.0; extra == 'dev'
|
|
36
|
+
Requires-Dist: pydantic-settings>=2.13.0; extra == 'dev'
|
|
37
|
+
Requires-Dist: pymupdf-layout>=1.26.6; extra == 'dev'
|
|
38
|
+
Requires-Dist: pymupdf4llm>=0.2.9; extra == 'dev'
|
|
39
|
+
Provides-Extra: openai
|
|
40
|
+
Requires-Dist: openai>=1.107.1; extra == 'openai'
|
|
41
|
+
Provides-Extra: otel
|
|
42
|
+
Requires-Dist: opentelemetry-api>=1.39.1; extra == 'otel'
|
|
43
|
+
Requires-Dist: opentelemetry-exporter-otlp-proto-http>=1.39.1; extra == 'otel'
|
|
44
|
+
Requires-Dist: opentelemetry-sdk>=1.39.1; extra == 'otel'
|
|
45
|
+
Provides-Extra: sql
|
|
46
|
+
Requires-Dist: aiosqlite>=0.22.1; extra == 'sql'
|
|
47
|
+
Requires-Dist: asyncpg>=0.31.0; extra == 'sql'
|
|
48
|
+
Requires-Dist: sqlmodel>=0.0.38; extra == 'sql'
|
|
49
|
+
Provides-Extra: test
|
|
50
|
+
Requires-Dist: pytest-asyncio>=1.3.0; extra == 'test'
|
|
51
|
+
Requires-Dist: pytest-cov>=7.0.0; extra == 'test'
|
|
52
|
+
Requires-Dist: pytest>=9.0.1; extra == 'test'
|
|
53
|
+
Requires-Dist: ruff>=0.15.0; extra == 'test'
|
|
54
|
+
Provides-Extra: viz
|
|
55
|
+
Requires-Dist: graphviz>=0.21; extra == 'viz'
|
|
56
|
+
Provides-Extra: webui
|
|
57
|
+
Requires-Dist: fastapi>=0.135.2; extra == 'webui'
|
|
58
|
+
Requires-Dist: uvicorn[standard]>=0.44.0; extra == 'webui'
|
|
59
|
+
Description-Content-Type: text/markdown
|
|
60
|
+
|
|
61
|
+
<p align="center">
|
|
62
|
+
<img src="https://gitlab.com/pyninja/aiengineering/agentbyte/-/raw/v0.9.0/logo/agent-byte-avatar-low.png" alt="Agentbyte" width="200"/>
|
|
63
|
+
</p>
|
|
64
|
+
|
|
65
|
+
# Agentbyte
|
|
66
|
+
|
|
67
|
+
Agentbyte is an observability-first agentic AI framework for building and studying multiagent systems with a learning-first, implementation-oriented workflow.
|
|
68
|
+
|
|
69
|
+
Current release: **0.9.0** — see [CHANGELOG.md](CHANGELOG.md) for the full release history.
|
|
70
|
+
|
|
71
|
+
Repository: [gitlab.com/pyninja/aiengineering/agentbyte](https://gitlab.com/pyninja/aiengineering/agentbyte)
|
|
72
|
+
|
|
73
|
+
## Current Capabilities
|
|
74
|
+
|
|
75
|
+
- Agent execution loop with `run()` and `run_stream()` APIs.
|
|
76
|
+
- Tooling system (function tools + core tools + memory tool).
|
|
77
|
+
- Middleware chain for request/response/error handling.
|
|
78
|
+
- Built-in middleware: logging, security, rate limiting, approval, telemetry.
|
|
79
|
+
- Memory abstractions: list memory, file memory, context injection.
|
|
80
|
+
- OpenAI and Azure OpenAI model client support.
|
|
81
|
+
- OpenTelemetry-first tracing with model-call and task-level usage telemetry.
|
|
82
|
+
- Multi-agent orchestration: `RoundRobinOrchestrator`, `AIOrchestrator`, `HandoffOrchestrator`, `PlanBasedOrchestrator` with composable termination conditions.
|
|
83
|
+
- **Workflow runtime:** typed step graphs (`FunctionStep`, `EchoStep`, `HttpStep`, `TransformStep`, `AgentStep`, `SubWorkflowStep`) with conditional routing, parallel execution, checkpoint/resume, human-in-the-loop suspend/resume, staged state semantics, structured streaming events, and declarative JSON/YAML schema serialisation.
|
|
84
|
+
|
|
85
|
+
## Observability-First Telemetry
|
|
86
|
+
|
|
87
|
+
Agentbyte exposes two complementary telemetry layers:
|
|
88
|
+
|
|
89
|
+
- **Per-call middleware spans** (`chat ...`, `tool ...`) for model/tool-level diagnostics.
|
|
90
|
+
- **Task-level root span attributes** (`agent ...`) for final aggregated usage and outcome.
|
|
91
|
+
|
|
92
|
+
Enable telemetry:
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
export AGENTBYTE_ENABLE_OTEL=true
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
Per-call span attributes emitted by `OTelMiddleware`:
|
|
99
|
+
|
|
100
|
+
- `gen_ai.usage.input_tokens`, `gen_ai.usage.output_tokens`, `gen_ai.usage.total_tokens`
|
|
101
|
+
- `gen_ai.usage.cost_estimate_usd`
|
|
102
|
+
- `gen_ai.response.finish_reason`
|
|
103
|
+
- `gen_ai.request.model`
|
|
104
|
+
- `gen_ai.tool.name`, `gen_ai.tool.success`
|
|
105
|
+
|
|
106
|
+
## Degugging Traces without UI
|
|
107
|
+
details can be found in the [OTel spans guide](docs/study/topic_otel_spans.md#debugging-traces-without-ui).
|
|
108
|
+
|
|
109
|
+
Practical interpretation:
|
|
110
|
+
|
|
111
|
+
- `chat gpt-4.1-mini` spans show **per-call** usage/cost/finish reason.
|
|
112
|
+
- `agent <name>` span shows **final accumulated** usage and final task outcome.
|
|
113
|
+
|
|
114
|
+
## Installation
|
|
115
|
+
|
|
116
|
+
Python requirement: **3.11+**
|
|
117
|
+
|
|
118
|
+
```bash
|
|
119
|
+
uv sync --all-groups
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
Optional extras:
|
|
123
|
+
|
|
124
|
+
```bash
|
|
125
|
+
uv sync --extra openai
|
|
126
|
+
uv sync --extra azureopenai
|
|
127
|
+
uv sync --extra otel
|
|
128
|
+
uv sync --extra webui
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
### Install in another project (pip / uv add)
|
|
132
|
+
|
|
133
|
+
Use extras to enable provider + telemetry support:
|
|
134
|
+
|
|
135
|
+
```bash
|
|
136
|
+
pip install "agentbyte[azureopenai,otel]"
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
```bash
|
|
140
|
+
uv add "agentbyte[azureopenai,otel]"
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
For the browser WebUI:
|
|
144
|
+
|
|
145
|
+
```bash
|
|
146
|
+
pip install "agentbyte[webui]"
|
|
147
|
+
# or
|
|
148
|
+
uv add "agentbyte[webui]"
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
Install all optional features:
|
|
152
|
+
|
|
153
|
+
```bash
|
|
154
|
+
pip install "agentbyte[all]"
|
|
155
|
+
# or
|
|
156
|
+
uv add "agentbyte[all]"
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
Note: the Azure extra is `azureopenai`.
|
|
160
|
+
|
|
161
|
+
## Quick Start
|
|
162
|
+
|
|
163
|
+
```python
|
|
164
|
+
from agentbyte.agents import Agent
|
|
165
|
+
from agentbyte.middleware import LoggingMiddleware
|
|
166
|
+
|
|
167
|
+
# model_client = OpenAIChatCompletionClient(...) or AzureOpenAIChatCompletionClient(...)
|
|
168
|
+
|
|
169
|
+
def quick_faq_lookup(topic: str) -> str:
|
|
170
|
+
faq = {
|
|
171
|
+
"middleware": "Middleware handles cross-cutting runtime concerns.",
|
|
172
|
+
"memory": "Memory helps agents keep useful context across interactions.",
|
|
173
|
+
}
|
|
174
|
+
return faq.get(topic.lower(), "No FAQ found.")
|
|
175
|
+
|
|
176
|
+
agent = Agent(
|
|
177
|
+
name="helpful-assistant",
|
|
178
|
+
description="Helpful assistant with middleware",
|
|
179
|
+
instructions="Answer clearly and use tools when needed.",
|
|
180
|
+
model_client=model_client,
|
|
181
|
+
tools=[quick_faq_lookup],
|
|
182
|
+
middlewares=[LoggingMiddleware()],
|
|
183
|
+
)
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
## Run The WebUI
|
|
187
|
+
|
|
188
|
+
### Option 1: Run the included demo app
|
|
189
|
+
|
|
190
|
+
This is the easiest way to see the WebUI working end to end with:
|
|
191
|
+
- one demo agent
|
|
192
|
+
- one demo workflow
|
|
193
|
+
- one demo orchestrator
|
|
194
|
+
|
|
195
|
+
Step 1. Install the WebUI extra:
|
|
196
|
+
|
|
197
|
+
```bash
|
|
198
|
+
uv sync --extra webui
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
Step 2. Start the demo app:
|
|
202
|
+
|
|
203
|
+
```bash
|
|
204
|
+
uv run python examples/webui/basic_webui.py
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
Step 3. Open the browser:
|
|
208
|
+
|
|
209
|
+
```text
|
|
210
|
+
http://127.0.0.1:8080
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
If auto-open is enabled in your environment, the browser may open automatically.
|
|
214
|
+
|
|
215
|
+
### Option 2: Run the WebUI against your current project directory
|
|
216
|
+
|
|
217
|
+
Use this when you want Agentbyte to scan a directory for exported `agent`, `workflow`, or `orchestrator` objects.
|
|
218
|
+
|
|
219
|
+
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`.
|
|
220
|
+
|
|
221
|
+
Step 1. Install the WebUI extra:
|
|
222
|
+
|
|
223
|
+
```bash
|
|
224
|
+
uv sync --extra webui
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
Step 2. Launch the WebUI and scan the current directory:
|
|
228
|
+
|
|
229
|
+
```bash
|
|
230
|
+
uv run agentbyte webui --dir .
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
Step 3. Open the browser:
|
|
234
|
+
|
|
235
|
+
```text
|
|
236
|
+
http://127.0.0.1:8080
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
Useful variants:
|
|
240
|
+
|
|
241
|
+
```bash
|
|
242
|
+
uv run agentbyte webui --dir . --port 8080 --host 127.0.0.1 --no-open
|
|
243
|
+
uv run agentbyte webui --dir examples --port 8090
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
For this repository, the most reliable first-run path is still the bundled demo:
|
|
247
|
+
|
|
248
|
+
```bash
|
|
249
|
+
uv run python examples/webui/basic_webui.py
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
Use `agentbyte webui --dir ...` when you have a directory of exportable demo modules, for example:
|
|
253
|
+
|
|
254
|
+
```python
|
|
255
|
+
# my_entities.py
|
|
256
|
+
agent = ...
|
|
257
|
+
workflow = ...
|
|
258
|
+
orchestrator = ...
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
### Option 3: Run it programmatically
|
|
262
|
+
|
|
263
|
+
Use this when you want to serve in-memory entities directly from Python.
|
|
264
|
+
|
|
265
|
+
```python
|
|
266
|
+
from agentbyte.webui import serve
|
|
267
|
+
|
|
268
|
+
serve(entities=[agent], port=8080, auto_open=True)
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
### Quick Troubleshooting
|
|
272
|
+
|
|
273
|
+
If the app does not start:
|
|
274
|
+
|
|
275
|
+
```bash
|
|
276
|
+
uv sync --extra webui
|
|
277
|
+
```
|
|
278
|
+
|
|
279
|
+
If port `8080` is already in use:
|
|
280
|
+
|
|
281
|
+
```bash
|
|
282
|
+
uv run agentbyte webui --dir . --port 8090
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
If you do not want the browser to open automatically:
|
|
286
|
+
|
|
287
|
+
```bash
|
|
288
|
+
uv run agentbyte webui --dir . --no-open
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
## Project Layout
|
|
292
|
+
|
|
293
|
+
```
|
|
294
|
+
src/agentbyte/
|
|
295
|
+
agents/
|
|
296
|
+
llm/
|
|
297
|
+
memory/
|
|
298
|
+
middleware/
|
|
299
|
+
tools/
|
|
300
|
+
messages.py
|
|
301
|
+
context.py
|
|
302
|
+
types.py
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
## Development
|
|
306
|
+
|
|
307
|
+
```bash
|
|
308
|
+
uv run ruff check src tests
|
|
309
|
+
uv run pytest tests -v
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
## License
|
|
313
|
+
|
|
314
|
+
MIT — see [LICENSE](LICENSE).
|
|
315
|
+
|
|
316
|
+
## References
|
|
317
|
+
|
|
318
|
+
- [Designing Multi-Agent Systems](https://github.com/victordibia/designing-multiagent-systems/tree/main)
|
|
319
|
+
- [Microsoft Agent Framework](https://github.com/microsoft/agent-framework)
|