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,286 +0,0 @@
1
- # src/flock/modules/asserts/assertion_module.py (New File)
2
-
3
- import json
4
- from collections.abc import Callable
5
- from typing import Any, Literal
6
-
7
- import dspy # For potential LLM-based rule checking
8
- from pydantic import BaseModel, Field, PrivateAttr, ValidationError
9
-
10
- from flock.core.context.context import FlockContext
11
- from flock.core.flock_agent import FlockAgent
12
- from flock.core.flock_module import FlockModule, FlockModuleConfig
13
-
14
- # Need registry access if rules are callables defined elsewhere
15
- from flock.core.flock_registry import flock_component, get_registry
16
- from flock.core.logging.logging import get_logger
17
-
18
- logger = get_logger("module.assertion")
19
-
20
- # --- Rule Definition ---
21
- # Rules can be defined in several ways:
22
- # 1. Python lambda/function: (result: Dict, inputs: Dict, context: FlockContext) -> bool | Tuple[bool, str]
23
- # 2. String referencing a registered callable: "my_validation_function"
24
- # 3. Natural language rule string: "The summary must contain the keyword 'Flock'." (requires LLM judge)
25
- # 4. Pydantic Model: The output must conform to this Pydantic model.
26
-
27
- RuleType = (
28
- Callable[[dict, dict, FlockContext | None], bool | tuple[bool, str]]
29
- | str
30
- | type[BaseModel]
31
- )
32
-
33
-
34
- class Rule(BaseModel):
35
- """Container for a single assertion rule."""
36
-
37
- condition: RuleType = Field(
38
- ...,
39
- description="""
40
- # --- Rule Definition ---
41
- # Rules can be defined in several ways:
42
- # 1. Python lambda/function: (result: Dict, inputs: Dict, context: FlockContext) -> bool | Tuple[bool, str]
43
- # 2. String referencing a registered callable: "my_validation_function"
44
- # 3. Natural language rule string: "The summary must contain the keyword 'Flock'." (requires LLM judge)
45
- # 4. Pydantic Model: The output must conform to this Pydantic model.
46
- """,
47
- )
48
- fail_message: str # Message to provide as feedback on failure
49
- name: str | None = None # Optional name for clarity
50
-
51
- def __post_init__(self):
52
- # Basic validation of fail_message
53
- if not isinstance(self.fail_message, str) or not self.fail_message:
54
- raise ValueError("Rule fail_message must be a non-empty string.")
55
-
56
-
57
- class AssertionModuleConfig(FlockModuleConfig):
58
- """--- Rule Definition ---
59
- Rules can be defined in several ways:
60
- 1. Python lambda/function: (result: Dict, inputs: Dict, context: FlockContext) -> bool | Tuple[bool, str]
61
- 2. String referencing a registered callable: "my_validation_function"
62
- 3. Natural language rule string: "The summary must contain the keyword 'Flock'." (requires LLM judge)
63
- 4. Pydantic Model: The output must conform to this Pydantic model.
64
- """
65
-
66
- rules: list[Rule] = Field(
67
- default_factory=list,
68
- description="List of rules to check against the agent's output.",
69
- )
70
- # Optional LLM for evaluating natural language rules
71
- judge_lm_model: str | None = Field(
72
- None, description="LLM model to use for judging natural language rules."
73
- )
74
- # How to handle failure
75
- on_failure: Literal["add_feedback", "raise_error", "log_warning"] = Field(
76
- default="add_feedback",
77
- description="Action on rule failure: 'add_feedback' to context, 'raise_error', 'log_warning'.",
78
- )
79
- feedback_context_key: str = Field(
80
- default="flock.assertion_feedback",
81
- description="Context key to store failure messages for retry loops.",
82
- )
83
- clear_feedback_on_success: bool = Field(
84
- default=True,
85
- description="Clear the feedback key from context if all assertions pass.",
86
- )
87
-
88
-
89
- @flock_component(config_class=AssertionModuleConfig)
90
- class AssertionCheckerModule(FlockModule):
91
- """Checks the output of an agent against a set of defined rules.
92
-
93
- Can trigger different actions on failure, including adding feedback
94
- to the context to enable self-correction loops via routing.
95
- """
96
-
97
- name: str = "assertion_checker"
98
- config: AssertionModuleConfig = Field(default_factory=AssertionModuleConfig)
99
- _judge_lm: dspy.LM | None = PrivateAttr(None) # Initialize lazily
100
-
101
- def _get_judge_lm(self) -> dspy.LM | None:
102
- """Initializes the judge LM if needed."""
103
- if self.config.judge_lm_model and self._judge_lm is None:
104
- try:
105
- self._judge_lm = dspy.LM(self.config.judge_lm_model)
106
- except Exception as e:
107
- logger.error(
108
- f"Failed to initialize judge LM '{self.config.judge_lm_model}': {e}"
109
- )
110
- # Proceed without judge LM for other rule types
111
- return self._judge_lm
112
-
113
- async def on_post_evaluate(
114
- self,
115
- agent: FlockAgent,
116
- inputs: dict[str, Any],
117
- context: FlockContext | None = None,
118
- result: dict[str, Any] | None = None,
119
- ) -> dict[str, Any]:
120
- """Checks rules after the main evaluator runs."""
121
- if not self.config.rules:
122
- return result # No rules to check
123
-
124
- logger.debug(f"Running assertion checks for agent '{agent.name}'...")
125
- all_passed = True
126
- failed_messages = []
127
- registry = get_registry() # Needed for callable lookup
128
-
129
- for i, rule in enumerate(self.config.rules):
130
- rule_name = rule.name or f"Rule_{i + 1}"
131
- passed = False
132
- eval_result = None
133
- feedback_msg = rule.fail_message
134
-
135
- try:
136
- condition = rule.condition
137
- if callable(condition):
138
- # Rule is a Python function/lambda
139
- logger.debug(f"Checking callable rule: {rule_name}")
140
- eval_result = condition(result, inputs, context)
141
- elif isinstance(condition, str) and registry.contains(
142
- condition
143
- ):
144
- # Rule is a string referencing a registered callable
145
- logger.debug(
146
- f"Checking registered callable rule: '{condition}'"
147
- )
148
- rule_func = registry.get_callable(condition)
149
- eval_result = rule_func(result, inputs, context)
150
- elif isinstance(condition, str):
151
- # Rule is a natural language string (requires judge LLM)
152
- logger.debug(
153
- f"Checking natural language rule: '{condition}'"
154
- )
155
- judge_lm = self._get_judge_lm()
156
- if judge_lm:
157
- # Define a simple judge signature dynamically or use a predefined one
158
- class JudgeSignature(dspy.Signature):
159
- """Evaluate if the output meets the rule based on input and output."""
160
-
161
- program_input: str = dspy.InputField(
162
- desc="Input provided to the agent."
163
- )
164
- program_output: str = dspy.InputField(
165
- desc="Output generated by the agent."
166
- )
167
- rule_to_check: str = dspy.InputField(
168
- desc="The rule to verify."
169
- )
170
- is_met: bool = dspy.OutputField(
171
- desc="True if the rule is met, False otherwise."
172
- )
173
- reasoning: str = dspy.OutputField(
174
- desc="Brief reasoning for the decision."
175
- )
176
-
177
- judge_predictor = dspy.Predict(
178
- JudgeSignature, llm=judge_lm
179
- )
180
- # Convert complex dicts/lists to strings for the judge prompt
181
- input_str = json.dumps(inputs, default=str, indent=2)
182
- result_str = json.dumps(result, default=str, indent=2)
183
- judge_pred = judge_predictor(
184
- program_input=input_str,
185
- program_output=result_str,
186
- rule_to_check=condition,
187
- )
188
- passed = judge_pred.is_met
189
- feedback_msg = f"{rule.fail_message} (Reason: {judge_pred.reasoning})"
190
- logger.debug(
191
- f"LLM Judge result for rule '{condition}': {passed} ({judge_pred.reasoning})"
192
- )
193
- else:
194
- logger.warning(
195
- f"Cannot evaluate natural language rule '{condition}' - no judge_lm_model configured."
196
- )
197
- passed = True # Default to pass if no judge available? Or fail? Let's pass.
198
-
199
- elif isinstance(condition, type) and issubclass(
200
- condition, BaseModel
201
- ):
202
- # Rule is a Pydantic model for validation
203
- logger.debug(
204
- f"Checking Pydantic validation rule: {condition.__name__}"
205
- )
206
- try:
207
- # Assumes the *entire* result dict should match the model
208
- # More specific logic might be needed (e.g., validate only a specific key)
209
- condition.model_validate(result)
210
- passed = True
211
- except ValidationError as e:
212
- passed = False
213
- feedback_msg = (
214
- f"{rule.fail_message} (Validation Error: {e})"
215
- )
216
- else:
217
- logger.warning(
218
- f"Unsupported rule type for rule '{rule_name}': {type(condition)}"
219
- )
220
- continue # Skip rule
221
-
222
- # Process result if it was a callable returning bool or (bool, msg)
223
- if eval_result is not None:
224
- if (
225
- isinstance(eval_result, tuple)
226
- and len(eval_result) == 2
227
- and isinstance(eval_result[0], bool)
228
- ):
229
- passed, custom_msg = eval_result
230
- if not passed and custom_msg:
231
- feedback_msg = (
232
- custom_msg # Use custom message on failure
233
- )
234
- elif isinstance(eval_result, bool):
235
- passed = eval_result
236
- else:
237
- logger.warning(
238
- f"Rule callable '{rule_name}' returned unexpected type: {type(eval_result)}. Rule skipped."
239
- )
240
- continue
241
-
242
- # Handle failure
243
- if not passed:
244
- all_passed = False
245
- failed_messages.append(feedback_msg)
246
- logger.warning(
247
- f"Assertion Failed for agent '{agent.name}': {feedback_msg}"
248
- )
249
- # Optionally break early? For now, check all rules.
250
-
251
- except Exception as e:
252
- logger.error(
253
- f"Error executing rule '{rule_name}' for agent '{agent.name}': {e}",
254
- exc_info=True,
255
- )
256
- all_passed = False
257
- failed_messages.append(
258
- f"Error checking rule '{rule_name}': {e}"
259
- )
260
- # Treat error during check as failure
261
-
262
- # --- Take action based on results ---
263
- if not all_passed:
264
- logger.warning(f"Agent '{agent.name}' failed assertion checks.")
265
- if self.config.on_failure == "add_feedback" and context:
266
- context.set_variable(
267
- self.config.feedback_context_key, "\n".join(failed_messages)
268
- )
269
- logger.debug(
270
- f"Added assertion feedback to context key '{self.config.feedback_context_key}'"
271
- )
272
- elif self.config.on_failure == "raise_error":
273
- # Maybe wrap in a specific FlockAssertionError
274
- raise AssertionError(
275
- f"Agent '{agent.name}' failed assertions: {'; '.join(failed_messages)}"
276
- )
277
- # else "log_warning" is default behavior
278
- elif context and self.config.clear_feedback_on_success:
279
- # Clear feedback key if all rules passed and key exists
280
- if self.config.feedback_context_key in context.state:
281
- del context.state[self.config.feedback_context_key]
282
- logger.debug(
283
- f"Cleared assertion feedback key '{self.config.feedback_context_key}' on success."
284
- )
285
-
286
- return result # Return the original result unmodified
@@ -1 +0,0 @@
1
- # Package for modules
@@ -1,91 +0,0 @@
1
- """Callback module for handling agent lifecycle hooks."""
2
-
3
- from collections.abc import Awaitable, Callable
4
- from typing import Any
5
-
6
- from pydantic import Field
7
-
8
- from flock.core import FlockModule, FlockModuleConfig
9
- from flock.core.context.context import FlockContext
10
- from flock.core.flock_registry import flock_component
11
-
12
-
13
- class CallbackModuleConfig(FlockModuleConfig):
14
- """Configuration for callback module."""
15
-
16
- initialize_callback: (
17
- Callable[[Any, dict[str, Any]], Awaitable[None]] | None
18
- ) = Field(
19
- default=None,
20
- description="Optional callback function for initialization",
21
- )
22
- evaluate_callback: (
23
- Callable[[Any, dict[str, Any]], Awaitable[dict[str, Any]]] | None
24
- ) = Field(
25
- default=None, description="Optional callback function for evaluate"
26
- )
27
- terminate_callback: (
28
- Callable[[Any, dict[str, Any], dict[str, Any]], Awaitable[None]] | None
29
- ) = Field(
30
- default=None, description="Optional callback function for termination"
31
- )
32
- on_error_callback: (
33
- Callable[[Any, Exception, dict[str, Any]], Awaitable[None]] | None
34
- ) = Field(
35
- default=None,
36
- description="Optional callback function for error handling",
37
- )
38
-
39
-
40
- @flock_component(config_class=CallbackModuleConfig)
41
- class CallbackModule(FlockModule):
42
- """Module that provides callback functionality for agent lifecycle events."""
43
-
44
- name: str = "callbacks"
45
- config: CallbackModuleConfig = Field(
46
- default_factory=CallbackModuleConfig,
47
- description="Callback module configuration",
48
- )
49
-
50
- async def pre_initialize(
51
- self,
52
- agent: Any,
53
- inputs: dict[str, Any],
54
- context: FlockContext | None = None,
55
- ) -> None:
56
- """Run initialize callback if configured."""
57
- if self.config.initialize_callback:
58
- await self.config.initialize_callback(agent, inputs)
59
-
60
- async def on_pre_evaluate(
61
- self,
62
- agent: Any,
63
- inputs: dict[str, Any],
64
- context: FlockContext | None = None,
65
- ) -> dict[str, Any]:
66
- """Run evaluate callback if configured."""
67
- if self.config.evaluate_callback:
68
- return await self.config.evaluate_callback(agent, inputs)
69
- return inputs
70
-
71
- async def pre_terminate(
72
- self,
73
- agent: Any,
74
- inputs: dict[str, Any],
75
- context: FlockContext | None = None,
76
- result: dict[str, Any] | None = None,
77
- ) -> None:
78
- """Run terminate callback if configured."""
79
- if self.config.terminate_callback:
80
- await self.config.terminate_callback(agent, inputs, result)
81
-
82
- async def on_error(
83
- self,
84
- agent: Any,
85
- error: Exception,
86
- inputs: dict[str, Any],
87
- context: FlockContext | None = None,
88
- ) -> None:
89
- """Run error callback if configured."""
90
- if self.config.on_error_callback:
91
- await self.config.on_error_callback(agent, error, inputs)
@@ -1,99 +0,0 @@
1
- # Enterprise Memory Module
2
-
3
- The **EnterpriseMemoryModule** brings durable, scalable memory to Flock agents by
4
- combining a true vector store (Chroma) with a property-graph database
5
- (Neo4j / Memgraph). It is a drop‐in replacement for the default
6
- `memory` module when you need:
7
-
8
- * millions of memory chunks without exhausting RAM
9
- * concurrent writers (many agents / processes / machines)
10
- * rich concept-graph queries and visualisation
11
-
12
- ---
13
- ## How it works
14
-
15
- | Concern | Technology |
16
- |--------------------- |------------|
17
- | Vector similarity | **Pinecone**, **Chroma**, **Azure Cognitive Search** |
18
- | Concept graph | **Cypher** database (Neo4j / Memgraph) |
19
- | Embeddings | `sentence-transformers` (`all-MiniLM-L6-v2`) |
20
- | Concept extraction | Agent's LLM via DSPy signature |
21
-
22
- * Each memory chunk is embedded and added to the Chroma collection.
23
- * Concepts are extracted; duplicates are eliminated via case-insensitive
24
- and fuzzy matching (≥ 0.85 similarity).
25
- * Memory nodes and `(:Memory)-[:MENTIONS]->(:Concept)` edges are merged
26
- into the graph DB in batched transactions.
27
- * Optional: export a PNG of the concept graph after every update.
28
-
29
- ---
30
- ## Configuration options (`EnterpriseMemoryModuleConfig`)
31
-
32
- ```yaml
33
- chroma_path: ./vector_store # disk path if running embedded
34
- chroma_host: null # host of remote Chroma server (optional)
35
- chroma_port: 8000
36
- chroma_collection: flock_memories # collection name
37
-
38
- # or Pinecone
39
- vector_backend: pinecone
40
- pinecone_api_key: <YOUR_KEY>
41
- pinecone_env: gcp-starter
42
- pinecone_index: flock-memories
43
-
44
- # or Azure Cognitive Search
45
- vector_backend: azure
46
- azure_search_endpoint: https://<service>.search.windows.net
47
- azure_search_key: <KEY>
48
- azure_search_index_name: flock-memories
49
-
50
- cypher_uri: bolt://localhost:7687
51
- cypher_username: neo4j
52
- cypher_password: password
53
-
54
- similarity_threshold: 0.5 # for retrieval
55
- max_results: 10
56
- number_of_concepts_to_extract: 3
57
- save_interval: 10 # batch size before commit
58
-
59
- export_graph_image: false # set true to emit PNGs
60
- graph_image_dir: ./concept_graphs # where to store images
61
- ```
62
-
63
- ---
64
- ## Dependencies
65
-
66
- Add the following to your project (examples with pip):
67
-
68
- ```bash
69
- pip install chromadb>=0.4.20
70
- pip install neo4j>=5.14.0
71
- pip install sentence-transformers>=2.7.0
72
- pip install matplotlib networkx # only needed when export_graph_image = true
73
- pip install pinecone-client # if using Pinecone
74
- pip install azure-search-documents # if using Azure Search
75
- ```
76
-
77
- You also need a running Neo4j **or** Memgraph instance. The module uses
78
- the Bolt protocol and Cypher `MERGE`, which works on both.
79
-
80
- ---
81
- ## Usage
82
-
83
- ```python
84
- from flock.modules.enterprise_memory.enterprise_memory_module import (
85
- EnterpriseMemoryModule, EnterpriseMemoryModuleConfig,
86
- )
87
-
88
- agent.add_module(
89
- EnterpriseMemoryModule(
90
- name="enterprise_memory",
91
- config=EnterpriseMemoryModuleConfig(
92
- cypher_password=os.environ["NEO4J_PASSWORD"],
93
- export_graph_image=True,
94
- ),
95
- )
96
- )
97
- ```
98
-
99
- The rest of the agent code stays unchanged.