flock-core 0.4.543__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.543.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.543.dist-info/METADATA +0 -676
  496. flock_core-0.4.543.dist-info/RECORD +0 -572
  497. flock_core-0.4.543.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.543.dist-info → flock_core-0.5.0.dist-info}/WHEEL +0 -0
@@ -1,219 +0,0 @@
1
- import re
2
-
3
-
4
- def split_top_level(spec: str) -> list[str]:
5
- """Return raw field strings, split on *top-level* commas."""
6
- fields: list[str] = []
7
- start = 0
8
- depth = 0
9
- quote_char: str | None = None
10
- i = 0
11
- ident_re = re.compile(r"[A-Za-z_]\w*") # cheap identifier
12
-
13
- while i < len(spec):
14
- ch = spec[i]
15
-
16
- # ---------- string handling ----------
17
- if quote_char:
18
- if ch == "\\":
19
- i += 2 # skip escaped char
20
- continue
21
- if ch == quote_char:
22
- quote_char = None
23
- i += 1
24
- continue
25
-
26
- if ch in {"'", '"'}:
27
- prev = spec[i - 1] if i else " "
28
- if (
29
- depth or prev.isspace() or prev in "=([{,:"
30
- ): # looks like a quote
31
- quote_char = ch
32
- i += 1
33
- continue
34
-
35
- # ---------- bracket / brace / paren ----------
36
- if ch in "([{":
37
- depth += 1
38
- i += 1
39
- continue
40
- if ch in ")]}":
41
- depth = max(depth - 1, 0)
42
- i += 1
43
- continue
44
-
45
- # ---------- field separators ----------
46
- if ch == "," and depth == 0:
47
- j = i + 1
48
- while j < len(spec) and spec[j].isspace():
49
- j += 1
50
- if j >= len(spec): # comma at end – split
51
- fields.append(spec[start:i].strip())
52
- start = i + 1
53
- i += 1
54
- continue
55
-
56
- id_match = ident_re.match(spec, j)
57
- if id_match:
58
- k = id_match.end()
59
- while k < len(spec) and spec[k].isspace():
60
- k += 1
61
- if k >= len(spec) or spec[k] in {":", "|", ","}:
62
- # confirmed: comma separates two fields
63
- fields.append(spec[start:i].strip())
64
- start = i + 1
65
- i += 1
66
- continue
67
-
68
- i += 1
69
-
70
- fields.append(spec[start:].strip())
71
- return [f for f in fields if f] # prune empties
72
-
73
-
74
- def parse_schema(spec: str) -> list[tuple[str, str, str]]:
75
- """Turn *spec* into a list of (name, python_type, description)."""
76
- result: list[tuple[str, str, str]] = []
77
-
78
- for field in split_top_level(spec):
79
- name = ""
80
- type_str = "str" # default type
81
- description = ""
82
-
83
- name_part, _, desc_part = field.partition("|")
84
- description = desc_part.strip()
85
- main_part = name_part.strip()
86
-
87
- if ":" in main_part:
88
- name, type_candidate = main_part.split(":", 1)
89
- name = name.strip()
90
- type_candidate = type_candidate.strip()
91
- if type_candidate:
92
- type_str = type_candidate
93
- else:
94
- name = main_part # keeps default type
95
-
96
- if name: # skip broken pieces
97
- result.append((name, type_str, description))
98
-
99
- return result
100
-
101
-
102
- # ------------------------------ demo ------------------------------
103
- if __name__ == "__main__":
104
- SAMPLE_1 = (
105
- " name: str | The character's full name,"
106
- "race: str | The character's fantasy race,"
107
- "class: Literal['mage','thief'] | The character's profession,"
108
- "background: str | A brief backstory for the character"
109
- )
110
-
111
- SAMPLE_2 = (
112
- "field_with_internal_quotes: Literal['type_A', "
113
- '"type_B_with_\'_apostrophe"] | A literal with mixed quotes,'
114
- " another_field :str| A field with a description"
115
- )
116
-
117
- SAMPLE_3 = (
118
- "field_with_internal_quotes: Literal['type_A', "
119
- '"type_B_with_\'_apostrophe"] | A literal with mixed quotes,'
120
- " another_field | A field with a description"
121
- )
122
-
123
- SAMPLE_4 = "input, query, output"
124
-
125
- SAMPLE_5 = (
126
- "name: str | The character's full name,"
127
- "race: str | The character's fantasy race,"
128
- "class: Literal['mage','thief'] | The character's profession, which can be either mage or thief,"
129
- "background: str | A brief backstory for the character"
130
- )
131
-
132
- SAMPLE_6 = (
133
- "summary: str | A short blurb, e.g. key:value pairs that appear in logs"
134
- )
135
- # ➜ [('summary', 'str',
136
- # 'A short blurb, e.g. key:value pairs that appear in logs')]
137
-
138
- SAMPLE_7 = "path: str | The literal string 'C:\\\\Program Files\\\\My,App'"
139
-
140
- # ➜ [('path', 'str',
141
- # "The literal string 'C:\\Program Files\\My,App'")]
142
-
143
- SAMPLE_8 = (
144
- "transform: Callable[[int, str], bool] | Function that returns True on success,"
145
- "retries: int | How many times to retry"
146
- )
147
- # ➜ ('transform', 'Callable[[int, str], bool]', 'Function that returns True on success')
148
- # ('retries', 'int', 'How many times to retry')
149
-
150
- SAMPLE_9 = (
151
- r"regex: str | Pattern such as r'^[A-Z\|a-z]+$',"
152
- "flags: int | re flags to use"
153
- )
154
- # ➜ ('regex', 'str', "Pattern such as r'^[A-Z\\|a-z]+$'")
155
- # ('flags', 'int', 're flags to use')
156
-
157
- SAMPLE_10 = "id:int, name:str," # note the final comma!
158
- # ➜ ('id', 'int', '')
159
- # ('name', 'str', '')
160
-
161
- SAMPLE_11 = "id:int | Primary key\nname:str | Display name\nactive:bool"
162
- # ➜ should not work!
163
-
164
- SAMPLE_12 = (
165
- 'comment:str | The text "done | failed" goes here,'
166
- 'status:Literal["done","failed"]'
167
- )
168
- # ➜ ('comment', 'str', 'The text "done | failed" goes here')
169
- # ('status', 'Literal["done","failed"]', '')
170
-
171
- SAMPLE_13 = "choice: Literal['He said \\'yes\\'', 'no'] | User response"
172
- # ➜ ('choice', "Literal['He said \\'yes\\'', 'no']", 'User response')
173
-
174
- SAMPLE_14 = ""
175
- # ➜ []
176
-
177
- SAMPLE_15 = "username"
178
- # ➜ [('username', 'str', '')]
179
-
180
- SAMPLE_16 = (
181
- "payload: dict[str, list[dict[str, tuple[int,str]]]] "
182
- "| Arbitrarily complex structure"
183
- )
184
- # ➜ ('payload', 'dict[str, list[dict[str, tuple[int,str]]]]',
185
- # 'Arbitrarily complex structure')
186
-
187
- SAMPLE_17 = "münze: str | Deutsche Münzbezeichnung, engl. 'coin'"
188
-
189
-
190
- SAMPLE_18 = "ticket_info : str, reasoning : str, search_queries : list[str], relevant_documents: dict[str, float] | dict of pdf_ids as keys and scores as values"
191
-
192
-
193
- SAMPLE_19 = "title, headings: list[str], entities_and_metadata: list[dict[str, str]], type:Literal['news', 'blog', 'opinion piece', 'tweet']"
194
- # ➜ [('münze', 'str', "Deutsche Münzbezeichnung, engl. 'coin'")]
195
-
196
- for title, spec in [
197
- ("Sample-1", SAMPLE_1),
198
- ("Sample-2", SAMPLE_2),
199
- ("Sample-3", SAMPLE_3),
200
- ("Sample-4", SAMPLE_4),
201
- ("Sample-5", SAMPLE_5),
202
- ("Sample-6", SAMPLE_6),
203
- ("Sample-7", SAMPLE_7),
204
- ("Sample-8", SAMPLE_8),
205
- ("Sample-9", SAMPLE_9),
206
- ("Sample-10", SAMPLE_10),
207
- ("Sample-11", SAMPLE_11),
208
- ("Sample-12", SAMPLE_12),
209
- ("Sample-13", SAMPLE_13),
210
- ("Sample-14", SAMPLE_14),
211
- ("Sample-15", SAMPLE_15),
212
- ("Sample-16", SAMPLE_16),
213
- ("Sample-17", SAMPLE_17),
214
- ("Sample-18", SAMPLE_18),
215
- ("Sample-19", SAMPLE_19),
216
- ]:
217
- print(f"\n{title}")
218
- for row in parse_schema(spec):
219
- print(row)
flock/di.py DELETED
@@ -1,41 +0,0 @@
1
- from __future__ import annotations
2
-
3
- """Flock – Dependency-Injection helpers.
4
-
5
- This module provides a very small façade over the `wd.di` container so that
6
- other parts of the codebase do not need to know where the active container is
7
- stored. The bootstrap code – usually located in the runner initialisation –
8
- should store the `ServiceProvider` instance (returned by ``ServiceCollection.
9
- build()``) on the `FlockContext` under the key ``di.container``.
10
-
11
- Example
12
- -------
13
- >>> from wd.di import ServiceCollection
14
- >>> sc = ServiceCollection()
15
- >>> sc.add_singleton(str, lambda _: "hello")
16
- >>> container = sc.build()
17
- >>> ctx = FlockContext()
18
- >>> ctx.set_variable("di.container", container)
19
- >>> from flock.di import get_current_container
20
- >>> assert get_current_container(ctx).get_service(str) == "hello"
21
- """
22
-
23
- from typing import TYPE_CHECKING
24
-
25
- if TYPE_CHECKING: # pragma: no cover
26
- from wd.di.container import (
27
- ServiceProvider, # noqa: F401 – import only for typing
28
- )
29
-
30
- from flock.core.context.context import FlockContext
31
-
32
-
33
- def get_current_container(context: FlockContext | None = None):
34
- """Return the active `wd.di` container from *context* if present.
35
-
36
- If *context* is ``None`` or no container has been attached to it the
37
- function returns ``None``.
38
- """
39
- if context is None:
40
- return None
41
- return context.get_variable("di.container")
@@ -1 +0,0 @@
1
- # Package for modules
@@ -1 +0,0 @@
1
- # Package for modules
@@ -1,217 +0,0 @@
1
- from collections.abc import Generator
2
- from typing import Any
3
-
4
- from temporalio import workflow
5
-
6
- with workflow.unsafe.imports_passed_through():
7
- import dspy
8
-
9
- from pydantic import Field, PrivateAttr
10
-
11
- from flock.core.flock_agent import FlockAgent
12
- from flock.core.flock_evaluator import FlockEvaluator, FlockEvaluatorConfig
13
- from flock.core.flock_registry import flock_component
14
- from flock.core.logging.logging import get_logger
15
- from flock.core.mixin.dspy_integration import DSPyIntegrationMixin
16
- from flock.core.mixin.prompt_parser import PromptParserMixin
17
-
18
- logger = get_logger("evaluators.declarative")
19
-
20
-
21
- class DeclarativeEvaluatorConfig(FlockEvaluatorConfig):
22
- """Configuration for the DeclarativeEvaluator."""
23
-
24
- override_evaluator_type: str | None = None
25
- model: str | None = "openai/gpt-4o"
26
- use_cache: bool = True
27
- temperature: float = 1.0
28
- max_tokens: int = 4096
29
- max_retries: int = 3
30
- max_tool_calls: int = 10
31
- stream: bool = Field(
32
- default=False,
33
- description="Enable streaming output from the underlying DSPy program.",
34
- )
35
- include_thought_process: bool = Field(
36
- default=False,
37
- description="Include the thought process in the output.",
38
- )
39
- include_reasoning: bool = Field(
40
- default=False,
41
- description="Include the reasoning in the output.",
42
- )
43
- kwargs: dict[str, Any] = Field(default_factory=dict)
44
-
45
-
46
- @flock_component(config_class=DeclarativeEvaluatorConfig)
47
- class DeclarativeEvaluator(
48
- FlockEvaluator, DSPyIntegrationMixin, PromptParserMixin
49
- ):
50
- """Evaluator that uses DSPy for generation."""
51
-
52
- config: DeclarativeEvaluatorConfig = Field(
53
- default_factory=DeclarativeEvaluatorConfig,
54
- description="Evaluator configuration",
55
- )
56
-
57
- _cost: float = PrivateAttr(default=0.0)
58
- _lm_history: list = PrivateAttr(default_factory=list)
59
-
60
- # def __init__(self, name: str, config: DeclarativeEvaluatorConfig) -> None:
61
- # super().__init__(name=name, config=config)
62
- # self._configure_language_model(
63
- # model=config.model,
64
- # use_cache=config.use_cache,
65
- # temperature=config.temperature,
66
- # max_tokens=config.max_tokens,
67
- # )
68
-
69
- async def evaluate(
70
- self,
71
- agent: FlockAgent,
72
- inputs: dict[str, Any],
73
- tools: list[Any],
74
- mcp_tools: list[Any] | None = None,
75
- ) -> dict[str, Any]:
76
- """Evaluate using DSPy, with optional asynchronous streaming."""
77
- # --- Setup Signature and LM ---
78
-
79
- with dspy.context(
80
- lm=dspy.LM(
81
- model=self.config.model or agent.model,
82
- cache=self.config.use_cache,
83
- temperature=self.config.temperature,
84
- max_tokens=self.config.max_tokens,
85
- num_retries=self.config.max_retries,
86
- )
87
- ):
88
- try:
89
- from rich.console import Console
90
-
91
- console = Console()
92
- _dspy_signature = self.create_dspy_signature_class(
93
- agent.name,
94
- agent.description,
95
- f"{agent.input} -> {agent.output}",
96
- )
97
- # --- Get output field names ---
98
- # dspy.Signature holds fields in .output_fields attribute
99
- output_field_names = list(_dspy_signature.output_fields.keys())
100
- if not output_field_names:
101
- logger.warning(
102
- f"DSPy signature for agent '{agent.name}' has no defined output fields. Streaming might not produce text."
103
- )
104
- # -----------------------------
105
-
106
- agent_task = self._select_task(
107
- _dspy_signature,
108
- override_evaluator_type=self.config.override_evaluator_type,
109
- tools=tools,
110
- max_tool_calls=self.config.max_tool_calls,
111
- mcp_tools=mcp_tools,
112
- kwargs=self.config.kwargs,
113
- )
114
- except Exception as setup_error:
115
- logger.error(
116
- f"Error setting up DSPy task for agent '{agent.name}': {setup_error}",
117
- exc_info=True,
118
- )
119
- raise RuntimeError(
120
- f"DSPy task setup failed: {setup_error}"
121
- ) from setup_error
122
-
123
- # --- Conditional Evaluation (Stream vs No Stream) ---
124
- if self.config.stream:
125
- logger.info(
126
- f"Evaluating agent '{agent.name}' with async streaming."
127
- )
128
- if not callable(agent_task):
129
- logger.error("agent_task is not callable, cannot stream.")
130
- raise TypeError(
131
- "DSPy task could not be created or is not callable."
132
- )
133
-
134
- streaming_task = dspy.streamify(
135
- agent_task, is_async_program=True
136
- )
137
- stream_generator: Generator = streaming_task(**inputs)
138
- delta_content = ""
139
-
140
- console.print("\n")
141
- async for chunk in stream_generator:
142
- if (
143
- hasattr(chunk, "choices")
144
- and chunk.choices
145
- and hasattr(chunk.choices[0], "delta")
146
- and chunk.choices[0].delta
147
- and hasattr(chunk.choices[0].delta, "content")
148
- ):
149
- delta_content = chunk.choices[0].delta.content
150
-
151
- if delta_content:
152
- console.print(delta_content, end="")
153
-
154
- result_dict, cost, lm_history = self._process_result(
155
- chunk, inputs
156
- )
157
- self._cost = cost
158
- self._lm_history = lm_history
159
-
160
- console.print("\n")
161
- result_dict = self.filter_reasoning(
162
- result_dict, self.config.include_reasoning
163
- )
164
- return self.filter_thought_process(
165
- result_dict, self.config.include_thought_process
166
- )
167
-
168
- else: # Non-streaming path
169
- logger.info(
170
- f"Evaluating agent '{agent.name}' without streaming."
171
- )
172
- try:
173
- # Ensure the call is awaited if the underlying task is async
174
- result_obj = await agent_task.acall(**inputs)
175
- result_dict, cost, lm_history = self._process_result(
176
- result_obj, inputs
177
- )
178
- self._cost = cost
179
- self._lm_history = lm_history
180
- result_dict = self.filter_reasoning(
181
- result_dict, self.config.include_reasoning
182
- )
183
- return self.filter_thought_process(
184
- result_dict, self.config.include_thought_process
185
- )
186
- except Exception as e:
187
- logger.error(
188
- f"Error during non-streaming evaluation for agent '{agent.name}': {e}",
189
- exc_info=True,
190
- )
191
- raise RuntimeError(f"Evaluation failed: {e}") from e
192
-
193
- def filter_thought_process(
194
- self, result_dict: dict[str, Any], include_thought_process: bool
195
- ) -> dict[str, Any]:
196
- """Filter out thought process from the result dictionary."""
197
- if include_thought_process:
198
- return result_dict
199
- else:
200
- return {
201
- k: v
202
- for k, v in result_dict.items()
203
- if not (k.startswith("trajectory"))
204
- }
205
-
206
- def filter_reasoning(
207
- self, result_dict: dict[str, Any], include_reasoning: bool
208
- ) -> dict[str, Any]:
209
- """Filter out reasoning from the result dictionary."""
210
- if include_reasoning:
211
- return result_dict
212
- else:
213
- return {
214
- k: v
215
- for k, v in result_dict.items()
216
- if not (k.startswith("reasoning"))
217
- }
@@ -1,90 +0,0 @@
1
- from typing import Any, Literal
2
-
3
- from pydantic import Field
4
-
5
- from flock.core.flock_agent import FlockAgent
6
- from flock.core.flock_evaluator import FlockEvaluator, FlockEvaluatorConfig
7
- from flock.core.flock_registry import flock_component
8
- from flock.core.mixin.dspy_integration import DSPyIntegrationMixin
9
- from flock.core.mixin.prompt_parser import PromptParserMixin
10
- from flock.modules.memory.memory_module import MemoryModule, MemoryModuleConfig
11
-
12
-
13
- class MemoryEvaluatorConfig(FlockEvaluatorConfig):
14
- folder_path: str = Field(
15
- default="concept_memory/",
16
- description="Directory where memory file and concept graph will be saved",
17
- )
18
- concept_graph_file: str = Field(
19
- default="concept_graph.png",
20
- description="Base filename for the concept graph image",
21
- )
22
-
23
- file_path: str | None = Field(
24
- default="agent_memory.json", description="Path to save memory file"
25
- )
26
- memory_mapping: str | None = Field(
27
- default=None, description="Memory mapping configuration"
28
- )
29
- similarity_threshold: float = Field(
30
- default=0.5, description="Threshold for semantic similarity"
31
- )
32
- max_length: int = Field(
33
- default=1000, description="Max length of memory entry before splitting"
34
- )
35
- save_after_update: bool = Field(
36
- default=True, description="Whether to save memory after each update"
37
- )
38
- splitting_mode: Literal["summary", "semantic", "characters", "none"] = (
39
- Field(default="none", description="Mode to split memory content")
40
- )
41
- enable_read_only_mode: bool = Field(
42
- default=False, description="Whether to enable read only mode"
43
- )
44
- number_of_concepts_to_extract: int = Field(
45
- default=3, description="Number of concepts to extract from the memory"
46
- )
47
-
48
-
49
- @flock_component(config_class=MemoryEvaluatorConfig)
50
- class MemoryEvaluator(FlockEvaluator, DSPyIntegrationMixin, PromptParserMixin):
51
- """Evaluator that uses DSPy for generation."""
52
-
53
- config: MemoryEvaluatorConfig = Field(
54
- default_factory=MemoryEvaluatorConfig,
55
- description="Evaluator configuration",
56
- )
57
-
58
- async def evaluate(
59
- self, agent: FlockAgent, inputs: dict[str, Any], tools: list[Any]
60
- ) -> dict[str, Any]:
61
- """Simple evaluator that uses a memory concept graph.
62
-
63
- if inputs contain "query", it searches memory for the query and returns the facts.
64
- if inputs contain "data", it adds the data to memory
65
- """
66
- result = {}
67
- memory_module = MemoryModule(
68
- name=self.name,
69
- config=MemoryModuleConfig(
70
- folder_path=self.config.folder_path,
71
- concept_graph_file=self.config.concept_graph_file,
72
- file_path=self.config.file_path,
73
- memory_mapping=self.config.memory_mapping,
74
- similarity_threshold=self.config.similarity_threshold,
75
- max_length=self.config.max_length,
76
- save_after_update=self.config.save_after_update,
77
- splitting_mode=self.config.splitting_mode,
78
- enable_read_only_mode=self.config.enable_read_only_mode,
79
- number_of_concepts_to_extract=self.config.number_of_concepts_to_extract,
80
- ),
81
- )
82
-
83
- if "query" in inputs:
84
- facts = await memory_module.search_memory(agent, inputs)
85
- result = {"facts": facts}
86
-
87
- if "data" in inputs:
88
- await memory_module.add_to_memory(agent, inputs)
89
- result = {"message": "Data added to memory"}
90
- return result
@@ -1,38 +0,0 @@
1
- from typing import Any
2
-
3
- from pydantic import Field
4
-
5
- from flock.core.flock_agent import FlockAgent
6
- from flock.core.flock_evaluator import FlockEvaluator, FlockEvaluatorConfig
7
- from flock.core.flock_registry import flock_component
8
- from flock.core.mixin.dspy_integration import DSPyIntegrationMixin
9
-
10
-
11
- class TestCaseEvaluatorConfig(FlockEvaluatorConfig):
12
- """Configuration for the TestCaseEvaluator."""
13
-
14
- pass
15
-
16
-
17
- @flock_component(config_class=TestCaseEvaluatorConfig)
18
- class TestCaseEvaluator(FlockEvaluator, DSPyIntegrationMixin):
19
- """Evaluator for test cases."""
20
-
21
- config: TestCaseEvaluatorConfig = Field(
22
- default_factory=TestCaseEvaluatorConfig,
23
- description="Evaluator configuration",
24
- )
25
-
26
- async def evaluate(
27
- self, agent: FlockAgent, inputs: dict[str, Any], tools: list[Any]
28
- ) -> dict[str, Any]:
29
- _dspy_signature = self.create_dspy_signature_class(
30
- agent.name,
31
- agent.description,
32
- f"{agent.input} -> {agent.output}",
33
- )
34
- output_field_names = list(_dspy_signature.output_fields.keys())
35
- result = {}
36
- for output_field_name in output_field_names:
37
- result[output_field_name] = "Test Result"
38
- return result
@@ -1,59 +0,0 @@
1
- from typing import Any
2
-
3
- from pydantic import Field
4
-
5
- from flock.core.flock_agent import FlockAgent
6
- from flock.core.flock_evaluator import FlockEvaluator, FlockEvaluatorConfig
7
- from flock.core.flock_registry import flock_component
8
- from flock.core.mixin.dspy_integration import DSPyIntegrationMixin
9
- from flock.core.mixin.prompt_parser import PromptParserMixin
10
- from flock.modules.zep.zep_module import ZepModule, ZepModuleConfig
11
-
12
-
13
- class ZepEvaluatorConfig(FlockEvaluatorConfig):
14
- zep_url: str = "http://localhost:8000"
15
- zep_api_key: str = "apikey"
16
- min_fact_rating: float = Field(
17
- default=0.7, description="Minimum rating for facts to be considered"
18
- )
19
-
20
-
21
- @flock_component(config_class=ZepEvaluatorConfig)
22
- class ZepEvaluator(FlockEvaluator, DSPyIntegrationMixin, PromptParserMixin):
23
- """Evaluator that uses DSPy for generation."""
24
-
25
- config: ZepEvaluatorConfig = Field(
26
- default_factory=ZepEvaluatorConfig,
27
- description="Evaluator configuration",
28
- )
29
-
30
- async def evaluate(
31
- self, agent: FlockAgent, inputs: dict[str, Any], tools: list[Any]
32
- ) -> dict[str, Any]:
33
- """Simple evaluator that uses Zep.
34
-
35
- if inputs contain "query", it searches memory for the query and returns the facts.
36
- if inputs contain "data", it adds the data to memory
37
- """
38
- result = {}
39
- zep = ZepModule(
40
- name=self.name,
41
- config=ZepModuleConfig(
42
- zep_api_key=self.config.zep_api_key,
43
- zep_url=self.config.zep_url,
44
- min_fact_rating=self.config.min_fact_rating,
45
- enable_read=True,
46
- enable_write=True,
47
- ),
48
- )
49
- client = zep.get_client()
50
- if "query" in inputs:
51
- query = inputs["query"]
52
- facts = zep.search_memory(query, client)
53
- result = {"facts": facts}
54
-
55
- if "data" in inputs:
56
- data = inputs["data"]
57
- zep.add_to_memory(data, client)
58
- result = {"message": "Data added to memory"}
59
- return result
flock/modules/__init__.py DELETED
@@ -1 +0,0 @@
1
- # Package for modules
@@ -1 +0,0 @@
1
- # Package for modules