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/manage_agents.py
DELETED
|
@@ -1,459 +0,0 @@
|
|
|
1
|
-
"""Agent management functionality for the Flock CLI.
|
|
2
|
-
|
|
3
|
-
This module provides a CLI interface for managing agents within a Flock system,
|
|
4
|
-
including listing, adding, editing, and removing agents.
|
|
5
|
-
"""
|
|
6
|
-
|
|
7
|
-
import questionary
|
|
8
|
-
from rich.box import Box
|
|
9
|
-
from rich.console import Console
|
|
10
|
-
from rich.panel import Panel
|
|
11
|
-
from rich.table import Table
|
|
12
|
-
|
|
13
|
-
from flock.core.flock import Flock
|
|
14
|
-
from flock.core.flock_agent import FlockAgent
|
|
15
|
-
from flock.core.flock_factory import FlockFactory
|
|
16
|
-
from flock.core.util.cli_helper import init_console
|
|
17
|
-
|
|
18
|
-
# Create console instance
|
|
19
|
-
console = Console()
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
def manage_agents(flock: Flock):
|
|
23
|
-
"""Agent management entry point.
|
|
24
|
-
|
|
25
|
-
Args:
|
|
26
|
-
flock: The Flock instance containing agents to manage
|
|
27
|
-
"""
|
|
28
|
-
if not flock:
|
|
29
|
-
console.print("[bold red]Error: No Flock instance provided.[/]")
|
|
30
|
-
return
|
|
31
|
-
|
|
32
|
-
while True:
|
|
33
|
-
init_console()
|
|
34
|
-
console.print(Panel("[bold green]Agent Manager[/]"), justify="center")
|
|
35
|
-
|
|
36
|
-
agent_names = list(flock._agents.keys())
|
|
37
|
-
console.print(f"Flock contains [bold cyan]{len(agent_names)}[/] agents")
|
|
38
|
-
|
|
39
|
-
if agent_names:
|
|
40
|
-
console.print(f"Agents: {', '.join(agent_names)}")
|
|
41
|
-
else:
|
|
42
|
-
console.print("[yellow]No agents in this Flock yet.[/]")
|
|
43
|
-
|
|
44
|
-
console.line()
|
|
45
|
-
|
|
46
|
-
# Main menu
|
|
47
|
-
choice = questionary.select(
|
|
48
|
-
"What would you like to do?",
|
|
49
|
-
choices=[
|
|
50
|
-
questionary.Separator(line=" "),
|
|
51
|
-
"List All Agents",
|
|
52
|
-
"Add New Agent",
|
|
53
|
-
"Edit Agent",
|
|
54
|
-
"Remove Agent",
|
|
55
|
-
"Export Agent to YAML",
|
|
56
|
-
"Import Agent from YAML",
|
|
57
|
-
questionary.Separator(),
|
|
58
|
-
"Back to Main Menu",
|
|
59
|
-
],
|
|
60
|
-
).ask()
|
|
61
|
-
|
|
62
|
-
if choice == "List All Agents":
|
|
63
|
-
_list_agents(flock)
|
|
64
|
-
elif choice == "Add New Agent":
|
|
65
|
-
_add_agent(flock)
|
|
66
|
-
elif choice == "Edit Agent":
|
|
67
|
-
_edit_agent(flock)
|
|
68
|
-
elif choice == "Remove Agent":
|
|
69
|
-
_remove_agent(flock)
|
|
70
|
-
elif choice == "Export Agent to YAML":
|
|
71
|
-
_export_agent(flock)
|
|
72
|
-
elif choice == "Import Agent from YAML":
|
|
73
|
-
_import_agent(flock)
|
|
74
|
-
elif choice == "Back to Main Menu":
|
|
75
|
-
break
|
|
76
|
-
|
|
77
|
-
if choice != "Back to Main Menu":
|
|
78
|
-
input("\nPress Enter to continue...")
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
def _list_agents(flock: Flock):
|
|
82
|
-
"""List all agents in the Flock.
|
|
83
|
-
|
|
84
|
-
Args:
|
|
85
|
-
flock: The Flock instance
|
|
86
|
-
"""
|
|
87
|
-
agent_names = list(flock._agents.keys())
|
|
88
|
-
|
|
89
|
-
if not agent_names:
|
|
90
|
-
console.print("[yellow]No agents in this Flock.[/]")
|
|
91
|
-
return
|
|
92
|
-
|
|
93
|
-
# Create table for agents
|
|
94
|
-
table = Table(title="Agents in Flock")
|
|
95
|
-
table.add_column("Name", style="cyan")
|
|
96
|
-
table.add_column("Model", style="green")
|
|
97
|
-
table.add_column("Description", style="yellow")
|
|
98
|
-
table.add_column("Input", style="magenta")
|
|
99
|
-
table.add_column("Output", style="magenta")
|
|
100
|
-
|
|
101
|
-
for name in agent_names:
|
|
102
|
-
agent = flock._agents[name]
|
|
103
|
-
|
|
104
|
-
# Format model nicely
|
|
105
|
-
model = agent.model or flock.model or "Default"
|
|
106
|
-
|
|
107
|
-
# Format description (truncate if too long)
|
|
108
|
-
description = agent.description
|
|
109
|
-
if description and len(description) > 30:
|
|
110
|
-
description = description[:27] + "..."
|
|
111
|
-
elif not description:
|
|
112
|
-
description = "N/A"
|
|
113
|
-
|
|
114
|
-
# Format input/output (truncate if too long)
|
|
115
|
-
input_str = str(agent.input)
|
|
116
|
-
if len(input_str) > 30:
|
|
117
|
-
input_str = input_str[:27] + "..."
|
|
118
|
-
|
|
119
|
-
output_str = str(agent.output)
|
|
120
|
-
if len(output_str) > 30:
|
|
121
|
-
output_str = output_str[:27] + "..."
|
|
122
|
-
|
|
123
|
-
table.add_row(
|
|
124
|
-
name,
|
|
125
|
-
model,
|
|
126
|
-
description,
|
|
127
|
-
input_str,
|
|
128
|
-
output_str,
|
|
129
|
-
)
|
|
130
|
-
|
|
131
|
-
console.print(table)
|
|
132
|
-
|
|
133
|
-
# Option to view detailed info for a specific agent
|
|
134
|
-
if len(agent_names) > 0:
|
|
135
|
-
view_details = questionary.confirm(
|
|
136
|
-
"View detailed information for an agent?",
|
|
137
|
-
default=False,
|
|
138
|
-
).ask()
|
|
139
|
-
|
|
140
|
-
if view_details:
|
|
141
|
-
agent_to_view = questionary.select(
|
|
142
|
-
"Select an agent to view:",
|
|
143
|
-
choices=agent_names,
|
|
144
|
-
).ask()
|
|
145
|
-
|
|
146
|
-
if agent_to_view:
|
|
147
|
-
_view_agent_details(flock._agents[agent_to_view])
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
def _view_agent_details(agent: FlockAgent):
|
|
151
|
-
"""Display detailed information about an agent.
|
|
152
|
-
|
|
153
|
-
Args:
|
|
154
|
-
agent: The agent to display details for
|
|
155
|
-
"""
|
|
156
|
-
init_console()
|
|
157
|
-
console.print(
|
|
158
|
-
Panel(f"[bold green]Agent Details: {agent.name}[/]"), justify="center"
|
|
159
|
-
)
|
|
160
|
-
|
|
161
|
-
# Create a panel for each section
|
|
162
|
-
basic_info = Table(show_header=False, box=Box.ROUNDED, padding=(0, 2))
|
|
163
|
-
basic_info.add_column("Property", style="cyan")
|
|
164
|
-
basic_info.add_column("Value", style="green")
|
|
165
|
-
|
|
166
|
-
basic_info.add_row("Name", agent.name)
|
|
167
|
-
basic_info.add_row("Model", str(agent.model or "Default"))
|
|
168
|
-
basic_info.add_row("Description", agent.description if agent.description else "N/A")
|
|
169
|
-
basic_info.add_row("Input", str(agent.input))
|
|
170
|
-
basic_info.add_row("Output", str(agent.output))
|
|
171
|
-
basic_info.add_row("Write to File", str(agent.config.write_to_file))
|
|
172
|
-
basic_info.add_row("Wait for input", str(agent.config.wait_for_input))
|
|
173
|
-
|
|
174
|
-
console.print(Panel(basic_info, title="Basic Information"))
|
|
175
|
-
|
|
176
|
-
# Evaluator info
|
|
177
|
-
evaluator_info = (
|
|
178
|
-
f"Type: {type(agent.evaluator).__name__ if agent.evaluator else 'None'}"
|
|
179
|
-
)
|
|
180
|
-
console.print(Panel(evaluator_info, title="Evaluator"))
|
|
181
|
-
|
|
182
|
-
# Router info
|
|
183
|
-
router_info = f"Type: {type(agent.router).__name__ if agent.router else 'None'}"
|
|
184
|
-
console.print(Panel(router_info, title="Router"))
|
|
185
|
-
|
|
186
|
-
# Tools
|
|
187
|
-
if agent.tools:
|
|
188
|
-
tool_names = [t.__name__ for t in agent.tools]
|
|
189
|
-
tools_info = ", ".join(tool_names)
|
|
190
|
-
else:
|
|
191
|
-
tools_info = "None"
|
|
192
|
-
|
|
193
|
-
console.print(Panel(tools_info, title="Tools"))
|
|
194
|
-
|
|
195
|
-
# Modules
|
|
196
|
-
if agent.modules:
|
|
197
|
-
module_table = Table(show_header=True)
|
|
198
|
-
module_table.add_column("Name", style="cyan")
|
|
199
|
-
module_table.add_column("Type", style="green")
|
|
200
|
-
module_table.add_column("Enabled", style="yellow")
|
|
201
|
-
|
|
202
|
-
for name, module in agent.modules.items():
|
|
203
|
-
module_table.add_row(
|
|
204
|
-
name,
|
|
205
|
-
type(module).__name__,
|
|
206
|
-
"Yes" if module.config.enabled else "No",
|
|
207
|
-
)
|
|
208
|
-
|
|
209
|
-
console.print(Panel(module_table, title="Modules"))
|
|
210
|
-
else:
|
|
211
|
-
console.print(Panel("None", title="Modules"))
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
def _add_agent(flock: Flock):
|
|
215
|
-
"""Add a new agent to the Flock.
|
|
216
|
-
|
|
217
|
-
Args:
|
|
218
|
-
flock: The Flock instance to add the agent to
|
|
219
|
-
"""
|
|
220
|
-
console.print("\n[bold]Add New Agent[/]")
|
|
221
|
-
console.line()
|
|
222
|
-
|
|
223
|
-
# Get agent name
|
|
224
|
-
name = questionary.text(
|
|
225
|
-
"Enter a name for the agent:",
|
|
226
|
-
default="my_agent",
|
|
227
|
-
).ask()
|
|
228
|
-
|
|
229
|
-
# Check for name conflicts
|
|
230
|
-
if name in flock._agents:
|
|
231
|
-
console.print(
|
|
232
|
-
f"[bold red]Error: An agent named '{name}' already exists.[/]"
|
|
233
|
-
)
|
|
234
|
-
return
|
|
235
|
-
|
|
236
|
-
# Get agent description
|
|
237
|
-
description = questionary.text(
|
|
238
|
-
"Enter a description for the agent (optional):",
|
|
239
|
-
default="",
|
|
240
|
-
).ask()
|
|
241
|
-
|
|
242
|
-
# Get input specification
|
|
243
|
-
input_spec = questionary.text(
|
|
244
|
-
"Enter input specification (e.g., 'query: str | The search query'):",
|
|
245
|
-
default="query",
|
|
246
|
-
).ask()
|
|
247
|
-
|
|
248
|
-
# Get output specification
|
|
249
|
-
output_spec = questionary.text(
|
|
250
|
-
"Enter output specification (e.g., 'result: str | The generated result'):",
|
|
251
|
-
default="result",
|
|
252
|
-
).ask()
|
|
253
|
-
|
|
254
|
-
# Model selection
|
|
255
|
-
use_flock_model = questionary.confirm(
|
|
256
|
-
f"Use Flock's default model ({flock.model or 'None'})? Select 'n' to specify a different model.",
|
|
257
|
-
default=True,
|
|
258
|
-
).ask()
|
|
259
|
-
|
|
260
|
-
if use_flock_model:
|
|
261
|
-
model = None # Use Flock's default
|
|
262
|
-
else:
|
|
263
|
-
default_models = [
|
|
264
|
-
"openai/gpt-4o",
|
|
265
|
-
"openai/gpt-3.5-turbo",
|
|
266
|
-
"anthropic/claude-3-opus-20240229",
|
|
267
|
-
"anthropic/claude-3-sonnet-20240229",
|
|
268
|
-
"gemini/gemini-1.5-pro",
|
|
269
|
-
"Other (specify)",
|
|
270
|
-
]
|
|
271
|
-
|
|
272
|
-
model_choice = questionary.select(
|
|
273
|
-
"Select a model:",
|
|
274
|
-
choices=default_models,
|
|
275
|
-
).ask()
|
|
276
|
-
|
|
277
|
-
if model_choice == "Other (specify)":
|
|
278
|
-
model = questionary.text(
|
|
279
|
-
"Enter the model identifier:",
|
|
280
|
-
default="openai/gpt-4o",
|
|
281
|
-
).ask()
|
|
282
|
-
else:
|
|
283
|
-
model = model_choice
|
|
284
|
-
|
|
285
|
-
# Additional options
|
|
286
|
-
use_cache = questionary.confirm(
|
|
287
|
-
"Enable caching for this agent?",
|
|
288
|
-
default=True,
|
|
289
|
-
).ask()
|
|
290
|
-
|
|
291
|
-
enable_rich_tables = questionary.confirm(
|
|
292
|
-
"Enable rich table output for this agent?",
|
|
293
|
-
default=True,
|
|
294
|
-
).ask()
|
|
295
|
-
|
|
296
|
-
# Create the agent
|
|
297
|
-
agent = FlockFactory.create_default_agent(
|
|
298
|
-
name=name,
|
|
299
|
-
description=description,
|
|
300
|
-
model=model,
|
|
301
|
-
input=input_spec,
|
|
302
|
-
output=output_spec,
|
|
303
|
-
use_cache=use_cache,
|
|
304
|
-
enable_rich_tables=enable_rich_tables,
|
|
305
|
-
)
|
|
306
|
-
|
|
307
|
-
# Add the agent to the Flock
|
|
308
|
-
flock.add_agent(agent)
|
|
309
|
-
console.print(f"\n[green]✓[/] Agent '{name}' created and added to Flock!")
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
def _edit_agent(flock: Flock):
|
|
313
|
-
"""Edit an existing agent in the Flock.
|
|
314
|
-
|
|
315
|
-
Args:
|
|
316
|
-
flock: The Flock instance containing the agent to edit
|
|
317
|
-
"""
|
|
318
|
-
agent_names = list(flock._agents.keys())
|
|
319
|
-
|
|
320
|
-
if not agent_names:
|
|
321
|
-
console.print("[yellow]No agents in this Flock to edit.[/]")
|
|
322
|
-
return
|
|
323
|
-
|
|
324
|
-
# Select agent to edit
|
|
325
|
-
agent_name = questionary.select(
|
|
326
|
-
"Select an agent to edit:",
|
|
327
|
-
choices=agent_names,
|
|
328
|
-
).ask()
|
|
329
|
-
|
|
330
|
-
if not agent_name:
|
|
331
|
-
return
|
|
332
|
-
|
|
333
|
-
agent = flock._agents[agent_name]
|
|
334
|
-
|
|
335
|
-
if not agent:
|
|
336
|
-
console.print(f"[bold red]Agent '{agent_name}' not found.[/]")
|
|
337
|
-
return
|
|
338
|
-
|
|
339
|
-
console.print(f"\n[bold underline]Details for Agent: {agent.name}[/]")
|
|
340
|
-
basic_info = Table(show_header=False, box=Box.ROUNDED, padding=(0, 2))
|
|
341
|
-
basic_info.add_row("Name", agent.name)
|
|
342
|
-
description = agent.description
|
|
343
|
-
basic_info.add_row("Description", description if description else "N/A")
|
|
344
|
-
basic_info.add_row("Model", agent.model or "Flock Default")
|
|
345
|
-
basic_info.add_row("Input Signature", str(agent.input))
|
|
346
|
-
|
|
347
|
-
# Choose edit method
|
|
348
|
-
edit_choice = questionary.select(
|
|
349
|
-
"How would you like to edit this agent?",
|
|
350
|
-
choices=[
|
|
351
|
-
"Use Abstract Editor (Field by Field)",
|
|
352
|
-
"Edit YAML Directly",
|
|
353
|
-
"Cancel",
|
|
354
|
-
],
|
|
355
|
-
).ask()
|
|
356
|
-
|
|
357
|
-
if edit_choice == "Use Abstract Editor (Field by Field)":
|
|
358
|
-
# Not fully implemented yet
|
|
359
|
-
console.print(
|
|
360
|
-
"[yellow]Abstract editor not fully implemented. Opening YAML editor instead.[/]"
|
|
361
|
-
)
|
|
362
|
-
from flock.cli.yaml_editor import yaml_editor
|
|
363
|
-
|
|
364
|
-
updated_agent = yaml_editor(agent)
|
|
365
|
-
if updated_agent and isinstance(updated_agent, FlockAgent):
|
|
366
|
-
flock._agents[agent_name] = updated_agent
|
|
367
|
-
|
|
368
|
-
elif edit_choice == "Edit YAML Directly":
|
|
369
|
-
from flock.cli.yaml_editor import _edit_yaml_directly
|
|
370
|
-
|
|
371
|
-
updated_agent = _edit_yaml_directly(agent)
|
|
372
|
-
if updated_agent and isinstance(updated_agent, FlockAgent):
|
|
373
|
-
flock._agents[agent_name] = updated_agent
|
|
374
|
-
console.print(f"\n[green]✓[/] Agent '{agent_name}' updated!")
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
def _remove_agent(flock: Flock):
|
|
378
|
-
"""Remove an agent from the Flock.
|
|
379
|
-
|
|
380
|
-
Args:
|
|
381
|
-
flock: The Flock instance containing the agent to remove
|
|
382
|
-
"""
|
|
383
|
-
agent_names = list(flock._agents.keys())
|
|
384
|
-
|
|
385
|
-
if not agent_names:
|
|
386
|
-
console.print("[yellow]No agents in this Flock to remove.[/]")
|
|
387
|
-
return
|
|
388
|
-
|
|
389
|
-
# Select agent to remove
|
|
390
|
-
agent_name = questionary.select(
|
|
391
|
-
"Select an agent to remove:",
|
|
392
|
-
choices=agent_names,
|
|
393
|
-
).ask()
|
|
394
|
-
|
|
395
|
-
if not agent_name:
|
|
396
|
-
return
|
|
397
|
-
|
|
398
|
-
# Confirm deletion
|
|
399
|
-
confirm = questionary.confirm(
|
|
400
|
-
f"Are you sure you want to remove agent '{agent_name}'?",
|
|
401
|
-
default=False,
|
|
402
|
-
).ask()
|
|
403
|
-
|
|
404
|
-
if confirm:
|
|
405
|
-
del flock._agents[agent_name]
|
|
406
|
-
console.print(f"\n[green]✓[/] Agent '{agent_name}' removed from Flock!")
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
def _export_agent(flock: Flock):
|
|
410
|
-
"""Export an agent to a YAML file.
|
|
411
|
-
|
|
412
|
-
Args:
|
|
413
|
-
flock: The Flock instance containing the agent to export
|
|
414
|
-
"""
|
|
415
|
-
agent_names = list(flock._agents.keys())
|
|
416
|
-
|
|
417
|
-
if not agent_names:
|
|
418
|
-
console.print("[yellow]No agents in this Flock to export.[/]")
|
|
419
|
-
return
|
|
420
|
-
|
|
421
|
-
# Select agent to export
|
|
422
|
-
agent_name = questionary.select(
|
|
423
|
-
"Select an agent to export:",
|
|
424
|
-
choices=agent_names,
|
|
425
|
-
).ask()
|
|
426
|
-
|
|
427
|
-
if not agent_name:
|
|
428
|
-
return
|
|
429
|
-
|
|
430
|
-
agent = flock._agents[agent_name]
|
|
431
|
-
|
|
432
|
-
# Get file path
|
|
433
|
-
file_path = questionary.text(
|
|
434
|
-
"Enter file path to save agent:",
|
|
435
|
-
default=f"{agent_name}.agent.yaml",
|
|
436
|
-
).ask()
|
|
437
|
-
|
|
438
|
-
# Ensure the file has the correct extension
|
|
439
|
-
if not file_path.endswith((".yaml", ".yml")):
|
|
440
|
-
file_path += ".yaml"
|
|
441
|
-
|
|
442
|
-
try:
|
|
443
|
-
# Save the agent to YAML
|
|
444
|
-
agent.to_yaml_file(file_path)
|
|
445
|
-
console.print(
|
|
446
|
-
f"\n[green]✓[/] Agent '{agent_name}' exported to {file_path}"
|
|
447
|
-
)
|
|
448
|
-
except Exception as e:
|
|
449
|
-
console.print(f"\n[bold red]Error exporting agent:[/] {e!s}")
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
def _import_agent(flock: Flock):
|
|
453
|
-
"""Import an agent from a YAML file.
|
|
454
|
-
|
|
455
|
-
Args:
|
|
456
|
-
flock: The Flock instance to import the agent into
|
|
457
|
-
"""
|
|
458
|
-
console.print("[yellow]Import functionality not yet implemented.[/]")
|
|
459
|
-
# TODO: Implement agent import from YAML file
|