agentbyte 0.24.0__tar.gz → 0.24.2__tar.gz

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