flock-core 0.5.0b27__py3-none-any.whl → 0.5.0b50__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 (357) 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/{core/util → helper}/cli_helper.py +4 -3
  17. flock/{core/logging → logging}/__init__.py +2 -3
  18. flock/{core/logging → logging}/formatters/enum_builder.py +3 -4
  19. flock/{core/logging → logging}/formatters/theme_builder.py +19 -44
  20. flock/{core/logging → logging}/formatters/themed_formatter.py +69 -115
  21. flock/{core/logging → logging}/logging.py +77 -61
  22. flock/{core/logging → logging}/telemetry.py +20 -26
  23. flock/{core/logging → logging}/telemetry_exporter/base_exporter.py +2 -2
  24. flock/{core/logging → logging}/telemetry_exporter/file_exporter.py +6 -9
  25. flock/{core/logging → logging}/telemetry_exporter/sqlite_exporter.py +2 -3
  26. flock/{core/logging → logging}/trace_and_logged.py +20 -24
  27. flock/mcp/__init__.py +91 -0
  28. flock/{core/mcp/mcp_client.py → mcp/client.py} +103 -154
  29. flock/{core/mcp/mcp_config.py → mcp/config.py} +62 -117
  30. flock/mcp/manager.py +255 -0
  31. flock/mcp/servers/sse/__init__.py +1 -1
  32. flock/mcp/servers/sse/flock_sse_server.py +11 -53
  33. flock/mcp/servers/stdio/__init__.py +1 -1
  34. flock/mcp/servers/stdio/flock_stdio_server.py +8 -48
  35. flock/mcp/servers/streamable_http/flock_streamable_http_server.py +17 -62
  36. flock/mcp/servers/websockets/flock_websocket_server.py +7 -40
  37. flock/{core/mcp/flock_mcp_tool.py → mcp/tool.py} +16 -26
  38. flock/mcp/types/__init__.py +42 -0
  39. flock/{core/mcp → mcp}/types/callbacks.py +9 -15
  40. flock/{core/mcp → mcp}/types/factories.py +7 -6
  41. flock/{core/mcp → mcp}/types/handlers.py +13 -18
  42. flock/{core/mcp → mcp}/types/types.py +70 -74
  43. flock/{core/mcp → mcp}/util/helpers.py +1 -1
  44. flock/orchestrator.py +645 -0
  45. flock/registry.py +148 -0
  46. flock/runtime.py +262 -0
  47. flock/service.py +140 -0
  48. flock/store.py +69 -0
  49. flock/subscription.py +111 -0
  50. flock/themes/andromeda.toml +1 -1
  51. flock/themes/apple-system-colors.toml +1 -1
  52. flock/themes/arcoiris.toml +1 -1
  53. flock/themes/atomonelight.toml +1 -1
  54. flock/themes/ayu copy.toml +1 -1
  55. flock/themes/ayu-light.toml +1 -1
  56. flock/themes/belafonte-day.toml +1 -1
  57. flock/themes/belafonte-night.toml +1 -1
  58. flock/themes/blulocodark.toml +1 -1
  59. flock/themes/breeze.toml +1 -1
  60. flock/themes/broadcast.toml +1 -1
  61. flock/themes/brogrammer.toml +1 -1
  62. flock/themes/builtin-dark.toml +1 -1
  63. flock/themes/builtin-pastel-dark.toml +1 -1
  64. flock/themes/catppuccin-latte.toml +1 -1
  65. flock/themes/catppuccin-macchiato.toml +1 -1
  66. flock/themes/catppuccin-mocha.toml +1 -1
  67. flock/themes/cga.toml +1 -1
  68. flock/themes/chalk.toml +1 -1
  69. flock/themes/ciapre.toml +1 -1
  70. flock/themes/coffee-theme.toml +1 -1
  71. flock/themes/cyberpunkscarletprotocol.toml +1 -1
  72. flock/themes/dark+.toml +1 -1
  73. flock/themes/darkermatrix.toml +1 -1
  74. flock/themes/darkside.toml +1 -1
  75. flock/themes/desert.toml +1 -1
  76. flock/themes/django.toml +1 -1
  77. flock/themes/djangosmooth.toml +1 -1
  78. flock/themes/doomone.toml +1 -1
  79. flock/themes/dotgov.toml +1 -1
  80. flock/themes/dracula+.toml +1 -1
  81. flock/themes/duckbones.toml +1 -1
  82. flock/themes/encom.toml +1 -1
  83. flock/themes/espresso.toml +1 -1
  84. flock/themes/everblush.toml +1 -1
  85. flock/themes/fairyfloss.toml +1 -1
  86. flock/themes/fideloper.toml +1 -1
  87. flock/themes/fishtank.toml +1 -1
  88. flock/themes/flexoki-light.toml +1 -1
  89. flock/themes/floraverse.toml +1 -1
  90. flock/themes/framer.toml +1 -1
  91. flock/themes/galizur.toml +1 -1
  92. flock/themes/github.toml +1 -1
  93. flock/themes/grass.toml +1 -1
  94. flock/themes/grey-green.toml +1 -1
  95. flock/themes/gruvboxlight.toml +1 -1
  96. flock/themes/guezwhoz.toml +1 -1
  97. flock/themes/harper.toml +1 -1
  98. flock/themes/hax0r-blue.toml +1 -1
  99. flock/themes/hopscotch.256.toml +1 -1
  100. flock/themes/ic-green-ppl.toml +1 -1
  101. flock/themes/iceberg-dark.toml +1 -1
  102. flock/themes/japanesque.toml +1 -1
  103. flock/themes/jubi.toml +1 -1
  104. flock/themes/kibble.toml +1 -1
  105. flock/themes/kolorit.toml +1 -1
  106. flock/themes/kurokula.toml +1 -1
  107. flock/themes/materialdesigncolors.toml +1 -1
  108. flock/themes/matrix.toml +1 -1
  109. flock/themes/mellifluous.toml +1 -1
  110. flock/themes/midnight-in-mojave.toml +1 -1
  111. flock/themes/monokai-remastered.toml +1 -1
  112. flock/themes/monokai-soda.toml +1 -1
  113. flock/themes/neon.toml +1 -1
  114. flock/themes/neopolitan.toml +1 -1
  115. flock/themes/nord-light.toml +1 -1
  116. flock/themes/ocean.toml +1 -1
  117. flock/themes/onehalfdark.toml +1 -1
  118. flock/themes/onehalflight.toml +1 -1
  119. flock/themes/palenighthc.toml +1 -1
  120. flock/themes/paulmillr.toml +1 -1
  121. flock/themes/pencildark.toml +1 -1
  122. flock/themes/pnevma.toml +1 -1
  123. flock/themes/purple-rain.toml +1 -1
  124. flock/themes/purplepeter.toml +1 -1
  125. flock/themes/raycast-dark.toml +1 -1
  126. flock/themes/red-sands.toml +1 -1
  127. flock/themes/relaxed.toml +1 -1
  128. flock/themes/retro.toml +1 -1
  129. flock/themes/rose-pine.toml +1 -1
  130. flock/themes/royal.toml +1 -1
  131. flock/themes/ryuuko.toml +1 -1
  132. flock/themes/sakura.toml +1 -1
  133. flock/themes/scarlet-protocol.toml +1 -1
  134. flock/themes/seoulbones-dark.toml +1 -1
  135. flock/themes/shades-of-purple.toml +1 -1
  136. flock/themes/smyck.toml +1 -1
  137. flock/themes/softserver.toml +1 -1
  138. flock/themes/solarized-darcula.toml +1 -1
  139. flock/themes/square.toml +1 -1
  140. flock/themes/sugarplum.toml +1 -1
  141. flock/themes/thayer-bright.toml +1 -1
  142. flock/themes/tokyonight.toml +1 -1
  143. flock/themes/tomorrow.toml +1 -1
  144. flock/themes/ubuntu.toml +1 -1
  145. flock/themes/ultradark.toml +1 -1
  146. flock/themes/ultraviolent.toml +1 -1
  147. flock/themes/unikitty.toml +1 -1
  148. flock/themes/urple.toml +1 -1
  149. flock/themes/vesper.toml +1 -1
  150. flock/themes/vimbones.toml +1 -1
  151. flock/themes/wildcherry.toml +1 -1
  152. flock/themes/wilmersdorf.toml +1 -1
  153. flock/themes/wryan.toml +1 -1
  154. flock/themes/xcodedarkhc.toml +1 -1
  155. flock/themes/xcodelight.toml +1 -1
  156. flock/themes/zenbones-light.toml +1 -1
  157. flock/themes/zenwritten-dark.toml +1 -1
  158. flock/utilities.py +301 -0
  159. flock/{components/utility → utility}/output_utility_component.py +68 -53
  160. flock/visibility.py +107 -0
  161. flock_core-0.5.0b50.dist-info/METADATA +747 -0
  162. flock_core-0.5.0b50.dist-info/RECORD +398 -0
  163. flock_core-0.5.0b50.dist-info/entry_points.txt +2 -0
  164. {flock_core-0.5.0b27.dist-info → flock_core-0.5.0b50.dist-info}/licenses/LICENSE +1 -1
  165. flock/adapter/__init__.py +0 -14
  166. flock/adapter/azure_adapter.py +0 -68
  167. flock/adapter/chroma_adapter.py +0 -73
  168. flock/adapter/faiss_adapter.py +0 -97
  169. flock/adapter/pinecone_adapter.py +0 -51
  170. flock/adapter/vector_base.py +0 -47
  171. flock/cli/assets/release_notes.md +0 -140
  172. flock/cli/config.py +0 -8
  173. flock/cli/constants.py +0 -36
  174. flock/cli/create_agent.py +0 -1
  175. flock/cli/create_flock.py +0 -280
  176. flock/cli/execute_flock.py +0 -620
  177. flock/cli/load_agent.py +0 -1
  178. flock/cli/load_examples.py +0 -1
  179. flock/cli/load_flock.py +0 -192
  180. flock/cli/load_release_notes.py +0 -20
  181. flock/cli/loaded_flock_cli.py +0 -254
  182. flock/cli/manage_agents.py +0 -459
  183. flock/cli/registry_management.py +0 -889
  184. flock/cli/runner.py +0 -41
  185. flock/cli/settings.py +0 -857
  186. flock/cli/utils.py +0 -135
  187. flock/cli/view_results.py +0 -29
  188. flock/cli/yaml_editor.py +0 -396
  189. flock/components/__init__.py +0 -30
  190. flock/components/evaluation/__init__.py +0 -9
  191. flock/components/evaluation/declarative_evaluation_component.py +0 -606
  192. flock/components/routing/__init__.py +0 -15
  193. flock/components/routing/conditional_routing_component.py +0 -494
  194. flock/components/routing/default_routing_component.py +0 -103
  195. flock/components/routing/llm_routing_component.py +0 -206
  196. flock/components/utility/__init__.py +0 -15
  197. flock/components/utility/memory_utility_component.py +0 -550
  198. flock/components/utility/metrics_utility_component.py +0 -700
  199. flock/config.py +0 -61
  200. flock/core/__init__.py +0 -110
  201. flock/core/agent/__init__.py +0 -16
  202. flock/core/agent/default_agent.py +0 -180
  203. flock/core/agent/flock_agent_components.py +0 -104
  204. flock/core/agent/flock_agent_execution.py +0 -101
  205. flock/core/agent/flock_agent_integration.py +0 -260
  206. flock/core/agent/flock_agent_lifecycle.py +0 -186
  207. flock/core/agent/flock_agent_serialization.py +0 -381
  208. flock/core/api/__init__.py +0 -10
  209. flock/core/api/custom_endpoint.py +0 -45
  210. flock/core/api/endpoints.py +0 -254
  211. flock/core/api/main.py +0 -162
  212. flock/core/api/models.py +0 -97
  213. flock/core/api/run_store.py +0 -224
  214. flock/core/api/runner.py +0 -44
  215. flock/core/api/service.py +0 -214
  216. flock/core/component/__init__.py +0 -15
  217. flock/core/component/agent_component_base.py +0 -309
  218. flock/core/component/evaluation_component.py +0 -62
  219. flock/core/component/routing_component.py +0 -74
  220. flock/core/component/utility_component.py +0 -69
  221. flock/core/config/flock_agent_config.py +0 -58
  222. flock/core/config/scheduled_agent_config.py +0 -40
  223. flock/core/context/context.py +0 -213
  224. flock/core/context/context_manager.py +0 -37
  225. flock/core/context/context_vars.py +0 -10
  226. flock/core/evaluation/utils.py +0 -396
  227. flock/core/execution/batch_executor.py +0 -369
  228. flock/core/execution/evaluation_executor.py +0 -438
  229. flock/core/execution/local_executor.py +0 -31
  230. flock/core/execution/opik_executor.py +0 -103
  231. flock/core/execution/temporal_executor.py +0 -164
  232. flock/core/flock.py +0 -634
  233. flock/core/flock_agent.py +0 -336
  234. flock/core/flock_factory.py +0 -551
  235. flock/core/flock_scheduler.py +0 -166
  236. flock/core/flock_server_manager.py +0 -136
  237. flock/core/interpreter/python_interpreter.py +0 -689
  238. flock/core/mcp/__init__.py +0 -1
  239. flock/core/mcp/flock_mcp_server.py +0 -680
  240. flock/core/mcp/mcp_client_manager.py +0 -201
  241. flock/core/mcp/types/__init__.py +0 -1
  242. flock/core/mixin/dspy_integration.py +0 -403
  243. flock/core/mixin/prompt_parser.py +0 -125
  244. flock/core/orchestration/__init__.py +0 -15
  245. flock/core/orchestration/flock_batch_processor.py +0 -94
  246. flock/core/orchestration/flock_evaluator.py +0 -113
  247. flock/core/orchestration/flock_execution.py +0 -295
  248. flock/core/orchestration/flock_initialization.py +0 -149
  249. flock/core/orchestration/flock_server_manager.py +0 -67
  250. flock/core/orchestration/flock_web_server.py +0 -117
  251. flock/core/registry/__init__.py +0 -45
  252. flock/core/registry/agent_registry.py +0 -69
  253. flock/core/registry/callable_registry.py +0 -139
  254. flock/core/registry/component_discovery.py +0 -142
  255. flock/core/registry/component_registry.py +0 -64
  256. flock/core/registry/config_mapping.py +0 -64
  257. flock/core/registry/decorators.py +0 -137
  258. flock/core/registry/registry_hub.py +0 -205
  259. flock/core/registry/server_registry.py +0 -57
  260. flock/core/registry/type_registry.py +0 -86
  261. flock/core/serialization/__init__.py +0 -13
  262. flock/core/serialization/callable_registry.py +0 -52
  263. flock/core/serialization/flock_serializer.py +0 -832
  264. flock/core/serialization/json_encoder.py +0 -41
  265. flock/core/serialization/secure_serializer.py +0 -175
  266. flock/core/serialization/serializable.py +0 -342
  267. flock/core/serialization/serialization_utils.py +0 -412
  268. flock/core/util/file_path_utils.py +0 -223
  269. flock/core/util/hydrator.py +0 -309
  270. flock/core/util/input_resolver.py +0 -164
  271. flock/core/util/loader.py +0 -59
  272. flock/core/util/splitter.py +0 -219
  273. flock/di.py +0 -27
  274. flock/platform/docker_tools.py +0 -49
  275. flock/platform/jaeger_install.py +0 -86
  276. flock/webapp/__init__.py +0 -1
  277. flock/webapp/app/__init__.py +0 -0
  278. flock/webapp/app/api/__init__.py +0 -0
  279. flock/webapp/app/api/agent_management.py +0 -241
  280. flock/webapp/app/api/execution.py +0 -709
  281. flock/webapp/app/api/flock_management.py +0 -129
  282. flock/webapp/app/api/registry_viewer.py +0 -30
  283. flock/webapp/app/chat.py +0 -665
  284. flock/webapp/app/config.py +0 -104
  285. flock/webapp/app/dependencies.py +0 -117
  286. flock/webapp/app/main.py +0 -1070
  287. flock/webapp/app/middleware.py +0 -113
  288. flock/webapp/app/models_ui.py +0 -7
  289. flock/webapp/app/services/__init__.py +0 -0
  290. flock/webapp/app/services/feedback_file_service.py +0 -363
  291. flock/webapp/app/services/flock_service.py +0 -337
  292. flock/webapp/app/services/sharing_models.py +0 -81
  293. flock/webapp/app/services/sharing_store.py +0 -598
  294. flock/webapp/app/templates/theme_mapper.html +0 -326
  295. flock/webapp/app/theme_mapper.py +0 -812
  296. flock/webapp/app/utils.py +0 -85
  297. flock/webapp/run.py +0 -215
  298. flock/webapp/static/css/chat.css +0 -301
  299. flock/webapp/static/css/components.css +0 -167
  300. flock/webapp/static/css/header.css +0 -39
  301. flock/webapp/static/css/layout.css +0 -46
  302. flock/webapp/static/css/sidebar.css +0 -127
  303. flock/webapp/static/css/two-pane.css +0 -48
  304. flock/webapp/templates/base.html +0 -200
  305. flock/webapp/templates/chat.html +0 -152
  306. flock/webapp/templates/chat_settings.html +0 -19
  307. flock/webapp/templates/flock_editor.html +0 -16
  308. flock/webapp/templates/index.html +0 -12
  309. flock/webapp/templates/partials/_agent_detail_form.html +0 -93
  310. flock/webapp/templates/partials/_agent_list.html +0 -18
  311. flock/webapp/templates/partials/_agent_manager_view.html +0 -51
  312. flock/webapp/templates/partials/_agent_tools_checklist.html +0 -14
  313. flock/webapp/templates/partials/_chat_container.html +0 -15
  314. flock/webapp/templates/partials/_chat_messages.html +0 -57
  315. flock/webapp/templates/partials/_chat_settings_form.html +0 -85
  316. flock/webapp/templates/partials/_create_flock_form.html +0 -50
  317. flock/webapp/templates/partials/_dashboard_flock_detail.html +0 -17
  318. flock/webapp/templates/partials/_dashboard_flock_file_list.html +0 -16
  319. flock/webapp/templates/partials/_dashboard_flock_properties_preview.html +0 -28
  320. flock/webapp/templates/partials/_dashboard_upload_flock_form.html +0 -16
  321. flock/webapp/templates/partials/_dynamic_input_form_content.html +0 -22
  322. flock/webapp/templates/partials/_env_vars_table.html +0 -23
  323. flock/webapp/templates/partials/_execution_form.html +0 -118
  324. flock/webapp/templates/partials/_execution_view_container.html +0 -28
  325. flock/webapp/templates/partials/_flock_file_list.html +0 -23
  326. flock/webapp/templates/partials/_flock_properties_form.html +0 -52
  327. flock/webapp/templates/partials/_flock_upload_form.html +0 -16
  328. flock/webapp/templates/partials/_header_flock_status.html +0 -5
  329. flock/webapp/templates/partials/_load_manager_view.html +0 -49
  330. flock/webapp/templates/partials/_registry_table.html +0 -25
  331. flock/webapp/templates/partials/_registry_viewer_content.html +0 -70
  332. flock/webapp/templates/partials/_results_display.html +0 -78
  333. flock/webapp/templates/partials/_settings_env_content.html +0 -9
  334. flock/webapp/templates/partials/_settings_theme_content.html +0 -14
  335. flock/webapp/templates/partials/_settings_view.html +0 -36
  336. flock/webapp/templates/partials/_share_chat_link_snippet.html +0 -11
  337. flock/webapp/templates/partials/_share_link_snippet.html +0 -35
  338. flock/webapp/templates/partials/_sidebar.html +0 -74
  339. flock/webapp/templates/partials/_streaming_results_container.html +0 -195
  340. flock/webapp/templates/partials/_structured_data_view.html +0 -40
  341. flock/webapp/templates/partials/_theme_preview.html +0 -36
  342. flock/webapp/templates/registry_viewer.html +0 -84
  343. flock/webapp/templates/shared_run_page.html +0 -140
  344. flock/workflow/__init__.py +0 -0
  345. flock/workflow/activities.py +0 -196
  346. flock/workflow/agent_activities.py +0 -24
  347. flock/workflow/agent_execution_activity.py +0 -202
  348. flock/workflow/flock_workflow.py +0 -214
  349. flock/workflow/temporal_config.py +0 -96
  350. flock/workflow/temporal_setup.py +0 -68
  351. flock_core-0.5.0b27.dist-info/METADATA +0 -274
  352. flock_core-0.5.0b27.dist-info/RECORD +0 -559
  353. flock_core-0.5.0b27.dist-info/entry_points.txt +0 -2
  354. /flock/{core/logging → logging}/formatters/themes.py +0 -0
  355. /flock/{core/logging → logging}/span_middleware/baggage_span_processor.py +0 -0
  356. /flock/{core/mcp → mcp}/util/__init__.py +0 -0
  357. {flock_core-0.5.0b27.dist-info → flock_core-0.5.0b50.dist-info}/WHEEL +0 -0
@@ -1,551 +0,0 @@
1
- """Factory for creating pre-configured Flock agents.
2
-
3
- Deprecated: Prefer explicit `DefaultAgent` class for new code. This factory
4
- remains as a thin adapter to ease migration and preserve backward compatibility.
5
- """
6
-
7
- import os
8
- import warnings
9
- from collections.abc import Callable
10
- from pathlib import Path
11
- from typing import Any, Literal
12
-
13
- import httpx
14
- from pydantic import AnyUrl, BaseModel, ConfigDict, Field, FileUrl
15
-
16
- from flock.components.utility.metrics_utility_component import (
17
- MetricsUtilityComponent,
18
- MetricsUtilityConfig,
19
- )
20
- from flock.core.agent.default_agent import DefaultAgent
21
-
22
- # New unified components imported locally to avoid circular imports
23
- from flock.core.config.scheduled_agent_config import ScheduledAgentConfig
24
- from flock.core.flock_agent import DynamicStr, FlockAgent
25
- from flock.core.logging.formatters.themes import OutputTheme
26
- from flock.core.logging.logging import get_logger
27
- from flock.core.mcp.flock_mcp_server import FlockMCPServer
28
- from flock.core.mcp.mcp_config import (
29
- FlockMCPCachingConfiguration,
30
- FlockMCPCallbackConfiguration,
31
- FlockMCPFeatureConfiguration,
32
- )
33
- from flock.core.mcp.types.types import (
34
- FlockListRootsMCPCallback,
35
- FlockLoggingMCPCallback,
36
- FlockMessageHandlerMCPCallback,
37
- FlockSamplingMCPCallback,
38
- MCPRoot,
39
- SseServerParameters,
40
- StdioServerParameters,
41
- StreamableHttpServerParameters,
42
- WebsocketServerParameters,
43
- )
44
- from flock.mcp.servers.sse.flock_sse_server import (
45
- FlockSSEConfig,
46
- FlockSSEConnectionConfig,
47
- FlockSSEServer,
48
- )
49
- from flock.mcp.servers.stdio.flock_stdio_server import (
50
- FlockMCPStdioServer,
51
- FlockStdioConfig,
52
- FlockStdioConnectionConfig,
53
- )
54
- from flock.mcp.servers.streamable_http.flock_streamable_http_server import (
55
- FlockStreamableHttpConfig,
56
- FlockStreamableHttpConnectionConfig,
57
- FlockStreamableHttpServer,
58
- )
59
- from flock.mcp.servers.websockets.flock_websocket_server import (
60
- FlockWSConfig,
61
- FlockWSConnectionConfig,
62
- FlockWSServer,
63
- )
64
- from flock.workflow.temporal_config import TemporalActivityConfig
65
-
66
- LoggingLevel = Literal[
67
- "debug",
68
- "info",
69
- "notice",
70
- "warning",
71
- "error",
72
- "critical",
73
- "alert",
74
- "emergency",
75
- ]
76
-
77
-
78
- class FlockFactory:
79
- """Factory for creating pre-configured Flock agents and pre-configured Flock MCPServers with common module setups."""
80
-
81
- # Classes for type-hints.
82
- class StdioParams(BaseModel):
83
- """Factory-Params for Stdio-Servers."""
84
-
85
- command: str = Field(
86
- ...,
87
- description="Command for starting the local script. (e.g. 'uvx', 'bun', 'npx', 'bunx', etc.)",
88
- )
89
-
90
- args: list[str] = Field(
91
- ...,
92
- description="Arguments for starting the local script. (e.g. ['run', './mcp-server.py'])",
93
- )
94
-
95
- env: dict[str, Any] | None = Field(
96
- default=None,
97
- description="Environment variables to pass to the server. (e.g. {'GOOGLE_API_KEY': 'MY_SUPER_SECRET_API_KEY'})",
98
- )
99
-
100
- cwd: str | Path | None = Field(
101
- default_factory=os.getcwd,
102
- description="The working directory to start the script in.",
103
- )
104
-
105
- encoding: str = Field(
106
- default="utf-8",
107
- description="The char-encoding to use when talking to a stdio server. (e.g. 'utf-8', 'ascii', etc.)",
108
- )
109
-
110
- encoding_error_handler: Literal["strict", "ignore", "replace"] = Field(
111
- default="strict",
112
- description="The text encoding error handler. See https://docs.python.org/3/library/codecs.html#codec-base-classes for explanations of possible values",
113
- )
114
-
115
- class StreamableHttpParams(BaseModel):
116
- """Factory-Params for Streamable Http Servers."""
117
-
118
- url: str | AnyUrl = Field(..., description="Url the server listens at.")
119
-
120
- headers: dict[str, Any] | None = Field(
121
- default=None,
122
- description="Additional Headers to pass to the client.",
123
- )
124
-
125
- auth: httpx.Auth | None = Field(
126
- default=None, description="Httpx Auth Schema."
127
- )
128
-
129
- timeout_seconds: float | int = Field(
130
- default=5, description="Http Timeout in Seconds"
131
- )
132
-
133
- sse_read_timeout_seconds: float | int = Field(
134
- default=60 * 5,
135
- description="How many seconds to wait for server-sent events until closing the connection.",
136
- )
137
-
138
- terminate_on_close: bool = Field(
139
- default=True,
140
- description="Whether or not to terminate the underlying connection on close.",
141
- )
142
-
143
- model_config = ConfigDict(
144
- arbitrary_types_allowed=True,
145
- extra="allow",
146
- )
147
-
148
- class SSEParams(BaseModel):
149
- """Factory-Params for SSE-Servers."""
150
-
151
- url: str | AnyUrl = Field(
152
- ...,
153
- description="Url the server listens at. (e.g. https://my-mcp-server.io/sse)",
154
- )
155
-
156
- headers: dict[str, Any] | None = Field(
157
- default=None,
158
- description="Additional Headers to pass to the client.",
159
- )
160
-
161
- timeout_seconds: float | int = Field(
162
- default=5, description="Http Timeout in Seconds."
163
- )
164
-
165
- sse_read_timeout_seconds: float | int = Field(
166
- default=60 * 5,
167
- description="How many seconds to wait for server-sent events until closing the connection. (connections will be automatically re-established.)",
168
- )
169
-
170
- auth: httpx.Auth | None = Field(
171
- default=None, description="Httpx Auth Scheme."
172
- )
173
-
174
- model_config = ConfigDict(
175
- arbitrary_types_allowed=True,
176
- extra="allow",
177
- )
178
-
179
- class WebsocketParams(BaseModel):
180
- """Factory-Params for Websocket Servers."""
181
-
182
- url: str | AnyUrl = Field(
183
- ...,
184
- description="The url the server listens at. (e.g. ws://my-mcp-server.io/messages)",
185
- )
186
-
187
- @staticmethod
188
- def create_mcp_server(
189
- name: str,
190
- connection_params: StreamableHttpParams
191
- | SSEParams
192
- | StdioParams
193
- | WebsocketParams,
194
- max_retries: int = 3,
195
- mount_points: list[str | MCPRoot] | None = None,
196
- timeout_seconds: int | float = 10,
197
- server_logging_level: LoggingLevel = "error",
198
- enable_roots_feature: bool = False,
199
- enable_tools_feature: bool = False,
200
- enable_sampling_feature: bool = False,
201
- enable_prompts_feature: bool = False,
202
- sampling_callback: FlockSamplingMCPCallback | None = None,
203
- list_roots_callback: FlockListRootsMCPCallback | None = None,
204
- logging_callback: FlockLoggingMCPCallback | None = None,
205
- message_handler: FlockMessageHandlerMCPCallback | None = None,
206
- tool_cache_size: float = 100,
207
- tool_cache_ttl: float = 60,
208
- resource_contents_cache_size=10,
209
- resource_contents_cache_ttl=60 * 5,
210
- resource_list_cache_size=100,
211
- resource_list_cache_ttl=100,
212
- tool_result_cache_size=100,
213
- tool_result_cache_ttl=100,
214
- description: str | Callable[..., str] | None = None,
215
- alert_latency_threshold_ms: int = 30000,
216
- tool_whitelist: list[str] | None = None,
217
- allow_all_tools: bool = True,
218
- ) -> FlockMCPServer:
219
- """Create a default MCP Server with common modules.
220
-
221
- Allows for creating one of the three default-implementations provided
222
- by Flock:
223
- - SSE-Server (specify "sse" in type)
224
- - Stdio-Server (specify "stdio" in type)
225
- - Websockets-Server (specifiy "websockets" in type)
226
-
227
- Args:
228
- name: Unique identifier for the MCP server
229
- connection_params: Connection configuration (StdioParams, SSEParams, etc.)
230
- tool_whitelist: List of tool names to allow from this server. If provided,
231
- only tools with these names will be available. Used with
232
- allow_all_tools=False for strict filtering. Agent-level
233
- filtering is generally preferred over server-level filtering.
234
- allow_all_tools: Whether to allow all tools from the server. When True
235
- (default), all tools are available. When False, only tools
236
- in tool_whitelist (if provided) are available.
237
- Other args: Various configuration options for caching, callbacks, etc.
238
-
239
- Returns:
240
- FlockMCPServer: Configured MCP server instance
241
-
242
- Note:
243
- For security and flexibility, prefer using agent-level tool_whitelist
244
- over server-level filtering. This allows different agents to access
245
- different tool subsets from the same server.
246
- """
247
- # infer server type from the pydantic model class
248
- if isinstance(connection_params, FlockFactory.StdioParams):
249
- server_kind = "stdio"
250
- concrete_server_cls = FlockMCPStdioServer
251
- if isinstance(connection_params, FlockFactory.SSEParams):
252
- server_kind = "sse"
253
- concrete_server_cls = FlockSSEServer
254
- if isinstance(connection_params, FlockFactory.WebsocketParams):
255
- server_kind = "websockets"
256
- concrete_server_cls = FlockWSServer
257
- if isinstance(connection_params, FlockFactory.StreamableHttpParams):
258
- server_kind = "streamable_http"
259
- concrete_server_cls = FlockStreamableHttpServer
260
-
261
- # convert mount points.
262
- mounts: list[MCPRoot] = []
263
- if mount_points:
264
- for item in mount_points:
265
- if isinstance(item, MCPRoot):
266
- mounts.append(item)
267
- elif isinstance(item, str):
268
- try:
269
- conv = MCPRoot(uri=FileUrl(url=item))
270
- mounts.append(conv)
271
- except Exception:
272
- continue # ignore
273
- else:
274
- continue # ignore
275
-
276
- # build generic configs
277
- feature_config = FlockMCPFeatureConfiguration(
278
- roots_enabled=enable_roots_feature,
279
- tools_enabled=enable_tools_feature,
280
- prompts_enabled=enable_prompts_feature,
281
- sampling_enabled=enable_sampling_feature,
282
- tool_whitelist=tool_whitelist,
283
- )
284
- callback_config = FlockMCPCallbackConfiguration(
285
- sampling_callback=sampling_callback,
286
- list_roots_callback=list_roots_callback,
287
- logging_callback=logging_callback,
288
- message_handler=message_handler,
289
- )
290
- caching_config = FlockMCPCachingConfiguration(
291
- tool_cache_max_size=tool_cache_size,
292
- tool_cache_max_ttl=tool_cache_ttl,
293
- resource_contents_cache_max_size=resource_contents_cache_size,
294
- resource_contents_cache_max_ttl=resource_contents_cache_ttl,
295
- resource_list_cache_max_size=resource_list_cache_size,
296
- resource_list_cache_max_ttl=resource_list_cache_ttl,
297
- tool_result_cache_max_size=tool_result_cache_size,
298
- tool_result_cache_max_ttl=tool_result_cache_ttl,
299
- )
300
- connection_config = None
301
- server_config: (
302
- FlockStdioConfig | FlockSSEConfig | FlockWSConfig | None
303
- ) = None
304
-
305
- # Instantiate correct server + config
306
- if server_kind == "stdio":
307
- # build stdio config
308
- connection_config = FlockStdioConnectionConfig(
309
- max_retries=max_retries,
310
- connection_parameters=StdioServerParameters(
311
- command=connection_params.command,
312
- args=connection_params.args,
313
- env=connection_params.env,
314
- encoding=connection_params.encoding,
315
- encoding_error_handler=connection_params.encoding_error_handler,
316
- cwd=connection_params.cwd,
317
- ),
318
- mount_points=mounts,
319
- read_timeout_seconds=timeout_seconds,
320
- server_logging_level=server_logging_level,
321
- )
322
- server_config = FlockStdioConfig(
323
- name=name,
324
- connection_config=connection_config,
325
- feature_config=feature_config,
326
- caching_config=caching_config,
327
- callback_config=callback_config,
328
- )
329
- elif server_kind == "streamable_http":
330
- # build streamable http config
331
- connection_config = FlockStreamableHttpConnectionConfig(
332
- max_retries=max_retries,
333
- connection_parameters=StreamableHttpServerParameters(
334
- url=connection_params.url,
335
- headers=connection_params.headers,
336
- auth=connection_params.auth,
337
- timeout=connection_params.timeout_seconds,
338
- sse_read_timeout=connection_params.sse_read_timeout_seconds,
339
- terminate_on_close=connection_params.terminate_on_close,
340
- ),
341
- mount_points=mounts,
342
- server_logging_level=server_logging_level,
343
- )
344
-
345
- server_config = FlockStreamableHttpConfig(
346
- name=name,
347
- connection_config=connection_config,
348
- feature_config=feature_config,
349
- caching_config=caching_config,
350
- callback_config=callback_config,
351
- allow_all_tools=allow_all_tools,
352
- )
353
-
354
- elif server_kind == "sse":
355
- # build sse config
356
- connection_config = FlockSSEConnectionConfig(
357
- max_retries=max_retries,
358
- connection_parameters=SseServerParameters(
359
- url=connection_params.url,
360
- auth=connection_params.auth,
361
- headers=connection_params.headers,
362
- timeout=connection_params.timeout_seconds,
363
- sse_read_timeout=connection_params.sse_read_timeout_seconds,
364
- ),
365
- mount_points=mounts,
366
- server_logging_level=server_logging_level,
367
- )
368
-
369
- server_config = FlockSSEConfig(
370
- name=name,
371
- connection_config=connection_config,
372
- feature_config=feature_config,
373
- caching_config=caching_config,
374
- callback_config=callback_config,
375
- allow_all_tools=allow_all_tools,
376
- )
377
-
378
- elif server_kind == "websockets":
379
- # build websocket config
380
- connection_config = FlockWSConnectionConfig(
381
- max_retries=max_retries,
382
- connection_parameters=WebsocketServerParameters(
383
- url=connection_params.url,
384
- ),
385
- mount_points=mounts,
386
- server_logging_level=server_logging_level,
387
- )
388
-
389
- server_config = FlockWSConfig(
390
- name=name,
391
- connection_config=connection_config,
392
- feature_config=feature_config,
393
- caching_config=caching_config,
394
- callback_config=callback_config,
395
- allow_all_tools=allow_all_tools,
396
- )
397
-
398
- else:
399
- raise ValueError(
400
- f"Unsupported connection_params type: {type(connection_params)}"
401
- )
402
-
403
- if not server_config:
404
- raise ValueError(
405
- "Unable to create server configuration for passed params."
406
- )
407
-
408
- server = concrete_server_cls(config=server_config)
409
-
410
- metrics_component_config = MetricsUtilityConfig(
411
- latency_threshold_ms=alert_latency_threshold_ms
412
- )
413
-
414
- metrics_component = MetricsUtilityComponent("metrics", config=metrics_component_config)
415
-
416
- server.add_component(metrics_component)
417
-
418
- return server
419
-
420
- @staticmethod
421
- def create_default_agent(
422
- name: str,
423
- description: DynamicStr| None = None,
424
- model: str | Callable[..., str] | None = None,
425
- input: DynamicStr = None,
426
- output: DynamicStr = None,
427
- tools: list[Callable[..., Any] | Any] | None = None,
428
- servers: list[str | FlockMCPServer] | None = None,
429
- use_cache: bool = True,
430
- enable_rich_tables: bool = False,
431
- output_theme: OutputTheme = OutputTheme.abernathy,
432
- wait_for_input: bool = False,
433
- temperature: float = 1.0,
434
- max_tokens: int = 8192,
435
- max_tool_calls: int = 10,
436
- max_retries: int = 3,
437
- alert_latency_threshold_ms: int = 30000,
438
- no_output: bool = False,
439
- print_context: bool = False,
440
- write_to_file: bool = False,
441
- stream: bool = False,
442
- include_thought_process: bool = False,
443
- include_reasoning: bool = False,
444
- next_agent: DynamicStr | None = None,
445
- temporal_activity_config: TemporalActivityConfig | None = None,
446
- ) -> FlockAgent:
447
- """Create a default FlockAgent.
448
-
449
- Deprecated: Use `DefaultAgent(...)` instead. This method now delegates to
450
- `DefaultAgent` and emits an optional one-time deprecation warning if the
451
- environment variable `FLOCK_WARN_FACTORY_DEPRECATION` is truthy (default).
452
- """
453
- _maybe_warn_factory_deprecation()
454
-
455
- return DefaultAgent(
456
- name=name,
457
- description=description,
458
- model=model,
459
- input=input,
460
- output=output,
461
- tools=tools,
462
- servers=servers,
463
- use_cache=use_cache,
464
- temperature=temperature,
465
- max_tokens=max_tokens,
466
- max_tool_calls=max_tool_calls,
467
- max_retries=max_retries,
468
- stream=stream,
469
- include_thought_process=include_thought_process,
470
- include_reasoning=include_reasoning,
471
- enable_rich_tables=enable_rich_tables,
472
- output_theme=output_theme,
473
- no_output=no_output,
474
- print_context=print_context,
475
- write_to_file=write_to_file,
476
- wait_for_input=wait_for_input,
477
- alert_latency_threshold_ms=alert_latency_threshold_ms,
478
- next_agent=next_agent,
479
- temporal_activity_config=temporal_activity_config,
480
- )
481
-
482
- @staticmethod
483
- def create_scheduled_agent(
484
- name: str,
485
- schedule_expression: str, # e.g., "every 1h", "0 0 * * *"
486
- description: DynamicStr | None = None,
487
- model: str | None = None,
488
- output: DynamicStr | None = None, # Input might be implicit or none
489
- tools: list[Callable[..., Any] | Any] | None = None,
490
- servers: list[str | FlockMCPServer] | None = None,
491
- use_cache: bool = False, # Whether to cache results
492
- temperature: float = 0.7, # Temperature for model responses
493
- # ... other common agent params from create_default_agent ...
494
- next_agent: DynamicStr | None = None,
495
- temporal_activity_config: TemporalActivityConfig
496
- | None = None, # If you want scheduled tasks to be Temporal activities
497
- **kwargs, # Forward other standard agent params
498
- ) -> FlockAgent:
499
- """Creates a FlockAgent configured to run on a schedule."""
500
- agent_config = ScheduledAgentConfig( # Use the new config type
501
- schedule_expression=schedule_expression,
502
- enabled=True,
503
- initial_run=True,
504
- max_runs=0,
505
- **kwargs,
506
- )
507
-
508
- agent = DefaultAgent(
509
- name=name,
510
- description=description,
511
- model=model,
512
- input="trigger_time: str | Time of scheduled execution",
513
- output=output,
514
- tools=tools,
515
- servers=servers,
516
- temporal_activity_config=temporal_activity_config,
517
- use_cache=use_cache,
518
- temperature=temperature,
519
- next_agent=next_agent,
520
- **kwargs,
521
- )
522
- agent.config = agent_config # Assign the scheduled agent config
523
-
524
- return agent
525
-
526
-
527
- # ---- one-time deprecation warning helper ----
528
- _FACTORY_DEPRECATION_WARNED = False
529
- _factory_logger = get_logger("core.factory")
530
-
531
-
532
- def _maybe_warn_factory_deprecation() -> None: # pragma: no cover - side-effect
533
- global _FACTORY_DEPRECATION_WARNED
534
- if _FACTORY_DEPRECATION_WARNED:
535
- return
536
- flag = os.getenv("FLOCK_WARN_FACTORY_DEPRECATION", "1").strip()
537
- enabled = flag not in {"0", "false", "False", "off", "OFF"}
538
- if not enabled:
539
- _FACTORY_DEPRECATION_WARNED = True
540
- return
541
- msg = (
542
- "FlockFactory.create_default_agent is deprecated and will be removed in a future release. "
543
- "Please use DefaultAgent(...) instead. Set FLOCK_WARN_FACTORY_DEPRECATION=0 to disable this notice."
544
- )
545
- # Log and emit a warnings.warn once
546
- try:
547
- _factory_logger.warning(msg)
548
- except Exception:
549
- pass
550
- warnings.warn(msg, DeprecationWarning, stacklevel=2)
551
- _FACTORY_DEPRECATION_WARNED = True