agentbyte 0.20.4__tar.gz → 0.20.5__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.20.4 → agentbyte-0.20.5}/.github/skills/agentbyte-agent/SKILL.md +61 -1
- {agentbyte-0.20.4 → agentbyte-0.20.5}/.github/skills/agentbyte-ai-driven-orchestration/SKILL.md +11 -6
- {agentbyte-0.20.4 → agentbyte-0.20.5}/.github/skills/agentbyte-handoff-orchestration/SKILL.md +10 -7
- {agentbyte-0.20.4 → agentbyte-0.20.5}/.github/skills/agentbyte-middleware/SKILL.md +32 -2
- {agentbyte-0.20.4 → agentbyte-0.20.5}/.github/skills/agentbyte-plan-based-orchestration/SKILL.md +10 -9
- {agentbyte-0.20.4 → agentbyte-0.20.5}/.github/skills/agentbyte-round-robin-orchestration/SKILL.md +11 -6
- {agentbyte-0.20.4 → agentbyte-0.20.5}/.github/skills/agentbyte-workflow/SKILL.md +15 -1
- agentbyte-0.20.5/.github/skills/webui-smoke-test/SKILL.md +314 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/CHANGELOG.md +17 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/PKG-INFO +3 -2
- {agentbyte-0.20.4 → agentbyte-0.20.5}/README.md +2 -1
- agentbyte-0.20.5/src/agentbyte/__about__.py +2 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/__init__.py +10 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/agents/agent_as_tool.py +1 -1
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/presets/__init__.py +12 -0
- agentbyte-0.20.5/src/agentbyte/presets/streaming.py +325 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/workflow/agent.py +33 -10
- {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/agents/test_agent_as_tool.py +22 -1
- agentbyte-0.20.5/tests/presets/test_streaming.py +127 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/test_package_api.py +15 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/workflow/test_workflow_agent.py +107 -1
- agentbyte-0.20.4/src/agentbyte/__about__.py +0 -2
- {agentbyte-0.20.4 → agentbyte-0.20.5}/.github/skills/agentbyte-coding-tools/SKILL.md +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/.github/skills/agentbyte-dataset/SKILL.md +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/.github/skills/agentbyte-eval/SKILL.md +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/.github/skills/agentbyte-function-tools/SKILL.md +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/.github/skills/agentbyte-list-memory/SKILL.md +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/.github/skills/agentbyte-llm-client/SKILL.md +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/.github/skills/agentbyte-memory-tool/SKILL.md +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/.github/skills/agentbyte-otel-tracing/SKILL.md +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/.github/skills/agentbyte-research-tools/SKILL.md +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/.github/skills/git-multi-remote-push/SKILL.md +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/.github/skills/skill-authoring/SKILL.md +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/.gitignore +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/LICENSE +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/pyproject.toml +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/agents/__init__.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/agents/agent.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/agents/base.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/agents/embedding_agent.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/agents/types.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/cancellation_token.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/catalog.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/cli/__init__.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/cli/main.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/component.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/context.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/context_providers/__init__.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/context_providers/base.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/context_providers/skill_tools.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/context_providers/skills.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/dataset/__init__.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/dataset/base.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/dataset/config.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/dataset/json.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/dataset/loader.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/dataset/publish.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/dataset/publish_config.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/dataset/publishers.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/dataset/sources.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/dataset/sqlite.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/entity.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/eval/__init__.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/eval/base.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/eval/checks/__init__.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/eval/checks/decorator.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/eval/checks/keyword.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/eval/checks/local.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/eval/checks/tool.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/eval/checks/types.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/eval/comparison.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/eval/eval_dataset.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/eval/judges/__init__.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/eval/judges/base.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/eval/judges/composite.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/eval/judges/llm.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/eval/judges/pairwise.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/eval/judges/reference.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/eval/pairwise.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/eval/report.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/eval/runner.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/eval/targets/__init__.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/eval/targets/agent.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/eval/targets/model.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/eval/targets/orchestrator.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/eval/types.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/llm/__init__.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/llm/_retry_observability.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/llm/auth.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/llm/azure/__init__.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/llm/azure/auth.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/llm/azure/chat.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/llm/azure/embedding.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/llm/azure/settings.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/llm/azure_openai.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/llm/azure_openai_embedding.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/llm/base.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/llm/embeddings_base.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/llm/openai/__init__.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/llm/openai/chat.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/llm/openai/embedding.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/llm/openai/settings.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/llm/openai.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/llm/openai_embedding.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/llm/pricing.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/llm/retry_policy.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/llm/settings.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/llm/types.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/logger.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/memory/__init__.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/memory/base.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/messages.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/microwebui/__init__.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/microwebui/server.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/microwebui/ui/index.html +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/middleware/__init__.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/middleware/base.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/middleware/otel.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/middleware/retry.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/middleware/sql_usage.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/middleware/usage_logger.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/notebook.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/orchestration/__init__.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/orchestration/ai.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/orchestration/base.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/orchestration/handoff.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/orchestration/plan.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/orchestration/policies.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/orchestration/round_robin.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/presets/agents.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/presets/clients.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/presets/instruction_registry.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/presets/instructions/orchestrator.yaml +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/presets/instructions/query_rewriter.yaml +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/presets/instructions/researcher.yaml +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/presets/instructions/reviewer.yaml +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/presets/instructions/writer.yaml +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/presets/orchestration.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/presets/skills/contracts-analyst/SKILL.md +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/presets/workflow.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/session_store.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/skills/__init__.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/skills/base.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/skills/resources.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/skills/scripts.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/skills/sources.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/termination/__init__.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/termination/base.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/termination/cancellation.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/termination/composite.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/termination/consecutive_agent.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/termination/external.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/termination/function_call.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/termination/handoff.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/termination/max_message.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/termination/predicate.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/termination/source.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/termination/text_mention.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/termination/timeout.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/termination/token_usage.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/tools/__init__.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/tools/base.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/tools/coding_tools.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/tools/core_tools.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/tools/decorator.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/tools/memory_tool.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/tools/research_tools.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/types.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/__init__.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/discovery.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/execution.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/.gitignore +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/README.md +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/components.json +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/eslint.config.js +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/index.html +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/package-lock.json +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/package.json +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/plan.md +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/public/vite.svg +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/App.css +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/App.tsx +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/assets/react.svg +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/agent/agent-view.tsx +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/message_renderer/ContentRenderer.tsx +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/message_renderer/MessageRenderer.tsx +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/message_renderer/index.ts +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/message_renderer/types.ts +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/mode-toggle.tsx +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/orchestrator/orchestrator-view.tsx +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/shared/app-header.tsx +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/shared/chat-base.tsx +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/shared/context-inspector.tsx +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/shared/debug-panel.tsx +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/shared/entity-selector.tsx +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/shared/example-tasks-display.tsx +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/shared/session-switcher.tsx +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/shared/tool-approval-banner.tsx +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/theme-provider.tsx +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/ui/attachment-gallery.tsx +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/ui/badge.tsx +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/ui/button.tsx +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/ui/card.tsx +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/ui/dialog.tsx +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/ui/dropdown-menu.tsx +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/ui/file-upload.tsx +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/ui/input.tsx +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/ui/label.tsx +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/ui/loading-spinner.tsx +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/ui/loading-state.tsx +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/ui/message-input.tsx +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/ui/scroll-area.tsx +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/ui/slider.tsx +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/ui/tabs.tsx +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/ui/textarea.tsx +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/workflow/workflow-result-renderer.tsx +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/components/workflow/workflow-view.tsx +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/hooks/messageHandlers.ts +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/hooks/useEntityExecution.ts +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/index.css +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/lib/format-utils.ts +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/lib/user-id.ts +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/lib/utils.ts +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/main.tsx +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/services/api.ts +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/types/index.ts +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/types/picoagents.ts +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/utils/message-utils.ts +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/src/vite-env.d.ts +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/tsconfig.app.json +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/tsconfig.json +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/tsconfig.node.json +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/vite.config.ts +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/frontend/yarn.lock +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/models.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/registry.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/server.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/session_store.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/sessions.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/ui/assets/index-DDp5MYFO.js +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/ui/assets/index-ar5tOeqt.css +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/ui/index.html +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/webui/ui/vite.svg +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/workflow/__init__.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/workflow/core/__init__.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/workflow/core/_structure_hash.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/workflow/core/checkpoint.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/workflow/core/models.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/workflow/core/runner.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/workflow/core/workflow.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/workflow/defaults.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/workflow/loader.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/workflow/schema.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/workflow/schema_utils.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/workflow/steps/__init__.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/workflow/steps/agentbyte_agent.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/workflow/steps/echo.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/workflow/steps/function.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/workflow/steps/http.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/workflow/steps/step.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/workflow/steps/subworkflow.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/workflow/steps/transform.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/src/agentbyte/workflow/visualizer.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/agents/test_agent_basic.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/agents/test_agent_context_providers.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/agents/test_agent_event_types.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/agents/test_agent_memory_integration.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/agents/test_agent_middleware_integration.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/agents/test_agent_retry_middleware.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/agents/test_agent_stream_events.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/agents/test_embedding_agent.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/agents/test_tool_approval.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/cli/test_registry_check.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/context_providers/__init__.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/context_providers/test_skill_tools.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/context_providers/test_skills_provider.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/dataset/test_loader.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/dataset/test_multi_table.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/dataset/test_publish.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/eval/test_eval_dataset.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/eval/test_pairwise.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/eval/test_phase1_runner_and_targets.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/eval/test_phase2_checks_and_reports.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/eval/test_types_and_judges.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/llm/test_azure_client.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/llm/test_azure_embedding_client.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/llm/test_llm_types.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/llm/test_openai_client.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/llm/test_openai_embedding_client.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/llm/test_retry_observability.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/llm/test_retry_policy_api.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/memory/test_memory.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/middleware/test_middleware_chain.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/middleware/test_otel.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/middleware/test_retry_middleware.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/middleware/test_sql_usage.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/middleware/test_usage_logger.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/orchestration/test_ai_orchestrator.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/orchestration/test_base_orchestrator.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/orchestration/test_handoff_orchestrator.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/orchestration/test_plan_orchestrator.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/orchestration/test_round_robin.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/presets/test_agents.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/presets/test_clients.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/presets/test_instruction_registry.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/presets/test_orchestration.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/presets/test_workflow.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/skills/__init__.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/skills/test_base.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/skills/test_resources.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/skills/test_scripts.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/skills/test_sources.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/termination/test_base.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/termination/test_cancellation.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/termination/test_composite.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/termination/test_consecutive_agent.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/termination/test_external.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/termination/test_function_call.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/termination/test_handoff.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/termination/test_max_message.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/termination/test_predicate.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/termination/test_source.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/termination/test_text_mention.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/termination/test_timeout.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/termination/test_token_usage.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/test_cancellation_token.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/test_context.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/test_logger.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/test_messages.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/test_session_store.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/test_types.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/tools/test_coding_tools.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/tools/test_memory_tool.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/tools/test_research_tools.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/tools/test_tools.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/webui/__init__.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/webui/helpers.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/webui/test_execution.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/webui/test_microwebui_server.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/webui/test_package_api.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/webui/test_registry.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/webui/test_server.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/webui/test_sessions.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/workflow/test_checkpoint.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/workflow/test_subworkflow_step.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/workflow/test_workflow_class.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/workflow/test_workflow_models.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/workflow/test_workflow_runner.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/workflow/test_workflow_schema.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/workflow/test_workflow_steps.py +0 -0
- {agentbyte-0.20.4 → agentbyte-0.20.5}/tests/workflow/test_workflow_visualizer.py +0 -0
|
@@ -80,6 +80,38 @@ print(response.final_content) # assistant's final text
|
|
|
80
80
|
print(response.messages[-1].content) # same, from message list
|
|
81
81
|
```
|
|
82
82
|
|
|
83
|
+
### Operation logging for run()
|
|
84
|
+
|
|
85
|
+
To see middleware logs from `agent.run(...)`, configure Python logging and add
|
|
86
|
+
`LoggingMiddleware`. The middleware emits records; logging configuration decides
|
|
87
|
+
whether they appear on stdout/stderr.
|
|
88
|
+
|
|
89
|
+
```python
|
|
90
|
+
import logging
|
|
91
|
+
|
|
92
|
+
from agentbyte.agents import Agent
|
|
93
|
+
from agentbyte.middleware import LoggingMiddleware
|
|
94
|
+
|
|
95
|
+
logging.basicConfig(
|
|
96
|
+
level=logging.INFO,
|
|
97
|
+
format="%(asctime)s %(name)s %(levelname)s %(message)s",
|
|
98
|
+
)
|
|
99
|
+
|
|
100
|
+
agent = Agent(
|
|
101
|
+
name="my-agent",
|
|
102
|
+
description="Answers simple questions.",
|
|
103
|
+
instructions="Answer concisely.",
|
|
104
|
+
model_client=client,
|
|
105
|
+
middlewares=[LoggingMiddleware()],
|
|
106
|
+
)
|
|
107
|
+
|
|
108
|
+
response = await agent.run("hello")
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
Use `model_client=...` and `middlewares=[...]` in Agentbyte. Passing only
|
|
112
|
+
`LoggingMiddleware()` is not enough if the host application has not configured
|
|
113
|
+
Python logging to show `INFO` records.
|
|
114
|
+
|
|
83
115
|
### Multi-turn (stateful — caller owns context)
|
|
84
116
|
|
|
85
117
|
```python
|
|
@@ -108,6 +140,27 @@ async for event in agent.run_stream(
|
|
|
108
140
|
# Final AgentResponse is the last item yielded
|
|
109
141
|
```
|
|
110
142
|
|
|
143
|
+
### Console stream printing
|
|
144
|
+
|
|
145
|
+
Use the preset printer for readable notebook or terminal debugging instead of
|
|
146
|
+
writing custom `isinstance(...)` dispatch in examples.
|
|
147
|
+
|
|
148
|
+
```python
|
|
149
|
+
from agentbyte.presets import ConsoleStreamPrinter, run_agent_stream
|
|
150
|
+
|
|
151
|
+
response = await run_agent_stream(
|
|
152
|
+
agent,
|
|
153
|
+
"Summarise the last 3 contracts.",
|
|
154
|
+
)
|
|
155
|
+
|
|
156
|
+
printer = ConsoleStreamPrinter(max_chars=1000)
|
|
157
|
+
async for item in agent.run_stream("Summarise the last 3 contracts.", verbose=True):
|
|
158
|
+
printer.print(item)
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
`run_agent_stream()` prints stream items and returns the final
|
|
162
|
+
`AgentResponse`. It defaults to `verbose=True` and `stream_tokens=False`.
|
|
163
|
+
|
|
111
164
|
### Stream logging with StreamEventLogger
|
|
112
165
|
|
|
113
166
|
Use `verbose=True` to emit execution events, then pass every streamed item to
|
|
@@ -141,7 +194,8 @@ async for item in agent.run_stream(
|
|
|
141
194
|
|
|
142
195
|
`StreamEventLogger` covers execution-layer events from `run_stream()`. It
|
|
143
196
|
complements `LoggingMiddleware`, which logs model and tool operations inside the
|
|
144
|
-
middleware chain.
|
|
197
|
+
middleware chain. Use `ConsoleStreamPrinter` for human-readable terminal output;
|
|
198
|
+
use `StreamEventLogger` for structured Python logs.
|
|
145
199
|
|
|
146
200
|
### run() parameters
|
|
147
201
|
|
|
@@ -353,6 +407,12 @@ response = await coordinator.run("What is the weather in Berlin in Celsius?")
|
|
|
353
407
|
|
|
354
408
|
`AgentAsTool` also accepts `context=` forwarding in `execute()` — pass a pre-seeded context to give the specialist prior history.
|
|
355
409
|
|
|
410
|
+
`AgentAsTool.execute_stream()` invokes the delegated child agent with
|
|
411
|
+
`verbose=True` and `stream_tokens=False`. This lets nested child-agent events
|
|
412
|
+
flow through a parent `agent.run_stream(..., verbose=True)` call for
|
|
413
|
+
`StreamEventLogger` or `ConsoleStreamPrinter`, while avoiding noisy nested token
|
|
414
|
+
chunks.
|
|
415
|
+
|
|
356
416
|
### Manual construction
|
|
357
417
|
|
|
358
418
|
```python
|
{agentbyte-0.20.4 → agentbyte-0.20.5}/.github/skills/agentbyte-ai-driven-orchestration/SKILL.md
RENAMED
|
@@ -102,6 +102,16 @@ asyncio.run(main())
|
|
|
102
102
|
|
|
103
103
|
## Pattern: Streaming AI-Driven Orchestration
|
|
104
104
|
|
|
105
|
+
For readable terminal output:
|
|
106
|
+
|
|
107
|
+
```python
|
|
108
|
+
from agentbyte.presets import run_orchestrator_stream
|
|
109
|
+
|
|
110
|
+
result = await run_orchestrator_stream(orchestrator, task)
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
For structured Python logs:
|
|
114
|
+
|
|
105
115
|
```python
|
|
106
116
|
from agentbyte.logger import StreamEventLogger
|
|
107
117
|
|
|
@@ -113,11 +123,6 @@ async for item in orchestrator.run_stream(task, verbose=True):
|
|
|
113
123
|
stream_logger.warning(item)
|
|
114
124
|
stream_logger.error(item)
|
|
115
125
|
stream_logger.exception(item)
|
|
116
|
-
|
|
117
|
-
if isinstance(item, Message):
|
|
118
|
-
print(f"[{item.source}] {item.content}")
|
|
119
|
-
elif isinstance(item, OrchestrationResponse):
|
|
120
|
-
print(f"Complete: {item.stop_message.content}")
|
|
121
126
|
```
|
|
122
127
|
|
|
123
128
|
## How AI Selection Works
|
|
@@ -273,7 +278,7 @@ termination = (
|
|
|
273
278
|
- **Safety Fallback:** If LLM selection fails, the orchestrator falls back to round-robin selection to preserve forward progress.
|
|
274
279
|
- **Usage Accounting:** Final usage includes both agent tokens AND selector tokens.
|
|
275
280
|
- **Case Insensitive:** Agent name matching is case-insensitive for robustness.
|
|
276
|
-
- **Event Observability:** Use `verbose=True` with `run_stream()` and pass items to `StreamEventLogger` for structured execution logs, including selector events.
|
|
281
|
+
- **Event Observability:** Use `verbose=True` with `run_stream()` and pass items to `StreamEventLogger` for structured execution logs, including selector events. Use `run_orchestrator_stream()` / `ConsoleStreamPrinter` for readable terminal output.
|
|
277
282
|
|
|
278
283
|
## When to Use AI-Driven vs Round-Robin
|
|
279
284
|
|
{agentbyte-0.20.4 → agentbyte-0.20.5}/.github/skills/agentbyte-handoff-orchestration/SKILL.md
RENAMED
|
@@ -85,10 +85,18 @@ asyncio.run(main())
|
|
|
85
85
|
|
|
86
86
|
## Pattern: Streaming Handoff Orchestration
|
|
87
87
|
|
|
88
|
+
For readable terminal output:
|
|
89
|
+
|
|
90
|
+
```python
|
|
91
|
+
from agentbyte.presets import run_orchestrator_stream
|
|
92
|
+
|
|
93
|
+
result = await run_orchestrator_stream(orchestrator, task)
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
For structured Python logs:
|
|
97
|
+
|
|
88
98
|
```python
|
|
89
99
|
from agentbyte.logger import StreamEventLogger
|
|
90
|
-
from agentbyte.messages import Message
|
|
91
|
-
from agentbyte.types import OrchestrationResponse
|
|
92
100
|
|
|
93
101
|
stream_logger = StreamEventLogger()
|
|
94
102
|
|
|
@@ -98,11 +106,6 @@ async for item in orchestrator.run_stream(task, verbose=True):
|
|
|
98
106
|
stream_logger.warning(item)
|
|
99
107
|
stream_logger.error(item)
|
|
100
108
|
stream_logger.exception(item)
|
|
101
|
-
|
|
102
|
-
if isinstance(item, Message):
|
|
103
|
-
print(f"[{item.source}] {item.content}")
|
|
104
|
-
elif isinstance(item, OrchestrationResponse):
|
|
105
|
-
print(f"Complete: {item.stop_message.content}")
|
|
106
109
|
```
|
|
107
110
|
|
|
108
111
|
## How Handoff Routing Works
|
|
@@ -117,13 +117,43 @@ agent = Agent(
|
|
|
117
117
|
|
|
118
118
|
### LoggingMiddleware
|
|
119
119
|
|
|
120
|
+
`LoggingMiddleware` emits standard Python log records. It does not configure
|
|
121
|
+
handlers by itself, so examples and notebooks must configure logging before the
|
|
122
|
+
agent runs.
|
|
123
|
+
|
|
120
124
|
```python
|
|
125
|
+
import logging
|
|
126
|
+
|
|
127
|
+
from agentbyte.agents import Agent
|
|
121
128
|
from agentbyte.middleware import LoggingMiddleware
|
|
122
129
|
|
|
123
|
-
|
|
124
|
-
|
|
130
|
+
logging.basicConfig(
|
|
131
|
+
level=logging.INFO,
|
|
132
|
+
format="%(asctime)s %(name)s %(levelname)s %(message)s",
|
|
133
|
+
)
|
|
134
|
+
|
|
135
|
+
agent = Agent(
|
|
136
|
+
name="my-agent",
|
|
137
|
+
description="Demonstrates operation logging.",
|
|
138
|
+
instructions="Answer concisely.",
|
|
139
|
+
model_client=client,
|
|
140
|
+
middlewares=[LoggingMiddleware()],
|
|
141
|
+
)
|
|
142
|
+
|
|
143
|
+
result = await agent.run("hello")
|
|
125
144
|
```
|
|
126
145
|
|
|
146
|
+
Logs are emitted under logger name `agentbyte.middleware`. If the application
|
|
147
|
+
already configured logging, set that logger level explicitly instead of calling
|
|
148
|
+
`basicConfig()` again:
|
|
149
|
+
|
|
150
|
+
```python
|
|
151
|
+
logging.getLogger("agentbyte.middleware").setLevel(logging.INFO)
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
Use `middlewares=[...]` and `model_client=...`; `middleware=` and `model=` are
|
|
155
|
+
not Agent constructor parameters.
|
|
156
|
+
|
|
127
157
|
### GuardrailMiddleware
|
|
128
158
|
|
|
129
159
|
```python
|
{agentbyte-0.20.4 → agentbyte-0.20.5}/.github/skills/agentbyte-plan-based-orchestration/SKILL.md
RENAMED
|
@@ -114,10 +114,18 @@ asyncio.run(main())
|
|
|
114
114
|
|
|
115
115
|
## Pattern: Streaming Plan-Based Orchestration
|
|
116
116
|
|
|
117
|
+
For readable terminal output:
|
|
118
|
+
|
|
119
|
+
```python
|
|
120
|
+
from agentbyte.presets import run_orchestrator_stream
|
|
121
|
+
|
|
122
|
+
result = await run_orchestrator_stream(orchestrator, task)
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
For structured Python logs:
|
|
126
|
+
|
|
117
127
|
```python
|
|
118
128
|
from agentbyte.logger import StreamEventLogger
|
|
119
|
-
from agentbyte.messages import Message
|
|
120
|
-
from agentbyte.types import OrchestrationResponse
|
|
121
129
|
|
|
122
130
|
stream_logger = StreamEventLogger()
|
|
123
131
|
|
|
@@ -127,12 +135,6 @@ async for item in orchestrator.run_stream(task, verbose=True):
|
|
|
127
135
|
stream_logger.warning(item)
|
|
128
136
|
stream_logger.error(item)
|
|
129
137
|
stream_logger.exception(item)
|
|
130
|
-
|
|
131
|
-
if isinstance(item, Message):
|
|
132
|
-
print(f"[MSG][{item.source}] {item.content}")
|
|
133
|
-
elif isinstance(item, OrchestrationResponse):
|
|
134
|
-
print(f"Complete: {item.stop_message.content}")
|
|
135
|
-
print(f"Steps completed: {item.pattern_metadata.get('steps_completed')}")
|
|
136
138
|
```
|
|
137
139
|
|
|
138
140
|
## How Plan-Based Orchestration Works
|
|
@@ -284,4 +286,3 @@ This makes plan-based orchestration more expensive than simpler patterns, but mu
|
|
|
284
286
|
3. Gather evidence -> synthesize -> present answer
|
|
285
287
|
4. Multi-step analyst/reporter/editor collaboration
|
|
286
288
|
5. Quality-sensitive tasks where each phase should be checked before moving on
|
|
287
|
-
|
{agentbyte-0.20.4 → agentbyte-0.20.5}/.github/skills/agentbyte-round-robin-orchestration/SKILL.md
RENAMED
|
@@ -71,6 +71,16 @@ asyncio.run(main())
|
|
|
71
71
|
|
|
72
72
|
## Pattern: Streaming Round-Robin
|
|
73
73
|
|
|
74
|
+
For readable terminal output:
|
|
75
|
+
|
|
76
|
+
```python
|
|
77
|
+
from agentbyte.presets import run_orchestrator_stream
|
|
78
|
+
|
|
79
|
+
result = await run_orchestrator_stream(orchestrator, task)
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
For structured Python logs:
|
|
83
|
+
|
|
74
84
|
```python
|
|
75
85
|
from agentbyte.logger import StreamEventLogger
|
|
76
86
|
|
|
@@ -82,11 +92,6 @@ async for item in orchestrator.run_stream(task, verbose=True):
|
|
|
82
92
|
stream_logger.warning(item)
|
|
83
93
|
stream_logger.error(item)
|
|
84
94
|
stream_logger.exception(item)
|
|
85
|
-
|
|
86
|
-
if isinstance(item, Message):
|
|
87
|
-
print(f"[{item.source}] {item.content}")
|
|
88
|
-
elif isinstance(item, OrchestrationResponse):
|
|
89
|
-
print(f"Complete: {item.stop_message.content}")
|
|
90
95
|
```
|
|
91
96
|
|
|
92
97
|
## Available Termination Conditions
|
|
@@ -220,7 +225,7 @@ result = await orchestrator.run(task, context=ctx, cancellation_token=token)
|
|
|
220
225
|
- **Safety Limit:** Set `max_iterations` as a failsafe even with other termination conditions.
|
|
221
226
|
- **Shared Context:** By default all agents see full history as text, but `HistoryContextPolicy` can narrow the window or change the format.
|
|
222
227
|
- **Model Client:** Each agent needs its own `model_client` configured.
|
|
223
|
-
- **Event Observability:** Use `verbose=True` with `run_stream()` and pass items to `StreamEventLogger` for structured execution logs.
|
|
228
|
+
- **Event Observability:** Use `verbose=True` with `run_stream()` and pass items to `StreamEventLogger` for structured execution logs. Use `run_orchestrator_stream()` / `ConsoleStreamPrinter` for readable terminal output.
|
|
224
229
|
|
|
225
230
|
## Common Use Cases
|
|
226
231
|
|
|
@@ -413,6 +413,20 @@ execution.error # str | None — set when status == FAILED
|
|
|
413
413
|
|
|
414
414
|
## 9. Streaming workflow events
|
|
415
415
|
|
|
416
|
+
For human-readable terminal or notebook output, use the console streaming preset:
|
|
417
|
+
|
|
418
|
+
```python
|
|
419
|
+
from agentbyte.presets import ConsoleStreamPrinter, run_workflow_stream
|
|
420
|
+
|
|
421
|
+
execution = await run_workflow_stream(workflow, {"value": 5})
|
|
422
|
+
|
|
423
|
+
printer = ConsoleStreamPrinter()
|
|
424
|
+
async for event in WorkflowRunner().run_stream(workflow, {"value": 5}):
|
|
425
|
+
printer.print(event)
|
|
426
|
+
```
|
|
427
|
+
|
|
428
|
+
For structured Python logs, use `StreamEventLogger`:
|
|
429
|
+
|
|
416
430
|
```python
|
|
417
431
|
from agentbyte.logger import StreamEventLogger
|
|
418
432
|
|
|
@@ -612,4 +626,4 @@ if not validation.is_valid:
|
|
|
612
626
|
- `request_input()` and `request_approval()` never return; code after them runs only on resume.
|
|
613
627
|
- Do not thread `AgentContext` through `WorkflowContext.state` — keep it in `AgentbyteAgentInput.agent_context`.
|
|
614
628
|
- `WorkflowRunner` is not thread-safe across concurrent runs of the same workflow instance; use one runner per concurrent workflow.
|
|
615
|
-
- Workflow logging is event-driven today — use `run_stream()` for observability,
|
|
629
|
+
- Workflow logging is event-driven today — use `run_stream()` for observability, pair it with `StreamEventLogger` for structured Python logs, and use `ConsoleStreamPrinter` / `run_workflow_stream()` for readable terminal output.
|
|
@@ -0,0 +1,314 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: webui-smoke-test
|
|
3
|
+
description: Step-by-step guide for smoke testing the Agentbyte WebUI server with curl. Use this when you need to validate discovery, agent streaming, multi-turn persistence, orchestrator execution, or workflow execution. Includes curl examples, expected responses, and debugging tips.
|
|
4
|
+
license: MIT
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
Use this skill when you need to **validate that the WebUI server is working correctly** across all entity types (agents, orchestrators, workflows) with real API credentials.
|
|
8
|
+
|
|
9
|
+
## Prerequisites
|
|
10
|
+
|
|
11
|
+
1. **Server running**: `uv run python examples/webui/presets_webui.py`
|
|
12
|
+
2. **API credentials configured**: `OPENAI_API_KEY` or `AZURE_OPENAI_API_KEY` exported
|
|
13
|
+
3. **Tools available**: `curl`, `jq` (optional, for output formatting), `uuidgen`
|
|
14
|
+
4. **Base URL**: `http://127.0.0.1:8080` (adjust host/port if needed)
|
|
15
|
+
|
|
16
|
+
## Critical: Message Format
|
|
17
|
+
|
|
18
|
+
**All messages sent to the API must include a `source` field.** This is required by the BaseMessage Pydantic schema.
|
|
19
|
+
|
|
20
|
+
❌ **Wrong:**
|
|
21
|
+
```json
|
|
22
|
+
{"role": "user", "content": "What is AI?"}
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
✅ **Correct:**
|
|
26
|
+
```json
|
|
27
|
+
{"role": "user", "content": "What is AI?", "source": "user"}
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## Step 1: Verify Discovery Endpoint
|
|
31
|
+
|
|
32
|
+
**Purpose**: Check that all entities are registered and discoverable.
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
curl -s http://127.0.0.1:8080/api/entities | jq .
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
**Expected Response**:
|
|
39
|
+
- JSON array of 8+ entity objects
|
|
40
|
+
- Each has: `id`, `name`, `type`, `description`, `model`, `tools`
|
|
41
|
+
- For presets_webui.py: `query_rewriter`, `researcher`, `writer`, `reviewer` (agents)
|
|
42
|
+
- For presets_webui.py: `round_robin_team`, `ai_team`, `plan_based_team` (orchestrators)
|
|
43
|
+
- For presets_webui.py: `research_writer_reviewer_workflow` (workflow)
|
|
44
|
+
|
|
45
|
+
**Debug if it fails**:
|
|
46
|
+
- Server not running? → `uv run python examples/webui/presets_webui.py`
|
|
47
|
+
- Port in use? → Check with `lsof -i :8080` and kill if needed
|
|
48
|
+
- CORS error? → Check server logs for middleware issues
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
## Step 2: Test Agent Streaming (Turn 1)
|
|
53
|
+
|
|
54
|
+
**Purpose**: Verify single-turn agent execution with SSE streaming.
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
session_id=$(uuidgen | tr '[:upper:]' '[:lower:]')
|
|
58
|
+
user_id=$(uuidgen | tr '[:upper:]' '[:lower:]')
|
|
59
|
+
|
|
60
|
+
echo "Session: $session_id"
|
|
61
|
+
echo "User: $user_id"
|
|
62
|
+
|
|
63
|
+
curl -N -X POST http://127.0.0.1:8080/api/entities/query_rewriter/run/stream \
|
|
64
|
+
-H "Content-Type: application/json" \
|
|
65
|
+
-d "{\"messages\":[{\"role\":\"user\",\"content\":\"Rewrite: impacts of AI on hiring\",\"source\":\"user\"}],\"session_id\":\"$session_id\",\"user_id\":\"$user_id\",\"stream_tokens\":false}"
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
**Expected Sequence**:
|
|
69
|
+
1. `data:` line with `event_type: "model_call"` → Model is being invoked
|
|
70
|
+
2. `data:` line with `event_type: "model_response"` → Model returned tokens
|
|
71
|
+
3. `data:` line with `role: "assistant"` → Final response message
|
|
72
|
+
4. `data:` line with `event_type: "task_complete"` → Execution finished
|
|
73
|
+
5. Final `data:` line with `context.messages` array → Session persisted
|
|
74
|
+
|
|
75
|
+
**Expected Content**:
|
|
76
|
+
- All `data:` lines are WebUIStreamEvent JSON: `{session_id, timestamp, event}`
|
|
77
|
+
- `session_id` matches what you sent
|
|
78
|
+
- `event` contains framework payloads (model_call, model_response, message, task_complete)
|
|
79
|
+
|
|
80
|
+
**Debug if it fails**:
|
|
81
|
+
- HTTP 400? → Check message format includes `source` field
|
|
82
|
+
- HTTP 404? → Entity doesn't exist, verify entity_id is correct
|
|
83
|
+
- HTTP 500? → Check server logs for actual error (usually API credential or validation issue)
|
|
84
|
+
- No streaming output? → Try without `-N` flag, or check if server is hung
|
|
85
|
+
- Timeout? → Model may be slow; wait or check OPENAI_API_KEY is valid
|
|
86
|
+
|
|
87
|
+
**Save the session_id** — you'll reuse it in Step 3.
|
|
88
|
+
|
|
89
|
+
---
|
|
90
|
+
|
|
91
|
+
## Step 3: Verify Multi-Turn Persistence
|
|
92
|
+
|
|
93
|
+
**Purpose**: Confirm agent sees prior conversation history and adapts responses.
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
# Use session_id and user_id from Step 2
|
|
97
|
+
curl -N -X POST http://127.0.0.1:8080/api/entities/query_rewriter/run/stream \
|
|
98
|
+
-H "Content-Type: application/json" \
|
|
99
|
+
-d "{\"messages\":[{\"role\":\"user\",\"content\":\"Make it even shorter\",\"source\":\"user\"}],\"session_id\":\"$session_id\",\"user_id\":\"$user_id\",\"stream_tokens\":false}" \
|
|
100
|
+
| grep -E '"content"|"role"|"event_type"' | head -20
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
**Expected Behavior**:
|
|
104
|
+
- In the `model_call` event, `input_messages` array should contain:
|
|
105
|
+
1. System message (if configured)
|
|
106
|
+
2. Turn 1 user message + response
|
|
107
|
+
3. Turn 2 user message (the "Make it shorter" request)
|
|
108
|
+
- Agent's response should be **shorter than Turn 1** — proof it understood context
|
|
109
|
+
- Final context should have **4+ messages** (system, turn1_user, turn1_asst, turn2_user, turn2_asst)
|
|
110
|
+
|
|
111
|
+
**Debug if it fails**:
|
|
112
|
+
- No prior messages in input? → Session not persisting, check SessionManager and session store
|
|
113
|
+
- Agent not adapting? → Model may not have received context; check input_messages array size
|
|
114
|
+
- Different response? → Normal variation; ensure it's shorter, not just different wording
|
|
115
|
+
|
|
116
|
+
---
|
|
117
|
+
|
|
118
|
+
## Step 4: Test Orchestrator Execution
|
|
119
|
+
|
|
120
|
+
**Purpose**: Verify multi-agent orchestration with non-streaming endpoint.
|
|
121
|
+
|
|
122
|
+
```bash
|
|
123
|
+
session_id=$(uuidgen | tr '[:upper:]' '[:lower:]')
|
|
124
|
+
user_id=$(uuidgen | tr '[:upper:]' '[:lower:]')
|
|
125
|
+
|
|
126
|
+
curl -s -X POST http://127.0.0.1:8080/api/entities/round_robin_team/run \
|
|
127
|
+
-H "Content-Type: application/json" \
|
|
128
|
+
-d "{\"messages\":[{\"role\":\"user\",\"content\":\"Research AI and hiring, then write a summary\",\"source\":\"user\"}],\"session_id\":\"$session_id\",\"user_id\":\"$user_id\"}" \
|
|
129
|
+
| jq '{final_result: .final_result, messages_count: (.messages | length), stop_reason: .stop_reason}'
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
**Expected Response**:
|
|
133
|
+
- `final_result` contains the orchestrator's final output (usually from the last agent)
|
|
134
|
+
- `messages` array has **3+ messages**:
|
|
135
|
+
- User's initial request
|
|
136
|
+
- Researcher's contribution
|
|
137
|
+
- Writer's contribution (or other agents in round-robin order)
|
|
138
|
+
- `stop_reason` shows why orchestration terminated (e.g., "Text mention found: 'TERMINATE'")
|
|
139
|
+
- `stop_message` object with details
|
|
140
|
+
|
|
141
|
+
**Expected Behavior**:
|
|
142
|
+
- All agents in the team should have contributed to `messages`
|
|
143
|
+
- Agents should have passed context between turns
|
|
144
|
+
- Output should synthesize contributions (e.g., research facts → written summary)
|
|
145
|
+
|
|
146
|
+
**Debug if it fails**:
|
|
147
|
+
- HTTP 500? → Check if OpenAI API is working (use agent test first)
|
|
148
|
+
- Only 1 message in array? → Agents aren't running; check orchestrator configuration
|
|
149
|
+
- No final_result? → Orchestrator may have failed; check stop_reason and server logs
|
|
150
|
+
- Timeout? → Orchestrator running multiple agents; may take 30+ seconds
|
|
151
|
+
|
|
152
|
+
---
|
|
153
|
+
|
|
154
|
+
## Step 5: Test Workflow Execution
|
|
155
|
+
|
|
156
|
+
**Purpose**: Verify deterministic workflow DAG execution.
|
|
157
|
+
|
|
158
|
+
```bash
|
|
159
|
+
session_id=$(uuidgen | tr '[:upper:]' '[:lower:]')
|
|
160
|
+
user_id=$(uuidgen | tr '[:upper:]' '[:lower:]')
|
|
161
|
+
|
|
162
|
+
curl -s -X POST http://127.0.0.1:8080/api/entities/research_writer_reviewer_workflow/run \
|
|
163
|
+
-H "Content-Type: application/json" \
|
|
164
|
+
-d "{\"input_data\":{\"task\":\"Write a 2 sentence note about solar energy benefits.\"},\"session_id\":\"$session_id\",\"user_id\":\"$user_id\"}" \
|
|
165
|
+
| jq '{status: .status, step_count: (.step_executions | length), state_keys: (.state | keys)}'
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
**Expected Response**:
|
|
169
|
+
- `status: "completed"`
|
|
170
|
+
- `step_executions` is a **dict** keyed by step name with **6+ entries** (one per DAG step); `| length` in jq works on both dicts and arrays
|
|
171
|
+
- `state` object has keys like `researcher_output`, `writer_draft`, `reviewer_output` (varies by workflow)
|
|
172
|
+
- Each step value has a `status: "completed"` field; `duration_ms` may not be present at top level
|
|
173
|
+
|
|
174
|
+
**Expected Behavior**:
|
|
175
|
+
- Steps execute in DAG order (dependencies respected)
|
|
176
|
+
- Each step uses output from prior steps
|
|
177
|
+
- Final state includes all intermediate and final outputs
|
|
178
|
+
- Workflow completes within reasonable time (30-120 seconds for research_writer_reviewer_workflow)
|
|
179
|
+
|
|
180
|
+
**Debug if it fails**:
|
|
181
|
+
- HTTP 500? → Check OpenAI API; workflows use multiple agent calls
|
|
182
|
+
- `step_executions` empty or too few? → Workflow may have errored; check server logs
|
|
183
|
+
- Status not "completed"? → Check error messages in response
|
|
184
|
+
- Timeout? → Workflows run multiple sequential steps; increase curl timeout with `--max-time 120`
|
|
185
|
+
|
|
186
|
+
---
|
|
187
|
+
|
|
188
|
+
## Full Smoke Test Script
|
|
189
|
+
|
|
190
|
+
Save this as `smoke_test.sh` for quick reuse:
|
|
191
|
+
|
|
192
|
+
```bash
|
|
193
|
+
#!/bin/bash
|
|
194
|
+
set -e
|
|
195
|
+
|
|
196
|
+
BASE_URL="${1:-http://127.0.0.1:8080}"
|
|
197
|
+
echo "🔍 Testing WebUI server at $BASE_URL"
|
|
198
|
+
echo ""
|
|
199
|
+
|
|
200
|
+
# Step 1: Discovery
|
|
201
|
+
echo "1️⃣ Testing Discovery Endpoint..."
|
|
202
|
+
ENTITY_COUNT=$(curl -s "$BASE_URL/api/entities" | jq 'length')
|
|
203
|
+
echo " ✅ Found $ENTITY_COUNT entities"
|
|
204
|
+
echo ""
|
|
205
|
+
|
|
206
|
+
# Step 2: Agent Streaming
|
|
207
|
+
echo "2️⃣ Testing Agent Streaming (Turn 1)..."
|
|
208
|
+
SESSION_ID=$(uuidgen | tr '[:upper:]' '[:lower:]')
|
|
209
|
+
USER_ID=$(uuidgen | tr '[:upper:]' '[:lower:]')
|
|
210
|
+
echo " Session: $SESSION_ID"
|
|
211
|
+
|
|
212
|
+
STREAM_EVENTS=$(curl -s -N -X POST "$BASE_URL/api/entities/query_rewriter/run/stream" \
|
|
213
|
+
-H "Content-Type: application/json" \
|
|
214
|
+
-d "{\"messages\":[{\"role\":\"user\",\"content\":\"Rewrite: impacts of AI on hiring\",\"source\":\"user\"}],\"session_id\":\"$SESSION_ID\",\"user_id\":\"$USER_ID\",\"stream_tokens\":false}" \
|
|
215
|
+
| grep -c "data:" || true)
|
|
216
|
+
echo " ✅ Received $STREAM_EVENTS SSE frames"
|
|
217
|
+
echo ""
|
|
218
|
+
|
|
219
|
+
# Step 3: Multi-turn
|
|
220
|
+
echo "3️⃣ Testing Multi-Turn Persistence (Turn 2)..."
|
|
221
|
+
STREAM_EVENTS_T2=$(curl -s -N -X POST "$BASE_URL/api/entities/query_rewriter/run/stream" \
|
|
222
|
+
-H "Content-Type: application/json" \
|
|
223
|
+
-d "{\"messages\":[{\"role\":\"user\",\"content\":\"Make it shorter\",\"source\":\"user\"}],\"session_id\":\"$SESSION_ID\",\"user_id\":\"$USER_ID\",\"stream_tokens\":false}" \
|
|
224
|
+
| grep -c "data:" || true)
|
|
225
|
+
echo " ✅ Received $STREAM_EVENTS_T2 SSE frames (context preserved)"
|
|
226
|
+
echo ""
|
|
227
|
+
|
|
228
|
+
# Step 4: Orchestrator
|
|
229
|
+
echo "4️⃣ Testing Orchestrator Execution..."
|
|
230
|
+
SESSION_ID=$(uuidgen | tr '[:upper:]' '[:lower:]')
|
|
231
|
+
ORCH_RESULT=$(curl -s -X POST "$BASE_URL/api/entities/round_robin_team/run" \
|
|
232
|
+
-H "Content-Type: application/json" \
|
|
233
|
+
-d "{\"messages\":[{\"role\":\"user\",\"content\":\"Write a 2 sentence note about solar energy.\",\"source\":\"user\"}],\"session_id\":\"$SESSION_ID\",\"user_id\":\"$USER_ID\"}")
|
|
234
|
+
MSG_COUNT=$(echo "$ORCH_RESULT" | jq '.messages | length')
|
|
235
|
+
echo " ✅ Orchestrator produced $MSG_COUNT messages"
|
|
236
|
+
echo ""
|
|
237
|
+
|
|
238
|
+
# Step 5: Workflow
|
|
239
|
+
echo "5️⃣ Testing Workflow Execution..."
|
|
240
|
+
SESSION_ID=$(uuidgen | tr '[:upper:]' '[:lower:]')
|
|
241
|
+
WF_RESULT=$(curl -s -X POST "$BASE_URL/api/entities/research_writer_reviewer_workflow/run" \
|
|
242
|
+
-H "Content-Type: application/json" \
|
|
243
|
+
-d "{\"input_data\":{\"task\":\"Write 1 sentence about solar energy.\"},\"session_id\":\"$SESSION_ID\",\"user_id\":\"$USER_ID\"}")
|
|
244
|
+
WF_STATUS=$(echo "$WF_RESULT" | jq -r '.status')
|
|
245
|
+
STEP_COUNT=$(echo "$WF_RESULT" | jq '.step_executions | length')
|
|
246
|
+
echo " ✅ Workflow status: $WF_STATUS ($STEP_COUNT steps)"
|
|
247
|
+
echo ""
|
|
248
|
+
|
|
249
|
+
echo "✅ All smoke tests passed!"
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
**Run it**:
|
|
253
|
+
```bash
|
|
254
|
+
chmod +x smoke_test.sh
|
|
255
|
+
./smoke_test.sh
|
|
256
|
+
# or with custom base URL:
|
|
257
|
+
./smoke_test.sh http://prod-server:8080
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
---
|
|
261
|
+
|
|
262
|
+
## Common Issues & Solutions
|
|
263
|
+
|
|
264
|
+
| Issue | Cause | Solution |
|
|
265
|
+
|-------|-------|----------|
|
|
266
|
+
| HTTP 400 | Missing `source` field in message | Add `"source":"user"` to every message |
|
|
267
|
+
| HTTP 404 | Entity doesn't exist | Verify entity_id in discovery response |
|
|
268
|
+
| HTTP 500 | API credential invalid/expired | Check `$OPENAI_API_KEY` or Azure credentials |
|
|
269
|
+
| HTTP 500 | Rate limit hit | Wait 60s and retry |
|
|
270
|
+
| No output | Server not running | `uv run python examples/webui/presets_webui.py` |
|
|
271
|
+
| No SSE frames | `-N` flag needed | Use `-N` flag for streaming: `curl -N ...` |
|
|
272
|
+
| Timeout | Model responding slowly | Increase timeout: `--max-time 120` |
|
|
273
|
+
| Session not persisting | Wrong session store | Check config; use in-memory for dev tests |
|
|
274
|
+
|
|
275
|
+
---
|
|
276
|
+
|
|
277
|
+
## Debugging with Verbose Output
|
|
278
|
+
|
|
279
|
+
```bash
|
|
280
|
+
# See full HTTP headers and response:
|
|
281
|
+
curl -v -X POST http://127.0.0.1:8080/api/entities/query_rewriter/run/stream \
|
|
282
|
+
-H "Content-Type: application/json" \
|
|
283
|
+
-d '{"messages":[{"role":"user","content":"test","source":"user"}],"session_id":"xyz","user_id":"abc","stream_tokens":false}' \
|
|
284
|
+
2>&1 | head -50
|
|
285
|
+
|
|
286
|
+
# See just the first SSE frame:
|
|
287
|
+
curl -N -X POST http://127.0.0.1:8080/api/entities/query_rewriter/run/stream \
|
|
288
|
+
-H "Content-Type: application/json" \
|
|
289
|
+
-d '...' \
|
|
290
|
+
2>/dev/null | head -1 | jq .
|
|
291
|
+
|
|
292
|
+
# Parse event types from stream:
|
|
293
|
+
curl -N -X POST http://127.0.0.1:8080/api/entities/query_rewriter/run/stream \
|
|
294
|
+
-H "Content-Type: application/json" \
|
|
295
|
+
-d '...' \
|
|
296
|
+
2>/dev/null | grep -oP '"event_type":\s*"\K[^"]+' | sort | uniq -c
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
---
|
|
300
|
+
|
|
301
|
+
## Success Criteria
|
|
302
|
+
|
|
303
|
+
✅ **Smoke tests pass if**:
|
|
304
|
+
1. Discovery returns entity array
|
|
305
|
+
2. Agent streaming produces 4+ SSE frames
|
|
306
|
+
3. Multi-turn context includes prior messages
|
|
307
|
+
4. Orchestrator produces 2+ agent messages
|
|
308
|
+
5. Workflow completes all steps
|
|
309
|
+
|
|
310
|
+
✅ **You can now**:
|
|
311
|
+
- Deploy to dev/staging with confidence
|
|
312
|
+
- Debug specific entity types using this guide
|
|
313
|
+
- Add new entities and rerun smoke tests
|
|
314
|
+
- Use curl patterns as frontend request templates
|
|
@@ -4,6 +4,23 @@ 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.20.5] - 2026-05-20
|
|
8
|
+
|
|
9
|
+
### Added
|
|
10
|
+
|
|
11
|
+
- Added `agentbyte.presets.streaming` with `ConsoleStreamPrinter`, `render_stream_item`, `run_agent_stream()`, `run_orchestrator_stream()`, and `run_workflow_stream()` for readable terminal/notebook stream inspection.
|
|
12
|
+
- Exported the console streaming helpers from `agentbyte.presets` and the top-level `agentbyte` package.
|
|
13
|
+
- Added focused tests for stream rendering, helper return values, package exports, workflow-as-agent event forwarding, and delegated agent-as-tool streaming.
|
|
14
|
+
- Added `docs/study/01-agent_topics/topic_console_streaming_preset.md` and cross-referenced it from the agent and stream logger study topics.
|
|
15
|
+
|
|
16
|
+
### Changed
|
|
17
|
+
|
|
18
|
+
- `WorkflowAgent.run_stream(verbose=True)` now forwards underlying workflow events before yielding the final agent-style `AssistantMessage` and `AgentResponse`; `verbose=False` preserves the quiet final-output behavior.
|
|
19
|
+
- `AgentAsTool.execute_stream()` now invokes delegated child agents with `verbose=True` and `stream_tokens=False`, allowing nested child-agent events to flow through parent verbose streams without nested token noise.
|
|
20
|
+
- Updated repo-local `.github/skills` guidance for agents, workflows, orchestration, and middleware logging, including explicit `LoggingMiddleware` setup with Python logging configuration.
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
7
24
|
## [0.20.4] - 2026-05-18
|
|
8
25
|
|
|
9
26
|
### Fixed
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: agentbyte
|
|
3
|
-
Version: 0.20.
|
|
3
|
+
Version: 0.20.5
|
|
4
4
|
Summary: A toolkit for designing multiagent systems
|
|
5
5
|
Author-email: MrDataPsycho <mr.data.psycho@gmail.com>
|
|
6
6
|
License-Expression: LicenseRef-Proprietary
|
|
@@ -76,7 +76,7 @@ Description-Content-Type: text/markdown
|
|
|
76
76
|
|
|
77
77
|
Agentbyte is an observability-first agentic AI framework for building and studying multiagent systems with a learning-first, implementation-oriented workflow.
|
|
78
78
|
|
|
79
|
-
Current release: **0.20.
|
|
79
|
+
Current release: **0.20.5**
|
|
80
80
|
|
|
81
81
|
## Current Capabilities
|
|
82
82
|
|
|
@@ -84,6 +84,7 @@ Current release: **0.20.4**
|
|
|
84
84
|
- Tooling system (function tools + core tools + memory tool).
|
|
85
85
|
- Middleware chain for request/response/error handling.
|
|
86
86
|
- Built-in middleware: logging, security, rate limiting, approval, telemetry.
|
|
87
|
+
- Console stream printing presets for readable agent, orchestrator, and workflow debugging.
|
|
87
88
|
- Memory abstractions: list memory, file memory, context injection.
|
|
88
89
|
- OpenAI and Azure OpenAI model client support.
|
|
89
90
|
- OpenTelemetry-first tracing with model-call and task-level usage telemetry.
|