flock-core 0.4.542__py3-none-any.whl → 0.5.0__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 (501) hide show
  1. flock/__init__.py +12 -217
  2. flock/agent.py +1079 -0
  3. flock/api/themes.py +71 -0
  4. flock/artifacts.py +86 -0
  5. flock/cli.py +147 -0
  6. flock/components.py +189 -0
  7. flock/dashboard/__init__.py +30 -0
  8. flock/dashboard/collector.py +559 -0
  9. flock/dashboard/events.py +188 -0
  10. flock/dashboard/graph_builder.py +563 -0
  11. flock/dashboard/launcher.py +235 -0
  12. flock/dashboard/models/graph.py +156 -0
  13. flock/dashboard/service.py +991 -0
  14. flock/dashboard/static_v2/assets/index-DFRnI_mt.js +111 -0
  15. flock/dashboard/static_v2/assets/index-fPLNdmp1.css +1 -0
  16. flock/dashboard/static_v2/index.html +13 -0
  17. flock/dashboard/websocket.py +246 -0
  18. flock/engines/__init__.py +6 -0
  19. flock/engines/dspy_engine.py +932 -0
  20. flock/examples.py +131 -0
  21. flock/frontend/README.md +778 -0
  22. flock/frontend/docs/DESIGN_SYSTEM.md +1980 -0
  23. flock/frontend/index.html +12 -0
  24. flock/frontend/package-lock.json +4337 -0
  25. flock/frontend/package.json +48 -0
  26. flock/frontend/src/App.tsx +139 -0
  27. flock/frontend/src/__tests__/integration/graph-snapshot.test.tsx +647 -0
  28. flock/frontend/src/__tests__/integration/indexeddb-persistence.test.tsx +699 -0
  29. flock/frontend/src/components/common/BuildInfo.tsx +39 -0
  30. flock/frontend/src/components/common/EmptyState.module.css +115 -0
  31. flock/frontend/src/components/common/EmptyState.tsx +128 -0
  32. flock/frontend/src/components/common/ErrorBoundary.module.css +169 -0
  33. flock/frontend/src/components/common/ErrorBoundary.tsx +118 -0
  34. flock/frontend/src/components/common/KeyboardShortcutsDialog.css +251 -0
  35. flock/frontend/src/components/common/KeyboardShortcutsDialog.tsx +151 -0
  36. flock/frontend/src/components/common/LoadingSpinner.module.css +97 -0
  37. flock/frontend/src/components/common/LoadingSpinner.tsx +29 -0
  38. flock/frontend/src/components/controls/PublishControl.css +547 -0
  39. flock/frontend/src/components/controls/PublishControl.test.tsx +543 -0
  40. flock/frontend/src/components/controls/PublishControl.tsx +432 -0
  41. flock/frontend/src/components/details/DetailWindowContainer.tsx +58 -0
  42. flock/frontend/src/components/details/LiveOutputTab.test.tsx +792 -0
  43. flock/frontend/src/components/details/LiveOutputTab.tsx +220 -0
  44. flock/frontend/src/components/details/MessageDetailWindow.tsx +439 -0
  45. flock/frontend/src/components/details/MessageHistoryTab.tsx +374 -0
  46. flock/frontend/src/components/details/NodeDetailWindow.test.tsx +501 -0
  47. flock/frontend/src/components/details/NodeDetailWindow.tsx +218 -0
  48. flock/frontend/src/components/details/RunStatusTab.tsx +348 -0
  49. flock/frontend/src/components/details/tabs.test.tsx +1015 -0
  50. flock/frontend/src/components/filters/ArtifactTypeFilter.tsx +21 -0
  51. flock/frontend/src/components/filters/CorrelationIDFilter.module.css +102 -0
  52. flock/frontend/src/components/filters/CorrelationIDFilter.test.tsx +197 -0
  53. flock/frontend/src/components/filters/CorrelationIDFilter.tsx +121 -0
  54. flock/frontend/src/components/filters/FilterFlyout.module.css +104 -0
  55. flock/frontend/src/components/filters/FilterFlyout.tsx +80 -0
  56. flock/frontend/src/components/filters/FilterPills.module.css +220 -0
  57. flock/frontend/src/components/filters/FilterPills.test.tsx +189 -0
  58. flock/frontend/src/components/filters/FilterPills.tsx +143 -0
  59. flock/frontend/src/components/filters/ProducerFilter.tsx +21 -0
  60. flock/frontend/src/components/filters/SavedFiltersControl.module.css +60 -0
  61. flock/frontend/src/components/filters/SavedFiltersControl.test.tsx +158 -0
  62. flock/frontend/src/components/filters/SavedFiltersControl.tsx +159 -0
  63. flock/frontend/src/components/filters/TagFilter.tsx +21 -0
  64. flock/frontend/src/components/filters/TimeRangeFilter.module.css +115 -0
  65. flock/frontend/src/components/filters/TimeRangeFilter.test.tsx +154 -0
  66. flock/frontend/src/components/filters/TimeRangeFilter.tsx +110 -0
  67. flock/frontend/src/components/filters/VisibilityFilter.tsx +21 -0
  68. flock/frontend/src/components/graph/AgentNode.test.tsx +77 -0
  69. flock/frontend/src/components/graph/AgentNode.tsx +324 -0
  70. flock/frontend/src/components/graph/GraphCanvas.tsx +613 -0
  71. flock/frontend/src/components/graph/MessageFlowEdge.tsx +128 -0
  72. flock/frontend/src/components/graph/MessageNode.test.tsx +64 -0
  73. flock/frontend/src/components/graph/MessageNode.tsx +129 -0
  74. flock/frontend/src/components/graph/MiniMap.tsx +47 -0
  75. flock/frontend/src/components/graph/TransformEdge.tsx +123 -0
  76. flock/frontend/src/components/layout/DashboardLayout.css +420 -0
  77. flock/frontend/src/components/layout/DashboardLayout.tsx +287 -0
  78. flock/frontend/src/components/layout/Header.module.css +88 -0
  79. flock/frontend/src/components/layout/Header.tsx +52 -0
  80. flock/frontend/src/components/modules/HistoricalArtifactsModule.module.css +288 -0
  81. flock/frontend/src/components/modules/HistoricalArtifactsModule.tsx +450 -0
  82. flock/frontend/src/components/modules/HistoricalArtifactsModuleWrapper.tsx +13 -0
  83. flock/frontend/src/components/modules/JsonAttributeRenderer.tsx +140 -0
  84. flock/frontend/src/components/modules/ModuleRegistry.test.ts +333 -0
  85. flock/frontend/src/components/modules/ModuleRegistry.ts +93 -0
  86. flock/frontend/src/components/modules/ModuleWindow.tsx +223 -0
  87. flock/frontend/src/components/modules/TraceModuleJaeger.tsx +1971 -0
  88. flock/frontend/src/components/modules/TraceModuleJaegerWrapper.tsx +13 -0
  89. flock/frontend/src/components/modules/registerModules.ts +29 -0
  90. flock/frontend/src/components/settings/AdvancedSettings.tsx +175 -0
  91. flock/frontend/src/components/settings/AppearanceSettings.tsx +185 -0
  92. flock/frontend/src/components/settings/GraphSettings.tsx +110 -0
  93. flock/frontend/src/components/settings/MultiSelect.tsx +235 -0
  94. flock/frontend/src/components/settings/SettingsPanel.css +327 -0
  95. flock/frontend/src/components/settings/SettingsPanel.tsx +131 -0
  96. flock/frontend/src/components/settings/ThemeSelector.tsx +298 -0
  97. flock/frontend/src/components/settings/TracingSettings.tsx +404 -0
  98. flock/frontend/src/hooks/useKeyboardShortcuts.ts +148 -0
  99. flock/frontend/src/hooks/useModulePersistence.test.ts +442 -0
  100. flock/frontend/src/hooks/useModulePersistence.ts +154 -0
  101. flock/frontend/src/hooks/useModules.ts +157 -0
  102. flock/frontend/src/hooks/usePersistence.ts +141 -0
  103. flock/frontend/src/main.tsx +13 -0
  104. flock/frontend/src/services/api.ts +337 -0
  105. flock/frontend/src/services/graphService.test.ts +330 -0
  106. flock/frontend/src/services/graphService.ts +75 -0
  107. flock/frontend/src/services/indexeddb.test.ts +793 -0
  108. flock/frontend/src/services/indexeddb.ts +848 -0
  109. flock/frontend/src/services/layout.test.ts +437 -0
  110. flock/frontend/src/services/layout.ts +357 -0
  111. flock/frontend/src/services/themeApplicator.ts +140 -0
  112. flock/frontend/src/services/themeService.ts +77 -0
  113. flock/frontend/src/services/websocket.ts +650 -0
  114. flock/frontend/src/store/filterStore.test.ts +250 -0
  115. flock/frontend/src/store/filterStore.ts +272 -0
  116. flock/frontend/src/store/graphStore.test.ts +570 -0
  117. flock/frontend/src/store/graphStore.ts +462 -0
  118. flock/frontend/src/store/moduleStore.test.ts +253 -0
  119. flock/frontend/src/store/moduleStore.ts +75 -0
  120. flock/frontend/src/store/settingsStore.ts +188 -0
  121. flock/frontend/src/store/streamStore.ts +68 -0
  122. flock/frontend/src/store/uiStore.test.ts +54 -0
  123. flock/frontend/src/store/uiStore.ts +122 -0
  124. flock/frontend/src/store/wsStore.ts +34 -0
  125. flock/frontend/src/styles/index.css +15 -0
  126. flock/frontend/src/styles/scrollbar.css +47 -0
  127. flock/frontend/src/styles/variables.css +488 -0
  128. flock/frontend/src/test/setup.ts +1 -0
  129. flock/frontend/src/types/filters.ts +47 -0
  130. flock/frontend/src/types/graph.ts +95 -0
  131. flock/frontend/src/types/modules.ts +10 -0
  132. flock/frontend/src/types/theme.ts +55 -0
  133. flock/frontend/src/utils/artifacts.ts +24 -0
  134. flock/frontend/src/utils/mockData.ts +98 -0
  135. flock/frontend/src/utils/performance.ts +16 -0
  136. flock/frontend/src/vite-env.d.ts +17 -0
  137. flock/frontend/tsconfig.json +27 -0
  138. flock/frontend/tsconfig.node.json +11 -0
  139. flock/frontend/vite.config.ts +25 -0
  140. flock/frontend/vitest.config.ts +11 -0
  141. flock/{core/util → helper}/cli_helper.py +9 -5
  142. flock/{core/logging → logging}/__init__.py +2 -3
  143. flock/logging/auto_trace.py +159 -0
  144. flock/{core/logging → logging}/formatters/enum_builder.py +3 -4
  145. flock/{core/logging → logging}/formatters/theme_builder.py +19 -44
  146. flock/{core/logging → logging}/formatters/themed_formatter.py +69 -107
  147. flock/{core/logging → logging}/logging.py +78 -61
  148. flock/{core/logging → logging}/telemetry.py +66 -26
  149. flock/{core/logging → logging}/telemetry_exporter/base_exporter.py +2 -2
  150. flock/logging/telemetry_exporter/duckdb_exporter.py +216 -0
  151. flock/{core/logging → logging}/telemetry_exporter/file_exporter.py +13 -10
  152. flock/{core/logging → logging}/telemetry_exporter/sqlite_exporter.py +2 -3
  153. flock/logging/trace_and_logged.py +304 -0
  154. flock/mcp/__init__.py +91 -0
  155. flock/{core/mcp/mcp_client.py → mcp/client.py} +131 -158
  156. flock/{core/mcp/mcp_config.py → mcp/config.py} +86 -132
  157. flock/mcp/manager.py +286 -0
  158. flock/mcp/servers/sse/__init__.py +1 -1
  159. flock/mcp/servers/sse/flock_sse_server.py +16 -58
  160. flock/mcp/servers/stdio/__init__.py +1 -1
  161. flock/mcp/servers/stdio/flock_stdio_server.py +13 -53
  162. flock/mcp/servers/streamable_http/flock_streamable_http_server.py +22 -67
  163. flock/mcp/servers/websockets/flock_websocket_server.py +12 -45
  164. flock/{core/mcp/flock_mcp_tool_base.py → mcp/tool.py} +24 -78
  165. flock/mcp/types/__init__.py +42 -0
  166. flock/{core/mcp → mcp}/types/callbacks.py +12 -15
  167. flock/{core/mcp → mcp}/types/factories.py +7 -6
  168. flock/{core/mcp → mcp}/types/handlers.py +13 -18
  169. flock/{core/mcp → mcp}/types/types.py +70 -74
  170. flock/{core/mcp → mcp}/util/helpers.py +3 -3
  171. flock/orchestrator.py +970 -0
  172. flock/registry.py +148 -0
  173. flock/runtime.py +262 -0
  174. flock/service.py +277 -0
  175. flock/store.py +1214 -0
  176. flock/subscription.py +111 -0
  177. flock/themes/andromeda.toml +1 -1
  178. flock/themes/apple-system-colors.toml +1 -1
  179. flock/themes/arcoiris.toml +1 -1
  180. flock/themes/atomonelight.toml +1 -1
  181. flock/themes/ayu copy.toml +1 -1
  182. flock/themes/ayu-light.toml +1 -1
  183. flock/themes/belafonte-day.toml +1 -1
  184. flock/themes/belafonte-night.toml +1 -1
  185. flock/themes/blulocodark.toml +1 -1
  186. flock/themes/breeze.toml +1 -1
  187. flock/themes/broadcast.toml +1 -1
  188. flock/themes/brogrammer.toml +1 -1
  189. flock/themes/builtin-dark.toml +1 -1
  190. flock/themes/builtin-pastel-dark.toml +1 -1
  191. flock/themes/catppuccin-latte.toml +1 -1
  192. flock/themes/catppuccin-macchiato.toml +1 -1
  193. flock/themes/catppuccin-mocha.toml +1 -1
  194. flock/themes/cga.toml +1 -1
  195. flock/themes/chalk.toml +1 -1
  196. flock/themes/ciapre.toml +1 -1
  197. flock/themes/coffee-theme.toml +1 -1
  198. flock/themes/cyberpunkscarletprotocol.toml +1 -1
  199. flock/themes/dark+.toml +1 -1
  200. flock/themes/darkermatrix.toml +1 -1
  201. flock/themes/darkmatrix.toml +2 -2
  202. flock/themes/darkside.toml +1 -1
  203. flock/themes/deep.toml +2 -2
  204. flock/themes/desert.toml +1 -1
  205. flock/themes/django.toml +1 -1
  206. flock/themes/djangosmooth.toml +1 -1
  207. flock/themes/doomone.toml +1 -1
  208. flock/themes/dotgov.toml +1 -1
  209. flock/themes/dracula+.toml +1 -1
  210. flock/themes/duckbones.toml +1 -1
  211. flock/themes/encom.toml +1 -1
  212. flock/themes/espresso.toml +1 -1
  213. flock/themes/everblush.toml +1 -1
  214. flock/themes/fairyfloss.toml +1 -1
  215. flock/themes/fideloper.toml +1 -1
  216. flock/themes/fishtank.toml +1 -1
  217. flock/themes/flexoki-light.toml +1 -1
  218. flock/themes/floraverse.toml +1 -1
  219. flock/themes/framer.toml +1 -1
  220. flock/themes/galizur.toml +1 -1
  221. flock/themes/github.toml +1 -1
  222. flock/themes/grass.toml +1 -1
  223. flock/themes/grey-green.toml +1 -1
  224. flock/themes/gruvboxlight.toml +1 -1
  225. flock/themes/guezwhoz.toml +1 -1
  226. flock/themes/harper.toml +1 -1
  227. flock/themes/hax0r-blue.toml +1 -1
  228. flock/themes/hopscotch.256.toml +1 -1
  229. flock/themes/ic-green-ppl.toml +1 -1
  230. flock/themes/iceberg-dark.toml +1 -1
  231. flock/themes/japanesque.toml +1 -1
  232. flock/themes/jubi.toml +1 -1
  233. flock/themes/kibble.toml +1 -1
  234. flock/themes/kolorit.toml +1 -1
  235. flock/themes/kurokula.toml +1 -1
  236. flock/themes/materialdesigncolors.toml +1 -1
  237. flock/themes/matrix.toml +1 -1
  238. flock/themes/mellifluous.toml +1 -1
  239. flock/themes/midnight-in-mojave.toml +1 -1
  240. flock/themes/monokai-remastered.toml +1 -1
  241. flock/themes/monokai-soda.toml +1 -1
  242. flock/themes/neon.toml +1 -1
  243. flock/themes/neopolitan.toml +5 -5
  244. flock/themes/nord-light.toml +1 -1
  245. flock/themes/ocean.toml +1 -1
  246. flock/themes/onehalfdark.toml +1 -1
  247. flock/themes/onehalflight.toml +1 -1
  248. flock/themes/palenighthc.toml +1 -1
  249. flock/themes/paulmillr.toml +1 -1
  250. flock/themes/pencildark.toml +1 -1
  251. flock/themes/pnevma.toml +1 -1
  252. flock/themes/purple-rain.toml +1 -1
  253. flock/themes/purplepeter.toml +1 -1
  254. flock/themes/raycast-dark.toml +1 -1
  255. flock/themes/red-sands.toml +1 -1
  256. flock/themes/relaxed.toml +1 -1
  257. flock/themes/retro.toml +1 -1
  258. flock/themes/rose-pine.toml +1 -1
  259. flock/themes/royal.toml +1 -1
  260. flock/themes/ryuuko.toml +1 -1
  261. flock/themes/sakura.toml +1 -1
  262. flock/themes/scarlet-protocol.toml +1 -1
  263. flock/themes/seoulbones-dark.toml +1 -1
  264. flock/themes/shades-of-purple.toml +1 -1
  265. flock/themes/smyck.toml +1 -1
  266. flock/themes/softserver.toml +1 -1
  267. flock/themes/solarized-darcula.toml +1 -1
  268. flock/themes/square.toml +1 -1
  269. flock/themes/sugarplum.toml +1 -1
  270. flock/themes/thayer-bright.toml +1 -1
  271. flock/themes/tokyonight.toml +1 -1
  272. flock/themes/tomorrow.toml +1 -1
  273. flock/themes/ubuntu.toml +1 -1
  274. flock/themes/ultradark.toml +1 -1
  275. flock/themes/ultraviolent.toml +1 -1
  276. flock/themes/unikitty.toml +1 -1
  277. flock/themes/urple.toml +1 -1
  278. flock/themes/vesper.toml +1 -1
  279. flock/themes/vimbones.toml +1 -1
  280. flock/themes/wildcherry.toml +1 -1
  281. flock/themes/wilmersdorf.toml +1 -1
  282. flock/themes/wryan.toml +1 -1
  283. flock/themes/xcodedarkhc.toml +1 -1
  284. flock/themes/xcodelight.toml +1 -1
  285. flock/themes/zenbones-light.toml +1 -1
  286. flock/themes/zenwritten-dark.toml +1 -1
  287. flock/utilities.py +301 -0
  288. flock/utility/output_utility_component.py +226 -0
  289. flock/visibility.py +107 -0
  290. flock_core-0.5.0.dist-info/METADATA +964 -0
  291. flock_core-0.5.0.dist-info/RECORD +525 -0
  292. flock_core-0.5.0.dist-info/entry_points.txt +2 -0
  293. {flock_core-0.4.542.dist-info → flock_core-0.5.0.dist-info}/licenses/LICENSE +1 -1
  294. flock/adapter/__init__.py +0 -14
  295. flock/adapter/azure_adapter.py +0 -68
  296. flock/adapter/chroma_adapter.py +0 -73
  297. flock/adapter/faiss_adapter.py +0 -97
  298. flock/adapter/pinecone_adapter.py +0 -51
  299. flock/adapter/vector_base.py +0 -47
  300. flock/cli/assets/release_notes.md +0 -140
  301. flock/cli/config.py +0 -8
  302. flock/cli/constants.py +0 -36
  303. flock/cli/create_agent.py +0 -1
  304. flock/cli/create_flock.py +0 -280
  305. flock/cli/execute_flock.py +0 -620
  306. flock/cli/load_agent.py +0 -1
  307. flock/cli/load_examples.py +0 -1
  308. flock/cli/load_flock.py +0 -192
  309. flock/cli/load_release_notes.py +0 -20
  310. flock/cli/loaded_flock_cli.py +0 -254
  311. flock/cli/manage_agents.py +0 -459
  312. flock/cli/registry_management.py +0 -889
  313. flock/cli/runner.py +0 -41
  314. flock/cli/settings.py +0 -857
  315. flock/cli/utils.py +0 -135
  316. flock/cli/view_results.py +0 -29
  317. flock/cli/yaml_editor.py +0 -396
  318. flock/config.py +0 -56
  319. flock/core/__init__.py +0 -44
  320. flock/core/api/__init__.py +0 -10
  321. flock/core/api/custom_endpoint.py +0 -45
  322. flock/core/api/endpoints.py +0 -262
  323. flock/core/api/main.py +0 -162
  324. flock/core/api/models.py +0 -101
  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/config/flock_agent_config.py +0 -11
  329. flock/core/config/scheduled_agent_config.py +0 -40
  330. flock/core/context/context.py +0 -214
  331. flock/core/context/context_manager.py +0 -40
  332. flock/core/context/context_vars.py +0 -11
  333. flock/core/evaluation/utils.py +0 -395
  334. flock/core/execution/batch_executor.py +0 -369
  335. flock/core/execution/evaluation_executor.py +0 -438
  336. flock/core/execution/local_executor.py +0 -31
  337. flock/core/execution/opik_executor.py +0 -103
  338. flock/core/execution/temporal_executor.py +0 -166
  339. flock/core/flock.py +0 -1003
  340. flock/core/flock_agent.py +0 -1258
  341. flock/core/flock_evaluator.py +0 -60
  342. flock/core/flock_factory.py +0 -513
  343. flock/core/flock_module.py +0 -207
  344. flock/core/flock_registry.py +0 -702
  345. flock/core/flock_router.py +0 -83
  346. flock/core/flock_scheduler.py +0 -166
  347. flock/core/flock_server_manager.py +0 -136
  348. flock/core/interpreter/python_interpreter.py +0 -689
  349. flock/core/logging/live_capture.py +0 -137
  350. flock/core/logging/trace_and_logged.py +0 -59
  351. flock/core/mcp/__init__.py +0 -1
  352. flock/core/mcp/flock_mcp_server.py +0 -640
  353. flock/core/mcp/mcp_client_manager.py +0 -201
  354. flock/core/mcp/types/__init__.py +0 -1
  355. flock/core/mixin/dspy_integration.py +0 -445
  356. flock/core/mixin/prompt_parser.py +0 -125
  357. flock/core/serialization/__init__.py +0 -13
  358. flock/core/serialization/callable_registry.py +0 -52
  359. flock/core/serialization/flock_serializer.py +0 -854
  360. flock/core/serialization/json_encoder.py +0 -41
  361. flock/core/serialization/secure_serializer.py +0 -175
  362. flock/core/serialization/serializable.py +0 -342
  363. flock/core/serialization/serialization_utils.py +0 -409
  364. flock/core/util/file_path_utils.py +0 -223
  365. flock/core/util/hydrator.py +0 -309
  366. flock/core/util/input_resolver.py +0 -141
  367. flock/core/util/loader.py +0 -59
  368. flock/core/util/splitter.py +0 -219
  369. flock/di.py +0 -41
  370. flock/evaluators/__init__.py +0 -1
  371. flock/evaluators/declarative/__init__.py +0 -1
  372. flock/evaluators/declarative/declarative_evaluator.py +0 -217
  373. flock/evaluators/memory/memory_evaluator.py +0 -90
  374. flock/evaluators/test/test_case_evaluator.py +0 -38
  375. flock/evaluators/zep/zep_evaluator.py +0 -59
  376. flock/modules/__init__.py +0 -1
  377. flock/modules/assertion/__init__.py +0 -1
  378. flock/modules/assertion/assertion_module.py +0 -286
  379. flock/modules/callback/__init__.py +0 -1
  380. flock/modules/callback/callback_module.py +0 -91
  381. flock/modules/enterprise_memory/README.md +0 -99
  382. flock/modules/enterprise_memory/enterprise_memory_module.py +0 -526
  383. flock/modules/mem0/__init__.py +0 -1
  384. flock/modules/mem0/mem0_module.py +0 -126
  385. flock/modules/mem0_async/__init__.py +0 -1
  386. flock/modules/mem0_async/async_mem0_module.py +0 -126
  387. flock/modules/memory/__init__.py +0 -1
  388. flock/modules/memory/memory_module.py +0 -429
  389. flock/modules/memory/memory_parser.py +0 -125
  390. flock/modules/memory/memory_storage.py +0 -736
  391. flock/modules/output/__init__.py +0 -1
  392. flock/modules/output/output_module.py +0 -196
  393. flock/modules/performance/__init__.py +0 -1
  394. flock/modules/performance/metrics_module.py +0 -678
  395. flock/modules/zep/__init__.py +0 -1
  396. flock/modules/zep/zep_module.py +0 -192
  397. flock/platform/docker_tools.py +0 -49
  398. flock/platform/jaeger_install.py +0 -86
  399. flock/routers/__init__.py +0 -1
  400. flock/routers/agent/__init__.py +0 -1
  401. flock/routers/agent/agent_router.py +0 -236
  402. flock/routers/agent/handoff_agent.py +0 -58
  403. flock/routers/conditional/conditional_router.py +0 -486
  404. flock/routers/default/__init__.py +0 -1
  405. flock/routers/default/default_router.py +0 -80
  406. flock/routers/feedback/feedback_router.py +0 -114
  407. flock/routers/list_generator/list_generator_router.py +0 -166
  408. flock/routers/llm/__init__.py +0 -1
  409. flock/routers/llm/llm_router.py +0 -365
  410. flock/tools/__init__.py +0 -0
  411. flock/tools/azure_tools.py +0 -781
  412. flock/tools/code_tools.py +0 -167
  413. flock/tools/file_tools.py +0 -149
  414. flock/tools/github_tools.py +0 -157
  415. flock/tools/markdown_tools.py +0 -205
  416. flock/tools/system_tools.py +0 -9
  417. flock/tools/text_tools.py +0 -810
  418. flock/tools/web_tools.py +0 -92
  419. flock/tools/zendesk_tools.py +0 -501
  420. flock/webapp/__init__.py +0 -1
  421. flock/webapp/app/__init__.py +0 -0
  422. flock/webapp/app/api/__init__.py +0 -0
  423. flock/webapp/app/api/agent_management.py +0 -237
  424. flock/webapp/app/api/execution.py +0 -503
  425. flock/webapp/app/api/flock_management.py +0 -125
  426. flock/webapp/app/api/registry_viewer.py +0 -29
  427. flock/webapp/app/chat.py +0 -662
  428. flock/webapp/app/config.py +0 -104
  429. flock/webapp/app/dependencies.py +0 -117
  430. flock/webapp/app/main.py +0 -1086
  431. flock/webapp/app/middleware.py +0 -113
  432. flock/webapp/app/models_ui.py +0 -7
  433. flock/webapp/app/services/__init__.py +0 -0
  434. flock/webapp/app/services/feedback_file_service.py +0 -363
  435. flock/webapp/app/services/flock_service.py +0 -345
  436. flock/webapp/app/services/sharing_models.py +0 -81
  437. flock/webapp/app/services/sharing_store.py +0 -597
  438. flock/webapp/app/templates/theme_mapper.html +0 -326
  439. flock/webapp/app/theme_mapper.py +0 -811
  440. flock/webapp/app/utils.py +0 -85
  441. flock/webapp/run.py +0 -219
  442. flock/webapp/static/css/chat.css +0 -301
  443. flock/webapp/static/css/components.css +0 -167
  444. flock/webapp/static/css/header.css +0 -39
  445. flock/webapp/static/css/layout.css +0 -281
  446. flock/webapp/static/css/sidebar.css +0 -127
  447. flock/webapp/static/css/two-pane.css +0 -48
  448. flock/webapp/templates/base.html +0 -389
  449. flock/webapp/templates/chat.html +0 -152
  450. flock/webapp/templates/chat_settings.html +0 -19
  451. flock/webapp/templates/flock_editor.html +0 -16
  452. flock/webapp/templates/index.html +0 -12
  453. flock/webapp/templates/partials/_agent_detail_form.html +0 -93
  454. flock/webapp/templates/partials/_agent_list.html +0 -18
  455. flock/webapp/templates/partials/_agent_manager_view.html +0 -51
  456. flock/webapp/templates/partials/_agent_tools_checklist.html +0 -14
  457. flock/webapp/templates/partials/_chat_container.html +0 -15
  458. flock/webapp/templates/partials/_chat_messages.html +0 -57
  459. flock/webapp/templates/partials/_chat_settings_form.html +0 -85
  460. flock/webapp/templates/partials/_create_flock_form.html +0 -50
  461. flock/webapp/templates/partials/_dashboard_flock_detail.html +0 -17
  462. flock/webapp/templates/partials/_dashboard_flock_file_list.html +0 -16
  463. flock/webapp/templates/partials/_dashboard_flock_properties_preview.html +0 -28
  464. flock/webapp/templates/partials/_dashboard_upload_flock_form.html +0 -16
  465. flock/webapp/templates/partials/_dynamic_input_form_content.html +0 -22
  466. flock/webapp/templates/partials/_env_vars_table.html +0 -23
  467. flock/webapp/templates/partials/_execution_form.html +0 -127
  468. flock/webapp/templates/partials/_execution_view_container.html +0 -28
  469. flock/webapp/templates/partials/_flock_file_list.html +0 -23
  470. flock/webapp/templates/partials/_flock_properties_form.html +0 -52
  471. flock/webapp/templates/partials/_flock_upload_form.html +0 -16
  472. flock/webapp/templates/partials/_header_flock_status.html +0 -5
  473. flock/webapp/templates/partials/_live_logs.html +0 -13
  474. flock/webapp/templates/partials/_load_manager_view.html +0 -49
  475. flock/webapp/templates/partials/_registry_table.html +0 -25
  476. flock/webapp/templates/partials/_registry_viewer_content.html +0 -70
  477. flock/webapp/templates/partials/_results_display.html +0 -78
  478. flock/webapp/templates/partials/_settings_env_content.html +0 -9
  479. flock/webapp/templates/partials/_settings_theme_content.html +0 -14
  480. flock/webapp/templates/partials/_settings_view.html +0 -36
  481. flock/webapp/templates/partials/_share_chat_link_snippet.html +0 -11
  482. flock/webapp/templates/partials/_share_link_snippet.html +0 -35
  483. flock/webapp/templates/partials/_sidebar.html +0 -74
  484. flock/webapp/templates/partials/_structured_data_view.html +0 -40
  485. flock/webapp/templates/partials/_theme_preview.html +0 -36
  486. flock/webapp/templates/registry_viewer.html +0 -84
  487. flock/webapp/templates/shared_run_page.html +0 -140
  488. flock/workflow/__init__.py +0 -0
  489. flock/workflow/activities.py +0 -237
  490. flock/workflow/agent_activities.py +0 -24
  491. flock/workflow/agent_execution_activity.py +0 -240
  492. flock/workflow/flock_workflow.py +0 -225
  493. flock/workflow/temporal_config.py +0 -96
  494. flock/workflow/temporal_setup.py +0 -60
  495. flock_core-0.4.542.dist-info/METADATA +0 -676
  496. flock_core-0.4.542.dist-info/RECORD +0 -572
  497. flock_core-0.4.542.dist-info/entry_points.txt +0 -2
  498. /flock/{core/logging → logging}/formatters/themes.py +0 -0
  499. /flock/{core/logging → logging}/span_middleware/baggage_span_processor.py +0 -0
  500. /flock/{core/mcp → mcp}/util/__init__.py +0 -0
  501. {flock_core-0.4.542.dist-info → flock_core-0.5.0.dist-info}/WHEEL +0 -0
@@ -1,166 +0,0 @@
1
- # src/flock/routers/list_generator/iterative_list_router.py (New File)
2
-
3
- from typing import Any
4
-
5
- from pydantic import Field
6
-
7
- from flock.core.context.context import FlockContext
8
- from flock.core.flock_agent import FlockAgent
9
- from flock.core.flock_registry import flock_component
10
- from flock.core.flock_router import (
11
- FlockRouter,
12
- FlockRouterConfig,
13
- HandOffRequest,
14
- )
15
- from flock.core.logging.logging import get_logger
16
-
17
- # Need signature utils
18
-
19
- logger = get_logger("router.list_generator")
20
-
21
-
22
- class IterativeListGeneratorRouterConfig(FlockRouterConfig):
23
- target_list_field: str = Field(
24
- ...,
25
- description="Name of the final list output field (e.g., 'chapters').",
26
- )
27
- item_output_field: str = Field(
28
- ...,
29
- description="Name of the single item output field for each iteration (e.g., 'chapter').",
30
- )
31
- context_input_field: str = Field(
32
- default="previous_items",
33
- description="Input field name for passing back generated items (e.g., 'existing_chapters').",
34
- )
35
- max_iterations: int = Field(
36
- default=10, description="Maximum number of items to generate."
37
- )
38
- # More advanced: termination_condition: Optional[Callable] = None
39
- # Store iteration state in context under this prefix
40
- context_state_prefix: str = Field(
41
- default="flock.iterator_state_",
42
- description="Prefix for context keys storing iteration state.",
43
- )
44
-
45
- # Field to extract item type from target_list_field signature
46
- # This might require parsing the original agent's output signature
47
- # item_type_str: Optional[str] = None # e.g., 'dict[str, str]' or 'MyChapterType'
48
-
49
-
50
- @flock_component(config_class=IterativeListGeneratorRouterConfig)
51
- class IterativeListGeneratorRouter(FlockRouter):
52
- name: str = "iterative_list_generator"
53
- config: IterativeListGeneratorRouterConfig = Field(
54
- default_factory=IterativeListGeneratorRouterConfig
55
- )
56
-
57
- # Helper to get state keys
58
- def _get_state_keys(self, agent_name: str) -> tuple[str, str]:
59
- prefix = self.config.context_state_prefix
60
- list_key = f"{prefix}{agent_name}_{self.config.target_list_field}"
61
- count_key = f"{prefix}{agent_name}_iteration_count"
62
- return list_key, count_key
63
-
64
- async def route(
65
- self,
66
- current_agent: FlockAgent,
67
- result: dict[str, Any],
68
- context: FlockContext,
69
- ) -> HandOffRequest:
70
- list_key, count_key = self._get_state_keys(current_agent.name)
71
-
72
- # --- State Initialization (First Run) ---
73
- if count_key not in context.state:
74
- logger.debug(
75
- f"Initializing iterative list generation for '{self.config.target_list_field}' in agent '{current_agent.name}'."
76
- )
77
- context.set_variable(count_key, 0)
78
- context.set_variable(list_key, [])
79
- # Modify agent signature for the *first* iteration (remove context_input_field, use item_output_field)
80
- # This requires modifying the agent's internal state or creating a temporary one.
81
- # Let's try modifying the context passed to the *next* run instead.
82
- context.set_variable(
83
- f"{current_agent.name}.next_run_output_field",
84
- self.config.item_output_field,
85
- )
86
- context.set_variable(
87
- f"{current_agent.name}.next_run_input_fields_to_exclude",
88
- {self.config.context_input_field},
89
- )
90
-
91
- # --- Process Result of Previous Iteration ---
92
- iteration_count = context.get_variable(count_key, 0)
93
- generated_items = context.get_variable(list_key, [])
94
-
95
- # Get the single item generated in the *last* run
96
- # The result dict should contain the 'item_output_field' if it wasn't the very first run
97
- new_item = result.get(self.config.item_output_field)
98
-
99
- if (
100
- new_item is not None and iteration_count > 0
101
- ): # Add item from previous run (not the init run)
102
- generated_items.append(new_item)
103
- context.set_variable(list_key, generated_items) # Update context
104
- logger.info(
105
- f"Added item #{iteration_count} to list '{self.config.target_list_field}' for agent '{current_agent.name}'."
106
- )
107
- elif iteration_count > 0:
108
- logger.warning(
109
- f"Iteration {iteration_count} for agent '{current_agent.name}' did not produce expected output field '{self.config.item_output_field}'."
110
- )
111
- # Decide how to handle: stop, retry, continue? Let's continue for now.
112
-
113
- # Increment iteration count *after* processing the result of the previous one
114
- current_iteration = iteration_count + 1
115
- context.set_variable(count_key, current_iteration)
116
-
117
- # --- Termination Check ---
118
- if current_iteration > self.config.max_iterations:
119
- logger.info(
120
- f"Max iterations ({self.config.max_iterations}) reached for '{self.config.target_list_field}' in agent '{current_agent.name}'. Finalizing."
121
- )
122
- # Clean up state
123
- del context.state[count_key]
124
- # Final result should be the list itself under the target_list_field key
125
- final_result = {self.config.target_list_field: generated_items}
126
- # Handoff with empty next_agent to stop, but potentially override the *result*
127
- # This is tricky. Routers usually decide the *next agent*, not the *final output*.
128
- # Maybe the router should just signal termination, and the Flock run loop handles assembling the final output?
129
- # Let's assume the router signals termination by returning next_agent=""
130
- # The final list is already in the context under list_key.
131
- # A final "AssemblerAgent" could read this context variable.
132
- # OR we modify the HandOffRequest:
133
- return HandOffRequest(
134
- next_agent="", final_output_override=final_result
135
- ) # Needs HandOffRequest modification
136
-
137
- # --- Prepare for Next Iteration ---
138
- logger.info(
139
- f"Routing back to agent '{current_agent.name}' for item #{current_iteration} of '{self.config.target_list_field}'."
140
- )
141
-
142
- # The agent needs the context (previously generated items) and the original inputs again.
143
- # We will pass the generated items via the context_input_field.
144
- # The original inputs (like story_outline) should still be in the context.
145
- next_input_override = {
146
- self.config.context_input_field: generated_items # Pass the list back
147
- }
148
-
149
- # Modify agent signature for the *next* iteration (add context_input_field, use item_output_field)
150
- # This is the trickiest part - how to modify the agent's perceived signature for the next run?
151
- # Option 1: Pass overrides via HandOffRequest (cleanest)
152
- next_signature_input = f"{current_agent.input}, {self.config.context_input_field}: list | Previously generated items" # Needs smarter joining
153
- next_signature_output = (
154
- self.config.item_output_field
155
- ) # Only ask for one item
156
-
157
- # This requires HandOffRequest and Flock execution loop to support signature overrides
158
- return HandOffRequest(
159
- next_agent=current_agent.name,
160
- output_to_input_merge_strategy="add", # Add the context_input_field to existing context
161
- input_override=next_input_override, # Provide the actual list data
162
- # --- Hypothetical Overrides ---
163
- next_run_input_signature_override=next_signature_input,
164
- next_run_output_signature_override=next_signature_output,
165
- # -----------------------------
166
- )
@@ -1 +0,0 @@
1
- """LLM-based router implementation for the Flock framework."""
@@ -1,365 +0,0 @@
1
- """LLM-based router implementation for the Flock framework."""
2
-
3
- import json
4
- from typing import Any
5
-
6
- import litellm
7
-
8
- from flock.core.context.context import FlockContext
9
- from flock.core.flock_agent import FlockAgent
10
- from flock.core.flock_registry import flock_component
11
- from flock.core.flock_router import (
12
- FlockRouter,
13
- FlockRouterConfig,
14
- HandOffRequest,
15
- )
16
- from flock.core.logging.logging import get_logger
17
-
18
- logger = get_logger("llm_router")
19
-
20
-
21
- class LLMRouterConfig(FlockRouterConfig):
22
- """Configuration for the LLM router.
23
-
24
- This class extends FlockRouterConfig with parameters specific to the LLM router.
25
- """
26
-
27
- temperature: float = 0.2
28
- max_tokens: int = 500
29
- confidence_threshold: float = 0.5
30
- prompt: str = ""
31
-
32
-
33
- @flock_component(config_class=LLMRouterConfig)
34
- class LLMRouter(FlockRouter):
35
- """Router that uses an LLM to determine the next agent in a workflow.
36
-
37
- This class is responsible for:
38
- 1. Analyzing available agents in the registry
39
- 2. Using an LLM to score each agent's suitability as the next step
40
- 3. Selecting the highest-scoring agent
41
- 4. Creating a HandOff object with the selected agent
42
- """
43
-
44
- def __init__(
45
- self,
46
- name: str = "llm_router",
47
- config: LLMRouterConfig | None = None,
48
- ):
49
- """Initialize the LLMRouter.
50
-
51
- Args:
52
- registry: The agent registry containing all available agents
53
- name: The name of the router
54
- config: The router configuration
55
- """
56
- logger.info(f"Initializing LLM Router '{name}'")
57
- super().__init__(name=name, config=config or LLMRouterConfig(name=name))
58
- logger.debug(
59
- "LLM Router configuration",
60
- temperature=self.config.temperature,
61
- max_tokens=self.config.max_tokens,
62
- )
63
-
64
- async def route(
65
- self,
66
- current_agent: FlockAgent,
67
- result: dict[str, Any],
68
- context: FlockContext,
69
- ) -> HandOffRequest:
70
- """Determine the next agent to hand off to based on the current agent's output.
71
-
72
- Args:
73
- current_agent: The agent that just completed execution
74
- result: The output from the current agent
75
- context: The global execution context
76
-
77
- Returns:
78
- A HandOff object containing the next agent and input data
79
- """
80
- logger.info(
81
- f"Routing from agent '{current_agent.name}'",
82
- current_agent=current_agent.name,
83
- )
84
- logger.debug("Current agent result", result=result)
85
-
86
- agent_definitions = context.agent_definitions
87
- # Get all available agents from the registry
88
- available_agents = self._get_available_agents(
89
- agent_definitions, current_agent.name
90
- )
91
- logger.debug(
92
- "Available agents for routing",
93
- count=len(available_agents),
94
- agents=[a.agent_data["name"] for a in available_agents],
95
- )
96
-
97
- if not available_agents:
98
- logger.warning(
99
- "No available agents for routing",
100
- current_agent=current_agent.name,
101
- )
102
- return HandOffRequest(
103
- next_agent="", override_next_agent={}, override_context=None
104
- )
105
-
106
- # Use LLM to determine the best next agent
107
- next_agent_name, score = await self._select_next_agent(
108
- current_agent, result, available_agents
109
- )
110
- logger.info(
111
- "Agent selection result",
112
- next_agent=next_agent_name,
113
- score=score,
114
- )
115
-
116
- if not next_agent_name or score < self.config.confidence_threshold:
117
- logger.warning(
118
- "No suitable next agent found",
119
- best_score=score,
120
- )
121
- return HandOffRequest(
122
- next_agent="", override_next_agent={}, override_context=None
123
- )
124
-
125
- # Get the next agent from the registry
126
- next_agent = agent_definitions.get(next_agent_name)
127
- if not next_agent:
128
- logger.error(
129
- "Selected agent not found in registry",
130
- agent_name=next_agent_name,
131
- )
132
- return HandOffRequest(
133
- next_agent="", override_next_agent={}, override_context=None
134
- )
135
-
136
- # Create input for the next agent
137
-
138
- logger.success(
139
- f"Successfully routed to agent '{next_agent_name}'",
140
- score=score,
141
- from_agent=current_agent.name,
142
- )
143
- return HandOffRequest(
144
- next_agent=next_agent_name,
145
- output_to_input_merge_strategy="add",
146
- override_next_agent=None,
147
- override_context=None,
148
- )
149
-
150
- def _get_available_agents(
151
- self, agent_definitions: dict[str, Any], current_agent_name: str
152
- ) -> list[FlockAgent]:
153
- """Get all available agents except the current one.
154
-
155
- Args:
156
- current_agent_name: Name of the current agent to exclude
157
-
158
- Returns:
159
- List of available agents
160
- """
161
- logger.debug(
162
- "Getting available agents",
163
- total_agents=len(agent_definitions),
164
- current_agent=current_agent_name,
165
- )
166
- agents = []
167
- for agent in agent_definitions:
168
- if agent != current_agent_name:
169
- agents.append(agent_definitions.get(agent))
170
- return agents
171
-
172
- async def _select_next_agent(
173
- self,
174
- current_agent: FlockAgent,
175
- result: dict[str, Any],
176
- available_agents: list[FlockAgent],
177
- ) -> tuple[str, float]:
178
- """Use an LLM to select the best next agent.
179
-
180
- Args:
181
- current_agent: The agent that just completed execution
182
- result: The output from the current agent
183
- available_agents: List of available agents to choose from
184
-
185
- Returns:
186
- Tuple of (selected_agent_name, confidence_score)
187
- """
188
- logger.debug(
189
- "Selecting next agent",
190
- current_agent=current_agent.name,
191
- available_count=len(available_agents),
192
- )
193
-
194
- # Prepare the prompt for the LLM
195
- prompt = self._create_selection_prompt(
196
- current_agent, result, available_agents
197
- )
198
- logger.debug("Generated selection prompt", prompt_length=len(prompt))
199
-
200
- try:
201
- logger.info(
202
- "Calling LLM for agent selection",
203
- model=current_agent.model,
204
- temperature=self.config.temperature,
205
- )
206
- # Call the LLM to get the next agent
207
- response = await litellm.acompletion(
208
- model=current_agent.model,
209
- messages=[{"role": "user", "content": prompt}],
210
- temperature=self.config.temperature
211
- if isinstance(self.config, LLMRouterConfig)
212
- else 0.2,
213
- max_tokens=self.config.max_tokens
214
- if isinstance(self.config, LLMRouterConfig)
215
- else 500,
216
- )
217
-
218
- content = response.choices[0].message.content
219
- # Parse the response to get the agent name and score
220
- try:
221
- # extract the json object from the response
222
- content = content.split("```json")[1].split("```")[0]
223
- data = json.loads(content)
224
- next_agent = data.get("next_agent", "")
225
- score = float(data.get("score", 0))
226
- reasoning = data.get("reasoning", "")
227
- logger.info(
228
- "Successfully parsed LLM response",
229
- next_agent=next_agent,
230
- score=score,
231
- reasoning=reasoning,
232
- )
233
- return next_agent, score
234
- except (json.JSONDecodeError, ValueError) as e:
235
- logger.error(
236
- "Failed to parse LLM response",
237
- error=str(e),
238
- raw_response=content,
239
- )
240
- logger.debug("Attempting fallback parsing")
241
-
242
- # Fallback: try to extract the agent name from the text
243
- for agent in available_agents:
244
- if agent.agent_data["name"] in content:
245
- logger.info(
246
- "Found agent name in response using fallback",
247
- agent=agent.agent_data["name"],
248
- )
249
- return agent.agent_data[
250
- "name"
251
- ], 0.6 # Default score for fallback
252
-
253
- return "", 0.0
254
-
255
- except Exception as e:
256
- logger.error(
257
- "Error calling LLM for agent selection",
258
- error=str(e),
259
- current_agent=current_agent.name,
260
- )
261
- return "", 0.0
262
-
263
- def _create_selection_prompt(
264
- self,
265
- current_agent: FlockAgent,
266
- result: dict[str, Any],
267
- available_agents: list[FlockAgent],
268
- ) -> str:
269
- """Create a prompt for the LLM to select the next agent.
270
-
271
- Args:
272
- current_agent: The agent that just completed execution
273
- result: The output from the current agent
274
- available_agents: List of available agents to choose from
275
-
276
- Returns:
277
- Prompt string for the LLM
278
- """
279
- # Format the current agent's output
280
- result_str = json.dumps(result, indent=2)
281
-
282
- # Format the available agents' information
283
- agents_info = []
284
- for agent in available_agents:
285
- agent_info = {
286
- "name": agent.agent_data["name"],
287
- "description": agent.agent_data["description"]
288
- if agent.agent_data["description"]
289
- else "",
290
- "input": agent.agent_data["input"],
291
- "output": agent.agent_data["output"],
292
- }
293
- agents_info.append(agent_info)
294
-
295
- agents_str = json.dumps(agents_info, indent=2)
296
-
297
- # Create the prompt
298
- if self.config.prompt:
299
- prompt = self.config.prompt
300
- else:
301
- prompt = f"""
302
- You are a workflow router that determines the next agent to execute in a multi-agent system.
303
-
304
- CURRENT AGENT:
305
- Name: {current_agent.name}
306
- Description: {current_agent.description}
307
- Input: {current_agent.input}
308
- Output: {current_agent.output}
309
-
310
- CURRENT AGENT'S OUTPUT:
311
- {result_str}
312
-
313
- AVAILABLE AGENTS:
314
- {agents_str}
315
-
316
- Based on the current agent's output and the available agents, determine which agent should be executed next.
317
- Consider the following:
318
- 1. Which agent's input requirements best match the current agent's output?
319
- 2. Which agent's purpose and description make it the most logical next step?
320
- 3. Which agent would provide the most value in continuing the workflow?
321
-
322
- Respond with a JSON object containing:
323
- 1. "next_agent": The name of the selected agent
324
- 2. "score": A confidence score between 0 and 1 indicating how suitable this agent is
325
- 3. "reasoning": A brief explanation of why this agent was selected
326
-
327
- If no agent is suitable, set "next_agent" to an empty string and "score" to 0.
328
-
329
- JSON Response:
330
- """
331
- return prompt
332
-
333
- def _create_next_input(
334
- self,
335
- current_agent: FlockAgent,
336
- result: dict[str, Any],
337
- next_agent: FlockAgent,
338
- ) -> dict[str, Any]:
339
- """Create the input for the next agent, including the previous agent's output.
340
-
341
- Args:
342
- current_agent: The agent that just completed execution
343
- result: The output from the current agent
344
- next_agent: The next agent to execute
345
-
346
- Returns:
347
- Input dictionary for the next agent
348
- """
349
- # Start with an empty input
350
- next_input = {}
351
-
352
- # Add a special field for the previous agent's output
353
- next_input["previous_agent_output"] = {
354
- "agent_name": current_agent.name,
355
- "result": result,
356
- }
357
-
358
- # Try to map the current agent's output to the next agent's input
359
- # This is a simple implementation that could be enhanced with more sophisticated mapping
360
- for key in result:
361
- # If the next agent expects this key, add it directly
362
- if key in next_agent.input:
363
- next_input[key] = result[key]
364
-
365
- return next_input
flock/tools/__init__.py DELETED
File without changes