open-swarm 0.1.1744936125__tar.gz → 0.1.1744936234__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.
Files changed (318) hide show
  1. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/PKG-INFO +1 -1
  2. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/pyproject.toml +1 -1
  3. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/blueprints/digitalbutlers/blueprint_digitalbutlers.py +28 -0
  4. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/blueprints/divine_code/blueprint_divine_code.py +26 -0
  5. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/blueprints/django_chat/blueprint_django_chat.py +15 -4
  6. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/blueprints/echocraft/blueprint_echocraft.py +9 -2
  7. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/blueprints/family_ties/blueprint_family_ties.py +28 -0
  8. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/blueprints/gaggle/blueprint_gaggle.py +117 -15
  9. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/blueprints/monkai_magic/blueprint_monkai_magic.py +10 -0
  10. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/blueprints/nebula_shellz/blueprint_nebula_shellz.py +47 -29
  11. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/blueprints/omniplex/blueprint_omniplex.py +21 -0
  12. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/blueprints/rue_code/blueprint_rue_code.py +24 -25
  13. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/blueprints/suggestion/blueprint_suggestion.py +35 -12
  14. open_swarm-0.1.1744936125/src/swarm/blueprints/burnt_noodles/blueprint_burnt_noodles.py +0 -304
  15. open_swarm-0.1.1744936125/src/swarm/blueprints/dilbot_universe/blueprint_dilbot_universe.py +0 -285
  16. open_swarm-0.1.1744936125/src/swarm/blueprints/gotchaman/blueprint_gotchaman.py +0 -232
  17. open_swarm-0.1.1744936125/tests/blueprints/test_burnt_noodles.py +0 -141
  18. open_swarm-0.1.1744936125/tests/system/test_burnt_noodles.sh +0 -2
  19. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/.gitignore +0 -0
  20. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/LICENSE +0 -0
  21. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/README.md +0 -0
  22. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/__init__.py +0 -0
  23. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/agent/__init__.py +0 -0
  24. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/apps.py +0 -0
  25. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/auth.py +0 -0
  26. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/blueprints/README.md +0 -0
  27. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/blueprints/chatbot/blueprint_chatbot.py +0 -0
  28. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/blueprints/chatbot/templates/chatbot/chatbot.html +0 -0
  29. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/blueprints/divine_code/__init__.py +0 -0
  30. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/blueprints/divine_code/apps.py +0 -0
  31. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/blueprints/django_chat/apps.py +0 -0
  32. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/blueprints/django_chat/templates/django_chat/django_chat_webpage.html +0 -0
  33. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/blueprints/django_chat/urls.py +0 -0
  34. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/blueprints/django_chat/views.py +0 -0
  35. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/blueprints/family_ties/apps.py +0 -0
  36. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/blueprints/family_ties/models.py +0 -0
  37. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/blueprints/family_ties/serializers.py +0 -0
  38. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/blueprints/family_ties/settings.py +0 -0
  39. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/blueprints/family_ties/urls.py +0 -0
  40. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/blueprints/family_ties/views.py +0 -0
  41. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/blueprints/flock/__init__.py +0 -0
  42. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/blueprints/mcp_demo/blueprint_mcp_demo.py +0 -0
  43. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/blueprints/messenger/templates/messenger/messenger.html +0 -0
  44. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/blueprints/mission_improbable/blueprint_mission_improbable.py +0 -0
  45. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/blueprints/rue_code/__init__.py +0 -0
  46. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/blueprints/unapologetic_press/blueprint_unapologetic_press.py +0 -0
  47. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/blueprints/whiskeytango_foxtrot/__init__.py +0 -0
  48. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/blueprints/whiskeytango_foxtrot/apps.py +0 -0
  49. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/blueprints/whiskeytango_foxtrot/blueprint_whiskeytango_foxtrot.py +0 -0
  50. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/consumers.py +0 -0
  51. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/extensions/__init__.py +0 -0
  52. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/extensions/blueprint/__init__.py +0 -0
  53. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/extensions/blueprint/agent_utils.py +0 -0
  54. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/extensions/blueprint/blueprint_base.py +0 -0
  55. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/extensions/blueprint/blueprint_discovery.py +0 -0
  56. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/extensions/blueprint/blueprint_utils.py +0 -0
  57. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/extensions/blueprint/cli_handler.py +0 -0
  58. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/extensions/blueprint/common_utils.py +0 -0
  59. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/extensions/blueprint/config_loader.py +0 -0
  60. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/extensions/blueprint/django_utils.py +0 -0
  61. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/extensions/blueprint/interactive_mode.py +0 -0
  62. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/extensions/blueprint/modes/rest_mode.py +0 -0
  63. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/extensions/blueprint/output_utils.py +0 -0
  64. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/extensions/blueprint/runnable_blueprint.py +0 -0
  65. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/extensions/blueprint/spinner.py +0 -0
  66. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/extensions/cli/__init__.py +0 -0
  67. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/extensions/cli/blueprint_runner.py +0 -0
  68. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/extensions/cli/cli_args.py +0 -0
  69. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/extensions/cli/commands/__init__.py +0 -0
  70. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/extensions/cli/commands/blueprint_management.py +0 -0
  71. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/extensions/cli/commands/config_management.py +0 -0
  72. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/extensions/cli/commands/edit_config.py +0 -0
  73. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/extensions/cli/commands/list_blueprints.py +0 -0
  74. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/extensions/cli/commands/validate_env.py +0 -0
  75. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/extensions/cli/commands/validate_envvars.py +0 -0
  76. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/extensions/cli/interactive_shell.py +0 -0
  77. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/extensions/cli/main.py +0 -0
  78. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/extensions/cli/selection.py +0 -0
  79. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/extensions/cli/utils/discover_commands.py +0 -0
  80. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/extensions/cli/utils/env_setup.py +0 -0
  81. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/extensions/cli/utils.py +0 -0
  82. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/extensions/config/__init__.py +0 -0
  83. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/extensions/config/config_loader.py +0 -0
  84. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/extensions/config/config_manager.py +0 -0
  85. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/extensions/config/server_config.py +0 -0
  86. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/extensions/config/setup_wizard.py +0 -0
  87. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/extensions/config/utils/__init__.py +0 -0
  88. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/extensions/config/utils/logger.py +0 -0
  89. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/extensions/launchers/__init__.py +0 -0
  90. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/extensions/launchers/build_launchers.py +0 -0
  91. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/extensions/launchers/build_swarm_wrapper.py +0 -0
  92. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/extensions/launchers/swarm_api.py +0 -0
  93. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/extensions/launchers/swarm_cli.py +0 -0
  94. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/extensions/launchers/swarm_wrapper.py +0 -0
  95. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/llm/chat_completion.py +0 -0
  96. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/management/__init__.py +0 -0
  97. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/management/commands/__init__.py +0 -0
  98. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/management/commands/runserver.py +0 -0
  99. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/messages.py +0 -0
  100. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/middleware.py +0 -0
  101. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/migrations/0010_initial_chat_models.py +0 -0
  102. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/migrations/__init__.py +0 -0
  103. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/models.py +0 -0
  104. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/permissions.py +0 -0
  105. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/repl/__init__.py +0 -0
  106. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/repl/repl.py +0 -0
  107. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/serializers.py +0 -0
  108. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/settings.py +0 -0
  109. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/contrib/fonts/fontawesome-webfont.ttf +0 -0
  110. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/contrib/fonts/fontawesome-webfont.woff +0 -0
  111. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/contrib/fonts/fontawesome-webfont.woff2 +0 -0
  112. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/contrib/markedjs/marked.min.js +0 -0
  113. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/contrib/tabler-icons/adjustments-horizontal.svg +0 -0
  114. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/contrib/tabler-icons/alert-triangle.svg +0 -0
  115. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/contrib/tabler-icons/archive.svg +0 -0
  116. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/contrib/tabler-icons/artboard.svg +0 -0
  117. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/contrib/tabler-icons/automatic-gearbox.svg +0 -0
  118. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/contrib/tabler-icons/box-multiple.svg +0 -0
  119. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/contrib/tabler-icons/carambola.svg +0 -0
  120. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/contrib/tabler-icons/copy.svg +0 -0
  121. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/contrib/tabler-icons/download.svg +0 -0
  122. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/contrib/tabler-icons/edit.svg +0 -0
  123. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/contrib/tabler-icons/filled/carambola.svg +0 -0
  124. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/contrib/tabler-icons/filled/paint.svg +0 -0
  125. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/contrib/tabler-icons/headset.svg +0 -0
  126. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/contrib/tabler-icons/layout-sidebar-left-collapse.svg +0 -0
  127. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/contrib/tabler-icons/layout-sidebar-left-expand.svg +0 -0
  128. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/contrib/tabler-icons/layout-sidebar-right-collapse.svg +0 -0
  129. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/contrib/tabler-icons/layout-sidebar-right-expand.svg +0 -0
  130. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/contrib/tabler-icons/message-chatbot.svg +0 -0
  131. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/contrib/tabler-icons/message-star.svg +0 -0
  132. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/contrib/tabler-icons/message-x.svg +0 -0
  133. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/contrib/tabler-icons/message.svg +0 -0
  134. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/contrib/tabler-icons/paperclip.svg +0 -0
  135. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/contrib/tabler-icons/playlist-add.svg +0 -0
  136. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/contrib/tabler-icons/robot.svg +0 -0
  137. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/contrib/tabler-icons/search.svg +0 -0
  138. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/contrib/tabler-icons/settings.svg +0 -0
  139. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/contrib/tabler-icons/thumb-down.svg +0 -0
  140. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/contrib/tabler-icons/thumb-up.svg +0 -0
  141. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/css/dropdown.css +0 -0
  142. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/htmx/htmx.min.js +0 -0
  143. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/js/dropdown.js +0 -0
  144. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/rest_mode/css/base.css +0 -0
  145. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/rest_mode/css/chat-history.css +0 -0
  146. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/rest_mode/css/chat.css +0 -0
  147. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/rest_mode/css/chatbot.css +0 -0
  148. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/rest_mode/css/chatgpt.css +0 -0
  149. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/rest_mode/css/colors/corporate.css +0 -0
  150. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/rest_mode/css/colors/pastel.css +0 -0
  151. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/rest_mode/css/colors/tropical.css +0 -0
  152. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/rest_mode/css/general.css +0 -0
  153. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/rest_mode/css/layout.css +0 -0
  154. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/rest_mode/css/layouts/messenger-layout.css +0 -0
  155. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/rest_mode/css/layouts/minimalist-layout.css +0 -0
  156. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/rest_mode/css/layouts/mobile-layout.css +0 -0
  157. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/rest_mode/css/messages.css +0 -0
  158. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/rest_mode/css/messenger.css +0 -0
  159. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/rest_mode/css/settings.css +0 -0
  160. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/rest_mode/css/simple.css +0 -0
  161. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/rest_mode/css/slack.css +0 -0
  162. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/rest_mode/css/style.css +0 -0
  163. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/rest_mode/css/theme.css +0 -0
  164. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/rest_mode/css/toast.css +0 -0
  165. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/rest_mode/js/auth.js +0 -0
  166. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/rest_mode/js/blueprint.js +0 -0
  167. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/rest_mode/js/blueprintUtils.js +0 -0
  168. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/rest_mode/js/chatLogic.js +0 -0
  169. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/rest_mode/js/debug.js +0 -0
  170. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/rest_mode/js/events.js +0 -0
  171. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/rest_mode/js/main.js +0 -0
  172. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/rest_mode/js/messages.js +0 -0
  173. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/rest_mode/js/messengerLogic.js +0 -0
  174. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/rest_mode/js/modules/apiService.js +0 -0
  175. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/rest_mode/js/modules/blueprintManager.js +0 -0
  176. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/rest_mode/js/modules/chatHistory.js +0 -0
  177. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/rest_mode/js/modules/debugLogger.js +0 -0
  178. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/rest_mode/js/modules/eventHandlers.js +0 -0
  179. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/rest_mode/js/modules/messageProcessor.js +0 -0
  180. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/rest_mode/js/modules/state.js +0 -0
  181. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/rest_mode/js/modules/userInteractions.js +0 -0
  182. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/rest_mode/js/modules/validation.js +0 -0
  183. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/rest_mode/js/rendering.js +0 -0
  184. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/rest_mode/js/settings.js +0 -0
  185. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/rest_mode/js/sidebar.js +0 -0
  186. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/rest_mode/js/simpleLogic.js +0 -0
  187. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/rest_mode/js/slackLogic.js +0 -0
  188. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/rest_mode/js/splash.js +0 -0
  189. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/rest_mode/js/theme.js +0 -0
  190. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/rest_mode/js/toast.js +0 -0
  191. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/rest_mode/js/ui.js +0 -0
  192. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/rest_mode/js/validation.js +0 -0
  193. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/rest_mode/svg/animated_spinner.svg +0 -0
  194. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/rest_mode/svg/arrow_down.svg +0 -0
  195. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/rest_mode/svg/arrow_left.svg +0 -0
  196. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/rest_mode/svg/arrow_right.svg +0 -0
  197. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/rest_mode/svg/arrow_up.svg +0 -0
  198. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/rest_mode/svg/attach.svg +0 -0
  199. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/rest_mode/svg/avatar.svg +0 -0
  200. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/rest_mode/svg/canvas.svg +0 -0
  201. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/rest_mode/svg/chat_history.svg +0 -0
  202. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/rest_mode/svg/close.svg +0 -0
  203. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/rest_mode/svg/copy.svg +0 -0
  204. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/rest_mode/svg/dark_mode.svg +0 -0
  205. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/rest_mode/svg/edit.svg +0 -0
  206. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/rest_mode/svg/layout.svg +0 -0
  207. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/rest_mode/svg/logo.svg +0 -0
  208. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/rest_mode/svg/logout.svg +0 -0
  209. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/rest_mode/svg/mobile.svg +0 -0
  210. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/rest_mode/svg/new_chat.svg +0 -0
  211. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/rest_mode/svg/not_visible.svg +0 -0
  212. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/rest_mode/svg/plus.svg +0 -0
  213. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/rest_mode/svg/run_code.svg +0 -0
  214. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/rest_mode/svg/save.svg +0 -0
  215. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/rest_mode/svg/search.svg +0 -0
  216. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/rest_mode/svg/settings.svg +0 -0
  217. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/rest_mode/svg/speaker.svg +0 -0
  218. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/rest_mode/svg/stop.svg +0 -0
  219. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/rest_mode/svg/thumbs_down.svg +0 -0
  220. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/rest_mode/svg/thumbs_up.svg +0 -0
  221. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/rest_mode/svg/toggle_off.svg +0 -0
  222. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/rest_mode/svg/toggle_on.svg +0 -0
  223. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/rest_mode/svg/trash.svg +0 -0
  224. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/rest_mode/svg/undo.svg +0 -0
  225. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/rest_mode/svg/visible.svg +0 -0
  226. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/static/rest_mode/svg/voice.svg +0 -0
  227. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/templates/account/login.html +0 -0
  228. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/templates/account/signup.html +0 -0
  229. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/templates/base.html +0 -0
  230. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/templates/chat.html +0 -0
  231. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/templates/index.html +0 -0
  232. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/templates/rest_mode/components/chat_sidebar.html +0 -0
  233. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/templates/rest_mode/components/header.html +0 -0
  234. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/templates/rest_mode/components/main_chat_pane.html +0 -0
  235. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/templates/rest_mode/components/settings_dialog.html +0 -0
  236. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/templates/rest_mode/components/splash_screen.html +0 -0
  237. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/templates/rest_mode/components/top_bar.html +0 -0
  238. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/templates/rest_mode/message_ui.html +0 -0
  239. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/templates/rest_mode/slackbot.html +0 -0
  240. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/templates/simple_blueprint_page.html +0 -0
  241. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/templates/websocket_partials/final_system_message.html +0 -0
  242. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/templates/websocket_partials/system_message.html +0 -0
  243. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/templates/websocket_partials/user_message.html +0 -0
  244. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/tool_executor.py +0 -0
  245. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/urls.py +0 -0
  246. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/util.py +0 -0
  247. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/utils/color_utils.py +0 -0
  248. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/utils/context_utils.py +0 -0
  249. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/utils/general_utils.py +0 -0
  250. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/utils/log_utils.py +0 -0
  251. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/utils/logger.py +0 -0
  252. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/utils/logger_setup.py +0 -0
  253. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/utils/message_sequence.py +0 -0
  254. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/utils/message_utils.py +0 -0
  255. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/utils/redact.py +0 -0
  256. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/views/__init__.py +0 -0
  257. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/views/api_views.py +0 -0
  258. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/views/chat_views.py +0 -0
  259. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/views/core_views.py +0 -0
  260. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/views/message_views.py +0 -0
  261. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/views/model_views.py +0 -0
  262. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/views/utils.py +0 -0
  263. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/views/web_views.py +0 -0
  264. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/src/swarm/wsgi.py +0 -0
  265. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/tests/__init__.py +0 -0
  266. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/tests/api/conftest.py +0 -0
  267. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/tests/api/test_chat_completions_auth_async.py +0 -0
  268. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/tests/api/test_chat_completions_failing_async.py +0 -0
  269. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/tests/api/test_chat_completions_validation_async.py +0 -0
  270. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/tests/blueprints/test_chatbot.py +0 -0
  271. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/tests/blueprints/test_digitalbutlers.py +0 -0
  272. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/tests/blueprints/test_dilbot_universe.py +0 -0
  273. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/tests/blueprints/test_divine_code.py +0 -0
  274. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/tests/blueprints/test_echocraft.py +0 -0
  275. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/tests/blueprints/test_family_ties.py +0 -0
  276. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/tests/blueprints/test_gaggle.py +0 -0
  277. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/tests/blueprints/test_gotchaman.py +0 -0
  278. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/tests/blueprints/test_mcp_demo.py +0 -0
  279. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/tests/blueprints/test_mission_improbable.py +0 -0
  280. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/tests/blueprints/test_monkai_magic.py +0 -0
  281. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/tests/blueprints/test_nebula_shellz.py +0 -0
  282. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/tests/blueprints/test_omniplex.py +0 -0
  283. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/tests/blueprints/test_suggestion.py +0 -0
  284. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/tests/blueprints/test_unapologetic_press.py +0 -0
  285. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/tests/blueprints/test_whiskeytangofoxtrot.py +0 -0
  286. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/tests/cli/test_launchers.py +0 -0
  287. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/tests/cli/test_list_blueprints.py +0 -0
  288. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/tests/conftest.py +0 -0
  289. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/tests/extensions/launchers/test_swarm_api_launcher.py +0 -0
  290. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/tests/swarm_config.json +0 -0
  291. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/tests/system/test_chucks_angels.sh +0 -0
  292. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/tests/system/test_digitalbutlers.sh +0 -0
  293. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/tests/system/test_dilbot_universe.sh +0 -0
  294. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/tests/system/test_divine_code.sh +0 -0
  295. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/tests/system/test_django_chat.sh +0 -0
  296. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/tests/system/test_echocraft.sh +0 -0
  297. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/tests/system/test_family_ties.sh +0 -0
  298. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/tests/system/test_flock.sh +0 -0
  299. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/tests/system/test_gaggle.sh +0 -0
  300. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/tests/system/test_gotchaman.sh +0 -0
  301. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/tests/system/test_monkai-magic.sh +0 -0
  302. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/tests/system/test_nebula_shellz.sh +0 -0
  303. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/tests/system/test_omniplex.sh +0 -0
  304. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/tests/system/test_rue-code.sh +0 -0
  305. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/tests/system/test_suggestion.sh +0 -0
  306. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/tests/system/test_unapologetic_press.sh +0 -0
  307. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/tests/system/test_university.sh +0 -0
  308. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/tests/system/test_whiskeytango_foxtrot.sh +0 -0
  309. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/tests/test_blueprint_loading.py +0 -0
  310. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/tests/test_cli_mode_selection.py +0 -0
  311. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/tests/test_core_filter_duplicate_system_messages.py +0 -0
  312. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/tests/test_core_filter_messages.py +0 -0
  313. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/tests/test_core_truncate_message_history.py +0 -0
  314. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/tests/test_core_update_null_content.py +0 -0
  315. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/tests/test_dummy.py +0 -0
  316. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/tests/test_truncate_message_history.py +0 -0
  317. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/tests/unit/blueprints/rue_code/test_rue_code_tools.py +0 -0
  318. {open_swarm-0.1.1744936125 → open_swarm-0.1.1744936234}/tests/unit/test_blueprint_base_config.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: open-swarm
3
- Version: 0.1.1744936125
3
+ Version: 0.1.1744936234
4
4
  Summary: Open Swarm: Orchestrating AI Agent Swarms with Django
5
5
  Project-URL: Homepage, https://github.com/yourusername/open-swarm
6
6
  Project-URL: Documentation, https://github.com/yourusername/open-swarm/blob/main/README.md
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "open-swarm"
7
- version = "0.1.1744936125"
7
+ version = "0.1.1744936234"
8
8
  description = "Open Swarm: Orchestrating AI Agent Swarms with Django"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -8,6 +8,8 @@ project_root = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..
8
8
  src_path = os.path.join(project_root, 'src')
9
9
  if src_path not in sys.path: sys.path.insert(0, src_path)
10
10
 
11
+ from typing import Optional
12
+ from pathlib import Path
11
13
  try:
12
14
  from agents import Agent, Tool, function_tool, Runner # Added Runner
13
15
  from agents.mcp import MCPServer
@@ -61,6 +63,9 @@ gutenberg_instructions = (
61
63
 
62
64
  # --- Define the Blueprint ---
63
65
  class DigitalButlersBlueprint(BlueprintBase):
66
+ def __init__(self, blueprint_id: str, config_path: Optional[Path] = None, **kwargs):
67
+ super().__init__(blueprint_id, config_path=config_path, **kwargs)
68
+
64
69
  """Blueprint for private web search and home automation using a team of digital butlers."""
65
70
  metadata: ClassVar[Dict[str, Any]] = {
66
71
  "name": "DigitalButlersBlueprint",
@@ -178,6 +183,29 @@ class DigitalButlersBlueprint(BlueprintBase):
178
183
  logger.debug("Digital Butlers team created: Jeeves (Coordinator), Mycroft (Search), Gutenberg (Home).")
179
184
  return jeeves_agent # Jeeves is the entry point
180
185
 
186
+ async def run(self, messages: List[Dict[str, Any]], **kwargs) -> Any:
187
+ """Main execution entry point for the DigitalButlers blueprint."""
188
+ logger.info("DigitalButlersBlueprint run method called.")
189
+ instruction = messages[-1].get("content", "") if messages else ""
190
+ async for chunk in self._run_non_interactive(instruction, **kwargs):
191
+ yield chunk
192
+ logger.info("DigitalButlersBlueprint run method finished.")
193
+
194
+ async def _run_non_interactive(self, instruction: str, **kwargs) -> Any:
195
+ logger.info(f"Running DigitalButlers non-interactively with instruction: '{instruction[:100]}...'")
196
+ mcp_servers = kwargs.get("mcp_servers", [])
197
+ agent = self.create_starting_agent(mcp_servers=mcp_servers)
198
+ # Use Runner.run as a classmethod for portability
199
+ from agents import Runner
200
+ import os
201
+ model_name = os.getenv("LITELLM_MODEL") or os.getenv("DEFAULT_LLM") or "gpt-3.5-turbo"
202
+ try:
203
+ for chunk in Runner.run(agent, instruction):
204
+ yield chunk
205
+ except Exception as e:
206
+ logger.error(f"Error during non-interactive run: {e}", exc_info=True)
207
+ yield {"messages": [{"role": "assistant", "content": f"An error occurred: {e}"}]}
208
+
181
209
  # Standard Python entry point
182
210
  if __name__ == "__main__":
183
211
  DigitalButlersBlueprint.main()
@@ -8,6 +8,8 @@ project_root = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..
8
8
  src_path = os.path.join(project_root, 'src')
9
9
  if src_path not in sys.path: sys.path.insert(0, src_path)
10
10
 
11
+ from typing import Optional
12
+ from pathlib import Path
11
13
  try:
12
14
  from agents import Agent, Tool, function_tool, Runner
13
15
  from agents.mcp import MCPServer
@@ -107,6 +109,9 @@ Available MCP Tools (if provided): sequential-thinking, filesystem.
107
109
 
108
110
  # --- Define the Blueprint ---
109
111
  class DivineOpsBlueprint(BlueprintBase):
112
+ def __init__(self, blueprint_id: str, config_path: Optional[Path] = None, **kwargs):
113
+ super().__init__(blueprint_id, config_path=config_path, **kwargs)
114
+
110
115
  """ Divine Ops: Streamlined Software Dev & Sysadmin Team Blueprint using openai-agents """
111
116
  metadata: ClassVar[Dict[str, Any]] = {
112
117
  "name": "DivineOpsBlueprint",
@@ -214,6 +219,27 @@ class DivineOpsBlueprint(BlueprintBase):
214
219
  logger.debug("Divine Ops Team (Zeus & Pantheon) created successfully. Zeus is starting agent.")
215
220
  return zeus_agent
216
221
 
222
+ async def run(self, messages: List[Dict[str, Any]], **kwargs) -> Any:
223
+ """Main execution entry point for the DivineOps blueprint."""
224
+ logger.info("DivineOpsBlueprint run method called.")
225
+ instruction = messages[-1].get("content", "") if messages else ""
226
+ async for chunk in self._run_non_interactive(instruction, **kwargs):
227
+ yield chunk
228
+ logger.info("DivineOpsBlueprint run method finished.")
229
+
230
+ async def _run_non_interactive(self, instruction: str, **kwargs) -> Any:
231
+ logger.info(f"Running DivineOps non-interactively with instruction: '{instruction[:100]}...'")
232
+ mcp_servers = kwargs.get("mcp_servers", [])
233
+ agent = self.create_starting_agent(mcp_servers=mcp_servers)
234
+ runner = Runner(agent=agent)
235
+ try:
236
+ final_result = await runner.run(instruction)
237
+ logger.info(f"Non-interactive run finished. Final Output: {final_result.final_output}")
238
+ yield { "messages": [ {"role": "assistant", "content": final_result.final_output} ] }
239
+ except Exception as e:
240
+ logger.error(f"Error during non-interactive run: {e}", exc_info=True)
241
+ yield { "messages": [ {"role": "assistant", "content": f"An error occurred: {e}"} ] }
242
+
217
243
  # Standard Python entry point
218
244
  if __name__ == "__main__":
219
245
  DivineOpsBlueprint.main()
@@ -10,11 +10,22 @@ import sys
10
10
  import os
11
11
  from typing import Dict, Any, List
12
12
 
13
+ # --- Logging Setup ---
14
+ def setup_logging():
15
+ import argparse
16
+ parser = argparse.ArgumentParser(add_help=False)
17
+ parser.add_argument('--debug', action='store_true', help='Enable debug logging')
18
+ args, _ = parser.parse_known_args()
19
+ loglevel = os.environ.get('LOGLEVEL', None)
20
+ if args.debug or os.environ.get('SWARM_DEBUG', '0') == '1' or (loglevel and loglevel.upper() == 'DEBUG'):
21
+ logging.basicConfig(level=logging.DEBUG)
22
+ else:
23
+ logging.basicConfig(level=logging.INFO)
24
+ return args
25
+
26
+ args = setup_logging()
27
+
13
28
  logger = logging.getLogger(__name__)
14
- logger.setLevel(logging.DEBUG)
15
- handler = logging.StreamHandler(sys.stderr)
16
- handler.setFormatter(logging.Formatter("[%(asctime)s] [%(levelname)s] %(name)s:%(lineno)d - %(message)s"))
17
- logger.addHandler(handler)
18
29
 
19
30
  # Reject CLI execution immediately
20
31
  if __name__ == "__main__":
@@ -1,6 +1,7 @@
1
-
2
1
  # --- Content for src/swarm/blueprints/echocraft/blueprint_echocraft.py ---
3
2
  import logging
3
+ from typing import Optional
4
+ from pathlib import Path
4
5
  from typing import List, Dict, Any, AsyncGenerator
5
6
  import uuid # Import uuid to generate IDs
6
7
  import time # Import time for timestamp
@@ -10,6 +11,9 @@ from swarm.extensions.blueprint.blueprint_base import BlueprintBase
10
11
  logger = logging.getLogger(__name__)
11
12
 
12
13
  class EchoCraftBlueprint(BlueprintBase):
14
+ def __init__(self, blueprint_id: str, config_path: Optional[Path] = None, **kwargs):
15
+ super().__init__(blueprint_id, config_path=config_path, **kwargs)
16
+
13
17
  """
14
18
  A simple blueprint that echoes the last user message.
15
19
  Used for testing and demonstrating basic blueprint structure.
@@ -27,6 +31,10 @@ class EchoCraftBlueprint(BlueprintBase):
27
31
  """
28
32
  logger.info(f"EchoCraftBlueprint run called with {len(messages)} messages.")
29
33
 
34
+ # Ensure LLM profile is initialized for test compatibility
35
+ if self._llm_profile_name is None:
36
+ self._llm_profile_name = self.config.get("llm_profile", "default")
37
+
30
38
  last_user_message_content = "No user message found."
31
39
  for msg in reversed(messages):
32
40
  if msg.get("role") == "user":
@@ -68,4 +76,3 @@ class EchoCraftBlueprint(BlueprintBase):
68
76
  # --- End formatting change ---
69
77
 
70
78
  logger.info("EchoCraftBlueprint run finished.")
71
-
@@ -8,6 +8,8 @@ project_root = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..
8
8
  src_path = os.path.join(project_root, 'src')
9
9
  if src_path not in sys.path: sys.path.insert(0, src_path)
10
10
 
11
+ from typing import Optional
12
+ from pathlib import Path
11
13
  try:
12
14
  from agents import Agent, Tool, function_tool, Runner
13
15
  from agents.mcp import MCPServer
@@ -53,6 +55,9 @@ brian_instructions = (
53
55
 
54
56
  # --- Define the Blueprint ---
55
57
  class FamilyTiesBlueprint(BlueprintBase):
58
+ def __init__(self, blueprint_id: str, config_path: Optional[Path] = None, **kwargs):
59
+ super().__init__(blueprint_id, config_path=config_path, **kwargs)
60
+
56
61
  """Manages WordPress content with a Peter/Brian agent team using the `server-wp-mcp` server."""
57
62
  metadata: ClassVar[Dict[str, Any]] = {
58
63
  "name": "FamilyTiesBlueprint", # Standardized name
@@ -148,5 +153,28 @@ class FamilyTiesBlueprint(BlueprintBase):
148
153
  logger.debug("Agents created: PeterGrifton (Coordinator), BrianGrifton (WordPress Manager).")
149
154
  return peter_agent # Peter is the entry point
150
155
 
156
+ async def run(self, messages: List[Dict[str, Any]], **kwargs) -> Any:
157
+ """Main execution entry point for the FamilyTies blueprint."""
158
+ logger.info("FamilyTiesBlueprint run method called.")
159
+ instruction = messages[-1].get("content", "") if messages else ""
160
+ async for chunk in self._run_non_interactive(instruction, **kwargs):
161
+ yield chunk
162
+ logger.info("FamilyTiesBlueprint run method finished.")
163
+
164
+ async def _run_non_interactive(self, instruction: str, **kwargs) -> Any:
165
+ logger.info(f"Running FamilyTies non-interactively with instruction: '{instruction[:100]}...'")
166
+ mcp_servers = kwargs.get("mcp_servers", [])
167
+ agent = self.create_starting_agent(mcp_servers=mcp_servers)
168
+ # Use Runner.run as a classmethod for portability
169
+ from agents import Runner
170
+ import os
171
+ model_name = os.getenv("LITELLM_MODEL") or os.getenv("DEFAULT_LLM") or "gpt-3.5-turbo"
172
+ try:
173
+ for chunk in Runner.run(agent, instruction):
174
+ yield chunk
175
+ except Exception as e:
176
+ logger.error(f"Error during non-interactive run: {e}", exc_info=True)
177
+ yield {"messages": [{"role": "assistant", "content": f"An error occurred: {e}"}]}
178
+
151
179
  if __name__ == "__main__":
152
180
  FamilyTiesBlueprint.main()
@@ -1,6 +1,26 @@
1
1
  import logging
2
- import os # Added os import
2
+ logging.basicConfig(level=logging.INFO, format='[%(levelname)s] %(name)s: %(message)s')
3
+ import os
3
4
  import sys
5
+
6
+ # --- Universal Logging Reset ---
7
+ def force_info_logging():
8
+ root = logging.getLogger()
9
+ for handler in root.handlers[:]:
10
+ root.removeHandler(handler)
11
+ loglevel = os.environ.get('LOGLEVEL', None)
12
+ debug_env = os.environ.get('SWARM_DEBUG', '0') == '1'
13
+ debug_arg = '--debug' in sys.argv
14
+ if debug_arg or debug_env or (loglevel and loglevel.upper() == 'DEBUG'):
15
+ level = logging.DEBUG
16
+ else:
17
+ level = logging.INFO
18
+ logging.basicConfig(level=level, format='[%(levelname)s] %(name)s: %(message)s')
19
+ root.setLevel(level)
20
+
21
+ force_info_logging()
22
+
23
+ import argparse
4
24
  from typing import List, Dict, Any, Optional, ClassVar
5
25
 
6
26
  # Ensure src is in path for BlueprintBase import (if needed, adjust path)
@@ -8,6 +28,8 @@ project_root = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..
8
28
  src_path = os.path.join(project_root, 'src')
9
29
  if src_path not in sys.path: sys.path.insert(0, src_path)
10
30
 
31
+ from typing import Optional
32
+ from pathlib import Path
11
33
  try:
12
34
  from agents import Agent, Tool, function_tool, Runner
13
35
  from agents.mcp import MCPServer
@@ -21,39 +43,66 @@ except ImportError as e:
21
43
  print(f"sys.path: {sys.path}")
22
44
  sys.exit(1)
23
45
 
46
+ import argparse
47
+
48
+ # --- Logging Setup ---
49
+ def setup_logging():
50
+ parser = argparse.ArgumentParser(add_help=False)
51
+ parser.add_argument('--debug', action='store_true', help='Enable debug logging')
52
+ args, _ = parser.parse_known_args()
53
+ loglevel = os.environ.get('LOGLEVEL', None)
54
+ if args.debug or os.environ.get('SWARM_DEBUG', '0') == '1' or (loglevel and loglevel.upper() == 'DEBUG'):
55
+ logging.basicConfig(level=logging.DEBUG)
56
+ else:
57
+ logging.basicConfig(level=logging.INFO)
58
+ return args
59
+
60
+ args = setup_logging()
61
+
24
62
  logger = logging.getLogger(__name__)
25
63
 
26
64
  # --- Tools ---
27
- @function_tool
28
- def create_story_outline(topic: str) -> str:
29
- """Generates a basic story outline based on a topic."""
30
- logger.info(f"Tool: Generating outline for: {topic}") # Keep INFO for tool exec start
31
- # In a real scenario, this might involve more logic or an LLM call.
32
- # Adding slight variation for clarity
65
+ def _create_story_outline(topic: str) -> str:
66
+ logger.info(f"Tool: Generating outline for: {topic}")
33
67
  outline = f"Story Outline for '{topic}':\n1. Beginning: Introduce characters and setting.\n2. Middle: Develop conflict and rising action.\n3. Climax: The peak of the conflict.\n4. End: Resolution and aftermath."
34
68
  logger.debug(f"Generated outline: {outline}")
35
69
  return outline
36
70
 
37
71
  @function_tool
38
- def write_story_part(part_name: str, outline: str, previous_parts: str) -> str:
39
- """Writes a specific part of the story using the outline and previous context."""
40
- logger.info(f"Tool: Writing story part: {part_name}") # Keep INFO for tool exec start
41
- # Simple placeholder implementation
72
+ def create_story_outline(topic: str) -> str:
73
+ """Generates a basic story outline based on a topic."""
74
+ return _create_story_outline(topic)
75
+
76
+ def _write_story_part(part_name: str, outline: str, previous_parts: str) -> str:
77
+ logger.info(f"Tool: Writing story part: {part_name}")
42
78
  content = f"## {part_name}\n\nThis is the draft content for the '{part_name}' section. It follows:\n'{previous_parts[:100]}...' \nIt should align with the outline:\n'{outline}'"
43
79
  logger.debug(f"Generated content for {part_name}: {content[:100]}...")
44
80
  return content
45
81
 
46
82
  @function_tool
47
- def edit_story(full_story: str, edit_instructions: str) -> str:
48
- """Edits the complete story based on instructions."""
49
- logger.info(f"Tool: Editing story with instructions: {edit_instructions}") # Keep INFO for tool exec start
50
- # Simple placeholder for editing
83
+ def write_story_part(part_name: str, outline: str, previous_parts: str) -> str:
84
+ """Writes a specific part of the story using the outline and previous context."""
85
+ return _write_story_part(part_name, outline, previous_parts)
86
+
87
+ def _edit_story(full_story: str, edit_instructions: str) -> str:
88
+ logger.info(f"Tool: Editing story with instructions: {edit_instructions}")
51
89
  edited_content = f"*** Edited Story Draft ***\n(Based on instructions: '{edit_instructions}')\n\n{full_story}\n\n[Editor's Notes: Minor tweaks applied for flow.]"
52
90
  logger.debug("Editing complete.")
53
91
  return edited_content
54
92
 
93
+ @function_tool
94
+ def edit_story(full_story: str, edit_instructions: str) -> str:
95
+ """Edits the complete story based on instructions."""
96
+ return _edit_story(full_story, edit_instructions)
97
+
55
98
  # --- Blueprint Definition ---
99
+ from rich.console import Console
100
+ from rich.panel import Panel
101
+
56
102
  class GaggleBlueprint(BlueprintBase):
103
+ def __init__(self, blueprint_id: str, config_path: Optional[Path] = None, **kwargs):
104
+ super().__init__(blueprint_id, config_path=config_path, **kwargs)
105
+
57
106
  """A multi-agent blueprint using a Coordinator, Planner, Writer, and Editor for collaborative story writing."""
58
107
  metadata: ClassVar[Dict[str, Any]] = {
59
108
  "name": "GaggleBlueprint",
@@ -70,6 +119,23 @@ class GaggleBlueprint(BlueprintBase):
70
119
  _openai_client_cache: Dict[str, AsyncOpenAI] = {}
71
120
  _model_instance_cache: Dict[str, Model] = {}
72
121
 
122
+ def display_splash_screen(self, animated: bool = False):
123
+ console = Console()
124
+ splash = r'''
125
+ [bold magenta]
126
+ ____ _ _ ____ _ _
127
+ / ___| __ _ _ __ __ _| | ___| |__ / ___|| |_ __ _ _ __| |_ ___
128
+ | | _ / _` | '_ \ / _` | |/ _ \ '_ \ \___ \| __/ _` | '__| __/ _ \
129
+ | |_| | (_| | | | | (_| | | __/ | | | ___) | || (_| | | | || __/
130
+ \____|\__,_|_| |_|\__, |_|\___|_| |_|____/ \__\__,_|_| \__\___|
131
+ |___/
132
+ [/bold magenta]
133
+ [white]Collaborative Story Writing Blueprint[/white]
134
+ '''
135
+ panel = Panel(splash, title="[bold magenta]Gaggle Blueprint[/]", border_style="magenta", expand=False)
136
+ console.print(panel)
137
+ console.print() # Blank line for spacing
138
+
73
139
  # --- Model Instantiation Helper --- (Standard helper)
74
140
  def _get_model_instance(self, profile_name: str) -> Model:
75
141
  """Retrieves or creates an LLM Model instance."""
@@ -180,5 +246,41 @@ class GaggleBlueprint(BlueprintBase):
180
246
  logger.debug("Gaggle Story Writing Team created. Coordinator is the starting agent.")
181
247
  return coordinator_agent
182
248
 
249
+ async def run(self, messages: List[Dict[str, str]]):
250
+ """
251
+ Run the Gaggle blueprint agentic workflow.
252
+ Accepts a list of messages (e.g., task prompt from CLI) and yields output chunks.
253
+ """
254
+ # For demonstration, this will run the collaborative story workflow
255
+ topic = None
256
+ for msg in messages:
257
+ if msg.get("role") == "user":
258
+ topic = msg.get("content")
259
+ break
260
+ if not topic:
261
+ yield {"messages": [{"role": "system", "content": "No topic provided."}]}
262
+ return
263
+ # Step 1: Planner creates outline
264
+ outline = _create_story_outline(topic)
265
+ yield {"messages": [{"role": "planner", "content": outline}]}
266
+ # Step 2: Writer writes story parts (simulate parts)
267
+ story_parts = []
268
+ for part in ["Beginning", "Middle", "Climax", "End"]:
269
+ part_text = _write_story_part(part, outline, "\n".join(story_parts))
270
+ story_parts.append(part_text)
271
+ yield {"messages": [{"role": "writer", "content": part_text}]}
272
+ # Step 3: Editor edits the full story
273
+ full_story = "\n\n".join(story_parts)
274
+ edited = _edit_story(full_story, "Polish for flow and clarity.")
275
+ yield {"messages": [{"role": "editor", "content": edited}]}
276
+
277
+ async def _run_non_interactive(self, instruction: str, **kwargs):
278
+ """Adapter for CLI non-interactive execution, yields results from the public run method. Accepts **kwargs for compatibility."""
279
+ messages = [{"role": "user", "content": instruction}]
280
+ async for chunk in self.run(messages, **kwargs):
281
+ yield chunk
282
+
283
+
284
+
183
285
  if __name__ == "__main__":
184
286
  GaggleBlueprint.main()
@@ -116,6 +116,16 @@ def vercel_cli(command: str) -> str:
116
116
 
117
117
 
118
118
  # --- Define the Blueprint ---
119
+ # === OpenAI GPT-4.1 Prompt Engineering Guide ===
120
+ # See: https://github.com/openai/openai-cookbook/blob/main/examples/gpt4-1_prompting_guide.ipynb
121
+ #
122
+ # Agentic System Prompt Example (recommended for cloud ops agents):
123
+ SYS_PROMPT_AGENTIC = """
124
+ You are an agent - please keep going until the user’s query is completely resolved, before ending your turn and yielding back to the user. Only terminate your turn when you are sure that the problem is solved.
125
+ If you are not sure about file content or codebase structure pertaining to the user’s request, use your tools to read files and gather the relevant information: do NOT guess or make up an answer.
126
+ You MUST plan extensively before each function call, and reflect extensively on the outcomes of the previous function calls. DO NOT do this entire process by making function calls only, as this can impair your ability to solve the problem and think insightfully.
127
+ """
128
+
119
129
  class MonkaiMagicBlueprint(BlueprintBase):
120
130
  """Blueprint for a cloud operations team inspired by *Monkai Magic*."""
121
131
  metadata: ClassVar[Dict[str, Any]] = {
@@ -59,6 +59,13 @@ cypher_instructions = "You are Cypher..."
59
59
  tank_instructions = "You are Tank..."
60
60
 
61
61
  # --- Blueprint Definition ---
62
+ from rich.console import Console
63
+ from rich.panel import Panel
64
+ from rich.live import Live
65
+ from rich.text import Text
66
+ import random
67
+ import time
68
+
62
69
  class NebuchaShellzzarBlueprint(BlueprintBase):
63
70
  """A multi-agent blueprint inspired by The Matrix for sysadmin and coding tasks."""
64
71
  metadata: ClassVar[Dict[str, Any]] = {
@@ -68,22 +75,46 @@ class NebuchaShellzzarBlueprint(BlueprintBase):
68
75
  "tags": ["matrix", "multi-agent", "shell", "coding", "mcp"],
69
76
  "required_mcp_servers": ["memory"],
70
77
  }
71
- _openai_client_cache: Dict[str, AsyncOpenAI] = {}
72
78
  _model_instance_cache: Dict[str, Model] = {}
73
79
 
74
80
  # --- ADDED: Splash Screen ---
75
- def display_splash_screen(self):
76
- """Displays a Matrix-themed splash screen."""
77
- splash_text = """
81
+ def display_splash_screen(self, animated: bool = False):
82
+ console = Console()
83
+ if not animated:
84
+ splash_text = """
78
85
  [bold green]Wake up, Neo...[/]
79
86
  [green]The Matrix has you...[/]
80
87
  [bold green]Follow the white rabbit.[/]
81
88
 
82
89
  Initializing NebulaShellzzar Crew...
83
- """
84
- panel = Panel(splash_text.strip(), title="[bold green]NebulaShellzzar[/]", border_style="green", expand=False)
85
- self.console.print(panel)
86
- self.console.print() # Add a blank line
90
+ """
91
+ panel = Panel(splash_text.strip(), title="[bold green]NebulaShellzzar[/]", border_style="green", expand=False)
92
+ console.print(panel)
93
+ console.print() # Add a blank line
94
+ else:
95
+ # Animated Matrix rain effect
96
+ width = 60
97
+ height = 12
98
+ charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789@#$%&"
99
+ rain_cols = [0] * width
100
+ with Live(refresh_per_second=20, console=console, transient=True) as live:
101
+ for _ in range(30):
102
+ matrix = ""
103
+ for y in range(height):
104
+ line = ""
105
+ for x in range(width):
106
+ if random.random() < 0.02:
107
+ rain_cols[x] = 0
108
+ char = random.choice(charset) if rain_cols[x] < y else " "
109
+ line += f"[green]{char}[/]"
110
+ matrix += line + "\n"
111
+ panel = Panel(Text.from_markup(matrix), title="[bold green]NebulaShellzzar[/]", border_style="green", expand=False)
112
+ live.update(panel)
113
+ time.sleep(0.07)
114
+ console.print("[bold green]Wake up, Neo...[/]")
115
+ console.print("[green]The Matrix has you...[/]")
116
+ console.print("[bold green]Follow the white rabbit.[/]")
117
+ console.print("\nInitializing NebulaShellzzar Crew...\n")
87
118
 
88
119
  def _get_model_instance(self, profile_name: str) -> Model:
89
120
  """Gets or creates a Model instance for the given profile name."""
@@ -100,26 +131,14 @@ Initializing NebulaShellzzar Crew...
100
131
  if not model_name:
101
132
  logger.critical(f"LLM profile '{profile_name}' is missing the 'model' key.")
102
133
  raise ValueError(f"Missing 'model' key in LLM profile '{profile_name}'.")
103
- client_cache_key = f"{provider}_{profile_data.get('base_url')}"
104
- if provider == "openai":
105
- if client_cache_key not in self._openai_client_cache:
106
- client_kwargs = { "api_key": profile_data.get("api_key"), "base_url": profile_data.get("base_url") }
107
- filtered_client_kwargs = {k: v for k, v in client_kwargs.items() if v is not None}
108
- log_client_kwargs = {k:v for k,v in filtered_client_kwargs.items() if k != 'api_key'}
109
- logger.debug(f"Creating new AsyncOpenAI client for profile '{profile_name}' with config: {log_client_kwargs}") # Changed to DEBUG
110
- try: self._openai_client_cache[client_cache_key] = AsyncOpenAI(**filtered_client_kwargs)
111
- except Exception as e:
112
- logger.error(f"Failed to create AsyncOpenAI client for profile '{profile_name}': {e}", exc_info=True)
113
- raise ValueError(f"Failed to initialize OpenAI client for profile '{profile_name}': {e}") from e
114
- openai_client_instance = self._openai_client_cache[client_cache_key]
115
- logger.debug(f"Instantiating OpenAIChatCompletionsModel(model='{model_name}') with specific client instance.")
116
- try: model_instance = OpenAIChatCompletionsModel(model=model_name, openai_client=openai_client_instance)
117
- except Exception as e:
118
- logger.error(f"Failed to instantiate OpenAIChatCompletionsModel for profile '{profile_name}': {e}", exc_info=True)
119
- raise ValueError(f"Failed to initialize LLM provider for profile '{profile_name}': {e}") from e
120
- else:
121
- logger.error(f"Unsupported LLM provider '{provider}' in profile '{profile_name}'.")
122
- raise ValueError(f"Unsupported LLM provider: {provider}")
134
+
135
+ # Remove redundant client instantiation; rely on framework-level default client
136
+ # All blueprints now use the default client set at framework init
137
+ logger.debug(f"Instantiating OpenAIChatCompletionsModel(model='{model_name}') with default client.")
138
+ try: model_instance = OpenAIChatCompletionsModel(model=model_name)
139
+ except Exception as e:
140
+ logger.error(f"Failed to instantiate OpenAIChatCompletionsModel for profile '{profile_name}': {e}", exc_info=True)
141
+ raise ValueError(f"Failed to initialize LLM provider for profile '{profile_name}': {e}") from e
123
142
  self._model_instance_cache[profile_name] = model_instance
124
143
  return model_instance
125
144
 
@@ -127,7 +146,6 @@ Initializing NebulaShellzzar Crew...
127
146
  """Creates the Matrix-themed agent team with Morpheus as the coordinator."""
128
147
  logger.debug(f"Creating NebulaShellzzar agent team with {len(mcp_servers)} MCP server(s)...") # Changed to DEBUG
129
148
  self._model_instance_cache = {}
130
- self._openai_client_cache = {}
131
149
  default_profile_name = self.config.get("llm_profile", "default")
132
150
  default_model_instance = self._get_model_instance(default_profile_name)
133
151
  logger.debug(f"Using LLM profile '{default_profile_name}' for all agents.") # Changed to DEBUG
@@ -216,6 +216,27 @@ class OmniplexBlueprint(BlueprintBase):
216
216
  logger.info(f"Omniplex Coordinator created with tools for: {[t.name for t in team_tools]}")
217
217
  return coordinator_agent
218
218
 
219
+ async def run(self, messages: List[Dict[str, Any]], **kwargs) -> Any:
220
+ """Main execution entry point for the Omniplex blueprint."""
221
+ logger.info("OmniplexBlueprint run method called.")
222
+ instruction = messages[-1].get("content", "") if messages else ""
223
+ async for chunk in self._run_non_interactive(instruction, **kwargs):
224
+ yield chunk
225
+ logger.info("OmniplexBlueprint run method finished.")
226
+
227
+ async def _run_non_interactive(self, instruction: str, **kwargs) -> Any:
228
+ logger.info(f"Running OmniplexBlueprint non-interactively with instruction: '{instruction[:100]}...'")
229
+ mcp_servers = kwargs.get("mcp_servers", [])
230
+ agent = self.create_starting_agent(mcp_servers=mcp_servers)
231
+ from agents import Runner
232
+ model_name = os.getenv("LITELLM_MODEL") or os.getenv("DEFAULT_LLM") or "gpt-3.5-turbo"
233
+ try:
234
+ for chunk in Runner.run(agent, instruction):
235
+ yield chunk
236
+ except Exception as e:
237
+ logger.error(f"Error during non-interactive run: {e}", exc_info=True)
238
+ yield {"messages": [{"role": "assistant", "content": f"An error occurred: {e}"}]}
239
+
219
240
  # Standard Python entry point
220
241
  if __name__ == "__main__":
221
242
  OmniplexBlueprint.main()