agentbyte 0.3.6__tar.gz → 0.4.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.4.2/.github/skills/agentbyte-ai-driven-orchestration/SKILL.md +188 -0
- agentbyte-0.4.2/.github/skills/agentbyte-round-robin-orchestration/SKILL.md +122 -0
- {agentbyte-0.3.6 → agentbyte-0.4.2}/.gitignore +3 -1
- {agentbyte-0.3.6 → agentbyte-0.4.2}/CHANGELOG.md +50 -0
- {agentbyte-0.3.6 → agentbyte-0.4.2}/PKG-INFO +143 -4
- {agentbyte-0.3.6 → agentbyte-0.4.2}/README.md +137 -3
- {agentbyte-0.3.6 → agentbyte-0.4.2}/pyproject.toml +12 -1
- agentbyte-0.4.2/src/agentbyte/__about__.py +2 -0
- agentbyte-0.4.2/src/agentbyte/__init__.py +98 -0
- {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/agents/agent.py +143 -27
- {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/agents/agent_as_tool.py +13 -9
- {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/agents/base.py +8 -2
- {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/cli/main.py +84 -1
- {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/llm/azure_openai_embedding.py +1 -0
- {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/llm/embeddings_base.py +10 -2
- {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/llm/openai_embedding.py +1 -0
- {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/llm/types.py +13 -1
- {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/middleware/otel.py +12 -0
- agentbyte-0.4.2/src/agentbyte/orchestration/__init__.py +17 -0
- agentbyte-0.4.2/src/agentbyte/orchestration/ai.py +198 -0
- agentbyte-0.4.2/src/agentbyte/orchestration/base.py +656 -0
- agentbyte-0.4.2/src/agentbyte/orchestration/plan.py +425 -0
- agentbyte-0.4.2/src/agentbyte/orchestration/round_robin.py +137 -0
- agentbyte-0.4.2/src/agentbyte/termination/__init__.py +25 -0
- agentbyte-0.4.2/src/agentbyte/termination/base.py +87 -0
- agentbyte-0.4.2/src/agentbyte/termination/cancellation.py +45 -0
- agentbyte-0.4.2/src/agentbyte/termination/composite.py +84 -0
- agentbyte-0.4.2/src/agentbyte/termination/external.py +58 -0
- agentbyte-0.4.2/src/agentbyte/termination/function_call.py +58 -0
- agentbyte-0.4.2/src/agentbyte/termination/handoff.py +65 -0
- agentbyte-0.4.2/src/agentbyte/termination/max_message.py +51 -0
- agentbyte-0.4.2/src/agentbyte/termination/text_mention.py +59 -0
- agentbyte-0.4.2/src/agentbyte/termination/timeout.py +59 -0
- agentbyte-0.4.2/src/agentbyte/termination/token_usage.py +63 -0
- agentbyte-0.4.2/src/agentbyte/types.py +241 -0
- agentbyte-0.4.2/src/agentbyte/webui/__init__.py +52 -0
- agentbyte-0.4.2/src/agentbyte/webui/agent_framework_devui/ui/assets/index-BzhEszHZ.css +1 -0
- agentbyte-0.4.2/src/agentbyte/webui/agent_framework_devui/ui/assets/index-DByFJNGD.js +245 -0
- agentbyte-0.4.2/src/agentbyte/webui/agent_framework_devui/ui/index.html +14 -0
- agentbyte-0.4.2/src/agentbyte/webui/agent_framework_devui/ui/vite.svg +1 -0
- agentbyte-0.4.2/src/agentbyte/webui/discovery.py +230 -0
- agentbyte-0.4.2/src/agentbyte/webui/execution.py +268 -0
- agentbyte-0.4.2/src/agentbyte/webui/frontend/.gitignore +22 -0
- agentbyte-0.4.2/src/agentbyte/webui/frontend/README.md +69 -0
- agentbyte-0.4.2/src/agentbyte/webui/frontend/components.json +21 -0
- agentbyte-0.4.2/src/agentbyte/webui/frontend/eslint.config.js +23 -0
- agentbyte-0.4.2/src/agentbyte/webui/frontend/index.html +13 -0
- agentbyte-0.4.2/src/agentbyte/webui/frontend/package.json +47 -0
- agentbyte-0.4.2/src/agentbyte/webui/frontend/plan.md +0 -0
- agentbyte-0.4.2/src/agentbyte/webui/frontend/public/vite.svg +1 -0
- agentbyte-0.4.2/src/agentbyte/webui/frontend/src/App.css +42 -0
- agentbyte-0.4.2/src/agentbyte/webui/frontend/src/App.tsx +486 -0
- agentbyte-0.4.2/src/agentbyte/webui/frontend/src/assets/react.svg +1 -0
- agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/agent/agent-view.tsx +312 -0
- agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/message_renderer/ContentRenderer.tsx +275 -0
- agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/message_renderer/MessageRenderer.tsx +20 -0
- agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/message_renderer/index.ts +7 -0
- agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/message_renderer/types.ts +24 -0
- agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/mode-toggle.tsx +39 -0
- agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/orchestrator/orchestrator-view.tsx +280 -0
- agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/shared/app-header.tsx +49 -0
- agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/shared/chat-base.tsx +253 -0
- agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/shared/context-inspector.tsx +460 -0
- agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/shared/debug-panel.tsx +266 -0
- agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/shared/entity-selector.tsx +264 -0
- agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/shared/example-tasks-display.tsx +41 -0
- agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/shared/examples-gallery.tsx +268 -0
- agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/shared/session-switcher.tsx +198 -0
- agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/shared/tool-approval-banner.tsx +142 -0
- agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/theme-provider.tsx +33 -0
- agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/ui/attachment-gallery.tsx +166 -0
- agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/ui/badge.tsx +36 -0
- agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/ui/button.tsx +59 -0
- agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/ui/card.tsx +92 -0
- agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/ui/dialog.tsx +71 -0
- agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/ui/dropdown-menu.tsx +255 -0
- agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/ui/file-upload.tsx +141 -0
- agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/ui/input.tsx +21 -0
- agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/ui/label.tsx +22 -0
- agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/ui/loading-spinner.tsx +23 -0
- agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/ui/loading-state.tsx +52 -0
- agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/ui/message-input.tsx +237 -0
- agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/ui/scroll-area.tsx +46 -0
- agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/ui/slider.tsx +26 -0
- agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/ui/tabs.tsx +53 -0
- agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/ui/textarea.tsx +24 -0
- agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/workflow/workflow-view.tsx +422 -0
- agentbyte-0.4.2/src/agentbyte/webui/frontend/src/hooks/messageHandlers.ts +274 -0
- agentbyte-0.4.2/src/agentbyte/webui/frontend/src/hooks/useEntityExecution.ts +312 -0
- agentbyte-0.4.2/src/agentbyte/webui/frontend/src/index.css +147 -0
- agentbyte-0.4.2/src/agentbyte/webui/frontend/src/main.tsx +18 -0
- agentbyte-0.4.2/src/agentbyte/webui/frontend/src/services/api.ts +290 -0
- agentbyte-0.4.2/src/agentbyte/webui/frontend/src/types/index.ts +52 -0
- agentbyte-0.4.2/src/agentbyte/webui/frontend/src/types/picoagents.ts +261 -0
- agentbyte-0.4.2/src/agentbyte/webui/frontend/src/utils/message-utils.ts +149 -0
- agentbyte-0.4.2/src/agentbyte/webui/frontend/src/vite-env.d.ts +9 -0
- agentbyte-0.4.2/src/agentbyte/webui/frontend/tsconfig.app.json +31 -0
- agentbyte-0.4.2/src/agentbyte/webui/frontend/tsconfig.json +13 -0
- agentbyte-0.4.2/src/agentbyte/webui/frontend/tsconfig.node.json +25 -0
- agentbyte-0.4.2/src/agentbyte/webui/frontend/vite.config.ts +34 -0
- agentbyte-0.4.2/src/agentbyte/webui/frontend/yarn.lock +2282 -0
- agentbyte-0.4.2/src/agentbyte/webui/models.py +174 -0
- agentbyte-0.4.2/src/agentbyte/webui/registry.py +130 -0
- agentbyte-0.4.2/src/agentbyte/webui/server.py +431 -0
- agentbyte-0.4.2/src/agentbyte/webui/session_store.py +63 -0
- agentbyte-0.4.2/src/agentbyte/webui/sessions.py +99 -0
- agentbyte-0.4.2/src/agentbyte/webui/ui/assets/index-CWk64UM3.js +359 -0
- agentbyte-0.4.2/src/agentbyte/webui/ui/assets/index-vt1cujlT.css +1 -0
- agentbyte-0.4.2/src/agentbyte/webui/ui/index.html +14 -0
- agentbyte-0.4.2/src/agentbyte/webui/ui/vite.svg +1 -0
- agentbyte-0.4.2/tests/agents/test_agent_as_tool.py +556 -0
- {agentbyte-0.3.6 → agentbyte-0.4.2}/tests/agents/test_agent_basic.py +71 -7
- {agentbyte-0.3.6 → agentbyte-0.4.2}/tests/agents/test_agent_memory_integration.py +4 -4
- {agentbyte-0.3.6 → agentbyte-0.4.2}/tests/agents/test_agent_middleware_integration.py +28 -7
- {agentbyte-0.3.6 → agentbyte-0.4.2}/tests/agents/test_agent_stream_events.py +21 -7
- {agentbyte-0.3.6 → agentbyte-0.4.2}/tests/agents/test_tool_approval.py +13 -6
- {agentbyte-0.3.6 → agentbyte-0.4.2}/tests/cli/test_create_skills.py +3 -1
- {agentbyte-0.3.6 → agentbyte-0.4.2}/tests/llm/test_azure_embedding_client.py +3 -0
- {agentbyte-0.3.6 → agentbyte-0.4.2}/tests/llm/test_openai_embedding_client.py +3 -0
- {agentbyte-0.3.6 → agentbyte-0.4.2}/tests/middleware/test_otel.py +36 -0
- agentbyte-0.4.2/tests/orchestration/test_ai_orchestrator.py +231 -0
- agentbyte-0.4.2/tests/orchestration/test_base_orchestrator.py +184 -0
- agentbyte-0.4.2/tests/orchestration/test_plan_orchestrator.py +555 -0
- agentbyte-0.4.2/tests/orchestration/test_round_robin.py +156 -0
- agentbyte-0.4.2/tests/termination/test_base.py +56 -0
- agentbyte-0.4.2/tests/termination/test_cancellation.py +23 -0
- agentbyte-0.4.2/tests/termination/test_composite.py +57 -0
- agentbyte-0.4.2/tests/termination/test_external.py +25 -0
- agentbyte-0.4.2/tests/termination/test_function_call.py +37 -0
- agentbyte-0.4.2/tests/termination/test_handoff.py +37 -0
- agentbyte-0.4.2/tests/termination/test_max_message.py +39 -0
- agentbyte-0.4.2/tests/termination/test_text_mention.py +47 -0
- agentbyte-0.4.2/tests/termination/test_timeout.py +30 -0
- agentbyte-0.4.2/tests/termination/test_token_usage.py +39 -0
- {agentbyte-0.3.6 → agentbyte-0.4.2}/tests/test_package_api.py +16 -0
- agentbyte-0.4.2/tests/test_types.py +218 -0
- agentbyte-0.4.2/tests/webui/__init__.py +1 -0
- agentbyte-0.4.2/tests/webui/helpers.py +142 -0
- agentbyte-0.4.2/tests/webui/test_execution.py +139 -0
- agentbyte-0.4.2/tests/webui/test_package_api.py +14 -0
- agentbyte-0.4.2/tests/webui/test_registry.py +79 -0
- agentbyte-0.4.2/tests/webui/test_server.py +54 -0
- agentbyte-0.3.6/src/agentbyte/__about__.py +0 -2
- agentbyte-0.3.6/src/agentbyte/__init__.py +0 -39
- agentbyte-0.3.6/src/agentbyte/types.py +0 -65
- agentbyte-0.3.6/tests/agents/test_agent_as_tool.py +0 -258
- agentbyte-0.3.6/tests/test_types.py +0 -52
- {agentbyte-0.3.6 → agentbyte-0.4.2}/.github/skills/agentbyte-agent-as-tool/SKILL.md +0 -0
- {agentbyte-0.3.6 → agentbyte-0.4.2}/.github/skills/agentbyte-dataset/SKILL.md +0 -0
- {agentbyte-0.3.6 → agentbyte-0.4.2}/.github/skills/agentbyte-function-tools/SKILL.md +0 -0
- {agentbyte-0.3.6 → agentbyte-0.4.2}/.github/skills/agentbyte-list-memory/SKILL.md +0 -0
- {agentbyte-0.3.6 → agentbyte-0.4.2}/.github/skills/agentbyte-llm-client/SKILL.md +0 -0
- {agentbyte-0.3.6 → agentbyte-0.4.2}/.github/skills/agentbyte-memory-tool/SKILL.md +0 -0
- {agentbyte-0.3.6 → agentbyte-0.4.2}/.github/skills/agentbyte-middleware/SKILL.md +0 -0
- {agentbyte-0.3.6 → agentbyte-0.4.2}/.github/skills/agentbyte-multi-turn-context/SKILL.md +0 -0
- {agentbyte-0.3.6 → agentbyte-0.4.2}/.github/skills/agentbyte-otel-tracing/SKILL.md +0 -0
- {agentbyte-0.3.6 → agentbyte-0.4.2}/.github/skills/agentbyte-simple-agent/SKILL.md +0 -0
- {agentbyte-0.3.6 → agentbyte-0.4.2}/.github/skills/agentbyte-tool-approval/SKILL.md +0 -0
- {agentbyte-0.3.6 → agentbyte-0.4.2}/.github/skills/skill-authoring/SKILL.md +0 -0
- {agentbyte-0.3.6 → agentbyte-0.4.2}/LICENSE +0 -0
- {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/agents/__init__.py +0 -0
- {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/agents/types.py +0 -0
- {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/cancellation_token.py +0 -0
- {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/cli/__init__.py +0 -0
- {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/component.py +0 -0
- {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/context.py +0 -0
- {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/dataset/__init__.py +0 -0
- {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/dataset/base.py +0 -0
- {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/dataset/json.py +0 -0
- {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/dataset/loader.py +0 -0
- {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/dataset/loaders.py +0 -0
- {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/dataset/sqlite.py +0 -0
- {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/entity.py +0 -0
- {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/llm/__init__.py +0 -0
- {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/llm/auth.py +0 -0
- {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/llm/azure_openai.py +0 -0
- {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/llm/base.py +0 -0
- {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/llm/openai.py +0 -0
- {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/llm/pricing.py +0 -0
- {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/llm/settings.py +0 -0
- {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/memory/__init__.py +0 -0
- {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/memory/base.py +0 -0
- {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/messages.py +0 -0
- {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/middleware/__init__.py +0 -0
- {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/middleware/base.py +0 -0
- {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/notebook.py +0 -0
- {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/session.py +0 -0
- {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/tools/__init__.py +0 -0
- {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/tools/base.py +0 -0
- {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/tools/core_tools.py +0 -0
- {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/tools/decorator.py +0 -0
- {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/tools/memory_tool.py +0 -0
- {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/workflow/__init__.py +0 -0
- {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/workflow/core/__init__.py +0 -0
- {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/workflow/core/checkpoint.py +0 -0
- {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/workflow/core/models.py +0 -0
- {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/workflow/core/runner.py +0 -0
- {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/workflow/core/workflow.py +0 -0
- {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/workflow/defaults.py +0 -0
- {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/workflow/schema_utils.py +0 -0
- {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/workflow/steps/__init__.py +0 -0
- {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/workflow/steps/agentbyte_agent.py +0 -0
- {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/workflow/steps/echo.py +0 -0
- {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/workflow/steps/function.py +0 -0
- {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/workflow/steps/http.py +0 -0
- {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/workflow/steps/step.py +0 -0
- {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/workflow/steps/transform.py +0 -0
- {agentbyte-0.3.6 → agentbyte-0.4.2}/src/agentbyte/workflow/visualizer.py +0 -0
- {agentbyte-0.3.6 → agentbyte-0.4.2}/tests/agents/test_agent_event_types.py +0 -0
- {agentbyte-0.3.6 → agentbyte-0.4.2}/tests/llm/test_azure_client.py +0 -0
- {agentbyte-0.3.6 → agentbyte-0.4.2}/tests/llm/test_llm_types.py +0 -0
- {agentbyte-0.3.6 → agentbyte-0.4.2}/tests/llm/test_openai_client.py +0 -0
- {agentbyte-0.3.6 → agentbyte-0.4.2}/tests/memory/test_memory.py +0 -0
- {agentbyte-0.3.6 → agentbyte-0.4.2}/tests/middleware/test_middleware_chain.py +0 -0
- {agentbyte-0.3.6 → agentbyte-0.4.2}/tests/test_cancellation_token.py +0 -0
- {agentbyte-0.3.6 → agentbyte-0.4.2}/tests/test_context.py +0 -0
- {agentbyte-0.3.6 → agentbyte-0.4.2}/tests/test_messages.py +0 -0
- {agentbyte-0.3.6 → agentbyte-0.4.2}/tests/test_session.py +0 -0
- {agentbyte-0.3.6 → agentbyte-0.4.2}/tests/tools/test_memory_tool.py +0 -0
- {agentbyte-0.3.6 → agentbyte-0.4.2}/tests/tools/test_tools.py +0 -0
- {agentbyte-0.3.6 → agentbyte-0.4.2}/tests/workflow/test_checkpoint.py +0 -0
- {agentbyte-0.3.6 → agentbyte-0.4.2}/tests/workflow/test_workflow_class.py +0 -0
- {agentbyte-0.3.6 → agentbyte-0.4.2}/tests/workflow/test_workflow_models.py +0 -0
- {agentbyte-0.3.6 → agentbyte-0.4.2}/tests/workflow/test_workflow_runner.py +0 -0
- {agentbyte-0.3.6 → agentbyte-0.4.2}/tests/workflow/test_workflow_steps.py +0 -0
- {agentbyte-0.3.6 → agentbyte-0.4.2}/tests/workflow/test_workflow_visualizer.py +0 -0
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: agentbyte-ai-driven-orchestration
|
|
3
|
+
description: Guide for creating AI-Driven multi-agent orchestration in Agentbyte (Chapter 7.4). Use this when you need LLM-based adaptive agent selection instead of fixed turn sequences.
|
|
4
|
+
license: MIT
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
Use this skill when implementing multi-agent collaboration where an LLM intelligently selects which agent should respond next based on conversation context and agent capabilities.
|
|
8
|
+
|
|
9
|
+
## Pattern: Basic AI-Driven Orchestration
|
|
10
|
+
|
|
11
|
+
```python
|
|
12
|
+
import asyncio
|
|
13
|
+
from agentbyte import AIOrchestrator, Agent, UserMessage
|
|
14
|
+
from agentbyte.llm import OpenAIChatCompletionClient
|
|
15
|
+
from agentbyte.termination import MaxMessageTermination, TextMentionTermination
|
|
16
|
+
|
|
17
|
+
async def main():
|
|
18
|
+
# 1. Create model client
|
|
19
|
+
client = OpenAIChatCompletionClient.from_api_key(model="gpt-4o-mini")
|
|
20
|
+
|
|
21
|
+
# 2. Create agents with clear descriptions (LLM uses these for selection)
|
|
22
|
+
researcher = Agent(
|
|
23
|
+
name="researcher",
|
|
24
|
+
description="Research specialist for factual and contextual information",
|
|
25
|
+
instructions=(
|
|
26
|
+
"You are a research specialist. Provide concise factual insights "
|
|
27
|
+
"and clarify missing context when needed."
|
|
28
|
+
),
|
|
29
|
+
model_client=client
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
writer = Agent(
|
|
33
|
+
name="writer",
|
|
34
|
+
description="Content specialist for polished user-facing writing",
|
|
35
|
+
instructions=(
|
|
36
|
+
"You are a writer. Synthesize available information into concise, "
|
|
37
|
+
"high-quality prose. End with TERMINATE when complete."
|
|
38
|
+
),
|
|
39
|
+
model_client=client
|
|
40
|
+
)
|
|
41
|
+
|
|
42
|
+
# 3. Define termination conditions
|
|
43
|
+
termination = MaxMessageTermination(8) | TextMentionTermination("TERMINATE")
|
|
44
|
+
|
|
45
|
+
# 4. Initialize AI orchestrator (requires model_client for selection)
|
|
46
|
+
orchestrator = AIOrchestrator(
|
|
47
|
+
agents=[researcher, writer],
|
|
48
|
+
termination=termination,
|
|
49
|
+
model_client=client, # Required: LLM for agent selection
|
|
50
|
+
max_iterations=6
|
|
51
|
+
)
|
|
52
|
+
|
|
53
|
+
# 5. Run the collaboration
|
|
54
|
+
task = UserMessage(
|
|
55
|
+
content="Write a short note about the benefits of solar energy",
|
|
56
|
+
source="user"
|
|
57
|
+
)
|
|
58
|
+
|
|
59
|
+
result = await orchestrator.run(task)
|
|
60
|
+
|
|
61
|
+
print(f"Stop reason: {result.stop_message.content}")
|
|
62
|
+
print(f"Iterations: {result.pattern_metadata.get('iterations_completed')}")
|
|
63
|
+
print(f"Selector calls: {result.pattern_metadata.get('selector_calls')}")
|
|
64
|
+
print(f"Total tokens: {result.usage.total_tokens}")
|
|
65
|
+
|
|
66
|
+
asyncio.run(main())
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## Pattern: Streaming AI-Driven Orchestration
|
|
70
|
+
|
|
71
|
+
```python
|
|
72
|
+
async for item in orchestrator.run_stream(task, verbose=True):
|
|
73
|
+
if isinstance(item, Message):
|
|
74
|
+
print(f"[{item.source}] {item.content}")
|
|
75
|
+
elif isinstance(item, OrchestrationEvent):
|
|
76
|
+
# AgentSelectionEvent includes AI reasoning
|
|
77
|
+
if hasattr(item, 'reason'):
|
|
78
|
+
print(f"Selection reason: {item.reason}")
|
|
79
|
+
elif isinstance(item, OrchestrationResponse):
|
|
80
|
+
print(f"Complete: {item.stop_message.content}")
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
## How AI Selection Works
|
|
84
|
+
|
|
85
|
+
1. **Structured Output:** The orchestrator uses LLM with structured output (`AgentSelection` schema) to select the next agent
|
|
86
|
+
2. **Context Awareness:** The LLM sees conversation history and all agent descriptions
|
|
87
|
+
3. **Reasoning Included:** Selection events include the LLM's reasoning for why it chose that agent
|
|
88
|
+
4. **Fallback Safety:** If LLM selection fails or returns invalid agent name, falls back to round-robin
|
|
89
|
+
|
|
90
|
+
## Configuration Options
|
|
91
|
+
|
|
92
|
+
```python
|
|
93
|
+
orchestrator = AIOrchestrator(
|
|
94
|
+
agents=[agent1, agent2, agent3], # Required: List of agents
|
|
95
|
+
termination=termination_condition, # Required: When to stop
|
|
96
|
+
model_client=selection_model_client, # Required: LLM for agent selection
|
|
97
|
+
max_iterations=10, # Optional: Safety limit (default: 10)
|
|
98
|
+
verbose=False # Optional: Enable event logging
|
|
99
|
+
)
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
## Pattern Metadata
|
|
103
|
+
|
|
104
|
+
After completion, `result.pattern_metadata` contains:
|
|
105
|
+
- `iterations_completed`: Total agent executions
|
|
106
|
+
- `selector_calls`: Number of LLM selection calls made
|
|
107
|
+
- `fallback_count`: How many times round-robin fallback was used
|
|
108
|
+
- `final_reason`: Why orchestration stopped
|
|
109
|
+
|
|
110
|
+
## Usage Tracking
|
|
111
|
+
|
|
112
|
+
The orchestrator tracks token usage from:
|
|
113
|
+
- All agent executions
|
|
114
|
+
- All selector LLM calls (agent selection)
|
|
115
|
+
|
|
116
|
+
Final `result.usage` includes comprehensive totals across all LLM interactions.
|
|
117
|
+
|
|
118
|
+
## Agent Description Best Practices
|
|
119
|
+
|
|
120
|
+
The LLM uses agent descriptions to make selection decisions. Write clear, specific descriptions:
|
|
121
|
+
|
|
122
|
+
✅ **Good:**
|
|
123
|
+
```python
|
|
124
|
+
description="Research specialist for factual and contextual information"
|
|
125
|
+
description="Content specialist for polished user-facing writing"
|
|
126
|
+
description="Code reviewer that checks for bugs and style issues"
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
❌ **Avoid:**
|
|
130
|
+
```python
|
|
131
|
+
description="A helpful agent" # Too vague
|
|
132
|
+
description="Agent 1" # No capability info
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
## Guardrails
|
|
136
|
+
|
|
137
|
+
- **Model Client Required:** `AIOrchestrator` needs a `model_client` parameter for agent selection (unlike `RoundRobinOrchestrator`).
|
|
138
|
+
- **Clear Descriptions:** Write specific agent descriptions—the LLM uses these to decide who should respond.
|
|
139
|
+
- **Termination Required:** Always provide termination conditions to prevent infinite loops.
|
|
140
|
+
- **Safety Fallback:** If LLM selection fails, orchestrator falls back to round-robin (check `fallback_count` in metadata).
|
|
141
|
+
- **Usage Accounting:** Final usage includes both agent tokens AND selector tokens.
|
|
142
|
+
- **Case Insensitive:** Agent name matching is case-insensitive for robustness.
|
|
143
|
+
- **Event Observability:** Use `verbose=True` with `run_stream()` to see AI selection reasoning.
|
|
144
|
+
|
|
145
|
+
## When to Use AI-Driven vs Round-Robin
|
|
146
|
+
|
|
147
|
+
| Use AI-Driven When | Use Round-Robin When |
|
|
148
|
+
|--------------------|----------------------|
|
|
149
|
+
| Agent roles are specialized | Agents always alternate (poet/critic) |
|
|
150
|
+
| Order should adapt to context | Fixed workflow is desired |
|
|
151
|
+
| You have 3+ agents | You have exactly 2 agents |
|
|
152
|
+
| Complexity requires smart routing | Simple back-and-forth suffices |
|
|
153
|
+
| You want LLM to decide flow | You want deterministic order |
|
|
154
|
+
|
|
155
|
+
## Common Use Cases
|
|
156
|
+
|
|
157
|
+
1. **Research → Write → Review:** LLM decides when research is sufficient, when to write, when to review
|
|
158
|
+
2. **Multi-Specialist Teams:** Route to the right expert (data analyst, writer, coder, reviewer)
|
|
159
|
+
3. **Adaptive Workflows:** Let LLM determine optimal agent sequence based on task complexity
|
|
160
|
+
4. **Dynamic Collaboration:** Agents with overlapping capabilities—LLM picks best fit
|
|
161
|
+
5. **Question Routing:** Route user questions to the most appropriate agent based on content
|
|
162
|
+
|
|
163
|
+
## Examples
|
|
164
|
+
|
|
165
|
+
- Basic: `examples/orchestration/ai_driven_basic.py`
|
|
166
|
+
- Streaming: `examples/orchestration/ai_driven_stream.py`
|
|
167
|
+
- With OTel: `examples/orchestration/ai_driven_with_otel.py`
|
|
168
|
+
|
|
169
|
+
## OpenTelemetry Integration
|
|
170
|
+
|
|
171
|
+
For observability with Jaeger:
|
|
172
|
+
|
|
173
|
+
```python
|
|
174
|
+
import os
|
|
175
|
+
# Set BEFORE importing agentbyte
|
|
176
|
+
os.environ["AGENTBYTE_ENABLE_OTEL"] = "true"
|
|
177
|
+
os.environ["OTEL_EXPORTER_OTLP_ENDPOINT"] = "http://localhost:4318"
|
|
178
|
+
os.environ["OTEL_SERVICE_NAME"] = "my-ai-orchestration"
|
|
179
|
+
|
|
180
|
+
from agentbyte import AIOrchestrator
|
|
181
|
+
# ... rest of code
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
Traces will show:
|
|
185
|
+
- Orchestration span (parent)
|
|
186
|
+
- Selector LLM calls (for agent selection)
|
|
187
|
+
- Individual agent execution spans
|
|
188
|
+
- Token usage aggregated at orchestration level
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: agentbyte-round-robin-orchestration
|
|
3
|
+
description: Guide for creating Round-Robin multi-agent orchestration in Agentbyte. Use this when coordinating multiple agents in sequential turns until a termination condition is met.
|
|
4
|
+
license: MIT
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
Use this skill when implementing multi-agent collaboration where agents take turns in a fixed sequence (poet/critic, research/writing, review/revise patterns).
|
|
8
|
+
|
|
9
|
+
## Pattern: Basic Round-Robin Orchestration
|
|
10
|
+
|
|
11
|
+
```python
|
|
12
|
+
import asyncio
|
|
13
|
+
from agentbyte import RoundRobinOrchestrator, Agent, UserMessage
|
|
14
|
+
from agentbyte.llm import OpenAIChatCompletionClient
|
|
15
|
+
from agentbyte.termination import MaxMessageTermination, TextMentionTermination
|
|
16
|
+
|
|
17
|
+
async def main():
|
|
18
|
+
# 1. Create model client
|
|
19
|
+
client = OpenAIChatCompletionClient.from_api_key(model="gpt-4o-mini")
|
|
20
|
+
|
|
21
|
+
# 2. Create agents
|
|
22
|
+
poet = Agent(
|
|
23
|
+
name="poet",
|
|
24
|
+
description="A creative poet that writes and refines haikus",
|
|
25
|
+
instructions="Write a haiku. If you received feedback, refine it.",
|
|
26
|
+
model_client=client
|
|
27
|
+
)
|
|
28
|
+
|
|
29
|
+
critic = Agent(
|
|
30
|
+
name="critic",
|
|
31
|
+
description="A strict poetry critic",
|
|
32
|
+
instructions="Review the poem. If good, say APPROVED. Else provide feedback.",
|
|
33
|
+
model_client=client
|
|
34
|
+
)
|
|
35
|
+
|
|
36
|
+
# 3. Define termination conditions (composable with | and &)
|
|
37
|
+
termination = TextMentionTermination("APPROVED") | MaxMessageTermination(6)
|
|
38
|
+
|
|
39
|
+
# 4. Initialize orchestrator
|
|
40
|
+
orchestrator = RoundRobinOrchestrator(
|
|
41
|
+
agents=[poet, critic],
|
|
42
|
+
termination=termination,
|
|
43
|
+
max_iterations=10 # Safety fallback
|
|
44
|
+
)
|
|
45
|
+
|
|
46
|
+
# 5. Run the collaboration
|
|
47
|
+
task = UserMessage(content="Write a haiku about programming", source="user")
|
|
48
|
+
result = await orchestrator.run(task)
|
|
49
|
+
|
|
50
|
+
print(f"Stop reason: {result.stop_message.content}")
|
|
51
|
+
print(f"Total tokens: {result.usage.total_tokens}")
|
|
52
|
+
print(f"Cycles: {result.pattern_metadata['cycles_completed']}")
|
|
53
|
+
|
|
54
|
+
asyncio.run(main())
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## Pattern: Streaming Round-Robin
|
|
58
|
+
|
|
59
|
+
```python
|
|
60
|
+
async for item in orchestrator.run_stream(task, verbose=True):
|
|
61
|
+
if isinstance(item, Message):
|
|
62
|
+
print(f"[{item.source}] {item.content}")
|
|
63
|
+
elif isinstance(item, OrchestrationEvent):
|
|
64
|
+
# Track selection, execution events
|
|
65
|
+
print(f"Event: {item.__class__.__name__}")
|
|
66
|
+
elif isinstance(item, OrchestrationResponse):
|
|
67
|
+
# Final result
|
|
68
|
+
print(f"Complete: {item.stop_message.content}")
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
## Available Termination Conditions
|
|
72
|
+
|
|
73
|
+
| Termination Type | Purpose | Example |
|
|
74
|
+
|-----------------|---------|---------|
|
|
75
|
+
| `MaxMessageTermination(n)` | Stop after n messages | `MaxMessageTermination(10)` |
|
|
76
|
+
| `TextMentionTermination("X")` | Stop when text appears | `TextMentionTermination("APPROVED")` |
|
|
77
|
+
| `TokenUsageTermination(n)` | Stop after n tokens | `TokenUsageTermination(5000)` |
|
|
78
|
+
| `TimeoutTermination(sec)` | Stop after timeout | `TimeoutTermination(60.0)` |
|
|
79
|
+
| `CancellationTermination()` | Stop when cancelled | `CancellationTermination()` |
|
|
80
|
+
| Composite (OR) | Stop if any condition met | `T1 \| T2 \| T3` |
|
|
81
|
+
| Composite (AND) | Stop if all conditions met | `T1 & T2 & T3` |
|
|
82
|
+
|
|
83
|
+
## Configuration Options
|
|
84
|
+
|
|
85
|
+
```python
|
|
86
|
+
orchestrator = RoundRobinOrchestrator(
|
|
87
|
+
agents=[agent1, agent2, agent3], # Required: List of agents
|
|
88
|
+
termination=termination_condition, # Required: When to stop
|
|
89
|
+
max_iterations=10, # Optional: Safety limit (default: 10)
|
|
90
|
+
verbose=False # Optional: Enable event logging
|
|
91
|
+
)
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
## Pattern Metadata
|
|
95
|
+
|
|
96
|
+
After completion, `result.pattern_metadata` contains:
|
|
97
|
+
- `cycles_completed`: Number of full round-robin cycles
|
|
98
|
+
- `iterations_completed`: Total agent executions
|
|
99
|
+
- `final_reason`: Why orchestration stopped
|
|
100
|
+
|
|
101
|
+
## Guardrails
|
|
102
|
+
|
|
103
|
+
- **Agent Order:** Agents execute in the order provided in the `agents` list.
|
|
104
|
+
- **Termination Required:** Always provide at least one termination condition to prevent infinite loops.
|
|
105
|
+
- **Safety Limit:** Set `max_iterations` as a failsafe even with other termination conditions.
|
|
106
|
+
- **Shared Context:** All agents see the full conversation history from previous turns.
|
|
107
|
+
- **Model Client:** Each agent needs its own `model_client` configured.
|
|
108
|
+
- **Event Observability:** Use `verbose=True` with `run_stream()` to track selection and execution events.
|
|
109
|
+
|
|
110
|
+
## Common Use Cases
|
|
111
|
+
|
|
112
|
+
1. **Poet/Critic Pattern:** Writer creates, reviewer approves or requests changes
|
|
113
|
+
2. **Research/Writing:** Researcher gathers facts, writer synthesizes into prose
|
|
114
|
+
3. **Code/Review:** Developer writes code, reviewer provides feedback
|
|
115
|
+
4. **Plan/Execute:** Planner designs approach, executor implements steps
|
|
116
|
+
5. **Draft/Polish:** Rough draft agent, then polish/editing agent
|
|
117
|
+
|
|
118
|
+
## Examples
|
|
119
|
+
|
|
120
|
+
- Basic: `examples/orchestration/round_robin_basic.py`
|
|
121
|
+
- With OTel: `examples/orchestration/orchestrator_with_otel.py`
|
|
122
|
+
- Termination demo: `examples/orchestration/termination_demo.py`
|
|
@@ -4,6 +4,56 @@ 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.4.2] - 2026-03-25
|
|
8
|
+
|
|
9
|
+
### Added
|
|
10
|
+
- Added the copied picoagents `agent_framework_devui` assets under `src/agentbyte/webui/` for local parity/reference work.
|
|
11
|
+
- Added the upstream frontend workspace files that now live under `src/agentbyte/webui/frontend/`, including new public assets and shared UI components.
|
|
12
|
+
|
|
13
|
+
### Changed
|
|
14
|
+
- Replaced the previous in-repo WebUI frontend source with the picoagents frontend snapshot copied into `src/agentbyte/webui/frontend/`.
|
|
15
|
+
- Removed the redundant Hatch wheel `force-include` for `src/agentbyte/webui/ui`, fixing duplicate archive entries during wheel builds.
|
|
16
|
+
|
|
17
|
+
### Fixed
|
|
18
|
+
- Fixed PyPI publish failures caused by duplicate `agentbyte/webui/ui/*` filenames in the generated wheel.
|
|
19
|
+
|
|
20
|
+
## [0.4.1] - 2026-03-25
|
|
21
|
+
|
|
22
|
+
### Added
|
|
23
|
+
- Added a single-vector `embedding` field to `EmbeddingResult` while preserving the existing `embeddings`, `usage`, `model`, and `metadata` payload.
|
|
24
|
+
|
|
25
|
+
### Changed
|
|
26
|
+
- Updated OpenAI and Azure embedding clients so `create()` and `create_batch()` both return an `EmbeddingResult` with `embedding == embeddings[0]`.
|
|
27
|
+
- Shipped the packaged Chapter 8 WebUI assets and parity updates that landed after `0.4.0`.
|
|
28
|
+
|
|
29
|
+
### Testing
|
|
30
|
+
- Added focused embedding assertions for the dual-field result contract across OpenAI and Azure embedding clients.
|
|
31
|
+
|
|
32
|
+
## [0.4.0] - 2026-03-24
|
|
33
|
+
|
|
34
|
+
### Added
|
|
35
|
+
- New multi-agent orchestration module with shared `BaseOrchestrator` execution loop.
|
|
36
|
+
- New orchestration patterns:
|
|
37
|
+
- `RoundRobinOrchestrator`
|
|
38
|
+
- `AIOrchestrator`
|
|
39
|
+
- `PlanBasedOrchestrator`
|
|
40
|
+
- New plan-based orchestration public models:
|
|
41
|
+
- `PlanStep`
|
|
42
|
+
- `ExecutionPlan`
|
|
43
|
+
- `StepProgressEvaluation`
|
|
44
|
+
- New orchestration examples for basic, streaming, and OpenTelemetry-backed execution.
|
|
45
|
+
- New Chapter 7 study/tutorial docs for round-robin, AI-driven, and plan-based orchestration.
|
|
46
|
+
|
|
47
|
+
### Changed
|
|
48
|
+
- Extended orchestration execution to support focused message-list context payloads and pattern-level completion hooks.
|
|
49
|
+
- Improved agent-as-tool streaming telemetry so tool middleware spans are preserved for delegated agent execution.
|
|
50
|
+
- Added aggregate usage summaries on workflow and orchestration root spans while keeping detailed `chat ...` and `tool ...` spans at the agent/middleware layer.
|
|
51
|
+
- Updated study docs to clarify the telemetry boundary across agents, workflows, and orchestrators.
|
|
52
|
+
|
|
53
|
+
### Testing
|
|
54
|
+
- Added dedicated tests for plan-based orchestration behavior and package-level export coverage.
|
|
55
|
+
- Added telemetry regression coverage for delegated agent-as-tool execution and workflow root usage summaries.
|
|
56
|
+
|
|
7
57
|
## [0.3.6] - 2026-03-23
|
|
8
58
|
|
|
9
59
|
### Added
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: agentbyte
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.4.2
|
|
4
4
|
Summary: A toolkit for designing multiagent systems
|
|
5
5
|
Project-URL: Homepage, https://gitlab.com/pyninja/aiengineering/agentbyte
|
|
6
6
|
Project-URL: Repository, https://gitlab.com/pyninja/aiengineering/agentbyte
|
|
@@ -15,10 +15,12 @@ Requires-Dist: pydantic-settings>=2.13.0
|
|
|
15
15
|
Requires-Dist: pydantic>=2.12.5
|
|
16
16
|
Provides-Extra: all
|
|
17
17
|
Requires-Dist: azure-identity>=1.25.1; extra == 'all'
|
|
18
|
+
Requires-Dist: fastapi>=0.135.2; extra == 'all'
|
|
18
19
|
Requires-Dist: openai>=1.107.1; extra == 'all'
|
|
19
20
|
Requires-Dist: opentelemetry-api>=1.39.1; extra == 'all'
|
|
20
21
|
Requires-Dist: opentelemetry-exporter-otlp-proto-http>=1.39.1; extra == 'all'
|
|
21
22
|
Requires-Dist: opentelemetry-sdk>=1.39.1; extra == 'all'
|
|
23
|
+
Requires-Dist: uvicorn>=0.42.0; extra == 'all'
|
|
22
24
|
Provides-Extra: azureopenai
|
|
23
25
|
Requires-Dist: azure-identity>=1.25.1; extra == 'azureopenai'
|
|
24
26
|
Requires-Dist: openai>=1.107.1; extra == 'azureopenai'
|
|
@@ -28,20 +30,44 @@ Provides-Extra: otel
|
|
|
28
30
|
Requires-Dist: opentelemetry-api>=1.39.1; extra == 'otel'
|
|
29
31
|
Requires-Dist: opentelemetry-exporter-otlp-proto-http>=1.39.1; extra == 'otel'
|
|
30
32
|
Requires-Dist: opentelemetry-sdk>=1.39.1; extra == 'otel'
|
|
33
|
+
Provides-Extra: webui
|
|
34
|
+
Requires-Dist: fastapi>=0.135.2; extra == 'webui'
|
|
35
|
+
Requires-Dist: uvicorn>=0.42.0; extra == 'webui'
|
|
31
36
|
Description-Content-Type: text/markdown
|
|
32
37
|
|
|
33
38
|
<p align="center">
|
|
34
|
-
<img src="https://gitlab.com/pyninja/aiengineering/agentbyte/-/raw/v0.
|
|
39
|
+
<img src="https://gitlab.com/pyninja/aiengineering/agentbyte/-/raw/v0.4.2/logo/agent-byte-avatar-low.png" alt="Agentbyte" width="200"/>
|
|
35
40
|
</p>
|
|
36
41
|
|
|
37
42
|
# Agentbyte
|
|
38
43
|
|
|
39
44
|
Agentbyte is an observability-first agentic AI framework for building and studying multiagent systems with a learning-first, implementation-oriented workflow.
|
|
40
45
|
|
|
41
|
-
Current release: **0.
|
|
46
|
+
Current release: **0.4.2**
|
|
42
47
|
|
|
43
48
|
Repository: [gitlab.com/pyninja/aiengineering/agentbyte](https://gitlab.com/pyninja/aiengineering/agentbyte)
|
|
44
49
|
|
|
50
|
+
## What's New in 0.4.2
|
|
51
|
+
|
|
52
|
+
- Rebased the WebUI source frontend on the picoagents frontend snapshot copied into `src/agentbyte/webui/frontend/`.
|
|
53
|
+
- Added the packaged picoagents-style `agent_framework_devui` assets under `src/agentbyte/webui/` for parity/reference work.
|
|
54
|
+
- Fixed wheel packaging so the bundled WebUI assets are included once, unblocking PyPI publish.
|
|
55
|
+
|
|
56
|
+
## What's New in 0.4.1
|
|
57
|
+
|
|
58
|
+
- Extended `EmbeddingResult` with a single-vector `embedding` field while preserving `embeddings`, `usage`, `model`, and `metadata`.
|
|
59
|
+
- Updated OpenAI and Azure embedding clients so single-input calls are easier to consume without losing batch compatibility.
|
|
60
|
+
- Added and validated focused embedding client coverage for the new dual-field result contract.
|
|
61
|
+
|
|
62
|
+
## What's New in 0.4.0
|
|
63
|
+
|
|
64
|
+
- Added multi-agent orchestration foundations with `BaseOrchestrator`.
|
|
65
|
+
- Added `RoundRobinOrchestrator`, `AIOrchestrator`, and `PlanBasedOrchestrator`.
|
|
66
|
+
- Added a full termination system for autonomous orchestration flows.
|
|
67
|
+
- Added plan-based orchestration examples, tests, and study/tutorial docs.
|
|
68
|
+
- Expanded OpenTelemetry coverage across agents, workflows, and orchestration roots with aggregate usage summaries.
|
|
69
|
+
- Added a packaged Chapter 8 WebUI with FastAPI + SSE, session handling, discovery, and a browser UI for agents, workflows, and orchestrators.
|
|
70
|
+
|
|
45
71
|
## What's New in 0.3.5
|
|
46
72
|
|
|
47
73
|
- Added first-class async embeddings clients in `agentbyte.llm` for OpenAI and Azure OpenAI.
|
|
@@ -124,6 +150,7 @@ Optional extras:
|
|
|
124
150
|
uv sync --extra openai
|
|
125
151
|
uv sync --extra azureopenai
|
|
126
152
|
uv sync --extra otel
|
|
153
|
+
uv sync --extra webui
|
|
127
154
|
```
|
|
128
155
|
|
|
129
156
|
### Install in another project (pip / uv add)
|
|
@@ -138,6 +165,14 @@ pip install "agentbyte[azureopenai,otel]"
|
|
|
138
165
|
uv add "agentbyte[azureopenai,otel]"
|
|
139
166
|
```
|
|
140
167
|
|
|
168
|
+
For the browser WebUI:
|
|
169
|
+
|
|
170
|
+
```bash
|
|
171
|
+
pip install "agentbyte[webui]"
|
|
172
|
+
# or
|
|
173
|
+
uv add "agentbyte[webui]"
|
|
174
|
+
```
|
|
175
|
+
|
|
141
176
|
Install all optional features:
|
|
142
177
|
|
|
143
178
|
```bash
|
|
@@ -173,6 +208,111 @@ agent = Agent(
|
|
|
173
208
|
)
|
|
174
209
|
```
|
|
175
210
|
|
|
211
|
+
## Run The WebUI
|
|
212
|
+
|
|
213
|
+
### Option 1: Run the included demo app
|
|
214
|
+
|
|
215
|
+
This is the easiest way to see the WebUI working end to end with:
|
|
216
|
+
- one demo agent
|
|
217
|
+
- one demo workflow
|
|
218
|
+
- one demo orchestrator
|
|
219
|
+
|
|
220
|
+
Step 1. Install the WebUI extra:
|
|
221
|
+
|
|
222
|
+
```bash
|
|
223
|
+
uv sync --extra webui
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
Step 2. Start the demo app:
|
|
227
|
+
|
|
228
|
+
```bash
|
|
229
|
+
uv run python examples/webui/basic_webui.py
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
Step 3. Open the browser:
|
|
233
|
+
|
|
234
|
+
```text
|
|
235
|
+
http://127.0.0.1:8080
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
If auto-open is enabled in your environment, the browser may open automatically.
|
|
239
|
+
|
|
240
|
+
### Option 2: Run the WebUI against your current project directory
|
|
241
|
+
|
|
242
|
+
Use this when you want Agentbyte to scan a directory for exported `agent`, `workflow`, or `orchestrator` objects.
|
|
243
|
+
|
|
244
|
+
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`.
|
|
245
|
+
|
|
246
|
+
Step 1. Install the WebUI extra:
|
|
247
|
+
|
|
248
|
+
```bash
|
|
249
|
+
uv sync --extra webui
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
Step 2. Launch the WebUI and scan the current directory:
|
|
253
|
+
|
|
254
|
+
```bash
|
|
255
|
+
uv run agentbyte webui --dir .
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
Step 3. Open the browser:
|
|
259
|
+
|
|
260
|
+
```text
|
|
261
|
+
http://127.0.0.1:8080
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
Useful variants:
|
|
265
|
+
|
|
266
|
+
```bash
|
|
267
|
+
uv run agentbyte webui --dir . --port 8080 --host 127.0.0.1 --no-open
|
|
268
|
+
uv run agentbyte webui --dir examples --port 8090
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
For this repository, the most reliable first-run path is still the bundled demo:
|
|
272
|
+
|
|
273
|
+
```bash
|
|
274
|
+
uv run python examples/webui/basic_webui.py
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
Use `agentbyte webui --dir ...` when you have a directory of exportable demo modules, for example:
|
|
278
|
+
|
|
279
|
+
```python
|
|
280
|
+
# my_entities.py
|
|
281
|
+
agent = ...
|
|
282
|
+
workflow = ...
|
|
283
|
+
orchestrator = ...
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
### Option 3: Run it programmatically
|
|
287
|
+
|
|
288
|
+
Use this when you want to serve in-memory entities directly from Python.
|
|
289
|
+
|
|
290
|
+
```python
|
|
291
|
+
from agentbyte.webui import serve
|
|
292
|
+
|
|
293
|
+
serve(entities=[agent], port=8080, auto_open=True)
|
|
294
|
+
```
|
|
295
|
+
|
|
296
|
+
### Quick Troubleshooting
|
|
297
|
+
|
|
298
|
+
If the app does not start:
|
|
299
|
+
|
|
300
|
+
```bash
|
|
301
|
+
uv sync --extra webui
|
|
302
|
+
```
|
|
303
|
+
|
|
304
|
+
If port `8080` is already in use:
|
|
305
|
+
|
|
306
|
+
```bash
|
|
307
|
+
uv run agentbyte webui --dir . --port 8090
|
|
308
|
+
```
|
|
309
|
+
|
|
310
|
+
If you do not want the browser to open automatically:
|
|
311
|
+
|
|
312
|
+
```bash
|
|
313
|
+
uv run agentbyte webui --dir . --no-open
|
|
314
|
+
```
|
|
315
|
+
|
|
176
316
|
## Project Layout
|
|
177
317
|
|
|
178
318
|
```
|
|
@@ -202,4 +342,3 @@ MIT — see [LICENSE](LICENSE).
|
|
|
202
342
|
|
|
203
343
|
- [Designing Multi-Agent Systems](https://github.com/victordibia/designing-multiagent-systems/tree/main)
|
|
204
344
|
- [Microsoft Agent Framework](https://github.com/microsoft/agent-framework)
|
|
205
|
-
|