flock-core 0.4.0b19__tar.gz → 0.4.0b21__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.0b19 → flock_core-0.4.0b21}/.gitignore +1 -2
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/PKG-INFO +32 -20
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/README.md +31 -19
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/pyproject.toml +1 -1
- flock_core-0.4.0b21/src/flock/cli/utils.py +135 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/flock.py +9 -23
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/flock_factory.py +2 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/logging/logging.py +6 -17
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/mixin/dspy_integration.py +30 -49
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/serialization/serialization_utils.py +10 -30
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/util/cli_helper.py +7 -5
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/util/hydrator.py +8 -24
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/evaluators/declarative/declarative_evaluator.py +39 -15
- flock_core-0.4.0b21/src/flock/modules/output/output_module.py +194 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/uv.lock +1 -1
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/.devcontainer/devcontainer.json +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/.env_template +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/.github/workflows/.gitkeep +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/.github/workflows/deploy-documentation.yml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/.github/workflows/deploy-whiteduck-pypi.yml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/.sesskey +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/.vscode/launch.json +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/.vscode/settings.json +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/.vscode/tasks.json +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/LICENSE +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/docs/about/changelog.md +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/docs/about/contributing.md +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/docs/assets/drawio/architecture.drawio +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/docs/assets/images/cli_outputs/out.png +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/docs/assets/images/components_chart.png +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/docs/assets/images/examples/01_01.png +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/docs/assets/images/examples/01_02.png +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/docs/assets/images/examples/01_03.png +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/docs/assets/images/examples/01_04.png +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/docs/assets/images/examples/01_05.png +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/docs/assets/images/examples/01_06.png +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/docs/assets/images/flock.png +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/docs/assets/images/flock_cli.png +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/docs/assets/images/flow_chart.png +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/docs/assets/images/getting-started/first_agent_00.png +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/docs/assets/images/hummingbird.png +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/docs/assets/images/icon.png +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/docs/assets/images/icon.png~ +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/docs/assets/images/logo.png +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/docs/assets/images/memory_concepts.png +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/docs/assets/images/memory_flow.png +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/docs/assets/images/memory_flow_chart.png +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/docs/components/evaluators.md +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/docs/components/index.md +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/docs/components/modules.md +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/docs/components/tools.md +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/docs/core-concepts/agents.md +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/docs/core-concepts/declarative.md +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/docs/core-concepts/index.md +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/docs/core-concepts/workflows.md +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/docs/create_doc_boilerplate.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/docs/deployment/index.md +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/docs/deployment/temporal.md +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/docs/getting-started/configuration.md +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/docs/getting-started/index.md +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/docs/getting-started/installation.md +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/docs/getting-started/quickstart.md +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/docs/guides/chaining-agents.md +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/docs/guides/index.md +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/docs/index.md +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/docs/interacting-with-flock/cli-tool.md +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/docs/interacting-with-flock/index.md +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/docs/interacting-with-flock/interactive-cli.md +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/docs/interacting-with-flock/programmatic.md +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/docs/interacting-with-flock/rest-api.md +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/docs/interacting-with-flock/web-ui.md +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/docs/reference/flock_agent.md +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/docs/reference/index.md +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/docs/release-notes/magpie.md +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/docs/stylesheets/extra.css +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/mkdocs.yml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/requirements.txt +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/scripts/code_collector.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/scripts/create_docs.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/__init__.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/cli/assets/release_notes.md +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/cli/config.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/cli/constants.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/cli/create_agent.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/cli/create_flock.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/cli/execute_flock.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/cli/load_agent.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/cli/load_examples.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/cli/load_flock.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/cli/load_release_notes.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/cli/loaded_flock_cli.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/cli/manage_agents.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/cli/registry_management.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/cli/runner.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/cli/settings.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/cli/view_results.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/cli/yaml_editor.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/config.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/__init__.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/api/__init__.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/api/endpoints.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/api/main.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/api/models.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/api/run_store.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/api/runner.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/api/ui/__init__.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/api/ui/routes.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/api/ui/utils.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/context/context.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/context/context_manager.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/context/context_vars.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/evaluation/utils.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/execution/batch_executor.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/execution/evaluation_executor.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/execution/local_executor.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/execution/temporal_executor.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/flock_agent.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/flock_evaluator.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/flock_module.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/flock_registry.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/flock_router.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/interpreter/python_interpreter.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/logging/__init__.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/logging/formatters/enum_builder.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/logging/formatters/theme_builder.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/logging/formatters/themed_formatter.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/logging/formatters/themes.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/logging/span_middleware/baggage_span_processor.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/logging/telemetry.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/logging/telemetry_exporter/base_exporter.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/logging/telemetry_exporter/file_exporter.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/logging/telemetry_exporter/sqlite_exporter.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/logging/trace_and_logged.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/mixin/prompt_parser.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/serialization/__init__.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/serialization/callable_registry.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/serialization/flock_serializer.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/serialization/json_encoder.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/serialization/secure_serializer.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/serialization/serializable.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/tools/azure_tools.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/tools/basic_tools.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/tools/dev_tools/github.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/tools/llm_tools.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/tools/markdown_tools.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/tools/zendesk_tools.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/util/file_path_utils.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/util/input_resolver.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/util/loader.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/evaluators/memory/azure_search_evaluator.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/evaluators/memory/memory_evaluator.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/evaluators/natural_language/natural_language_evaluator.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/evaluators/test/test_case_evaluator.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/evaluators/zep/zep_evaluator.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/modules/azure-search/azure_search_module.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/modules/callback/callback_module.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/modules/memory/memory_module.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/modules/memory/memory_parser.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/modules/memory/memory_storage.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/modules/performance/metrics_module.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/modules/zep/zep_module.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/platform/docker_tools.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/platform/jaeger_install.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/routers/__init__.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/routers/agent/__init__.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/routers/agent/agent_router.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/routers/agent/handoff_agent.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/routers/default/__init__.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/routers/default/default_router.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/routers/llm/__init__.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/routers/llm/llm_router.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/3024-day.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/3024-night.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/aardvark-blue.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/abernathy.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/adventure.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/adventuretime.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/afterglow.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/alabaster.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/alienblood.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/andromeda.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/apple-classic.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/apple-system-colors.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/arcoiris.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/argonaut copy.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/argonaut.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/arthur.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/ateliersulphurpool.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/atom.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/atom_test.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/atomonelight.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/aurora.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/ayu copy.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/ayu-light.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/ayu-mirage.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/ayu.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/banana-blueberry.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/batman.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/belafonte-day.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/belafonte-night.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/birdsofparadise.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/blazer.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/blue-matrix.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/blueberrypie.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/bluedolphin.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/blulocodark.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/blulocolight.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/borland.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/breeze.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/bright-lights.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/broadcast.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/brogrammer.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/builtin-dark.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/builtin-light.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/builtin-pastel-dark.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/builtin-solarized-dark.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/builtin-solarized-light.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/builtin-tango-dark.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/builtin-tango-light.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/c64.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/calamity.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/catppuccin-frappe.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/catppuccin-latte.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/catppuccin-macchiato.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/catppuccin-mocha.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/cga.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/chalk.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/chalkboard.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/challengerdeep.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/chester.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/ciapre.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/clrs.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/cobalt-neon.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/cobalt2.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/coffee-theme.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/crayonponyfish.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/cutiepro.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/cyberdyne.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/cyberpunk.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/cyberpunkscarletprotocol.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/dark+.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/dark-pastel.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/darkermatrix.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/darkmatrix.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/darkside.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/dayfox.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/deep.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/desert.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/dimidium.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/dimmedmonokai.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/django.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/djangorebornagain.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/djangosmooth.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/doom-peacock.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/doomone.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/dotgov.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/dracula+.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/dracula.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/duckbones.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/duotone-dark.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/earthsong.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/elemental.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/elementary.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/encom.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/espresso-libre.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/espresso.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/everblush.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/fahrenheit.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/fairyfloss.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/farmhouse-dark.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/farmhouse-light.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/fideloper.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/firefly-traditional.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/firefoxdev.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/firewatch.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/fishtank.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/flat.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/flatland.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/flexoki-dark.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/flexoki-light.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/floraverse.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/forestblue.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/framer.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/frontenddelight.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/funforrest.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/galaxy.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/galizur.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/github-dark.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/github.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/glacier.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/grape.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/grass.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/grey-green.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/gruber-darker.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/gruvboxdark.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/gruvboxdarkhard.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/gruvboxlight.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/guezwhoz.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/hacktober.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/hardcore.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/harper.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/hax0r-blue.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/hax0r-gr33n.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/hax0r-r3d.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/highway.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/hipster-green.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/hivacruz.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/homebrew.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/hopscotch.256.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/hopscotch.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/hurtado.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/hybrid.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/ic-green-ppl.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/ic-orange-ppl.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/iceberg-dark.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/iceberg-light.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/idea.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/idletoes.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/ir-black.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/iterm2-dark-background.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/iterm2-default.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/iterm2-light-background.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/iterm2-pastel-dark-background.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/iterm2-smoooooth.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/iterm2-solarized-dark.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/iterm2-solarized-light.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/iterm2-tango-dark.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/iterm2-tango-light.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/jackie-brown.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/japanesque.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/jellybeans.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/jetbrains-darcula.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/jubi.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/kanagawabones.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/kibble.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/kolorit.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/konsolas.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/kurokula.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/lab-fox.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/laser.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/later-this-evening.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/lavandula.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/liquidcarbon.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/liquidcarbontransparent.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/liquidcarbontransparentinverse.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/lovelace.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/man-page.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/mariana.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/material.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/materialdark.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/materialdarker.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/materialdesigncolors.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/materialocean.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/mathias.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/matrix.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/medallion.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/mellifluous.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/midnight-in-mojave.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/mirage.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/misterioso.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/molokai.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/monalisa.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/monokai-remastered.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/monokai-soda.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/monokai-vivid.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/n0tch2k.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/neobones-dark.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/neobones-light.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/neon.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/neopolitan.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/neutron.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/night-owlish-light.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/nightfox.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/nightlion-v1.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/nightlion-v2.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/niji.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/nocturnal-winter.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/nord-light.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/nord.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/novel.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/nvimdark.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/nvimlight.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/obsidian.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/ocean.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/oceanic-next.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/oceanicmaterial.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/ollie.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/onehalfdark.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/onehalflight.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/operator-mono-dark.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/overnight-slumber.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/oxocarbon.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/palenighthc.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/pandora.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/paraiso-dark.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/paulmillr.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/pencildark.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/pencillight.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/peppermint.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/piatto-light.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/pnevma.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/popping-and-locking.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/primary.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/pro-light.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/pro.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/purple-rain.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/purplepeter.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/rapture.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/raycast-dark.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/raycast-light.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/rebecca.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/red-alert.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/red-planet.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/red-sands.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/relaxed.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/retro.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/rippedcasts.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/rose-pine-dawn.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/rose-pine-moon.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/rose-pine.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/rouge-2.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/royal.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/ryuuko.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/sakura.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/scarlet-protocol.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/seafoam-pastel.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/seashells.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/seoulbones-dark.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/seoulbones-light.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/seti.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/shades-of-purple.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/shaman.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/slate.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/sleepyhollow.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/smyck.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/snazzy.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/softserver.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/solarized-darcula.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/solarized-dark---patched.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/solarized-dark-higher-contrast.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/spacedust.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/spacegray-eighties-dull.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/spacegray-eighties.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/spacegray.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/spiderman.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/spring.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/square.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/sublette.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/subliminal.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/sugarplum.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/sundried.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/symfonic.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/synthwave-everything.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/synthwave.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/synthwavealpha.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/tango-adapted.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/tango-half-adapted.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/teerb.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/terafox.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/terminal-basic.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/thayer-bright.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/the-hulk.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/tinacious-design-(dark).toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/tinacious-design-(light).toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/tokyonight-day.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/tokyonight-storm.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/tokyonight.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/tomorrow-night-blue.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/tomorrow-night-bright.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/tomorrow-night-burns.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/tomorrow-night-eighties.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/tomorrow-night.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/tomorrow.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/toychest.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/treehouse.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/twilight.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/ubuntu.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/ultradark.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/ultraviolent.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/underthesea.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/unikitty.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/urple.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/vaughn.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/vesper.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/vibrantink.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/vimbones.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/violet-dark.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/violet-light.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/warmneon.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/wez.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/whimsy.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/wildcherry.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/wilmersdorf.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/wombat.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/wryan.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/xcodedark.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/xcodedarkhc.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/xcodelight.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/xcodelighthc.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/xcodewwdc.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/zenbones-dark.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/zenbones-light.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/zenbones.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/zenburn.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/zenburned.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/zenwritten-dark.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/zenwritten-light.toml +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/workflow/__init__.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/workflow/activities.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/workflow/agent_activities.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/workflow/temporal_setup.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/workflow/workflow.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/tests/__init__.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/tests/core/test_flock_batch.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/tests/core/test_flock_core.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/tests/serialization/__init__.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/tests/serialization/test_enhanced_serialization.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/tests/serialization/test_file_path_serialization.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/tests/serialization/test_flock_serializer.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/tests/serialization/test_nested_serialization.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/tests/serialization/test_yaml_serialization.py +0 -0
- {flock_core-0.4.0b19 → flock_core-0.4.0b21}/tests/tools/test_zendesk_tools.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: flock-core
|
|
3
|
-
Version: 0.4.
|
|
3
|
+
Version: 0.4.0b21
|
|
4
4
|
Summary: Declarative LLM Orchestration at Scale
|
|
5
5
|
Author-email: Andre Ratzenberger <andre.ratzenberger@whiteduck.de>
|
|
6
6
|
License-File: LICENSE
|
|
@@ -58,8 +58,6 @@ Requires-Dist: markdownify>=0.14.1; extra == 'tools'
|
|
|
58
58
|
Requires-Dist: tavily-python>=0.5.0; extra == 'tools'
|
|
59
59
|
Description-Content-Type: text/markdown
|
|
60
60
|
|
|
61
|
-
# 🚀 Flock: The Declarative AI Agent Framework 🚀
|
|
62
|
-
|
|
63
61
|
<p align="center">
|
|
64
62
|
<!-- Placeholder for your Flock Logo/Banner - Replace URL -->
|
|
65
63
|
<img alt="Flock Banner" src="https://raw.githubusercontent.com/whiteducksoftware/flock/master/docs/assets/images/flock.png" width="600">
|
|
@@ -95,20 +93,25 @@ Built with real-world deployment in mind, Flock integrates seamlessly with tools
|
|
|
95
93
|
|
|
96
94
|
Flock offers a different way to build agentic systems:
|
|
97
95
|
|
|
98
|
-
| Traditional Agent Frameworks 😟 | Flock Framework 🐤🐧🐓🦆
|
|
99
|
-
|
|
|
100
|
-
| 🤯 **Prompt Nightmare** | ✅ **Declarative Simplicity**
|
|
101
|
-
| *Long, brittle, hard-to-tune prompts*
|
|
102
|
-
| 💥 **Fragile & Unpredictable** | ⚡ **Robust & Production-Ready**
|
|
103
|
-
| *Single errors can halt everything*
|
|
104
|
-
| 🧩 **Monolithic & Rigid**
|
|
105
|
-
| *Hard to extend or modify logic*
|
|
106
|
-
| ⛓️ **Basic Chaining**
|
|
107
|
-
| *Often just linear workflows*
|
|
108
|
-
| 🧪 **Difficult Testing** | ✅ **Testable Components**
|
|
109
|
-
| *Hard to unit test prompt logic*
|
|
110
|
-
| 📄 **Unstructured Output** | ✨ **Structured Data Handling**
|
|
111
|
-
| *Parsing unreliable LLM text output*
|
|
96
|
+
| Traditional Agent Frameworks 😟 | Flock Framework 🐤🐧🐓🦆 |
|
|
97
|
+
| :------------------------------------ | :------------------------------------- |
|
|
98
|
+
| 🤯 **Prompt Nightmare** | ✅ **Declarative Simplicity** |
|
|
99
|
+
| *Long, brittle, hard-to-tune prompts* | *Clear input/output specs (typed!)* |
|
|
100
|
+
| 💥 **Fragile & Unpredictable** | ⚡ **Robust & Production-Ready** |
|
|
101
|
+
| *Single errors can halt everything* | *Fault-tolerant via Temporal option* |
|
|
102
|
+
| 🧩 **Monolithic & Rigid** | 🔧 **Modular & Flexible** |
|
|
103
|
+
| *Hard to extend or modify logic* | *Pluggable Evaluators, Modules, Tools* |
|
|
104
|
+
| ⛓️ **Basic Chaining** | 🚀 **Advanced Orchestration** |
|
|
105
|
+
| *Often just linear workflows* | *Dynamic Routing, Batch Processing* |
|
|
106
|
+
| 🧪 **Difficult Testing** | ✅ **Testable Components** |
|
|
107
|
+
| *Hard to unit test prompt logic* | *Clear I/O contracts aid testing* |
|
|
108
|
+
| 📄 **Unstructured Output** | ✨ **Structured Data Handling** |
|
|
109
|
+
| *Parsing unreliable LLM text output* | *Native Pydantic/Typed Dict support* |
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
## 📹 Video Demo
|
|
113
|
+
|
|
114
|
+
https://github.com/user-attachments/assets/bdab4786-d532-459f-806a-024727164dcc
|
|
112
115
|
|
|
113
116
|
## 💡 Core Concepts
|
|
114
117
|
|
|
@@ -210,7 +213,17 @@ if __name__ == "__main__":
|
|
|
210
213
|
print("Ensure your LLM API key (e.g., OPENAI_API_KEY) is set in your .env file!")
|
|
211
214
|
```
|
|
212
215
|
|
|
213
|
-
##
|
|
216
|
+
## 🐤 New in Flock 0.4.0 `Magpie` 🐤
|
|
217
|
+
|
|
218
|
+
### REST API - Deploy Flock Agents as REST API Endpoints
|
|
219
|
+
|
|
220
|
+
### Web UI - Test Flock Agents in the Browser
|
|
221
|
+
|
|
222
|
+
### CLI Tool - Manage Flock Agents via the Command Line
|
|
223
|
+
|
|
224
|
+
### Serialization - Share, Deploy, and Run Flock Agents by human readable yaml files
|
|
225
|
+
|
|
226
|
+
### ✨ Utility: @flockclass Hydrator
|
|
214
227
|
|
|
215
228
|
Flock also provides conveniences. The @flockclass decorator allows you to easily populate Pydantic models using an LLM:
|
|
216
229
|
|
|
@@ -269,11 +282,10 @@ Ways to contribute:
|
|
|
269
282
|
- Improve documentation.
|
|
270
283
|
- Contribute new Modules, Evaluators, or Routers.
|
|
271
284
|
- Add examples to the flock-showcase repository.
|
|
272
|
-
- Join our Discord Community to discuss development! <!-- Add Discord link -->
|
|
273
285
|
|
|
274
286
|
## 📜 License
|
|
275
287
|
|
|
276
|
-
Flock is licensed under the
|
|
288
|
+
Flock is licensed under the MIT License. See the LICENSE file for details.
|
|
277
289
|
|
|
278
290
|
## 🏢 About
|
|
279
291
|
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
# 🚀 Flock: The Declarative AI Agent Framework 🚀
|
|
2
|
-
|
|
3
1
|
<p align="center">
|
|
4
2
|
<!-- Placeholder for your Flock Logo/Banner - Replace URL -->
|
|
5
3
|
<img alt="Flock Banner" src="https://raw.githubusercontent.com/whiteducksoftware/flock/master/docs/assets/images/flock.png" width="600">
|
|
@@ -35,20 +33,25 @@ Built with real-world deployment in mind, Flock integrates seamlessly with tools
|
|
|
35
33
|
|
|
36
34
|
Flock offers a different way to build agentic systems:
|
|
37
35
|
|
|
38
|
-
| Traditional Agent Frameworks 😟 | Flock Framework 🐤🐧🐓🦆
|
|
39
|
-
|
|
|
40
|
-
| 🤯 **Prompt Nightmare** | ✅ **Declarative Simplicity**
|
|
41
|
-
| *Long, brittle, hard-to-tune prompts*
|
|
42
|
-
| 💥 **Fragile & Unpredictable** | ⚡ **Robust & Production-Ready**
|
|
43
|
-
| *Single errors can halt everything*
|
|
44
|
-
| 🧩 **Monolithic & Rigid**
|
|
45
|
-
| *Hard to extend or modify logic*
|
|
46
|
-
| ⛓️ **Basic Chaining**
|
|
47
|
-
| *Often just linear workflows*
|
|
48
|
-
| 🧪 **Difficult Testing** | ✅ **Testable Components**
|
|
49
|
-
| *Hard to unit test prompt logic*
|
|
50
|
-
| 📄 **Unstructured Output** | ✨ **Structured Data Handling**
|
|
51
|
-
| *Parsing unreliable LLM text output*
|
|
36
|
+
| Traditional Agent Frameworks 😟 | Flock Framework 🐤🐧🐓🦆 |
|
|
37
|
+
| :------------------------------------ | :------------------------------------- |
|
|
38
|
+
| 🤯 **Prompt Nightmare** | ✅ **Declarative Simplicity** |
|
|
39
|
+
| *Long, brittle, hard-to-tune prompts* | *Clear input/output specs (typed!)* |
|
|
40
|
+
| 💥 **Fragile & Unpredictable** | ⚡ **Robust & Production-Ready** |
|
|
41
|
+
| *Single errors can halt everything* | *Fault-tolerant via Temporal option* |
|
|
42
|
+
| 🧩 **Monolithic & Rigid** | 🔧 **Modular & Flexible** |
|
|
43
|
+
| *Hard to extend or modify logic* | *Pluggable Evaluators, Modules, Tools* |
|
|
44
|
+
| ⛓️ **Basic Chaining** | 🚀 **Advanced Orchestration** |
|
|
45
|
+
| *Often just linear workflows* | *Dynamic Routing, Batch Processing* |
|
|
46
|
+
| 🧪 **Difficult Testing** | ✅ **Testable Components** |
|
|
47
|
+
| *Hard to unit test prompt logic* | *Clear I/O contracts aid testing* |
|
|
48
|
+
| 📄 **Unstructured Output** | ✨ **Structured Data Handling** |
|
|
49
|
+
| *Parsing unreliable LLM text output* | *Native Pydantic/Typed Dict support* |
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
## 📹 Video Demo
|
|
53
|
+
|
|
54
|
+
https://github.com/user-attachments/assets/bdab4786-d532-459f-806a-024727164dcc
|
|
52
55
|
|
|
53
56
|
## 💡 Core Concepts
|
|
54
57
|
|
|
@@ -150,7 +153,17 @@ if __name__ == "__main__":
|
|
|
150
153
|
print("Ensure your LLM API key (e.g., OPENAI_API_KEY) is set in your .env file!")
|
|
151
154
|
```
|
|
152
155
|
|
|
153
|
-
##
|
|
156
|
+
## 🐤 New in Flock 0.4.0 `Magpie` 🐤
|
|
157
|
+
|
|
158
|
+
### REST API - Deploy Flock Agents as REST API Endpoints
|
|
159
|
+
|
|
160
|
+
### Web UI - Test Flock Agents in the Browser
|
|
161
|
+
|
|
162
|
+
### CLI Tool - Manage Flock Agents via the Command Line
|
|
163
|
+
|
|
164
|
+
### Serialization - Share, Deploy, and Run Flock Agents by human readable yaml files
|
|
165
|
+
|
|
166
|
+
### ✨ Utility: @flockclass Hydrator
|
|
154
167
|
|
|
155
168
|
Flock also provides conveniences. The @flockclass decorator allows you to easily populate Pydantic models using an LLM:
|
|
156
169
|
|
|
@@ -209,11 +222,10 @@ Ways to contribute:
|
|
|
209
222
|
- Improve documentation.
|
|
210
223
|
- Contribute new Modules, Evaluators, or Routers.
|
|
211
224
|
- Add examples to the flock-showcase repository.
|
|
212
|
-
- Join our Discord Community to discuss development! <!-- Add Discord link -->
|
|
213
225
|
|
|
214
226
|
## 📜 License
|
|
215
227
|
|
|
216
|
-
Flock is licensed under the
|
|
228
|
+
Flock is licensed under the MIT License. See the LICENSE file for details.
|
|
217
229
|
|
|
218
230
|
## 🏢 About
|
|
219
231
|
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
# src/pilot_rules/collector/utils.py
|
|
2
|
+
import datetime
|
|
3
|
+
from pathlib import Path
|
|
4
|
+
from typing import Any
|
|
5
|
+
|
|
6
|
+
from rich import box
|
|
7
|
+
from rich.console import Console
|
|
8
|
+
from rich.panel import Panel
|
|
9
|
+
from rich.progress import BarColumn, Progress, SpinnerColumn, TextColumn
|
|
10
|
+
from rich.table import Table
|
|
11
|
+
|
|
12
|
+
# Create a shared console instance for consistent styling
|
|
13
|
+
console = Console()
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def get_file_metadata(file_path: str) -> dict[str, Any]:
|
|
17
|
+
"""Extract metadata from a file."""
|
|
18
|
+
metadata = {
|
|
19
|
+
"path": file_path,
|
|
20
|
+
"size_bytes": 0,
|
|
21
|
+
"line_count": 0,
|
|
22
|
+
"last_modified": "Unknown",
|
|
23
|
+
"created": "Unknown",
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
try:
|
|
27
|
+
p = Path(file_path)
|
|
28
|
+
stats = p.stat()
|
|
29
|
+
metadata["size_bytes"] = stats.st_size
|
|
30
|
+
metadata["last_modified"] = datetime.datetime.fromtimestamp(
|
|
31
|
+
stats.st_mtime
|
|
32
|
+
).strftime("%Y-%m-%d %H:%M:%S")
|
|
33
|
+
# ctime is platform dependent (creation on Windows, metadata change on Unix)
|
|
34
|
+
# Use mtime as a reliable fallback for "created" if ctime is older than mtime
|
|
35
|
+
ctime = stats.st_ctime
|
|
36
|
+
mtime = stats.st_mtime
|
|
37
|
+
best_ctime = ctime if ctime <= mtime else mtime # Heuristic
|
|
38
|
+
metadata["created"] = datetime.datetime.fromtimestamp(
|
|
39
|
+
best_ctime
|
|
40
|
+
).strftime("%Y-%m-%d %H:%M:%S")
|
|
41
|
+
|
|
42
|
+
try:
|
|
43
|
+
# Attempt to read as text, fallback for binary or encoding issues
|
|
44
|
+
with p.open("r", encoding="utf-8", errors="ignore") as f:
|
|
45
|
+
content = f.read()
|
|
46
|
+
metadata["line_count"] = len(content.splitlines())
|
|
47
|
+
except (OSError, UnicodeDecodeError) as read_err:
|
|
48
|
+
# Handle cases where reading might fail (binary file, permissions etc.)
|
|
49
|
+
console.print(
|
|
50
|
+
f"[yellow]⚠ Warning:[/yellow] Could not read content/count lines for [cyan]{file_path}[/cyan]: [red]{read_err}[/red]"
|
|
51
|
+
)
|
|
52
|
+
metadata["line_count"] = 0 # Indicate unreadable or binary
|
|
53
|
+
|
|
54
|
+
except Exception as e:
|
|
55
|
+
console.print(
|
|
56
|
+
f"[yellow]⚠ Warning:[/yellow] Could not get complete metadata for [cyan]{file_path}[/cyan]: [red]{e}[/red]"
|
|
57
|
+
)
|
|
58
|
+
|
|
59
|
+
return metadata
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
# --- Rich Formatting Utilities ---
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
def print_header(title: str, style: str = "blue") -> None:
|
|
66
|
+
"""Print a styled header with a panel."""
|
|
67
|
+
console.rule()
|
|
68
|
+
console.print(
|
|
69
|
+
Panel.fit(f"[bold {style}]{title}[/bold {style}]", border_style=style)
|
|
70
|
+
)
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
def print_subheader(title: str, style: str = "cyan") -> None:
|
|
74
|
+
"""Print a styled subheader."""
|
|
75
|
+
console.print(f"[bold {style}]== {title} ==[/bold {style}]")
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
def print_success(message: str) -> None:
|
|
79
|
+
"""Print a success message."""
|
|
80
|
+
console.print(f"[bold green]✓[/bold green] {message}")
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
def print_error(message: str, exit_code: int | None = None) -> None:
|
|
84
|
+
"""Print an error message and optionally exit."""
|
|
85
|
+
console.print(f"[bold red]✗ ERROR:[/bold red] {message}")
|
|
86
|
+
if exit_code is not None:
|
|
87
|
+
exit(exit_code)
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
def print_warning(message: str) -> None:
|
|
91
|
+
"""Print a warning message."""
|
|
92
|
+
console.print(f"[yellow]⚠ Warning:[/yellow] {message}")
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
def create_progress() -> Progress:
|
|
96
|
+
"""Create a standardized progress bar."""
|
|
97
|
+
return Progress(
|
|
98
|
+
SpinnerColumn(),
|
|
99
|
+
TextColumn("[bold blue]{task.description}"),
|
|
100
|
+
BarColumn(complete_style="green", finished_style="green"),
|
|
101
|
+
TextColumn("[bold]{task.completed}/{task.total}"),
|
|
102
|
+
console=console,
|
|
103
|
+
)
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
def create_task_table(title: str) -> Table:
|
|
107
|
+
"""Create a standardized table for displaying task information."""
|
|
108
|
+
table = Table(
|
|
109
|
+
title=title, show_header=True, header_style="bold cyan", box=box.ROUNDED
|
|
110
|
+
)
|
|
111
|
+
return table
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
def print_file_stats(files: list[str], title: str = "File Statistics") -> None:
|
|
115
|
+
"""Print statistics about a list of files."""
|
|
116
|
+
if not files:
|
|
117
|
+
console.print("[yellow]No files found to display statistics.[/yellow]")
|
|
118
|
+
return
|
|
119
|
+
|
|
120
|
+
table = Table(title=title, show_header=True, header_style="bold magenta")
|
|
121
|
+
table.add_column("Statistic", style="cyan")
|
|
122
|
+
table.add_column("Value", style="green")
|
|
123
|
+
|
|
124
|
+
extensions = {Path(f).suffix.lower() for f in files if Path(f).suffix}
|
|
125
|
+
total_size = sum(get_file_metadata(f).get("size_bytes", 0) for f in files)
|
|
126
|
+
total_lines = sum(get_file_metadata(f).get("line_count", 0) for f in files)
|
|
127
|
+
|
|
128
|
+
table.add_row("Total Files", str(len(files)))
|
|
129
|
+
table.add_row("Total Size", f"{total_size / 1024:.2f} KB")
|
|
130
|
+
table.add_row("Total Lines", str(total_lines))
|
|
131
|
+
table.add_row(
|
|
132
|
+
"Extensions", ", ".join(sorted(extensions)) if extensions else "None"
|
|
133
|
+
)
|
|
134
|
+
|
|
135
|
+
console.print(table)
|
|
@@ -150,8 +150,7 @@ class Flock(BaseModel, Serializable):
|
|
|
150
150
|
)
|
|
151
151
|
|
|
152
152
|
# Initialize console if needed for banner
|
|
153
|
-
|
|
154
|
-
init_console()
|
|
153
|
+
init_console(clear_screen=True, show_banner=self.show_flock_banner)
|
|
155
154
|
|
|
156
155
|
# Set Temporal debug environment variable
|
|
157
156
|
self._set_temporal_debug_flag()
|
|
@@ -225,7 +224,7 @@ class Flock(BaseModel, Serializable):
|
|
|
225
224
|
raise ValueError("Agent must have a name.")
|
|
226
225
|
|
|
227
226
|
if agent.name in self._agents:
|
|
228
|
-
|
|
227
|
+
raise ValueError("Agent with this name already exists.")
|
|
229
228
|
self._agents[agent.name] = agent
|
|
230
229
|
FlockRegistry.register_agent(agent) # Register globally
|
|
231
230
|
|
|
@@ -351,13 +350,9 @@ class Flock(BaseModel, Serializable):
|
|
|
351
350
|
try:
|
|
352
351
|
resolved_start_agent = self._agents.get(start_agent_name)
|
|
353
352
|
if not resolved_start_agent:
|
|
354
|
-
resolved_start_agent = FlockRegistry.get_agent(
|
|
355
|
-
start_agent_name
|
|
356
|
-
)
|
|
353
|
+
resolved_start_agent = FlockRegistry.get_agent(start_agent_name)
|
|
357
354
|
if not resolved_start_agent:
|
|
358
|
-
raise ValueError(
|
|
359
|
-
f"Start agent '{start_agent_name}' not found."
|
|
360
|
-
)
|
|
355
|
+
raise ValueError(f"Start agent '{start_agent_name}' not found.")
|
|
361
356
|
self.add_agent(resolved_start_agent)
|
|
362
357
|
|
|
363
358
|
run_context = context if context else FlockContext()
|
|
@@ -389,20 +384,15 @@ class Flock(BaseModel, Serializable):
|
|
|
389
384
|
|
|
390
385
|
# Execute workflow
|
|
391
386
|
if not self.enable_temporal:
|
|
392
|
-
result = await run_local_workflow(
|
|
393
|
-
run_context, box_result=False
|
|
394
|
-
)
|
|
387
|
+
result = await run_local_workflow(run_context, box_result=False)
|
|
395
388
|
else:
|
|
396
|
-
result = await run_temporal_workflow(
|
|
397
|
-
run_context, box_result=False
|
|
398
|
-
)
|
|
389
|
+
result = await run_temporal_workflow(run_context, box_result=False)
|
|
399
390
|
|
|
400
391
|
span.set_attribute("result.type", str(type(result)))
|
|
401
392
|
result_str = str(result)
|
|
402
393
|
span.set_attribute(
|
|
403
394
|
"result.preview",
|
|
404
|
-
result_str[:1000]
|
|
405
|
-
+ ("..." if len(result_str) > 1000 else ""),
|
|
395
|
+
result_str[:1000] + ("..." if len(result_str) > 1000 else ""),
|
|
406
396
|
)
|
|
407
397
|
|
|
408
398
|
if box_result:
|
|
@@ -410,17 +400,13 @@ class Flock(BaseModel, Serializable):
|
|
|
410
400
|
logger.debug("Boxing final result.")
|
|
411
401
|
return Box(result)
|
|
412
402
|
except ImportError:
|
|
413
|
-
logger.warning(
|
|
414
|
-
"Box library not installed, returning raw dict."
|
|
415
|
-
)
|
|
403
|
+
logger.warning("Box library not installed, returning raw dict.")
|
|
416
404
|
return result
|
|
417
405
|
else:
|
|
418
406
|
return result
|
|
419
407
|
|
|
420
408
|
except Exception as e:
|
|
421
|
-
logger.error(
|
|
422
|
-
f"Flock run '{self.name}' failed: {e}", exc_info=True
|
|
423
|
-
)
|
|
409
|
+
logger.error(f"Flock run '{self.name}' failed: {e}", exc_info=True)
|
|
424
410
|
span.record_exception(e)
|
|
425
411
|
span.set_status(trace.Status(trace.StatusCode.ERROR, str(e)))
|
|
426
412
|
return {
|
|
@@ -38,6 +38,7 @@ class FlockFactory:
|
|
|
38
38
|
print_context: bool = False,
|
|
39
39
|
write_to_file: bool = False,
|
|
40
40
|
stream: bool = False,
|
|
41
|
+
include_thought_process: bool = False,
|
|
41
42
|
) -> FlockAgent:
|
|
42
43
|
"""Creates a default FlockAgent.
|
|
43
44
|
|
|
@@ -52,6 +53,7 @@ class FlockFactory:
|
|
|
52
53
|
max_tokens=max_tokens,
|
|
53
54
|
temperature=temperature,
|
|
54
55
|
stream=stream,
|
|
56
|
+
include_thought_process=include_thought_process,
|
|
55
57
|
)
|
|
56
58
|
|
|
57
59
|
evaluator = DeclarativeEvaluator(name="default", config=eval_config)
|
|
@@ -144,9 +144,7 @@ def custom_format(record):
|
|
|
144
144
|
level_name = record["level"].name
|
|
145
145
|
category = record["extra"].get("category", "unknown")
|
|
146
146
|
trace_id = record["extra"].get("trace_id", "no-trace")
|
|
147
|
-
color_tag = color_for_category(
|
|
148
|
-
category
|
|
149
|
-
) # Get the color tag name (e.g., "yellow")
|
|
147
|
+
color_tag = color_for_category(category) # Get the color tag name (e.g., "yellow")
|
|
150
148
|
|
|
151
149
|
message = record["message"]
|
|
152
150
|
message = message.replace("{", "{{").replace("}", "}}")
|
|
@@ -155,8 +153,7 @@ def custom_format(record):
|
|
|
155
153
|
if len(message) > MAX_LENGTH:
|
|
156
154
|
truncated_chars = len(message) - MAX_LENGTH
|
|
157
155
|
message = (
|
|
158
|
-
message[:MAX_LENGTH]
|
|
159
|
-
+ f"<yellow>...+({truncated_chars} chars)</yellow>"
|
|
156
|
+
message[:MAX_LENGTH] + f"<yellow>...+({truncated_chars} chars)</yellow>"
|
|
160
157
|
)
|
|
161
158
|
|
|
162
159
|
# Determine if category needs bolding (can refine this logic)
|
|
@@ -164,13 +161,9 @@ def custom_format(record):
|
|
|
164
161
|
|
|
165
162
|
# Apply tags sequentially
|
|
166
163
|
category_styled = f"[{category}]" # Start with the plain category name
|
|
167
|
-
category_styled =
|
|
168
|
-
f"<{color_tag}>{category_styled}</{color_tag}>" # Wrap with color
|
|
169
|
-
)
|
|
164
|
+
category_styled = f"<{color_tag}>{category_styled}</{color_tag}>" # Wrap with color
|
|
170
165
|
if needs_bold:
|
|
171
|
-
category_styled =
|
|
172
|
-
f"<bold>{category_styled}</bold>" # Wrap with bold if needed
|
|
173
|
-
)
|
|
166
|
+
category_styled = f"<bold>{category_styled}</bold>" # Wrap with bold if needed
|
|
174
167
|
|
|
175
168
|
# Final format string using sequential tags for category
|
|
176
169
|
return (
|
|
@@ -311,8 +304,7 @@ class FlockLogger:
|
|
|
311
304
|
if len(message) > max_length:
|
|
312
305
|
truncated_chars = len(message) - max_length
|
|
313
306
|
return (
|
|
314
|
-
message[:max_length]
|
|
315
|
-
+ f"...<yellow>+({truncated_chars} chars)</yellow>"
|
|
307
|
+
message[:max_length] + f"...<yellow>+({truncated_chars} chars)</yellow>"
|
|
316
308
|
)
|
|
317
309
|
return message
|
|
318
310
|
|
|
@@ -454,10 +446,7 @@ def get_module_loggers() -> list[FlockLogger]:
|
|
|
454
446
|
def truncate_for_logging(obj, max_item_length=100, max_items=10):
|
|
455
447
|
"""Truncate large data structures for logging purposes."""
|
|
456
448
|
if isinstance(obj, str) and len(obj) > max_item_length:
|
|
457
|
-
return (
|
|
458
|
-
obj[:max_item_length]
|
|
459
|
-
+ f"... ({len(obj) - max_item_length} more chars)"
|
|
460
|
-
)
|
|
449
|
+
return obj[:max_item_length] + f"... ({len(obj) - max_item_length} more chars)"
|
|
461
450
|
elif isinstance(obj, dict):
|
|
462
451
|
if len(obj) > max_items:
|
|
463
452
|
return {
|
|
@@ -93,26 +93,20 @@ def _resolve_type_string(type_str: str) -> type:
|
|
|
93
93
|
if generic_match:
|
|
94
94
|
base_name = generic_match.group(1).strip()
|
|
95
95
|
args_str = generic_match.group(2).strip()
|
|
96
|
-
logger.debug(
|
|
97
|
-
f"Detected generic pattern: Base='{base_name}', Args='{args_str}'"
|
|
98
|
-
)
|
|
96
|
+
logger.debug(f"Detected generic pattern: Base='{base_name}', Args='{args_str}'")
|
|
99
97
|
|
|
100
98
|
try:
|
|
101
99
|
# Get the base generic type (e.g., list, dict, Optional) from registry/builtins
|
|
102
100
|
BaseType = FlockRegistry.get_type(
|
|
103
101
|
base_name
|
|
104
102
|
) # Expects List, Dict etc. to be registered
|
|
105
|
-
logger.debug(
|
|
106
|
-
f"Resolved base generic type '{base_name}' to: {BaseType}"
|
|
107
|
-
)
|
|
103
|
+
logger.debug(f"Resolved base generic type '{base_name}' to: {BaseType}")
|
|
108
104
|
|
|
109
105
|
# Special handling for Literal
|
|
110
106
|
if BaseType is typing.Literal:
|
|
111
107
|
# Split literal values, remove quotes, strip whitespace
|
|
112
108
|
literal_args_raw = split_top_level(args_str)
|
|
113
|
-
literal_args = tuple(
|
|
114
|
-
s.strip().strip("'\"") for s in literal_args_raw
|
|
115
|
-
)
|
|
109
|
+
literal_args = tuple(s.strip().strip("'\"") for s in literal_args_raw)
|
|
116
110
|
logger.debug(
|
|
117
111
|
f"Parsing Literal arguments: {literal_args_raw} -> {literal_args}"
|
|
118
112
|
)
|
|
@@ -127,9 +121,7 @@ def _resolve_type_string(type_str: str) -> type:
|
|
|
127
121
|
if not arg_strs:
|
|
128
122
|
raise ValueError("Generic type has no arguments.")
|
|
129
123
|
|
|
130
|
-
resolved_arg_types = tuple(
|
|
131
|
-
_resolve_type_string(arg) for arg in arg_strs
|
|
132
|
-
)
|
|
124
|
+
resolved_arg_types = tuple(_resolve_type_string(arg) for arg in arg_strs)
|
|
133
125
|
logger.debug(f"Resolved generic arguments: {resolved_arg_types}")
|
|
134
126
|
|
|
135
127
|
# Construct the generic type hint
|
|
@@ -137,9 +129,7 @@ def _resolve_type_string(type_str: str) -> type:
|
|
|
137
129
|
if len(resolved_arg_types) != 1:
|
|
138
130
|
raise ValueError("Optional requires exactly one argument.")
|
|
139
131
|
resolved_type = typing.Union[resolved_arg_types[0], type(None)] # type: ignore
|
|
140
|
-
logger.debug(
|
|
141
|
-
f"Constructed Optional type as Union: {resolved_type}"
|
|
142
|
-
)
|
|
132
|
+
logger.debug(f"Constructed Optional type as Union: {resolved_type}")
|
|
143
133
|
return resolved_type
|
|
144
134
|
elif BaseType is typing.Union:
|
|
145
135
|
if not resolved_arg_types:
|
|
@@ -151,9 +141,7 @@ def _resolve_type_string(type_str: str) -> type:
|
|
|
151
141
|
BaseType, "__getitem__"
|
|
152
142
|
): # Check if subscriptable (like list, dict, List, Dict)
|
|
153
143
|
resolved_type = BaseType[resolved_arg_types] # type: ignore
|
|
154
|
-
logger.debug(
|
|
155
|
-
f"Constructed subscripted generic type: {resolved_type}"
|
|
156
|
-
)
|
|
144
|
+
logger.debug(f"Constructed subscripted generic type: {resolved_type}")
|
|
157
145
|
return resolved_type
|
|
158
146
|
else:
|
|
159
147
|
# Base type found but cannot be subscripted
|
|
@@ -244,15 +232,11 @@ class DSPyIntegrationMixin:
|
|
|
244
232
|
)
|
|
245
233
|
|
|
246
234
|
FieldClass = (
|
|
247
|
-
dspy.InputField
|
|
248
|
-
if field_kind == "input"
|
|
249
|
-
else dspy.OutputField
|
|
235
|
+
dspy.InputField if field_kind == "input" else dspy.OutputField
|
|
250
236
|
)
|
|
251
237
|
# DSPy Fields use 'desc' for description
|
|
252
238
|
class_dict[name] = (
|
|
253
|
-
FieldClass(desc=desc)
|
|
254
|
-
if desc is not None
|
|
255
|
-
else FieldClass()
|
|
239
|
+
FieldClass(desc=desc) if desc is not None else FieldClass()
|
|
256
240
|
)
|
|
257
241
|
|
|
258
242
|
try:
|
|
@@ -263,15 +247,11 @@ class DSPyIntegrationMixin:
|
|
|
263
247
|
f"Error processing fields for DSPy signature '{agent_name}': {e}",
|
|
264
248
|
exc_info=True,
|
|
265
249
|
)
|
|
266
|
-
raise ValueError(
|
|
267
|
-
f"Could not process fields for signature: {e}"
|
|
268
|
-
) from e
|
|
250
|
+
raise ValueError(f"Could not process fields for signature: {e}") from e
|
|
269
251
|
|
|
270
252
|
# Create and return the dynamic class
|
|
271
253
|
try:
|
|
272
|
-
DynamicSignature = type(
|
|
273
|
-
"dspy_" + agent_name, (base_class,), class_dict
|
|
274
|
-
)
|
|
254
|
+
DynamicSignature = type("dspy_" + agent_name, (base_class,), class_dict)
|
|
275
255
|
logger.info(
|
|
276
256
|
f"Successfully created DSPy Signature: {DynamicSignature.__name__} "
|
|
277
257
|
f"with fields: {DynamicSignature.__annotations__}"
|
|
@@ -336,16 +316,15 @@ class DSPyIntegrationMixin:
|
|
|
336
316
|
def _select_task(
|
|
337
317
|
self,
|
|
338
318
|
signature: Any,
|
|
339
|
-
|
|
319
|
+
override_evaluator_type: AgentType,
|
|
340
320
|
tools: list[Any] | None = None,
|
|
321
|
+
kwargs: dict[str, Any] = {},
|
|
341
322
|
) -> Any:
|
|
342
323
|
"""Select and instantiate the appropriate DSPy Program/Module."""
|
|
343
324
|
try:
|
|
344
325
|
import dspy
|
|
345
326
|
except ImportError:
|
|
346
|
-
logger.error(
|
|
347
|
-
"DSPy library is not installed. Cannot select DSPy task."
|
|
348
|
-
)
|
|
327
|
+
logger.error("DSPy library is not installed. Cannot select DSPy task.")
|
|
349
328
|
raise ImportError("DSPy is required for this functionality.")
|
|
350
329
|
|
|
351
330
|
processed_tools = []
|
|
@@ -360,13 +339,11 @@ class DSPyIntegrationMixin:
|
|
|
360
339
|
)
|
|
361
340
|
|
|
362
341
|
dspy_program = None
|
|
363
|
-
selected_type =
|
|
342
|
+
selected_type = override_evaluator_type
|
|
364
343
|
|
|
365
344
|
# Determine type if not overridden
|
|
366
345
|
if not selected_type:
|
|
367
|
-
selected_type =
|
|
368
|
-
"ReAct" if processed_tools else "Predict"
|
|
369
|
-
) # Default logic
|
|
346
|
+
selected_type = "ReAct" if processed_tools else "Predict" # Default logic
|
|
370
347
|
|
|
371
348
|
logger.debug(
|
|
372
349
|
f"Selecting DSPy program type: {selected_type} (Tools provided: {bool(processed_tools)})"
|
|
@@ -374,11 +351,12 @@ class DSPyIntegrationMixin:
|
|
|
374
351
|
|
|
375
352
|
try:
|
|
376
353
|
if selected_type == "ChainOfThought":
|
|
377
|
-
dspy_program = dspy.ChainOfThought(signature)
|
|
354
|
+
dspy_program = dspy.ChainOfThought(signature, **kwargs)
|
|
378
355
|
elif selected_type == "ReAct":
|
|
379
|
-
|
|
356
|
+
if not kwargs:
|
|
357
|
+
kwargs = {"max_iters": 10}
|
|
380
358
|
dspy_program = dspy.ReAct(
|
|
381
|
-
signature, tools=processed_tools or [],
|
|
359
|
+
signature, tools=processed_tools or [], **kwargs
|
|
382
360
|
)
|
|
383
361
|
elif selected_type == "Predict": # Default or explicitly Completion
|
|
384
362
|
dspy_program = dspy.Predict(signature)
|
|
@@ -388,9 +366,7 @@ class DSPyIntegrationMixin:
|
|
|
388
366
|
)
|
|
389
367
|
dspy_program = dspy.Predict(signature)
|
|
390
368
|
|
|
391
|
-
logger.info(
|
|
392
|
-
f"Instantiated DSPy program: {type(dspy_program).__name__}"
|
|
393
|
-
)
|
|
369
|
+
logger.info(f"Instantiated DSPy program: {type(dspy_program).__name__}")
|
|
394
370
|
return dspy_program
|
|
395
371
|
except Exception as e:
|
|
396
372
|
logger.error(
|
|
@@ -401,8 +377,10 @@ class DSPyIntegrationMixin:
|
|
|
401
377
|
|
|
402
378
|
def _process_result(
|
|
403
379
|
self, result: Any, inputs: dict[str, Any]
|
|
404
|
-
) -> dict[str, Any]:
|
|
380
|
+
) -> tuple[dict[str, Any], float, list]:
|
|
405
381
|
"""Convert the DSPy result object to a dictionary."""
|
|
382
|
+
import dspy
|
|
383
|
+
|
|
406
384
|
if result is None:
|
|
407
385
|
logger.warning("DSPy program returned None result.")
|
|
408
386
|
return {}
|
|
@@ -412,9 +390,7 @@ class DSPyIntegrationMixin:
|
|
|
412
390
|
output_dict = dict(result.items())
|
|
413
391
|
elif hasattr(result, "__dict__"): # Fallback for other object types
|
|
414
392
|
output_dict = {
|
|
415
|
-
k: v
|
|
416
|
-
for k, v in result.__dict__.items()
|
|
417
|
-
if not k.startswith("_")
|
|
393
|
+
k: v for k, v in result.__dict__.items() if not k.startswith("_")
|
|
418
394
|
}
|
|
419
395
|
else:
|
|
420
396
|
# If it's already a dict (less common for DSPy results directly)
|
|
@@ -429,7 +405,12 @@ class DSPyIntegrationMixin:
|
|
|
429
405
|
logger.debug(f"Processed DSPy result to dict: {output_dict}")
|
|
430
406
|
# Optionally merge inputs back if desired (can make result dict large)
|
|
431
407
|
final_result = {**inputs, **output_dict}
|
|
432
|
-
|
|
408
|
+
|
|
409
|
+
lm = dspy.settings.get("lm")
|
|
410
|
+
cost = sum([x["cost"] for x in lm.history if x["cost"] is not None])
|
|
411
|
+
lm_history = lm.inspect_history()
|
|
412
|
+
|
|
413
|
+
return final_result, cost, lm_history
|
|
433
414
|
|
|
434
415
|
except Exception as conv_error:
|
|
435
416
|
logger.error(
|