agentbyte 0.4.0__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.
Files changed (221) hide show
  1. {agentbyte-0.4.0 → agentbyte-0.4.2}/.gitignore +3 -1
  2. {agentbyte-0.4.0 → agentbyte-0.4.2}/CHANGELOG.md +25 -0
  3. {agentbyte-0.4.0 → agentbyte-0.4.2}/PKG-INFO +135 -3
  4. {agentbyte-0.4.0 → agentbyte-0.4.2}/README.md +129 -2
  5. {agentbyte-0.4.0 → agentbyte-0.4.2}/pyproject.toml +12 -1
  6. {agentbyte-0.4.0 → agentbyte-0.4.2}/src/agentbyte/__about__.py +1 -1
  7. {agentbyte-0.4.0 → agentbyte-0.4.2}/src/agentbyte/__init__.py +5 -0
  8. {agentbyte-0.4.0 → agentbyte-0.4.2}/src/agentbyte/cli/main.py +84 -1
  9. {agentbyte-0.4.0 → agentbyte-0.4.2}/src/agentbyte/llm/azure_openai_embedding.py +1 -0
  10. {agentbyte-0.4.0 → agentbyte-0.4.2}/src/agentbyte/llm/embeddings_base.py +10 -2
  11. {agentbyte-0.4.0 → agentbyte-0.4.2}/src/agentbyte/llm/openai_embedding.py +1 -0
  12. {agentbyte-0.4.0 → agentbyte-0.4.2}/src/agentbyte/llm/types.py +13 -1
  13. agentbyte-0.4.2/src/agentbyte/webui/__init__.py +52 -0
  14. agentbyte-0.4.2/src/agentbyte/webui/agent_framework_devui/ui/assets/index-BzhEszHZ.css +1 -0
  15. agentbyte-0.4.2/src/agentbyte/webui/agent_framework_devui/ui/assets/index-DByFJNGD.js +245 -0
  16. agentbyte-0.4.2/src/agentbyte/webui/agent_framework_devui/ui/index.html +14 -0
  17. agentbyte-0.4.2/src/agentbyte/webui/agent_framework_devui/ui/vite.svg +1 -0
  18. agentbyte-0.4.2/src/agentbyte/webui/discovery.py +230 -0
  19. agentbyte-0.4.2/src/agentbyte/webui/execution.py +268 -0
  20. agentbyte-0.4.2/src/agentbyte/webui/frontend/.gitignore +22 -0
  21. agentbyte-0.4.2/src/agentbyte/webui/frontend/README.md +69 -0
  22. agentbyte-0.4.2/src/agentbyte/webui/frontend/components.json +21 -0
  23. agentbyte-0.4.2/src/agentbyte/webui/frontend/eslint.config.js +23 -0
  24. agentbyte-0.4.2/src/agentbyte/webui/frontend/index.html +13 -0
  25. agentbyte-0.4.2/src/agentbyte/webui/frontend/package.json +47 -0
  26. agentbyte-0.4.2/src/agentbyte/webui/frontend/plan.md +0 -0
  27. agentbyte-0.4.2/src/agentbyte/webui/frontend/public/vite.svg +1 -0
  28. agentbyte-0.4.2/src/agentbyte/webui/frontend/src/App.css +42 -0
  29. agentbyte-0.4.2/src/agentbyte/webui/frontend/src/App.tsx +486 -0
  30. agentbyte-0.4.2/src/agentbyte/webui/frontend/src/assets/react.svg +1 -0
  31. agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/agent/agent-view.tsx +312 -0
  32. agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/message_renderer/ContentRenderer.tsx +275 -0
  33. agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/message_renderer/MessageRenderer.tsx +20 -0
  34. agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/message_renderer/index.ts +7 -0
  35. agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/message_renderer/types.ts +24 -0
  36. agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/mode-toggle.tsx +39 -0
  37. agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/orchestrator/orchestrator-view.tsx +280 -0
  38. agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/shared/app-header.tsx +49 -0
  39. agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/shared/chat-base.tsx +253 -0
  40. agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/shared/context-inspector.tsx +460 -0
  41. agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/shared/debug-panel.tsx +266 -0
  42. agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/shared/entity-selector.tsx +264 -0
  43. agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/shared/example-tasks-display.tsx +41 -0
  44. agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/shared/examples-gallery.tsx +268 -0
  45. agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/shared/session-switcher.tsx +198 -0
  46. agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/shared/tool-approval-banner.tsx +142 -0
  47. agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/theme-provider.tsx +33 -0
  48. agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/ui/attachment-gallery.tsx +166 -0
  49. agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/ui/badge.tsx +36 -0
  50. agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/ui/button.tsx +59 -0
  51. agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/ui/card.tsx +92 -0
  52. agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/ui/dialog.tsx +71 -0
  53. agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/ui/dropdown-menu.tsx +255 -0
  54. agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/ui/file-upload.tsx +141 -0
  55. agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/ui/input.tsx +21 -0
  56. agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/ui/label.tsx +22 -0
  57. agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/ui/loading-spinner.tsx +23 -0
  58. agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/ui/loading-state.tsx +52 -0
  59. agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/ui/message-input.tsx +237 -0
  60. agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/ui/scroll-area.tsx +46 -0
  61. agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/ui/slider.tsx +26 -0
  62. agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/ui/tabs.tsx +53 -0
  63. agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/ui/textarea.tsx +24 -0
  64. agentbyte-0.4.2/src/agentbyte/webui/frontend/src/components/workflow/workflow-view.tsx +422 -0
  65. agentbyte-0.4.2/src/agentbyte/webui/frontend/src/hooks/messageHandlers.ts +274 -0
  66. agentbyte-0.4.2/src/agentbyte/webui/frontend/src/hooks/useEntityExecution.ts +312 -0
  67. agentbyte-0.4.2/src/agentbyte/webui/frontend/src/index.css +147 -0
  68. agentbyte-0.4.2/src/agentbyte/webui/frontend/src/main.tsx +18 -0
  69. agentbyte-0.4.2/src/agentbyte/webui/frontend/src/services/api.ts +290 -0
  70. agentbyte-0.4.2/src/agentbyte/webui/frontend/src/types/index.ts +52 -0
  71. agentbyte-0.4.2/src/agentbyte/webui/frontend/src/types/picoagents.ts +261 -0
  72. agentbyte-0.4.2/src/agentbyte/webui/frontend/src/utils/message-utils.ts +149 -0
  73. agentbyte-0.4.2/src/agentbyte/webui/frontend/src/vite-env.d.ts +9 -0
  74. agentbyte-0.4.2/src/agentbyte/webui/frontend/tsconfig.app.json +31 -0
  75. agentbyte-0.4.2/src/agentbyte/webui/frontend/tsconfig.json +13 -0
  76. agentbyte-0.4.2/src/agentbyte/webui/frontend/tsconfig.node.json +25 -0
  77. agentbyte-0.4.2/src/agentbyte/webui/frontend/vite.config.ts +34 -0
  78. agentbyte-0.4.2/src/agentbyte/webui/frontend/yarn.lock +2282 -0
  79. agentbyte-0.4.2/src/agentbyte/webui/models.py +174 -0
  80. agentbyte-0.4.2/src/agentbyte/webui/registry.py +130 -0
  81. agentbyte-0.4.2/src/agentbyte/webui/server.py +431 -0
  82. agentbyte-0.4.2/src/agentbyte/webui/session_store.py +63 -0
  83. agentbyte-0.4.2/src/agentbyte/webui/sessions.py +99 -0
  84. agentbyte-0.4.2/src/agentbyte/webui/ui/assets/index-CWk64UM3.js +359 -0
  85. agentbyte-0.4.2/src/agentbyte/webui/ui/assets/index-vt1cujlT.css +1 -0
  86. agentbyte-0.4.2/src/agentbyte/webui/ui/index.html +14 -0
  87. agentbyte-0.4.2/src/agentbyte/webui/ui/vite.svg +1 -0
  88. {agentbyte-0.4.0 → agentbyte-0.4.2}/tests/llm/test_azure_embedding_client.py +3 -0
  89. {agentbyte-0.4.0 → agentbyte-0.4.2}/tests/llm/test_openai_embedding_client.py +3 -0
  90. agentbyte-0.4.2/tests/webui/__init__.py +1 -0
  91. agentbyte-0.4.2/tests/webui/helpers.py +142 -0
  92. agentbyte-0.4.2/tests/webui/test_execution.py +139 -0
  93. agentbyte-0.4.2/tests/webui/test_package_api.py +14 -0
  94. agentbyte-0.4.2/tests/webui/test_registry.py +79 -0
  95. agentbyte-0.4.2/tests/webui/test_server.py +54 -0
  96. {agentbyte-0.4.0 → agentbyte-0.4.2}/.github/skills/agentbyte-agent-as-tool/SKILL.md +0 -0
  97. {agentbyte-0.4.0 → agentbyte-0.4.2}/.github/skills/agentbyte-ai-driven-orchestration/SKILL.md +0 -0
  98. {agentbyte-0.4.0 → agentbyte-0.4.2}/.github/skills/agentbyte-dataset/SKILL.md +0 -0
  99. {agentbyte-0.4.0 → agentbyte-0.4.2}/.github/skills/agentbyte-function-tools/SKILL.md +0 -0
  100. {agentbyte-0.4.0 → agentbyte-0.4.2}/.github/skills/agentbyte-list-memory/SKILL.md +0 -0
  101. {agentbyte-0.4.0 → agentbyte-0.4.2}/.github/skills/agentbyte-llm-client/SKILL.md +0 -0
  102. {agentbyte-0.4.0 → agentbyte-0.4.2}/.github/skills/agentbyte-memory-tool/SKILL.md +0 -0
  103. {agentbyte-0.4.0 → agentbyte-0.4.2}/.github/skills/agentbyte-middleware/SKILL.md +0 -0
  104. {agentbyte-0.4.0 → agentbyte-0.4.2}/.github/skills/agentbyte-multi-turn-context/SKILL.md +0 -0
  105. {agentbyte-0.4.0 → agentbyte-0.4.2}/.github/skills/agentbyte-otel-tracing/SKILL.md +0 -0
  106. {agentbyte-0.4.0 → agentbyte-0.4.2}/.github/skills/agentbyte-round-robin-orchestration/SKILL.md +0 -0
  107. {agentbyte-0.4.0 → agentbyte-0.4.2}/.github/skills/agentbyte-simple-agent/SKILL.md +0 -0
  108. {agentbyte-0.4.0 → agentbyte-0.4.2}/.github/skills/agentbyte-tool-approval/SKILL.md +0 -0
  109. {agentbyte-0.4.0 → agentbyte-0.4.2}/.github/skills/skill-authoring/SKILL.md +0 -0
  110. {agentbyte-0.4.0 → agentbyte-0.4.2}/LICENSE +0 -0
  111. {agentbyte-0.4.0 → agentbyte-0.4.2}/src/agentbyte/agents/__init__.py +0 -0
  112. {agentbyte-0.4.0 → agentbyte-0.4.2}/src/agentbyte/agents/agent.py +0 -0
  113. {agentbyte-0.4.0 → agentbyte-0.4.2}/src/agentbyte/agents/agent_as_tool.py +0 -0
  114. {agentbyte-0.4.0 → agentbyte-0.4.2}/src/agentbyte/agents/base.py +0 -0
  115. {agentbyte-0.4.0 → agentbyte-0.4.2}/src/agentbyte/agents/types.py +0 -0
  116. {agentbyte-0.4.0 → agentbyte-0.4.2}/src/agentbyte/cancellation_token.py +0 -0
  117. {agentbyte-0.4.0 → agentbyte-0.4.2}/src/agentbyte/cli/__init__.py +0 -0
  118. {agentbyte-0.4.0 → agentbyte-0.4.2}/src/agentbyte/component.py +0 -0
  119. {agentbyte-0.4.0 → agentbyte-0.4.2}/src/agentbyte/context.py +0 -0
  120. {agentbyte-0.4.0 → agentbyte-0.4.2}/src/agentbyte/dataset/__init__.py +0 -0
  121. {agentbyte-0.4.0 → agentbyte-0.4.2}/src/agentbyte/dataset/base.py +0 -0
  122. {agentbyte-0.4.0 → agentbyte-0.4.2}/src/agentbyte/dataset/json.py +0 -0
  123. {agentbyte-0.4.0 → agentbyte-0.4.2}/src/agentbyte/dataset/loader.py +0 -0
  124. {agentbyte-0.4.0 → agentbyte-0.4.2}/src/agentbyte/dataset/loaders.py +0 -0
  125. {agentbyte-0.4.0 → agentbyte-0.4.2}/src/agentbyte/dataset/sqlite.py +0 -0
  126. {agentbyte-0.4.0 → agentbyte-0.4.2}/src/agentbyte/entity.py +0 -0
  127. {agentbyte-0.4.0 → agentbyte-0.4.2}/src/agentbyte/llm/__init__.py +0 -0
  128. {agentbyte-0.4.0 → agentbyte-0.4.2}/src/agentbyte/llm/auth.py +0 -0
  129. {agentbyte-0.4.0 → agentbyte-0.4.2}/src/agentbyte/llm/azure_openai.py +0 -0
  130. {agentbyte-0.4.0 → agentbyte-0.4.2}/src/agentbyte/llm/base.py +0 -0
  131. {agentbyte-0.4.0 → agentbyte-0.4.2}/src/agentbyte/llm/openai.py +0 -0
  132. {agentbyte-0.4.0 → agentbyte-0.4.2}/src/agentbyte/llm/pricing.py +0 -0
  133. {agentbyte-0.4.0 → agentbyte-0.4.2}/src/agentbyte/llm/settings.py +0 -0
  134. {agentbyte-0.4.0 → agentbyte-0.4.2}/src/agentbyte/memory/__init__.py +0 -0
  135. {agentbyte-0.4.0 → agentbyte-0.4.2}/src/agentbyte/memory/base.py +0 -0
  136. {agentbyte-0.4.0 → agentbyte-0.4.2}/src/agentbyte/messages.py +0 -0
  137. {agentbyte-0.4.0 → agentbyte-0.4.2}/src/agentbyte/middleware/__init__.py +0 -0
  138. {agentbyte-0.4.0 → agentbyte-0.4.2}/src/agentbyte/middleware/base.py +0 -0
  139. {agentbyte-0.4.0 → agentbyte-0.4.2}/src/agentbyte/middleware/otel.py +0 -0
  140. {agentbyte-0.4.0 → agentbyte-0.4.2}/src/agentbyte/notebook.py +0 -0
  141. {agentbyte-0.4.0 → agentbyte-0.4.2}/src/agentbyte/orchestration/__init__.py +0 -0
  142. {agentbyte-0.4.0 → agentbyte-0.4.2}/src/agentbyte/orchestration/ai.py +0 -0
  143. {agentbyte-0.4.0 → agentbyte-0.4.2}/src/agentbyte/orchestration/base.py +0 -0
  144. {agentbyte-0.4.0 → agentbyte-0.4.2}/src/agentbyte/orchestration/plan.py +0 -0
  145. {agentbyte-0.4.0 → agentbyte-0.4.2}/src/agentbyte/orchestration/round_robin.py +0 -0
  146. {agentbyte-0.4.0 → agentbyte-0.4.2}/src/agentbyte/session.py +0 -0
  147. {agentbyte-0.4.0 → agentbyte-0.4.2}/src/agentbyte/termination/__init__.py +0 -0
  148. {agentbyte-0.4.0 → agentbyte-0.4.2}/src/agentbyte/termination/base.py +0 -0
  149. {agentbyte-0.4.0 → agentbyte-0.4.2}/src/agentbyte/termination/cancellation.py +0 -0
  150. {agentbyte-0.4.0 → agentbyte-0.4.2}/src/agentbyte/termination/composite.py +0 -0
  151. {agentbyte-0.4.0 → agentbyte-0.4.2}/src/agentbyte/termination/external.py +0 -0
  152. {agentbyte-0.4.0 → agentbyte-0.4.2}/src/agentbyte/termination/function_call.py +0 -0
  153. {agentbyte-0.4.0 → agentbyte-0.4.2}/src/agentbyte/termination/handoff.py +0 -0
  154. {agentbyte-0.4.0 → agentbyte-0.4.2}/src/agentbyte/termination/max_message.py +0 -0
  155. {agentbyte-0.4.0 → agentbyte-0.4.2}/src/agentbyte/termination/text_mention.py +0 -0
  156. {agentbyte-0.4.0 → agentbyte-0.4.2}/src/agentbyte/termination/timeout.py +0 -0
  157. {agentbyte-0.4.0 → agentbyte-0.4.2}/src/agentbyte/termination/token_usage.py +0 -0
  158. {agentbyte-0.4.0 → agentbyte-0.4.2}/src/agentbyte/tools/__init__.py +0 -0
  159. {agentbyte-0.4.0 → agentbyte-0.4.2}/src/agentbyte/tools/base.py +0 -0
  160. {agentbyte-0.4.0 → agentbyte-0.4.2}/src/agentbyte/tools/core_tools.py +0 -0
  161. {agentbyte-0.4.0 → agentbyte-0.4.2}/src/agentbyte/tools/decorator.py +0 -0
  162. {agentbyte-0.4.0 → agentbyte-0.4.2}/src/agentbyte/tools/memory_tool.py +0 -0
  163. {agentbyte-0.4.0 → agentbyte-0.4.2}/src/agentbyte/types.py +0 -0
  164. {agentbyte-0.4.0 → agentbyte-0.4.2}/src/agentbyte/workflow/__init__.py +0 -0
  165. {agentbyte-0.4.0 → agentbyte-0.4.2}/src/agentbyte/workflow/core/__init__.py +0 -0
  166. {agentbyte-0.4.0 → agentbyte-0.4.2}/src/agentbyte/workflow/core/checkpoint.py +0 -0
  167. {agentbyte-0.4.0 → agentbyte-0.4.2}/src/agentbyte/workflow/core/models.py +0 -0
  168. {agentbyte-0.4.0 → agentbyte-0.4.2}/src/agentbyte/workflow/core/runner.py +0 -0
  169. {agentbyte-0.4.0 → agentbyte-0.4.2}/src/agentbyte/workflow/core/workflow.py +0 -0
  170. {agentbyte-0.4.0 → agentbyte-0.4.2}/src/agentbyte/workflow/defaults.py +0 -0
  171. {agentbyte-0.4.0 → agentbyte-0.4.2}/src/agentbyte/workflow/schema_utils.py +0 -0
  172. {agentbyte-0.4.0 → agentbyte-0.4.2}/src/agentbyte/workflow/steps/__init__.py +0 -0
  173. {agentbyte-0.4.0 → agentbyte-0.4.2}/src/agentbyte/workflow/steps/agentbyte_agent.py +0 -0
  174. {agentbyte-0.4.0 → agentbyte-0.4.2}/src/agentbyte/workflow/steps/echo.py +0 -0
  175. {agentbyte-0.4.0 → agentbyte-0.4.2}/src/agentbyte/workflow/steps/function.py +0 -0
  176. {agentbyte-0.4.0 → agentbyte-0.4.2}/src/agentbyte/workflow/steps/http.py +0 -0
  177. {agentbyte-0.4.0 → agentbyte-0.4.2}/src/agentbyte/workflow/steps/step.py +0 -0
  178. {agentbyte-0.4.0 → agentbyte-0.4.2}/src/agentbyte/workflow/steps/transform.py +0 -0
  179. {agentbyte-0.4.0 → agentbyte-0.4.2}/src/agentbyte/workflow/visualizer.py +0 -0
  180. {agentbyte-0.4.0 → agentbyte-0.4.2}/tests/agents/test_agent_as_tool.py +0 -0
  181. {agentbyte-0.4.0 → agentbyte-0.4.2}/tests/agents/test_agent_basic.py +0 -0
  182. {agentbyte-0.4.0 → agentbyte-0.4.2}/tests/agents/test_agent_event_types.py +0 -0
  183. {agentbyte-0.4.0 → agentbyte-0.4.2}/tests/agents/test_agent_memory_integration.py +0 -0
  184. {agentbyte-0.4.0 → agentbyte-0.4.2}/tests/agents/test_agent_middleware_integration.py +0 -0
  185. {agentbyte-0.4.0 → agentbyte-0.4.2}/tests/agents/test_agent_stream_events.py +0 -0
  186. {agentbyte-0.4.0 → agentbyte-0.4.2}/tests/agents/test_tool_approval.py +0 -0
  187. {agentbyte-0.4.0 → agentbyte-0.4.2}/tests/cli/test_create_skills.py +0 -0
  188. {agentbyte-0.4.0 → agentbyte-0.4.2}/tests/llm/test_azure_client.py +0 -0
  189. {agentbyte-0.4.0 → agentbyte-0.4.2}/tests/llm/test_llm_types.py +0 -0
  190. {agentbyte-0.4.0 → agentbyte-0.4.2}/tests/llm/test_openai_client.py +0 -0
  191. {agentbyte-0.4.0 → agentbyte-0.4.2}/tests/memory/test_memory.py +0 -0
  192. {agentbyte-0.4.0 → agentbyte-0.4.2}/tests/middleware/test_middleware_chain.py +0 -0
  193. {agentbyte-0.4.0 → agentbyte-0.4.2}/tests/middleware/test_otel.py +0 -0
  194. {agentbyte-0.4.0 → agentbyte-0.4.2}/tests/orchestration/test_ai_orchestrator.py +0 -0
  195. {agentbyte-0.4.0 → agentbyte-0.4.2}/tests/orchestration/test_base_orchestrator.py +0 -0
  196. {agentbyte-0.4.0 → agentbyte-0.4.2}/tests/orchestration/test_plan_orchestrator.py +0 -0
  197. {agentbyte-0.4.0 → agentbyte-0.4.2}/tests/orchestration/test_round_robin.py +0 -0
  198. {agentbyte-0.4.0 → agentbyte-0.4.2}/tests/termination/test_base.py +0 -0
  199. {agentbyte-0.4.0 → agentbyte-0.4.2}/tests/termination/test_cancellation.py +0 -0
  200. {agentbyte-0.4.0 → agentbyte-0.4.2}/tests/termination/test_composite.py +0 -0
  201. {agentbyte-0.4.0 → agentbyte-0.4.2}/tests/termination/test_external.py +0 -0
  202. {agentbyte-0.4.0 → agentbyte-0.4.2}/tests/termination/test_function_call.py +0 -0
  203. {agentbyte-0.4.0 → agentbyte-0.4.2}/tests/termination/test_handoff.py +0 -0
  204. {agentbyte-0.4.0 → agentbyte-0.4.2}/tests/termination/test_max_message.py +0 -0
  205. {agentbyte-0.4.0 → agentbyte-0.4.2}/tests/termination/test_text_mention.py +0 -0
  206. {agentbyte-0.4.0 → agentbyte-0.4.2}/tests/termination/test_timeout.py +0 -0
  207. {agentbyte-0.4.0 → agentbyte-0.4.2}/tests/termination/test_token_usage.py +0 -0
  208. {agentbyte-0.4.0 → agentbyte-0.4.2}/tests/test_cancellation_token.py +0 -0
  209. {agentbyte-0.4.0 → agentbyte-0.4.2}/tests/test_context.py +0 -0
  210. {agentbyte-0.4.0 → agentbyte-0.4.2}/tests/test_messages.py +0 -0
  211. {agentbyte-0.4.0 → agentbyte-0.4.2}/tests/test_package_api.py +0 -0
  212. {agentbyte-0.4.0 → agentbyte-0.4.2}/tests/test_session.py +0 -0
  213. {agentbyte-0.4.0 → agentbyte-0.4.2}/tests/test_types.py +0 -0
  214. {agentbyte-0.4.0 → agentbyte-0.4.2}/tests/tools/test_memory_tool.py +0 -0
  215. {agentbyte-0.4.0 → agentbyte-0.4.2}/tests/tools/test_tools.py +0 -0
  216. {agentbyte-0.4.0 → agentbyte-0.4.2}/tests/workflow/test_checkpoint.py +0 -0
  217. {agentbyte-0.4.0 → agentbyte-0.4.2}/tests/workflow/test_workflow_class.py +0 -0
  218. {agentbyte-0.4.0 → agentbyte-0.4.2}/tests/workflow/test_workflow_models.py +0 -0
  219. {agentbyte-0.4.0 → agentbyte-0.4.2}/tests/workflow/test_workflow_runner.py +0 -0
  220. {agentbyte-0.4.0 → agentbyte-0.4.2}/tests/workflow/test_workflow_steps.py +0 -0
  221. {agentbyte-0.4.0 → agentbyte-0.4.2}/tests/workflow/test_workflow_visualizer.py +0 -0
@@ -16,6 +16,8 @@ wheels/
16
16
  *.swp
17
17
  *.swo
18
18
  *~
19
+ node_modules/
20
+ *.tsbuildinfo
19
21
 
20
22
  # OS
21
23
  .DS_Store
@@ -37,4 +39,4 @@ htmlcov/
37
39
 
38
40
  docs/chapters/
39
41
  data/Designing-Multi-Agent-Systems.pdf
40
- artifacts/
42
+ artifacts/
@@ -4,6 +4,31 @@ 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
+
7
32
  ## [0.4.0] - 2026-03-24
8
33
 
9
34
  ### Added
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agentbyte
3
- Version: 0.4.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,35 @@ 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.4.0/logo/agent-byte-avatar-low.png" alt="Agentbyte" width="200"/>
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.4.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
+
45
62
  ## What's New in 0.4.0
46
63
 
47
64
  - Added multi-agent orchestration foundations with `BaseOrchestrator`.
@@ -49,6 +66,7 @@ Repository: [gitlab.com/pyninja/aiengineering/agentbyte](https://gitlab.com/pyni
49
66
  - Added a full termination system for autonomous orchestration flows.
50
67
  - Added plan-based orchestration examples, tests, and study/tutorial docs.
51
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.
52
70
 
53
71
  ## What's New in 0.3.5
54
72
 
@@ -132,6 +150,7 @@ Optional extras:
132
150
  uv sync --extra openai
133
151
  uv sync --extra azureopenai
134
152
  uv sync --extra otel
153
+ uv sync --extra webui
135
154
  ```
136
155
 
137
156
  ### Install in another project (pip / uv add)
@@ -146,6 +165,14 @@ pip install "agentbyte[azureopenai,otel]"
146
165
  uv add "agentbyte[azureopenai,otel]"
147
166
  ```
148
167
 
168
+ For the browser WebUI:
169
+
170
+ ```bash
171
+ pip install "agentbyte[webui]"
172
+ # or
173
+ uv add "agentbyte[webui]"
174
+ ```
175
+
149
176
  Install all optional features:
150
177
 
151
178
  ```bash
@@ -181,6 +208,111 @@ agent = Agent(
181
208
  )
182
209
  ```
183
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
+
184
316
  ## Project Layout
185
317
 
186
318
  ```
@@ -1,15 +1,27 @@
1
1
  <p align="center">
2
- <img src="https://gitlab.com/pyninja/aiengineering/agentbyte/-/raw/v0.4.0/logo/agent-byte-avatar-low.png" alt="Agentbyte" width="200"/>
2
+ <img src="https://gitlab.com/pyninja/aiengineering/agentbyte/-/raw/v0.4.2/logo/agent-byte-avatar-low.png" alt="Agentbyte" width="200"/>
3
3
  </p>
4
4
 
5
5
  # Agentbyte
6
6
 
7
7
  Agentbyte is an observability-first agentic AI framework for building and studying multiagent systems with a learning-first, implementation-oriented workflow.
8
8
 
9
- Current release: **0.4.0**
9
+ Current release: **0.4.2**
10
10
 
11
11
  Repository: [gitlab.com/pyninja/aiengineering/agentbyte](https://gitlab.com/pyninja/aiengineering/agentbyte)
12
12
 
13
+ ## What's New in 0.4.2
14
+
15
+ - Rebased the WebUI source frontend on the picoagents frontend snapshot copied into `src/agentbyte/webui/frontend/`.
16
+ - Added the packaged picoagents-style `agent_framework_devui` assets under `src/agentbyte/webui/` for parity/reference work.
17
+ - Fixed wheel packaging so the bundled WebUI assets are included once, unblocking PyPI publish.
18
+
19
+ ## What's New in 0.4.1
20
+
21
+ - Extended `EmbeddingResult` with a single-vector `embedding` field while preserving `embeddings`, `usage`, `model`, and `metadata`.
22
+ - Updated OpenAI and Azure embedding clients so single-input calls are easier to consume without losing batch compatibility.
23
+ - Added and validated focused embedding client coverage for the new dual-field result contract.
24
+
13
25
  ## What's New in 0.4.0
14
26
 
15
27
  - Added multi-agent orchestration foundations with `BaseOrchestrator`.
@@ -17,6 +29,7 @@ Repository: [gitlab.com/pyninja/aiengineering/agentbyte](https://gitlab.com/pyni
17
29
  - Added a full termination system for autonomous orchestration flows.
18
30
  - Added plan-based orchestration examples, tests, and study/tutorial docs.
19
31
  - Expanded OpenTelemetry coverage across agents, workflows, and orchestration roots with aggregate usage summaries.
32
+ - Added a packaged Chapter 8 WebUI with FastAPI + SSE, session handling, discovery, and a browser UI for agents, workflows, and orchestrators.
20
33
 
21
34
  ## What's New in 0.3.5
22
35
 
@@ -100,6 +113,7 @@ Optional extras:
100
113
  uv sync --extra openai
101
114
  uv sync --extra azureopenai
102
115
  uv sync --extra otel
116
+ uv sync --extra webui
103
117
  ```
104
118
 
105
119
  ### Install in another project (pip / uv add)
@@ -114,6 +128,14 @@ pip install "agentbyte[azureopenai,otel]"
114
128
  uv add "agentbyte[azureopenai,otel]"
115
129
  ```
116
130
 
131
+ For the browser WebUI:
132
+
133
+ ```bash
134
+ pip install "agentbyte[webui]"
135
+ # or
136
+ uv add "agentbyte[webui]"
137
+ ```
138
+
117
139
  Install all optional features:
118
140
 
119
141
  ```bash
@@ -149,6 +171,111 @@ agent = Agent(
149
171
  )
150
172
  ```
151
173
 
174
+ ## Run The WebUI
175
+
176
+ ### Option 1: Run the included demo app
177
+
178
+ This is the easiest way to see the WebUI working end to end with:
179
+ - one demo agent
180
+ - one demo workflow
181
+ - one demo orchestrator
182
+
183
+ Step 1. Install the WebUI extra:
184
+
185
+ ```bash
186
+ uv sync --extra webui
187
+ ```
188
+
189
+ Step 2. Start the demo app:
190
+
191
+ ```bash
192
+ uv run python examples/webui/basic_webui.py
193
+ ```
194
+
195
+ Step 3. Open the browser:
196
+
197
+ ```text
198
+ http://127.0.0.1:8080
199
+ ```
200
+
201
+ If auto-open is enabled in your environment, the browser may open automatically.
202
+
203
+ ### Option 2: Run the WebUI against your current project directory
204
+
205
+ Use this when you want Agentbyte to scan a directory for exported `agent`, `workflow`, or `orchestrator` objects.
206
+
207
+ 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`.
208
+
209
+ Step 1. Install the WebUI extra:
210
+
211
+ ```bash
212
+ uv sync --extra webui
213
+ ```
214
+
215
+ Step 2. Launch the WebUI and scan the current directory:
216
+
217
+ ```bash
218
+ uv run agentbyte webui --dir .
219
+ ```
220
+
221
+ Step 3. Open the browser:
222
+
223
+ ```text
224
+ http://127.0.0.1:8080
225
+ ```
226
+
227
+ Useful variants:
228
+
229
+ ```bash
230
+ uv run agentbyte webui --dir . --port 8080 --host 127.0.0.1 --no-open
231
+ uv run agentbyte webui --dir examples --port 8090
232
+ ```
233
+
234
+ For this repository, the most reliable first-run path is still the bundled demo:
235
+
236
+ ```bash
237
+ uv run python examples/webui/basic_webui.py
238
+ ```
239
+
240
+ Use `agentbyte webui --dir ...` when you have a directory of exportable demo modules, for example:
241
+
242
+ ```python
243
+ # my_entities.py
244
+ agent = ...
245
+ workflow = ...
246
+ orchestrator = ...
247
+ ```
248
+
249
+ ### Option 3: Run it programmatically
250
+
251
+ Use this when you want to serve in-memory entities directly from Python.
252
+
253
+ ```python
254
+ from agentbyte.webui import serve
255
+
256
+ serve(entities=[agent], port=8080, auto_open=True)
257
+ ```
258
+
259
+ ### Quick Troubleshooting
260
+
261
+ If the app does not start:
262
+
263
+ ```bash
264
+ uv sync --extra webui
265
+ ```
266
+
267
+ If port `8080` is already in use:
268
+
269
+ ```bash
270
+ uv run agentbyte webui --dir . --port 8090
271
+ ```
272
+
273
+ If you do not want the browser to open automatically:
274
+
275
+ ```bash
276
+ uv run agentbyte webui --dir . --no-open
277
+ ```
278
+
152
279
  ## Project Layout
153
280
 
154
281
  ```
@@ -35,14 +35,21 @@ azureopenai = [
35
35
  "openai>=1.107.1",
36
36
  "azure-identity>=1.25.1",
37
37
  ]
38
+ webui = [
39
+ "fastapi>=0.135.2",
40
+ "uvicorn>=0.42.0",
41
+ ]
38
42
  all = [
39
43
  "openai>=1.107.1",
40
44
  "azure-identity>=1.25.1",
41
45
  "opentelemetry-api>=1.39.1",
42
46
  "opentelemetry-exporter-otlp-proto-http>=1.39.1",
43
47
  "opentelemetry-sdk>=1.39.1",
48
+ "fastapi>=0.135.2",
49
+ "uvicorn>=0.42.0",
44
50
  ]
45
51
 
52
+
46
53
  [project.scripts]
47
54
  agentbyte = "agentbyte.cli:main"
48
55
 
@@ -60,7 +67,7 @@ packages = ["src/agentbyte"]
60
67
  ".github/skills" = "agentbyte/skills"
61
68
 
62
69
  [tool.hatch.build.targets.sdist]
63
- include = ["/src", "/tests", "/README.md", "/LICENSE", "/CHANGELOG.md", "/.github/skills"]
70
+ include = ["/src", "/tests", "/README.md", "/LICENSE", "/CHANGELOG.md", "/.github/skills", "/src/agentbyte/webui/ui"]
64
71
 
65
72
  [dependency-groups]
66
73
  dev = [
@@ -84,6 +91,10 @@ test = [
84
91
  viz = [
85
92
  "graphviz>=0.21",
86
93
  ]
94
+ webui = [
95
+ "fastapi>=0.135.2",
96
+ "uvicorn>=0.42.0",
97
+ ]
87
98
 
88
99
  [tool.pytest.ini_options]
89
100
  testpaths = ["tests"]
@@ -1,2 +1,2 @@
1
- __version__ = "0.4.0"
1
+ __version__ = "0.4.2"
2
2
  VERSION = __version__
@@ -47,6 +47,7 @@ from agentbyte.termination import (
47
47
  TimeoutTermination,
48
48
  TokenUsageTermination,
49
49
  )
50
+ from agentbyte.webui import WebUIServer, create_app, serve
50
51
 
51
52
  # Auto-instrument with OpenTelemetry if enabled.
52
53
  # Must be set BEFORE importing agentbyte for transparent instrumentation.
@@ -90,4 +91,8 @@ __all__ = [
90
91
  "ExternalTermination",
91
92
  "CancellationTermination",
92
93
  "CompositeTermination",
94
+ # WebUI
95
+ "WebUIServer",
96
+ "create_app",
97
+ "serve",
93
98
  ]
@@ -137,9 +137,42 @@ def cmd_create_skills(args: argparse.Namespace, cwd: Path | None = None) -> int:
137
137
 
138
138
  _COMMANDS = [
139
139
  ("create-skills", "Copy AI assistant skills into this project"),
140
+ ("webui", "Launch the Agentbyte WebUI"),
140
141
  ]
141
142
 
142
143
 
144
+ def cmd_webui(args: argparse.Namespace) -> int:
145
+ """Implement the webui sub-command."""
146
+ try:
147
+ from agentbyte.webui import launch
148
+ except Exception as exc:
149
+ print(
150
+ "Error: WebUI dependencies are not available. "
151
+ "Install them with `uv sync --extra webui` or `pip install agentbyte[webui]`.",
152
+ file=sys.stderr,
153
+ )
154
+ print(f"Details: {exc}", file=sys.stderr)
155
+ return 1
156
+
157
+ try:
158
+ launch(
159
+ entities_dir=args.dir,
160
+ port=args.port,
161
+ host=args.host,
162
+ auto_open=not args.no_open,
163
+ reload=args.reload,
164
+ log_level=args.log_level,
165
+ )
166
+ except KeyboardInterrupt:
167
+ print("\nShutting down Agentbyte WebUI.")
168
+ return 0
169
+ except Exception as exc:
170
+ print(f"Error starting Agentbyte WebUI: {exc}", file=sys.stderr)
171
+ return 1
172
+
173
+ return 0
174
+
175
+
143
176
  def _prompt_choice(prompt: str, choices: list[str], default: int = 1) -> str | None:
144
177
  """Print a numbered menu and return the selected string value.
145
178
 
@@ -203,6 +236,17 @@ def _interactive_wizard() -> int:
203
236
  args = argparse.Namespace(provider=provider)
204
237
  return cmd_create_skills(args)
205
238
 
239
+ if command == "webui":
240
+ args = argparse.Namespace(
241
+ dir=".",
242
+ port=8080,
243
+ host="127.0.0.1",
244
+ no_open=False,
245
+ reload=False,
246
+ log_level="info",
247
+ )
248
+ return cmd_webui(args)
249
+
206
250
  return 0
207
251
 
208
252
 
@@ -240,6 +284,44 @@ def _build_parser() -> argparse.ArgumentParser:
240
284
  ),
241
285
  )
242
286
 
287
+ webui_parser = subparsers.add_parser(
288
+ "webui",
289
+ help="Launch the packaged Agentbyte WebUI",
290
+ )
291
+ webui_parser.add_argument(
292
+ "--dir",
293
+ default=".",
294
+ help="Directory to scan for agents, workflows, and orchestrators",
295
+ )
296
+ webui_parser.add_argument(
297
+ "--port",
298
+ "-p",
299
+ type=int,
300
+ default=8080,
301
+ help="Port to run the server on (default: 8080)",
302
+ )
303
+ webui_parser.add_argument(
304
+ "--host",
305
+ default="127.0.0.1",
306
+ help="Host to bind the server to (default: 127.0.0.1)",
307
+ )
308
+ webui_parser.add_argument(
309
+ "--no-open",
310
+ action="store_true",
311
+ help="Do not automatically open the browser",
312
+ )
313
+ webui_parser.add_argument(
314
+ "--reload",
315
+ action="store_true",
316
+ help="Enable auto-reload for development",
317
+ )
318
+ webui_parser.add_argument(
319
+ "--log-level",
320
+ choices=["debug", "info", "warning", "error"],
321
+ default="info",
322
+ help="Server log level (default: info)",
323
+ )
324
+
243
325
  return parser
244
326
 
245
327
 
@@ -257,7 +339,8 @@ def main() -> None:
257
339
 
258
340
  if args.command == "create-skills":
259
341
  sys.exit(cmd_create_skills(args))
342
+ if args.command == "webui":
343
+ sys.exit(cmd_webui(args))
260
344
 
261
345
  parser.print_help()
262
346
  sys.exit(1)
263
-
@@ -398,6 +398,7 @@ class AzureOpenAIEmbeddingClient(
398
398
  )
399
399
 
400
400
  return EmbeddingResult(
401
+ embedding=vectors[0],
401
402
  embeddings=vectors,
402
403
  model=getattr(response, "model", self.model),
403
404
  usage=usage,
@@ -50,7 +50,11 @@ class BaseEmbeddingClient(ABC, ComponentLoader):
50
50
 
51
51
  @abstractmethod
52
52
  async def create(self, input_text: str, **kwargs: Any) -> EmbeddingResult:
53
- """Create one embedding result from one text input."""
53
+ """Create one embedding result from one text input.
54
+
55
+ Consumers should read `result.embedding` for the single returned vector.
56
+ The batch-oriented `result.embeddings` field still contains one item.
57
+ """
54
58
 
55
59
  @abstractmethod
56
60
  async def create_batch(
@@ -58,7 +62,11 @@ class BaseEmbeddingClient(ABC, ComponentLoader):
58
62
  input_texts: List[str],
59
63
  **kwargs: Any,
60
64
  ) -> EmbeddingResult:
61
- """Create one embedding result from a batch of text inputs."""
65
+ """Create one embedding result from a batch of text inputs.
66
+
67
+ Consumers should read `result.embeddings` for the full batch in request
68
+ order. The `result.embedding` field mirrors the first vector.
69
+ """
62
70
 
63
71
  async def _execute_embedding_operation(
64
72
  self,
@@ -178,6 +178,7 @@ class OpenAIEmbeddingClient(
178
178
  )
179
179
 
180
180
  return EmbeddingResult(
181
+ embedding=vectors[0],
181
182
  embeddings=vectors,
182
183
  model=getattr(response, "model", self.model),
183
184
  usage=usage,
@@ -158,12 +158,25 @@ class EmbeddingResult(BaseModel):
158
158
  Response payload for embedding generation.
159
159
 
160
160
  Attributes:
161
+ embedding: First embedding vector in request order. For single-input
162
+ calls, this is the embedding for the provided text.
161
163
  embeddings: Embedding vectors in request order.
162
164
  model: Model/deployment used by the provider.
163
165
  usage: Token usage and execution metadata.
164
166
  metadata: Provider-specific metadata.
167
+
168
+ Invariant:
169
+ `embedding == embeddings[0]`
170
+
171
+ Single-input `create()` calls return exactly one vector in
172
+ `embeddings`, while batch `create_batch()` calls return all vectors in
173
+ request order and expose the first vector through `embedding`.
165
174
  """
166
175
 
176
+ embedding: list[float] = Field(
177
+ ...,
178
+ description="First embedding vector in request order",
179
+ )
167
180
  embeddings: list[list[float]] = Field(
168
181
  ...,
169
182
  description="Embedding vectors in request order",
@@ -212,4 +225,3 @@ __all__ = [
212
225
  "ModelClientError",
213
226
  ]
214
227
 
215
-