flock-core 0.4.0b27__tar.gz → 0.4.0b28__tar.gz
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_core-0.4.0b28/.gitmodules +4 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/.vscode/settings.json +41 -3
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/PKG-INFO +85 -4
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/README.md +84 -3
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/docs/assets/drawio/architecture.drawio +4 -4
- flock_core-0.4.0b28/docs/guides/chaining-agents.md +232 -0
- flock_core-0.4.0b28/docs/guides/index.md +17 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/pyproject.toml +16 -4
- flock_core-0.4.0b28/scripts/ensure_uv.py +20 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/core/flock_agent.py +6 -4
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/core/flock_module.py +7 -7
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/modules/assertion/assertion_module.py +1 -1
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/modules/callback/callback_module.py +1 -1
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/modules/memory/memory_module.py +4 -4
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/modules/output/output_module.py +1 -1
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/modules/performance/metrics_module.py +4 -4
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/modules/zep/zep_module.py +2 -2
- flock_core-0.4.0b28/tests/__init__.py +1 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/tests/serialization/test_yaml_serialization.py +1 -1
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/uv.lock +3032 -3370
- flock_core-0.4.0b27/docs/guides/chaining-agents.md +0 -8
- flock_core-0.4.0b27/docs/reference/index.md +0 -8
- flock_core-0.4.0b27/flock_test.yaml +0 -159
- flock_core-0.4.0b27/tests/serialization/__init__.py +0 -1
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/.devcontainer/devcontainer.json +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/.env_template +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/.github/workflows/.gitkeep +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/.github/workflows/deploy-documentation.yml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/.github/workflows/deploy-whiteduck-pypi.yml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/.gitignore +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/.vscode/launch.json +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/.vscode/tasks.json +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/LICENSE +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/docs/about/changelog.md +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/docs/about/contributing.md +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/docs/assets/images/cli_outputs/out.png +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/docs/assets/images/components_chart.png +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/docs/assets/images/examples/01_01.png +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/docs/assets/images/examples/01_02.png +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/docs/assets/images/examples/01_03.png +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/docs/assets/images/examples/01_04.png +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/docs/assets/images/examples/01_05.png +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/docs/assets/images/examples/01_06.png +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/docs/assets/images/flock.png +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/docs/assets/images/flock_cli.png +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/docs/assets/images/flow_chart.png +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/docs/assets/images/getting-started/first_agent_00.png +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/docs/assets/images/hummingbird.png +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/docs/assets/images/icon.png +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/docs/assets/images/icon.png~ +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/docs/assets/images/logo.png +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/docs/assets/images/memory_concepts.png +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/docs/assets/images/memory_flow.png +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/docs/assets/images/memory_flow_chart.png +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/docs/components/evaluators.md +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/docs/components/index.md +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/docs/components/modules.md +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/docs/components/tools.md +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/docs/core-concepts/agents.md +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/docs/core-concepts/declarative.md +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/docs/core-concepts/index.md +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/docs/core-concepts/workflows.md +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/docs/create_doc_boilerplate.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/docs/deployment/index.md +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/docs/deployment/temporal.md +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/docs/getting-started/configuration.md +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/docs/getting-started/index.md +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/docs/getting-started/installation.md +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/docs/getting-started/quickstart.md +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/docs/guides/temporal-configuration.md +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/docs/index.md +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/docs/interacting-with-flock/cli-tool.md +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/docs/interacting-with-flock/index.md +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/docs/interacting-with-flock/interactive-cli.md +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/docs/interacting-with-flock/programmatic.md +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/docs/interacting-with-flock/rest-api.md +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/docs/interacting-with-flock/web-ui.md +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/docs/reference/flock_agent.md +0 -0
- {flock_core-0.4.0b27/docs/guides → flock_core-0.4.0b28/docs/reference}/index.md +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/docs/release-notes/magpie.md +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/docs/stylesheets/extra.css +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/mkdocs.yml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/requirements.txt +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/scripts/code_collector.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/scripts/create_docs.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/__init__.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/cli/assets/release_notes.md +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/cli/config.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/cli/constants.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/cli/create_agent.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/cli/create_flock.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/cli/execute_flock.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/cli/load_agent.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/cli/load_examples.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/cli/load_flock.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/cli/load_release_notes.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/cli/loaded_flock_cli.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/cli/manage_agents.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/cli/registry_management.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/cli/runner.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/cli/settings.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/cli/utils.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/cli/view_results.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/cli/yaml_editor.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/config.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/core/__init__.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/core/api/__init__.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/core/api/endpoints.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/core/api/main.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/core/api/models.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/core/api/run_store.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/core/api/runner.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/core/api/ui/__init__.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/core/api/ui/routes.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/core/api/ui/utils.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/core/context/context.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/core/context/context_manager.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/core/context/context_vars.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/core/evaluation/utils.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/core/execution/batch_executor.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/core/execution/evaluation_executor.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/core/execution/local_executor.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/core/execution/temporal_executor.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/core/flock.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/core/flock_evaluator.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/core/flock_factory.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/core/flock_registry.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/core/flock_router.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/core/interpreter/python_interpreter.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/core/logging/__init__.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/core/logging/formatters/enum_builder.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/core/logging/formatters/theme_builder.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/core/logging/formatters/themed_formatter.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/core/logging/formatters/themes.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/core/logging/logging.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/core/logging/span_middleware/baggage_span_processor.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/core/logging/telemetry.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/core/logging/telemetry_exporter/base_exporter.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/core/logging/telemetry_exporter/file_exporter.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/core/logging/telemetry_exporter/sqlite_exporter.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/core/logging/trace_and_logged.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/core/mixin/dspy_integration.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/core/mixin/prompt_parser.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/core/serialization/__init__.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/core/serialization/callable_registry.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/core/serialization/flock_serializer.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/core/serialization/json_encoder.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/core/serialization/secure_serializer.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/core/serialization/serializable.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/core/serialization/serialization_utils.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/core/tools/azure_tools.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/core/tools/basic_tools.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/core/tools/dev_tools/github.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/core/tools/llm_tools.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/core/tools/markdown_tools.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/core/tools/zendesk_tools.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/core/util/cli_helper.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/core/util/file_path_utils.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/core/util/hydrator.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/core/util/input_resolver.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/core/util/loader.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/evaluators/declarative/declarative_evaluator.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/evaluators/memory/memory_evaluator.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/evaluators/test/test_case_evaluator.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/evaluators/zep/zep_evaluator.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/modules/memory/memory_parser.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/modules/memory/memory_storage.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/platform/docker_tools.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/platform/jaeger_install.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/routers/__init__.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/routers/agent/__init__.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/routers/agent/agent_router.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/routers/agent/handoff_agent.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/routers/conditional/conditional_router.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/routers/default/__init__.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/routers/default/default_router.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/routers/feedback/feedback_router.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/routers/list_generator/list_generator_router.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/routers/llm/__init__.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/routers/llm/llm_router.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/3024-day.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/3024-night.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/aardvark-blue.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/abernathy.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/adventure.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/adventuretime.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/afterglow.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/alabaster.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/alienblood.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/andromeda.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/apple-classic.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/apple-system-colors.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/arcoiris.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/argonaut copy.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/argonaut.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/arthur.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/ateliersulphurpool.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/atom.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/atom_test.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/atomonelight.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/aurora.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/ayu copy.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/ayu-light.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/ayu-mirage.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/ayu.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/banana-blueberry.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/batman.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/belafonte-day.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/belafonte-night.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/birdsofparadise.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/blazer.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/blue-matrix.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/blueberrypie.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/bluedolphin.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/blulocodark.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/blulocolight.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/borland.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/breeze.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/bright-lights.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/broadcast.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/brogrammer.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/builtin-dark.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/builtin-light.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/builtin-pastel-dark.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/builtin-solarized-dark.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/builtin-solarized-light.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/builtin-tango-dark.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/builtin-tango-light.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/c64.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/calamity.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/catppuccin-frappe.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/catppuccin-latte.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/catppuccin-macchiato.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/catppuccin-mocha.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/cga.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/chalk.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/chalkboard.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/challengerdeep.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/chester.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/ciapre.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/clrs.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/cobalt-neon.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/cobalt2.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/coffee-theme.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/crayonponyfish.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/cutiepro.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/cyberdyne.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/cyberpunk.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/cyberpunkscarletprotocol.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/dark+.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/dark-pastel.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/darkermatrix.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/darkmatrix.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/darkside.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/dayfox.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/deep.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/desert.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/dimidium.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/dimmedmonokai.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/django.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/djangorebornagain.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/djangosmooth.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/doom-peacock.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/doomone.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/dotgov.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/dracula+.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/dracula.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/duckbones.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/duotone-dark.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/earthsong.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/elemental.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/elementary.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/encom.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/espresso-libre.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/espresso.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/everblush.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/fahrenheit.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/fairyfloss.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/farmhouse-dark.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/farmhouse-light.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/fideloper.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/firefly-traditional.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/firefoxdev.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/firewatch.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/fishtank.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/flat.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/flatland.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/flexoki-dark.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/flexoki-light.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/floraverse.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/forestblue.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/framer.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/frontenddelight.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/funforrest.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/galaxy.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/galizur.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/github-dark.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/github.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/glacier.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/grape.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/grass.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/grey-green.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/gruber-darker.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/gruvboxdark.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/gruvboxdarkhard.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/gruvboxlight.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/guezwhoz.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/hacktober.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/hardcore.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/harper.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/hax0r-blue.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/hax0r-gr33n.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/hax0r-r3d.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/highway.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/hipster-green.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/hivacruz.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/homebrew.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/hopscotch.256.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/hopscotch.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/hurtado.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/hybrid.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/ic-green-ppl.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/ic-orange-ppl.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/iceberg-dark.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/iceberg-light.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/idea.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/idletoes.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/ir-black.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/iterm2-dark-background.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/iterm2-default.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/iterm2-light-background.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/iterm2-pastel-dark-background.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/iterm2-smoooooth.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/iterm2-solarized-dark.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/iterm2-solarized-light.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/iterm2-tango-dark.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/iterm2-tango-light.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/jackie-brown.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/japanesque.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/jellybeans.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/jetbrains-darcula.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/jubi.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/kanagawabones.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/kibble.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/kolorit.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/konsolas.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/kurokula.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/lab-fox.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/laser.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/later-this-evening.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/lavandula.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/liquidcarbon.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/liquidcarbontransparent.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/liquidcarbontransparentinverse.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/lovelace.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/man-page.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/mariana.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/material.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/materialdark.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/materialdarker.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/materialdesigncolors.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/materialocean.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/mathias.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/matrix.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/medallion.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/mellifluous.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/midnight-in-mojave.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/mirage.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/misterioso.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/molokai.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/monalisa.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/monokai-remastered.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/monokai-soda.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/monokai-vivid.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/n0tch2k.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/neobones-dark.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/neobones-light.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/neon.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/neopolitan.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/neutron.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/night-owlish-light.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/nightfox.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/nightlion-v1.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/nightlion-v2.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/niji.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/nocturnal-winter.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/nord-light.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/nord.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/novel.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/nvimdark.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/nvimlight.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/obsidian.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/ocean.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/oceanic-next.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/oceanicmaterial.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/ollie.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/onehalfdark.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/onehalflight.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/operator-mono-dark.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/overnight-slumber.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/oxocarbon.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/palenighthc.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/pandora.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/paraiso-dark.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/paulmillr.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/pencildark.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/pencillight.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/peppermint.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/piatto-light.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/pnevma.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/popping-and-locking.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/primary.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/pro-light.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/pro.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/purple-rain.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/purplepeter.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/rapture.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/raycast-dark.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/raycast-light.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/rebecca.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/red-alert.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/red-planet.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/red-sands.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/relaxed.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/retro.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/rippedcasts.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/rose-pine-dawn.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/rose-pine-moon.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/rose-pine.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/rouge-2.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/royal.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/ryuuko.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/sakura.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/scarlet-protocol.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/seafoam-pastel.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/seashells.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/seoulbones-dark.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/seoulbones-light.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/seti.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/shades-of-purple.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/shaman.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/slate.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/sleepyhollow.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/smyck.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/snazzy.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/softserver.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/solarized-darcula.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/solarized-dark---patched.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/solarized-dark-higher-contrast.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/spacedust.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/spacegray-eighties-dull.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/spacegray-eighties.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/spacegray.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/spiderman.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/spring.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/square.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/sublette.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/subliminal.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/sugarplum.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/sundried.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/symfonic.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/synthwave-everything.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/synthwave.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/synthwavealpha.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/tango-adapted.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/tango-half-adapted.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/teerb.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/terafox.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/terminal-basic.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/thayer-bright.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/the-hulk.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/tinacious-design-(dark).toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/tinacious-design-(light).toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/tokyonight-day.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/tokyonight-storm.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/tokyonight.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/tomorrow-night-blue.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/tomorrow-night-bright.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/tomorrow-night-burns.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/tomorrow-night-eighties.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/tomorrow-night.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/tomorrow.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/toychest.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/treehouse.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/twilight.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/ubuntu.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/ultradark.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/ultraviolent.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/underthesea.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/unikitty.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/urple.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/vaughn.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/vesper.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/vibrantink.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/vimbones.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/violet-dark.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/violet-light.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/warmneon.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/wez.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/whimsy.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/wildcherry.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/wilmersdorf.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/wombat.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/wryan.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/xcodedark.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/xcodedarkhc.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/xcodelight.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/xcodelighthc.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/xcodewwdc.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/zenbones-dark.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/zenbones-light.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/zenbones.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/zenburn.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/zenburned.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/zenwritten-dark.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/themes/zenwritten-light.toml +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/workflow/__init__.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/workflow/activities.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/workflow/agent_activities.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/workflow/agent_execution_activity.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/workflow/flock_workflow.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/workflow/temporal_config.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/src/flock/workflow/temporal_setup.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/tests/core/test_flock_batch.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/tests/core/test_flock_core.py +0 -0
- {flock_core-0.4.0b27/tests → flock_core-0.4.0b28/tests/serialization}/__init__.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/tests/serialization/test_enhanced_serialization.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/tests/serialization/test_file_path_serialization.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/tests/serialization/test_flock_serializer.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/tests/serialization/test_nested_serialization.py +0 -0
- {flock_core-0.4.0b27 → flock_core-0.4.0b28}/tests/tools/test_zendesk_tools.py +0 -0
|
@@ -15,10 +15,10 @@
|
|
|
15
15
|
"editor.smoothScrolling": true,
|
|
16
16
|
"terminal.integrated.fontFamily": "'Jetbrains Mono', 'FiraCode Nerd Font', 'Hack Nerd Font', 'monospace'",
|
|
17
17
|
"editor.renderWhitespace": "none",
|
|
18
|
-
|
|
18
|
+
"terminal.integrated.lineHeight": 1.5,
|
|
19
19
|
"editor.fontSize": 15.5,
|
|
20
20
|
"editor.fontLigatures": true,
|
|
21
|
-
|
|
21
|
+
"editor.lineHeight": 1.5,
|
|
22
22
|
"editor.minimap.enabled": true,
|
|
23
23
|
"editor.tabSize": 2,
|
|
24
24
|
"editor.semanticTokenColorCustomizations": {
|
|
@@ -29,15 +29,53 @@
|
|
|
29
29
|
// prevent VSCode from modifying the terminal colors
|
|
30
30
|
"terminal.integrated.minimumContrastRatio": 1,
|
|
31
31
|
"cSpell.words": [
|
|
32
|
+
"asyncio",
|
|
33
|
+
"chromadb",
|
|
34
|
+
"cloudpickle",
|
|
32
35
|
"deptry",
|
|
36
|
+
"docling",
|
|
37
|
+
"dotenv",
|
|
38
|
+
"dspy",
|
|
39
|
+
"duckduckgo",
|
|
40
|
+
"fastapi",
|
|
41
|
+
"fasthtml",
|
|
33
42
|
"gradio",
|
|
43
|
+
"htmlcov",
|
|
44
|
+
"httpx",
|
|
45
|
+
"ipywidgets",
|
|
46
|
+
"isort",
|
|
47
|
+
"litellm",
|
|
48
|
+
"loguru",
|
|
49
|
+
"markdownify",
|
|
50
|
+
"matplotlib",
|
|
51
|
+
"minversion",
|
|
34
52
|
"mkdocs",
|
|
53
|
+
"mkdocstrings",
|
|
54
|
+
"msgpack",
|
|
35
55
|
"msgspec",
|
|
36
56
|
"mypy",
|
|
57
|
+
"nltk",
|
|
37
58
|
"packb",
|
|
59
|
+
"poethepoet",
|
|
60
|
+
"psutil",
|
|
61
|
+
"pycache",
|
|
62
|
+
"pycodestyle",
|
|
63
|
+
"pydantic",
|
|
64
|
+
"pydocstyle",
|
|
65
|
+
"pyflakes",
|
|
38
66
|
"pyinstrument",
|
|
39
67
|
"pytest",
|
|
40
|
-
"
|
|
68
|
+
"pyupgrade",
|
|
69
|
+
"pyyaml",
|
|
70
|
+
"Ratzenberger",
|
|
71
|
+
"respx",
|
|
72
|
+
"tavily",
|
|
73
|
+
"temporalio",
|
|
74
|
+
"testpaths",
|
|
75
|
+
"tiktoken",
|
|
76
|
+
"tqdm",
|
|
77
|
+
"unpackb",
|
|
78
|
+
"uvicorn"
|
|
41
79
|
],
|
|
42
80
|
"yaml.schemas": {
|
|
43
81
|
"https://squidfunk.github.io/mkdocs-material/schema.json": "mkdocs.yml"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: flock-core
|
|
3
|
-
Version: 0.4.
|
|
3
|
+
Version: 0.4.0b28
|
|
4
4
|
Summary: Declarative LLM Orchestration at Scale
|
|
5
5
|
Author-email: Andre Ratzenberger <andre.ratzenberger@whiteduck.de>
|
|
6
6
|
License-File: LICENSE
|
|
@@ -126,7 +126,7 @@ Flock's power comes from a few key ideas (Learn more in the [Full Documentation]
|
|
|
126
126
|
6. **Tool Integration:** Equip agents with standard or custom Python functions (`@flock_tool`) registered via the `FlockRegistry`.
|
|
127
127
|
7. **Registry:** A central place (`@flock_component`, `@flock_type`, `@flock_tool`) to register your custom classes, types, and functions, enabling robust serialization and dynamic loading.
|
|
128
128
|
|
|
129
|
-
## 💾 Installation
|
|
129
|
+
## 💾 Installation - Use Flock in your project
|
|
130
130
|
|
|
131
131
|
Get started with the core Flock library:
|
|
132
132
|
|
|
@@ -148,7 +148,27 @@ uv pip install flock-core[tools]
|
|
|
148
148
|
uv pip install flock-core[all]
|
|
149
149
|
```
|
|
150
150
|
|
|
151
|
-
|
|
151
|
+
## 🔑 Installation - Develop Flock
|
|
152
|
+
|
|
153
|
+
```bash
|
|
154
|
+
git clone https://github.com/whiteducksoftware/flock.git
|
|
155
|
+
cd flock
|
|
156
|
+
|
|
157
|
+
# One-liner dev setup after cloning
|
|
158
|
+
pip install poethepoet && poe install
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
Additional provided `poe` tasks and commands:
|
|
162
|
+
|
|
163
|
+
```bash
|
|
164
|
+
poe install # Install the project
|
|
165
|
+
poe build # Build the project
|
|
166
|
+
poe docs # Serve the docs
|
|
167
|
+
poe format # Format the code
|
|
168
|
+
poe lint # Lint the code
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
## 🔑 Environment Setup
|
|
152
172
|
|
|
153
173
|
Flock uses environment variables (typically in a .env file) for configuration, especially API keys. Create a .env file in your project root:
|
|
154
174
|
|
|
@@ -173,7 +193,7 @@ DEFAULT_MODEL="openai/gpt-4o" # Default LLM if agent doesn't specify
|
|
|
173
193
|
# VARS_PER_PAGE="20"
|
|
174
194
|
```
|
|
175
195
|
|
|
176
|
-
|
|
196
|
+
Be sure that the .env file is added to your .gitignore!
|
|
177
197
|
|
|
178
198
|
## ⚡ Quick Start Syntax
|
|
179
199
|
|
|
@@ -223,18 +243,32 @@ Version 0.4.0 brings significant enhancements focused on usability, deployment,
|
|
|
223
243
|
|
|
224
244
|
Easily deploy your Flock agents as scalable REST API endpoints. Interact with your agent workflows via standard HTTP requests.
|
|
225
245
|
|
|
246
|
+
--------------------------------
|
|
247
|
+
|
|
226
248
|
### 🖥️ Web UI - Test Flock Agents in the Browser
|
|
227
249
|
|
|
228
250
|
Test and interact with your Flock agents directly in your browser through an integrated web interface.
|
|
229
251
|
|
|
252
|
+
--------------------------------
|
|
253
|
+
|
|
230
254
|
### ⌨️ CLI Tool - Manage Flock Agents via the Command Line
|
|
231
255
|
|
|
232
256
|
Manage Flock configurations, run agents, and inspect results directly from your command line.
|
|
233
257
|
|
|
258
|
+
--------------------------------
|
|
259
|
+
|
|
234
260
|
### 💾 Enhanced Serialization - Share, Deploy, and Run Flock Agents by human readable yaml files
|
|
235
261
|
|
|
236
262
|
Define and share entire Flock configurations, including agents and components, using human-readable YAML files. Load flocks directly from these files for easy deployment and versioning.
|
|
237
263
|
|
|
264
|
+
--------------------------------
|
|
265
|
+
|
|
266
|
+
### 💾 New execution flows
|
|
267
|
+
|
|
268
|
+
Run Flock in batch mode to process multiple inputs at once or in evaluation mode to test agents with different inputs.
|
|
269
|
+
|
|
270
|
+
--------------------------------
|
|
271
|
+
|
|
238
272
|
### ⏱️ Robust Temporal Integration
|
|
239
273
|
|
|
240
274
|
Flock 0.4.0 introduces first-class support for Temporal.io, enabling you to build truly production-grade, reliable, and scalable agent workflows. Move beyond simple local execution and leverage Temporal's power for:
|
|
@@ -249,6 +283,51 @@ Flock makes this easy with:
|
|
|
249
283
|
* **Declarative Configuration:** Define Temporal timeouts, retry policies, and task queues directly within your `Flock` and `FlockAgent` configurations (YAML or Python).
|
|
250
284
|
* **Correct Patterns:** Uses Temporal's recommended granular activity execution for better control and visibility.
|
|
251
285
|
* **Clear Worker Separation:** Provides guidance and flags for running dedicated Temporal workers, separating development convenience from production best practices.
|
|
286
|
+
|
|
287
|
+
Visit the [Temporal Documentation](https://learn.temporal.io/python/workflows/) for more information on how to use Temporal.
|
|
288
|
+
|
|
289
|
+
Or check out the [Flock Showcase](https://github.com/whiteducksoftware/flock-showcase) for a complete example of a Flock that uses Temporal or our [docs](https://whiteducksoftware.github.io/flock/guides/temporal-configuration/) for more information.
|
|
290
|
+
|
|
291
|
+
Here's an example of how to configure a Flock to use Temporal:
|
|
292
|
+
|
|
293
|
+
```python
|
|
294
|
+
from flock.core import Flock, FlockFactory
|
|
295
|
+
|
|
296
|
+
from flock.workflow.temporal_config import (
|
|
297
|
+
TemporalActivityConfig,
|
|
298
|
+
TemporalRetryPolicyConfig,
|
|
299
|
+
TemporalWorkflowConfig,
|
|
300
|
+
)
|
|
301
|
+
|
|
302
|
+
# Flock-scoped temporal config
|
|
303
|
+
flock = Flock(
|
|
304
|
+
enable_temporal=True,
|
|
305
|
+
temporal_config=TemporalWorkflowConfig(
|
|
306
|
+
task_queue="flock-test-queue",
|
|
307
|
+
workflow_execution_timeout=timedelta(minutes=10),
|
|
308
|
+
default_activity_retry_policy=TemporalRetryPolicyConfig(
|
|
309
|
+
maximum_attempts=2
|
|
310
|
+
),
|
|
311
|
+
),
|
|
312
|
+
)
|
|
313
|
+
|
|
314
|
+
# Agent-scoped temporal config
|
|
315
|
+
content_agent = FlockFactory.create_default_agent(
|
|
316
|
+
name="content_agent",
|
|
317
|
+
input="funny_title, funny_slide_headers",
|
|
318
|
+
output="funny_slide_content",
|
|
319
|
+
temporal_activity_config=TemporalActivityConfig(
|
|
320
|
+
start_to_close_timeout=timedelta(minutes=1),
|
|
321
|
+
retry_policy=TemporalRetryPolicyConfig(
|
|
322
|
+
maximum_attempts=4,
|
|
323
|
+
initial_interval=timedelta(seconds=2),
|
|
324
|
+
non_retryable_error_types=["ValueError"],
|
|
325
|
+
),
|
|
326
|
+
),
|
|
327
|
+
)
|
|
328
|
+
```
|
|
329
|
+
|
|
330
|
+
--------------------------------
|
|
252
331
|
|
|
253
332
|
### ✨ Utility: @flockclass Hydrator
|
|
254
333
|
|
|
@@ -281,6 +360,8 @@ async def create_character():
|
|
|
281
360
|
# asyncio.run(create_character())
|
|
282
361
|
```
|
|
283
362
|
|
|
363
|
+
--------------------------------
|
|
364
|
+
|
|
284
365
|
## 📚 Examples & Tutorials
|
|
285
366
|
|
|
286
367
|
For a comprehensive set of examples, ranging from basic usage to complex projects and advanced features, please visit our dedicated showcase repository:
|
|
@@ -65,7 +65,7 @@ Flock's power comes from a few key ideas (Learn more in the [Full Documentation]
|
|
|
65
65
|
6. **Tool Integration:** Equip agents with standard or custom Python functions (`@flock_tool`) registered via the `FlockRegistry`.
|
|
66
66
|
7. **Registry:** A central place (`@flock_component`, `@flock_type`, `@flock_tool`) to register your custom classes, types, and functions, enabling robust serialization and dynamic loading.
|
|
67
67
|
|
|
68
|
-
## 💾 Installation
|
|
68
|
+
## 💾 Installation - Use Flock in your project
|
|
69
69
|
|
|
70
70
|
Get started with the core Flock library:
|
|
71
71
|
|
|
@@ -87,7 +87,27 @@ uv pip install flock-core[tools]
|
|
|
87
87
|
uv pip install flock-core[all]
|
|
88
88
|
```
|
|
89
89
|
|
|
90
|
-
|
|
90
|
+
## 🔑 Installation - Develop Flock
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
git clone https://github.com/whiteducksoftware/flock.git
|
|
94
|
+
cd flock
|
|
95
|
+
|
|
96
|
+
# One-liner dev setup after cloning
|
|
97
|
+
pip install poethepoet && poe install
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
Additional provided `poe` tasks and commands:
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
poe install # Install the project
|
|
104
|
+
poe build # Build the project
|
|
105
|
+
poe docs # Serve the docs
|
|
106
|
+
poe format # Format the code
|
|
107
|
+
poe lint # Lint the code
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
## 🔑 Environment Setup
|
|
91
111
|
|
|
92
112
|
Flock uses environment variables (typically in a .env file) for configuration, especially API keys. Create a .env file in your project root:
|
|
93
113
|
|
|
@@ -112,7 +132,7 @@ DEFAULT_MODEL="openai/gpt-4o" # Default LLM if agent doesn't specify
|
|
|
112
132
|
# VARS_PER_PAGE="20"
|
|
113
133
|
```
|
|
114
134
|
|
|
115
|
-
|
|
135
|
+
Be sure that the .env file is added to your .gitignore!
|
|
116
136
|
|
|
117
137
|
## ⚡ Quick Start Syntax
|
|
118
138
|
|
|
@@ -162,18 +182,32 @@ Version 0.4.0 brings significant enhancements focused on usability, deployment,
|
|
|
162
182
|
|
|
163
183
|
Easily deploy your Flock agents as scalable REST API endpoints. Interact with your agent workflows via standard HTTP requests.
|
|
164
184
|
|
|
185
|
+
--------------------------------
|
|
186
|
+
|
|
165
187
|
### 🖥️ Web UI - Test Flock Agents in the Browser
|
|
166
188
|
|
|
167
189
|
Test and interact with your Flock agents directly in your browser through an integrated web interface.
|
|
168
190
|
|
|
191
|
+
--------------------------------
|
|
192
|
+
|
|
169
193
|
### ⌨️ CLI Tool - Manage Flock Agents via the Command Line
|
|
170
194
|
|
|
171
195
|
Manage Flock configurations, run agents, and inspect results directly from your command line.
|
|
172
196
|
|
|
197
|
+
--------------------------------
|
|
198
|
+
|
|
173
199
|
### 💾 Enhanced Serialization - Share, Deploy, and Run Flock Agents by human readable yaml files
|
|
174
200
|
|
|
175
201
|
Define and share entire Flock configurations, including agents and components, using human-readable YAML files. Load flocks directly from these files for easy deployment and versioning.
|
|
176
202
|
|
|
203
|
+
--------------------------------
|
|
204
|
+
|
|
205
|
+
### 💾 New execution flows
|
|
206
|
+
|
|
207
|
+
Run Flock in batch mode to process multiple inputs at once or in evaluation mode to test agents with different inputs.
|
|
208
|
+
|
|
209
|
+
--------------------------------
|
|
210
|
+
|
|
177
211
|
### ⏱️ Robust Temporal Integration
|
|
178
212
|
|
|
179
213
|
Flock 0.4.0 introduces first-class support for Temporal.io, enabling you to build truly production-grade, reliable, and scalable agent workflows. Move beyond simple local execution and leverage Temporal's power for:
|
|
@@ -188,6 +222,51 @@ Flock makes this easy with:
|
|
|
188
222
|
* **Declarative Configuration:** Define Temporal timeouts, retry policies, and task queues directly within your `Flock` and `FlockAgent` configurations (YAML or Python).
|
|
189
223
|
* **Correct Patterns:** Uses Temporal's recommended granular activity execution for better control and visibility.
|
|
190
224
|
* **Clear Worker Separation:** Provides guidance and flags for running dedicated Temporal workers, separating development convenience from production best practices.
|
|
225
|
+
|
|
226
|
+
Visit the [Temporal Documentation](https://learn.temporal.io/python/workflows/) for more information on how to use Temporal.
|
|
227
|
+
|
|
228
|
+
Or check out the [Flock Showcase](https://github.com/whiteducksoftware/flock-showcase) for a complete example of a Flock that uses Temporal or our [docs](https://whiteducksoftware.github.io/flock/guides/temporal-configuration/) for more information.
|
|
229
|
+
|
|
230
|
+
Here's an example of how to configure a Flock to use Temporal:
|
|
231
|
+
|
|
232
|
+
```python
|
|
233
|
+
from flock.core import Flock, FlockFactory
|
|
234
|
+
|
|
235
|
+
from flock.workflow.temporal_config import (
|
|
236
|
+
TemporalActivityConfig,
|
|
237
|
+
TemporalRetryPolicyConfig,
|
|
238
|
+
TemporalWorkflowConfig,
|
|
239
|
+
)
|
|
240
|
+
|
|
241
|
+
# Flock-scoped temporal config
|
|
242
|
+
flock = Flock(
|
|
243
|
+
enable_temporal=True,
|
|
244
|
+
temporal_config=TemporalWorkflowConfig(
|
|
245
|
+
task_queue="flock-test-queue",
|
|
246
|
+
workflow_execution_timeout=timedelta(minutes=10),
|
|
247
|
+
default_activity_retry_policy=TemporalRetryPolicyConfig(
|
|
248
|
+
maximum_attempts=2
|
|
249
|
+
),
|
|
250
|
+
),
|
|
251
|
+
)
|
|
252
|
+
|
|
253
|
+
# Agent-scoped temporal config
|
|
254
|
+
content_agent = FlockFactory.create_default_agent(
|
|
255
|
+
name="content_agent",
|
|
256
|
+
input="funny_title, funny_slide_headers",
|
|
257
|
+
output="funny_slide_content",
|
|
258
|
+
temporal_activity_config=TemporalActivityConfig(
|
|
259
|
+
start_to_close_timeout=timedelta(minutes=1),
|
|
260
|
+
retry_policy=TemporalRetryPolicyConfig(
|
|
261
|
+
maximum_attempts=4,
|
|
262
|
+
initial_interval=timedelta(seconds=2),
|
|
263
|
+
non_retryable_error_types=["ValueError"],
|
|
264
|
+
),
|
|
265
|
+
),
|
|
266
|
+
)
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
--------------------------------
|
|
191
270
|
|
|
192
271
|
### ✨ Utility: @flockclass Hydrator
|
|
193
272
|
|
|
@@ -220,6 +299,8 @@ async def create_character():
|
|
|
220
299
|
# asyncio.run(create_character())
|
|
221
300
|
```
|
|
222
301
|
|
|
302
|
+
--------------------------------
|
|
303
|
+
|
|
223
304
|
## 📚 Examples & Tutorials
|
|
224
305
|
|
|
225
306
|
For a comprehensive set of examples, ranging from basic usage to complex projects and advanced features, please visit our dedicated showcase repository:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<mxfile host="65bd71144e">
|
|
2
2
|
<diagram id="iQ7YuHOuaVDECIdskFDT" name="Page-1">
|
|
3
|
-
<mxGraphModel dx="
|
|
3
|
+
<mxGraphModel dx="1089" dy="498" grid="0" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" background="light-dark(#FFFFFF, #d8cfb1)" math="0" shadow="1">
|
|
4
4
|
<root>
|
|
5
5
|
<mxCell id="0"/>
|
|
6
6
|
<mxCell id="1" parent="0"/>
|
|
@@ -11,18 +11,18 @@
|
|
|
11
11
|
</mxGraphModel>
|
|
12
12
|
</diagram>
|
|
13
13
|
<diagram id="mQwFuZfSuTjpqv4SXbYC" name="Page-2">
|
|
14
|
-
<mxGraphModel dx="
|
|
14
|
+
<mxGraphModel dx="1089" dy="498" grid="0" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" background="light-dark(#FFFFFF, #ffffde)" math="0" shadow="1">
|
|
15
15
|
<root>
|
|
16
16
|
<mxCell id="0"/>
|
|
17
17
|
<mxCell id="1" parent="0"/>
|
|
18
|
-
<mxCell id="gh-ZxXSGDDD0mwRwWCxR-1" value="graph TD
 subgraph Client Application
 client[Client Code]
 end

 subgraph Flock Framework
 orchestrator[Flock Orchestrator]
 registry[Agent Registry]
 context[Context Manager]
 
 subgraph Agents
 base[FlockAgent Base]

 end
 
 subgraph Execution
 local[Local Executor]
 temporal[Temporal Executor]
 end
 
 subgraph Core Services
 logging[Logging System]
 tools[Tool Registry]
 formatter[Output Formatters]
 end
 end

 subgraph External Services
 llm[Language Models]
 temporal_server[Temporal Server]
 end

 %% Client interactions
 client --> orchestrator
 
 %% Orchestrator relations
 orchestrator --> registry
 orchestrator --> context
 orchestrator --> local
 orchestrator --> temporal
 
 %% Agent relations
 base --> tools
 base --> logging
 base --> formatter

 
 %% Execution relations
 local --> llm
 temporal --> temporal_server
 temporal_server --> llm
 
 %% Registry relations
 registry --> base
 registry --> tools

 %% Style
 classDef default fill:#f9f9f9,stroke:#333,stroke-width:2px;
 classDef external fill:#e1f5fe,stroke:#0288d1,stroke-width:2px;
 classDef core fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px;
 
 class llm,temporal_server external;
 class orchestrator,registry,context,base,local,temporal core;" style="shadow=0;dashed=0;align=left;strokeWidth=1;shape=mxgraph.mermaid.abstract.mermaid;labelBackgroundColor=#ffffff;noLabel=1;theme=default;"
|
|
18
|
+
<mxCell id="gh-ZxXSGDDD0mwRwWCxR-1" value="graph TD
 subgraph Client Application
 client[Client Code]
 end

 subgraph Flock Framework
 orchestrator[Flock Orchestrator]
 registry[Agent Registry]
 context[Context Manager]
 
 subgraph Agents
 base[FlockAgent Base]

 end
 
 subgraph Execution
 local[Local Executor]
 temporal[Temporal Executor]
 end
 
 subgraph Core Services
 logging[Logging System]
 tools[Tool Registry]
 formatter[Output Formatters]
 end
 end

 subgraph External Services
 llm[Language Models]
 temporal_server[Temporal Server]
 end

 %% Client interactions
 client --> orchestrator
 
 %% Orchestrator relations
 orchestrator --> registry
 orchestrator --> context
 orchestrator --> local
 orchestrator --> temporal
 
 %% Agent relations
 base --> tools
 base --> logging
 base --> formatter

 
 %% Execution relations
 local --> llm
 temporal --> temporal_server
 temporal_server --> llm
 
 %% Registry relations
 registry --> base
 registry --> tools

 %% Style
 classDef default fill:#f9f9f9,stroke:#333,stroke-width:2px;
 classDef external fill:#e1f5fe,stroke:#0288d1,stroke-width:2px;
 classDef core fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px;
 
 class llm,temporal_server external;
 class orchestrator,registry,context,base,local,temporal core;" style="shadow=0;dashed=0;align=left;strokeWidth=1;shape=mxgraph.mermaid.abstract.mermaid;labelBackgroundColor=#ffffff;noLabel=1;theme=default;" parent="1" vertex="1">
|
|
19
19
|
<mxGeometry x="274" y="325" width="300" height="300" as="geometry"/>
|
|
20
20
|
</mxCell>
|
|
21
21
|
</root>
|
|
22
22
|
</mxGraphModel>
|
|
23
23
|
</diagram>
|
|
24
24
|
<diagram id="sh9ImpPZNdK_Mo0HMCRx" name="Page-3">
|
|
25
|
-
<mxGraphModel dx="
|
|
25
|
+
<mxGraphModel dx="1489" dy="898" grid="0" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="0" pageScale="1" pageWidth="850" pageHeight="1100" background="light-dark(#FFFFFF,#E8E8E8)" math="0" shadow="0">
|
|
26
26
|
<root>
|
|
27
27
|
<mxCell id="0"/>
|
|
28
28
|
<mxCell id="1" parent="0"/>
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
---
|
|
2
|
+
hide: # Optional: Hide table of contents on simple pages
|
|
3
|
+
- toc
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# ⛓️ Chaining Agents: Building Workflows with Routers
|
|
7
|
+
|
|
8
|
+
In Flock, individual agents are powerful, but the real magic happens when you connect them to form sophisticated workflows. Chaining allows the output of one agent to become the input for another, enabling complex tasks to be broken down into manageable, specialized steps.
|
|
9
|
+
|
|
10
|
+
The key to chaining lies in **Routers**. Every `FlockAgent` can have a `handoff_router` attached. After an agent successfully completes its `evaluate` step, its router is called to decide what happens next.
|
|
11
|
+
|
|
12
|
+
## How Routers Work: The `HandOffRequest`
|
|
13
|
+
|
|
14
|
+
A `FlockRouter`'s primary job is to execute its `route` method. This method receives:
|
|
15
|
+
|
|
16
|
+
1. `current_agent`: The agent instance that just finished.
|
|
17
|
+
2. `result`: The dictionary output produced by the `current_agent`.
|
|
18
|
+
3. `context`: The shared `FlockContext` object containing the overall workflow state and history.
|
|
19
|
+
|
|
20
|
+
Based on these inputs, the router returns a `HandOffRequest` object. This object tells the Flock workflow engine:
|
|
21
|
+
|
|
22
|
+
* `next_agent` (str): The `name` of the agent to execute next. If empty or `None`, the workflow typically terminates.
|
|
23
|
+
* `output_to_input_merge_strategy` (Literal["match", "add"]): How the `result` from the current agent should be incorporated into the context for the next agent.
|
|
24
|
+
* `"match"` (Default): Fields in the `result` update corresponding fields in the context.
|
|
25
|
+
* `"add"`: The entire `result` dictionary is added to the context, often under a specific key (useful for feedback or passing complex objects).
|
|
26
|
+
* Optional Overrides: The `HandOffRequest` can also potentially carry information to override aspects of the next agent's execution or update the context directly (though specific router implementations vary in how they use this).
|
|
27
|
+
|
|
28
|
+
Flock provides several built-in router types to handle different chaining scenarios:
|
|
29
|
+
|
|
30
|
+
## 1. Static Chaining: `DefaultRouter`
|
|
31
|
+
|
|
32
|
+
The simplest way to chain agents. The `DefaultRouter` routes to a predetermined next agent specified in its configuration.
|
|
33
|
+
|
|
34
|
+
```python
|
|
35
|
+
# --- In your agent definition ---
|
|
36
|
+
from flock.core import FlockFactory
|
|
37
|
+
from flock.routers.default import DefaultRouter, DefaultRouterConfig
|
|
38
|
+
|
|
39
|
+
# Agent A always hands off to Agent B
|
|
40
|
+
agent_a = FlockFactory.create_default_agent(
|
|
41
|
+
name="agent_a",
|
|
42
|
+
input="topic",
|
|
43
|
+
output="summary",
|
|
44
|
+
router=DefaultRouter(
|
|
45
|
+
config=DefaultRouterConfig(hand_off="agent_b") # Always go to agent_b
|
|
46
|
+
)
|
|
47
|
+
)
|
|
48
|
+
|
|
49
|
+
agent_b = FlockFactory.create_default_agent(
|
|
50
|
+
name="agent_b",
|
|
51
|
+
input="summary", # Expects output from agent_a
|
|
52
|
+
output="final_report"
|
|
53
|
+
)
|
|
54
|
+
|
|
55
|
+
flock.add_agent(agent_a)
|
|
56
|
+
flock.add_agent(agent_b)
|
|
57
|
+
|
|
58
|
+
# Run starting with agent_a
|
|
59
|
+
flock.run(start_agent=agent_a, input={"topic": "AI Agents"})
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
The `hand_off` value in `DefaultRouterConfig` can also be a callable function that dynamically returns a `HandOffRequest` based on the context or result.
|
|
63
|
+
|
|
64
|
+
## 2. Dynamic Chaining: Making Decisions
|
|
65
|
+
|
|
66
|
+
For more complex workflows, you need routers that can make decisions based on the current state.
|
|
67
|
+
|
|
68
|
+
### LLM-Powered Routing: `LLMRouter` 🧠
|
|
69
|
+
|
|
70
|
+
This router leverages a Large Language Model (LLM) to decide the next best agent.
|
|
71
|
+
|
|
72
|
+
* **How it works:** It constructs a prompt containing the current agent's details, its output, and information about all other available agents (their names, descriptions, inputs/outputs). It asks the LLM to choose the most suitable next agent, provide a confidence score, and explain its reasoning.
|
|
73
|
+
* **Configuration:** You can set the LLM `model`, `temperature`, `max_tokens`, a `confidence_threshold` (to only proceed if the LLM is confident enough), and even provide a custom prompt template.
|
|
74
|
+
* **Use Case:** Ideal for workflows where the next step depends on nuanced understanding of the previous agent's output and the capabilities of potential next agents.
|
|
75
|
+
|
|
76
|
+
```python
|
|
77
|
+
# --- Conceptual Example ---
|
|
78
|
+
from flock.routers.llm import LLMRouter, LLMRouterConfig
|
|
79
|
+
|
|
80
|
+
smart_router = LLMRouter(
|
|
81
|
+
config=LLMRouterConfig(
|
|
82
|
+
confidence_threshold=0.7, # Only route if LLM score is >= 0.7
|
|
83
|
+
temperature=0.1
|
|
84
|
+
)
|
|
85
|
+
)
|
|
86
|
+
|
|
87
|
+
agent_with_llm_routing = FlockFactory.create_default_agent(
|
|
88
|
+
name="decision_point_agent",
|
|
89
|
+
# ... inputs/outputs ...
|
|
90
|
+
router=smart_router
|
|
91
|
+
)
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
### Agent-Powered Routing: `AgentRouter` 🤖
|
|
95
|
+
|
|
96
|
+
This router delegates the routing decision to *another* specialized `FlockAgent` called the `HandoffAgent`.
|
|
97
|
+
|
|
98
|
+
* **How it works:** The `AgentRouter` gathers information about the current agent, its result, and the available next agents. It packages this information and feeds it to the internal `HandoffAgent`. The `HandoffAgent` (which typically uses a `DeclarativeEvaluator`) analyzes the situation and outputs its decision (next agent name, confidence, reasoning). The `AgentRouter` then uses this decision.
|
|
99
|
+
* **Configuration:** Includes a `confidence_threshold`.
|
|
100
|
+
* **Use Case:** Useful when the routing logic itself is complex enough to warrant its own dedicated agent. It allows the routing logic to be developed and potentially improved independently.
|
|
101
|
+
|
|
102
|
+
```python
|
|
103
|
+
# --- Conceptual Example ---
|
|
104
|
+
from flock.routers.agent import AgentRouter, AgentRouterConfig
|
|
105
|
+
|
|
106
|
+
agent_powered_router = AgentRouter(
|
|
107
|
+
config=AgentRouterConfig(
|
|
108
|
+
confidence_threshold=0.6
|
|
109
|
+
)
|
|
110
|
+
)
|
|
111
|
+
|
|
112
|
+
agent_with_agent_routing = FlockFactory.create_default_agent(
|
|
113
|
+
name="complex_routing_agent",
|
|
114
|
+
# ... inputs/outputs ...
|
|
115
|
+
router=agent_powered_router
|
|
116
|
+
)
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
## 3. Conditional Routing & Retries
|
|
120
|
+
|
|
121
|
+
Sometimes, the workflow needs to branch or repeat based on specific conditions or feedback.
|
|
122
|
+
|
|
123
|
+
### Condition-Based Branching: `ConditionalRouter` 🤔
|
|
124
|
+
|
|
125
|
+
This router evaluates a condition based on a value stored in the `FlockContext` and routes accordingly.
|
|
126
|
+
|
|
127
|
+
* **How it works:** You configure it to check a specific `condition_context_key`. It supports various checks:
|
|
128
|
+
* String comparison (equals, contains, regex, etc.)
|
|
129
|
+
* Number comparison (<, ==, >, etc.)
|
|
130
|
+
* List size checks (min/max items)
|
|
131
|
+
* Type checking (`isinstance`)
|
|
132
|
+
* Boolean checks
|
|
133
|
+
* Existence checks (does the key exist?)
|
|
134
|
+
* Custom logic via a registered callable function.
|
|
135
|
+
* **Routing Paths:** It routes to `success_agent` if the condition passes, or `failure_agent` if it fails.
|
|
136
|
+
* **Retry Logic:** Optionally, if the condition fails, it can route back to a `retry_agent` (often the *same* agent) up to `max_retries` times before finally giving up and going to the `failure_agent`. This is useful for self-correction loops.
|
|
137
|
+
* **Use Case:** Implementing if/else logic, validation checks, or simple retry loops within your workflow.
|
|
138
|
+
|
|
139
|
+
```python
|
|
140
|
+
# --- Conceptual Example ---
|
|
141
|
+
from flock.routers.conditional import ConditionalRouter, ConditionalRouterConfig
|
|
142
|
+
|
|
143
|
+
# Assume an agent 'validator_agent' puts its result in context.state['validation_status']
|
|
144
|
+
conditional_router = ConditionalRouter(
|
|
145
|
+
config=ConditionalRouterConfig(
|
|
146
|
+
condition_context_key="validation_status", # Check this context variable
|
|
147
|
+
expected_string="PASS", # Condition: Does it equal "PASS"?
|
|
148
|
+
string_mode="equals",
|
|
149
|
+
ignore_case=True,
|
|
150
|
+
success_agent="publish_agent", # If "PASS", go to publish
|
|
151
|
+
failure_agent="human_review_agent" # If not "PASS", go to review
|
|
152
|
+
)
|
|
153
|
+
)
|
|
154
|
+
|
|
155
|
+
validator_agent = FlockFactory.create_default_agent(
|
|
156
|
+
name="validator_agent",
|
|
157
|
+
# ... inputs/outputs ...
|
|
158
|
+
# Assume it sets context.state['validation_status'] = "PASS" or "FAIL"
|
|
159
|
+
router=conditional_router
|
|
160
|
+
)
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
### Feedback-Driven Retries: `FeedbackRetryRouter` 🔁
|
|
164
|
+
|
|
165
|
+
This router is specifically designed to handle retries based on feedback, often generated by assertion modules.
|
|
166
|
+
|
|
167
|
+
* **How it works:** It checks a configured `feedback_context_key`. If feedback is present (indicating a failure or issue detected, perhaps by an `AssertionCheckerModule`), and `max_retries` hasn't been exceeded, it routes back to the *current agent*. Crucially, it uses `output_to_input_merge_strategy="add"` and `add_input_fields` to inject the feedback message (and potentially the previous result) into the context, making it available for the agent's next attempt. If retries are exhausted, it routes to a `fallback_agent` or stops.
|
|
168
|
+
* **Use Case:** Implementing self-correction loops where an agent attempts a task, an assertion module checks the result, and if issues are found, the agent retries with specific feedback on what went wrong.
|
|
169
|
+
|
|
170
|
+
```python
|
|
171
|
+
# --- Conceptual Example ---
|
|
172
|
+
from flock.routers.feedback import FeedbackRetryRouter, FeedbackRetryRouterConfig
|
|
173
|
+
# Assume AssertionCheckerModule puts feedback in context.state['flock.assertion_feedback']
|
|
174
|
+
|
|
175
|
+
retry_router = FeedbackRetryRouter(
|
|
176
|
+
config=FeedbackRetryRouterConfig(
|
|
177
|
+
max_retries=2, # Allow 2 retries
|
|
178
|
+
feedback_context_key="flock.assertion_feedback", # Check this key
|
|
179
|
+
fallback_agent="error_handler_agent" # Go here if retries fail
|
|
180
|
+
)
|
|
181
|
+
)
|
|
182
|
+
|
|
183
|
+
# Agent that might fail assertions
|
|
184
|
+
correctable_agent = FlockFactory.create_default_agent(
|
|
185
|
+
name="correctable_agent",
|
|
186
|
+
input="task_description, flock.assertion_feedback | Optional feedback", # Agent needs to accept feedback
|
|
187
|
+
output="result_data",
|
|
188
|
+
# Assume AssertionCheckerModule runs after evaluate
|
|
189
|
+
router=retry_router
|
|
190
|
+
)
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
## 4. Iterative Generation: `IterativeListGeneratorRouter` 🔄
|
|
194
|
+
|
|
195
|
+
This router facilitates scenarios where an agent needs to be called repeatedly to build up a list of items.
|
|
196
|
+
|
|
197
|
+
* **How it works:** It routes back to the *same agent* multiple times. It manages the growing list of generated items and the current iteration count within the `FlockContext`. On each subsequent run, it provides the list of previously generated items back to the agent (via a configured `context_input_field`). It stops once `max_iterations` is reached.
|
|
198
|
+
* **Complexity:** This pattern can be complex because the agent ideally needs slightly different inputs (the growing list) and might only need to produce *one* new item per iteration, rather than the full final list. The router attempts to manage this state, but careful agent and signature design is required.
|
|
199
|
+
* **Use Case:** Generating list items one by one, like chapters for a book outline, steps in a plan, or ideas in a brainstorm, where each new item might depend on the previous ones.
|
|
200
|
+
|
|
201
|
+
```python
|
|
202
|
+
# --- Conceptual Example ---
|
|
203
|
+
from flock.routers.list_generator import IterativeListGeneratorRouter, IterativeListGeneratorRouterConfig
|
|
204
|
+
|
|
205
|
+
list_router = IterativeListGeneratorRouter(
|
|
206
|
+
config=IterativeListGeneratorRouterConfig(
|
|
207
|
+
target_list_field="chapters", # The final list output name
|
|
208
|
+
item_output_field="chapter", # The output field for a single item
|
|
209
|
+
context_input_field="previous_chapters", # How the list is passed back
|
|
210
|
+
max_iterations=5 # Generate up to 5 chapters
|
|
211
|
+
)
|
|
212
|
+
)
|
|
213
|
+
|
|
214
|
+
chapter_agent = FlockFactory.create_default_agent(
|
|
215
|
+
name="chapter_agent",
|
|
216
|
+
input="book_topic, previous_chapters | List of previously generated chapters",
|
|
217
|
+
output="chapter | The next chapter details", # Agent generates one item
|
|
218
|
+
router=list_router
|
|
219
|
+
)
|
|
220
|
+
# Note: The final result containing the full 'chapters' list is typically
|
|
221
|
+
# assembled from the context after the iterations complete.
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
## Combining Routers
|
|
225
|
+
|
|
226
|
+
For truly advanced workflows, you might even chain routers themselves (though this requires careful design). For example, a `FeedbackRetryRouter` could handle immediate retries, and if no feedback is present (success), it could hand off to an `LLMRouter` to decide the *next different* agent.
|
|
227
|
+
|
|
228
|
+
Just create a new router which is calling both routers in sequence! And even more wild shenanigans are possible!
|
|
229
|
+
|
|
230
|
+
---
|
|
231
|
+
|
|
232
|
+
By understanding and utilizing these different router types, you can move beyond simple linear sequences and build dynamic, intelligent, and robust agent workflows with Flock! 🚀
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
---
|
|
2
|
+
hide: # Optional: Hide table of contents on simple pages
|
|
3
|
+
- toc
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 📚 Guides: Practical Recipes for Flock
|
|
7
|
+
|
|
8
|
+
Welcome to the Flock Guides! This section provides practical, step-by-step walkthroughs for accomplishing specific tasks and implementing common patterns with Flock.
|
|
9
|
+
|
|
10
|
+
Whether you're looking to build complex workflows, integrate specific tools, or optimize your agents, these guides offer focused instructions and examples.
|
|
11
|
+
|
|
12
|
+
## Available Guides
|
|
13
|
+
|
|
14
|
+
* **[Chaining Agents: Building Workflows with Routers](chaining-agents.md):** Learn how to connect multiple agents together using different routing strategies, from simple static handoffs to dynamic, LLM-powered decisions.
|
|
15
|
+
* **[Configuring Temporal Execution](temporal-configuration.md):** Learn how to configure Temporal settings like task queues, timeouts, and retries for your workflows and agents.
|
|
16
|
+
|
|
17
|
+
*(More guides coming soon!)*
|