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/cli/utils.py
DELETED
|
@@ -1,135 +0,0 @@
|
|
|
1
|
-
# src/pilot_rules/collector/utils.py
|
|
2
|
-
import datetime
|
|
3
|
-
from pathlib import Path
|
|
4
|
-
from typing import Any
|
|
5
|
-
|
|
6
|
-
from rich import box
|
|
7
|
-
from rich.console import Console
|
|
8
|
-
from rich.panel import Panel
|
|
9
|
-
from rich.progress import BarColumn, Progress, SpinnerColumn, TextColumn
|
|
10
|
-
from rich.table import Table
|
|
11
|
-
|
|
12
|
-
# Create a shared console instance for consistent styling
|
|
13
|
-
console = Console()
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
def get_file_metadata(file_path: str) -> dict[str, Any]:
|
|
17
|
-
"""Extract metadata from a file."""
|
|
18
|
-
metadata = {
|
|
19
|
-
"path": file_path,
|
|
20
|
-
"size_bytes": 0,
|
|
21
|
-
"line_count": 0,
|
|
22
|
-
"last_modified": "Unknown",
|
|
23
|
-
"created": "Unknown",
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
try:
|
|
27
|
-
p = Path(file_path)
|
|
28
|
-
stats = p.stat()
|
|
29
|
-
metadata["size_bytes"] = stats.st_size
|
|
30
|
-
metadata["last_modified"] = datetime.datetime.fromtimestamp(
|
|
31
|
-
stats.st_mtime
|
|
32
|
-
).strftime("%Y-%m-%d %H:%M:%S")
|
|
33
|
-
# ctime is platform dependent (creation on Windows, metadata change on Unix)
|
|
34
|
-
# Use mtime as a reliable fallback for "created" if ctime is older than mtime
|
|
35
|
-
ctime = stats.st_ctime
|
|
36
|
-
mtime = stats.st_mtime
|
|
37
|
-
best_ctime = ctime if ctime <= mtime else mtime # Heuristic
|
|
38
|
-
metadata["created"] = datetime.datetime.fromtimestamp(
|
|
39
|
-
best_ctime
|
|
40
|
-
).strftime("%Y-%m-%d %H:%M:%S")
|
|
41
|
-
|
|
42
|
-
try:
|
|
43
|
-
# Attempt to read as text, fallback for binary or encoding issues
|
|
44
|
-
with p.open("r", encoding="utf-8", errors="ignore") as f:
|
|
45
|
-
content = f.read()
|
|
46
|
-
metadata["line_count"] = len(content.splitlines())
|
|
47
|
-
except (OSError, UnicodeDecodeError) as read_err:
|
|
48
|
-
# Handle cases where reading might fail (binary file, permissions etc.)
|
|
49
|
-
console.print(
|
|
50
|
-
f"[yellow]⚠ Warning:[/yellow] Could not read content/count lines for [cyan]{file_path}[/cyan]: [red]{read_err}[/red]"
|
|
51
|
-
)
|
|
52
|
-
metadata["line_count"] = 0 # Indicate unreadable or binary
|
|
53
|
-
|
|
54
|
-
except Exception as e:
|
|
55
|
-
console.print(
|
|
56
|
-
f"[yellow]⚠ Warning:[/yellow] Could not get complete metadata for [cyan]{file_path}[/cyan]: [red]{e}[/red]"
|
|
57
|
-
)
|
|
58
|
-
|
|
59
|
-
return metadata
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
# --- Rich Formatting Utilities ---
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
def print_header(title: str, style: str = "blue") -> None:
|
|
66
|
-
"""Print a styled header with a panel."""
|
|
67
|
-
console.rule()
|
|
68
|
-
console.print(
|
|
69
|
-
Panel.fit(f"[bold {style}]{title}[/bold {style}]", border_style=style)
|
|
70
|
-
)
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
def print_subheader(title: str, style: str = "cyan") -> None:
|
|
74
|
-
"""Print a styled subheader."""
|
|
75
|
-
console.print(f"[bold {style}]== {title} ==[/bold {style}]")
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
def print_success(message: str) -> None:
|
|
79
|
-
"""Print a success message."""
|
|
80
|
-
console.print(f"[bold green]✓[/bold green] {message}")
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
def print_error(message: str, exit_code: int | None = None) -> None:
|
|
84
|
-
"""Print an error message and optionally exit."""
|
|
85
|
-
console.print(f"[bold red]✗ ERROR:[/bold red] {message}")
|
|
86
|
-
if exit_code is not None:
|
|
87
|
-
exit(exit_code)
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
def print_warning(message: str) -> None:
|
|
91
|
-
"""Print a warning message."""
|
|
92
|
-
console.print(f"[yellow]⚠ Warning:[/yellow] {message}")
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
def create_progress() -> Progress:
|
|
96
|
-
"""Create a standardized progress bar."""
|
|
97
|
-
return Progress(
|
|
98
|
-
SpinnerColumn(),
|
|
99
|
-
TextColumn("[bold blue]{task.description}"),
|
|
100
|
-
BarColumn(complete_style="green", finished_style="green"),
|
|
101
|
-
TextColumn("[bold]{task.completed}/{task.total}"),
|
|
102
|
-
console=console,
|
|
103
|
-
)
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
def create_task_table(title: str) -> Table:
|
|
107
|
-
"""Create a standardized table for displaying task information."""
|
|
108
|
-
table = Table(
|
|
109
|
-
title=title, show_header=True, header_style="bold cyan", box=box.ROUNDED
|
|
110
|
-
)
|
|
111
|
-
return table
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
def print_file_stats(files: list[str], title: str = "File Statistics") -> None:
|
|
115
|
-
"""Print statistics about a list of files."""
|
|
116
|
-
if not files:
|
|
117
|
-
console.print("[yellow]No files found to display statistics.[/yellow]")
|
|
118
|
-
return
|
|
119
|
-
|
|
120
|
-
table = Table(title=title, show_header=True, header_style="bold magenta")
|
|
121
|
-
table.add_column("Statistic", style="cyan")
|
|
122
|
-
table.add_column("Value", style="green")
|
|
123
|
-
|
|
124
|
-
extensions = {Path(f).suffix.lower() for f in files if Path(f).suffix}
|
|
125
|
-
total_size = sum(get_file_metadata(f).get("size_bytes", 0) for f in files)
|
|
126
|
-
total_lines = sum(get_file_metadata(f).get("line_count", 0) for f in files)
|
|
127
|
-
|
|
128
|
-
table.add_row("Total Files", str(len(files)))
|
|
129
|
-
table.add_row("Total Size", f"{total_size / 1024:.2f} KB")
|
|
130
|
-
table.add_row("Total Lines", str(total_lines))
|
|
131
|
-
table.add_row(
|
|
132
|
-
"Extensions", ", ".join(sorted(extensions)) if extensions else "None"
|
|
133
|
-
)
|
|
134
|
-
|
|
135
|
-
console.print(table)
|
flock/cli/view_results.py
DELETED
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
"""View execution results and history.
|
|
2
|
-
|
|
3
|
-
This module provides functionality to view the results of previous Flock executions.
|
|
4
|
-
"""
|
|
5
|
-
|
|
6
|
-
from rich.console import Console
|
|
7
|
-
from rich.panel import Panel
|
|
8
|
-
|
|
9
|
-
from flock.core.flock import Flock
|
|
10
|
-
from flock.core.util.cli_helper import init_console
|
|
11
|
-
|
|
12
|
-
# Create console instance
|
|
13
|
-
console = Console()
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
def view_results(flock: Flock):
|
|
17
|
-
"""View execution results for a Flock instance.
|
|
18
|
-
|
|
19
|
-
Args:
|
|
20
|
-
flock: The Flock instance to view results for
|
|
21
|
-
"""
|
|
22
|
-
init_console()
|
|
23
|
-
console.print(Panel("[bold green]View Results[/]"), justify="center")
|
|
24
|
-
console.print(
|
|
25
|
-
"[yellow]Results history functionality not yet implemented.[/]"
|
|
26
|
-
)
|
|
27
|
-
console.print(
|
|
28
|
-
"This feature will allow viewing and filtering past execution results."
|
|
29
|
-
)
|
flock/cli/yaml_editor.py
DELETED
|
@@ -1,396 +0,0 @@
|
|
|
1
|
-
"""YAML Editor for Flock CLI.
|
|
2
|
-
|
|
3
|
-
This module provides functionality to view, edit, and validate YAML configurations
|
|
4
|
-
for Flock and FlockAgent instances.
|
|
5
|
-
"""
|
|
6
|
-
|
|
7
|
-
import os
|
|
8
|
-
import subprocess
|
|
9
|
-
import tempfile
|
|
10
|
-
from pathlib import Path
|
|
11
|
-
|
|
12
|
-
import questionary
|
|
13
|
-
import yaml
|
|
14
|
-
from rich.console import Console
|
|
15
|
-
from rich.panel import Panel
|
|
16
|
-
from rich.syntax import Syntax
|
|
17
|
-
from rich.table import Table
|
|
18
|
-
|
|
19
|
-
from flock.core.flock import Flock
|
|
20
|
-
from flock.core.flock_agent import FlockAgent
|
|
21
|
-
from flock.core.util.cli_helper import init_console
|
|
22
|
-
|
|
23
|
-
# Create console instance
|
|
24
|
-
console = Console()
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
def yaml_editor(flock_or_agent: Flock | FlockAgent | None = None):
|
|
28
|
-
"""YAML Editor main entry point.
|
|
29
|
-
|
|
30
|
-
Args:
|
|
31
|
-
flock_or_agent: Optional Flock or FlockAgent instance to edit
|
|
32
|
-
"""
|
|
33
|
-
init_console()
|
|
34
|
-
console.print(Panel("[bold green]YAML Editor[/]"), justify="center")
|
|
35
|
-
|
|
36
|
-
if flock_or_agent is None:
|
|
37
|
-
# If no object provided, provide options to load from file
|
|
38
|
-
_yaml_file_browser()
|
|
39
|
-
return
|
|
40
|
-
|
|
41
|
-
while True:
|
|
42
|
-
init_console()
|
|
43
|
-
console.print(Panel("[bold green]YAML Editor[/]"), justify="center")
|
|
44
|
-
|
|
45
|
-
# Determine object type
|
|
46
|
-
if isinstance(flock_or_agent, Flock):
|
|
47
|
-
obj_type = "Flock"
|
|
48
|
-
console.print(
|
|
49
|
-
f"Editing [bold cyan]Flock[/] with {len(flock_or_agent._agents)} agents"
|
|
50
|
-
)
|
|
51
|
-
elif isinstance(flock_or_agent, FlockAgent):
|
|
52
|
-
obj_type = "FlockAgent"
|
|
53
|
-
console.print(
|
|
54
|
-
f"Editing [bold cyan]FlockAgent[/]: {flock_or_agent.name}"
|
|
55
|
-
)
|
|
56
|
-
else:
|
|
57
|
-
console.print("[bold red]Error: Unknown object type[/]")
|
|
58
|
-
input("\nPress Enter to continue...")
|
|
59
|
-
return
|
|
60
|
-
|
|
61
|
-
console.line()
|
|
62
|
-
|
|
63
|
-
choice = questionary.select(
|
|
64
|
-
"What would you like to do?",
|
|
65
|
-
choices=[
|
|
66
|
-
questionary.Separator(line=" "),
|
|
67
|
-
"View Current YAML",
|
|
68
|
-
"Edit YAML Directly",
|
|
69
|
-
"Abstract Editor (Visual)",
|
|
70
|
-
"Validate YAML",
|
|
71
|
-
"Save to File",
|
|
72
|
-
questionary.Separator(),
|
|
73
|
-
"Back to Main Menu",
|
|
74
|
-
],
|
|
75
|
-
).ask()
|
|
76
|
-
|
|
77
|
-
if choice == "View Current YAML":
|
|
78
|
-
_view_yaml(flock_or_agent)
|
|
79
|
-
elif choice == "Edit YAML Directly":
|
|
80
|
-
flock_or_agent = _edit_yaml_directly(flock_or_agent)
|
|
81
|
-
elif choice == "Abstract Editor (Visual)":
|
|
82
|
-
flock_or_agent = _abstract_editor(flock_or_agent)
|
|
83
|
-
elif choice == "Validate YAML":
|
|
84
|
-
_validate_yaml(flock_or_agent)
|
|
85
|
-
elif choice == "Save to File":
|
|
86
|
-
_save_to_file(flock_or_agent)
|
|
87
|
-
elif choice == "Back to Main Menu":
|
|
88
|
-
break
|
|
89
|
-
|
|
90
|
-
if choice != "Back to Main Menu":
|
|
91
|
-
input("\nPress Enter to continue...")
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
def _yaml_file_browser():
|
|
95
|
-
"""Browser for YAML files to load."""
|
|
96
|
-
console.print("\n[bold]YAML File Browser[/]")
|
|
97
|
-
console.line()
|
|
98
|
-
|
|
99
|
-
current_dir = os.getcwd()
|
|
100
|
-
console.print(f"Current directory: [cyan]{current_dir}[/]")
|
|
101
|
-
|
|
102
|
-
# List .yaml/.yml files in current directory
|
|
103
|
-
yaml_files = list(Path(current_dir).glob("*.yaml")) + list(
|
|
104
|
-
Path(current_dir).glob("*.yml")
|
|
105
|
-
)
|
|
106
|
-
|
|
107
|
-
if not yaml_files:
|
|
108
|
-
console.print("[yellow]No YAML files found in current directory.[/]")
|
|
109
|
-
input("\nPress Enter to continue...")
|
|
110
|
-
return
|
|
111
|
-
|
|
112
|
-
# Display files
|
|
113
|
-
table = Table(title="YAML Files")
|
|
114
|
-
table.add_column("Filename", style="cyan")
|
|
115
|
-
table.add_column("Size", style="green")
|
|
116
|
-
table.add_column("Last Modified", style="yellow")
|
|
117
|
-
|
|
118
|
-
for file in yaml_files:
|
|
119
|
-
table.add_row(
|
|
120
|
-
file.name, f"{file.stat().st_size} bytes", f"{file.stat().st_mtime}"
|
|
121
|
-
)
|
|
122
|
-
|
|
123
|
-
console.print(table)
|
|
124
|
-
|
|
125
|
-
# TODO: Add file selection and loading
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
def _view_yaml(obj: Flock | FlockAgent):
|
|
129
|
-
"""View the YAML representation of an object.
|
|
130
|
-
|
|
131
|
-
Args:
|
|
132
|
-
obj: The object to view as YAML
|
|
133
|
-
"""
|
|
134
|
-
yaml_str = obj.to_yaml()
|
|
135
|
-
|
|
136
|
-
# Add file path information header if it's a Flock with component file paths
|
|
137
|
-
if isinstance(obj, Flock) and hasattr(obj, "_component_file_paths"):
|
|
138
|
-
has_file_paths = bool(getattr(obj, "_component_file_paths", {}))
|
|
139
|
-
if has_file_paths:
|
|
140
|
-
console.print(
|
|
141
|
-
"[bold yellow]Note: This Flock contains components with file paths[/]"
|
|
142
|
-
)
|
|
143
|
-
|
|
144
|
-
# Display with syntax highlighting
|
|
145
|
-
syntax = Syntax(
|
|
146
|
-
yaml_str,
|
|
147
|
-
"yaml",
|
|
148
|
-
theme="monokai",
|
|
149
|
-
line_numbers=True,
|
|
150
|
-
code_width=100,
|
|
151
|
-
word_wrap=True,
|
|
152
|
-
)
|
|
153
|
-
|
|
154
|
-
init_console()
|
|
155
|
-
console.print(Panel("[bold green]YAML View[/]"), justify="center")
|
|
156
|
-
console.print(syntax)
|
|
157
|
-
|
|
158
|
-
# Show file path information if available
|
|
159
|
-
if isinstance(obj, Flock):
|
|
160
|
-
# Get registry for checking file paths
|
|
161
|
-
try:
|
|
162
|
-
from flock.core.flock_registry import get_registry
|
|
163
|
-
|
|
164
|
-
registry = get_registry()
|
|
165
|
-
|
|
166
|
-
if (
|
|
167
|
-
hasattr(registry, "_component_file_paths")
|
|
168
|
-
and registry._component_file_paths
|
|
169
|
-
):
|
|
170
|
-
# Get component names in this Flock
|
|
171
|
-
components = set()
|
|
172
|
-
for agent in obj._agents.values():
|
|
173
|
-
if hasattr(agent, "module") and agent.module:
|
|
174
|
-
module_path = getattr(agent.module, "module_path", None)
|
|
175
|
-
if module_path:
|
|
176
|
-
components.add(module_path)
|
|
177
|
-
|
|
178
|
-
# Show file paths for components in this Flock
|
|
179
|
-
file_paths = []
|
|
180
|
-
for component_name in components:
|
|
181
|
-
if component_name in registry._component_file_paths:
|
|
182
|
-
file_paths.append(
|
|
183
|
-
(
|
|
184
|
-
component_name,
|
|
185
|
-
registry._component_file_paths[component_name],
|
|
186
|
-
)
|
|
187
|
-
)
|
|
188
|
-
|
|
189
|
-
if file_paths:
|
|
190
|
-
console.print("\n[bold cyan]Component File Paths:[/]")
|
|
191
|
-
table = Table()
|
|
192
|
-
table.add_column("Component", style="green")
|
|
193
|
-
table.add_column("File Path", style="yellow")
|
|
194
|
-
|
|
195
|
-
for component_name, file_path in file_paths:
|
|
196
|
-
table.add_row(component_name, file_path)
|
|
197
|
-
|
|
198
|
-
console.print(table)
|
|
199
|
-
except ImportError:
|
|
200
|
-
pass # Skip if registry is not available
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
def _edit_yaml_directly(obj: Flock | FlockAgent) -> Flock | FlockAgent:
|
|
204
|
-
"""Edit the YAML representation directly using an external editor.
|
|
205
|
-
|
|
206
|
-
Args:
|
|
207
|
-
obj: The object to edit
|
|
208
|
-
|
|
209
|
-
Returns:
|
|
210
|
-
The updated object
|
|
211
|
-
"""
|
|
212
|
-
# Convert to YAML
|
|
213
|
-
yaml_str = obj.to_yaml()
|
|
214
|
-
|
|
215
|
-
# Get file path information if it's a Flock
|
|
216
|
-
component_file_paths = {}
|
|
217
|
-
if isinstance(obj, Flock):
|
|
218
|
-
try:
|
|
219
|
-
from flock.core.flock_registry import get_registry
|
|
220
|
-
|
|
221
|
-
registry = get_registry()
|
|
222
|
-
|
|
223
|
-
if hasattr(registry, "_component_file_paths"):
|
|
224
|
-
# Save the file paths to restore later
|
|
225
|
-
component_file_paths = registry._component_file_paths.copy()
|
|
226
|
-
except ImportError:
|
|
227
|
-
pass
|
|
228
|
-
|
|
229
|
-
# Create a temporary file
|
|
230
|
-
with tempfile.NamedTemporaryFile(
|
|
231
|
-
suffix=".yaml", mode="w+", delete=False
|
|
232
|
-
) as tmp:
|
|
233
|
-
tmp.write(yaml_str)
|
|
234
|
-
tmp_path = tmp.name
|
|
235
|
-
|
|
236
|
-
try:
|
|
237
|
-
# Determine which editor to use
|
|
238
|
-
editor = os.environ.get(
|
|
239
|
-
"EDITOR", "notepad" if os.name == "nt" else "nano"
|
|
240
|
-
)
|
|
241
|
-
|
|
242
|
-
# Open the editor
|
|
243
|
-
console.print(
|
|
244
|
-
f"\nOpening {editor} to edit YAML. Save and exit when done."
|
|
245
|
-
)
|
|
246
|
-
subprocess.call([editor, tmp_path])
|
|
247
|
-
|
|
248
|
-
# Read updated YAML
|
|
249
|
-
with open(tmp_path) as f:
|
|
250
|
-
updated_yaml = f.read()
|
|
251
|
-
|
|
252
|
-
# Parse back to object
|
|
253
|
-
try:
|
|
254
|
-
if isinstance(obj, Flock):
|
|
255
|
-
updated_obj = Flock.from_yaml(updated_yaml)
|
|
256
|
-
|
|
257
|
-
# Restore file path information
|
|
258
|
-
if component_file_paths:
|
|
259
|
-
from flock.core.flock_registry import get_registry
|
|
260
|
-
|
|
261
|
-
registry = get_registry()
|
|
262
|
-
|
|
263
|
-
if not hasattr(registry, "_component_file_paths"):
|
|
264
|
-
registry._component_file_paths = {}
|
|
265
|
-
|
|
266
|
-
# Merge the updated registry with the saved file paths
|
|
267
|
-
for (
|
|
268
|
-
component_name,
|
|
269
|
-
file_path,
|
|
270
|
-
) in component_file_paths.items():
|
|
271
|
-
if component_name in registry._components:
|
|
272
|
-
registry._component_file_paths[component_name] = (
|
|
273
|
-
file_path
|
|
274
|
-
)
|
|
275
|
-
|
|
276
|
-
console.print("\n[green]✓[/] YAML parsed successfully!")
|
|
277
|
-
return updated_obj
|
|
278
|
-
elif isinstance(obj, FlockAgent):
|
|
279
|
-
updated_obj = FlockAgent.from_yaml(updated_yaml)
|
|
280
|
-
console.print("\n[green]✓[/] YAML parsed successfully!")
|
|
281
|
-
return updated_obj
|
|
282
|
-
except Exception as e:
|
|
283
|
-
console.print(f"\n[bold red]Error parsing YAML:[/] {e!s}")
|
|
284
|
-
console.print("\nKeeping original object.")
|
|
285
|
-
return obj
|
|
286
|
-
|
|
287
|
-
finally:
|
|
288
|
-
# Clean up the temporary file
|
|
289
|
-
try:
|
|
290
|
-
os.unlink(tmp_path)
|
|
291
|
-
except Exception:
|
|
292
|
-
pass
|
|
293
|
-
|
|
294
|
-
return obj
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
def _abstract_editor(obj: Flock | FlockAgent) -> Flock | FlockAgent:
|
|
298
|
-
"""Edit object using an abstract form-based editor.
|
|
299
|
-
|
|
300
|
-
Args:
|
|
301
|
-
obj: The object to edit
|
|
302
|
-
|
|
303
|
-
Returns:
|
|
304
|
-
The updated object
|
|
305
|
-
"""
|
|
306
|
-
console.print("\n[yellow]Abstract visual editor not yet implemented.[/]")
|
|
307
|
-
console.print("Will provide a form-based editor for each field.")
|
|
308
|
-
|
|
309
|
-
# For now, just return the original object
|
|
310
|
-
return obj
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
def _validate_yaml(obj: Flock | FlockAgent):
|
|
314
|
-
"""Validate the YAML representation of an object.
|
|
315
|
-
|
|
316
|
-
Args:
|
|
317
|
-
obj: The object to validate
|
|
318
|
-
"""
|
|
319
|
-
try:
|
|
320
|
-
yaml_str = obj.to_yaml()
|
|
321
|
-
|
|
322
|
-
# Attempt to parse with PyYAML
|
|
323
|
-
yaml.safe_load(yaml_str)
|
|
324
|
-
|
|
325
|
-
# Attempt to deserialize back to object
|
|
326
|
-
if isinstance(obj, Flock):
|
|
327
|
-
Flock.from_yaml(yaml_str)
|
|
328
|
-
elif isinstance(obj, FlockAgent):
|
|
329
|
-
FlockAgent.from_yaml(yaml_str)
|
|
330
|
-
|
|
331
|
-
console.print("\n[green]✓[/] YAML validation successful!")
|
|
332
|
-
except Exception as e:
|
|
333
|
-
console.print(f"\n[bold red]YAML validation failed:[/] {e!s}")
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
def _save_to_file(obj: Flock | FlockAgent):
|
|
337
|
-
"""Save object to a YAML file.
|
|
338
|
-
|
|
339
|
-
Args:
|
|
340
|
-
obj: The object to save
|
|
341
|
-
"""
|
|
342
|
-
# Determine default filename based on object type
|
|
343
|
-
if isinstance(obj, Flock):
|
|
344
|
-
default_name = "my_flock.flock.yaml"
|
|
345
|
-
elif isinstance(obj, FlockAgent):
|
|
346
|
-
default_name = f"{obj.name}.agent.yaml"
|
|
347
|
-
else:
|
|
348
|
-
default_name = "unknown.yaml"
|
|
349
|
-
|
|
350
|
-
# Get file path
|
|
351
|
-
file_path = questionary.text(
|
|
352
|
-
"Enter file path to save YAML:",
|
|
353
|
-
default=default_name,
|
|
354
|
-
).ask()
|
|
355
|
-
|
|
356
|
-
# Ensure the file has the correct extension
|
|
357
|
-
if not file_path.endswith((".yaml", ".yml")):
|
|
358
|
-
file_path += ".yaml"
|
|
359
|
-
|
|
360
|
-
# Create directory if it doesn't exist
|
|
361
|
-
save_path = Path(file_path)
|
|
362
|
-
save_path.parent.mkdir(parents=True, exist_ok=True)
|
|
363
|
-
|
|
364
|
-
# For Flock instances, ask about path_type
|
|
365
|
-
path_type = "absolute" # Default
|
|
366
|
-
if isinstance(obj, Flock):
|
|
367
|
-
path_type_choice = questionary.select(
|
|
368
|
-
"How should file paths be formatted?",
|
|
369
|
-
choices=[
|
|
370
|
-
"absolute (full paths, best for local use)",
|
|
371
|
-
"relative (relative paths, better for sharing)",
|
|
372
|
-
],
|
|
373
|
-
default="absolute (full paths, best for local use)",
|
|
374
|
-
).ask()
|
|
375
|
-
|
|
376
|
-
# Extract just the first word
|
|
377
|
-
path_type = path_type_choice.split()[0]
|
|
378
|
-
|
|
379
|
-
console.print(
|
|
380
|
-
f"[bold]Path type selected: [green]{path_type}[/green][/bold]"
|
|
381
|
-
)
|
|
382
|
-
|
|
383
|
-
try:
|
|
384
|
-
# Save to file with path_type for Flock instances
|
|
385
|
-
if isinstance(obj, Flock):
|
|
386
|
-
obj.to_yaml_file(file_path, path_type=path_type)
|
|
387
|
-
console.print(
|
|
388
|
-
f"\n[green]✓[/] Saved to {file_path} with {path_type} paths"
|
|
389
|
-
)
|
|
390
|
-
else:
|
|
391
|
-
# For FlockAgent or other types, use the original method
|
|
392
|
-
with open(file_path, "w") as f:
|
|
393
|
-
f.write(obj.to_yaml())
|
|
394
|
-
console.print(f"\n[green]✓[/] Saved to {file_path}")
|
|
395
|
-
except Exception as e:
|
|
396
|
-
console.print(f"\n[bold red]Error saving file:[/] {e!s}")
|
flock/components/__init__.py
DELETED
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
# src/flock/components/__init__.py
|
|
2
|
-
"""Unified component implementations for Flock agents."""
|
|
3
|
-
|
|
4
|
-
# Evaluation components
|
|
5
|
-
from .evaluation.declarative_evaluation_component import (
|
|
6
|
-
DeclarativeEvaluationComponent,
|
|
7
|
-
)
|
|
8
|
-
|
|
9
|
-
# Routing components
|
|
10
|
-
from .routing.conditional_routing_component import ConditionalRoutingComponent
|
|
11
|
-
from .routing.default_routing_component import DefaultRoutingComponent
|
|
12
|
-
from .routing.llm_routing_component import LLMRoutingComponent
|
|
13
|
-
|
|
14
|
-
# Utility components
|
|
15
|
-
from .utility.memory_utility_component import MemoryUtilityComponent
|
|
16
|
-
from .utility.metrics_utility_component import MetricsUtilityComponent
|
|
17
|
-
from .utility.output_utility_component import OutputUtilityComponent
|
|
18
|
-
|
|
19
|
-
__all__ = [
|
|
20
|
-
# Routing
|
|
21
|
-
"ConditionalRoutingComponent",
|
|
22
|
-
# Evaluation
|
|
23
|
-
"DeclarativeEvaluationComponent",
|
|
24
|
-
"DefaultRoutingComponent",
|
|
25
|
-
"LLMRoutingComponent",
|
|
26
|
-
# Utility
|
|
27
|
-
"MemoryUtilityComponent",
|
|
28
|
-
"MetricsUtilityComponent",
|
|
29
|
-
"OutputUtilityComponent",
|
|
30
|
-
]
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
# src/flock/components/evaluation/__init__.py
|
|
2
|
-
"""Evaluation components for the unified component system."""
|
|
3
|
-
|
|
4
|
-
from .declarative_evaluation_component import DeclarativeEvaluationComponent, DeclarativeEvaluationConfig
|
|
5
|
-
|
|
6
|
-
__all__ = [
|
|
7
|
-
"DeclarativeEvaluationComponent",
|
|
8
|
-
"DeclarativeEvaluationConfig",
|
|
9
|
-
]
|