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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


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

Files changed (469) hide show
  1. flock/__init__.py +12 -217
  2. flock/agent.py +678 -0
  3. flock/api/themes.py +71 -0
  4. flock/artifacts.py +79 -0
  5. flock/cli.py +75 -0
  6. flock/components.py +173 -0
  7. flock/dashboard/__init__.py +28 -0
  8. flock/dashboard/collector.py +283 -0
  9. flock/dashboard/events.py +182 -0
  10. flock/dashboard/launcher.py +230 -0
  11. flock/dashboard/service.py +537 -0
  12. flock/dashboard/websocket.py +235 -0
  13. flock/engines/__init__.py +6 -0
  14. flock/engines/dspy_engine.py +856 -0
  15. flock/examples.py +128 -0
  16. flock/frontend/README.md +678 -0
  17. flock/frontend/docs/DESIGN_SYSTEM.md +1980 -0
  18. flock/frontend/index.html +12 -0
  19. flock/frontend/package-lock.json +4347 -0
  20. flock/frontend/package.json +48 -0
  21. flock/frontend/src/App.tsx +79 -0
  22. flock/frontend/src/__tests__/e2e/critical-scenarios.test.tsx +587 -0
  23. flock/frontend/src/__tests__/integration/filtering-e2e.test.tsx +387 -0
  24. flock/frontend/src/__tests__/integration/graph-rendering.test.tsx +640 -0
  25. flock/frontend/src/__tests__/integration/indexeddb-persistence.test.tsx +699 -0
  26. flock/frontend/src/components/common/BuildInfo.tsx +39 -0
  27. flock/frontend/src/components/common/EmptyState.module.css +115 -0
  28. flock/frontend/src/components/common/EmptyState.tsx +128 -0
  29. flock/frontend/src/components/common/ErrorBoundary.module.css +169 -0
  30. flock/frontend/src/components/common/ErrorBoundary.tsx +118 -0
  31. flock/frontend/src/components/common/KeyboardShortcutsDialog.css +251 -0
  32. flock/frontend/src/components/common/KeyboardShortcutsDialog.tsx +151 -0
  33. flock/frontend/src/components/common/LoadingSpinner.module.css +97 -0
  34. flock/frontend/src/components/common/LoadingSpinner.tsx +29 -0
  35. flock/frontend/src/components/controls/PublishControl.css +547 -0
  36. flock/frontend/src/components/controls/PublishControl.test.tsx +543 -0
  37. flock/frontend/src/components/controls/PublishControl.tsx +432 -0
  38. flock/frontend/src/components/details/DetailWindowContainer.tsx +62 -0
  39. flock/frontend/src/components/details/LiveOutputTab.test.tsx +792 -0
  40. flock/frontend/src/components/details/LiveOutputTab.tsx +220 -0
  41. flock/frontend/src/components/details/MessageHistoryTab.tsx +299 -0
  42. flock/frontend/src/components/details/NodeDetailWindow.test.tsx +501 -0
  43. flock/frontend/src/components/details/NodeDetailWindow.tsx +218 -0
  44. flock/frontend/src/components/details/RunStatusTab.tsx +307 -0
  45. flock/frontend/src/components/details/tabs.test.tsx +1015 -0
  46. flock/frontend/src/components/filters/CorrelationIDFilter.module.css +102 -0
  47. flock/frontend/src/components/filters/CorrelationIDFilter.test.tsx +197 -0
  48. flock/frontend/src/components/filters/CorrelationIDFilter.tsx +121 -0
  49. flock/frontend/src/components/filters/FilterBar.module.css +29 -0
  50. flock/frontend/src/components/filters/FilterBar.test.tsx +133 -0
  51. flock/frontend/src/components/filters/FilterBar.tsx +33 -0
  52. flock/frontend/src/components/filters/FilterPills.module.css +79 -0
  53. flock/frontend/src/components/filters/FilterPills.test.tsx +173 -0
  54. flock/frontend/src/components/filters/FilterPills.tsx +67 -0
  55. flock/frontend/src/components/filters/TimeRangeFilter.module.css +91 -0
  56. flock/frontend/src/components/filters/TimeRangeFilter.test.tsx +154 -0
  57. flock/frontend/src/components/filters/TimeRangeFilter.tsx +105 -0
  58. flock/frontend/src/components/graph/AgentNode.test.tsx +75 -0
  59. flock/frontend/src/components/graph/AgentNode.tsx +322 -0
  60. flock/frontend/src/components/graph/GraphCanvas.tsx +406 -0
  61. flock/frontend/src/components/graph/MessageFlowEdge.tsx +128 -0
  62. flock/frontend/src/components/graph/MessageNode.test.tsx +62 -0
  63. flock/frontend/src/components/graph/MessageNode.tsx +116 -0
  64. flock/frontend/src/components/graph/MiniMap.tsx +47 -0
  65. flock/frontend/src/components/graph/TransformEdge.tsx +123 -0
  66. flock/frontend/src/components/layout/DashboardLayout.css +407 -0
  67. flock/frontend/src/components/layout/DashboardLayout.tsx +300 -0
  68. flock/frontend/src/components/layout/Header.module.css +88 -0
  69. flock/frontend/src/components/layout/Header.tsx +52 -0
  70. flock/frontend/src/components/modules/EventLogModule.test.tsx +401 -0
  71. flock/frontend/src/components/modules/EventLogModule.tsx +396 -0
  72. flock/frontend/src/components/modules/EventLogModuleWrapper.tsx +17 -0
  73. flock/frontend/src/components/modules/ModuleRegistry.test.ts +333 -0
  74. flock/frontend/src/components/modules/ModuleRegistry.ts +85 -0
  75. flock/frontend/src/components/modules/ModuleWindow.tsx +155 -0
  76. flock/frontend/src/components/modules/registerModules.ts +20 -0
  77. flock/frontend/src/components/settings/AdvancedSettings.tsx +175 -0
  78. flock/frontend/src/components/settings/AppearanceSettings.tsx +185 -0
  79. flock/frontend/src/components/settings/GraphSettings.tsx +110 -0
  80. flock/frontend/src/components/settings/SettingsPanel.css +327 -0
  81. flock/frontend/src/components/settings/SettingsPanel.tsx +131 -0
  82. flock/frontend/src/components/settings/ThemeSelector.tsx +298 -0
  83. flock/frontend/src/hooks/useKeyboardShortcuts.ts +148 -0
  84. flock/frontend/src/hooks/useModulePersistence.test.ts +442 -0
  85. flock/frontend/src/hooks/useModulePersistence.ts +154 -0
  86. flock/frontend/src/hooks/useModules.ts +139 -0
  87. flock/frontend/src/hooks/usePersistence.ts +139 -0
  88. flock/frontend/src/main.tsx +13 -0
  89. flock/frontend/src/services/api.ts +213 -0
  90. flock/frontend/src/services/indexeddb.test.ts +793 -0
  91. flock/frontend/src/services/indexeddb.ts +794 -0
  92. flock/frontend/src/services/layout.test.ts +437 -0
  93. flock/frontend/src/services/layout.ts +146 -0
  94. flock/frontend/src/services/themeApplicator.ts +140 -0
  95. flock/frontend/src/services/themeService.ts +77 -0
  96. flock/frontend/src/services/websocket.test.ts +595 -0
  97. flock/frontend/src/services/websocket.ts +685 -0
  98. flock/frontend/src/store/filterStore.test.ts +242 -0
  99. flock/frontend/src/store/filterStore.ts +103 -0
  100. flock/frontend/src/store/graphStore.test.ts +186 -0
  101. flock/frontend/src/store/graphStore.ts +414 -0
  102. flock/frontend/src/store/moduleStore.test.ts +253 -0
  103. flock/frontend/src/store/moduleStore.ts +57 -0
  104. flock/frontend/src/store/settingsStore.ts +188 -0
  105. flock/frontend/src/store/streamStore.ts +68 -0
  106. flock/frontend/src/store/uiStore.test.ts +54 -0
  107. flock/frontend/src/store/uiStore.ts +110 -0
  108. flock/frontend/src/store/wsStore.ts +34 -0
  109. flock/frontend/src/styles/index.css +15 -0
  110. flock/frontend/src/styles/scrollbar.css +47 -0
  111. flock/frontend/src/styles/variables.css +488 -0
  112. flock/frontend/src/test/setup.ts +1 -0
  113. flock/frontend/src/types/filters.ts +14 -0
  114. flock/frontend/src/types/graph.ts +55 -0
  115. flock/frontend/src/types/modules.ts +7 -0
  116. flock/frontend/src/types/theme.ts +55 -0
  117. flock/frontend/src/utils/mockData.ts +85 -0
  118. flock/frontend/src/utils/performance.ts +16 -0
  119. flock/frontend/src/utils/transforms.test.ts +860 -0
  120. flock/frontend/src/utils/transforms.ts +323 -0
  121. flock/frontend/src/vite-env.d.ts +17 -0
  122. flock/frontend/tsconfig.json +27 -0
  123. flock/frontend/tsconfig.node.json +11 -0
  124. flock/frontend/vite.config.ts +25 -0
  125. flock/frontend/vitest.config.ts +11 -0
  126. flock/{core/util → helper}/cli_helper.py +4 -3
  127. flock/{core/logging → logging}/__init__.py +2 -3
  128. flock/{core/logging → logging}/formatters/enum_builder.py +3 -4
  129. flock/{core/logging → logging}/formatters/theme_builder.py +19 -44
  130. flock/{core/logging → logging}/formatters/themed_formatter.py +69 -115
  131. flock/{core/logging → logging}/logging.py +77 -61
  132. flock/{core/logging → logging}/telemetry.py +20 -26
  133. flock/{core/logging → logging}/telemetry_exporter/base_exporter.py +2 -2
  134. flock/{core/logging → logging}/telemetry_exporter/file_exporter.py +6 -9
  135. flock/{core/logging → logging}/telemetry_exporter/sqlite_exporter.py +2 -3
  136. flock/{core/logging → logging}/trace_and_logged.py +20 -24
  137. flock/mcp/__init__.py +91 -0
  138. flock/{core/mcp/mcp_client.py → mcp/client.py} +103 -154
  139. flock/{core/mcp/mcp_config.py → mcp/config.py} +62 -117
  140. flock/mcp/manager.py +255 -0
  141. flock/mcp/servers/sse/__init__.py +1 -1
  142. flock/mcp/servers/sse/flock_sse_server.py +11 -53
  143. flock/mcp/servers/stdio/__init__.py +1 -1
  144. flock/mcp/servers/stdio/flock_stdio_server.py +8 -48
  145. flock/mcp/servers/streamable_http/flock_streamable_http_server.py +17 -62
  146. flock/mcp/servers/websockets/flock_websocket_server.py +7 -40
  147. flock/{core/mcp/flock_mcp_tool.py → mcp/tool.py} +16 -26
  148. flock/mcp/types/__init__.py +42 -0
  149. flock/{core/mcp → mcp}/types/callbacks.py +9 -15
  150. flock/{core/mcp → mcp}/types/factories.py +7 -6
  151. flock/{core/mcp → mcp}/types/handlers.py +13 -18
  152. flock/{core/mcp → mcp}/types/types.py +70 -74
  153. flock/{core/mcp → mcp}/util/helpers.py +1 -1
  154. flock/orchestrator.py +645 -0
  155. flock/registry.py +148 -0
  156. flock/runtime.py +262 -0
  157. flock/service.py +140 -0
  158. flock/store.py +69 -0
  159. flock/subscription.py +111 -0
  160. flock/themes/andromeda.toml +1 -1
  161. flock/themes/apple-system-colors.toml +1 -1
  162. flock/themes/arcoiris.toml +1 -1
  163. flock/themes/atomonelight.toml +1 -1
  164. flock/themes/ayu copy.toml +1 -1
  165. flock/themes/ayu-light.toml +1 -1
  166. flock/themes/belafonte-day.toml +1 -1
  167. flock/themes/belafonte-night.toml +1 -1
  168. flock/themes/blulocodark.toml +1 -1
  169. flock/themes/breeze.toml +1 -1
  170. flock/themes/broadcast.toml +1 -1
  171. flock/themes/brogrammer.toml +1 -1
  172. flock/themes/builtin-dark.toml +1 -1
  173. flock/themes/builtin-pastel-dark.toml +1 -1
  174. flock/themes/catppuccin-latte.toml +1 -1
  175. flock/themes/catppuccin-macchiato.toml +1 -1
  176. flock/themes/catppuccin-mocha.toml +1 -1
  177. flock/themes/cga.toml +1 -1
  178. flock/themes/chalk.toml +1 -1
  179. flock/themes/ciapre.toml +1 -1
  180. flock/themes/coffee-theme.toml +1 -1
  181. flock/themes/cyberpunkscarletprotocol.toml +1 -1
  182. flock/themes/dark+.toml +1 -1
  183. flock/themes/darkermatrix.toml +1 -1
  184. flock/themes/darkside.toml +1 -1
  185. flock/themes/desert.toml +1 -1
  186. flock/themes/django.toml +1 -1
  187. flock/themes/djangosmooth.toml +1 -1
  188. flock/themes/doomone.toml +1 -1
  189. flock/themes/dotgov.toml +1 -1
  190. flock/themes/dracula+.toml +1 -1
  191. flock/themes/duckbones.toml +1 -1
  192. flock/themes/encom.toml +1 -1
  193. flock/themes/espresso.toml +1 -1
  194. flock/themes/everblush.toml +1 -1
  195. flock/themes/fairyfloss.toml +1 -1
  196. flock/themes/fideloper.toml +1 -1
  197. flock/themes/fishtank.toml +1 -1
  198. flock/themes/flexoki-light.toml +1 -1
  199. flock/themes/floraverse.toml +1 -1
  200. flock/themes/framer.toml +1 -1
  201. flock/themes/galizur.toml +1 -1
  202. flock/themes/github.toml +1 -1
  203. flock/themes/grass.toml +1 -1
  204. flock/themes/grey-green.toml +1 -1
  205. flock/themes/gruvboxlight.toml +1 -1
  206. flock/themes/guezwhoz.toml +1 -1
  207. flock/themes/harper.toml +1 -1
  208. flock/themes/hax0r-blue.toml +1 -1
  209. flock/themes/hopscotch.256.toml +1 -1
  210. flock/themes/ic-green-ppl.toml +1 -1
  211. flock/themes/iceberg-dark.toml +1 -1
  212. flock/themes/japanesque.toml +1 -1
  213. flock/themes/jubi.toml +1 -1
  214. flock/themes/kibble.toml +1 -1
  215. flock/themes/kolorit.toml +1 -1
  216. flock/themes/kurokula.toml +1 -1
  217. flock/themes/materialdesigncolors.toml +1 -1
  218. flock/themes/matrix.toml +1 -1
  219. flock/themes/mellifluous.toml +1 -1
  220. flock/themes/midnight-in-mojave.toml +1 -1
  221. flock/themes/monokai-remastered.toml +1 -1
  222. flock/themes/monokai-soda.toml +1 -1
  223. flock/themes/neon.toml +1 -1
  224. flock/themes/neopolitan.toml +1 -1
  225. flock/themes/nord-light.toml +1 -1
  226. flock/themes/ocean.toml +1 -1
  227. flock/themes/onehalfdark.toml +1 -1
  228. flock/themes/onehalflight.toml +1 -1
  229. flock/themes/palenighthc.toml +1 -1
  230. flock/themes/paulmillr.toml +1 -1
  231. flock/themes/pencildark.toml +1 -1
  232. flock/themes/pnevma.toml +1 -1
  233. flock/themes/purple-rain.toml +1 -1
  234. flock/themes/purplepeter.toml +1 -1
  235. flock/themes/raycast-dark.toml +1 -1
  236. flock/themes/red-sands.toml +1 -1
  237. flock/themes/relaxed.toml +1 -1
  238. flock/themes/retro.toml +1 -1
  239. flock/themes/rose-pine.toml +1 -1
  240. flock/themes/royal.toml +1 -1
  241. flock/themes/ryuuko.toml +1 -1
  242. flock/themes/sakura.toml +1 -1
  243. flock/themes/scarlet-protocol.toml +1 -1
  244. flock/themes/seoulbones-dark.toml +1 -1
  245. flock/themes/shades-of-purple.toml +1 -1
  246. flock/themes/smyck.toml +1 -1
  247. flock/themes/softserver.toml +1 -1
  248. flock/themes/solarized-darcula.toml +1 -1
  249. flock/themes/square.toml +1 -1
  250. flock/themes/sugarplum.toml +1 -1
  251. flock/themes/thayer-bright.toml +1 -1
  252. flock/themes/tokyonight.toml +1 -1
  253. flock/themes/tomorrow.toml +1 -1
  254. flock/themes/ubuntu.toml +1 -1
  255. flock/themes/ultradark.toml +1 -1
  256. flock/themes/ultraviolent.toml +1 -1
  257. flock/themes/unikitty.toml +1 -1
  258. flock/themes/urple.toml +1 -1
  259. flock/themes/vesper.toml +1 -1
  260. flock/themes/vimbones.toml +1 -1
  261. flock/themes/wildcherry.toml +1 -1
  262. flock/themes/wilmersdorf.toml +1 -1
  263. flock/themes/wryan.toml +1 -1
  264. flock/themes/xcodedarkhc.toml +1 -1
  265. flock/themes/xcodelight.toml +1 -1
  266. flock/themes/zenbones-light.toml +1 -1
  267. flock/themes/zenwritten-dark.toml +1 -1
  268. flock/utilities.py +301 -0
  269. flock/{components/utility → utility}/output_utility_component.py +68 -53
  270. flock/visibility.py +107 -0
  271. flock_core-0.5.0b51.dist-info/METADATA +747 -0
  272. flock_core-0.5.0b51.dist-info/RECORD +508 -0
  273. flock_core-0.5.0b51.dist-info/entry_points.txt +2 -0
  274. {flock_core-0.5.0b28.dist-info → flock_core-0.5.0b51.dist-info}/licenses/LICENSE +1 -1
  275. flock/adapter/__init__.py +0 -14
  276. flock/adapter/azure_adapter.py +0 -68
  277. flock/adapter/chroma_adapter.py +0 -73
  278. flock/adapter/faiss_adapter.py +0 -97
  279. flock/adapter/pinecone_adapter.py +0 -51
  280. flock/adapter/vector_base.py +0 -47
  281. flock/cli/assets/release_notes.md +0 -140
  282. flock/cli/config.py +0 -8
  283. flock/cli/constants.py +0 -36
  284. flock/cli/create_agent.py +0 -1
  285. flock/cli/create_flock.py +0 -280
  286. flock/cli/execute_flock.py +0 -620
  287. flock/cli/load_agent.py +0 -1
  288. flock/cli/load_examples.py +0 -1
  289. flock/cli/load_flock.py +0 -192
  290. flock/cli/load_release_notes.py +0 -20
  291. flock/cli/loaded_flock_cli.py +0 -254
  292. flock/cli/manage_agents.py +0 -459
  293. flock/cli/registry_management.py +0 -889
  294. flock/cli/runner.py +0 -41
  295. flock/cli/settings.py +0 -857
  296. flock/cli/utils.py +0 -135
  297. flock/cli/view_results.py +0 -29
  298. flock/cli/yaml_editor.py +0 -396
  299. flock/components/__init__.py +0 -30
  300. flock/components/evaluation/__init__.py +0 -9
  301. flock/components/evaluation/declarative_evaluation_component.py +0 -606
  302. flock/components/routing/__init__.py +0 -15
  303. flock/components/routing/conditional_routing_component.py +0 -494
  304. flock/components/routing/default_routing_component.py +0 -103
  305. flock/components/routing/llm_routing_component.py +0 -206
  306. flock/components/utility/__init__.py +0 -22
  307. flock/components/utility/example_utility_component.py +0 -250
  308. flock/components/utility/feedback_utility_component.py +0 -206
  309. flock/components/utility/memory_utility_component.py +0 -550
  310. flock/components/utility/metrics_utility_component.py +0 -700
  311. flock/config.py +0 -61
  312. flock/core/__init__.py +0 -110
  313. flock/core/agent/__init__.py +0 -16
  314. flock/core/agent/default_agent.py +0 -216
  315. flock/core/agent/flock_agent_components.py +0 -104
  316. flock/core/agent/flock_agent_execution.py +0 -101
  317. flock/core/agent/flock_agent_integration.py +0 -260
  318. flock/core/agent/flock_agent_lifecycle.py +0 -186
  319. flock/core/agent/flock_agent_serialization.py +0 -381
  320. flock/core/api/__init__.py +0 -10
  321. flock/core/api/custom_endpoint.py +0 -45
  322. flock/core/api/endpoints.py +0 -254
  323. flock/core/api/main.py +0 -162
  324. flock/core/api/models.py +0 -97
  325. flock/core/api/run_store.py +0 -224
  326. flock/core/api/runner.py +0 -44
  327. flock/core/api/service.py +0 -214
  328. flock/core/component/__init__.py +0 -15
  329. flock/core/component/agent_component_base.py +0 -309
  330. flock/core/component/evaluation_component.py +0 -62
  331. flock/core/component/routing_component.py +0 -74
  332. flock/core/component/utility_component.py +0 -69
  333. flock/core/config/flock_agent_config.py +0 -58
  334. flock/core/config/scheduled_agent_config.py +0 -40
  335. flock/core/context/context.py +0 -213
  336. flock/core/context/context_manager.py +0 -37
  337. flock/core/context/context_vars.py +0 -10
  338. flock/core/evaluation/utils.py +0 -396
  339. flock/core/execution/batch_executor.py +0 -369
  340. flock/core/execution/evaluation_executor.py +0 -438
  341. flock/core/execution/local_executor.py +0 -31
  342. flock/core/execution/opik_executor.py +0 -103
  343. flock/core/execution/temporal_executor.py +0 -164
  344. flock/core/flock.py +0 -634
  345. flock/core/flock_agent.py +0 -336
  346. flock/core/flock_factory.py +0 -613
  347. flock/core/flock_scheduler.py +0 -166
  348. flock/core/flock_server_manager.py +0 -136
  349. flock/core/interpreter/python_interpreter.py +0 -689
  350. flock/core/mcp/__init__.py +0 -1
  351. flock/core/mcp/flock_mcp_server.py +0 -680
  352. flock/core/mcp/mcp_client_manager.py +0 -201
  353. flock/core/mcp/types/__init__.py +0 -1
  354. flock/core/mixin/dspy_integration.py +0 -403
  355. flock/core/mixin/prompt_parser.py +0 -125
  356. flock/core/orchestration/__init__.py +0 -15
  357. flock/core/orchestration/flock_batch_processor.py +0 -94
  358. flock/core/orchestration/flock_evaluator.py +0 -113
  359. flock/core/orchestration/flock_execution.py +0 -295
  360. flock/core/orchestration/flock_initialization.py +0 -149
  361. flock/core/orchestration/flock_server_manager.py +0 -67
  362. flock/core/orchestration/flock_web_server.py +0 -117
  363. flock/core/registry/__init__.py +0 -45
  364. flock/core/registry/agent_registry.py +0 -69
  365. flock/core/registry/callable_registry.py +0 -139
  366. flock/core/registry/component_discovery.py +0 -142
  367. flock/core/registry/component_registry.py +0 -64
  368. flock/core/registry/config_mapping.py +0 -64
  369. flock/core/registry/decorators.py +0 -137
  370. flock/core/registry/registry_hub.py +0 -205
  371. flock/core/registry/server_registry.py +0 -57
  372. flock/core/registry/type_registry.py +0 -86
  373. flock/core/serialization/__init__.py +0 -13
  374. flock/core/serialization/callable_registry.py +0 -52
  375. flock/core/serialization/flock_serializer.py +0 -832
  376. flock/core/serialization/json_encoder.py +0 -41
  377. flock/core/serialization/secure_serializer.py +0 -175
  378. flock/core/serialization/serializable.py +0 -342
  379. flock/core/serialization/serialization_utils.py +0 -412
  380. flock/core/util/file_path_utils.py +0 -223
  381. flock/core/util/hydrator.py +0 -309
  382. flock/core/util/input_resolver.py +0 -164
  383. flock/core/util/loader.py +0 -59
  384. flock/core/util/splitter.py +0 -219
  385. flock/di.py +0 -27
  386. flock/platform/docker_tools.py +0 -49
  387. flock/platform/jaeger_install.py +0 -86
  388. flock/webapp/__init__.py +0 -1
  389. flock/webapp/app/__init__.py +0 -0
  390. flock/webapp/app/api/__init__.py +0 -0
  391. flock/webapp/app/api/agent_management.py +0 -241
  392. flock/webapp/app/api/execution.py +0 -709
  393. flock/webapp/app/api/flock_management.py +0 -129
  394. flock/webapp/app/api/registry_viewer.py +0 -30
  395. flock/webapp/app/chat.py +0 -665
  396. flock/webapp/app/config.py +0 -104
  397. flock/webapp/app/dependencies.py +0 -117
  398. flock/webapp/app/main.py +0 -1070
  399. flock/webapp/app/middleware.py +0 -113
  400. flock/webapp/app/models_ui.py +0 -7
  401. flock/webapp/app/services/__init__.py +0 -0
  402. flock/webapp/app/services/feedback_file_service.py +0 -363
  403. flock/webapp/app/services/flock_service.py +0 -337
  404. flock/webapp/app/services/sharing_models.py +0 -81
  405. flock/webapp/app/services/sharing_store.py +0 -762
  406. flock/webapp/app/templates/theme_mapper.html +0 -326
  407. flock/webapp/app/theme_mapper.py +0 -812
  408. flock/webapp/app/utils.py +0 -85
  409. flock/webapp/run.py +0 -215
  410. flock/webapp/static/css/chat.css +0 -301
  411. flock/webapp/static/css/components.css +0 -167
  412. flock/webapp/static/css/header.css +0 -39
  413. flock/webapp/static/css/layout.css +0 -46
  414. flock/webapp/static/css/sidebar.css +0 -127
  415. flock/webapp/static/css/two-pane.css +0 -48
  416. flock/webapp/templates/base.html +0 -200
  417. flock/webapp/templates/chat.html +0 -152
  418. flock/webapp/templates/chat_settings.html +0 -19
  419. flock/webapp/templates/flock_editor.html +0 -16
  420. flock/webapp/templates/index.html +0 -12
  421. flock/webapp/templates/partials/_agent_detail_form.html +0 -93
  422. flock/webapp/templates/partials/_agent_list.html +0 -18
  423. flock/webapp/templates/partials/_agent_manager_view.html +0 -51
  424. flock/webapp/templates/partials/_agent_tools_checklist.html +0 -14
  425. flock/webapp/templates/partials/_chat_container.html +0 -15
  426. flock/webapp/templates/partials/_chat_messages.html +0 -57
  427. flock/webapp/templates/partials/_chat_settings_form.html +0 -85
  428. flock/webapp/templates/partials/_create_flock_form.html +0 -50
  429. flock/webapp/templates/partials/_dashboard_flock_detail.html +0 -17
  430. flock/webapp/templates/partials/_dashboard_flock_file_list.html +0 -16
  431. flock/webapp/templates/partials/_dashboard_flock_properties_preview.html +0 -28
  432. flock/webapp/templates/partials/_dashboard_upload_flock_form.html +0 -16
  433. flock/webapp/templates/partials/_dynamic_input_form_content.html +0 -22
  434. flock/webapp/templates/partials/_env_vars_table.html +0 -23
  435. flock/webapp/templates/partials/_execution_form.html +0 -118
  436. flock/webapp/templates/partials/_execution_view_container.html +0 -28
  437. flock/webapp/templates/partials/_flock_file_list.html +0 -23
  438. flock/webapp/templates/partials/_flock_properties_form.html +0 -52
  439. flock/webapp/templates/partials/_flock_upload_form.html +0 -16
  440. flock/webapp/templates/partials/_header_flock_status.html +0 -5
  441. flock/webapp/templates/partials/_load_manager_view.html +0 -49
  442. flock/webapp/templates/partials/_registry_table.html +0 -25
  443. flock/webapp/templates/partials/_registry_viewer_content.html +0 -70
  444. flock/webapp/templates/partials/_results_display.html +0 -78
  445. flock/webapp/templates/partials/_settings_env_content.html +0 -9
  446. flock/webapp/templates/partials/_settings_theme_content.html +0 -14
  447. flock/webapp/templates/partials/_settings_view.html +0 -36
  448. flock/webapp/templates/partials/_share_chat_link_snippet.html +0 -11
  449. flock/webapp/templates/partials/_share_link_snippet.html +0 -35
  450. flock/webapp/templates/partials/_sidebar.html +0 -74
  451. flock/webapp/templates/partials/_streaming_results_container.html +0 -195
  452. flock/webapp/templates/partials/_structured_data_view.html +0 -40
  453. flock/webapp/templates/partials/_theme_preview.html +0 -36
  454. flock/webapp/templates/registry_viewer.html +0 -84
  455. flock/webapp/templates/shared_run_page.html +0 -140
  456. flock/workflow/__init__.py +0 -0
  457. flock/workflow/activities.py +0 -196
  458. flock/workflow/agent_activities.py +0 -24
  459. flock/workflow/agent_execution_activity.py +0 -202
  460. flock/workflow/flock_workflow.py +0 -214
  461. flock/workflow/temporal_config.py +0 -96
  462. flock/workflow/temporal_setup.py +0 -68
  463. flock_core-0.5.0b28.dist-info/METADATA +0 -274
  464. flock_core-0.5.0b28.dist-info/RECORD +0 -561
  465. flock_core-0.5.0b28.dist-info/entry_points.txt +0 -2
  466. /flock/{core/logging → logging}/formatters/themes.py +0 -0
  467. /flock/{core/logging → logging}/span_middleware/baggage_span_processor.py +0 -0
  468. /flock/{core/mcp → mcp}/util/__init__.py +0 -0
  469. {flock_core-0.5.0b28.dist-info → flock_core-0.5.0b51.dist-info}/WHEEL +0 -0
flock/core/flock.py DELETED
@@ -1,634 +0,0 @@
1
- # src/flock/core/flock.py
2
- """High-level orchestrator for managing and executing agents within the Flock framework."""
3
-
4
- from __future__ import annotations # Ensure forward references work
5
-
6
- import uuid
7
- from collections.abc import Callable, Sequence
8
- from pathlib import Path
9
- from typing import (
10
- TYPE_CHECKING,
11
- Any,
12
- Literal,
13
- TypeVar,
14
- )
15
-
16
- # Third-party imports
17
- from box import Box
18
- from temporalio import workflow
19
-
20
- from flock.core.mcp.flock_mcp_server import FlockMCPServer
21
-
22
- # Guard datasets import to avoid heavy side effects during tests (pyarrow extensions)
23
- from typing import Any as _Any
24
- try:
25
- with workflow.unsafe.imports_passed_through():
26
- from datasets import Dataset as _HF_Dataset # type: ignore
27
- Dataset = _HF_Dataset # type: ignore
28
- except Exception:
29
- Dataset = _Any # type: ignore
30
-
31
- from opentelemetry import trace
32
- from pandas import DataFrame # type: ignore
33
- from pydantic import BaseModel, Field
34
-
35
- # Flock core components & utilities
36
- from flock.config import DEFAULT_MODEL, TELEMETRY
37
- from flock.core.api.custom_endpoint import (
38
- FlockEndpoint, # Keep for type hinting custom_endpoints
39
- )
40
- from flock.core.context.context import FlockContext
41
- from flock.core.logging.logging import get_logger
42
- from flock.core.serialization.serializable import Serializable
43
- from flock.workflow.temporal_config import TemporalWorkflowConfig
44
-
45
- # Import FlockAgent using TYPE_CHECKING to avoid circular import at runtime
46
- if TYPE_CHECKING:
47
- # These imports are only for type hints
48
- from flock.core.flock_agent import FlockAgent
49
-
50
-
51
- # Registry
52
- from flock.core.registry import get_registry
53
-
54
- try:
55
- import pandas as pd # type: ignore
56
-
57
- PANDAS_AVAILABLE = True
58
- except ImportError:
59
- pd = None # type: ignore
60
- PANDAS_AVAILABLE = False
61
-
62
- logger = get_logger("flock.api")
63
- TELEMETRY.setup_tracing() # Setup OpenTelemetry
64
- tracer = trace.get_tracer(__name__)
65
- registry = get_registry() # Get the registry instance
66
-
67
- # Define TypeVar for generic class methods like from_dict
68
- T = TypeVar("T", bound="Flock")
69
- _R = TypeVar("_R")
70
-
71
-
72
- class Flock(BaseModel, Serializable):
73
- """Orchestrator for managing and executing agent systems.
74
-
75
- Manages agent definitions, context, and execution flow (local or Temporal).
76
- Relies on FlockSerializer for serialization/deserialization logic.
77
- Inherits from Pydantic BaseModel and Serializable.
78
- """
79
-
80
- name: str | None = Field(
81
- default_factory=lambda: f"flock_{uuid.uuid4().hex[:8]}",
82
- description="A unique identifier for this Flock instance.",
83
- )
84
- model: str | None = Field(
85
- default=DEFAULT_MODEL,
86
- description="Default model identifier for agents if not specified otherwise.",
87
- )
88
- description: str | None = Field(
89
- default=None,
90
- description="A brief description of the purpose of this Flock configuration.",
91
- )
92
- enable_temporal: bool = Field(
93
- default=False,
94
- description="If True, execute workflows via Temporal; otherwise, run locally.",
95
- )
96
- enable_opik: bool = Field(
97
- default=False,
98
- description="If True, enable Opik for cost tracking and model management.",
99
- )
100
- show_flock_banner: bool = Field(
101
- default=True,
102
- description="If True, show the Flock banner on console interactions.",
103
- )
104
- # --- Temporal Configuration (Optional) ---
105
- temporal_config: TemporalWorkflowConfig | None = Field(
106
- default=None,
107
- description="Optional Temporal settings specific to the workflow execution for this Flock.",
108
- )
109
- # --- Temporal Dev/Test Setting ---
110
- temporal_start_in_process_worker: bool = Field(
111
- default=True,
112
- description="If True (default) and enable_temporal=True, start a temporary in-process worker for development/testing convenience. Set to False when using dedicated workers.",
113
- )
114
-
115
- benchmark_agent_name: str | None = Field(
116
- default=None,
117
- description="The name of the agent to use for the benchmark.",
118
- )
119
- benchmark_eval_field: str | None = Field(
120
- default=None,
121
- description="The output field to use for the benchmark.",
122
- )
123
- benchmark_input_field: str | None = Field(
124
- default=None,
125
- description="The input field to use for the benchmark.",
126
- )
127
- # Internal agent storage - not part of the Pydantic model for direct serialization
128
- # Marked with underscore to indicate it's managed internally and accessed via property
129
- _agents: dict[str, FlockAgent]
130
- _start_agent_name: str | None = None # For potential pre-configuration
131
- _start_input: dict = {} # For potential pre-configuration
132
-
133
- # Internal server storage - not part of the Pydantic model for direct serialization
134
- _servers: dict[str, FlockMCPServer]
135
-
136
- # Note: _mgr is now handled by the server manager helper
137
-
138
- # Pydantic v2 model config
139
- model_config = {
140
- "arbitrary_types_allowed": True,
141
- # Assuming registry type might not be serializable by default
142
- "ignored_types": (type(registry),),
143
- }
144
-
145
- # --- COMPOSITION HELPERS (Lazy-Loaded) ---
146
- # Following the successful FlockAgent pattern
147
-
148
- @property
149
- def _execution(self):
150
- """Get the execution management helper (lazy-loaded)."""
151
- if not hasattr(self, '_execution_helper'):
152
- from flock.core.orchestration.flock_execution import FlockExecution
153
- self._execution_helper = FlockExecution(self)
154
- return self._execution_helper
155
-
156
- @property
157
- def _server_manager(self):
158
- """Get the server management helper (lazy-loaded)."""
159
- if not hasattr(self, '_server_manager_helper'):
160
- from flock.core.orchestration.flock_server_manager import (
161
- FlockServerManager,
162
- )
163
- self._server_manager_helper = FlockServerManager(self)
164
- return self._server_manager_helper
165
-
166
- @property
167
- def _batch_processor(self):
168
- """Get the batch processing helper (lazy-loaded)."""
169
- if not hasattr(self, '_batch_processor_helper'):
170
- from flock.core.orchestration.flock_batch_processor import (
171
- FlockBatchProcessor,
172
- )
173
- self._batch_processor_helper = FlockBatchProcessor(self)
174
- return self._batch_processor_helper
175
-
176
- @property
177
- def _evaluator(self):
178
- """Get the evaluation helper (lazy-loaded)."""
179
- if not hasattr(self, '_evaluator_helper'):
180
- from flock.core.orchestration.flock_evaluator import FlockEvaluator
181
- self._evaluator_helper = FlockEvaluator(self)
182
- return self._evaluator_helper
183
-
184
- @property
185
- def _web_server(self):
186
- """Get the web server helper (lazy-loaded)."""
187
- if not hasattr(self, '_web_server_helper'):
188
- from flock.core.orchestration.flock_web_server import FlockWebServer
189
- self._web_server_helper = FlockWebServer(self)
190
- return self._web_server_helper
191
-
192
- @property
193
- def _initialization(self):
194
- """Get the initialization helper (lazy-loaded)."""
195
- if not hasattr(self, '_initialization_helper'):
196
- from flock.core.orchestration.flock_initialization import (
197
- FlockInitialization,
198
- )
199
- self._initialization_helper = FlockInitialization(self)
200
- return self._initialization_helper
201
-
202
- @property
203
- def _mgr(self):
204
- """Get the internal server manager for compatibility."""
205
- return self._server_manager._internal_mgr
206
-
207
- def __init__(
208
- self,
209
- name: str | None = None,
210
- model: str | None = DEFAULT_MODEL,
211
- description: str | None = None,
212
- show_flock_banner: bool = True,
213
- enable_temporal: bool = False,
214
- enable_opik: bool = False,
215
- agents: list[FlockAgent] | None = None,
216
- servers: list[FlockMCPServer] | None = None,
217
- temporal_config: TemporalWorkflowConfig | None = None,
218
- temporal_start_in_process_worker: bool = True,
219
- **kwargs,
220
- ):
221
- """Initialize the Flock orchestrator."""
222
- # Use provided name or generate default BEFORE super init if needed elsewhere
223
- effective_name = name or f"flock_{uuid.uuid4().hex[:8]}"
224
-
225
- # Initialize Pydantic fields
226
- super().__init__(
227
- name=effective_name,
228
- model=model,
229
- description=description,
230
- enable_temporal=enable_temporal,
231
- enable_opik=enable_opik,
232
- show_flock_banner=show_flock_banner,
233
- temporal_config=temporal_config,
234
- temporal_start_in_process_worker=temporal_start_in_process_worker,
235
- **kwargs,
236
- )
237
-
238
- # Initialize runtime attributes AFTER super().__init__()
239
- self._agents = {}
240
- self._servers = {}
241
- self._start_agent_name = None
242
- self._start_input = {}
243
- # Note: _mgr will be handled by the server manager helper
244
-
245
- # Delegate complex initialization to the initialization helper
246
- self._initialization.setup(agents=agents, servers=servers)
247
-
248
- def prepare_benchmark(
249
- self,
250
- agent: FlockAgent | str | None = None,
251
- input_field: str | None = None,
252
- eval_field: str | None = None,
253
- ):
254
- """Prepare a benchmark for the Flock instance."""
255
- from flock.core.flock_agent import FlockAgent as ConcreteFlockAgent
256
-
257
- logger.info(
258
- f"Preparing benchmark for Flock instance '{self.name}' with agent '{agent}'."
259
- )
260
-
261
- name = agent.name if isinstance(agent, ConcreteFlockAgent) else agent
262
-
263
- if self._agents.get(name) is None:
264
- raise ValueError(
265
- f"Agent '{name}' not found in Flock instance '{self.name}'."
266
- )
267
-
268
- self.benchmark_agent_name = name
269
- self.benchmark_eval_field = eval_field
270
- self.benchmark_input_field = input_field
271
-
272
- def inspect(self):
273
- """Inspect the Flock instance."""
274
- logger.info(
275
- f"Inspecting Flock instance '{self.name}' with start agent '{self.benchmark_agent_name}' and input '{input}'."
276
- )
277
-
278
- async def run(input: dict[str, Any]) -> dict[str, Any]:
279
- """Inspect the Flock instance."""
280
- logger.info(
281
- f"Inspecting Flock instance '{self.name}' with start agent '{self.benchmark_agent_name}' and input '{input}'."
282
- )
283
- msg_content = input.get("messages")[0].get("content")
284
-
285
- agent_input = {self.benchmark_input_field: msg_content}
286
-
287
- result = await self.run_async(
288
- agent=self.benchmark_agent_name,
289
- input=agent_input,
290
- box_result=False,
291
- )
292
-
293
- agent_output = result.get(
294
- self.benchmark_eval_field, "No answer found"
295
- )
296
-
297
- return {
298
- "output": agent_output,
299
- }
300
-
301
- return run
302
-
303
-
304
-
305
- def add_server(self, server: FlockMCPServer) -> FlockMCPServer:
306
- """Adds a server instance to this Flock configuration and registry."""
307
- return self._server_manager.add_server(server)
308
-
309
- def add_agent(self, agent: FlockAgent) -> FlockAgent:
310
- """Adds an agent instance to this Flock configuration and registry.
311
-
312
- This also registers all servers attached to the agent, if they have not been registered
313
- beforehand.
314
- """
315
- from flock.core.flock_agent import FlockAgent as ConcreteFlockAgent
316
-
317
- if not isinstance(agent, ConcreteFlockAgent):
318
- raise TypeError("Provided object is not a FlockAgent instance.")
319
- if not agent.name:
320
- raise ValueError("Agent must have a name.")
321
-
322
- if agent.name in self._agents:
323
- # Allow re-adding the same instance, but raise error for different instance with same name
324
- if self._agents[agent.name] is not agent:
325
- raise ValueError(
326
- f"Agent with name '{agent.name}' already exists with a different instance."
327
- )
328
- else:
329
- logger.debug(
330
- f"Agent '{agent.name}' is already added. Skipping."
331
- )
332
- return agent # Return existing agent
333
-
334
- self._agents[agent.name] = agent
335
- registry.register_agent(agent) # Register globally
336
-
337
- # Set default model if agent doesn't have one
338
- if agent.model is None:
339
- if self.model:
340
- agent.set_model(self.model)
341
- logger.debug(
342
- f"Agent '{agent.name}' using Flock default model: {self.model}"
343
- )
344
- else:
345
- logger.warning(
346
- f"Agent '{agent.name}' has no model and Flock default model is not set."
347
- )
348
-
349
- logger.info(f"Agent '{agent.name}' added to Flock '{self.name}'.")
350
- return agent
351
-
352
- @property
353
- def agents(self) -> dict[str, FlockAgent]:
354
- """Returns the dictionary of agents managed by this Flock instance."""
355
- return self._agents
356
-
357
- @property
358
- def servers(self) -> dict[str, FlockMCPServer]:
359
- """Returns the dictionary of servers managed by this Flock instance."""
360
- return self._server_manager.servers
361
-
362
- def run(
363
- self,
364
- agent: FlockAgent | str | None = None,
365
- input: dict | None = None,
366
- context: FlockContext | None = None,
367
- run_id: str = "",
368
- box_result: bool = True,
369
- agents: list[FlockAgent] | None = None,
370
- servers: list[FlockMCPServer] | None = None,
371
- memo: dict[str, Any] | None = None,
372
- ) -> Box | dict:
373
- """Synchronous execution wrapper."""
374
- return self._execution.run(
375
- agent=agent,
376
- input=input,
377
- context=context,
378
- run_id=run_id,
379
- box_result=box_result,
380
- agents=agents,
381
- servers=servers,
382
- memo=memo,
383
- )
384
-
385
- async def run_async(
386
- self,
387
- agent: FlockAgent | str | None = None,
388
- input: dict | None = None,
389
- context: FlockContext | None = None,
390
- run_id: str = "",
391
- box_result: bool = True,
392
- agents: list[FlockAgent] | None = None,
393
- servers: list[FlockMCPServer] | None = None,
394
- memo: dict[str, Any] | None = None,
395
- ) -> Box | dict:
396
- """Entry point for running an agent system asynchronously."""
397
- return await self._execution.run_async(
398
- agent=agent,
399
- input=input,
400
- context=context,
401
- run_id=run_id,
402
- box_result=box_result,
403
- agents=agents,
404
- servers=servers,
405
- memo=memo,
406
- )
407
-
408
- # --- Batch Processing (Delegation) ---
409
- async def run_batch_async(
410
- self,
411
- start_agent: FlockAgent | str,
412
- batch_inputs: list[dict[str, Any]] | DataFrame | str,
413
- input_mapping: dict[str, str] | None = None,
414
- static_inputs: dict[str, Any] | None = None,
415
- parallel: bool = True,
416
- max_workers: int = 5,
417
- use_temporal: bool | None = None,
418
- box_results: bool = True,
419
- return_errors: bool = False,
420
- silent_mode: bool = False,
421
- write_to_csv: str | None = None,
422
- hide_columns: list[str] | None = None,
423
- delimiter: str = ",",
424
- ) -> list[Box | dict | None | Exception]:
425
- """Runs the specified agent/workflow for each item in a batch asynchronously (delegated)."""
426
- return await self._batch_processor.run_batch_async(
427
- start_agent=start_agent,
428
- batch_inputs=batch_inputs,
429
- input_mapping=input_mapping,
430
- static_inputs=static_inputs,
431
- parallel=parallel,
432
- max_workers=max_workers,
433
- use_temporal=use_temporal,
434
- box_results=box_results,
435
- return_errors=return_errors,
436
- silent_mode=silent_mode,
437
- write_to_csv=write_to_csv,
438
- hide_columns=hide_columns,
439
- delimiter=delimiter,
440
- )
441
-
442
- def run_batch(
443
- self,
444
- start_agent: FlockAgent | str,
445
- batch_inputs: list[dict[str, Any]] | DataFrame | str,
446
- input_mapping: dict[str, str] | None = None,
447
- static_inputs: dict[str, Any] | None = None,
448
- parallel: bool = True,
449
- max_workers: int = 5,
450
- use_temporal: bool | None = None,
451
- box_results: bool = True,
452
- return_errors: bool = False,
453
- silent_mode: bool = False,
454
- write_to_csv: str | None = None,
455
- hide_columns: list[str] | None = None,
456
- delimiter: str = ",",
457
- ) -> list[Box | dict | None | Exception]:
458
- """Synchronous wrapper for batch processing."""
459
- return self._batch_processor.run_batch(
460
- start_agent=start_agent,
461
- batch_inputs=batch_inputs,
462
- input_mapping=input_mapping,
463
- static_inputs=static_inputs,
464
- parallel=parallel,
465
- max_workers=max_workers,
466
- use_temporal=use_temporal,
467
- box_results=box_results,
468
- return_errors=return_errors,
469
- silent_mode=silent_mode,
470
- write_to_csv=write_to_csv,
471
- hide_columns=hide_columns,
472
- delimiter=delimiter,
473
- )
474
-
475
- # --- Evaluation (Delegation) ---
476
- async def evaluate_async(
477
- self,
478
- dataset: str | Path | list[dict[str, Any]] | DataFrame | Dataset, # type: ignore
479
- start_agent: FlockAgent | str,
480
- input_mapping: dict[str, str],
481
- answer_mapping: dict[str, str],
482
- metrics: list[
483
- str
484
- | Callable[[Any, Any], bool | float | dict[str, Any]]
485
- | FlockAgent # Type hint only
486
- ],
487
- metric_configs: dict[str, dict[str, Any]] | None = None,
488
- static_inputs: dict[str, Any] | None = None,
489
- parallel: bool = True,
490
- max_workers: int = 5,
491
- use_temporal: bool | None = None,
492
- error_handling: Literal["raise", "skip", "log"] = "log",
493
- output_file: str | Path | None = None,
494
- return_dataframe: bool = True,
495
- silent_mode: bool = False,
496
- metadata_columns: list[str] | None = None,
497
- ) -> DataFrame | list[dict[str, Any]]: # type: ignore
498
- """Evaluates the Flock's performance against a dataset (delegated)."""
499
- return await self._evaluator.evaluate_async(
500
- dataset=dataset,
501
- start_agent=start_agent,
502
- input_mapping=input_mapping,
503
- answer_mapping=answer_mapping,
504
- metrics=metrics,
505
- metric_configs=metric_configs,
506
- static_inputs=static_inputs,
507
- parallel=parallel,
508
- max_workers=max_workers,
509
- use_temporal=use_temporal,
510
- error_handling=error_handling,
511
- output_file=output_file,
512
- return_dataframe=return_dataframe,
513
- silent_mode=silent_mode,
514
- metadata_columns=metadata_columns,
515
- )
516
-
517
- def evaluate(
518
- self,
519
- dataset: str | Path | list[dict[str, Any]] | DataFrame | Dataset, # type: ignore
520
- start_agent: FlockAgent | str,
521
- input_mapping: dict[str, str],
522
- answer_mapping: dict[str, str],
523
- metrics: list[
524
- str
525
- | Callable[[Any, Any], bool | float | dict[str, Any]]
526
- | FlockAgent # Type hint only
527
- ],
528
- metric_configs: dict[str, dict[str, Any]] | None = None,
529
- static_inputs: dict[str, Any] | None = None,
530
- parallel: bool = True,
531
- max_workers: int = 5,
532
- use_temporal: bool | None = None,
533
- error_handling: Literal["raise", "skip", "log"] = "log",
534
- output_file: str | Path | None = None,
535
- return_dataframe: bool = True,
536
- silent_mode: bool = False,
537
- metadata_columns: list[str] | None = None,
538
- ) -> DataFrame | list[dict[str, Any]]: # type: ignore
539
- """Synchronous wrapper for evaluation."""
540
- return self._evaluator.evaluate(
541
- dataset=dataset,
542
- start_agent=start_agent,
543
- input_mapping=input_mapping,
544
- answer_mapping=answer_mapping,
545
- metrics=metrics,
546
- metric_configs=metric_configs,
547
- static_inputs=static_inputs,
548
- parallel=parallel,
549
- max_workers=max_workers,
550
- use_temporal=use_temporal,
551
- error_handling=error_handling,
552
- output_file=output_file,
553
- return_dataframe=return_dataframe,
554
- silent_mode=silent_mode,
555
- metadata_columns=metadata_columns,
556
- )
557
-
558
- # --- Server & CLI Starters (Delegation) ---
559
-
560
- def serve(
561
- self,
562
- host: str = "127.0.0.1",
563
- port: int = 8344,
564
- server_name: str = "Flock Server",
565
- ui: bool = True,
566
- chat: bool = False,
567
- chat_agent: str | None = None, # Reserved for future real agent chat
568
- chat_message_key: str = "message",
569
- chat_history_key: str = "history",
570
- chat_response_key: str = "response",
571
- ui_theme: str | None = None,
572
- custom_endpoints: Sequence[FlockEndpoint]
573
- | dict[tuple[str, list[str] | None], Callable[..., Any]]
574
- | None = None,
575
- ) -> None:
576
- """Launch an HTTP server that exposes the core REST API and, optionally, the browser-based UI."""
577
- return self._web_server.serve(
578
- host=host,
579
- port=port,
580
- server_name=server_name,
581
- ui=ui,
582
- chat=chat,
583
- chat_agent=chat_agent,
584
- chat_message_key=chat_message_key,
585
- chat_history_key=chat_history_key,
586
- chat_response_key=chat_response_key,
587
- ui_theme=ui_theme,
588
- custom_endpoints=custom_endpoints,
589
- )
590
-
591
- def start_cli(
592
- self,
593
- start_agent: FlockAgent
594
- | str
595
- | None = None, # Added start_agent to match method signature in file_26
596
- server_name: str = "Flock CLI",
597
- show_results: bool = False,
598
- edit_mode: bool = False,
599
- ) -> None:
600
- """Starts an interactive CLI for this Flock instance."""
601
- return self._web_server.start_cli(
602
- start_agent=start_agent,
603
- server_name=server_name,
604
- show_results=show_results,
605
- edit_mode=edit_mode,
606
- )
607
-
608
- # --- Serialization Delegation Methods ---
609
- def to_dict(self, path_type: str = "relative") -> dict[str, Any]:
610
- """Serialize Flock instance to dictionary using FlockSerializer."""
611
- from flock.core.serialization.flock_serializer import FlockSerializer
612
-
613
- return FlockSerializer.serialize(self, path_type=path_type)
614
-
615
- @classmethod
616
- def from_dict(cls: type[T], data: dict[str, Any]) -> T:
617
- """Deserialize Flock instance from dictionary using FlockSerializer."""
618
- from flock.core.serialization.flock_serializer import FlockSerializer
619
-
620
- return FlockSerializer.deserialize(cls, data)
621
-
622
- # --- Static Method Loader (Delegates to loader module) ---
623
- @staticmethod
624
- def load_from_file(file_path: str) -> Flock: # Ensure return type is Flock
625
- """Load a Flock instance from various file formats (delegates to loader)."""
626
- from flock.core.util.loader import load_flock_from_file
627
-
628
- loaded_flock = load_flock_from_file(file_path)
629
- # Ensure the loaded object is indeed a Flock instance
630
- if not isinstance(loaded_flock, Flock):
631
- raise TypeError(
632
- f"Loaded object from {file_path} is not a Flock instance, but {type(loaded_flock)}"
633
- )
634
- return loaded_flock