flock-core 0.5.0b28__py3-none-any.whl → 0.5.56b0__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 +678 -0
- flock/api/themes.py +71 -0
- flock/artifacts.py +79 -0
- flock/cli.py +75 -0
- flock/components.py +173 -0
- flock/dashboard/__init__.py +28 -0
- flock/dashboard/collector.py +283 -0
- flock/dashboard/events.py +182 -0
- flock/dashboard/launcher.py +230 -0
- flock/dashboard/service.py +537 -0
- flock/dashboard/websocket.py +235 -0
- flock/engines/__init__.py +6 -0
- flock/engines/dspy_engine.py +856 -0
- flock/examples.py +128 -0
- flock/{core/util → helper}/cli_helper.py +4 -3
- flock/{core/logging → logging}/__init__.py +2 -3
- 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 -115
- flock/{core/logging → logging}/logging.py +77 -61
- flock/{core/logging → logging}/telemetry.py +20 -26
- flock/{core/logging → logging}/telemetry_exporter/base_exporter.py +2 -2
- flock/{core/logging → logging}/telemetry_exporter/file_exporter.py +6 -9
- flock/{core/logging → logging}/telemetry_exporter/sqlite_exporter.py +2 -3
- flock/{core/logging → logging}/trace_and_logged.py +20 -24
- flock/mcp/__init__.py +91 -0
- flock/{core/mcp/mcp_client.py → mcp/client.py} +103 -154
- flock/{core/mcp/mcp_config.py → mcp/config.py} +62 -117
- flock/mcp/manager.py +255 -0
- flock/mcp/servers/sse/__init__.py +1 -1
- flock/mcp/servers/sse/flock_sse_server.py +11 -53
- flock/mcp/servers/stdio/__init__.py +1 -1
- flock/mcp/servers/stdio/flock_stdio_server.py +8 -48
- flock/mcp/servers/streamable_http/flock_streamable_http_server.py +17 -62
- flock/mcp/servers/websockets/flock_websocket_server.py +7 -40
- flock/{core/mcp/flock_mcp_tool.py → mcp/tool.py} +16 -26
- flock/mcp/types/__init__.py +42 -0
- flock/{core/mcp → mcp}/types/callbacks.py +9 -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 +1 -1
- flock/orchestrator.py +645 -0
- flock/registry.py +148 -0
- flock/runtime.py +262 -0
- flock/service.py +140 -0
- flock/store.py +69 -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/darkside.toml +1 -1
- 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 +1 -1
- 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/{components/utility → utility}/output_utility_component.py +68 -53
- flock/visibility.py +107 -0
- flock_core-0.5.56b0.dist-info/METADATA +747 -0
- flock_core-0.5.56b0.dist-info/RECORD +398 -0
- flock_core-0.5.56b0.dist-info/entry_points.txt +2 -0
- {flock_core-0.5.0b28.dist-info → flock_core-0.5.56b0.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/components/__init__.py +0 -30
- flock/components/evaluation/__init__.py +0 -9
- flock/components/evaluation/declarative_evaluation_component.py +0 -606
- flock/components/routing/__init__.py +0 -15
- flock/components/routing/conditional_routing_component.py +0 -494
- flock/components/routing/default_routing_component.py +0 -103
- flock/components/routing/llm_routing_component.py +0 -206
- flock/components/utility/__init__.py +0 -22
- flock/components/utility/example_utility_component.py +0 -250
- flock/components/utility/feedback_utility_component.py +0 -206
- flock/components/utility/memory_utility_component.py +0 -550
- flock/components/utility/metrics_utility_component.py +0 -700
- flock/config.py +0 -61
- flock/core/__init__.py +0 -110
- flock/core/agent/__init__.py +0 -16
- flock/core/agent/default_agent.py +0 -216
- flock/core/agent/flock_agent_components.py +0 -104
- flock/core/agent/flock_agent_execution.py +0 -101
- flock/core/agent/flock_agent_integration.py +0 -260
- flock/core/agent/flock_agent_lifecycle.py +0 -186
- flock/core/agent/flock_agent_serialization.py +0 -381
- flock/core/api/__init__.py +0 -10
- flock/core/api/custom_endpoint.py +0 -45
- flock/core/api/endpoints.py +0 -254
- flock/core/api/main.py +0 -162
- flock/core/api/models.py +0 -97
- flock/core/api/run_store.py +0 -224
- flock/core/api/runner.py +0 -44
- flock/core/api/service.py +0 -214
- flock/core/component/__init__.py +0 -15
- flock/core/component/agent_component_base.py +0 -309
- flock/core/component/evaluation_component.py +0 -62
- flock/core/component/routing_component.py +0 -74
- flock/core/component/utility_component.py +0 -69
- flock/core/config/flock_agent_config.py +0 -58
- flock/core/config/scheduled_agent_config.py +0 -40
- flock/core/context/context.py +0 -213
- flock/core/context/context_manager.py +0 -37
- flock/core/context/context_vars.py +0 -10
- flock/core/evaluation/utils.py +0 -396
- 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 -164
- flock/core/flock.py +0 -634
- flock/core/flock_agent.py +0 -336
- flock/core/flock_factory.py +0 -613
- 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/mcp/__init__.py +0 -1
- flock/core/mcp/flock_mcp_server.py +0 -680
- flock/core/mcp/mcp_client_manager.py +0 -201
- flock/core/mcp/types/__init__.py +0 -1
- flock/core/mixin/dspy_integration.py +0 -403
- flock/core/mixin/prompt_parser.py +0 -125
- flock/core/orchestration/__init__.py +0 -15
- flock/core/orchestration/flock_batch_processor.py +0 -94
- flock/core/orchestration/flock_evaluator.py +0 -113
- flock/core/orchestration/flock_execution.py +0 -295
- flock/core/orchestration/flock_initialization.py +0 -149
- flock/core/orchestration/flock_server_manager.py +0 -67
- flock/core/orchestration/flock_web_server.py +0 -117
- flock/core/registry/__init__.py +0 -45
- flock/core/registry/agent_registry.py +0 -69
- flock/core/registry/callable_registry.py +0 -139
- flock/core/registry/component_discovery.py +0 -142
- flock/core/registry/component_registry.py +0 -64
- flock/core/registry/config_mapping.py +0 -64
- flock/core/registry/decorators.py +0 -137
- flock/core/registry/registry_hub.py +0 -205
- flock/core/registry/server_registry.py +0 -57
- flock/core/registry/type_registry.py +0 -86
- flock/core/serialization/__init__.py +0 -13
- flock/core/serialization/callable_registry.py +0 -52
- flock/core/serialization/flock_serializer.py +0 -832
- 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 -412
- flock/core/util/file_path_utils.py +0 -223
- flock/core/util/hydrator.py +0 -309
- flock/core/util/input_resolver.py +0 -164
- flock/core/util/loader.py +0 -59
- flock/core/util/splitter.py +0 -219
- flock/di.py +0 -27
- flock/platform/docker_tools.py +0 -49
- flock/platform/jaeger_install.py +0 -86
- 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 -241
- flock/webapp/app/api/execution.py +0 -709
- flock/webapp/app/api/flock_management.py +0 -129
- flock/webapp/app/api/registry_viewer.py +0 -30
- flock/webapp/app/chat.py +0 -665
- flock/webapp/app/config.py +0 -104
- flock/webapp/app/dependencies.py +0 -117
- flock/webapp/app/main.py +0 -1070
- 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 -337
- flock/webapp/app/services/sharing_models.py +0 -81
- flock/webapp/app/services/sharing_store.py +0 -762
- flock/webapp/app/templates/theme_mapper.html +0 -326
- flock/webapp/app/theme_mapper.py +0 -812
- flock/webapp/app/utils.py +0 -85
- flock/webapp/run.py +0 -215
- 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 -46
- flock/webapp/static/css/sidebar.css +0 -127
- flock/webapp/static/css/two-pane.css +0 -48
- flock/webapp/templates/base.html +0 -200
- 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 -118
- 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/_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/_streaming_results_container.html +0 -195
- 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 -196
- flock/workflow/agent_activities.py +0 -24
- flock/workflow/agent_execution_activity.py +0 -202
- flock/workflow/flock_workflow.py +0 -214
- flock/workflow/temporal_config.py +0 -96
- flock/workflow/temporal_setup.py +0 -68
- flock_core-0.5.0b28.dist-info/METADATA +0 -274
- flock_core-0.5.0b28.dist-info/RECORD +0 -561
- flock_core-0.5.0b28.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.5.0b28.dist-info → flock_core-0.5.56b0.dist-info}/WHEEL +0 -0
flock/core/flock_factory.py
DELETED
|
@@ -1,613 +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
|
-
# Feedback parameters
|
|
447
|
-
enable_feedback: bool = False,
|
|
448
|
-
feedback_storage_type: Literal["sqlite", "azure"] = "sqlite",
|
|
449
|
-
feedback_max_items: int = 5,
|
|
450
|
-
feedback_timeframe_days: int = 30,
|
|
451
|
-
feedback_input_key: str = "feedback_context",
|
|
452
|
-
feedback_include_expected_responses: bool = True,
|
|
453
|
-
feedback_include_actual_responses: bool = False,
|
|
454
|
-
feedback_filter_keywords: list[str] | None = None,
|
|
455
|
-
feedback_exclude_keywords: list[str] | None = None,
|
|
456
|
-
feedback_sqlite_db_path: str = "./flock_feedback.db",
|
|
457
|
-
feedback_azure_connection_string: str | None = None,
|
|
458
|
-
feedback_azure_table_name: str = "flockfeedback",
|
|
459
|
-
# Example parameters
|
|
460
|
-
enable_examples: bool = False,
|
|
461
|
-
example_storage_type: Literal["sqlite", "azure"] = "sqlite",
|
|
462
|
-
example_max_examples: int = 5,
|
|
463
|
-
example_timeframe_days: int = 30,
|
|
464
|
-
example_input_key: str = "examples_context",
|
|
465
|
-
example_filter_keywords: list[str] | None = None,
|
|
466
|
-
example_exclude_keywords: list[str] | None = None,
|
|
467
|
-
example_sqlite_db_path: str = "./flock_examples.db",
|
|
468
|
-
example_azure_connection_string: str | None = None,
|
|
469
|
-
example_azure_table_name: str = "flockexamples",
|
|
470
|
-
) -> FlockAgent:
|
|
471
|
-
"""Create a default FlockAgent.
|
|
472
|
-
|
|
473
|
-
Deprecated: Use `DefaultAgent(...)` instead. This method now delegates to
|
|
474
|
-
`DefaultAgent` and emits an optional one-time deprecation warning if the
|
|
475
|
-
environment variable `FLOCK_WARN_FACTORY_DEPRECATION` is truthy (default).
|
|
476
|
-
"""
|
|
477
|
-
_maybe_warn_factory_deprecation()
|
|
478
|
-
|
|
479
|
-
# Configure feedback if enabled
|
|
480
|
-
feedback_config = None
|
|
481
|
-
if enable_feedback:
|
|
482
|
-
from flock.components.utility.feedback_utility_component import FeedbackUtilityConfig
|
|
483
|
-
feedback_config = FeedbackUtilityConfig(
|
|
484
|
-
storage_type=feedback_storage_type,
|
|
485
|
-
max_feedback_items=feedback_max_items,
|
|
486
|
-
feedback_timeframe_days=feedback_timeframe_days,
|
|
487
|
-
feedback_input_key=feedback_input_key,
|
|
488
|
-
include_expected_responses=feedback_include_expected_responses,
|
|
489
|
-
include_actual_responses=feedback_include_actual_responses,
|
|
490
|
-
feedback_filter_keywords=feedback_filter_keywords or [],
|
|
491
|
-
feedback_exclude_keywords=feedback_exclude_keywords or [],
|
|
492
|
-
sqlite_db_path=feedback_sqlite_db_path,
|
|
493
|
-
azure_connection_string=feedback_azure_connection_string,
|
|
494
|
-
azure_table_name=feedback_azure_table_name,
|
|
495
|
-
)
|
|
496
|
-
|
|
497
|
-
# Configure examples if enabled
|
|
498
|
-
example_config = None
|
|
499
|
-
if enable_examples:
|
|
500
|
-
from flock.components.utility.example_utility_component import ExampleUtilityConfig
|
|
501
|
-
example_config = ExampleUtilityConfig(
|
|
502
|
-
storage_type=example_storage_type,
|
|
503
|
-
max_examples=example_max_examples,
|
|
504
|
-
example_timeframe_days=example_timeframe_days,
|
|
505
|
-
example_input_key=example_input_key,
|
|
506
|
-
example_filter_keywords=example_filter_keywords or [],
|
|
507
|
-
example_exclude_keywords=example_exclude_keywords or [],
|
|
508
|
-
sqlite_db_path=example_sqlite_db_path,
|
|
509
|
-
azure_connection_string=example_azure_connection_string,
|
|
510
|
-
azure_table_name=example_azure_table_name,
|
|
511
|
-
)
|
|
512
|
-
|
|
513
|
-
return DefaultAgent(
|
|
514
|
-
name=name,
|
|
515
|
-
description=description,
|
|
516
|
-
model=model,
|
|
517
|
-
input=input,
|
|
518
|
-
output=output,
|
|
519
|
-
tools=tools,
|
|
520
|
-
servers=servers,
|
|
521
|
-
use_cache=use_cache,
|
|
522
|
-
temperature=temperature,
|
|
523
|
-
max_tokens=max_tokens,
|
|
524
|
-
max_tool_calls=max_tool_calls,
|
|
525
|
-
max_retries=max_retries,
|
|
526
|
-
stream=stream,
|
|
527
|
-
include_thought_process=include_thought_process,
|
|
528
|
-
include_reasoning=include_reasoning,
|
|
529
|
-
enable_rich_tables=enable_rich_tables,
|
|
530
|
-
output_theme=output_theme,
|
|
531
|
-
no_output=no_output,
|
|
532
|
-
print_context=print_context,
|
|
533
|
-
write_to_file=write_to_file,
|
|
534
|
-
wait_for_input=wait_for_input,
|
|
535
|
-
alert_latency_threshold_ms=alert_latency_threshold_ms,
|
|
536
|
-
next_agent=next_agent,
|
|
537
|
-
temporal_activity_config=temporal_activity_config,
|
|
538
|
-
enable_feedback=enable_feedback,
|
|
539
|
-
feedback_config=feedback_config,
|
|
540
|
-
enable_examples=enable_examples,
|
|
541
|
-
example_config=example_config,
|
|
542
|
-
)
|
|
543
|
-
|
|
544
|
-
@staticmethod
|
|
545
|
-
def create_scheduled_agent(
|
|
546
|
-
name: str,
|
|
547
|
-
schedule_expression: str, # e.g., "every 1h", "0 0 * * *"
|
|
548
|
-
description: DynamicStr | None = None,
|
|
549
|
-
model: str | None = None,
|
|
550
|
-
output: DynamicStr | None = None, # Input might be implicit or none
|
|
551
|
-
tools: list[Callable[..., Any] | Any] | None = None,
|
|
552
|
-
servers: list[str | FlockMCPServer] | None = None,
|
|
553
|
-
use_cache: bool = False, # Whether to cache results
|
|
554
|
-
temperature: float = 0.7, # Temperature for model responses
|
|
555
|
-
# ... other common agent params from create_default_agent ...
|
|
556
|
-
next_agent: DynamicStr | None = None,
|
|
557
|
-
temporal_activity_config: TemporalActivityConfig
|
|
558
|
-
| None = None, # If you want scheduled tasks to be Temporal activities
|
|
559
|
-
**kwargs, # Forward other standard agent params
|
|
560
|
-
) -> FlockAgent:
|
|
561
|
-
"""Creates a FlockAgent configured to run on a schedule."""
|
|
562
|
-
agent_config = ScheduledAgentConfig( # Use the new config type
|
|
563
|
-
schedule_expression=schedule_expression,
|
|
564
|
-
enabled=True,
|
|
565
|
-
initial_run=True,
|
|
566
|
-
max_runs=0,
|
|
567
|
-
**kwargs,
|
|
568
|
-
)
|
|
569
|
-
|
|
570
|
-
agent = DefaultAgent(
|
|
571
|
-
name=name,
|
|
572
|
-
description=description,
|
|
573
|
-
model=model,
|
|
574
|
-
input="trigger_time: str | Time of scheduled execution",
|
|
575
|
-
output=output,
|
|
576
|
-
tools=tools,
|
|
577
|
-
servers=servers,
|
|
578
|
-
temporal_activity_config=temporal_activity_config,
|
|
579
|
-
use_cache=use_cache,
|
|
580
|
-
temperature=temperature,
|
|
581
|
-
next_agent=next_agent,
|
|
582
|
-
**kwargs,
|
|
583
|
-
)
|
|
584
|
-
agent.config = agent_config # Assign the scheduled agent config
|
|
585
|
-
|
|
586
|
-
return agent
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
# ---- one-time deprecation warning helper ----
|
|
590
|
-
_FACTORY_DEPRECATION_WARNED = False
|
|
591
|
-
_factory_logger = get_logger("core.factory")
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
def _maybe_warn_factory_deprecation() -> None: # pragma: no cover - side-effect
|
|
595
|
-
global _FACTORY_DEPRECATION_WARNED
|
|
596
|
-
if _FACTORY_DEPRECATION_WARNED:
|
|
597
|
-
return
|
|
598
|
-
flag = os.getenv("FLOCK_WARN_FACTORY_DEPRECATION", "1").strip()
|
|
599
|
-
enabled = flag not in {"0", "false", "False", "off", "OFF"}
|
|
600
|
-
if not enabled:
|
|
601
|
-
_FACTORY_DEPRECATION_WARNED = True
|
|
602
|
-
return
|
|
603
|
-
msg = (
|
|
604
|
-
"FlockFactory.create_default_agent is deprecated and will be removed in a future release. "
|
|
605
|
-
"Please use DefaultAgent(...) instead. Set FLOCK_WARN_FACTORY_DEPRECATION=0 to disable this notice."
|
|
606
|
-
)
|
|
607
|
-
# Log and emit a warnings.warn once
|
|
608
|
-
try:
|
|
609
|
-
_factory_logger.warning(msg)
|
|
610
|
-
except Exception:
|
|
611
|
-
pass
|
|
612
|
-
warnings.warn(msg, DeprecationWarning, stacklevel=2)
|
|
613
|
-
_FACTORY_DEPRECATION_WARNED = True
|