fastworkflow 2.15.7__tar.gz → 2.15.8__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 (175) hide show
  1. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/PKG-INFO +5 -14
  2. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/README.md +4 -13
  3. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/cli.py +4 -173
  4. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/fastworkflow.env +1 -1
  5. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/run/__main__.py +27 -31
  6. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/pyproject.toml +1 -1
  7. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/LICENSE +0 -0
  8. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/.DS_Store +0 -0
  9. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/__init__.py +0 -0
  10. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/_commands/.gitkeep +0 -0
  11. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/_workflows/__init__.py +0 -0
  12. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/_workflows/command_metadata_extraction/__init__.py +0 -0
  13. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/_workflows/command_metadata_extraction/_commands/ErrorCorrection/abort.py +0 -0
  14. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/_workflows/command_metadata_extraction/_commands/ErrorCorrection/you_misunderstood.py +0 -0
  15. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/_workflows/command_metadata_extraction/_commands/IntentDetection/go_up.py +0 -0
  16. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/_workflows/command_metadata_extraction/_commands/IntentDetection/reset_context.py +0 -0
  17. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/_workflows/command_metadata_extraction/_commands/IntentDetection/what_can_i_do.py +0 -0
  18. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/_workflows/command_metadata_extraction/_commands/IntentDetection/what_is_current_context.py +0 -0
  19. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/_workflows/command_metadata_extraction/_commands/__init__.py +0 -0
  20. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/_workflows/command_metadata_extraction/_commands/wildcard.py +0 -0
  21. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/_workflows/command_metadata_extraction/command_context_model.json +0 -0
  22. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/build/__main__.py +0 -0
  23. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/build/ast_class_extractor.py +0 -0
  24. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/build/class_analysis_structures.py +0 -0
  25. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/build/cli_specification.md +0 -0
  26. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/build/command_dependency_resolver.py +0 -0
  27. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/build/command_file_generator.py +0 -0
  28. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/build/command_file_template.py +0 -0
  29. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/build/command_import_utils.py +0 -0
  30. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/build/command_stub_generator.py +0 -0
  31. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/build/context_folder_generator.py +0 -0
  32. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/build/context_model_generator.py +0 -0
  33. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/build/dependency_manager.py +0 -0
  34. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/build/dir_scanner.py +0 -0
  35. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/build/documentation_generator.py +0 -0
  36. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/build/genai_postprocessor.py +0 -0
  37. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/build/inheritance_block_regenerator.py +0 -0
  38. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/build/libcst_transformers.py +0 -0
  39. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/build/navigator_stub_generator.py +0 -0
  40. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/build/pydantic_model_generator.py +0 -0
  41. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/build/utterance_generator.py +0 -0
  42. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/cache_matching.py +0 -0
  43. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/chat_session.py +0 -0
  44. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/command_context_model.py +0 -0
  45. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/command_directory.py +0 -0
  46. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/command_executor.py +0 -0
  47. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/command_interfaces.py +0 -0
  48. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/command_metadata_api.py +0 -0
  49. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/command_routing.py +0 -0
  50. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/docs/context_modules_prd.txt +0 -0
  51. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/extended_workflow_example/README.md +0 -0
  52. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/extended_workflow_example/_commands/WorkItem/get_status.py +0 -0
  53. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/extended_workflow_example/_commands/generate_report.py +0 -0
  54. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/extended_workflow_example/_commands/startup.py +0 -0
  55. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/extended_workflow_example/simple_workflow_template.json +0 -0
  56. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/extended_workflow_example/workflow_inheritance_model.json +0 -0
  57. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/fastworkflow.passwords.env +0 -0
  58. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/hello_world/_commands/README.md +0 -0
  59. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/hello_world/_commands/add_two_numbers.py +0 -0
  60. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/hello_world/_commands/context_inheritance_model.json +0 -0
  61. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/hello_world/application/add_two_numbers.py +0 -0
  62. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/messaging_app_1/_commands/context_inheritance_model.json +0 -0
  63. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/messaging_app_1/_commands/send_message.py +0 -0
  64. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/messaging_app_1/application/send_message.py +0 -0
  65. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/messaging_app_2/_commands/User/send_message.py +0 -0
  66. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/messaging_app_2/_commands/context_inheritance_model.json +0 -0
  67. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/messaging_app_2/_commands/startup.py +0 -0
  68. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/messaging_app_2/application/user.py +0 -0
  69. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/messaging_app_3/_commands/PremiumUser/send_priority_message.py +0 -0
  70. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/messaging_app_3/_commands/User/send_message.py +0 -0
  71. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/messaging_app_3/_commands/context_inheritance_model.json +0 -0
  72. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/messaging_app_3/_commands/initialize_user.py +0 -0
  73. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/messaging_app_3/application/user.py +0 -0
  74. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/messaging_app_4/_commands/ChatRoom/_ChatRoom.py +0 -0
  75. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/messaging_app_4/_commands/ChatRoom/add_user.py +0 -0
  76. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/messaging_app_4/_commands/ChatRoom/broadcast_message.py +0 -0
  77. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/messaging_app_4/_commands/ChatRoom/get_current_user.py +0 -0
  78. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/messaging_app_4/_commands/ChatRoom/list_users.py +0 -0
  79. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/messaging_app_4/_commands/ChatRoom/set_current_user.py +0 -0
  80. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/messaging_app_4/_commands/PremiumUser/_PremiumUser.py +0 -0
  81. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/messaging_app_4/_commands/PremiumUser/send_priority_message.py +0 -0
  82. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/messaging_app_4/_commands/User/_User.py +0 -0
  83. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/messaging_app_4/_commands/User/send_message.py +0 -0
  84. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/messaging_app_4/_commands/context_inheritance_model.json +0 -0
  85. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/messaging_app_4/_commands/set_root_context.py +0 -0
  86. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/messaging_app_4/application/chatroom.py +0 -0
  87. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/messaging_app_4/application/user.py +0 -0
  88. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/messaging_app_4/context_hierarchy_model.json +0 -0
  89. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/messaging_app_4/startup_action.json +0 -0
  90. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/retail_workflow/_commands/calculate.py +0 -0
  91. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/retail_workflow/_commands/cancel_pending_order.py +0 -0
  92. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/retail_workflow/_commands/exchange_delivered_order_items.py +0 -0
  93. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/retail_workflow/_commands/find_user_id_by_email.py +0 -0
  94. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/retail_workflow/_commands/find_user_id_by_name_zip.py +0 -0
  95. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/retail_workflow/_commands/get_order_details.py +0 -0
  96. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/retail_workflow/_commands/get_product_details.py +0 -0
  97. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/retail_workflow/_commands/get_user_details.py +0 -0
  98. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/retail_workflow/_commands/list_all_product_types.py +0 -0
  99. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/retail_workflow/_commands/modify_pending_order_address.py +0 -0
  100. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/retail_workflow/_commands/modify_pending_order_items.py +0 -0
  101. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/retail_workflow/_commands/modify_pending_order_payment.py +0 -0
  102. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/retail_workflow/_commands/modify_user_address.py +0 -0
  103. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/retail_workflow/_commands/return_delivered_order_items.py +0 -0
  104. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/retail_workflow/_commands/transfer_to_human_agents.py +0 -0
  105. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/retail_workflow/context_inheritance_model.json +0 -0
  106. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/retail_workflow/retail_data/__init__.py +0 -0
  107. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/retail_workflow/retail_data/orders.json +0 -0
  108. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/retail_workflow/retail_data/products.json +0 -0
  109. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/retail_workflow/retail_data/users.json +0 -0
  110. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/retail_workflow/tools/calculate.py +0 -0
  111. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/retail_workflow/tools/cancel_pending_order.py +0 -0
  112. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/retail_workflow/tools/exchange_delivered_order_items.py +0 -0
  113. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/retail_workflow/tools/find_user_id_by_email.py +0 -0
  114. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/retail_workflow/tools/find_user_id_by_name_zip.py +0 -0
  115. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/retail_workflow/tools/get_order_details.py +0 -0
  116. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/retail_workflow/tools/get_product_details.py +0 -0
  117. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/retail_workflow/tools/get_user_details.py +0 -0
  118. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/retail_workflow/tools/list_all_product_types.py +0 -0
  119. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/retail_workflow/tools/modify_pending_order_address.py +0 -0
  120. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/retail_workflow/tools/modify_pending_order_items.py +0 -0
  121. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/retail_workflow/tools/modify_pending_order_payment.py +0 -0
  122. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/retail_workflow/tools/modify_user_address.py +0 -0
  123. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/retail_workflow/tools/return_delivered_order_items.py +0 -0
  124. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/retail_workflow/tools/think.py +0 -0
  125. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/retail_workflow/tools/tool.py +0 -0
  126. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/retail_workflow/tools/transfer_to_human_agents.py +0 -0
  127. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/retail_workflow/workflow_description.txt +0 -0
  128. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/simple_workflow_template/__init__.py +0 -0
  129. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/simple_workflow_template/_commands/WorkItem/_WorkItem.py +0 -0
  130. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/simple_workflow_template/_commands/WorkItem/add_child_workitem.py +0 -0
  131. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/simple_workflow_template/_commands/WorkItem/get_status.py +0 -0
  132. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/simple_workflow_template/_commands/WorkItem/go_to_workitem.py +0 -0
  133. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/simple_workflow_template/_commands/WorkItem/mark_as_complete.py +0 -0
  134. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/simple_workflow_template/_commands/WorkItem/move_to_first_child_workitem.py +0 -0
  135. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/simple_workflow_template/_commands/WorkItem/move_to_last_child_workitem.py +0 -0
  136. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/simple_workflow_template/_commands/WorkItem/move_to_next_workitem.py +0 -0
  137. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/simple_workflow_template/_commands/WorkItem/move_to_previous_workitem.py +0 -0
  138. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/simple_workflow_template/_commands/WorkItem/remove_all_child_workitems.py +0 -0
  139. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/simple_workflow_template/_commands/WorkItem/remove_child_workitem.py +0 -0
  140. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/simple_workflow_template/_commands/WorkItem/show_schema.py +0 -0
  141. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/simple_workflow_template/_commands/startup.py +0 -0
  142. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/simple_workflow_template/application/__init__.py +0 -0
  143. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/simple_workflow_template/application/workitem.py +0 -0
  144. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/simple_workflow_template/simple_workflow_template.json +0 -0
  145. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/simple_workflow_template/startup_action.json +0 -0
  146. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/mcp_server.py +0 -0
  147. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/model_pipeline_training.py +0 -0
  148. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/refine/__main__.py +0 -0
  149. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/run/__init__.py +0 -0
  150. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/run_agent/__init__.py +0 -0
  151. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/run_agent/__main__.py +0 -0
  152. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/run_agent/agent_module.py +0 -0
  153. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/train/__init__.py +0 -0
  154. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/train/__main__.py +0 -0
  155. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/train/generate_synthetic.py +0 -0
  156. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/user_message_queues.py +0 -0
  157. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/utils/__init__.py +0 -0
  158. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/utils/command_dependency_graph.py +0 -0
  159. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/utils/context_utils.py +0 -0
  160. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/utils/dspy_cache_utils.py +0 -0
  161. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/utils/dspy_logger.py +0 -0
  162. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/utils/dspy_utils.py +0 -0
  163. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/utils/env.py +0 -0
  164. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/utils/fuzzy_match.py +0 -0
  165. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/utils/generate_param_examples.py +0 -0
  166. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/utils/logging.py +0 -0
  167. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/utils/parameterize_func_decorator.py +0 -0
  168. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/utils/pydantic_model_2_dspy_signature_class.py +0 -0
  169. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/utils/python_utils.py +0 -0
  170. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/utils/react.py +0 -0
  171. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/utils/signatures.py +0 -0
  172. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/utils/startup_progress.py +0 -0
  173. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/workflow.py +0 -0
  174. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/workflow_agent.py +0 -0
  175. {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/workflow_inheritance_model.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: fastworkflow
3
- Version: 2.15.7
3
+ Version: 2.15.8
4
4
  Summary: A framework for rapidly building large-scale, deterministic, interactive workflows with a fault-tolerant, conversational UX
5
5
  License: Apache-2.0
6
6
  Keywords: fastworkflow,ai,workflow,llm,openai
@@ -209,7 +209,7 @@ You can get a free API key from [Mistral AI](https://mistral.ai) - the example i
209
209
  Train the intent-detection models for the workflow:
210
210
 
211
211
  ```sh
212
- fastworkflow examples train hello_world
212
+ fastworkflow train ./examples/hello_world ./examples/fastworkflow.env ./examples/fastworkflow.passwords.env
213
213
  ```
214
214
 
215
215
  This step builds the NLP models that help the workflow understand user commands.
@@ -219,7 +219,7 @@ This step builds the NLP models that help the workflow understand user commands.
219
219
  Once training is complete, run the interactive assistant:
220
220
 
221
221
  ```sh
222
- fastworkflow examples run hello_world
222
+ fastworkflow run ./examples/hello_world ./examples/fastworkflow.env ./examples/fastworkflow.passwords.env
223
223
  ```
224
224
 
225
225
  You will be greeted with a `User >` prompt. Try it out by asking "what can you do?" or "add 49 + 51"!
@@ -240,12 +240,6 @@ fastworkflow examples list
240
240
 
241
241
  # Fetch an example to your local directory
242
242
  fastworkflow examples fetch <example_name>
243
-
244
- # Train an example workflow
245
- fastworkflow examples train <example_name>
246
-
247
- # Run an example workflow
248
- fastworkflow examples run <example_name>
249
243
  ```
250
244
 
251
245
  ### Workflow Operations
@@ -261,11 +255,8 @@ fastworkflow train <workflow_dir> <env_file> <passwords_file>
261
255
  fastworkflow run <workflow_dir> <env_file> <passwords_file>
262
256
  ```
263
257
 
264
- To run a workflow in agentic mode, add the `--run_as_agent` flag:
265
-
266
- ```sh
267
- fastworkflow run <workflow_dir> <env_file> <passwords_file> --run_as_agent
268
- ```
258
+ > [!tip]
259
+ > **Deterministic execution:** Prefix a natural language command with `/` to execute it deterministically (non‑agentic) during an interactive run.
269
260
 
270
261
  Each command has additional options that can be viewed with the `--help` flag:
271
262
 
@@ -176,7 +176,7 @@ You can get a free API key from [Mistral AI](https://mistral.ai) - the example i
176
176
  Train the intent-detection models for the workflow:
177
177
 
178
178
  ```sh
179
- fastworkflow examples train hello_world
179
+ fastworkflow train ./examples/hello_world ./examples/fastworkflow.env ./examples/fastworkflow.passwords.env
180
180
  ```
181
181
 
182
182
  This step builds the NLP models that help the workflow understand user commands.
@@ -186,7 +186,7 @@ This step builds the NLP models that help the workflow understand user commands.
186
186
  Once training is complete, run the interactive assistant:
187
187
 
188
188
  ```sh
189
- fastworkflow examples run hello_world
189
+ fastworkflow run ./examples/hello_world ./examples/fastworkflow.env ./examples/fastworkflow.passwords.env
190
190
  ```
191
191
 
192
192
  You will be greeted with a `User >` prompt. Try it out by asking "what can you do?" or "add 49 + 51"!
@@ -207,12 +207,6 @@ fastworkflow examples list
207
207
 
208
208
  # Fetch an example to your local directory
209
209
  fastworkflow examples fetch <example_name>
210
-
211
- # Train an example workflow
212
- fastworkflow examples train <example_name>
213
-
214
- # Run an example workflow
215
- fastworkflow examples run <example_name>
216
210
  ```
217
211
 
218
212
  ### Workflow Operations
@@ -228,11 +222,8 @@ fastworkflow train <workflow_dir> <env_file> <passwords_file>
228
222
  fastworkflow run <workflow_dir> <env_file> <passwords_file>
229
223
  ```
230
224
 
231
- To run a workflow in agentic mode, add the `--run_as_agent` flag:
232
-
233
- ```sh
234
- fastworkflow run <workflow_dir> <env_file> <passwords_file> --run_as_agent
235
- ```
225
+ > [!tip]
226
+ > **Deterministic execution:** Prefix a natural language command with `/` to execute it deterministically (non‑agentic) during an interactive run.
236
227
 
237
228
  Each command has additional options that can be viewed with the `--help` flag:
238
229
 
@@ -12,7 +12,6 @@ import time
12
12
  from pathlib import Path
13
13
  import importlib.resources
14
14
  from rich import print as rprint
15
- from rich.console import Console
16
15
  from rich.live import Live
17
16
  from rich.spinner import Spinner
18
17
 
@@ -175,72 +174,6 @@ def fetch_example(args):
175
174
  traceback.print_exc(file=sys.stderr)
176
175
  sys.exit(1)
177
176
 
178
- def train_example(args):
179
- # sourcery skip: extract-duplicate-method, extract-method, remove-redundant-fstring, split-or-ifs
180
- """Train an existing example workflow."""
181
- # Create a spinner for the initial check
182
- spinner = Spinner("dots", text="[bold green]Preparing to train example...[/bold green]")
183
-
184
- with Live(spinner, refresh_per_second=10):
185
- # Check if example exists in the local examples directory
186
- local_examples_dir = Path("./examples")
187
- workflow_path = local_examples_dir / args.name
188
-
189
- if workflow_path.is_dir():
190
- # Get the appropriate env files for this example workflow
191
- env_file_path, passwords_file_path = find_default_env_files(local_examples_dir)
192
-
193
- # Check if the files exist
194
- env_file = Path(env_file_path)
195
- passwords_file = Path(passwords_file_path)
196
-
197
- # Create args object for train_main
198
- train_args = argparse.Namespace(
199
- workflow_folderpath=str(workflow_path),
200
- env_file_path=str(env_file),
201
- passwords_file_path=str(passwords_file)
202
- )
203
-
204
- # After the spinner, handle any errors or proceed with training
205
- if not workflow_path.is_dir():
206
- rprint(f"[bold red]Error:[/bold red] Example '{args.name}' not found in '{local_examples_dir}'.")
207
- rprint(f"Use 'fastworkflow examples fetch {args.name}' to fetch the example first.")
208
- rprint("Or use 'fastworkflow examples list' to see available examples.")
209
- sys.exit(1)
210
-
211
- if not env_file.exists() or not passwords_file.exists():
212
- rprint(f"[bold red]Error:[/bold red] Required environment files not found:")
213
- if not env_file.exists():
214
- rprint(f" - {env_file} (not found)")
215
- if not passwords_file.exists():
216
- rprint(f" - {passwords_file} (not found)")
217
- rprint("\nPlease run the following command to fetch the example and its environment files:")
218
- rprint(f" fastworkflow examples fetch {args.name}")
219
- rprint("\nAfter fetching, edit the passwords file to add your API keys:")
220
- rprint(f" {local_examples_dir}/fastworkflow.passwords.env")
221
- sys.exit(1)
222
-
223
- rprint(f"[bold green]Training example[/bold green] '{args.name}' in '{workflow_path}'...")
224
-
225
- try:
226
- # Lazy import train_main only when actually training
227
- from .train.__main__ import train_main as _train_main
228
- # Call train_main directly instead of using subprocess
229
- result = _train_main(train_args)
230
-
231
- if result is None or result == 0:
232
- rprint(f"\n✅ Successfully trained example '{args.name}'.")
233
- rprint(f"You can now run it with:\nfastworkflow examples run {args.name}")
234
- else:
235
- rprint(f"\n❌ Training failed.")
236
- sys.exit(1)
237
-
238
- except Exception as e:
239
- rprint(f"[bold red]An unexpected error occurred during training:[/bold red] {e}")
240
- import traceback
241
- traceback.print_exc(file=sys.stderr)
242
- sys.exit(1)
243
-
244
177
  def find_default_env_files(workflow_path):
245
178
  """Find the appropriate default env files based on context.
246
179
 
@@ -338,12 +271,6 @@ def add_run_parser(subparsers):
338
271
  parser_run.add_argument("--startup_action", help="Optional startup action", default="")
339
272
  parser_run.add_argument("--keep_alive", help="Optional keep_alive", default=True)
340
273
  parser_run.add_argument("--project_folderpath", help="Optional path to project folder containing application code", default=None)
341
- parser_run.add_argument(
342
- "--run_as_agent",
343
- help="Run in agent mode (uses DSPy for tool selection)",
344
- action="store_true",
345
- default=False,
346
- )
347
274
  parser_run.set_defaults(func=lambda args: run_with_defaults(args))
348
275
 
349
276
  def train_with_defaults(args): # sourcery skip: extract-duplicate-method
@@ -363,7 +290,7 @@ def train_with_defaults(args): # sourcery skip: extract-duplicate-method
363
290
  example_name = os.path.basename(args.workflow_folderpath)
364
291
  print("\nThis appears to be an example workflow. Please run:")
365
292
  print(f" fastworkflow examples fetch {example_name}")
366
- print(f" fastworkflow examples train {example_name}")
293
+ print(f" fastworkflow train ./examples/{example_name} ./examples/fastworkflow.env ./examples/fastworkflow.passwords.env")
367
294
  else:
368
295
  print("\nPlease ensure this file exists with required environment variables.")
369
296
  print("You can create a basic .env file in your current directory.")
@@ -376,7 +303,7 @@ def train_with_defaults(args): # sourcery skip: extract-duplicate-method
376
303
  example_name = os.path.basename(args.workflow_folderpath)
377
304
  print("\nThis appears to be an example workflow. Please run:")
378
305
  print(f" fastworkflow examples fetch {example_name}")
379
- print(f" fastworkflow examples train {example_name}")
306
+ print(f" fastworkflow train ./examples/{example_name} ./examples/fastworkflow.env ./examples/fastworkflow.passwords.env")
380
307
  else:
381
308
  print("\nPlease ensure this file exists with required API keys.")
382
309
  print("You can create a basic passwords.env file in your current directory.")
@@ -403,7 +330,7 @@ def run_with_defaults(args): # sourcery skip: extract-duplicate-method
403
330
  example_name = os.path.basename(args.workflow_path)
404
331
  print("\nThis appears to be an example workflow. Please run:")
405
332
  print(f" fastworkflow examples fetch {example_name}")
406
- print(f" fastworkflow examples train {example_name}")
333
+ print(f" fastworkflow train ./examples/{example_name} ./examples/fastworkflow.env ./examples/fastworkflow.passwords.env")
407
334
  else:
408
335
  print("\nPlease ensure this file exists with required environment variables.")
409
336
  print("You can create a basic .env file in your current directory.")
@@ -416,7 +343,7 @@ def run_with_defaults(args): # sourcery skip: extract-duplicate-method
416
343
  example_name = os.path.basename(args.workflow_path)
417
344
  print("\nThis appears to be an example workflow. Please run:")
418
345
  print(f" fastworkflow examples fetch {example_name}")
419
- print(f" fastworkflow examples train {example_name}")
346
+ print(f" fastworkflow train ./examples/{example_name} ./examples/fastworkflow.env ./examples/fastworkflow.passwords.env")
420
347
  else:
421
348
  print("\nPlease ensure this file exists with required API keys.")
422
349
  print("You can create a basic passwords.env file in your current directory.")
@@ -426,86 +353,6 @@ def run_with_defaults(args): # sourcery skip: extract-duplicate-method
426
353
  from .run.__main__ import run_main as _run_main
427
354
  return _run_main(args)
428
355
 
429
- def run_example(args):
430
- # sourcery skip: extract-duplicate-method, extract-method, remove-redundant-fstring, split-or-ifs
431
- """Run an existing example workflow."""
432
- # Create a spinner for the initial check
433
- spinner = Spinner("dots", text="[bold green]Preparing to run example...[/bold green]")
434
-
435
- with Live(spinner, refresh_per_second=10):
436
- # Check if example exists in the local examples directory
437
- local_examples_dir = Path("./examples")
438
- workflow_path = local_examples_dir / args.name
439
-
440
- if workflow_path.is_dir():
441
- # Get the appropriate env files for this example workflow
442
- env_file_path, passwords_file_path = find_default_env_files(local_examples_dir)
443
-
444
- # Check if the files exist
445
- env_file = Path(env_file_path)
446
- passwords_file = Path(passwords_file_path)
447
-
448
- # Check if the example has been trained
449
- command_info_dir = workflow_path / "___command_info"
450
-
451
- # After the spinner, handle any errors or proceed with running
452
- if not workflow_path.is_dir():
453
- rprint(f"[bold red]Error:[/bold red] Example '{args.name}' not found in '{local_examples_dir}'.")
454
- rprint(f"Use 'fastworkflow examples fetch {args.name}' to fetch the example first.")
455
- rprint("Or use 'fastworkflow examples list' to see available examples.")
456
- sys.exit(1)
457
-
458
- if not env_file.exists() or not passwords_file.exists():
459
- rprint(f"[bold red]Error:[/bold red] Required environment files not found:")
460
- if not env_file.exists():
461
- rprint(f" - {env_file} (not found)")
462
- if not passwords_file.exists():
463
- rprint(f" - {passwords_file} (not found)")
464
- rprint("\nPlease run the following command to fetch the example and its environment files:")
465
- rprint(f" fastworkflow examples fetch {args.name}")
466
- rprint("\nAfter fetching, edit the passwords file to add your API keys:")
467
- rprint(f" {local_examples_dir}/fastworkflow.passwords.env")
468
- rprint("\nThen train the example before running it:")
469
- rprint(f" fastworkflow examples train {args.name}")
470
- sys.exit(1)
471
-
472
- # Check if the example has been trained
473
- if not command_info_dir.exists() or not any(command_info_dir.iterdir()):
474
- rprint(f"[bold yellow]Warning:[/bold yellow] Example '{args.name}' does not appear to be trained yet.")
475
- rprint(f"Please train the example first with:")
476
- rprint(f" fastworkflow examples train {args.name}")
477
- response = input("Do you want to continue anyway? [y/N] ")
478
- if response.lower() != 'y':
479
- rprint("Operation cancelled.")
480
- sys.exit(0)
481
-
482
- rprint(f"[bold green]Running example[/bold green] '{args.name}'...")
483
-
484
- # For interactive applications, we need to use os.execvp to replace the current process
485
- # This ensures that stdin/stdout/stderr are properly connected for interactive use
486
- cmd = [
487
- sys.executable,
488
- "-m", "fastworkflow.run",
489
- str(workflow_path),
490
- str(env_file),
491
- str(passwords_file)
492
- ]
493
-
494
- # Forward agent mode flag if requested
495
- if getattr(args, "run_as_agent", False):
496
- cmd.append("--run_as_agent")
497
-
498
- try:
499
- rprint(f"[bold green]Starting interactive session...[/bold green]")
500
- # Replace the current process with the run command
501
- # This ensures that the interactive prompt works correctly
502
- os.execvp(sys.executable, cmd)
503
- except Exception as e:
504
- rprint(f"[bold red]An unexpected error occurred while running the example:[/bold red] {e}")
505
- import traceback
506
- traceback.print_exc(file=sys.stderr)
507
- sys.exit(1)
508
-
509
356
  def main():
510
357
  """Main function for the fastworkflow CLI."""
511
358
 
@@ -528,22 +375,6 @@ def main():
528
375
  parser_fetch.add_argument("--force", action="store_true", help="Force overwrite if example already exists")
529
376
  parser_fetch.set_defaults(func=fetch_example)
530
377
 
531
- # 'examples train' command
532
- parser_train_example = examples_subparsers.add_parser("train", help="Train a specific example")
533
- parser_train_example.add_argument("name", help="The name of the example to train")
534
- parser_train_example.set_defaults(func=train_example)
535
-
536
- # 'examples run' command
537
- parser_run_example = examples_subparsers.add_parser("run", help="Run a specific example")
538
- parser_run_example.add_argument("name", help="The name of the example to run")
539
- parser_run_example.add_argument(
540
- "--run_as_agent",
541
- help="Run the example in agent mode (uses DSPy for tool selection)",
542
- action="store_true",
543
- default=False,
544
- )
545
- parser_run_example.set_defaults(func=run_example)
546
-
547
378
  # Add top-level commands
548
379
  add_build_parser(subparsers)
549
380
  add_refine_parser(subparsers)
@@ -1,7 +1,7 @@
1
1
  LLM_SYNDATA_GEN=mistral/mistral-small-latest
2
2
  LLM_PARAM_EXTRACTION=mistral/mistral-small-latest
3
3
  LLM_RESPONSE_GEN=mistral/mistral-small-latest
4
- LLM_PLANNER=openrouter/openai/gpt-oss-20b:free
4
+ LLM_PLANNER=mistral/mistral-small-latest
5
5
  LLM_AGENT=mistral/mistral-small-latest
6
6
 
7
7
  SPEEDDICT_FOLDERNAME=___workflow_contexts
@@ -139,7 +139,9 @@ def run_main(args):
139
139
  raise ValueError("Cannot provide both startup_command and startup_action")
140
140
 
141
141
  console.print(Panel(f"Running fastWorkflow: [bold]{args.workflow_path}[/bold]", title="[bold green]fastworkflow[/bold green]", border_style="green"))
142
- console.print("[bold green]Tips:[/bold green] Type '/exit' to quit the application. Type '/new' to start a new conversation.")
142
+ console.print(
143
+ "[bold green]Tips:[/bold green] Type '//exit' to quit the application. Type '//new' to start a new conversation. "
144
+ "[bold green]Tips:[/bold green] Prefix natural language commands with a single '/' to execute them in deterministic (non-agentic) mode")
143
145
 
144
146
  # ------------------------------------------------------------------
145
147
  # Startup progress bar ------------------------------------------------
@@ -169,9 +171,9 @@ def run_main(args):
169
171
  with open(args.context_file_path, 'r') as file:
170
172
  context_dict = json.load(file)
171
173
 
172
- # Create the chat session with agent mode if specified
173
- run_as_agent = args.run_as_agent if hasattr(args, 'run_as_agent') else False
174
- fastworkflow.chat_session = fastworkflow.ChatSession(run_as_agent=run_as_agent)
174
+ # Create the chat session in agent mode always
175
+ # run_as_agent = args.run_as_agent if hasattr(args, 'run_as_agent') else False
176
+ fastworkflow.chat_session = fastworkflow.ChatSession(run_as_agent=True)
175
177
 
176
178
  # Start the workflow within the chat session
177
179
  fastworkflow.chat_session.start_workflow(
@@ -194,9 +196,9 @@ def run_main(args):
194
196
  while not fastworkflow.chat_session.workflow_is_complete or args.keep_alive:
195
197
  with patch_stdout():
196
198
  user_command = prompt_session.prompt()
197
- if user_command == "/exit":
199
+ if user_command.startswith("//exit"):
198
200
  break
199
- if user_command.startswith("/new"):
201
+ if user_command.startswith("//new"):
200
202
  fastworkflow.chat_session.clear_conversation_history()
201
203
  console.print("[bold]Agent >[/bold] New conversation started!\n", end="")
202
204
  user_command = prompt_session.prompt()
@@ -224,26 +226,25 @@ def run_main(args):
224
226
  with console.status("[bold cyan]Processing command...[/bold cyan]", spinner="dots") as status:
225
227
  counter = 0
226
228
  while wait_thread.is_alive():
227
- # Check for agent traces if in agent mode
228
- if args.run_as_agent:
229
- while True:
230
- try:
231
- evt = fastworkflow.chat_session.command_trace_queue.get_nowait()
232
- except queue.Empty:
233
- break
234
-
235
- # Choose styles based on success
236
- info_style = "dim orange3" if (evt.success is False) else "dim yellow"
237
- resp_style = "dim orange3" if (evt.success is False) else "dim green"
229
+ # Always show agent traces (run mode is always agentic)
230
+ while True:
231
+ try:
232
+ evt = fastworkflow.chat_session.command_trace_queue.get_nowait()
233
+ except queue.Empty:
234
+ break
235
+
236
+ # Choose styles based on success
237
+ info_style = "dim orange3" if (evt.success is False) else "dim yellow"
238
+ resp_style = "dim orange3" if (evt.success is False) else "dim green"
238
239
 
239
- if evt.direction == fastworkflow.CommandTraceEventDirection.AGENT_TO_WORKFLOW:
240
- console.print(f'[bold]Agent >[/bold] {evt.raw_command}', style=info_style)
241
- else:
242
- # command info (dim yellow or dim orange3)
243
- info = f"[bold]Workflow >[/bold] {evt.command_name or ''}, {evt.parameters}: "
244
- console.print(info, style=info_style, end="")
245
- # response (dim green or dim orange3)
246
- console.print(f'[bold]Workflow >[/bold] {evt.response_text}', style=resp_style)
240
+ if evt.direction == fastworkflow.CommandTraceEventDirection.AGENT_TO_WORKFLOW:
241
+ console.print(f'[bold]Agent >[/bold] {evt.raw_command}', style=info_style)
242
+ else:
243
+ # command info (dim yellow or dim orange3)
244
+ info = f"[bold]Workflow >[/bold] {evt.command_name or ''}, {evt.parameters}: "
245
+ console.print(info, style=info_style, end="")
246
+ # response (dim green or dim orange3)
247
+ console.print(f'[bold]Workflow >[/bold] {evt.response_text}', style=resp_style)
247
248
 
248
249
  time.sleep(0.5)
249
250
  counter += 1
@@ -276,11 +277,6 @@ if __name__ == "__main__":
276
277
  parser.add_argument(
277
278
  "--project_folderpath", help="Optional path to project folder containing application code", default=None
278
279
  )
279
- parser.add_argument(
280
- "--run_as_agent",
281
- help="Run in agent mode (uses DSPy for tool selection)",
282
- action="store_true",
283
- default=False
284
- )
280
+ # run mode is always agentic; deterministic NL execution can be forced by prefixing '/' to a command
285
281
  args = parser.parse_args()
286
282
  run_main(args)
@@ -9,7 +9,7 @@ repository = "https://github.com/radiantlogicinc/fastworkflow"
9
9
 
10
10
  [tool.poetry]
11
11
  name = "fastworkflow"
12
- version = "2.15.7"
12
+ version = "2.15.8"
13
13
  description = "A framework for rapidly building large-scale, deterministic, interactive workflows with a fault-tolerant, conversational UX"
14
14
  authors = ["Dhar Rawal <drawal@radiantlogic.com>"]
15
15
  license = "Apache-2.0"
File without changes