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.

Files changed (525) hide show
  1. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/.gitignore +1 -2
  2. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/PKG-INFO +32 -20
  3. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/README.md +31 -19
  4. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/pyproject.toml +1 -1
  5. flock_core-0.4.0b21/src/flock/cli/utils.py +135 -0
  6. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/flock.py +9 -23
  7. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/flock_factory.py +2 -0
  8. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/logging/logging.py +6 -17
  9. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/mixin/dspy_integration.py +30 -49
  10. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/serialization/serialization_utils.py +10 -30
  11. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/util/cli_helper.py +7 -5
  12. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/util/hydrator.py +8 -24
  13. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/evaluators/declarative/declarative_evaluator.py +39 -15
  14. flock_core-0.4.0b21/src/flock/modules/output/output_module.py +194 -0
  15. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/uv.lock +1 -1
  16. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/.devcontainer/devcontainer.json +0 -0
  17. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/.env_template +0 -0
  18. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  19. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  20. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  21. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/.github/workflows/.gitkeep +0 -0
  22. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/.github/workflows/deploy-documentation.yml +0 -0
  23. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/.github/workflows/deploy-whiteduck-pypi.yml +0 -0
  24. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/.sesskey +0 -0
  25. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/.vscode/launch.json +0 -0
  26. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/.vscode/settings.json +0 -0
  27. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/.vscode/tasks.json +0 -0
  28. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/LICENSE +0 -0
  29. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/docs/about/changelog.md +0 -0
  30. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/docs/about/contributing.md +0 -0
  31. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/docs/assets/drawio/architecture.drawio +0 -0
  32. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/docs/assets/images/cli_outputs/out.png +0 -0
  33. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/docs/assets/images/components_chart.png +0 -0
  34. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/docs/assets/images/examples/01_01.png +0 -0
  35. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/docs/assets/images/examples/01_02.png +0 -0
  36. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/docs/assets/images/examples/01_03.png +0 -0
  37. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/docs/assets/images/examples/01_04.png +0 -0
  38. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/docs/assets/images/examples/01_05.png +0 -0
  39. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/docs/assets/images/examples/01_06.png +0 -0
  40. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/docs/assets/images/flock.png +0 -0
  41. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/docs/assets/images/flock_cli.png +0 -0
  42. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/docs/assets/images/flow_chart.png +0 -0
  43. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/docs/assets/images/getting-started/first_agent_00.png +0 -0
  44. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/docs/assets/images/hummingbird.png +0 -0
  45. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/docs/assets/images/icon.png +0 -0
  46. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/docs/assets/images/icon.png~ +0 -0
  47. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/docs/assets/images/logo.png +0 -0
  48. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/docs/assets/images/memory_concepts.png +0 -0
  49. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/docs/assets/images/memory_flow.png +0 -0
  50. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/docs/assets/images/memory_flow_chart.png +0 -0
  51. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/docs/components/evaluators.md +0 -0
  52. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/docs/components/index.md +0 -0
  53. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/docs/components/modules.md +0 -0
  54. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/docs/components/tools.md +0 -0
  55. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/docs/core-concepts/agents.md +0 -0
  56. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/docs/core-concepts/declarative.md +0 -0
  57. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/docs/core-concepts/index.md +0 -0
  58. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/docs/core-concepts/workflows.md +0 -0
  59. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/docs/create_doc_boilerplate.py +0 -0
  60. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/docs/deployment/index.md +0 -0
  61. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/docs/deployment/temporal.md +0 -0
  62. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/docs/getting-started/configuration.md +0 -0
  63. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/docs/getting-started/index.md +0 -0
  64. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/docs/getting-started/installation.md +0 -0
  65. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/docs/getting-started/quickstart.md +0 -0
  66. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/docs/guides/chaining-agents.md +0 -0
  67. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/docs/guides/index.md +0 -0
  68. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/docs/index.md +0 -0
  69. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/docs/interacting-with-flock/cli-tool.md +0 -0
  70. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/docs/interacting-with-flock/index.md +0 -0
  71. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/docs/interacting-with-flock/interactive-cli.md +0 -0
  72. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/docs/interacting-with-flock/programmatic.md +0 -0
  73. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/docs/interacting-with-flock/rest-api.md +0 -0
  74. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/docs/interacting-with-flock/web-ui.md +0 -0
  75. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/docs/reference/flock_agent.md +0 -0
  76. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/docs/reference/index.md +0 -0
  77. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/docs/release-notes/magpie.md +0 -0
  78. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/docs/stylesheets/extra.css +0 -0
  79. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/mkdocs.yml +0 -0
  80. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/requirements.txt +0 -0
  81. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/scripts/code_collector.py +0 -0
  82. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/scripts/create_docs.py +0 -0
  83. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/__init__.py +0 -0
  84. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/cli/assets/release_notes.md +0 -0
  85. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/cli/config.py +0 -0
  86. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/cli/constants.py +0 -0
  87. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/cli/create_agent.py +0 -0
  88. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/cli/create_flock.py +0 -0
  89. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/cli/execute_flock.py +0 -0
  90. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/cli/load_agent.py +0 -0
  91. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/cli/load_examples.py +0 -0
  92. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/cli/load_flock.py +0 -0
  93. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/cli/load_release_notes.py +0 -0
  94. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/cli/loaded_flock_cli.py +0 -0
  95. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/cli/manage_agents.py +0 -0
  96. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/cli/registry_management.py +0 -0
  97. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/cli/runner.py +0 -0
  98. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/cli/settings.py +0 -0
  99. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/cli/view_results.py +0 -0
  100. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/cli/yaml_editor.py +0 -0
  101. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/config.py +0 -0
  102. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/__init__.py +0 -0
  103. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/api/__init__.py +0 -0
  104. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/api/endpoints.py +0 -0
  105. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/api/main.py +0 -0
  106. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/api/models.py +0 -0
  107. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/api/run_store.py +0 -0
  108. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/api/runner.py +0 -0
  109. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/api/ui/__init__.py +0 -0
  110. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/api/ui/routes.py +0 -0
  111. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/api/ui/utils.py +0 -0
  112. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/context/context.py +0 -0
  113. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/context/context_manager.py +0 -0
  114. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/context/context_vars.py +0 -0
  115. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/evaluation/utils.py +0 -0
  116. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/execution/batch_executor.py +0 -0
  117. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/execution/evaluation_executor.py +0 -0
  118. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/execution/local_executor.py +0 -0
  119. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/execution/temporal_executor.py +0 -0
  120. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/flock_agent.py +0 -0
  121. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/flock_evaluator.py +0 -0
  122. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/flock_module.py +0 -0
  123. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/flock_registry.py +0 -0
  124. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/flock_router.py +0 -0
  125. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/interpreter/python_interpreter.py +0 -0
  126. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/logging/__init__.py +0 -0
  127. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/logging/formatters/enum_builder.py +0 -0
  128. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/logging/formatters/theme_builder.py +0 -0
  129. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/logging/formatters/themed_formatter.py +0 -0
  130. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/logging/formatters/themes.py +0 -0
  131. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/logging/span_middleware/baggage_span_processor.py +0 -0
  132. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/logging/telemetry.py +0 -0
  133. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/logging/telemetry_exporter/base_exporter.py +0 -0
  134. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/logging/telemetry_exporter/file_exporter.py +0 -0
  135. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/logging/telemetry_exporter/sqlite_exporter.py +0 -0
  136. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/logging/trace_and_logged.py +0 -0
  137. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/mixin/prompt_parser.py +0 -0
  138. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/serialization/__init__.py +0 -0
  139. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/serialization/callable_registry.py +0 -0
  140. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/serialization/flock_serializer.py +0 -0
  141. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/serialization/json_encoder.py +0 -0
  142. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/serialization/secure_serializer.py +0 -0
  143. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/serialization/serializable.py +0 -0
  144. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/tools/azure_tools.py +0 -0
  145. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/tools/basic_tools.py +0 -0
  146. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/tools/dev_tools/github.py +0 -0
  147. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/tools/llm_tools.py +0 -0
  148. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/tools/markdown_tools.py +0 -0
  149. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/tools/zendesk_tools.py +0 -0
  150. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/util/file_path_utils.py +0 -0
  151. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/util/input_resolver.py +0 -0
  152. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/core/util/loader.py +0 -0
  153. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/evaluators/memory/azure_search_evaluator.py +0 -0
  154. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/evaluators/memory/memory_evaluator.py +0 -0
  155. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/evaluators/natural_language/natural_language_evaluator.py +0 -0
  156. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/evaluators/test/test_case_evaluator.py +0 -0
  157. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/evaluators/zep/zep_evaluator.py +0 -0
  158. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/modules/azure-search/azure_search_module.py +0 -0
  159. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/modules/callback/callback_module.py +0 -0
  160. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/modules/memory/memory_module.py +0 -0
  161. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/modules/memory/memory_parser.py +0 -0
  162. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/modules/memory/memory_storage.py +0 -0
  163. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/modules/performance/metrics_module.py +0 -0
  164. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/modules/zep/zep_module.py +0 -0
  165. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/platform/docker_tools.py +0 -0
  166. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/platform/jaeger_install.py +0 -0
  167. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/routers/__init__.py +0 -0
  168. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/routers/agent/__init__.py +0 -0
  169. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/routers/agent/agent_router.py +0 -0
  170. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/routers/agent/handoff_agent.py +0 -0
  171. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/routers/default/__init__.py +0 -0
  172. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/routers/default/default_router.py +0 -0
  173. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/routers/llm/__init__.py +0 -0
  174. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/routers/llm/llm_router.py +0 -0
  175. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/3024-day.toml +0 -0
  176. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/3024-night.toml +0 -0
  177. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/aardvark-blue.toml +0 -0
  178. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/abernathy.toml +0 -0
  179. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/adventure.toml +0 -0
  180. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/adventuretime.toml +0 -0
  181. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/afterglow.toml +0 -0
  182. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/alabaster.toml +0 -0
  183. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/alienblood.toml +0 -0
  184. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/andromeda.toml +0 -0
  185. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/apple-classic.toml +0 -0
  186. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/apple-system-colors.toml +0 -0
  187. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/arcoiris.toml +0 -0
  188. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/argonaut copy.toml +0 -0
  189. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/argonaut.toml +0 -0
  190. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/arthur.toml +0 -0
  191. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/ateliersulphurpool.toml +0 -0
  192. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/atom.toml +0 -0
  193. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/atom_test.toml +0 -0
  194. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/atomonelight.toml +0 -0
  195. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/aurora.toml +0 -0
  196. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/ayu copy.toml +0 -0
  197. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/ayu-light.toml +0 -0
  198. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/ayu-mirage.toml +0 -0
  199. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/ayu.toml +0 -0
  200. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/banana-blueberry.toml +0 -0
  201. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/batman.toml +0 -0
  202. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/belafonte-day.toml +0 -0
  203. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/belafonte-night.toml +0 -0
  204. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/birdsofparadise.toml +0 -0
  205. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/blazer.toml +0 -0
  206. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/blue-matrix.toml +0 -0
  207. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/blueberrypie.toml +0 -0
  208. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/bluedolphin.toml +0 -0
  209. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/blulocodark.toml +0 -0
  210. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/blulocolight.toml +0 -0
  211. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/borland.toml +0 -0
  212. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/breeze.toml +0 -0
  213. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/bright-lights.toml +0 -0
  214. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/broadcast.toml +0 -0
  215. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/brogrammer.toml +0 -0
  216. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/builtin-dark.toml +0 -0
  217. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/builtin-light.toml +0 -0
  218. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/builtin-pastel-dark.toml +0 -0
  219. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/builtin-solarized-dark.toml +0 -0
  220. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/builtin-solarized-light.toml +0 -0
  221. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/builtin-tango-dark.toml +0 -0
  222. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/builtin-tango-light.toml +0 -0
  223. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/c64.toml +0 -0
  224. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/calamity.toml +0 -0
  225. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/catppuccin-frappe.toml +0 -0
  226. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/catppuccin-latte.toml +0 -0
  227. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/catppuccin-macchiato.toml +0 -0
  228. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/catppuccin-mocha.toml +0 -0
  229. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/cga.toml +0 -0
  230. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/chalk.toml +0 -0
  231. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/chalkboard.toml +0 -0
  232. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/challengerdeep.toml +0 -0
  233. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/chester.toml +0 -0
  234. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/ciapre.toml +0 -0
  235. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/clrs.toml +0 -0
  236. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/cobalt-neon.toml +0 -0
  237. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/cobalt2.toml +0 -0
  238. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/coffee-theme.toml +0 -0
  239. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/crayonponyfish.toml +0 -0
  240. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/cutiepro.toml +0 -0
  241. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/cyberdyne.toml +0 -0
  242. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/cyberpunk.toml +0 -0
  243. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/cyberpunkscarletprotocol.toml +0 -0
  244. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/dark+.toml +0 -0
  245. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/dark-pastel.toml +0 -0
  246. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/darkermatrix.toml +0 -0
  247. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/darkmatrix.toml +0 -0
  248. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/darkside.toml +0 -0
  249. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/dayfox.toml +0 -0
  250. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/deep.toml +0 -0
  251. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/desert.toml +0 -0
  252. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/dimidium.toml +0 -0
  253. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/dimmedmonokai.toml +0 -0
  254. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/django.toml +0 -0
  255. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/djangorebornagain.toml +0 -0
  256. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/djangosmooth.toml +0 -0
  257. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/doom-peacock.toml +0 -0
  258. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/doomone.toml +0 -0
  259. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/dotgov.toml +0 -0
  260. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/dracula+.toml +0 -0
  261. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/dracula.toml +0 -0
  262. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/duckbones.toml +0 -0
  263. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/duotone-dark.toml +0 -0
  264. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/earthsong.toml +0 -0
  265. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/elemental.toml +0 -0
  266. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/elementary.toml +0 -0
  267. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/encom.toml +0 -0
  268. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/espresso-libre.toml +0 -0
  269. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/espresso.toml +0 -0
  270. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/everblush.toml +0 -0
  271. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/fahrenheit.toml +0 -0
  272. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/fairyfloss.toml +0 -0
  273. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/farmhouse-dark.toml +0 -0
  274. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/farmhouse-light.toml +0 -0
  275. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/fideloper.toml +0 -0
  276. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/firefly-traditional.toml +0 -0
  277. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/firefoxdev.toml +0 -0
  278. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/firewatch.toml +0 -0
  279. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/fishtank.toml +0 -0
  280. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/flat.toml +0 -0
  281. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/flatland.toml +0 -0
  282. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/flexoki-dark.toml +0 -0
  283. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/flexoki-light.toml +0 -0
  284. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/floraverse.toml +0 -0
  285. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/forestblue.toml +0 -0
  286. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/framer.toml +0 -0
  287. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/frontenddelight.toml +0 -0
  288. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/funforrest.toml +0 -0
  289. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/galaxy.toml +0 -0
  290. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/galizur.toml +0 -0
  291. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/github-dark.toml +0 -0
  292. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/github.toml +0 -0
  293. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/glacier.toml +0 -0
  294. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/grape.toml +0 -0
  295. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/grass.toml +0 -0
  296. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/grey-green.toml +0 -0
  297. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/gruber-darker.toml +0 -0
  298. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/gruvboxdark.toml +0 -0
  299. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/gruvboxdarkhard.toml +0 -0
  300. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/gruvboxlight.toml +0 -0
  301. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/guezwhoz.toml +0 -0
  302. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/hacktober.toml +0 -0
  303. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/hardcore.toml +0 -0
  304. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/harper.toml +0 -0
  305. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/hax0r-blue.toml +0 -0
  306. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/hax0r-gr33n.toml +0 -0
  307. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/hax0r-r3d.toml +0 -0
  308. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/highway.toml +0 -0
  309. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/hipster-green.toml +0 -0
  310. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/hivacruz.toml +0 -0
  311. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/homebrew.toml +0 -0
  312. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/hopscotch.256.toml +0 -0
  313. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/hopscotch.toml +0 -0
  314. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/hurtado.toml +0 -0
  315. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/hybrid.toml +0 -0
  316. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/ic-green-ppl.toml +0 -0
  317. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/ic-orange-ppl.toml +0 -0
  318. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/iceberg-dark.toml +0 -0
  319. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/iceberg-light.toml +0 -0
  320. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/idea.toml +0 -0
  321. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/idletoes.toml +0 -0
  322. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/ir-black.toml +0 -0
  323. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/iterm2-dark-background.toml +0 -0
  324. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/iterm2-default.toml +0 -0
  325. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/iterm2-light-background.toml +0 -0
  326. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/iterm2-pastel-dark-background.toml +0 -0
  327. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/iterm2-smoooooth.toml +0 -0
  328. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/iterm2-solarized-dark.toml +0 -0
  329. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/iterm2-solarized-light.toml +0 -0
  330. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/iterm2-tango-dark.toml +0 -0
  331. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/iterm2-tango-light.toml +0 -0
  332. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/jackie-brown.toml +0 -0
  333. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/japanesque.toml +0 -0
  334. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/jellybeans.toml +0 -0
  335. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/jetbrains-darcula.toml +0 -0
  336. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/jubi.toml +0 -0
  337. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/kanagawabones.toml +0 -0
  338. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/kibble.toml +0 -0
  339. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/kolorit.toml +0 -0
  340. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/konsolas.toml +0 -0
  341. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/kurokula.toml +0 -0
  342. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/lab-fox.toml +0 -0
  343. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/laser.toml +0 -0
  344. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/later-this-evening.toml +0 -0
  345. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/lavandula.toml +0 -0
  346. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/liquidcarbon.toml +0 -0
  347. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/liquidcarbontransparent.toml +0 -0
  348. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/liquidcarbontransparentinverse.toml +0 -0
  349. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/lovelace.toml +0 -0
  350. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/man-page.toml +0 -0
  351. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/mariana.toml +0 -0
  352. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/material.toml +0 -0
  353. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/materialdark.toml +0 -0
  354. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/materialdarker.toml +0 -0
  355. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/materialdesigncolors.toml +0 -0
  356. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/materialocean.toml +0 -0
  357. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/mathias.toml +0 -0
  358. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/matrix.toml +0 -0
  359. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/medallion.toml +0 -0
  360. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/mellifluous.toml +0 -0
  361. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/midnight-in-mojave.toml +0 -0
  362. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/mirage.toml +0 -0
  363. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/misterioso.toml +0 -0
  364. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/molokai.toml +0 -0
  365. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/monalisa.toml +0 -0
  366. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/monokai-remastered.toml +0 -0
  367. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/monokai-soda.toml +0 -0
  368. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/monokai-vivid.toml +0 -0
  369. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/n0tch2k.toml +0 -0
  370. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/neobones-dark.toml +0 -0
  371. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/neobones-light.toml +0 -0
  372. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/neon.toml +0 -0
  373. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/neopolitan.toml +0 -0
  374. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/neutron.toml +0 -0
  375. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/night-owlish-light.toml +0 -0
  376. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/nightfox.toml +0 -0
  377. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/nightlion-v1.toml +0 -0
  378. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/nightlion-v2.toml +0 -0
  379. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/niji.toml +0 -0
  380. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/nocturnal-winter.toml +0 -0
  381. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/nord-light.toml +0 -0
  382. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/nord.toml +0 -0
  383. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/novel.toml +0 -0
  384. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/nvimdark.toml +0 -0
  385. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/nvimlight.toml +0 -0
  386. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/obsidian.toml +0 -0
  387. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/ocean.toml +0 -0
  388. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/oceanic-next.toml +0 -0
  389. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/oceanicmaterial.toml +0 -0
  390. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/ollie.toml +0 -0
  391. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/onehalfdark.toml +0 -0
  392. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/onehalflight.toml +0 -0
  393. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/operator-mono-dark.toml +0 -0
  394. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/overnight-slumber.toml +0 -0
  395. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/oxocarbon.toml +0 -0
  396. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/palenighthc.toml +0 -0
  397. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/pandora.toml +0 -0
  398. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/paraiso-dark.toml +0 -0
  399. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/paulmillr.toml +0 -0
  400. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/pencildark.toml +0 -0
  401. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/pencillight.toml +0 -0
  402. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/peppermint.toml +0 -0
  403. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/piatto-light.toml +0 -0
  404. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/pnevma.toml +0 -0
  405. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/popping-and-locking.toml +0 -0
  406. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/primary.toml +0 -0
  407. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/pro-light.toml +0 -0
  408. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/pro.toml +0 -0
  409. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/purple-rain.toml +0 -0
  410. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/purplepeter.toml +0 -0
  411. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/rapture.toml +0 -0
  412. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/raycast-dark.toml +0 -0
  413. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/raycast-light.toml +0 -0
  414. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/rebecca.toml +0 -0
  415. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/red-alert.toml +0 -0
  416. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/red-planet.toml +0 -0
  417. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/red-sands.toml +0 -0
  418. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/relaxed.toml +0 -0
  419. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/retro.toml +0 -0
  420. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/rippedcasts.toml +0 -0
  421. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/rose-pine-dawn.toml +0 -0
  422. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/rose-pine-moon.toml +0 -0
  423. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/rose-pine.toml +0 -0
  424. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/rouge-2.toml +0 -0
  425. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/royal.toml +0 -0
  426. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/ryuuko.toml +0 -0
  427. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/sakura.toml +0 -0
  428. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/scarlet-protocol.toml +0 -0
  429. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/seafoam-pastel.toml +0 -0
  430. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/seashells.toml +0 -0
  431. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/seoulbones-dark.toml +0 -0
  432. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/seoulbones-light.toml +0 -0
  433. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/seti.toml +0 -0
  434. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/shades-of-purple.toml +0 -0
  435. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/shaman.toml +0 -0
  436. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/slate.toml +0 -0
  437. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/sleepyhollow.toml +0 -0
  438. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/smyck.toml +0 -0
  439. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/snazzy.toml +0 -0
  440. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/softserver.toml +0 -0
  441. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/solarized-darcula.toml +0 -0
  442. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/solarized-dark---patched.toml +0 -0
  443. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/solarized-dark-higher-contrast.toml +0 -0
  444. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/spacedust.toml +0 -0
  445. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/spacegray-eighties-dull.toml +0 -0
  446. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/spacegray-eighties.toml +0 -0
  447. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/spacegray.toml +0 -0
  448. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/spiderman.toml +0 -0
  449. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/spring.toml +0 -0
  450. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/square.toml +0 -0
  451. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/sublette.toml +0 -0
  452. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/subliminal.toml +0 -0
  453. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/sugarplum.toml +0 -0
  454. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/sundried.toml +0 -0
  455. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/symfonic.toml +0 -0
  456. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/synthwave-everything.toml +0 -0
  457. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/synthwave.toml +0 -0
  458. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/synthwavealpha.toml +0 -0
  459. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/tango-adapted.toml +0 -0
  460. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/tango-half-adapted.toml +0 -0
  461. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/teerb.toml +0 -0
  462. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/terafox.toml +0 -0
  463. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/terminal-basic.toml +0 -0
  464. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/thayer-bright.toml +0 -0
  465. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/the-hulk.toml +0 -0
  466. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/tinacious-design-(dark).toml +0 -0
  467. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/tinacious-design-(light).toml +0 -0
  468. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/tokyonight-day.toml +0 -0
  469. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/tokyonight-storm.toml +0 -0
  470. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/tokyonight.toml +0 -0
  471. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/tomorrow-night-blue.toml +0 -0
  472. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/tomorrow-night-bright.toml +0 -0
  473. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/tomorrow-night-burns.toml +0 -0
  474. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/tomorrow-night-eighties.toml +0 -0
  475. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/tomorrow-night.toml +0 -0
  476. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/tomorrow.toml +0 -0
  477. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/toychest.toml +0 -0
  478. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/treehouse.toml +0 -0
  479. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/twilight.toml +0 -0
  480. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/ubuntu.toml +0 -0
  481. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/ultradark.toml +0 -0
  482. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/ultraviolent.toml +0 -0
  483. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/underthesea.toml +0 -0
  484. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/unikitty.toml +0 -0
  485. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/urple.toml +0 -0
  486. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/vaughn.toml +0 -0
  487. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/vesper.toml +0 -0
  488. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/vibrantink.toml +0 -0
  489. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/vimbones.toml +0 -0
  490. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/violet-dark.toml +0 -0
  491. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/violet-light.toml +0 -0
  492. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/warmneon.toml +0 -0
  493. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/wez.toml +0 -0
  494. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/whimsy.toml +0 -0
  495. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/wildcherry.toml +0 -0
  496. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/wilmersdorf.toml +0 -0
  497. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/wombat.toml +0 -0
  498. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/wryan.toml +0 -0
  499. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/xcodedark.toml +0 -0
  500. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/xcodedarkhc.toml +0 -0
  501. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/xcodelight.toml +0 -0
  502. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/xcodelighthc.toml +0 -0
  503. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/xcodewwdc.toml +0 -0
  504. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/zenbones-dark.toml +0 -0
  505. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/zenbones-light.toml +0 -0
  506. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/zenbones.toml +0 -0
  507. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/zenburn.toml +0 -0
  508. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/zenburned.toml +0 -0
  509. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/zenwritten-dark.toml +0 -0
  510. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/themes/zenwritten-light.toml +0 -0
  511. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/workflow/__init__.py +0 -0
  512. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/workflow/activities.py +0 -0
  513. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/workflow/agent_activities.py +0 -0
  514. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/workflow/temporal_setup.py +0 -0
  515. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/src/flock/workflow/workflow.py +0 -0
  516. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/tests/__init__.py +0 -0
  517. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/tests/core/test_flock_batch.py +0 -0
  518. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/tests/core/test_flock_core.py +0 -0
  519. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/tests/serialization/__init__.py +0 -0
  520. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/tests/serialization/test_enhanced_serialization.py +0 -0
  521. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/tests/serialization/test_file_path_serialization.py +0 -0
  522. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/tests/serialization/test_flock_serializer.py +0 -0
  523. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/tests/serialization/test_nested_serialization.py +0 -0
  524. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/tests/serialization/test_yaml_serialization.py +0 -0
  525. {flock_core-0.4.0b19 → flock_core-0.4.0b21}/tests/tools/test_zendesk_tools.py +0 -0
@@ -38,8 +38,7 @@ news/
38
38
  .chroma/
39
39
  hierarchical_memory/
40
40
  .repomix-output.txt
41
- output/
42
- !src/flock/modules/output/output_module.py
41
+
43
42
  .env.*
44
43
  .flock/
45
44
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: flock-core
3
- Version: 0.4.0b19
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* | *Clear input/output specs (typed!)* |
102
- | 💥 **Fragile & Unpredictable** | ⚡ **Robust & Production-Ready** |
103
- | *Single errors can halt everything* | *Fault-tolerant via Temporal option* |
104
- | 🧩 **Monolithic & Rigid** | 🔧 **Modular & Flexible** |
105
- | *Hard to extend or modify logic* | *Pluggable Evaluators, Modules, Tools*|
106
- | ⛓️ **Basic Chaining** | 🚀 **Advanced Orchestration** |
107
- | *Often just linear workflows* | *Dynamic Routing, Batch Processing* |
108
- | 🧪 **Difficult Testing** | ✅ **Testable Components** |
109
- | *Hard to unit test prompt logic* | *Clear I/O contracts aid testing* |
110
- | 📄 **Unstructured Output** | ✨ **Structured Data Handling** |
111
- | *Parsing unreliable LLM text output* | *Native Pydantic/Typed Dict support* |
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
- ## Utility: @flockclass Hydrator
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 Apache License 2.0. See the LICENSE file for details.
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* | *Clear input/output specs (typed!)* |
42
- | 💥 **Fragile & Unpredictable** | ⚡ **Robust & Production-Ready** |
43
- | *Single errors can halt everything* | *Fault-tolerant via Temporal option* |
44
- | 🧩 **Monolithic & Rigid** | 🔧 **Modular & Flexible** |
45
- | *Hard to extend or modify logic* | *Pluggable Evaluators, Modules, Tools*|
46
- | ⛓️ **Basic Chaining** | 🚀 **Advanced Orchestration** |
47
- | *Often just linear workflows* | *Dynamic Routing, Batch Processing* |
48
- | 🧪 **Difficult Testing** | ✅ **Testable Components** |
49
- | *Hard to unit test prompt logic* | *Clear I/O contracts aid testing* |
50
- | 📄 **Unstructured Output** | ✨ **Structured Data Handling** |
51
- | *Parsing unreliable LLM text output* | *Native Pydantic/Typed Dict support* |
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
- ## Utility: @flockclass Hydrator
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 Apache License 2.0. See the LICENSE file for details.
228
+ Flock is licensed under the MIT License. See the LICENSE file for details.
217
229
 
218
230
  ## 🏢 About
219
231
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "flock-core"
3
- version = "0.4.0b-19"
3
+ version = "0.4.0b-21"
4
4
  description = "Declarative LLM Orchestration at Scale"
5
5
  readme = "README.md"
6
6
  authors = [
@@ -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
- if self.show_flock_banner: # Use instance attribute
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
- logger.warning(f"Agent '{agent.name}' already exists. Overwriting.")
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
- agent_type_override: AgentType,
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 = agent_type_override
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
- # ReAct requires tools, even if empty list
356
+ if not kwargs:
357
+ kwargs = {"max_iters": 10}
380
358
  dspy_program = dspy.ReAct(
381
- signature, tools=processed_tools or [], max_iters=10
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
- return final_result
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(