flock-core 0.4.543__py3-none-any.whl → 0.5.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of flock-core might be problematic. Click here for more details.
- flock/__init__.py +12 -217
- flock/agent.py +1079 -0
- flock/api/themes.py +71 -0
- flock/artifacts.py +86 -0
- flock/cli.py +147 -0
- flock/components.py +189 -0
- flock/dashboard/__init__.py +30 -0
- flock/dashboard/collector.py +559 -0
- flock/dashboard/events.py +188 -0
- flock/dashboard/graph_builder.py +563 -0
- flock/dashboard/launcher.py +235 -0
- flock/dashboard/models/graph.py +156 -0
- flock/dashboard/service.py +991 -0
- flock/dashboard/static_v2/assets/index-DFRnI_mt.js +111 -0
- flock/dashboard/static_v2/assets/index-fPLNdmp1.css +1 -0
- flock/dashboard/static_v2/index.html +13 -0
- flock/dashboard/websocket.py +246 -0
- flock/engines/__init__.py +6 -0
- flock/engines/dspy_engine.py +932 -0
- flock/examples.py +131 -0
- flock/frontend/README.md +778 -0
- flock/frontend/docs/DESIGN_SYSTEM.md +1980 -0
- flock/frontend/index.html +12 -0
- flock/frontend/package-lock.json +4337 -0
- flock/frontend/package.json +48 -0
- flock/frontend/src/App.tsx +139 -0
- flock/frontend/src/__tests__/integration/graph-snapshot.test.tsx +647 -0
- flock/frontend/src/__tests__/integration/indexeddb-persistence.test.tsx +699 -0
- flock/frontend/src/components/common/BuildInfo.tsx +39 -0
- flock/frontend/src/components/common/EmptyState.module.css +115 -0
- flock/frontend/src/components/common/EmptyState.tsx +128 -0
- flock/frontend/src/components/common/ErrorBoundary.module.css +169 -0
- flock/frontend/src/components/common/ErrorBoundary.tsx +118 -0
- flock/frontend/src/components/common/KeyboardShortcutsDialog.css +251 -0
- flock/frontend/src/components/common/KeyboardShortcutsDialog.tsx +151 -0
- flock/frontend/src/components/common/LoadingSpinner.module.css +97 -0
- flock/frontend/src/components/common/LoadingSpinner.tsx +29 -0
- flock/frontend/src/components/controls/PublishControl.css +547 -0
- flock/frontend/src/components/controls/PublishControl.test.tsx +543 -0
- flock/frontend/src/components/controls/PublishControl.tsx +432 -0
- flock/frontend/src/components/details/DetailWindowContainer.tsx +58 -0
- flock/frontend/src/components/details/LiveOutputTab.test.tsx +792 -0
- flock/frontend/src/components/details/LiveOutputTab.tsx +220 -0
- flock/frontend/src/components/details/MessageDetailWindow.tsx +439 -0
- flock/frontend/src/components/details/MessageHistoryTab.tsx +374 -0
- flock/frontend/src/components/details/NodeDetailWindow.test.tsx +501 -0
- flock/frontend/src/components/details/NodeDetailWindow.tsx +218 -0
- flock/frontend/src/components/details/RunStatusTab.tsx +348 -0
- flock/frontend/src/components/details/tabs.test.tsx +1015 -0
- flock/frontend/src/components/filters/ArtifactTypeFilter.tsx +21 -0
- flock/frontend/src/components/filters/CorrelationIDFilter.module.css +102 -0
- flock/frontend/src/components/filters/CorrelationIDFilter.test.tsx +197 -0
- flock/frontend/src/components/filters/CorrelationIDFilter.tsx +121 -0
- flock/frontend/src/components/filters/FilterFlyout.module.css +104 -0
- flock/frontend/src/components/filters/FilterFlyout.tsx +80 -0
- flock/frontend/src/components/filters/FilterPills.module.css +220 -0
- flock/frontend/src/components/filters/FilterPills.test.tsx +189 -0
- flock/frontend/src/components/filters/FilterPills.tsx +143 -0
- flock/frontend/src/components/filters/ProducerFilter.tsx +21 -0
- flock/frontend/src/components/filters/SavedFiltersControl.module.css +60 -0
- flock/frontend/src/components/filters/SavedFiltersControl.test.tsx +158 -0
- flock/frontend/src/components/filters/SavedFiltersControl.tsx +159 -0
- flock/frontend/src/components/filters/TagFilter.tsx +21 -0
- flock/frontend/src/components/filters/TimeRangeFilter.module.css +115 -0
- flock/frontend/src/components/filters/TimeRangeFilter.test.tsx +154 -0
- flock/frontend/src/components/filters/TimeRangeFilter.tsx +110 -0
- flock/frontend/src/components/filters/VisibilityFilter.tsx +21 -0
- flock/frontend/src/components/graph/AgentNode.test.tsx +77 -0
- flock/frontend/src/components/graph/AgentNode.tsx +324 -0
- flock/frontend/src/components/graph/GraphCanvas.tsx +613 -0
- flock/frontend/src/components/graph/MessageFlowEdge.tsx +128 -0
- flock/frontend/src/components/graph/MessageNode.test.tsx +64 -0
- flock/frontend/src/components/graph/MessageNode.tsx +129 -0
- flock/frontend/src/components/graph/MiniMap.tsx +47 -0
- flock/frontend/src/components/graph/TransformEdge.tsx +123 -0
- flock/frontend/src/components/layout/DashboardLayout.css +420 -0
- flock/frontend/src/components/layout/DashboardLayout.tsx +287 -0
- flock/frontend/src/components/layout/Header.module.css +88 -0
- flock/frontend/src/components/layout/Header.tsx +52 -0
- flock/frontend/src/components/modules/HistoricalArtifactsModule.module.css +288 -0
- flock/frontend/src/components/modules/HistoricalArtifactsModule.tsx +450 -0
- flock/frontend/src/components/modules/HistoricalArtifactsModuleWrapper.tsx +13 -0
- flock/frontend/src/components/modules/JsonAttributeRenderer.tsx +140 -0
- flock/frontend/src/components/modules/ModuleRegistry.test.ts +333 -0
- flock/frontend/src/components/modules/ModuleRegistry.ts +93 -0
- flock/frontend/src/components/modules/ModuleWindow.tsx +223 -0
- flock/frontend/src/components/modules/TraceModuleJaeger.tsx +1971 -0
- flock/frontend/src/components/modules/TraceModuleJaegerWrapper.tsx +13 -0
- flock/frontend/src/components/modules/registerModules.ts +29 -0
- flock/frontend/src/components/settings/AdvancedSettings.tsx +175 -0
- flock/frontend/src/components/settings/AppearanceSettings.tsx +185 -0
- flock/frontend/src/components/settings/GraphSettings.tsx +110 -0
- flock/frontend/src/components/settings/MultiSelect.tsx +235 -0
- flock/frontend/src/components/settings/SettingsPanel.css +327 -0
- flock/frontend/src/components/settings/SettingsPanel.tsx +131 -0
- flock/frontend/src/components/settings/ThemeSelector.tsx +298 -0
- flock/frontend/src/components/settings/TracingSettings.tsx +404 -0
- flock/frontend/src/hooks/useKeyboardShortcuts.ts +148 -0
- flock/frontend/src/hooks/useModulePersistence.test.ts +442 -0
- flock/frontend/src/hooks/useModulePersistence.ts +154 -0
- flock/frontend/src/hooks/useModules.ts +157 -0
- flock/frontend/src/hooks/usePersistence.ts +141 -0
- flock/frontend/src/main.tsx +13 -0
- flock/frontend/src/services/api.ts +337 -0
- flock/frontend/src/services/graphService.test.ts +330 -0
- flock/frontend/src/services/graphService.ts +75 -0
- flock/frontend/src/services/indexeddb.test.ts +793 -0
- flock/frontend/src/services/indexeddb.ts +848 -0
- flock/frontend/src/services/layout.test.ts +437 -0
- flock/frontend/src/services/layout.ts +357 -0
- flock/frontend/src/services/themeApplicator.ts +140 -0
- flock/frontend/src/services/themeService.ts +77 -0
- flock/frontend/src/services/websocket.ts +650 -0
- flock/frontend/src/store/filterStore.test.ts +250 -0
- flock/frontend/src/store/filterStore.ts +272 -0
- flock/frontend/src/store/graphStore.test.ts +570 -0
- flock/frontend/src/store/graphStore.ts +462 -0
- flock/frontend/src/store/moduleStore.test.ts +253 -0
- flock/frontend/src/store/moduleStore.ts +75 -0
- flock/frontend/src/store/settingsStore.ts +188 -0
- flock/frontend/src/store/streamStore.ts +68 -0
- flock/frontend/src/store/uiStore.test.ts +54 -0
- flock/frontend/src/store/uiStore.ts +122 -0
- flock/frontend/src/store/wsStore.ts +34 -0
- flock/frontend/src/styles/index.css +15 -0
- flock/frontend/src/styles/scrollbar.css +47 -0
- flock/frontend/src/styles/variables.css +488 -0
- flock/frontend/src/test/setup.ts +1 -0
- flock/frontend/src/types/filters.ts +47 -0
- flock/frontend/src/types/graph.ts +95 -0
- flock/frontend/src/types/modules.ts +10 -0
- flock/frontend/src/types/theme.ts +55 -0
- flock/frontend/src/utils/artifacts.ts +24 -0
- flock/frontend/src/utils/mockData.ts +98 -0
- flock/frontend/src/utils/performance.ts +16 -0
- flock/frontend/src/vite-env.d.ts +17 -0
- flock/frontend/tsconfig.json +27 -0
- flock/frontend/tsconfig.node.json +11 -0
- flock/frontend/vite.config.ts +25 -0
- flock/frontend/vitest.config.ts +11 -0
- flock/{core/util → helper}/cli_helper.py +9 -5
- flock/{core/logging → logging}/__init__.py +2 -3
- flock/logging/auto_trace.py +159 -0
- flock/{core/logging → logging}/formatters/enum_builder.py +3 -4
- flock/{core/logging → logging}/formatters/theme_builder.py +19 -44
- flock/{core/logging → logging}/formatters/themed_formatter.py +69 -107
- flock/{core/logging → logging}/logging.py +78 -61
- flock/{core/logging → logging}/telemetry.py +66 -26
- flock/{core/logging → logging}/telemetry_exporter/base_exporter.py +2 -2
- flock/logging/telemetry_exporter/duckdb_exporter.py +216 -0
- flock/{core/logging → logging}/telemetry_exporter/file_exporter.py +13 -10
- flock/{core/logging → logging}/telemetry_exporter/sqlite_exporter.py +2 -3
- flock/logging/trace_and_logged.py +304 -0
- flock/mcp/__init__.py +91 -0
- flock/{core/mcp/mcp_client.py → mcp/client.py} +131 -158
- flock/{core/mcp/mcp_config.py → mcp/config.py} +86 -132
- flock/mcp/manager.py +286 -0
- flock/mcp/servers/sse/__init__.py +1 -1
- flock/mcp/servers/sse/flock_sse_server.py +16 -58
- flock/mcp/servers/stdio/__init__.py +1 -1
- flock/mcp/servers/stdio/flock_stdio_server.py +13 -53
- flock/mcp/servers/streamable_http/flock_streamable_http_server.py +22 -67
- flock/mcp/servers/websockets/flock_websocket_server.py +12 -45
- flock/{core/mcp/flock_mcp_tool_base.py → mcp/tool.py} +24 -78
- flock/mcp/types/__init__.py +42 -0
- flock/{core/mcp → mcp}/types/callbacks.py +12 -15
- flock/{core/mcp → mcp}/types/factories.py +7 -6
- flock/{core/mcp → mcp}/types/handlers.py +13 -18
- flock/{core/mcp → mcp}/types/types.py +70 -74
- flock/{core/mcp → mcp}/util/helpers.py +3 -3
- flock/orchestrator.py +970 -0
- flock/registry.py +148 -0
- flock/runtime.py +262 -0
- flock/service.py +277 -0
- flock/store.py +1214 -0
- flock/subscription.py +111 -0
- flock/themes/andromeda.toml +1 -1
- flock/themes/apple-system-colors.toml +1 -1
- flock/themes/arcoiris.toml +1 -1
- flock/themes/atomonelight.toml +1 -1
- flock/themes/ayu copy.toml +1 -1
- flock/themes/ayu-light.toml +1 -1
- flock/themes/belafonte-day.toml +1 -1
- flock/themes/belafonte-night.toml +1 -1
- flock/themes/blulocodark.toml +1 -1
- flock/themes/breeze.toml +1 -1
- flock/themes/broadcast.toml +1 -1
- flock/themes/brogrammer.toml +1 -1
- flock/themes/builtin-dark.toml +1 -1
- flock/themes/builtin-pastel-dark.toml +1 -1
- flock/themes/catppuccin-latte.toml +1 -1
- flock/themes/catppuccin-macchiato.toml +1 -1
- flock/themes/catppuccin-mocha.toml +1 -1
- flock/themes/cga.toml +1 -1
- flock/themes/chalk.toml +1 -1
- flock/themes/ciapre.toml +1 -1
- flock/themes/coffee-theme.toml +1 -1
- flock/themes/cyberpunkscarletprotocol.toml +1 -1
- flock/themes/dark+.toml +1 -1
- flock/themes/darkermatrix.toml +1 -1
- flock/themes/darkmatrix.toml +2 -2
- flock/themes/darkside.toml +1 -1
- flock/themes/deep.toml +2 -2
- flock/themes/desert.toml +1 -1
- flock/themes/django.toml +1 -1
- flock/themes/djangosmooth.toml +1 -1
- flock/themes/doomone.toml +1 -1
- flock/themes/dotgov.toml +1 -1
- flock/themes/dracula+.toml +1 -1
- flock/themes/duckbones.toml +1 -1
- flock/themes/encom.toml +1 -1
- flock/themes/espresso.toml +1 -1
- flock/themes/everblush.toml +1 -1
- flock/themes/fairyfloss.toml +1 -1
- flock/themes/fideloper.toml +1 -1
- flock/themes/fishtank.toml +1 -1
- flock/themes/flexoki-light.toml +1 -1
- flock/themes/floraverse.toml +1 -1
- flock/themes/framer.toml +1 -1
- flock/themes/galizur.toml +1 -1
- flock/themes/github.toml +1 -1
- flock/themes/grass.toml +1 -1
- flock/themes/grey-green.toml +1 -1
- flock/themes/gruvboxlight.toml +1 -1
- flock/themes/guezwhoz.toml +1 -1
- flock/themes/harper.toml +1 -1
- flock/themes/hax0r-blue.toml +1 -1
- flock/themes/hopscotch.256.toml +1 -1
- flock/themes/ic-green-ppl.toml +1 -1
- flock/themes/iceberg-dark.toml +1 -1
- flock/themes/japanesque.toml +1 -1
- flock/themes/jubi.toml +1 -1
- flock/themes/kibble.toml +1 -1
- flock/themes/kolorit.toml +1 -1
- flock/themes/kurokula.toml +1 -1
- flock/themes/materialdesigncolors.toml +1 -1
- flock/themes/matrix.toml +1 -1
- flock/themes/mellifluous.toml +1 -1
- flock/themes/midnight-in-mojave.toml +1 -1
- flock/themes/monokai-remastered.toml +1 -1
- flock/themes/monokai-soda.toml +1 -1
- flock/themes/neon.toml +1 -1
- flock/themes/neopolitan.toml +5 -5
- flock/themes/nord-light.toml +1 -1
- flock/themes/ocean.toml +1 -1
- flock/themes/onehalfdark.toml +1 -1
- flock/themes/onehalflight.toml +1 -1
- flock/themes/palenighthc.toml +1 -1
- flock/themes/paulmillr.toml +1 -1
- flock/themes/pencildark.toml +1 -1
- flock/themes/pnevma.toml +1 -1
- flock/themes/purple-rain.toml +1 -1
- flock/themes/purplepeter.toml +1 -1
- flock/themes/raycast-dark.toml +1 -1
- flock/themes/red-sands.toml +1 -1
- flock/themes/relaxed.toml +1 -1
- flock/themes/retro.toml +1 -1
- flock/themes/rose-pine.toml +1 -1
- flock/themes/royal.toml +1 -1
- flock/themes/ryuuko.toml +1 -1
- flock/themes/sakura.toml +1 -1
- flock/themes/scarlet-protocol.toml +1 -1
- flock/themes/seoulbones-dark.toml +1 -1
- flock/themes/shades-of-purple.toml +1 -1
- flock/themes/smyck.toml +1 -1
- flock/themes/softserver.toml +1 -1
- flock/themes/solarized-darcula.toml +1 -1
- flock/themes/square.toml +1 -1
- flock/themes/sugarplum.toml +1 -1
- flock/themes/thayer-bright.toml +1 -1
- flock/themes/tokyonight.toml +1 -1
- flock/themes/tomorrow.toml +1 -1
- flock/themes/ubuntu.toml +1 -1
- flock/themes/ultradark.toml +1 -1
- flock/themes/ultraviolent.toml +1 -1
- flock/themes/unikitty.toml +1 -1
- flock/themes/urple.toml +1 -1
- flock/themes/vesper.toml +1 -1
- flock/themes/vimbones.toml +1 -1
- flock/themes/wildcherry.toml +1 -1
- flock/themes/wilmersdorf.toml +1 -1
- flock/themes/wryan.toml +1 -1
- flock/themes/xcodedarkhc.toml +1 -1
- flock/themes/xcodelight.toml +1 -1
- flock/themes/zenbones-light.toml +1 -1
- flock/themes/zenwritten-dark.toml +1 -1
- flock/utilities.py +301 -0
- flock/utility/output_utility_component.py +226 -0
- flock/visibility.py +107 -0
- flock_core-0.5.0.dist-info/METADATA +964 -0
- flock_core-0.5.0.dist-info/RECORD +525 -0
- flock_core-0.5.0.dist-info/entry_points.txt +2 -0
- {flock_core-0.4.543.dist-info → flock_core-0.5.0.dist-info}/licenses/LICENSE +1 -1
- flock/adapter/__init__.py +0 -14
- flock/adapter/azure_adapter.py +0 -68
- flock/adapter/chroma_adapter.py +0 -73
- flock/adapter/faiss_adapter.py +0 -97
- flock/adapter/pinecone_adapter.py +0 -51
- flock/adapter/vector_base.py +0 -47
- flock/cli/assets/release_notes.md +0 -140
- flock/cli/config.py +0 -8
- flock/cli/constants.py +0 -36
- flock/cli/create_agent.py +0 -1
- flock/cli/create_flock.py +0 -280
- flock/cli/execute_flock.py +0 -620
- flock/cli/load_agent.py +0 -1
- flock/cli/load_examples.py +0 -1
- flock/cli/load_flock.py +0 -192
- flock/cli/load_release_notes.py +0 -20
- flock/cli/loaded_flock_cli.py +0 -254
- flock/cli/manage_agents.py +0 -459
- flock/cli/registry_management.py +0 -889
- flock/cli/runner.py +0 -41
- flock/cli/settings.py +0 -857
- flock/cli/utils.py +0 -135
- flock/cli/view_results.py +0 -29
- flock/cli/yaml_editor.py +0 -396
- flock/config.py +0 -56
- flock/core/__init__.py +0 -44
- flock/core/api/__init__.py +0 -10
- flock/core/api/custom_endpoint.py +0 -45
- flock/core/api/endpoints.py +0 -262
- flock/core/api/main.py +0 -162
- flock/core/api/models.py +0 -101
- flock/core/api/run_store.py +0 -224
- flock/core/api/runner.py +0 -44
- flock/core/api/service.py +0 -214
- flock/core/config/flock_agent_config.py +0 -11
- flock/core/config/scheduled_agent_config.py +0 -40
- flock/core/context/context.py +0 -214
- flock/core/context/context_manager.py +0 -40
- flock/core/context/context_vars.py +0 -11
- flock/core/evaluation/utils.py +0 -395
- flock/core/execution/batch_executor.py +0 -369
- flock/core/execution/evaluation_executor.py +0 -438
- flock/core/execution/local_executor.py +0 -31
- flock/core/execution/opik_executor.py +0 -103
- flock/core/execution/temporal_executor.py +0 -166
- flock/core/flock.py +0 -1003
- flock/core/flock_agent.py +0 -1258
- flock/core/flock_evaluator.py +0 -60
- flock/core/flock_factory.py +0 -513
- flock/core/flock_module.py +0 -207
- flock/core/flock_registry.py +0 -702
- flock/core/flock_router.py +0 -83
- flock/core/flock_scheduler.py +0 -166
- flock/core/flock_server_manager.py +0 -136
- flock/core/interpreter/python_interpreter.py +0 -689
- flock/core/logging/live_capture.py +0 -137
- flock/core/logging/trace_and_logged.py +0 -59
- flock/core/mcp/__init__.py +0 -1
- flock/core/mcp/flock_mcp_server.py +0 -640
- flock/core/mcp/mcp_client_manager.py +0 -201
- flock/core/mcp/types/__init__.py +0 -1
- flock/core/mixin/dspy_integration.py +0 -445
- flock/core/mixin/prompt_parser.py +0 -125
- flock/core/serialization/__init__.py +0 -13
- flock/core/serialization/callable_registry.py +0 -52
- flock/core/serialization/flock_serializer.py +0 -854
- flock/core/serialization/json_encoder.py +0 -41
- flock/core/serialization/secure_serializer.py +0 -175
- flock/core/serialization/serializable.py +0 -342
- flock/core/serialization/serialization_utils.py +0 -409
- flock/core/util/file_path_utils.py +0 -223
- flock/core/util/hydrator.py +0 -309
- flock/core/util/input_resolver.py +0 -141
- flock/core/util/loader.py +0 -59
- flock/core/util/splitter.py +0 -219
- flock/di.py +0 -41
- flock/evaluators/__init__.py +0 -1
- flock/evaluators/declarative/__init__.py +0 -1
- flock/evaluators/declarative/declarative_evaluator.py +0 -217
- flock/evaluators/memory/memory_evaluator.py +0 -90
- flock/evaluators/test/test_case_evaluator.py +0 -38
- flock/evaluators/zep/zep_evaluator.py +0 -59
- flock/modules/__init__.py +0 -1
- flock/modules/assertion/__init__.py +0 -1
- flock/modules/assertion/assertion_module.py +0 -286
- flock/modules/callback/__init__.py +0 -1
- flock/modules/callback/callback_module.py +0 -91
- flock/modules/enterprise_memory/README.md +0 -99
- flock/modules/enterprise_memory/enterprise_memory_module.py +0 -526
- flock/modules/mem0/__init__.py +0 -1
- flock/modules/mem0/mem0_module.py +0 -126
- flock/modules/mem0_async/__init__.py +0 -1
- flock/modules/mem0_async/async_mem0_module.py +0 -126
- flock/modules/memory/__init__.py +0 -1
- flock/modules/memory/memory_module.py +0 -429
- flock/modules/memory/memory_parser.py +0 -125
- flock/modules/memory/memory_storage.py +0 -736
- flock/modules/output/__init__.py +0 -1
- flock/modules/output/output_module.py +0 -196
- flock/modules/performance/__init__.py +0 -1
- flock/modules/performance/metrics_module.py +0 -678
- flock/modules/zep/__init__.py +0 -1
- flock/modules/zep/zep_module.py +0 -192
- flock/platform/docker_tools.py +0 -49
- flock/platform/jaeger_install.py +0 -86
- flock/routers/__init__.py +0 -1
- flock/routers/agent/__init__.py +0 -1
- flock/routers/agent/agent_router.py +0 -236
- flock/routers/agent/handoff_agent.py +0 -58
- flock/routers/conditional/conditional_router.py +0 -486
- flock/routers/default/__init__.py +0 -1
- flock/routers/default/default_router.py +0 -80
- flock/routers/feedback/feedback_router.py +0 -114
- flock/routers/list_generator/list_generator_router.py +0 -166
- flock/routers/llm/__init__.py +0 -1
- flock/routers/llm/llm_router.py +0 -365
- flock/tools/__init__.py +0 -0
- flock/tools/azure_tools.py +0 -781
- flock/tools/code_tools.py +0 -167
- flock/tools/file_tools.py +0 -149
- flock/tools/github_tools.py +0 -157
- flock/tools/markdown_tools.py +0 -205
- flock/tools/system_tools.py +0 -9
- flock/tools/text_tools.py +0 -810
- flock/tools/web_tools.py +0 -92
- flock/tools/zendesk_tools.py +0 -501
- flock/webapp/__init__.py +0 -1
- flock/webapp/app/__init__.py +0 -0
- flock/webapp/app/api/__init__.py +0 -0
- flock/webapp/app/api/agent_management.py +0 -237
- flock/webapp/app/api/execution.py +0 -503
- flock/webapp/app/api/flock_management.py +0 -125
- flock/webapp/app/api/registry_viewer.py +0 -29
- flock/webapp/app/chat.py +0 -662
- flock/webapp/app/config.py +0 -104
- flock/webapp/app/dependencies.py +0 -117
- flock/webapp/app/main.py +0 -1086
- flock/webapp/app/middleware.py +0 -113
- flock/webapp/app/models_ui.py +0 -7
- flock/webapp/app/services/__init__.py +0 -0
- flock/webapp/app/services/feedback_file_service.py +0 -363
- flock/webapp/app/services/flock_service.py +0 -345
- flock/webapp/app/services/sharing_models.py +0 -81
- flock/webapp/app/services/sharing_store.py +0 -597
- flock/webapp/app/templates/theme_mapper.html +0 -326
- flock/webapp/app/theme_mapper.py +0 -811
- flock/webapp/app/utils.py +0 -85
- flock/webapp/run.py +0 -219
- flock/webapp/static/css/chat.css +0 -301
- flock/webapp/static/css/components.css +0 -167
- flock/webapp/static/css/header.css +0 -39
- flock/webapp/static/css/layout.css +0 -281
- flock/webapp/static/css/sidebar.css +0 -127
- flock/webapp/static/css/two-pane.css +0 -48
- flock/webapp/templates/base.html +0 -389
- flock/webapp/templates/chat.html +0 -152
- flock/webapp/templates/chat_settings.html +0 -19
- flock/webapp/templates/flock_editor.html +0 -16
- flock/webapp/templates/index.html +0 -12
- flock/webapp/templates/partials/_agent_detail_form.html +0 -93
- flock/webapp/templates/partials/_agent_list.html +0 -18
- flock/webapp/templates/partials/_agent_manager_view.html +0 -51
- flock/webapp/templates/partials/_agent_tools_checklist.html +0 -14
- flock/webapp/templates/partials/_chat_container.html +0 -15
- flock/webapp/templates/partials/_chat_messages.html +0 -57
- flock/webapp/templates/partials/_chat_settings_form.html +0 -85
- flock/webapp/templates/partials/_create_flock_form.html +0 -50
- flock/webapp/templates/partials/_dashboard_flock_detail.html +0 -17
- flock/webapp/templates/partials/_dashboard_flock_file_list.html +0 -16
- flock/webapp/templates/partials/_dashboard_flock_properties_preview.html +0 -28
- flock/webapp/templates/partials/_dashboard_upload_flock_form.html +0 -16
- flock/webapp/templates/partials/_dynamic_input_form_content.html +0 -22
- flock/webapp/templates/partials/_env_vars_table.html +0 -23
- flock/webapp/templates/partials/_execution_form.html +0 -127
- flock/webapp/templates/partials/_execution_view_container.html +0 -28
- flock/webapp/templates/partials/_flock_file_list.html +0 -23
- flock/webapp/templates/partials/_flock_properties_form.html +0 -52
- flock/webapp/templates/partials/_flock_upload_form.html +0 -16
- flock/webapp/templates/partials/_header_flock_status.html +0 -5
- flock/webapp/templates/partials/_live_logs.html +0 -13
- flock/webapp/templates/partials/_load_manager_view.html +0 -49
- flock/webapp/templates/partials/_registry_table.html +0 -25
- flock/webapp/templates/partials/_registry_viewer_content.html +0 -70
- flock/webapp/templates/partials/_results_display.html +0 -78
- flock/webapp/templates/partials/_settings_env_content.html +0 -9
- flock/webapp/templates/partials/_settings_theme_content.html +0 -14
- flock/webapp/templates/partials/_settings_view.html +0 -36
- flock/webapp/templates/partials/_share_chat_link_snippet.html +0 -11
- flock/webapp/templates/partials/_share_link_snippet.html +0 -35
- flock/webapp/templates/partials/_sidebar.html +0 -74
- flock/webapp/templates/partials/_structured_data_view.html +0 -40
- flock/webapp/templates/partials/_theme_preview.html +0 -36
- flock/webapp/templates/registry_viewer.html +0 -84
- flock/webapp/templates/shared_run_page.html +0 -140
- flock/workflow/__init__.py +0 -0
- flock/workflow/activities.py +0 -237
- flock/workflow/agent_activities.py +0 -24
- flock/workflow/agent_execution_activity.py +0 -240
- flock/workflow/flock_workflow.py +0 -225
- flock/workflow/temporal_config.py +0 -96
- flock/workflow/temporal_setup.py +0 -60
- flock_core-0.4.543.dist-info/METADATA +0 -676
- flock_core-0.4.543.dist-info/RECORD +0 -572
- flock_core-0.4.543.dist-info/entry_points.txt +0 -2
- /flock/{core/logging → logging}/formatters/themes.py +0 -0
- /flock/{core/logging → logging}/span_middleware/baggage_span_processor.py +0 -0
- /flock/{core/mcp → mcp}/util/__init__.py +0 -0
- {flock_core-0.4.543.dist-info → flock_core-0.5.0.dist-info}/WHEEL +0 -0
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
"""Base Config for MCP Clients."""
|
|
2
2
|
|
|
3
3
|
import importlib
|
|
4
|
-
from typing import Any, Literal, TypeVar
|
|
4
|
+
from typing import TYPE_CHECKING, Any, Literal, TypeVar
|
|
5
5
|
|
|
6
|
-
import httpx
|
|
7
6
|
from pydantic import BaseModel, ConfigDict, Field, create_model
|
|
7
|
+
from typing_extensions import Self
|
|
8
8
|
|
|
9
|
-
from flock.
|
|
9
|
+
from flock.mcp.types import (
|
|
10
10
|
FlockListRootsMCPCallback,
|
|
11
11
|
FlockLoggingMCPCallback,
|
|
12
12
|
FlockMessageHandlerMCPCallback,
|
|
@@ -18,11 +18,11 @@ from flock.core.mcp.types.types import (
|
|
|
18
18
|
StreamableHttpServerParameters,
|
|
19
19
|
WebsocketServerParameters,
|
|
20
20
|
)
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
if TYPE_CHECKING:
|
|
24
|
+
import httpx
|
|
25
|
+
|
|
26
26
|
|
|
27
27
|
LoggingLevel = Literal[
|
|
28
28
|
"debug",
|
|
@@ -36,14 +36,14 @@ LoggingLevel = Literal[
|
|
|
36
36
|
]
|
|
37
37
|
|
|
38
38
|
|
|
39
|
-
A = TypeVar("A", bound="
|
|
40
|
-
B = TypeVar("B", bound="
|
|
41
|
-
C = TypeVar("C", bound="
|
|
42
|
-
D = TypeVar("D", bound="
|
|
43
|
-
E = TypeVar("E", bound="
|
|
39
|
+
A = TypeVar("A", bound="FlockMCPCallbackConfiguration")
|
|
40
|
+
B = TypeVar("B", bound="FlockMCPConnectionConfiguration")
|
|
41
|
+
C = TypeVar("C", bound="FlockMCPConfiguration")
|
|
42
|
+
D = TypeVar("D", bound="FlockMCPCachingConfiguration")
|
|
43
|
+
E = TypeVar("E", bound="FlockMCPFeatureConfiguration")
|
|
44
44
|
|
|
45
45
|
|
|
46
|
-
class
|
|
46
|
+
class FlockMCPCachingConfiguration(BaseModel):
|
|
47
47
|
"""Configuration for Caching in Clients."""
|
|
48
48
|
|
|
49
49
|
tool_cache_max_size: float = Field(
|
|
@@ -98,19 +98,17 @@ class FlockMCPCachingConfigurationBase(BaseModel, Serializable):
|
|
|
98
98
|
)
|
|
99
99
|
|
|
100
100
|
@classmethod
|
|
101
|
-
def from_dict(cls
|
|
101
|
+
def from_dict(cls, data: dict[str, Any]) -> Self:
|
|
102
102
|
"""Deserialize from a dict."""
|
|
103
|
-
return cls(**
|
|
103
|
+
return cls(**dict(data.items()))
|
|
104
104
|
|
|
105
105
|
@classmethod
|
|
106
|
-
def with_fields(cls
|
|
106
|
+
def with_fields(cls, **field_definitions) -> type[Self]:
|
|
107
107
|
"""Create a new config class with additional fields."""
|
|
108
|
-
return create_model(
|
|
109
|
-
f"Dynamic{cls.__name__}", __base__=cls, **field_definitions
|
|
110
|
-
)
|
|
108
|
+
return create_model(f"Dynamic{cls.__name__}", __base__=cls, **field_definitions)
|
|
111
109
|
|
|
112
110
|
|
|
113
|
-
class
|
|
111
|
+
class FlockMCPCallbackConfiguration(BaseModel):
|
|
114
112
|
"""Base Configuration Class for Callbacks for Clients."""
|
|
115
113
|
|
|
116
114
|
sampling_callback: FlockSamplingMCPCallback | None = Field(
|
|
@@ -136,59 +134,21 @@ class FlockMCPCallbackConfigurationBase(BaseModel, Serializable):
|
|
|
136
134
|
|
|
137
135
|
def to_dict(self, path_type: str = "relative"):
|
|
138
136
|
"""Serialize the object."""
|
|
139
|
-
#
|
|
140
|
-
|
|
141
|
-
if self.sampling_callback:
|
|
142
|
-
sampling_callback_data = serialize_item(self.sampling_callback)
|
|
143
|
-
data["sampling_callback"] = sampling_callback_data
|
|
144
|
-
|
|
145
|
-
if self.list_roots_callback:
|
|
146
|
-
list_roots_callback_data = serialize_item(self.list_roots_callback)
|
|
147
|
-
data["list_roots_callback"] = list_roots_callback_data
|
|
148
|
-
|
|
149
|
-
if self.logging_callback:
|
|
150
|
-
logging_callback_data = serialize_item(self.logging_callback)
|
|
151
|
-
data["logging_callback"] = logging_callback_data
|
|
152
|
-
|
|
153
|
-
if self.message_handler:
|
|
154
|
-
message_handler_data = serialize_item(self.message_handler)
|
|
155
|
-
data["message_handler"] = message_handler_data
|
|
156
|
-
|
|
157
|
-
return data
|
|
137
|
+
# Callbacks are set programmatically and cannot be serialized
|
|
138
|
+
return {}
|
|
158
139
|
|
|
159
140
|
@classmethod
|
|
160
|
-
def from_dict(cls
|
|
141
|
+
def from_dict(cls, data: dict[str, Any]) -> Self:
|
|
161
142
|
"""Deserialize from a dict."""
|
|
162
|
-
|
|
163
|
-
if data:
|
|
164
|
-
if "sampling_callback" in data:
|
|
165
|
-
instance.sampling_callback = deserialize_item(
|
|
166
|
-
data["sampling_callback"]
|
|
167
|
-
)
|
|
168
|
-
if "list_roots_callback" in data:
|
|
169
|
-
instance.list_roots_callback = deserialize_item(
|
|
170
|
-
data["list_roots_callback"]
|
|
171
|
-
)
|
|
172
|
-
if "logging_callback" in data:
|
|
173
|
-
instance.logging_callback = deserialize_item(
|
|
174
|
-
data["logging_callback"]
|
|
175
|
-
)
|
|
176
|
-
if "message_handler" in data:
|
|
177
|
-
instance.message_handler = deserialize_item(
|
|
178
|
-
data["message_handler"]
|
|
179
|
-
)
|
|
180
|
-
|
|
181
|
-
return instance
|
|
143
|
+
return cls()
|
|
182
144
|
|
|
183
145
|
@classmethod
|
|
184
|
-
def with_fields(cls
|
|
146
|
+
def with_fields(cls, **field_definitions) -> type[Self]:
|
|
185
147
|
"""Create a new config class with additional fields."""
|
|
186
|
-
return create_model(
|
|
187
|
-
f"Dynamic{cls.__name__}", __base__=cls, **field_definitions
|
|
188
|
-
)
|
|
148
|
+
return create_model(f"Dynamic{cls.__name__}", __base__=cls, **field_definitions)
|
|
189
149
|
|
|
190
150
|
|
|
191
|
-
class
|
|
151
|
+
class FlockMCPConnectionConfiguration(BaseModel):
|
|
192
152
|
"""Base Configuration Class for Connection Parameters for a client."""
|
|
193
153
|
|
|
194
154
|
max_retries: int = Field(
|
|
@@ -200,17 +160,15 @@ class FlockMCPConnectionConfigurationBase(BaseModel, Serializable):
|
|
|
200
160
|
..., description="Connection parameters for the server."
|
|
201
161
|
)
|
|
202
162
|
|
|
203
|
-
transport_type: Literal[
|
|
204
|
-
|
|
205
|
-
|
|
163
|
+
transport_type: Literal["stdio", "websockets", "sse", "streamable_http", "custom"] = Field(
|
|
164
|
+
..., description="Type of transport to use."
|
|
165
|
+
)
|
|
206
166
|
|
|
207
167
|
mount_points: list[MCPRoot] | None = Field(
|
|
208
168
|
default=None, description="Initial Mountpoints to operate under."
|
|
209
169
|
)
|
|
210
170
|
|
|
211
|
-
read_timeout_seconds: float | int = Field(
|
|
212
|
-
default=60 * 5, description="Read Timeout."
|
|
213
|
-
)
|
|
171
|
+
read_timeout_seconds: float | int = Field(default=60 * 5, description="Read Timeout.")
|
|
214
172
|
|
|
215
173
|
server_logging_level: LoggingLevel = Field(
|
|
216
174
|
default="error",
|
|
@@ -230,14 +188,12 @@ class FlockMCPConnectionConfigurationBase(BaseModel, Serializable):
|
|
|
230
188
|
mode="json",
|
|
231
189
|
)
|
|
232
190
|
|
|
233
|
-
data["connection_parameters"] = self.connection_parameters.to_dict(
|
|
234
|
-
path_type=path_type
|
|
235
|
-
)
|
|
191
|
+
data["connection_parameters"] = self.connection_parameters.to_dict(path_type=path_type)
|
|
236
192
|
|
|
237
193
|
return data
|
|
238
194
|
|
|
239
195
|
@classmethod
|
|
240
|
-
def from_dict(cls
|
|
196
|
+
def from_dict(cls, data: dict[str, Any]) -> Self:
|
|
241
197
|
"""Deserialize from dict."""
|
|
242
198
|
connection_params = data.get("connection_parameters")
|
|
243
199
|
connection_params_obj = None
|
|
@@ -248,13 +204,13 @@ class FlockMCPConnectionConfigurationBase(BaseModel, Serializable):
|
|
|
248
204
|
if auth_spec:
|
|
249
205
|
# find the concrete implementation and
|
|
250
206
|
# instantiate it.
|
|
251
|
-
|
|
207
|
+
# find the concrete implementation for auth and instatiate it.
|
|
252
208
|
impl = auth_spec.get("implementation", None)
|
|
253
209
|
params = auth_spec.get("params", None)
|
|
254
210
|
if impl and params:
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
211
|
+
mod = importlib.import_module(impl["module_path"])
|
|
212
|
+
real_cls = getattr(mod, impl["class_name"])
|
|
213
|
+
auth_obj = real_cls(**dict(params.items()))
|
|
258
214
|
|
|
259
215
|
if auth_obj:
|
|
260
216
|
connection_params["auth"] = auth_obj
|
|
@@ -264,60 +220,64 @@ class FlockMCPConnectionConfigurationBase(BaseModel, Serializable):
|
|
|
264
220
|
match kind:
|
|
265
221
|
case "stdio":
|
|
266
222
|
connection_params_obj = StdioServerParameters(
|
|
267
|
-
**
|
|
223
|
+
**dict(connection_params.items())
|
|
268
224
|
)
|
|
269
225
|
case "websockets":
|
|
270
226
|
connection_params_obj = WebsocketServerParameters(
|
|
271
|
-
**
|
|
227
|
+
**dict(connection_params.items())
|
|
272
228
|
)
|
|
273
229
|
case "streamable_http":
|
|
274
230
|
connection_params_obj = StreamableHttpServerParameters(
|
|
275
|
-
**
|
|
231
|
+
**dict(connection_params.items())
|
|
276
232
|
)
|
|
277
233
|
case "sse":
|
|
278
234
|
connection_params_obj = SseServerParameters(
|
|
279
|
-
**
|
|
235
|
+
**dict(connection_params.items())
|
|
280
236
|
)
|
|
281
237
|
case _:
|
|
282
238
|
# handle custom server params
|
|
283
|
-
connection_params_obj = ServerParameters(
|
|
284
|
-
**{k: v for k, v in connection_params.items()}
|
|
285
|
-
)
|
|
239
|
+
connection_params_obj = ServerParameters(**dict(connection_params.items()))
|
|
286
240
|
|
|
287
241
|
if connection_params_obj:
|
|
288
242
|
data["connection_parameters"] = connection_params_obj
|
|
289
|
-
return cls(**
|
|
290
|
-
|
|
291
|
-
raise ValueError("No connection parameters provided.")
|
|
243
|
+
return cls(**dict(data.items()))
|
|
244
|
+
raise ValueError("No connection parameters provided.")
|
|
292
245
|
|
|
293
246
|
@classmethod
|
|
294
|
-
def with_fields(cls
|
|
247
|
+
def with_fields(cls, **field_definitions) -> type[Self]:
|
|
295
248
|
"""Create a new config class with additional fields."""
|
|
296
|
-
return create_model(
|
|
297
|
-
f"Dynamic{cls.__name__}", __base__=cls, **field_definitions
|
|
298
|
-
)
|
|
249
|
+
return create_model(f"Dynamic{cls.__name__}", __base__=cls, **field_definitions)
|
|
299
250
|
|
|
300
251
|
|
|
301
|
-
class
|
|
252
|
+
class FlockMCPFeatureConfiguration(BaseModel):
|
|
302
253
|
"""Base Configuration Class for switching MCP Features on and off."""
|
|
303
254
|
|
|
304
255
|
roots_enabled: bool = Field(
|
|
305
|
-
default=
|
|
256
|
+
default=True,
|
|
306
257
|
description="Whether or not the Roots feature is enabled for this client.",
|
|
307
258
|
)
|
|
308
259
|
|
|
309
260
|
sampling_enabled: bool = Field(
|
|
310
|
-
default=
|
|
261
|
+
default=True,
|
|
311
262
|
description="Whether or not the Sampling feature is enabled for this client.",
|
|
312
263
|
)
|
|
313
264
|
|
|
314
265
|
tools_enabled: bool = Field(
|
|
315
|
-
default=
|
|
266
|
+
default=True,
|
|
316
267
|
description="Whether or not the Tools feature is enabled for this client.",
|
|
317
268
|
)
|
|
318
269
|
|
|
270
|
+
tool_whitelist: list[str] | None = Field(
|
|
271
|
+
default=None,
|
|
272
|
+
description="Whitelist of tool names that are enabled for this MCP server. "
|
|
273
|
+
"If provided, only tools with names in this list will be available "
|
|
274
|
+
"from this server."
|
|
275
|
+
"Note: Agent-level tool filtering is generally preferred over "
|
|
276
|
+
"server-level filtering for better granular control.",
|
|
277
|
+
)
|
|
278
|
+
|
|
319
279
|
prompts_enabled: bool = Field(
|
|
320
|
-
default=
|
|
280
|
+
default=True,
|
|
321
281
|
description="Whether or not the Prompts feature is enabled for this client.",
|
|
322
282
|
)
|
|
323
283
|
|
|
@@ -336,43 +296,39 @@ class FlockMCPFeatureConfigurationBase(BaseModel, Serializable):
|
|
|
336
296
|
@classmethod
|
|
337
297
|
def from_dict(cls, data: dict[str, Any]):
|
|
338
298
|
"""Deserialize from a dict."""
|
|
339
|
-
return cls(**
|
|
299
|
+
return cls(**dict(data.items()))
|
|
340
300
|
|
|
341
301
|
@classmethod
|
|
342
|
-
def with_fields(cls
|
|
302
|
+
def with_fields(cls, **field_definitions) -> type[Self]:
|
|
343
303
|
"""Create a new config class with additional fields."""
|
|
344
|
-
return create_model(
|
|
345
|
-
f"Dynamic{cls.__name__}", __base__=cls, **field_definitions
|
|
346
|
-
)
|
|
304
|
+
return create_model(f"Dynamic{cls.__name__}", __base__=cls, **field_definitions)
|
|
347
305
|
|
|
348
306
|
|
|
349
|
-
class
|
|
307
|
+
class FlockMCPConfiguration(BaseModel):
|
|
350
308
|
"""Base Configuration Class for MCP Clients.
|
|
351
309
|
|
|
352
310
|
Each Client should implement their own config
|
|
353
311
|
model by inheriting from this class.
|
|
354
312
|
"""
|
|
355
313
|
|
|
356
|
-
name: str = Field(
|
|
357
|
-
..., description="Name of the server the client connects to."
|
|
358
|
-
)
|
|
314
|
+
name: str = Field(..., description="Name of the server the client connects to.")
|
|
359
315
|
|
|
360
|
-
connection_config:
|
|
316
|
+
connection_config: FlockMCPConnectionConfiguration = Field(
|
|
361
317
|
..., description="MCP Connection Configuration for a client."
|
|
362
318
|
)
|
|
363
319
|
|
|
364
|
-
caching_config:
|
|
365
|
-
default_factory=
|
|
320
|
+
caching_config: FlockMCPCachingConfiguration = Field(
|
|
321
|
+
default_factory=FlockMCPCachingConfiguration,
|
|
366
322
|
description="Configuration for the internal caches of the client.",
|
|
367
323
|
)
|
|
368
324
|
|
|
369
|
-
callback_config:
|
|
370
|
-
default_factory=
|
|
325
|
+
callback_config: FlockMCPCallbackConfiguration = Field(
|
|
326
|
+
default_factory=FlockMCPCallbackConfiguration,
|
|
371
327
|
description="Callback configuration for the client.",
|
|
372
328
|
)
|
|
373
329
|
|
|
374
|
-
feature_config:
|
|
375
|
-
default_factory=
|
|
330
|
+
feature_config: FlockMCPFeatureConfiguration = Field(
|
|
331
|
+
default_factory=FlockMCPFeatureConfiguration,
|
|
376
332
|
description="Feature configuration for the client.",
|
|
377
333
|
)
|
|
378
334
|
|
|
@@ -407,16 +363,14 @@ class FlockMCPConfigurationBase(BaseModel, Serializable):
|
|
|
407
363
|
return data
|
|
408
364
|
|
|
409
365
|
@classmethod
|
|
410
|
-
def from_dict(cls
|
|
366
|
+
def from_dict(cls, data: dict[str, Any]) -> Self:
|
|
411
367
|
"""Deserialize the class."""
|
|
412
368
|
connection_config = data.pop("connection_config", None)
|
|
413
369
|
caching_config = data.pop("caching_config", None)
|
|
414
370
|
feature_config = data.pop("feature_config", None)
|
|
415
371
|
callback_config = data.pop("callback_config", None)
|
|
416
372
|
|
|
417
|
-
instance_data: dict[str, Any] = {
|
|
418
|
-
"name": data["name"]
|
|
419
|
-
}
|
|
373
|
+
instance_data: dict[str, Any] = {"name": data["name"]}
|
|
420
374
|
|
|
421
375
|
if connection_config:
|
|
422
376
|
# Forcing a square into a round hole
|
|
@@ -425,10 +379,12 @@ class FlockMCPConfigurationBase(BaseModel, Serializable):
|
|
|
425
379
|
config_cls = config_field.annotation
|
|
426
380
|
except (AttributeError, KeyError):
|
|
427
381
|
# fallback
|
|
428
|
-
config_cls =
|
|
382
|
+
config_cls = FlockMCPConnectionConfiguration
|
|
429
383
|
instance_data["connection_config"] = config_cls.from_dict(connection_config)
|
|
430
384
|
else:
|
|
431
|
-
raise ValueError(
|
|
385
|
+
raise ValueError(
|
|
386
|
+
f"connection_config MUST be specified for '{data.get('name', 'unknown_server')}"
|
|
387
|
+
)
|
|
432
388
|
|
|
433
389
|
if caching_config:
|
|
434
390
|
try:
|
|
@@ -436,10 +392,10 @@ class FlockMCPConfigurationBase(BaseModel, Serializable):
|
|
|
436
392
|
config_cls = config_field.annotation
|
|
437
393
|
except (AttributeError, KeyError):
|
|
438
394
|
# fallback
|
|
439
|
-
config_cls =
|
|
395
|
+
config_cls = FlockMCPCachingConfiguration
|
|
440
396
|
instance_data["caching_config"] = config_cls.from_dict(caching_config)
|
|
441
397
|
else:
|
|
442
|
-
instance_data["caching_config"] =
|
|
398
|
+
instance_data["caching_config"] = FlockMCPCachingConfiguration()
|
|
443
399
|
|
|
444
400
|
if feature_config:
|
|
445
401
|
try:
|
|
@@ -447,10 +403,10 @@ class FlockMCPConfigurationBase(BaseModel, Serializable):
|
|
|
447
403
|
config_cls = config_field.annotation
|
|
448
404
|
except (AttributeError, KeyError):
|
|
449
405
|
# fallback
|
|
450
|
-
config_cls =
|
|
406
|
+
config_cls = FlockMCPFeatureConfiguration
|
|
451
407
|
instance_data["feature_config"] = config_cls.from_dict(feature_config)
|
|
452
408
|
else:
|
|
453
|
-
instance_data["feature_config"] =
|
|
409
|
+
instance_data["feature_config"] = FlockMCPFeatureConfiguration()
|
|
454
410
|
|
|
455
411
|
if callback_config:
|
|
456
412
|
try:
|
|
@@ -458,16 +414,14 @@ class FlockMCPConfigurationBase(BaseModel, Serializable):
|
|
|
458
414
|
config_cls = config_field.annotation
|
|
459
415
|
except (AttributeError, KeyError):
|
|
460
416
|
# fallback
|
|
461
|
-
config_cls =
|
|
417
|
+
config_cls = FlockMCPCallbackConfiguration
|
|
462
418
|
instance_data["callback_config"] = config_cls.from_dict(callback_config)
|
|
463
419
|
else:
|
|
464
|
-
instance_data["callback_config"] =
|
|
420
|
+
instance_data["callback_config"] = FlockMCPCallbackConfiguration()
|
|
465
421
|
|
|
466
|
-
return cls(**
|
|
422
|
+
return cls(**dict(instance_data.items()))
|
|
467
423
|
|
|
468
424
|
@classmethod
|
|
469
|
-
def with_fields(cls
|
|
425
|
+
def with_fields(cls, **field_definitions) -> type[Self]:
|
|
470
426
|
"""Create a new config class with additional fields."""
|
|
471
|
-
return create_model(
|
|
472
|
-
f"Dynamic{cls.__name__}", __base__=cls, **field_definitions
|
|
473
|
-
)
|
|
427
|
+
return create_model(f"Dynamic{cls.__name__}", __base__=cls, **field_definitions)
|