flock-core 0.1.2__py3-none-any.whl → 0.2.1__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 (405) hide show
  1. flock/__init__.py +1 -4
  2. flock/agents/__init__.py +0 -3
  3. flock/agents/batch_agent.py +140 -175
  4. flock/agents/loop_agent.py +117 -178
  5. flock/agents/trigger_agent.py +113 -191
  6. flock/agents/user_agent.py +145 -230
  7. flock/core/__init__.py +1 -7
  8. flock/core/context/context.py +211 -0
  9. flock/core/context/context_manager.py +34 -0
  10. flock/core/{context_vars.py → context/context_vars.py} +8 -6
  11. flock/core/execution/local_executor.py +27 -0
  12. flock/core/execution/temporal_executor.py +40 -0
  13. flock/core/flock.py +199 -208
  14. flock/core/flock_agent.py +492 -0
  15. flock/core/logging/__init__.py +2 -18
  16. flock/core/logging/formatters/base_formatter.py +36 -0
  17. flock/core/logging/formatters/formatter_factory.py +38 -0
  18. flock/core/logging/formatters/pprint_formatter.py +18 -0
  19. flock/core/logging/formatters/rich_formatters.py +132 -0
  20. flock/core/logging/formatters/theme_builder.py +480 -0
  21. flock/core/logging/formatters/themed_formatter.py +442 -0
  22. flock/core/logging/logging.py +123 -0
  23. flock/core/mixin/dspy_integration.py +171 -0
  24. flock/core/mixin/prompt_parser.py +125 -0
  25. flock/core/registry/agent_registry.py +103 -0
  26. flock/core/tools/basic_tools.py +273 -98
  27. flock/core/tools/dev_tools/github.py +161 -0
  28. flock/core/util/cli_helper.py +21 -0
  29. flock/core/util/input_resolver.py +156 -0
  30. flock/core/util/serializable.py +93 -0
  31. flock/themes/3024-day.toml +39 -0
  32. flock/themes/3024-night.toml +77 -0
  33. flock/themes/aardvark-blue.toml +77 -0
  34. flock/themes/abernathy.toml +77 -0
  35. flock/themes/adventure.toml +77 -0
  36. flock/themes/adventuretime.toml +77 -0
  37. flock/themes/afterglow.toml +77 -0
  38. flock/themes/alabaster.toml +77 -0
  39. flock/themes/alienblood.toml +77 -0
  40. flock/themes/andromeda.toml +77 -0
  41. flock/themes/apple-classic.toml +77 -0
  42. flock/themes/apple-system-colors.toml +77 -0
  43. flock/themes/arcoiris.toml +77 -0
  44. flock/themes/argonaut copy.toml +77 -0
  45. flock/themes/argonaut.toml +39 -0
  46. flock/themes/arthur.toml +77 -0
  47. flock/themes/ateliersulphurpool.toml +77 -0
  48. flock/themes/atom.toml +38 -0
  49. flock/themes/atom_test.toml +65 -0
  50. flock/themes/atomonelight.toml +77 -0
  51. flock/themes/aurora.toml +77 -0
  52. flock/themes/ayu copy.toml +77 -0
  53. flock/themes/ayu-light.toml +77 -0
  54. flock/themes/ayu-mirage.toml +77 -0
  55. flock/themes/ayu.toml +39 -0
  56. flock/themes/banana-blueberry.toml +77 -0
  57. flock/themes/batman.toml +77 -0
  58. flock/themes/belafonte-day.toml +77 -0
  59. flock/themes/belafonte-night.toml +77 -0
  60. flock/themes/birdsofparadise.toml +77 -0
  61. flock/themes/blazer.toml +77 -0
  62. flock/themes/blue-matrix.toml +77 -0
  63. flock/themes/blueberrypie.toml +77 -0
  64. flock/themes/bluedolphin.toml +77 -0
  65. flock/themes/blulocodark.toml +77 -0
  66. flock/themes/blulocolight.toml +77 -0
  67. flock/themes/borland.toml +77 -0
  68. flock/themes/breeze.toml +77 -0
  69. flock/themes/bright-lights.toml +77 -0
  70. flock/themes/broadcast.toml +77 -0
  71. flock/themes/brogrammer.toml +77 -0
  72. flock/themes/builtin-dark.toml +77 -0
  73. flock/themes/builtin-light.toml +77 -0
  74. flock/themes/builtin-pastel-dark.toml +77 -0
  75. flock/themes/builtin-solarized-dark.toml +77 -0
  76. flock/themes/builtin-solarized-light.toml +77 -0
  77. flock/themes/builtin-tango-dark.toml +77 -0
  78. flock/themes/builtin-tango-light.toml +77 -0
  79. flock/themes/c64.toml +77 -0
  80. flock/themes/calamity.toml +77 -0
  81. flock/themes/catppuccin-frappe.toml +77 -0
  82. flock/themes/catppuccin-latte.toml +77 -0
  83. flock/themes/catppuccin-macchiato.toml +77 -0
  84. flock/themes/catppuccin-mocha.toml +77 -0
  85. flock/themes/cga.toml +77 -0
  86. flock/themes/chalk.toml +77 -0
  87. flock/themes/chalkboard.toml +77 -0
  88. flock/themes/challengerdeep.toml +77 -0
  89. flock/themes/chester.toml +77 -0
  90. flock/themes/ciapre.toml +77 -0
  91. flock/themes/clrs.toml +77 -0
  92. flock/themes/cobalt-neon.toml +77 -0
  93. flock/themes/cobalt2.toml +77 -0
  94. flock/themes/coffee-theme.toml +77 -0
  95. flock/themes/crayonponyfish.toml +77 -0
  96. flock/themes/cutiepro.toml +77 -0
  97. flock/themes/cyberdyne.toml +77 -0
  98. flock/themes/cyberpunk.toml +77 -0
  99. flock/themes/cyberpunkscarletprotocol.toml +77 -0
  100. flock/themes/dark+.toml +77 -0
  101. flock/themes/dark-pastel.toml +77 -0
  102. flock/themes/darkermatrix.toml +77 -0
  103. flock/themes/darkmatrix.toml +77 -0
  104. flock/themes/darkside.toml +77 -0
  105. flock/themes/dayfox.toml +77 -0
  106. flock/themes/deep.toml +77 -0
  107. flock/themes/desert.toml +77 -0
  108. flock/themes/dimidium.toml +77 -0
  109. flock/themes/dimmedmonokai.toml +77 -0
  110. flock/themes/django.toml +77 -0
  111. flock/themes/djangorebornagain.toml +77 -0
  112. flock/themes/djangosmooth.toml +77 -0
  113. flock/themes/doom-peacock.toml +77 -0
  114. flock/themes/doomone.toml +77 -0
  115. flock/themes/dotgov.toml +77 -0
  116. flock/themes/dracula+.toml +77 -0
  117. flock/themes/dracula.toml +77 -0
  118. flock/themes/duckbones.toml +77 -0
  119. flock/themes/duotone-dark.toml +77 -0
  120. flock/themes/earthsong.toml +77 -0
  121. flock/themes/elemental.toml +77 -0
  122. flock/themes/elementary.toml +77 -0
  123. flock/themes/encom.toml +77 -0
  124. flock/themes/espresso-libre.toml +77 -0
  125. flock/themes/espresso.toml +77 -0
  126. flock/themes/everblush.toml +77 -0
  127. flock/themes/fahrenheit.toml +77 -0
  128. flock/themes/fairyfloss.toml +77 -0
  129. flock/themes/farmhouse-dark.toml +77 -0
  130. flock/themes/farmhouse-light.toml +77 -0
  131. flock/themes/fideloper.toml +77 -0
  132. flock/themes/firefly-traditional.toml +77 -0
  133. flock/themes/firefoxdev.toml +77 -0
  134. flock/themes/firewatch.toml +77 -0
  135. flock/themes/fishtank.toml +77 -0
  136. flock/themes/flat.toml +77 -0
  137. flock/themes/flatland.toml +77 -0
  138. flock/themes/flexoki-dark.toml +77 -0
  139. flock/themes/flexoki-light.toml +77 -0
  140. flock/themes/floraverse.toml +77 -0
  141. flock/themes/forestblue.toml +77 -0
  142. flock/themes/framer.toml +77 -0
  143. flock/themes/frontenddelight.toml +77 -0
  144. flock/themes/funforrest.toml +77 -0
  145. flock/themes/galaxy.toml +77 -0
  146. flock/themes/galizur.toml +77 -0
  147. flock/themes/github-dark.toml +77 -0
  148. flock/themes/github.toml +77 -0
  149. flock/themes/glacier.toml +77 -0
  150. flock/themes/grape.toml +77 -0
  151. flock/themes/grass.toml +77 -0
  152. flock/themes/grey-green.toml +77 -0
  153. flock/themes/gruber-darker.toml +77 -0
  154. flock/themes/gruvboxdark.toml +77 -0
  155. flock/themes/gruvboxdarkhard.toml +77 -0
  156. flock/themes/gruvboxlight.toml +77 -0
  157. flock/themes/guezwhoz.toml +77 -0
  158. flock/themes/hacktober.toml +77 -0
  159. flock/themes/hardcore.toml +77 -0
  160. flock/themes/harper.toml +77 -0
  161. flock/themes/hax0r-blue.toml +77 -0
  162. flock/themes/hax0r-gr33n.toml +77 -0
  163. flock/themes/hax0r-r3d.toml +77 -0
  164. flock/themes/highway.toml +77 -0
  165. flock/themes/hipster-green.toml +77 -0
  166. flock/themes/hivacruz.toml +77 -0
  167. flock/themes/homebrew.toml +77 -0
  168. flock/themes/hopscotch.256.toml +77 -0
  169. flock/themes/hopscotch.toml +77 -0
  170. flock/themes/hurtado.toml +77 -0
  171. flock/themes/hybrid.toml +77 -0
  172. flock/themes/ic-green-ppl.toml +77 -0
  173. flock/themes/ic-orange-ppl.toml +77 -0
  174. flock/themes/iceberg-dark.toml +77 -0
  175. flock/themes/iceberg-light.toml +77 -0
  176. flock/themes/idea.toml +77 -0
  177. flock/themes/idletoes.toml +77 -0
  178. flock/themes/ir-black.toml +77 -0
  179. flock/themes/iterm2-dark-background.toml +77 -0
  180. flock/themes/iterm2-default.toml +77 -0
  181. flock/themes/iterm2-light-background.toml +77 -0
  182. flock/themes/iterm2-pastel-dark-background.toml +77 -0
  183. flock/themes/iterm2-smoooooth.toml +77 -0
  184. flock/themes/iterm2-solarized-dark.toml +77 -0
  185. flock/themes/iterm2-solarized-light.toml +77 -0
  186. flock/themes/iterm2-tango-dark.toml +77 -0
  187. flock/themes/iterm2-tango-light.toml +77 -0
  188. flock/themes/jackie-brown.toml +77 -0
  189. flock/themes/japanesque.toml +77 -0
  190. flock/themes/jellybeans.toml +77 -0
  191. flock/themes/jetbrains-darcula.toml +77 -0
  192. flock/themes/jubi.toml +77 -0
  193. flock/themes/kanagawabones.toml +77 -0
  194. flock/themes/kibble.toml +77 -0
  195. flock/themes/kolorit.toml +77 -0
  196. flock/themes/konsolas.toml +77 -0
  197. flock/themes/kurokula.toml +77 -0
  198. flock/themes/lab-fox.toml +77 -0
  199. flock/themes/laser.toml +77 -0
  200. flock/themes/later-this-evening.toml +77 -0
  201. flock/themes/lavandula.toml +77 -0
  202. flock/themes/liquidcarbon.toml +77 -0
  203. flock/themes/liquidcarbontransparent.toml +77 -0
  204. flock/themes/liquidcarbontransparentinverse.toml +77 -0
  205. flock/themes/lovelace.toml +77 -0
  206. flock/themes/man-page.toml +77 -0
  207. flock/themes/mariana.toml +77 -0
  208. flock/themes/material.toml +77 -0
  209. flock/themes/materialdark.toml +77 -0
  210. flock/themes/materialdarker.toml +77 -0
  211. flock/themes/materialdesigncolors.toml +77 -0
  212. flock/themes/materialocean.toml +77 -0
  213. flock/themes/mathias.toml +77 -0
  214. flock/themes/matrix.toml +77 -0
  215. flock/themes/medallion.toml +77 -0
  216. flock/themes/mellifluous.toml +77 -0
  217. flock/themes/midnight-in-mojave.toml +77 -0
  218. flock/themes/mirage.toml +77 -0
  219. flock/themes/misterioso.toml +77 -0
  220. flock/themes/molokai.toml +77 -0
  221. flock/themes/monalisa.toml +77 -0
  222. flock/themes/monokai-remastered.toml +77 -0
  223. flock/themes/monokai-soda.toml +77 -0
  224. flock/themes/monokai-vivid.toml +77 -0
  225. flock/themes/n0tch2k.toml +77 -0
  226. flock/themes/neobones-dark.toml +77 -0
  227. flock/themes/neobones-light.toml +77 -0
  228. flock/themes/neon.toml +77 -0
  229. flock/themes/neopolitan.toml +77 -0
  230. flock/themes/neutron.toml +77 -0
  231. flock/themes/night-owlish-light.toml +77 -0
  232. flock/themes/nightfox.toml +77 -0
  233. flock/themes/nightlion-v1.toml +77 -0
  234. flock/themes/nightlion-v2.toml +77 -0
  235. flock/themes/niji.toml +77 -0
  236. flock/themes/nocturnal-winter.toml +77 -0
  237. flock/themes/nord-light.toml +77 -0
  238. flock/themes/nord.toml +77 -0
  239. flock/themes/novel.toml +77 -0
  240. flock/themes/nvimdark.toml +77 -0
  241. flock/themes/nvimlight.toml +77 -0
  242. flock/themes/obsidian.toml +77 -0
  243. flock/themes/ocean.toml +77 -0
  244. flock/themes/oceanic-next.toml +77 -0
  245. flock/themes/oceanicmaterial.toml +77 -0
  246. flock/themes/ollie.toml +77 -0
  247. flock/themes/onehalfdark.toml +77 -0
  248. flock/themes/onehalflight.toml +77 -0
  249. flock/themes/operator-mono-dark.toml +77 -0
  250. flock/themes/overnight-slumber.toml +77 -0
  251. flock/themes/oxocarbon.toml +77 -0
  252. flock/themes/palenighthc.toml +77 -0
  253. flock/themes/pandora.toml +77 -0
  254. flock/themes/paraiso-dark.toml +77 -0
  255. flock/themes/paulmillr.toml +77 -0
  256. flock/themes/pencildark.toml +77 -0
  257. flock/themes/pencillight.toml +77 -0
  258. flock/themes/peppermint.toml +77 -0
  259. flock/themes/piatto-light.toml +77 -0
  260. flock/themes/pnevma.toml +77 -0
  261. flock/themes/popping-and-locking.toml +77 -0
  262. flock/themes/primary.toml +77 -0
  263. flock/themes/pro-light.toml +77 -0
  264. flock/themes/pro.toml +77 -0
  265. flock/themes/purple-rain.toml +77 -0
  266. flock/themes/purplepeter.toml +77 -0
  267. flock/themes/rapture.toml +77 -0
  268. flock/themes/raycast-dark.toml +77 -0
  269. flock/themes/raycast-light.toml +77 -0
  270. flock/themes/rebecca.toml +77 -0
  271. flock/themes/red-alert.toml +77 -0
  272. flock/themes/red-planet.toml +77 -0
  273. flock/themes/red-sands.toml +77 -0
  274. flock/themes/relaxed.toml +77 -0
  275. flock/themes/retro.toml +77 -0
  276. flock/themes/rippedcasts.toml +77 -0
  277. flock/themes/rose-pine-dawn.toml +77 -0
  278. flock/themes/rose-pine-moon.toml +77 -0
  279. flock/themes/rose-pine.toml +77 -0
  280. flock/themes/rouge-2.toml +77 -0
  281. flock/themes/royal.toml +77 -0
  282. flock/themes/ryuuko.toml +77 -0
  283. flock/themes/sakura.toml +77 -0
  284. flock/themes/scarlet-protocol.toml +77 -0
  285. flock/themes/seafoam-pastel.toml +77 -0
  286. flock/themes/seashells.toml +77 -0
  287. flock/themes/seoulbones-dark.toml +77 -0
  288. flock/themes/seoulbones-light.toml +77 -0
  289. flock/themes/seti.toml +77 -0
  290. flock/themes/shades-of-purple.toml +77 -0
  291. flock/themes/shaman.toml +77 -0
  292. flock/themes/slate.toml +77 -0
  293. flock/themes/sleepyhollow.toml +77 -0
  294. flock/themes/smyck.toml +77 -0
  295. flock/themes/snazzy.toml +77 -0
  296. flock/themes/softserver.toml +77 -0
  297. flock/themes/solarized-darcula.toml +77 -0
  298. flock/themes/solarized-dark---patched.toml +77 -0
  299. flock/themes/solarized-dark-higher-contrast.toml +77 -0
  300. flock/themes/spacedust.toml +77 -0
  301. flock/themes/spacegray-eighties-dull.toml +77 -0
  302. flock/themes/spacegray-eighties.toml +77 -0
  303. flock/themes/spacegray.toml +77 -0
  304. flock/themes/spiderman.toml +77 -0
  305. flock/themes/spring.toml +77 -0
  306. flock/themes/square.toml +77 -0
  307. flock/themes/sublette.toml +77 -0
  308. flock/themes/subliminal.toml +77 -0
  309. flock/themes/sugarplum.toml +77 -0
  310. flock/themes/sundried.toml +77 -0
  311. flock/themes/symfonic.toml +77 -0
  312. flock/themes/synthwave-everything.toml +77 -0
  313. flock/themes/synthwave.toml +77 -0
  314. flock/themes/synthwavealpha.toml +77 -0
  315. flock/themes/tango-adapted.toml +77 -0
  316. flock/themes/tango-half-adapted.toml +77 -0
  317. flock/themes/teerb.toml +77 -0
  318. flock/themes/terafox.toml +77 -0
  319. flock/themes/terminal-basic.toml +77 -0
  320. flock/themes/thayer-bright.toml +77 -0
  321. flock/themes/the-hulk.toml +77 -0
  322. flock/themes/tinacious-design-(dark).toml +77 -0
  323. flock/themes/tinacious-design-(light).toml +77 -0
  324. flock/themes/tokyonight-day.toml +77 -0
  325. flock/themes/tokyonight-storm.toml +77 -0
  326. flock/themes/tokyonight.toml +77 -0
  327. flock/themes/tomorrow-night-blue.toml +77 -0
  328. flock/themes/tomorrow-night-bright.toml +77 -0
  329. flock/themes/tomorrow-night-burns.toml +77 -0
  330. flock/themes/tomorrow-night-eighties.toml +77 -0
  331. flock/themes/tomorrow-night.toml +77 -0
  332. flock/themes/tomorrow.toml +77 -0
  333. flock/themes/toychest.toml +77 -0
  334. flock/themes/treehouse.toml +77 -0
  335. flock/themes/twilight.toml +77 -0
  336. flock/themes/ubuntu.toml +77 -0
  337. flock/themes/ultradark.toml +77 -0
  338. flock/themes/ultraviolent.toml +77 -0
  339. flock/themes/underthesea.toml +77 -0
  340. flock/themes/unikitty.toml +77 -0
  341. flock/themes/urple.toml +77 -0
  342. flock/themes/vaughn.toml +77 -0
  343. flock/themes/vesper.toml +77 -0
  344. flock/themes/vibrantink.toml +77 -0
  345. flock/themes/vimbones.toml +77 -0
  346. flock/themes/violet-dark.toml +77 -0
  347. flock/themes/violet-light.toml +77 -0
  348. flock/themes/warmneon.toml +77 -0
  349. flock/themes/wez.toml +77 -0
  350. flock/themes/whimsy.toml +77 -0
  351. flock/themes/wildcherry.toml +77 -0
  352. flock/themes/wilmersdorf.toml +77 -0
  353. flock/themes/wombat.toml +77 -0
  354. flock/themes/wryan.toml +77 -0
  355. flock/themes/xcodedark.toml +77 -0
  356. flock/themes/xcodedarkhc.toml +77 -0
  357. flock/themes/xcodelight.toml +77 -0
  358. flock/themes/xcodelighthc.toml +77 -0
  359. flock/themes/xcodewwdc.toml +77 -0
  360. flock/themes/zenbones-dark.toml +77 -0
  361. flock/themes/zenbones-light.toml +77 -0
  362. flock/themes/zenbones.toml +77 -0
  363. flock/themes/zenburn.toml +77 -0
  364. flock/themes/zenburned.toml +77 -0
  365. flock/themes/zenwritten-dark.toml +77 -0
  366. flock/themes/zenwritten-light.toml +77 -0
  367. flock/workflow/activities.py +117 -115
  368. flock/workflow/agent_activities.py +24 -26
  369. flock/workflow/temporal_setup.py +38 -37
  370. flock/workflow/workflow.py +58 -53
  371. flock_core-0.2.1.dist-info/METADATA +287 -0
  372. flock_core-0.2.1.dist-info/RECORD +375 -0
  373. {flock_core-0.1.2.dist-info → flock_core-0.2.1.dist-info}/licenses/LICENSE +21 -21
  374. flock/agents/declarative_agent.py +0 -166
  375. flock/app/components/__init__.py +0 -14
  376. flock/app/components/charts/agent_workflow.py +0 -14
  377. flock/app/components/charts/core_architecture.py +0 -14
  378. flock/app/components/charts/tool_system.py +0 -14
  379. flock/app/components/history_grid.py +0 -168
  380. flock/app/components/history_grid_alt.py +0 -189
  381. flock/app/components/sidebar.py +0 -19
  382. flock/app/components/theme.py +0 -9
  383. flock/app/components/util.py +0 -18
  384. flock/app/hive_app.py +0 -118
  385. flock/app/html/d3.html +0 -179
  386. flock/app/modules/__init__.py +0 -12
  387. flock/app/modules/about.py +0 -17
  388. flock/app/modules/agent_detail.py +0 -70
  389. flock/app/modules/agent_list.py +0 -59
  390. flock/app/modules/playground.py +0 -322
  391. flock/app/modules/settings.py +0 -96
  392. flock/core/agent.py +0 -150
  393. flock/core/agent_registry.py +0 -162
  394. flock/core/context.py +0 -279
  395. flock/core/handoff/handoff_base.py +0 -12
  396. flock/core/logging/error_handler.py +0 -84
  397. flock/core/logging/formatters.py +0 -122
  398. flock/core/logging/handlers.py +0 -117
  399. flock/core/logging/logger.py +0 -107
  400. flock/core/serializable.py +0 -206
  401. flock_core-0.1.2.dist-info/METADATA +0 -476
  402. flock_core-0.1.2.dist-info/RECORD +0 -48
  403. flock_core-0.1.2.dist-info/entry_points.txt +0 -2
  404. /flock/{core/config/declarative_agent_config.py → workflow/__init__.py} +0 -0
  405. {flock_core-0.1.2.dist-info → flock_core-0.2.1.dist-info}/WHEEL +0 -0
@@ -1,37 +1,38 @@
1
- import asyncio
2
- import uuid
3
-
4
- from temporalio.client import Client
5
- from temporalio.worker import Worker
6
-
7
-
8
- async def create_temporal_client() -> Client:
9
- client = await Client.connect("localhost:7233")
10
- return client
11
-
12
- async def setup_worker(workflow,activity) -> Client:
13
- worker_client = await create_temporal_client()
14
- worker = Worker(worker_client, task_queue="flock-queue", workflows=[workflow], activities=[activity])
15
- asyncio.create_task(worker.run())
16
- await asyncio.sleep(1)
17
-
18
-
19
- async def run_worker(client: Client, task_queue: str, workflows, activities):
20
- worker = Worker(client, task_queue=task_queue, workflows=workflows, activities=activities)
21
- await worker.run()
22
-
23
-
24
- async def run_activity(client: Client, name: str, func, param):
25
- run_id = f"{name}_{uuid.uuid4().hex[:4]}"
26
-
27
- try:
28
- result = await client.execute_activity(
29
- func,
30
- param,
31
- id=run_id,
32
- task_queue="flock-queue",
33
- start_to_close_timeout=300, # e.g., 5 minutes
34
- )
35
- return result
36
- except Exception:
37
- raise
1
+ import asyncio
2
+ import uuid
3
+
4
+ from temporalio.client import Client
5
+ from temporalio.worker import Worker
6
+
7
+
8
+ async def create_temporal_client() -> Client:
9
+ client = await Client.connect("localhost:7233")
10
+ return client
11
+
12
+
13
+ async def setup_worker(workflow, activity) -> Client:
14
+ worker_client = await create_temporal_client()
15
+ worker = Worker(worker_client, task_queue="flock-queue", workflows=[workflow], activities=[activity])
16
+ asyncio.create_task(worker.run())
17
+ await asyncio.sleep(1)
18
+
19
+
20
+ async def run_worker(client: Client, task_queue: str, workflows, activities):
21
+ worker = Worker(client, task_queue=task_queue, workflows=workflows, activities=activities)
22
+ await worker.run()
23
+
24
+
25
+ async def run_activity(client: Client, name: str, func, param):
26
+ run_id = f"{name}_{uuid.uuid4().hex[:4]}"
27
+
28
+ try:
29
+ result = await client.execute_activity(
30
+ func,
31
+ param,
32
+ id=run_id,
33
+ task_queue="flock-queue",
34
+ start_to_close_timeout=300, # e.g., 5 minutes
35
+ )
36
+ return result
37
+ except Exception:
38
+ raise
@@ -1,53 +1,58 @@
1
- from datetime import timedelta
2
-
3
- from temporalio import workflow
4
-
5
- from flock.core.context import FlockContext
6
- from flock.core.logging import flock_logger
7
- from flock.workflow.activities import run_agent
8
-
9
- # Import activity, passing it through the sandbox without reloading the module
10
- with workflow.unsafe.imports_passed_through():
11
- from flock.workflow.activities import run_agent
12
-
13
-
14
- @workflow.defn
15
- class FlockWorkflow:
16
- def __init__(self) -> None:
17
- self.context = None
18
-
19
- @workflow.run
20
- async def run(self, context_dict: dict) -> dict:
21
- self.context = FlockContext.from_dict(context_dict)
22
- self.context.workflow_id = workflow.info().workflow_id
23
- self.context.workflow_timestamp = workflow.info().start_time.strftime("%Y-%m-%d %H:%M:%S")
24
-
25
- try:
26
- flock_logger.set_context(workflow_id=self.context.workflow_id)
27
- flock_logger.workflow_event(f"Starting workflow execution at {self.context.workflow_timestamp}")
28
-
29
- result = await workflow.execute_activity(
30
- run_agent, self.context, start_to_close_timeout=timedelta(minutes=5)
31
- )
32
-
33
- self.context.set_variable(
34
- "flock.result",
35
- {
36
- "result": result,
37
- "success": True,
38
- },
39
- )
40
-
41
- flock_logger.workflow_event("Workflow completed successfully")
42
- return result
43
-
44
- except Exception as e:
45
- flock_logger.error(f"Workflow execution failed: {e}")
46
- self.context.set_variable(
47
- "flock.result",
48
- {
49
- "result": f"Failed: {e}",
50
- "success": False,
51
- },
52
- )
53
- return self.context
1
+ from datetime import timedelta
2
+
3
+ from temporalio import workflow
4
+
5
+ from flock.core.context.context import FlockContext
6
+ from flock.core.logging.logging import get_logger
7
+ from flock.workflow.activities import run_agent
8
+
9
+ # Import activity, passing it through the sandbox without reloading the module
10
+
11
+
12
+ logger = get_logger("workflow")
13
+
14
+
15
+ @workflow.defn
16
+ class FlockWorkflow:
17
+ def __init__(self) -> None:
18
+ self.context = None
19
+
20
+ @workflow.run
21
+ async def run(self, context_dict: dict) -> dict:
22
+ self.context = FlockContext.from_dict(context_dict)
23
+ self.context.workflow_id = workflow.info().workflow_id
24
+ self.context.workflow_timestamp = workflow.info().start_time.strftime("%Y-%m-%d %H:%M:%S")
25
+
26
+ try:
27
+ logger.info(
28
+ "Starting workflow execution",
29
+ timestamp=self.context.workflow_timestamp,
30
+ )
31
+
32
+ result = await workflow.execute_activity(
33
+ run_agent,
34
+ self.context,
35
+ start_to_close_timeout=timedelta(minutes=5),
36
+ )
37
+
38
+ self.context.set_variable(
39
+ "flock.result",
40
+ {
41
+ "result": result,
42
+ "success": True,
43
+ },
44
+ )
45
+
46
+ logger.success("Workflow completed successfully")
47
+ return result
48
+
49
+ except Exception as e:
50
+ logger.exception("Workflow execution failed", error=str(e))
51
+ self.context.set_variable(
52
+ "flock.result",
53
+ {
54
+ "result": f"Failed: {e}",
55
+ "success": False,
56
+ },
57
+ )
58
+ return self.context
@@ -0,0 +1,287 @@
1
+ Metadata-Version: 2.4
2
+ Name: flock-core
3
+ Version: 0.2.1
4
+ Summary: Declarative LLM Orchestration at Scale
5
+ Author-email: Andre Ratzenberger <andre.ratzenberger@whiteduck.de>
6
+ License-File: LICENSE
7
+ Classifier: License :: OSI Approved :: MIT License
8
+ Classifier: Operating System :: OS Independent
9
+ Classifier: Programming Language :: Python :: 3
10
+ Requires-Python: >=3.10
11
+ Requires-Dist: cloudpickle>=3.1.1
12
+ Requires-Dist: devtools>=0.12.2
13
+ Requires-Dist: dspy==2.5.42
14
+ Requires-Dist: httpx>=0.28.1
15
+ Requires-Dist: loguru>=0.7.3
16
+ Requires-Dist: msgpack>=1.1.0
17
+ Requires-Dist: pydantic>=2.10.5
18
+ Requires-Dist: python-box>=7.3.2
19
+ Requires-Dist: rich>=13.9.4
20
+ Requires-Dist: temporalio>=1.9.0
21
+ Requires-Dist: toml>=0.10.2
22
+ Provides-Extra: all-tools
23
+ Requires-Dist: docling>=2.18.0; extra == 'all-tools'
24
+ Requires-Dist: markdownify>=0.14.1; extra == 'all-tools'
25
+ Requires-Dist: tavily-python>=0.5.0; extra == 'all-tools'
26
+ Provides-Extra: tools
27
+ Requires-Dist: markdownify>=0.14.1; extra == 'tools'
28
+ Requires-Dist: tavily-python>=0.5.0; extra == 'tools'
29
+ Description-Content-Type: text/markdown
30
+
31
+ <p align="center">
32
+ <img src="docs/img/flock.png" width="600"><br>
33
+ <h1 align="center">Flock</h1><br>
34
+
35
+
36
+ ## Overview
37
+
38
+ Flock is a framework for orchestrating LLM-powered agents. It leverages a **declarative approach** where you simply specify what each agent needs as input and what it produces as output—without having to write lengthy, brittle prompts. Under the hood, Flock transforms these declarations into robust workflows, using cutting-edge components such as Temporal and DSPy to handle fault tolerance, state management, and error recovery.
39
+
40
+
41
+
42
+ | Traditional Agent Frameworks 🙃 | Flock 🐤🐧🐓🦆 |
43
+ |------------------------------------------|--------------------------------------------------------------|
44
+ | 🤖 **Complex Prompt Engineering** | 📝 **Declarative Agent Definitions** |
45
+ | • Lengthy, brittle prompts | • Clear, concise input/output declarations |
46
+ | • Hard-to-tune and adapt | • No need for manual prompt engineering |
47
+ | | |
48
+ | 💥 **Fragile Execution** | ⚡ **Robust & Scalable** |
49
+ | • Single failure can break the system | • Fault-tolerant with built-in retries and error handling |
50
+ | • Difficult to monitor and recover | • Automatic recovery via Temporal workflow integration |
51
+ | | |
52
+ | 🏗️ **Rigid Workflows** | 🔄 **Flexible Orchestration** |
53
+ | • Limited adaptability | • Dynamic agent chaining and hand-offs |
54
+ | • Hard to scale and parallelize | • Modular, concurrent, and batch processing |
55
+ | | |
56
+
57
+
58
+ ## Key Innovations
59
+
60
+ - **Declarative Agent System:**
61
+ Define agents by declaring their input/output interfaces (with type hints and human-readable descriptions) using a concise syntax.
62
+
63
+
64
+ <img src="docs/img/examples/01_01.png" width="300"><br>
65
+
66
+
67
+ Example syntax:
68
+ ```python
69
+ input = "query: str|The search query, context: dict|The full conversation context"
70
+ output = "idea: str|The generated software project idea"
71
+ ```
72
+ The framework automatically extracts type and description details, builds precise prompts, and configures the underlying LLM.
73
+
74
+ - **Lifecycle Hooks:**
75
+ Each agent (via the new `FlockAgent` base class) supports lifecycle hooks such as `initialize()`, `terminate()`, and `on_error()`. This ensures that agents can perform setup, cleanup, and robust error handling—all without cluttering the main business logic.
76
+
77
+ - **Fault Tolerance & Temporal Integration:**
78
+ Flock is built with production readiness in mind. By integrating with Temporal, your agent workflows enjoy automatic retries, durable state management, and resilience against failures. This means that a single agent crash won't bring down your entire system.
79
+
80
+ - **Type Safety and Clear Contracts:**
81
+ Agents are implemented as Pydantic models. This provides automatic JSON serialization/deserialization, strong typing, and an explicit contract for inputs and outputs. Testing, validation, and integration become straightforward.
82
+
83
+ - **DSPy Integration:**
84
+ Flock leverages DSPy for managing LLM interactions. The framework constructs clean signature strings and updates field metadata so that DSPy can include detailed instructions and context for each agent call.
85
+
86
+ ## Quick Start
87
+
88
+ Below is a simple example of how to create and run an agent with Flock:
89
+
90
+ ```python
91
+ import asyncio
92
+ from flock.core.flock import Flock
93
+ from flock.core.agents.flock_agent import FlockAgent
94
+ from flock.core.tools import basic_tools
95
+
96
+ async def main():
97
+ # Initialize Flock
98
+ flock = Flock(model="openai/gpt-4o")
99
+
100
+ # Create an agent with clear input/output declarations and optional tools.
101
+ idea_agent = FlockAgent(
102
+ name="idea_agent",
103
+ input="query: str|The search query, context: dict|Additional context",
104
+ output="a_fun_software_project_idea: str|The generated software project idea",
105
+ tools=[basic_tools.web_search_tavily],
106
+ )
107
+ flock.add_agent(idea_agent)
108
+
109
+ # Run the agent locally (with built-in debugging/logging)
110
+ result = await flock.run_async(
111
+ start_agent=idea_agent,
112
+ input="build a revolutionary app",
113
+ local_debug=True
114
+ )
115
+ print(result)
116
+
117
+ if __name__ == "__main__":
118
+ asyncio.run(main())
119
+ ```
120
+
121
+ ## Advanced Usage
122
+
123
+ ### Agents with Lifecycle Hooks
124
+
125
+ Customize behavior by overriding lifecycle methods:
126
+
127
+ - **initialize(inputs):** Set up resources, validate inputs, or log pre-run state.
128
+ - **terminate(inputs, result):** Clean up resources, log output, or perform post-run actions.
129
+ - **on_error(error, inputs):** Handle exceptions gracefully, log detailed error information, and trigger recovery logic.
130
+
131
+ ### Agents with Tools
132
+
133
+ Agents can seamlessly integrate external tools for enhanced functionality:
134
+
135
+ ```python
136
+ from flock.core.tools import basic_tools
137
+
138
+ research_agent = FlockAgent(
139
+ name="research_agent",
140
+ input="research_topic: str|Topic to investigate",
141
+ output="research_result: str|The outcome of the research",
142
+ tools=[basic_tools.web_search_tavily],
143
+ )
144
+ ```
145
+
146
+ ### Agent Chaining
147
+
148
+ Chain agents together to create complex workflows:
149
+
150
+ ```python
151
+ # Define the first agent in the chain.
152
+ project_plan_agent = FlockAgent(
153
+ name="project_plan_agent",
154
+ input="project_idea: str|Initial project idea",
155
+ output="plan_headings: list[str]|Headings for the project plan",
156
+ tools=[basic_tools.web_search_tavily, basic_tools.code_eval],
157
+ )
158
+
159
+ # Define a second agent that builds on the output of the first.
160
+ content_agent = FlockAgent(
161
+ name="content_agent",
162
+ input="context: dict|Global context, project_plan_agent.plan_headings: list[str]|Plan headings",
163
+ output="project_plan_content: str|Detailed content for the plan",
164
+ )
165
+
166
+ # Set up hand-off from the first agent to the second.
167
+ project_plan_agent.hand_off = content_agent
168
+ ```
169
+
170
+ ### Temporal Workflow Integration
171
+
172
+ Flock supports execution on Temporal, ensuring robust, fault-tolerant workflows:
173
+
174
+ - **Durability:** Persistent state management even in the case of failures.
175
+ - **Retries & Error Handling:** Automatic recovery via Temporal's built-in mechanisms.
176
+ - **Scalability:** Seamless orchestration of distributed agent workflows.
177
+
178
+ ## Architecture
179
+
180
+ TODO: Insert charts
181
+
182
+ ## Requirements
183
+
184
+ - Python 3.12+
185
+ - (Optional) Temporal server running locally for production-grade workflow features
186
+ - API keys for integrated services
187
+
188
+
189
+ recommended services
190
+ ```bash
191
+ export OPENAI_API_KEY=sk-proj-
192
+ export TAVILY_API_KEY=tvly-
193
+ ```
194
+
195
+ or in `.env`
196
+
197
+ For LLM interaction LiteLLM is getting used. Please refer to its documentation on how to easily use other models and/or provider.
198
+
199
+ https://docs.litellm.ai/docs/providers
200
+
201
+ ## Installation
202
+
203
+ ```bash
204
+ pip install flock-core
205
+ ```
206
+
207
+ if you want to use the integrated tools
208
+
209
+ ```bash
210
+ pip install flock-core[tools]
211
+ ```
212
+
213
+ and for the docling tools
214
+
215
+ ```bash
216
+ pip install flock-core[all-tools]
217
+ ```
218
+
219
+ ## Development
220
+
221
+
222
+ 1. **Clone the Repository:**
223
+
224
+ ```bash
225
+ git clone https://github.com/yourusername/flock.git
226
+ cd flock
227
+ ```
228
+
229
+ 2. **Create a Virtual Environment and sync all packages:**
230
+
231
+ ```bash
232
+ uv sync --all-groups --all-extras
233
+ ```
234
+
235
+ 3. **Install local version of flock:**
236
+
237
+ ```bash
238
+ uv build && uv pip install -e .
239
+ ```
240
+
241
+
242
+ ## Contributing
243
+
244
+ Contributions are welcome! Please submit Pull Requests and open issues on GitHub.
245
+
246
+ ## License
247
+
248
+ This project is licensed under the terms of the LICENSE file included in the repository.
249
+
250
+ ## Acknowledgments
251
+
252
+ - Built with [DSPy](https://github.com/stanfordnlp/dspy)
253
+ - Uses [Temporal](https://temporal.io/) for workflow management
254
+ - Integrates with [Tavily](https://tavily.com/) for web search capabilities
255
+ - Web interface built with FastHTML and MonsterUI
256
+
257
+ ## Evolution & Future Direction
258
+
259
+ Flock was created to overcome the limitations of traditional agent frameworks. Key design goals include:
260
+
261
+ ### Declarative Over Prompt Engineering
262
+
263
+ - **Simplify Agent Definitions:**
264
+ Focus on clear input/output contracts rather than long, complex prompts.
265
+ - **Model Agnostic:**
266
+ Change LLM backends without altering agent logic.
267
+ - **Improved Testability:**
268
+ Clear, structured interfaces facilitate unit testing and validation.
269
+
270
+ ### Robust, Production-Grade Orchestration
271
+
272
+ - **Fault Tolerance:**
273
+ Leveraging Temporal for automatic retries, durable state, and robust error handling.
274
+ - **Scalability:**
275
+ Support for concurrent, batch, and distributed workflows.
276
+ - **Observability:**
277
+ Built-in logging and monitoring for real-time insights into workflow execution.
278
+
279
+ ### Future Enhancements
280
+
281
+ - Expanded type system for richer agent interactions
282
+ - Enhanced tool ecosystem and custom integrations
283
+ - Advanced monitoring, debugging, and performance metrics
284
+ - Extended testing frameworks and validation tools
285
+
286
+ Join us in building the next generation of reliable, production-ready AI agent systems!
287
+