flock-core 0.5.0b28__py3-none-any.whl → 0.5.0b51__py3-none-any.whl

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.

Potentially problematic release.


This version of flock-core might be problematic. Click here for more details.

Files changed (469) hide show
  1. flock/__init__.py +12 -217
  2. flock/agent.py +678 -0
  3. flock/api/themes.py +71 -0
  4. flock/artifacts.py +79 -0
  5. flock/cli.py +75 -0
  6. flock/components.py +173 -0
  7. flock/dashboard/__init__.py +28 -0
  8. flock/dashboard/collector.py +283 -0
  9. flock/dashboard/events.py +182 -0
  10. flock/dashboard/launcher.py +230 -0
  11. flock/dashboard/service.py +537 -0
  12. flock/dashboard/websocket.py +235 -0
  13. flock/engines/__init__.py +6 -0
  14. flock/engines/dspy_engine.py +856 -0
  15. flock/examples.py +128 -0
  16. flock/frontend/README.md +678 -0
  17. flock/frontend/docs/DESIGN_SYSTEM.md +1980 -0
  18. flock/frontend/index.html +12 -0
  19. flock/frontend/package-lock.json +4347 -0
  20. flock/frontend/package.json +48 -0
  21. flock/frontend/src/App.tsx +79 -0
  22. flock/frontend/src/__tests__/e2e/critical-scenarios.test.tsx +587 -0
  23. flock/frontend/src/__tests__/integration/filtering-e2e.test.tsx +387 -0
  24. flock/frontend/src/__tests__/integration/graph-rendering.test.tsx +640 -0
  25. flock/frontend/src/__tests__/integration/indexeddb-persistence.test.tsx +699 -0
  26. flock/frontend/src/components/common/BuildInfo.tsx +39 -0
  27. flock/frontend/src/components/common/EmptyState.module.css +115 -0
  28. flock/frontend/src/components/common/EmptyState.tsx +128 -0
  29. flock/frontend/src/components/common/ErrorBoundary.module.css +169 -0
  30. flock/frontend/src/components/common/ErrorBoundary.tsx +118 -0
  31. flock/frontend/src/components/common/KeyboardShortcutsDialog.css +251 -0
  32. flock/frontend/src/components/common/KeyboardShortcutsDialog.tsx +151 -0
  33. flock/frontend/src/components/common/LoadingSpinner.module.css +97 -0
  34. flock/frontend/src/components/common/LoadingSpinner.tsx +29 -0
  35. flock/frontend/src/components/controls/PublishControl.css +547 -0
  36. flock/frontend/src/components/controls/PublishControl.test.tsx +543 -0
  37. flock/frontend/src/components/controls/PublishControl.tsx +432 -0
  38. flock/frontend/src/components/details/DetailWindowContainer.tsx +62 -0
  39. flock/frontend/src/components/details/LiveOutputTab.test.tsx +792 -0
  40. flock/frontend/src/components/details/LiveOutputTab.tsx +220 -0
  41. flock/frontend/src/components/details/MessageHistoryTab.tsx +299 -0
  42. flock/frontend/src/components/details/NodeDetailWindow.test.tsx +501 -0
  43. flock/frontend/src/components/details/NodeDetailWindow.tsx +218 -0
  44. flock/frontend/src/components/details/RunStatusTab.tsx +307 -0
  45. flock/frontend/src/components/details/tabs.test.tsx +1015 -0
  46. flock/frontend/src/components/filters/CorrelationIDFilter.module.css +102 -0
  47. flock/frontend/src/components/filters/CorrelationIDFilter.test.tsx +197 -0
  48. flock/frontend/src/components/filters/CorrelationIDFilter.tsx +121 -0
  49. flock/frontend/src/components/filters/FilterBar.module.css +29 -0
  50. flock/frontend/src/components/filters/FilterBar.test.tsx +133 -0
  51. flock/frontend/src/components/filters/FilterBar.tsx +33 -0
  52. flock/frontend/src/components/filters/FilterPills.module.css +79 -0
  53. flock/frontend/src/components/filters/FilterPills.test.tsx +173 -0
  54. flock/frontend/src/components/filters/FilterPills.tsx +67 -0
  55. flock/frontend/src/components/filters/TimeRangeFilter.module.css +91 -0
  56. flock/frontend/src/components/filters/TimeRangeFilter.test.tsx +154 -0
  57. flock/frontend/src/components/filters/TimeRangeFilter.tsx +105 -0
  58. flock/frontend/src/components/graph/AgentNode.test.tsx +75 -0
  59. flock/frontend/src/components/graph/AgentNode.tsx +322 -0
  60. flock/frontend/src/components/graph/GraphCanvas.tsx +406 -0
  61. flock/frontend/src/components/graph/MessageFlowEdge.tsx +128 -0
  62. flock/frontend/src/components/graph/MessageNode.test.tsx +62 -0
  63. flock/frontend/src/components/graph/MessageNode.tsx +116 -0
  64. flock/frontend/src/components/graph/MiniMap.tsx +47 -0
  65. flock/frontend/src/components/graph/TransformEdge.tsx +123 -0
  66. flock/frontend/src/components/layout/DashboardLayout.css +407 -0
  67. flock/frontend/src/components/layout/DashboardLayout.tsx +300 -0
  68. flock/frontend/src/components/layout/Header.module.css +88 -0
  69. flock/frontend/src/components/layout/Header.tsx +52 -0
  70. flock/frontend/src/components/modules/EventLogModule.test.tsx +401 -0
  71. flock/frontend/src/components/modules/EventLogModule.tsx +396 -0
  72. flock/frontend/src/components/modules/EventLogModuleWrapper.tsx +17 -0
  73. flock/frontend/src/components/modules/ModuleRegistry.test.ts +333 -0
  74. flock/frontend/src/components/modules/ModuleRegistry.ts +85 -0
  75. flock/frontend/src/components/modules/ModuleWindow.tsx +155 -0
  76. flock/frontend/src/components/modules/registerModules.ts +20 -0
  77. flock/frontend/src/components/settings/AdvancedSettings.tsx +175 -0
  78. flock/frontend/src/components/settings/AppearanceSettings.tsx +185 -0
  79. flock/frontend/src/components/settings/GraphSettings.tsx +110 -0
  80. flock/frontend/src/components/settings/SettingsPanel.css +327 -0
  81. flock/frontend/src/components/settings/SettingsPanel.tsx +131 -0
  82. flock/frontend/src/components/settings/ThemeSelector.tsx +298 -0
  83. flock/frontend/src/hooks/useKeyboardShortcuts.ts +148 -0
  84. flock/frontend/src/hooks/useModulePersistence.test.ts +442 -0
  85. flock/frontend/src/hooks/useModulePersistence.ts +154 -0
  86. flock/frontend/src/hooks/useModules.ts +139 -0
  87. flock/frontend/src/hooks/usePersistence.ts +139 -0
  88. flock/frontend/src/main.tsx +13 -0
  89. flock/frontend/src/services/api.ts +213 -0
  90. flock/frontend/src/services/indexeddb.test.ts +793 -0
  91. flock/frontend/src/services/indexeddb.ts +794 -0
  92. flock/frontend/src/services/layout.test.ts +437 -0
  93. flock/frontend/src/services/layout.ts +146 -0
  94. flock/frontend/src/services/themeApplicator.ts +140 -0
  95. flock/frontend/src/services/themeService.ts +77 -0
  96. flock/frontend/src/services/websocket.test.ts +595 -0
  97. flock/frontend/src/services/websocket.ts +685 -0
  98. flock/frontend/src/store/filterStore.test.ts +242 -0
  99. flock/frontend/src/store/filterStore.ts +103 -0
  100. flock/frontend/src/store/graphStore.test.ts +186 -0
  101. flock/frontend/src/store/graphStore.ts +414 -0
  102. flock/frontend/src/store/moduleStore.test.ts +253 -0
  103. flock/frontend/src/store/moduleStore.ts +57 -0
  104. flock/frontend/src/store/settingsStore.ts +188 -0
  105. flock/frontend/src/store/streamStore.ts +68 -0
  106. flock/frontend/src/store/uiStore.test.ts +54 -0
  107. flock/frontend/src/store/uiStore.ts +110 -0
  108. flock/frontend/src/store/wsStore.ts +34 -0
  109. flock/frontend/src/styles/index.css +15 -0
  110. flock/frontend/src/styles/scrollbar.css +47 -0
  111. flock/frontend/src/styles/variables.css +488 -0
  112. flock/frontend/src/test/setup.ts +1 -0
  113. flock/frontend/src/types/filters.ts +14 -0
  114. flock/frontend/src/types/graph.ts +55 -0
  115. flock/frontend/src/types/modules.ts +7 -0
  116. flock/frontend/src/types/theme.ts +55 -0
  117. flock/frontend/src/utils/mockData.ts +85 -0
  118. flock/frontend/src/utils/performance.ts +16 -0
  119. flock/frontend/src/utils/transforms.test.ts +860 -0
  120. flock/frontend/src/utils/transforms.ts +323 -0
  121. flock/frontend/src/vite-env.d.ts +17 -0
  122. flock/frontend/tsconfig.json +27 -0
  123. flock/frontend/tsconfig.node.json +11 -0
  124. flock/frontend/vite.config.ts +25 -0
  125. flock/frontend/vitest.config.ts +11 -0
  126. flock/{core/util → helper}/cli_helper.py +4 -3
  127. flock/{core/logging → logging}/__init__.py +2 -3
  128. flock/{core/logging → logging}/formatters/enum_builder.py +3 -4
  129. flock/{core/logging → logging}/formatters/theme_builder.py +19 -44
  130. flock/{core/logging → logging}/formatters/themed_formatter.py +69 -115
  131. flock/{core/logging → logging}/logging.py +77 -61
  132. flock/{core/logging → logging}/telemetry.py +20 -26
  133. flock/{core/logging → logging}/telemetry_exporter/base_exporter.py +2 -2
  134. flock/{core/logging → logging}/telemetry_exporter/file_exporter.py +6 -9
  135. flock/{core/logging → logging}/telemetry_exporter/sqlite_exporter.py +2 -3
  136. flock/{core/logging → logging}/trace_and_logged.py +20 -24
  137. flock/mcp/__init__.py +91 -0
  138. flock/{core/mcp/mcp_client.py → mcp/client.py} +103 -154
  139. flock/{core/mcp/mcp_config.py → mcp/config.py} +62 -117
  140. flock/mcp/manager.py +255 -0
  141. flock/mcp/servers/sse/__init__.py +1 -1
  142. flock/mcp/servers/sse/flock_sse_server.py +11 -53
  143. flock/mcp/servers/stdio/__init__.py +1 -1
  144. flock/mcp/servers/stdio/flock_stdio_server.py +8 -48
  145. flock/mcp/servers/streamable_http/flock_streamable_http_server.py +17 -62
  146. flock/mcp/servers/websockets/flock_websocket_server.py +7 -40
  147. flock/{core/mcp/flock_mcp_tool.py → mcp/tool.py} +16 -26
  148. flock/mcp/types/__init__.py +42 -0
  149. flock/{core/mcp → mcp}/types/callbacks.py +9 -15
  150. flock/{core/mcp → mcp}/types/factories.py +7 -6
  151. flock/{core/mcp → mcp}/types/handlers.py +13 -18
  152. flock/{core/mcp → mcp}/types/types.py +70 -74
  153. flock/{core/mcp → mcp}/util/helpers.py +1 -1
  154. flock/orchestrator.py +645 -0
  155. flock/registry.py +148 -0
  156. flock/runtime.py +262 -0
  157. flock/service.py +140 -0
  158. flock/store.py +69 -0
  159. flock/subscription.py +111 -0
  160. flock/themes/andromeda.toml +1 -1
  161. flock/themes/apple-system-colors.toml +1 -1
  162. flock/themes/arcoiris.toml +1 -1
  163. flock/themes/atomonelight.toml +1 -1
  164. flock/themes/ayu copy.toml +1 -1
  165. flock/themes/ayu-light.toml +1 -1
  166. flock/themes/belafonte-day.toml +1 -1
  167. flock/themes/belafonte-night.toml +1 -1
  168. flock/themes/blulocodark.toml +1 -1
  169. flock/themes/breeze.toml +1 -1
  170. flock/themes/broadcast.toml +1 -1
  171. flock/themes/brogrammer.toml +1 -1
  172. flock/themes/builtin-dark.toml +1 -1
  173. flock/themes/builtin-pastel-dark.toml +1 -1
  174. flock/themes/catppuccin-latte.toml +1 -1
  175. flock/themes/catppuccin-macchiato.toml +1 -1
  176. flock/themes/catppuccin-mocha.toml +1 -1
  177. flock/themes/cga.toml +1 -1
  178. flock/themes/chalk.toml +1 -1
  179. flock/themes/ciapre.toml +1 -1
  180. flock/themes/coffee-theme.toml +1 -1
  181. flock/themes/cyberpunkscarletprotocol.toml +1 -1
  182. flock/themes/dark+.toml +1 -1
  183. flock/themes/darkermatrix.toml +1 -1
  184. flock/themes/darkside.toml +1 -1
  185. flock/themes/desert.toml +1 -1
  186. flock/themes/django.toml +1 -1
  187. flock/themes/djangosmooth.toml +1 -1
  188. flock/themes/doomone.toml +1 -1
  189. flock/themes/dotgov.toml +1 -1
  190. flock/themes/dracula+.toml +1 -1
  191. flock/themes/duckbones.toml +1 -1
  192. flock/themes/encom.toml +1 -1
  193. flock/themes/espresso.toml +1 -1
  194. flock/themes/everblush.toml +1 -1
  195. flock/themes/fairyfloss.toml +1 -1
  196. flock/themes/fideloper.toml +1 -1
  197. flock/themes/fishtank.toml +1 -1
  198. flock/themes/flexoki-light.toml +1 -1
  199. flock/themes/floraverse.toml +1 -1
  200. flock/themes/framer.toml +1 -1
  201. flock/themes/galizur.toml +1 -1
  202. flock/themes/github.toml +1 -1
  203. flock/themes/grass.toml +1 -1
  204. flock/themes/grey-green.toml +1 -1
  205. flock/themes/gruvboxlight.toml +1 -1
  206. flock/themes/guezwhoz.toml +1 -1
  207. flock/themes/harper.toml +1 -1
  208. flock/themes/hax0r-blue.toml +1 -1
  209. flock/themes/hopscotch.256.toml +1 -1
  210. flock/themes/ic-green-ppl.toml +1 -1
  211. flock/themes/iceberg-dark.toml +1 -1
  212. flock/themes/japanesque.toml +1 -1
  213. flock/themes/jubi.toml +1 -1
  214. flock/themes/kibble.toml +1 -1
  215. flock/themes/kolorit.toml +1 -1
  216. flock/themes/kurokula.toml +1 -1
  217. flock/themes/materialdesigncolors.toml +1 -1
  218. flock/themes/matrix.toml +1 -1
  219. flock/themes/mellifluous.toml +1 -1
  220. flock/themes/midnight-in-mojave.toml +1 -1
  221. flock/themes/monokai-remastered.toml +1 -1
  222. flock/themes/monokai-soda.toml +1 -1
  223. flock/themes/neon.toml +1 -1
  224. flock/themes/neopolitan.toml +1 -1
  225. flock/themes/nord-light.toml +1 -1
  226. flock/themes/ocean.toml +1 -1
  227. flock/themes/onehalfdark.toml +1 -1
  228. flock/themes/onehalflight.toml +1 -1
  229. flock/themes/palenighthc.toml +1 -1
  230. flock/themes/paulmillr.toml +1 -1
  231. flock/themes/pencildark.toml +1 -1
  232. flock/themes/pnevma.toml +1 -1
  233. flock/themes/purple-rain.toml +1 -1
  234. flock/themes/purplepeter.toml +1 -1
  235. flock/themes/raycast-dark.toml +1 -1
  236. flock/themes/red-sands.toml +1 -1
  237. flock/themes/relaxed.toml +1 -1
  238. flock/themes/retro.toml +1 -1
  239. flock/themes/rose-pine.toml +1 -1
  240. flock/themes/royal.toml +1 -1
  241. flock/themes/ryuuko.toml +1 -1
  242. flock/themes/sakura.toml +1 -1
  243. flock/themes/scarlet-protocol.toml +1 -1
  244. flock/themes/seoulbones-dark.toml +1 -1
  245. flock/themes/shades-of-purple.toml +1 -1
  246. flock/themes/smyck.toml +1 -1
  247. flock/themes/softserver.toml +1 -1
  248. flock/themes/solarized-darcula.toml +1 -1
  249. flock/themes/square.toml +1 -1
  250. flock/themes/sugarplum.toml +1 -1
  251. flock/themes/thayer-bright.toml +1 -1
  252. flock/themes/tokyonight.toml +1 -1
  253. flock/themes/tomorrow.toml +1 -1
  254. flock/themes/ubuntu.toml +1 -1
  255. flock/themes/ultradark.toml +1 -1
  256. flock/themes/ultraviolent.toml +1 -1
  257. flock/themes/unikitty.toml +1 -1
  258. flock/themes/urple.toml +1 -1
  259. flock/themes/vesper.toml +1 -1
  260. flock/themes/vimbones.toml +1 -1
  261. flock/themes/wildcherry.toml +1 -1
  262. flock/themes/wilmersdorf.toml +1 -1
  263. flock/themes/wryan.toml +1 -1
  264. flock/themes/xcodedarkhc.toml +1 -1
  265. flock/themes/xcodelight.toml +1 -1
  266. flock/themes/zenbones-light.toml +1 -1
  267. flock/themes/zenwritten-dark.toml +1 -1
  268. flock/utilities.py +301 -0
  269. flock/{components/utility → utility}/output_utility_component.py +68 -53
  270. flock/visibility.py +107 -0
  271. flock_core-0.5.0b51.dist-info/METADATA +747 -0
  272. flock_core-0.5.0b51.dist-info/RECORD +508 -0
  273. flock_core-0.5.0b51.dist-info/entry_points.txt +2 -0
  274. {flock_core-0.5.0b28.dist-info → flock_core-0.5.0b51.dist-info}/licenses/LICENSE +1 -1
  275. flock/adapter/__init__.py +0 -14
  276. flock/adapter/azure_adapter.py +0 -68
  277. flock/adapter/chroma_adapter.py +0 -73
  278. flock/adapter/faiss_adapter.py +0 -97
  279. flock/adapter/pinecone_adapter.py +0 -51
  280. flock/adapter/vector_base.py +0 -47
  281. flock/cli/assets/release_notes.md +0 -140
  282. flock/cli/config.py +0 -8
  283. flock/cli/constants.py +0 -36
  284. flock/cli/create_agent.py +0 -1
  285. flock/cli/create_flock.py +0 -280
  286. flock/cli/execute_flock.py +0 -620
  287. flock/cli/load_agent.py +0 -1
  288. flock/cli/load_examples.py +0 -1
  289. flock/cli/load_flock.py +0 -192
  290. flock/cli/load_release_notes.py +0 -20
  291. flock/cli/loaded_flock_cli.py +0 -254
  292. flock/cli/manage_agents.py +0 -459
  293. flock/cli/registry_management.py +0 -889
  294. flock/cli/runner.py +0 -41
  295. flock/cli/settings.py +0 -857
  296. flock/cli/utils.py +0 -135
  297. flock/cli/view_results.py +0 -29
  298. flock/cli/yaml_editor.py +0 -396
  299. flock/components/__init__.py +0 -30
  300. flock/components/evaluation/__init__.py +0 -9
  301. flock/components/evaluation/declarative_evaluation_component.py +0 -606
  302. flock/components/routing/__init__.py +0 -15
  303. flock/components/routing/conditional_routing_component.py +0 -494
  304. flock/components/routing/default_routing_component.py +0 -103
  305. flock/components/routing/llm_routing_component.py +0 -206
  306. flock/components/utility/__init__.py +0 -22
  307. flock/components/utility/example_utility_component.py +0 -250
  308. flock/components/utility/feedback_utility_component.py +0 -206
  309. flock/components/utility/memory_utility_component.py +0 -550
  310. flock/components/utility/metrics_utility_component.py +0 -700
  311. flock/config.py +0 -61
  312. flock/core/__init__.py +0 -110
  313. flock/core/agent/__init__.py +0 -16
  314. flock/core/agent/default_agent.py +0 -216
  315. flock/core/agent/flock_agent_components.py +0 -104
  316. flock/core/agent/flock_agent_execution.py +0 -101
  317. flock/core/agent/flock_agent_integration.py +0 -260
  318. flock/core/agent/flock_agent_lifecycle.py +0 -186
  319. flock/core/agent/flock_agent_serialization.py +0 -381
  320. flock/core/api/__init__.py +0 -10
  321. flock/core/api/custom_endpoint.py +0 -45
  322. flock/core/api/endpoints.py +0 -254
  323. flock/core/api/main.py +0 -162
  324. flock/core/api/models.py +0 -97
  325. flock/core/api/run_store.py +0 -224
  326. flock/core/api/runner.py +0 -44
  327. flock/core/api/service.py +0 -214
  328. flock/core/component/__init__.py +0 -15
  329. flock/core/component/agent_component_base.py +0 -309
  330. flock/core/component/evaluation_component.py +0 -62
  331. flock/core/component/routing_component.py +0 -74
  332. flock/core/component/utility_component.py +0 -69
  333. flock/core/config/flock_agent_config.py +0 -58
  334. flock/core/config/scheduled_agent_config.py +0 -40
  335. flock/core/context/context.py +0 -213
  336. flock/core/context/context_manager.py +0 -37
  337. flock/core/context/context_vars.py +0 -10
  338. flock/core/evaluation/utils.py +0 -396
  339. flock/core/execution/batch_executor.py +0 -369
  340. flock/core/execution/evaluation_executor.py +0 -438
  341. flock/core/execution/local_executor.py +0 -31
  342. flock/core/execution/opik_executor.py +0 -103
  343. flock/core/execution/temporal_executor.py +0 -164
  344. flock/core/flock.py +0 -634
  345. flock/core/flock_agent.py +0 -336
  346. flock/core/flock_factory.py +0 -613
  347. flock/core/flock_scheduler.py +0 -166
  348. flock/core/flock_server_manager.py +0 -136
  349. flock/core/interpreter/python_interpreter.py +0 -689
  350. flock/core/mcp/__init__.py +0 -1
  351. flock/core/mcp/flock_mcp_server.py +0 -680
  352. flock/core/mcp/mcp_client_manager.py +0 -201
  353. flock/core/mcp/types/__init__.py +0 -1
  354. flock/core/mixin/dspy_integration.py +0 -403
  355. flock/core/mixin/prompt_parser.py +0 -125
  356. flock/core/orchestration/__init__.py +0 -15
  357. flock/core/orchestration/flock_batch_processor.py +0 -94
  358. flock/core/orchestration/flock_evaluator.py +0 -113
  359. flock/core/orchestration/flock_execution.py +0 -295
  360. flock/core/orchestration/flock_initialization.py +0 -149
  361. flock/core/orchestration/flock_server_manager.py +0 -67
  362. flock/core/orchestration/flock_web_server.py +0 -117
  363. flock/core/registry/__init__.py +0 -45
  364. flock/core/registry/agent_registry.py +0 -69
  365. flock/core/registry/callable_registry.py +0 -139
  366. flock/core/registry/component_discovery.py +0 -142
  367. flock/core/registry/component_registry.py +0 -64
  368. flock/core/registry/config_mapping.py +0 -64
  369. flock/core/registry/decorators.py +0 -137
  370. flock/core/registry/registry_hub.py +0 -205
  371. flock/core/registry/server_registry.py +0 -57
  372. flock/core/registry/type_registry.py +0 -86
  373. flock/core/serialization/__init__.py +0 -13
  374. flock/core/serialization/callable_registry.py +0 -52
  375. flock/core/serialization/flock_serializer.py +0 -832
  376. flock/core/serialization/json_encoder.py +0 -41
  377. flock/core/serialization/secure_serializer.py +0 -175
  378. flock/core/serialization/serializable.py +0 -342
  379. flock/core/serialization/serialization_utils.py +0 -412
  380. flock/core/util/file_path_utils.py +0 -223
  381. flock/core/util/hydrator.py +0 -309
  382. flock/core/util/input_resolver.py +0 -164
  383. flock/core/util/loader.py +0 -59
  384. flock/core/util/splitter.py +0 -219
  385. flock/di.py +0 -27
  386. flock/platform/docker_tools.py +0 -49
  387. flock/platform/jaeger_install.py +0 -86
  388. flock/webapp/__init__.py +0 -1
  389. flock/webapp/app/__init__.py +0 -0
  390. flock/webapp/app/api/__init__.py +0 -0
  391. flock/webapp/app/api/agent_management.py +0 -241
  392. flock/webapp/app/api/execution.py +0 -709
  393. flock/webapp/app/api/flock_management.py +0 -129
  394. flock/webapp/app/api/registry_viewer.py +0 -30
  395. flock/webapp/app/chat.py +0 -665
  396. flock/webapp/app/config.py +0 -104
  397. flock/webapp/app/dependencies.py +0 -117
  398. flock/webapp/app/main.py +0 -1070
  399. flock/webapp/app/middleware.py +0 -113
  400. flock/webapp/app/models_ui.py +0 -7
  401. flock/webapp/app/services/__init__.py +0 -0
  402. flock/webapp/app/services/feedback_file_service.py +0 -363
  403. flock/webapp/app/services/flock_service.py +0 -337
  404. flock/webapp/app/services/sharing_models.py +0 -81
  405. flock/webapp/app/services/sharing_store.py +0 -762
  406. flock/webapp/app/templates/theme_mapper.html +0 -326
  407. flock/webapp/app/theme_mapper.py +0 -812
  408. flock/webapp/app/utils.py +0 -85
  409. flock/webapp/run.py +0 -215
  410. flock/webapp/static/css/chat.css +0 -301
  411. flock/webapp/static/css/components.css +0 -167
  412. flock/webapp/static/css/header.css +0 -39
  413. flock/webapp/static/css/layout.css +0 -46
  414. flock/webapp/static/css/sidebar.css +0 -127
  415. flock/webapp/static/css/two-pane.css +0 -48
  416. flock/webapp/templates/base.html +0 -200
  417. flock/webapp/templates/chat.html +0 -152
  418. flock/webapp/templates/chat_settings.html +0 -19
  419. flock/webapp/templates/flock_editor.html +0 -16
  420. flock/webapp/templates/index.html +0 -12
  421. flock/webapp/templates/partials/_agent_detail_form.html +0 -93
  422. flock/webapp/templates/partials/_agent_list.html +0 -18
  423. flock/webapp/templates/partials/_agent_manager_view.html +0 -51
  424. flock/webapp/templates/partials/_agent_tools_checklist.html +0 -14
  425. flock/webapp/templates/partials/_chat_container.html +0 -15
  426. flock/webapp/templates/partials/_chat_messages.html +0 -57
  427. flock/webapp/templates/partials/_chat_settings_form.html +0 -85
  428. flock/webapp/templates/partials/_create_flock_form.html +0 -50
  429. flock/webapp/templates/partials/_dashboard_flock_detail.html +0 -17
  430. flock/webapp/templates/partials/_dashboard_flock_file_list.html +0 -16
  431. flock/webapp/templates/partials/_dashboard_flock_properties_preview.html +0 -28
  432. flock/webapp/templates/partials/_dashboard_upload_flock_form.html +0 -16
  433. flock/webapp/templates/partials/_dynamic_input_form_content.html +0 -22
  434. flock/webapp/templates/partials/_env_vars_table.html +0 -23
  435. flock/webapp/templates/partials/_execution_form.html +0 -118
  436. flock/webapp/templates/partials/_execution_view_container.html +0 -28
  437. flock/webapp/templates/partials/_flock_file_list.html +0 -23
  438. flock/webapp/templates/partials/_flock_properties_form.html +0 -52
  439. flock/webapp/templates/partials/_flock_upload_form.html +0 -16
  440. flock/webapp/templates/partials/_header_flock_status.html +0 -5
  441. flock/webapp/templates/partials/_load_manager_view.html +0 -49
  442. flock/webapp/templates/partials/_registry_table.html +0 -25
  443. flock/webapp/templates/partials/_registry_viewer_content.html +0 -70
  444. flock/webapp/templates/partials/_results_display.html +0 -78
  445. flock/webapp/templates/partials/_settings_env_content.html +0 -9
  446. flock/webapp/templates/partials/_settings_theme_content.html +0 -14
  447. flock/webapp/templates/partials/_settings_view.html +0 -36
  448. flock/webapp/templates/partials/_share_chat_link_snippet.html +0 -11
  449. flock/webapp/templates/partials/_share_link_snippet.html +0 -35
  450. flock/webapp/templates/partials/_sidebar.html +0 -74
  451. flock/webapp/templates/partials/_streaming_results_container.html +0 -195
  452. flock/webapp/templates/partials/_structured_data_view.html +0 -40
  453. flock/webapp/templates/partials/_theme_preview.html +0 -36
  454. flock/webapp/templates/registry_viewer.html +0 -84
  455. flock/webapp/templates/shared_run_page.html +0 -140
  456. flock/workflow/__init__.py +0 -0
  457. flock/workflow/activities.py +0 -196
  458. flock/workflow/agent_activities.py +0 -24
  459. flock/workflow/agent_execution_activity.py +0 -202
  460. flock/workflow/flock_workflow.py +0 -214
  461. flock/workflow/temporal_config.py +0 -96
  462. flock/workflow/temporal_setup.py +0 -68
  463. flock_core-0.5.0b28.dist-info/METADATA +0 -274
  464. flock_core-0.5.0b28.dist-info/RECORD +0 -561
  465. flock_core-0.5.0b28.dist-info/entry_points.txt +0 -2
  466. /flock/{core/logging → logging}/formatters/themes.py +0 -0
  467. /flock/{core/logging → logging}/span_middleware/baggage_span_processor.py +0 -0
  468. /flock/{core/mcp → mcp}/util/__init__.py +0 -0
  469. {flock_core-0.5.0b28.dist-info → flock_core-0.5.0b51.dist-info}/WHEEL +0 -0
@@ -1,224 +0,0 @@
1
- # src/flock/core/api/run_store.py
2
- """Manages the state of active and completed Flock runs."""
3
-
4
- import threading
5
- from datetime import datetime
6
- from typing import Any
7
-
8
- from flock.core.logging.logging import get_logger
9
-
10
- from .models import ( # Import from the models file
11
- FlockAPIResponse,
12
- FlockBatchResponse,
13
- )
14
-
15
- logger = get_logger("api.run_store")
16
-
17
-
18
- class RunStore:
19
- """Stores and manages the state of Flock runs."""
20
-
21
- def __init__(self):
22
- self._runs: dict[str, FlockAPIResponse] = {}
23
- self._batches: dict[str, FlockBatchResponse] = {}
24
- self._lock = threading.Lock() # Basic lock for thread safety
25
-
26
- def create_run(self, run_id: str) -> FlockAPIResponse:
27
- """Creates a new run record with 'starting' status."""
28
- with self._lock:
29
- if run_id in self._runs:
30
- logger.warning(f"Run ID {run_id} already exists. Overwriting.")
31
- response = FlockAPIResponse(
32
- run_id=run_id, status="starting", started_at=datetime.now()
33
- )
34
- self._runs[run_id] = response
35
- logger.debug(f"Created run record for run_id: {run_id}")
36
- return response
37
-
38
- def get_run(self, run_id: str) -> FlockAPIResponse | None:
39
- """Gets the status of a run."""
40
- with self._lock:
41
- return self._runs.get(run_id)
42
-
43
- def update_run_status(
44
- self, run_id: str, status: str, error: str | None = None
45
- ):
46
- """Updates the status and potentially error of a run."""
47
- with self._lock:
48
- if run_id in self._runs:
49
- self._runs[run_id].status = status
50
- if error:
51
- self._runs[run_id].error = error
52
- if status in ["completed", "failed"]:
53
- self._runs[run_id].completed_at = datetime.now()
54
- logger.debug(f"Updated status for run_id {run_id} to {status}")
55
- else:
56
- logger.warning(
57
- f"Attempted to update status for non-existent run_id: {run_id}"
58
- )
59
-
60
- def update_run_result(self, run_id: str, result: dict):
61
- """Updates the result of a completed run."""
62
- with self._lock:
63
- if run_id in self._runs:
64
- # Ensure result is serializable (e.g., convert Box)
65
- final_result = (
66
- dict(result) if hasattr(result, "to_dict") else result
67
- )
68
- self._runs[run_id].result = final_result
69
- self._runs[run_id].status = "completed"
70
- self._runs[run_id].completed_at = datetime.now()
71
- logger.debug(f"Updated result for completed run_id: {run_id}")
72
- else:
73
- logger.warning(
74
- f"Attempted to update result for non-existent run_id: {run_id}"
75
- )
76
-
77
- def create_batch(self, batch_id: str) -> FlockBatchResponse:
78
- """Creates a new batch record with 'starting' status."""
79
- with self._lock:
80
- if batch_id in self._batches:
81
- logger.warning(
82
- f"Batch ID {batch_id} already exists. Overwriting."
83
- )
84
- response = FlockBatchResponse(
85
- batch_id=batch_id,
86
- status="starting",
87
- results=[],
88
- started_at=datetime.now(),
89
- total_items=0,
90
- completed_items=0,
91
- progress_percentage=0.0,
92
- )
93
- self._batches[batch_id] = response
94
- logger.debug(f"Created batch record for batch_id: {batch_id}")
95
- return response
96
-
97
- def get_batch(self, batch_id: str) -> FlockBatchResponse | None:
98
- """Gets the status of a batch run."""
99
- with self._lock:
100
- return self._batches.get(batch_id)
101
-
102
- def update_batch_status(
103
- self, batch_id: str, status: str, error: str | None = None
104
- ):
105
- """Updates the status and potentially error of a batch run."""
106
- with self._lock:
107
- if batch_id in self._batches:
108
- self._batches[batch_id].status = status
109
- if error:
110
- self._batches[batch_id].error = error
111
- if status in ["completed", "failed"]:
112
- self._batches[batch_id].completed_at = datetime.now()
113
- # When completed, ensure progress is 100%
114
- if (
115
- status == "completed"
116
- and self._batches[batch_id].total_items > 0
117
- ):
118
- self._batches[batch_id].completed_items = self._batches[
119
- batch_id
120
- ].total_items
121
- self._batches[batch_id].progress_percentage = 100.0
122
- logger.debug(
123
- f"Updated status for batch_id {batch_id} to {status}"
124
- )
125
- else:
126
- logger.warning(
127
- f"Attempted to update status for non-existent batch_id: {batch_id}"
128
- )
129
-
130
- def update_batch_result(self, batch_id: str, results: list[Any]):
131
- """Updates the results of a completed batch run."""
132
- with self._lock:
133
- if batch_id in self._batches:
134
- # Ensure results are serializable
135
- final_results = [
136
- dict(r) if hasattr(r, "to_dict") else r for r in results
137
- ]
138
- self._batches[batch_id].results = final_results
139
- self._batches[batch_id].status = "completed"
140
- self._batches[batch_id].completed_at = datetime.now()
141
-
142
- # Update progress tracking
143
- self._batches[batch_id].completed_items = len(final_results)
144
- self._batches[batch_id].total_items = len(final_results)
145
- self._batches[batch_id].progress_percentage = 100.0
146
-
147
- logger.debug(
148
- f"Updated results for completed batch_id: {batch_id}"
149
- )
150
- else:
151
- logger.warning(
152
- f"Attempted to update results for non-existent batch_id: {batch_id}"
153
- )
154
-
155
- def set_batch_total_items(self, batch_id: str, total_items: int):
156
- """Sets the total number of items in a batch."""
157
- try:
158
- with self._lock:
159
- if batch_id in self._batches:
160
- self._batches[batch_id].total_items = total_items
161
- # Recalculate percentage
162
- if total_items > 0:
163
- self._batches[batch_id].progress_percentage = (
164
- self._batches[batch_id].completed_items
165
- / total_items
166
- * 100.0
167
- )
168
- logger.debug(
169
- f"Set total_items for batch_id {batch_id} to {total_items}"
170
- )
171
- else:
172
- logger.warning(
173
- f"Attempted to set total_items for non-existent batch_id: {batch_id}"
174
- )
175
- except Exception as e:
176
- logger.error(f"Error setting batch total items: {e}", exc_info=True)
177
-
178
- def update_batch_progress(
179
- self,
180
- batch_id: str,
181
- completed_items: int,
182
- partial_results: list[Any] = None,
183
- ):
184
- """Updates the progress of a batch run and optionally adds partial results.
185
-
186
- Args:
187
- batch_id: The ID of the batch to update
188
- completed_items: The number of items that have been completed
189
- partial_results: Optional list of results for completed items to add to the batch
190
- """
191
- try:
192
- with self._lock:
193
- if batch_id in self._batches:
194
- self._batches[batch_id].completed_items = completed_items
195
-
196
- # Calculate percentage if we have a total
197
- if self._batches[batch_id].total_items > 0:
198
- self._batches[batch_id].progress_percentage = (
199
- completed_items
200
- / self._batches[batch_id].total_items
201
- * 100.0
202
- )
203
-
204
- # Add partial results if provided
205
- if partial_results:
206
- # Ensure results are serializable
207
- final_results = [
208
- dict(r) if hasattr(r, "to_dict") else r
209
- for r in partial_results
210
- ]
211
- self._batches[batch_id].results = final_results
212
-
213
- logger.debug(
214
- f"Updated progress for batch_id {batch_id}: {completed_items}/{self._batches[batch_id].total_items} "
215
- f"({self._batches[batch_id].progress_percentage:.1f}%)"
216
- )
217
- else:
218
- logger.warning(
219
- f"Attempted to update progress for non-existent batch_id: {batch_id}"
220
- )
221
- except Exception as e:
222
- logger.error(f"Error updating batch progress: {e}", exc_info=True)
223
-
224
- # Add methods for cleanup, persistence, etc. later
flock/core/api/runner.py DELETED
@@ -1,44 +0,0 @@
1
- # src/flock/api/runner.py
2
- """Provides functionality to start the Flock API server."""
3
-
4
- from collections.abc import Callable, Sequence
5
- from typing import TYPE_CHECKING, Any
6
-
7
- from flock.core.api.custom_endpoint import FlockEndpoint
8
- from flock.core.logging.logging import get_logger
9
-
10
- if TYPE_CHECKING:
11
- from flock.core.flock import Flock
12
-
13
- logger = get_logger("api.runner")
14
-
15
-
16
- def start_flock_api(
17
- flock: "Flock",
18
- host: str = "127.0.0.1",
19
- port: int = 8344,
20
- server_name: str = "Flock API",
21
- create_ui: bool = False,
22
- custom_endpoints: Sequence[FlockEndpoint] | dict[tuple[str, list[str] | None], Callable[..., Any]] | None = None,
23
- ) -> None:
24
- """Start a REST API server for the given Flock instance."""
25
- try:
26
- # Import API class locally to avoid making it a hard dependency for core flock
27
- from flock.core.api import FlockAPI
28
- except ImportError:
29
- logger.error(
30
- "API components not found. Cannot start API. "
31
- "Ensure 'fastapi' and 'uvicorn' are installed."
32
- )
33
- return
34
-
35
- logger.info(
36
- f"Preparing to start API server for Flock '{flock.name}' on {host}:{port} {'with UI' if create_ui else 'without UI'}"
37
- )
38
- api_instance = FlockAPI(flock, custom_endpoints=custom_endpoints) # Pass the Flock instance to the API
39
- api_instance.start(
40
- host=host,
41
- port=port,
42
- server_name=server_name,
43
- create_ui=create_ui,
44
- )
flock/core/api/service.py DELETED
@@ -1,214 +0,0 @@
1
- # flock/core/api/service.py
2
- from typing import TYPE_CHECKING, Any
3
-
4
- if TYPE_CHECKING:
5
- from flock.core.api.endpoints import FlockBatchRequest
6
- from flock.core.api.run_store import RunStore
7
- from flock.core.flock import Flock
8
-
9
-
10
- from flock.core.logging.logging import get_logger
11
-
12
- logger = get_logger("flock.api")
13
-
14
- class FlockApiService:
15
- def __init__(self, flock_instance: "Flock", run_store_instance: "RunStore"):
16
- self.flock = flock_instance
17
- self.run_store = run_store_instance
18
- # You would move the _run_flock, _run_batch, _type_convert_inputs methods here
19
- # from the old FlockAPI class.
20
- async def _run_flock(
21
- self, run_id: str, agent_name: str, inputs: dict[str, Any]
22
- ):
23
- """Executes a flock workflow run (internal helper)."""
24
- try:
25
- if agent_name not in self.flock.agents:
26
- raise ValueError(f"Starting agent '{agent_name}' not found")
27
-
28
- typed_inputs = self._type_convert_inputs(agent_name, inputs)
29
-
30
- logger.debug(
31
- f"Executing flock workflow starting with '{agent_name}' (run_id: {run_id})",
32
- inputs=typed_inputs,
33
- )
34
- # Flock.run_async now handles context creation and execution
35
- result = await self.flock.run_async(
36
- agent=agent_name, input=typed_inputs
37
- )
38
- self.run_store.update_run_result(run_id, result)
39
-
40
- final_agent_name = (
41
- result.get("agent_name", "N/A") if isinstance(result, dict) else "N/A"
42
- ) # Handle if result is not a dict (e.g. Box)
43
- logger.info(
44
- f"Flock workflow completed (run_id: {run_id})",
45
- final_agent=final_agent_name,
46
- )
47
- except Exception as e:
48
- logger.error(
49
- f"Error in flock run {run_id} (started with '{agent_name}'): {e!s}",
50
- exc_info=True,
51
- )
52
- self.run_store.update_run_status(run_id, "failed", str(e))
53
- raise
54
-
55
- async def _run_batch(self, batch_id: str, request: "FlockBatchRequest"):
56
- """Executes a batch of runs (internal helper)."""
57
- try:
58
- if request.agent_name not in self.flock.agents:
59
- raise ValueError(f"Agent '{request.agent_name}' not found")
60
-
61
- logger.debug(
62
- f"Executing batch run starting with '{request.agent_name}' (batch_id: {batch_id})",
63
- batch_size=len(request.batch_inputs)
64
- if isinstance(request.batch_inputs, list)
65
- else "CSV/DataFrame",
66
- )
67
-
68
- # --- Re-integrating the threaded batch execution from Flock.run_batch_async ---
69
- import asyncio
70
- import threading
71
- from concurrent.futures import ThreadPoolExecutor
72
-
73
- def run_batch_sync_in_thread():
74
- loop = asyncio.new_event_loop()
75
- asyncio.set_event_loop(loop)
76
- try:
77
- batch_size = (
78
- len(request.batch_inputs)
79
- if isinstance(request.batch_inputs, list)
80
- else 0 # Or attempt to get from DataFrame/CSV load
81
- )
82
- if batch_size > 0:
83
- self.run_store.set_batch_total_items(batch_id, batch_size)
84
-
85
- class ProgressTracker:
86
- def __init__(self, store, b_id, total_size):
87
- self.store, self.batch_id, self.total_size = store, b_id, total_size
88
- self.current_count, self.partial_results, self._lock = 0, [], threading.Lock()
89
- def increment(self, res=None):
90
- with self._lock:
91
- self.current_count += 1
92
- if res is not None: self.partial_results.append(res)
93
- try: self.store.update_batch_progress(self.batch_id, self.current_count, self.partial_results)
94
- except Exception as e_prog: logger.error(f"Error updating progress: {e_prog}")
95
- return self.current_count
96
-
97
- progress_tracker = ProgressTracker(self.run_store, batch_id, batch_size)
98
-
99
- async def progress_aware_worker(index, item_inputs):
100
- try:
101
- # Call Flock's run_async for a single item
102
- item_result = await self.flock.run_async(
103
- agent=request.agent_name,
104
- input=item_inputs,
105
- box_result=request.box_results,
106
- )
107
- progress_tracker.increment(item_result)
108
- return item_result
109
- except Exception as item_err:
110
- logger.error(f"Error processing batch item {index}: {item_err}")
111
- progress_tracker.increment(item_err if request.return_errors else None)
112
- if request.return_errors: return item_err
113
- return None
114
-
115
- batch_inputs_list = request.batch_inputs
116
- actual_results_list = []
117
-
118
- if isinstance(batch_inputs_list, list):
119
- tasks = []
120
- for i, item_inputs in enumerate(batch_inputs_list):
121
- full_inputs = {**(request.static_inputs or {}), **item_inputs}
122
- tasks.append(progress_aware_worker(i, full_inputs))
123
-
124
- if request.parallel and request.max_workers > 1:
125
- semaphore = asyncio.Semaphore(request.max_workers)
126
- async def bounded_worker(idx, inputs_item):
127
- async with semaphore: return await progress_aware_worker(idx, inputs_item)
128
- bounded_tasks = [bounded_worker(i, {**(request.static_inputs or {}), **item}) for i, item in enumerate(batch_inputs_list)]
129
- actual_results_list = loop.run_until_complete(asyncio.gather(*bounded_tasks, return_exceptions=request.return_errors))
130
- else:
131
- for i, item_inputs in enumerate(batch_inputs_list):
132
- full_inputs = {**(request.static_inputs or {}), **item_inputs}
133
- actual_results_list.append(loop.run_until_complete(progress_aware_worker(i, full_inputs)))
134
- else: # DataFrame or CSV path - let Flock's batch processor handle this directly
135
- # This path relies on self.flock.run_batch_async being able to run within this new event loop.
136
- # It might be simpler to always convert DataFrame/CSV to list of dicts before this point.
137
- actual_results_list = loop.run_until_complete(
138
- self.flock.run_batch_async(
139
- start_agent=request.agent_name,
140
- batch_inputs=request.batch_inputs, # DataFrame or path
141
- input_mapping=request.input_mapping,
142
- static_inputs=request.static_inputs,
143
- parallel=request.parallel, # Will be re-evaluated by internal BatchProcessor
144
- max_workers=request.max_workers,
145
- use_temporal=request.use_temporal, # Will be re-evaluated
146
- box_results=request.box_results,
147
- return_errors=request.return_errors,
148
- silent_mode=True, # Internal batch runs silently for API
149
- write_to_csv=None # API handles CSV output separately if needed
150
- )
151
- )
152
- # Progress for DataFrame/CSV would need integration into BatchProcessor or this loop
153
- if actual_results_list:
154
- self.run_store.set_batch_total_items(batch_id, len(actual_results_list))
155
- self.run_store.update_batch_progress(batch_id, len(actual_results_list), actual_results_list)
156
-
157
-
158
- self.run_store.update_batch_result(batch_id, actual_results_list)
159
- logger.info(f"Batch run completed (batch_id: {batch_id})", num_results=len(actual_results_list))
160
- return actual_results_list
161
- except Exception as thread_err:
162
- logger.error(f"Error in batch run thread {batch_id}: {thread_err!s}", exc_info=True)
163
- self.run_store.update_batch_status(batch_id, "failed", str(thread_err))
164
- return None
165
- finally:
166
- loop.close()
167
- # --- End of re-integrated threaded batch execution ---
168
-
169
- # Submit the synchronous function to a thread pool from the main event loop
170
- main_loop = asyncio.get_running_loop()
171
- with ThreadPoolExecutor(thread_name_prefix="flock-api-batch") as pool:
172
- await main_loop.run_in_executor(pool, run_batch_sync_in_thread)
173
-
174
- except Exception as e:
175
- logger.error(
176
- f"Error setting up batch run {batch_id} (started with '{request.agent_name}'): {e!s}",
177
- exc_info=True,
178
- )
179
- self.run_store.update_batch_status(batch_id, "failed", str(e))
180
- raise
181
-
182
-
183
-
184
-
185
-
186
- def _type_convert_inputs(
187
- self, agent_name: str, inputs: dict[str, Any]
188
- ) -> dict[str, Any]:
189
- """Converts input values (esp. from forms) to expected Python types."""
190
- typed_inputs = {}
191
- agent_def = self.flock.agents.get(agent_name)
192
- if not agent_def or not agent_def.input or not isinstance(agent_def.input, str):
193
- return inputs # Return original if no spec or spec is not a string
194
-
195
- parsed_fields = self._parse_input_spec(agent_def.input) # Relies on the old UI helper
196
- field_types = {f["name"]: f["type"] for f in parsed_fields}
197
-
198
- for k, v in inputs.items():
199
- target_type_str = field_types.get(k)
200
- if target_type_str:
201
- if target_type_str.startswith("bool"):
202
- typed_inputs[k] = str(v).lower() in ["true", "on", "1", "yes"] if isinstance(v, str) else bool(v)
203
- elif target_type_str.startswith("int"):
204
- try: typed_inputs[k] = int(v)
205
- except (ValueError, TypeError): logger.warning(f"Could not convert '{k}' value '{v}' to int for agent '{agent_name}'"); typed_inputs[k] = v
206
- elif target_type_str.startswith("float"):
207
- try: typed_inputs[k] = float(v)
208
- except (ValueError, TypeError): logger.warning(f"Could not convert '{k}' value '{v}' to float for agent '{agent_name}'"); typed_inputs[k] = v
209
- # TODO: Add list/dict parsing (e.g., json.loads) if type_str indicates these,
210
- # especially if inputs come from HTML forms as strings.
211
- else: typed_inputs[k] = v
212
- else:
213
- typed_inputs[k] = v
214
- return typed_inputs
@@ -1,15 +0,0 @@
1
- # src/flock/core/component/__init__.py
2
- """Unified component system for Flock agents."""
3
-
4
- from .agent_component_base import AgentComponent, AgentComponentConfig
5
- from .evaluation_component import EvaluationComponent
6
- from .routing_component import RoutingComponent
7
- from .utility_component import UtilityComponent
8
-
9
- __all__ = [
10
- "AgentComponent",
11
- "AgentComponentConfig",
12
- "EvaluationComponent",
13
- "RoutingComponent",
14
- "UtilityComponent",
15
- ]