fastworkflow 2.22.3__tar.gz → 2.23.0__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 (193) hide show
  1. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/PKG-INFO +4 -4
  2. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/README.md +3 -3
  3. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/_workflows/command_metadata_extraction/parameter_extraction.py +113 -8
  4. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/chat_session.py +11 -2
  5. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/cli.py +4 -0
  6. fastworkflow-2.23.0/fastworkflow/distillation.py +927 -0
  7. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/run/__main__.py +13 -1
  8. fastworkflow-2.23.0/fastworkflow/utils/insights_loader.py +67 -0
  9. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/utils/react.py +50 -12
  10. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/utils/signatures.py +42 -13
  11. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/workflow_agent.py +90 -30
  12. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/workflow_execution_context.py +104 -36
  13. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/pyproject.toml +1 -1
  14. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/LICENSE +0 -0
  15. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/.DS_Store +0 -0
  16. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/__init__.py +0 -0
  17. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/_commands/.gitkeep +0 -0
  18. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/_workflows/__init__.py +0 -0
  19. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/_workflows/command_metadata_extraction/__init__.py +0 -0
  20. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/_workflows/command_metadata_extraction/_commands/ErrorCorrection/abort.py +0 -0
  21. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/_workflows/command_metadata_extraction/_commands/ErrorCorrection/you_misunderstood.py +0 -0
  22. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/_workflows/command_metadata_extraction/_commands/IntentDetection/go_up.py +0 -0
  23. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/_workflows/command_metadata_extraction/_commands/IntentDetection/reset_context.py +0 -0
  24. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/_workflows/command_metadata_extraction/_commands/IntentDetection/what_can_i_do.py +0 -0
  25. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/_workflows/command_metadata_extraction/_commands/IntentDetection/what_is_current_context.py +0 -0
  26. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/_workflows/command_metadata_extraction/_commands/__init__.py +0 -0
  27. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/_workflows/command_metadata_extraction/_commands/wildcard.py +0 -0
  28. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/_workflows/command_metadata_extraction/command_context_model.json +0 -0
  29. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/_workflows/command_metadata_extraction/intent_detection.py +0 -0
  30. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/active_workflow.py +0 -0
  31. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/build/__main__.py +0 -0
  32. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/build/ast_class_extractor.py +0 -0
  33. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/build/class_analysis_structures.py +0 -0
  34. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/build/cli_specification.md +0 -0
  35. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/build/command_dependency_resolver.py +0 -0
  36. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/build/command_file_generator.py +0 -0
  37. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/build/command_file_template.py +0 -0
  38. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/build/command_import_utils.py +0 -0
  39. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/build/command_stub_generator.py +0 -0
  40. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/build/context_folder_generator.py +0 -0
  41. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/build/context_model_generator.py +0 -0
  42. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/build/dependency_manager.py +0 -0
  43. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/build/dir_scanner.py +0 -0
  44. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/build/documentation_generator.py +0 -0
  45. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/build/genai_postprocessor.py +0 -0
  46. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/build/inheritance_block_regenerator.py +0 -0
  47. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/build/libcst_transformers.py +0 -0
  48. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/build/navigator_stub_generator.py +0 -0
  49. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/build/pydantic_model_generator.py +0 -0
  50. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/build/utterance_generator.py +0 -0
  51. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/cache_matching.py +0 -0
  52. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/command_context_model.py +0 -0
  53. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/command_directory.py +0 -0
  54. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/command_executor.py +0 -0
  55. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/command_interfaces.py +0 -0
  56. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/command_metadata_api.py +0 -0
  57. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/command_routing.py +0 -0
  58. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/conversation_history_io.py +0 -0
  59. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/docs/context_modules_prd.txt +0 -0
  60. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/docs/integrate-chat-agent/SKILL.md +0 -0
  61. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/docs/integrate-chat-agent/reference.md +0 -0
  62. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/examples/extended_workflow_example/README.md +0 -0
  63. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/examples/extended_workflow_example/_commands/WorkItem/get_status.py +0 -0
  64. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/examples/extended_workflow_example/_commands/generate_report.py +0 -0
  65. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/examples/extended_workflow_example/_commands/startup.py +0 -0
  66. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/examples/extended_workflow_example/simple_workflow_template.json +0 -0
  67. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/examples/extended_workflow_example/workflow_inheritance_model.json +0 -0
  68. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/examples/fastworkflow.env +0 -0
  69. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/examples/fastworkflow.passwords.env +0 -0
  70. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/examples/hello_world/_commands/README.md +0 -0
  71. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/examples/hello_world/_commands/add_two_numbers.py +0 -0
  72. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/examples/hello_world/_commands/context_inheritance_model.json +0 -0
  73. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/examples/hello_world/application/add_two_numbers.py +0 -0
  74. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/examples/messaging_app_1/_commands/context_inheritance_model.json +0 -0
  75. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/examples/messaging_app_1/_commands/send_message.py +0 -0
  76. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/examples/messaging_app_1/application/send_message.py +0 -0
  77. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/examples/messaging_app_2/_commands/User/send_message.py +0 -0
  78. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/examples/messaging_app_2/_commands/context_inheritance_model.json +0 -0
  79. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/examples/messaging_app_2/_commands/startup.py +0 -0
  80. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/examples/messaging_app_2/application/user.py +0 -0
  81. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/examples/messaging_app_3/_commands/PremiumUser/send_priority_message.py +0 -0
  82. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/examples/messaging_app_3/_commands/User/send_message.py +0 -0
  83. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/examples/messaging_app_3/_commands/context_inheritance_model.json +0 -0
  84. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/examples/messaging_app_3/_commands/initialize_user.py +0 -0
  85. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/examples/messaging_app_3/application/user.py +0 -0
  86. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/examples/messaging_app_4/_commands/ChatRoom/_ChatRoom.py +0 -0
  87. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/examples/messaging_app_4/_commands/ChatRoom/add_user.py +0 -0
  88. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/examples/messaging_app_4/_commands/ChatRoom/broadcast_message.py +0 -0
  89. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/examples/messaging_app_4/_commands/ChatRoom/get_current_user.py +0 -0
  90. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/examples/messaging_app_4/_commands/ChatRoom/list_users.py +0 -0
  91. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/examples/messaging_app_4/_commands/ChatRoom/set_current_user.py +0 -0
  92. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/examples/messaging_app_4/_commands/PremiumUser/_PremiumUser.py +0 -0
  93. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/examples/messaging_app_4/_commands/PremiumUser/send_priority_message.py +0 -0
  94. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/examples/messaging_app_4/_commands/User/_User.py +0 -0
  95. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/examples/messaging_app_4/_commands/User/send_message.py +0 -0
  96. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/examples/messaging_app_4/_commands/context_inheritance_model.json +0 -0
  97. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/examples/messaging_app_4/_commands/set_root_context.py +0 -0
  98. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/examples/messaging_app_4/application/chatroom.py +0 -0
  99. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/examples/messaging_app_4/application/user.py +0 -0
  100. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/examples/messaging_app_4/context_hierarchy_model.json +0 -0
  101. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/examples/messaging_app_4/startup_action.json +0 -0
  102. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/examples/retail_workflow/_commands/calculate.py +0 -0
  103. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/examples/retail_workflow/_commands/cancel_pending_order.py +0 -0
  104. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/examples/retail_workflow/_commands/exchange_delivered_order_items.py +0 -0
  105. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/examples/retail_workflow/_commands/find_user_id_by_email.py +0 -0
  106. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/examples/retail_workflow/_commands/find_user_id_by_name_zip.py +0 -0
  107. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/examples/retail_workflow/_commands/get_order_details.py +0 -0
  108. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/examples/retail_workflow/_commands/get_product_details.py +0 -0
  109. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/examples/retail_workflow/_commands/get_user_details.py +0 -0
  110. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/examples/retail_workflow/_commands/list_all_product_types.py +0 -0
  111. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/examples/retail_workflow/_commands/modify_pending_order_address.py +0 -0
  112. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/examples/retail_workflow/_commands/modify_pending_order_items.py +0 -0
  113. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/examples/retail_workflow/_commands/modify_pending_order_payment.py +0 -0
  114. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/examples/retail_workflow/_commands/modify_user_address.py +0 -0
  115. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/examples/retail_workflow/_commands/return_delivered_order_items.py +0 -0
  116. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/examples/retail_workflow/_commands/transfer_to_human_agents.py +0 -0
  117. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/examples/retail_workflow/context_inheritance_model.json +0 -0
  118. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/examples/retail_workflow/retail_data/__init__.py +0 -0
  119. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/examples/retail_workflow/retail_data/orders.json +0 -0
  120. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/examples/retail_workflow/retail_data/products.json +0 -0
  121. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/examples/retail_workflow/retail_data/users.json +0 -0
  122. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/examples/retail_workflow/tools/calculate.py +0 -0
  123. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/examples/retail_workflow/tools/cancel_pending_order.py +0 -0
  124. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/examples/retail_workflow/tools/exchange_delivered_order_items.py +0 -0
  125. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/examples/retail_workflow/tools/find_user_id_by_email.py +0 -0
  126. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/examples/retail_workflow/tools/find_user_id_by_name_zip.py +0 -0
  127. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/examples/retail_workflow/tools/get_order_details.py +0 -0
  128. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/examples/retail_workflow/tools/get_product_details.py +0 -0
  129. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/examples/retail_workflow/tools/get_user_details.py +0 -0
  130. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/examples/retail_workflow/tools/list_all_product_types.py +0 -0
  131. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/examples/retail_workflow/tools/modify_pending_order_address.py +0 -0
  132. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/examples/retail_workflow/tools/modify_pending_order_items.py +0 -0
  133. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/examples/retail_workflow/tools/modify_pending_order_payment.py +0 -0
  134. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/examples/retail_workflow/tools/modify_user_address.py +0 -0
  135. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/examples/retail_workflow/tools/return_delivered_order_items.py +0 -0
  136. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/examples/retail_workflow/tools/think.py +0 -0
  137. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/examples/retail_workflow/tools/tool.py +0 -0
  138. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/examples/retail_workflow/tools/transfer_to_human_agents.py +0 -0
  139. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/examples/retail_workflow/workflow_description.txt +0 -0
  140. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/examples/simple_workflow_template/__init__.py +0 -0
  141. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/examples/simple_workflow_template/_commands/WorkItem/_WorkItem.py +0 -0
  142. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/examples/simple_workflow_template/_commands/WorkItem/add_child_workitem.py +0 -0
  143. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/examples/simple_workflow_template/_commands/WorkItem/get_status.py +0 -0
  144. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/examples/simple_workflow_template/_commands/WorkItem/go_to_workitem.py +0 -0
  145. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/examples/simple_workflow_template/_commands/WorkItem/mark_as_complete.py +0 -0
  146. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/examples/simple_workflow_template/_commands/WorkItem/move_to_first_child_workitem.py +0 -0
  147. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/examples/simple_workflow_template/_commands/WorkItem/move_to_last_child_workitem.py +0 -0
  148. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/examples/simple_workflow_template/_commands/WorkItem/move_to_next_workitem.py +0 -0
  149. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/examples/simple_workflow_template/_commands/WorkItem/move_to_previous_workitem.py +0 -0
  150. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/examples/simple_workflow_template/_commands/WorkItem/remove_all_child_workitems.py +0 -0
  151. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/examples/simple_workflow_template/_commands/WorkItem/remove_child_workitem.py +0 -0
  152. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/examples/simple_workflow_template/_commands/WorkItem/show_schema.py +0 -0
  153. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/examples/simple_workflow_template/_commands/startup.py +0 -0
  154. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/examples/simple_workflow_template/application/__init__.py +0 -0
  155. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/examples/simple_workflow_template/application/workitem.py +0 -0
  156. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/examples/simple_workflow_template/simple_workflow_template.json +0 -0
  157. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/examples/simple_workflow_template/startup_action.json +0 -0
  158. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/intent_clarification_agent.py +0 -0
  159. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/mcp_server.py +0 -0
  160. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/model_pipeline_training.py +0 -0
  161. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/refine/__main__.py +0 -0
  162. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/run/__init__.py +0 -0
  163. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/run_fastapi_mcp/README.md +0 -0
  164. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/run_fastapi_mcp/__init__.py +0 -0
  165. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/run_fastapi_mcp/__main__.py +0 -0
  166. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/run_fastapi_mcp/conversation_store.py +0 -0
  167. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/run_fastapi_mcp/jwt_manager.py +0 -0
  168. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/run_fastapi_mcp/mcp_specific.py +0 -0
  169. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/run_fastapi_mcp/redoc_2_standalone_html.py +0 -0
  170. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/run_fastapi_mcp/turns.py +0 -0
  171. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/run_fastapi_mcp/utils.py +0 -0
  172. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/session_state_store.py +0 -0
  173. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/train/__init__.py +0 -0
  174. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/train/__main__.py +0 -0
  175. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/train/generate_synthetic.py +0 -0
  176. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/turn.py +0 -0
  177. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/user_message_queues.py +0 -0
  178. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/utils/__init__.py +0 -0
  179. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/utils/chat_adapter.py +0 -0
  180. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/utils/context_utils.py +0 -0
  181. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/utils/dspy_cache_utils.py +0 -0
  182. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/utils/dspy_logger.py +0 -0
  183. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/utils/dspy_utils.py +0 -0
  184. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/utils/env.py +0 -0
  185. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/utils/fuzzy_match.py +0 -0
  186. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/utils/generate_param_examples.py +0 -0
  187. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/utils/logging.py +0 -0
  188. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/utils/parameterize_func_decorator.py +0 -0
  189. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/utils/pydantic_model_2_dspy_signature_class.py +0 -0
  190. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/utils/python_utils.py +0 -0
  191. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/utils/startup_progress.py +0 -0
  192. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/workflow.py +0 -0
  193. {fastworkflow-2.22.3 → fastworkflow-2.23.0}/fastworkflow/workflow_inheritance_model.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: fastworkflow
3
- Version: 2.22.3
3
+ Version: 2.23.0
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
@@ -54,7 +54,7 @@ Description-Content-Type: text/markdown
54
54
  <!-- Logo and Title -->
55
55
  <img src="logo.png" height="64" alt="fastWorkflow Logo and Title">
56
56
 
57
- [![License](https://img.shields.io/badge/license-Apache%202.0-blue)](LICENSE) [![PyPI](https://img.shields.io/pypi/v/fastworkflow)](https://pypi.org/project/fastworkflow/) [![CI](https://img.shields.io/badge/ci-passing-brightgreen)](https://github.com/radiantlogicinc/fastworkflow/actions) [![Discord](https://img.shields.io/badge/Discord-Join-5865F2)](https://discord.gg/k2g58dDjYR)
57
+ [![License](https://img.shields.io/badge/license-Apache%202.0-blue)](LICENSE) [![PyPI](https://img.shields.io/pypi/v/fastworkflow)](https://pypi.org/project/fastworkflow/) [![CI](https://img.shields.io/badge/ci-passing-brightgreen)](https://github.com/radiantlogicinc/fastworkflow/actions) [![Discord](https://img.shields.io/badge/Discord-Join-5865F2)](https://discord.gg/k2g58dDjYR) [![Paper](https://img.shields.io/badge/Paper-alphaXiv-red)](https://www.alphaxiv.org/abs/2605.fastworkflow)
58
58
 
59
59
  **Build AI agents your application can actually trust in production — with small models cheaply, or frontier models more reliably.**
60
60
 
@@ -138,11 +138,11 @@ fastWorkflow was benchmarked on [Tau Bench](https://github.com/sierra-research/t
138
138
  <table>
139
139
  <tr>
140
140
  <td align="center" width="50%">
141
- <img src="fastWorkflow - Tau Bench Retail.jpg" alt="fastWorkflow Tau Bench Retail results" style="max-width: 100%; height: auto;"/>
141
+ <img src="tau_bench_retail_performance.png" alt="fastWorkflow Tau Bench Retail results" style="max-width: 100%; height: auto;"/>
142
142
  <br/><em>Retail: orders, returns, account operations</em>
143
143
  </td>
144
144
  <td align="center" width="50%">
145
- <img src="fastWorkflow - TauBench Airline.jpg" alt="fastWorkflow Tau Bench Airline results" style="max-width: 100%; height: auto;"/>
145
+ <img src="tau_bench_airline_performance.png" alt="fastWorkflow Tau Bench Airline results" style="max-width: 100%; height: auto;"/>
146
146
  <br/><em>Airline: rebooking, baggage, loyalty workflows</em>
147
147
  </td>
148
148
  </tr>
@@ -1,7 +1,7 @@
1
1
  <!-- Logo and Title -->
2
2
  <img src="logo.png" height="64" alt="fastWorkflow Logo and Title">
3
3
 
4
- [![License](https://img.shields.io/badge/license-Apache%202.0-blue)](LICENSE) [![PyPI](https://img.shields.io/pypi/v/fastworkflow)](https://pypi.org/project/fastworkflow/) [![CI](https://img.shields.io/badge/ci-passing-brightgreen)](https://github.com/radiantlogicinc/fastworkflow/actions) [![Discord](https://img.shields.io/badge/Discord-Join-5865F2)](https://discord.gg/k2g58dDjYR)
4
+ [![License](https://img.shields.io/badge/license-Apache%202.0-blue)](LICENSE) [![PyPI](https://img.shields.io/pypi/v/fastworkflow)](https://pypi.org/project/fastworkflow/) [![CI](https://img.shields.io/badge/ci-passing-brightgreen)](https://github.com/radiantlogicinc/fastworkflow/actions) [![Discord](https://img.shields.io/badge/Discord-Join-5865F2)](https://discord.gg/k2g58dDjYR) [![Paper](https://img.shields.io/badge/Paper-alphaXiv-red)](https://www.alphaxiv.org/abs/2605.fastworkflow)
5
5
 
6
6
  **Build AI agents your application can actually trust in production — with small models cheaply, or frontier models more reliably.**
7
7
 
@@ -85,11 +85,11 @@ fastWorkflow was benchmarked on [Tau Bench](https://github.com/sierra-research/t
85
85
  <table>
86
86
  <tr>
87
87
  <td align="center" width="50%">
88
- <img src="fastWorkflow - Tau Bench Retail.jpg" alt="fastWorkflow Tau Bench Retail results" style="max-width: 100%; height: auto;"/>
88
+ <img src="tau_bench_retail_performance.png" alt="fastWorkflow Tau Bench Retail results" style="max-width: 100%; height: auto;"/>
89
89
  <br/><em>Retail: orders, returns, account operations</em>
90
90
  </td>
91
91
  <td align="center" width="50%">
92
- <img src="fastWorkflow - TauBench Airline.jpg" alt="fastWorkflow Tau Bench Airline results" style="max-width: 100%; height: auto;"/>
92
+ <img src="tau_bench_airline_performance.png" alt="fastWorkflow Tau Bench Airline results" style="max-width: 100%; height: auto;"/>
93
93
  <br/><em>Airline: rebooking, baggage, loyalty workflows</em>
94
94
  </td>
95
95
  </tr>
@@ -1,7 +1,9 @@
1
1
  import contextlib
2
2
  import sys
3
3
  import re
4
- from typing import Dict, List, Optional
4
+ import json
5
+ import ast
6
+ from typing import Dict, List, Optional, Union, get_origin, get_args
5
7
 
6
8
  from pydantic import BaseModel
7
9
  from pydantic_core import PydanticUndefined
@@ -24,6 +26,24 @@ INVALID = fastworkflow.get_env_var("INVALID")
24
26
  PARAMETER_EXTRACTION_ERROR_MSG = None
25
27
 
26
28
 
29
+ def _unwrap_optional(field_type):
30
+ """
31
+ Unwrap ``Optional[X]`` / ``Union[X, None]`` to its underlying type.
32
+
33
+ Returns ``(inner_type, origin)`` where ``origin`` is ``get_origin`` of the
34
+ unwrapped type (e.g. ``list`` for ``Optional[List[str]]``). Non-optional
35
+ types are returned unchanged.
36
+ """
37
+ origin = get_origin(field_type)
38
+ if origin is Union:
39
+ if non_none_types := [
40
+ t for t in get_args(field_type) if t is not type(None)
41
+ ]:
42
+ field_type = non_none_types[0]
43
+ origin = get_origin(field_type)
44
+ return field_type, origin
45
+
46
+
27
47
  class ParameterExtraction:
28
48
  class Output(BaseModel):
29
49
  parameters_are_valid: bool
@@ -90,14 +110,22 @@ class ParameterExtraction:
90
110
  self.app_workflow, self.command_name, new_params
91
111
  )
92
112
 
93
- # Set all the missing and invalid fields to None before storing
113
+ # Set all the missing and invalid fields to appropriate sentinel values before storing
94
114
  current_values = {
95
115
  field_name: getattr(new_params, field_name, None)
96
116
  for field_name in list(type(new_params).model_fields.keys())
97
117
  }
98
118
  for field_name in missing_invalid_fields:
99
119
  if field_name in current_values:
100
- current_values[field_name] = NOT_FOUND
120
+ # Determine appropriate sentinel value based on field type
121
+ field_info = type(new_params).model_fields[field_name]
122
+ _, origin = _unwrap_optional(field_info.annotation)
123
+
124
+ # Use empty list for list fields, NOT_FOUND for others
125
+ if origin in (list, List):
126
+ current_values[field_name] = []
127
+ else:
128
+ current_values[field_name] = NOT_FOUND
101
129
  # Reconstruct the model instance without validation
102
130
  new_params = new_params.__class__.model_construct(**current_values)
103
131
 
@@ -233,13 +261,17 @@ class ParameterExtraction:
233
261
  value = getattr(params, field_name, None)
234
262
 
235
263
  if value in [
236
- NOT_FOUND,
264
+ NOT_FOUND,
237
265
  None,
238
266
  INVALID_INT_VALUE,
239
267
  INVALID_FLOAT_VALUE
240
268
  ]:
241
269
  continue
242
270
 
271
+ # Skip empty lists (sentinel for missing list fields)
272
+ if isinstance(value, list) and len(value) == 0:
273
+ continue
274
+
243
275
  display_name = " ".join(word.capitalize() for word in field_name.split('_'))
244
276
 
245
277
  # Format fields appropriately based on type
@@ -320,7 +352,22 @@ class ParameterExtraction:
320
352
  for field_name in field_names:
321
353
  # Look for <field_name>value</field_name> pattern
322
354
  pattern = rf'<{re.escape(field_name)}>(.+?)</{re.escape(field_name)}>'
323
- if match := re.search(pattern, command, re.DOTALL):
355
+ # For list-typed fields, an agent may repeat the tag once per item
356
+ # (e.g. <item_ids>a</item_ids> <item_ids>b</item_ids>). re.search
357
+ # would keep only the first, silently dropping the rest, so collect
358
+ # ALL occurrences with findall and hand the list parser every value.
359
+ _, forigin = _unwrap_optional(
360
+ command_parameters_class.model_fields[field_name].annotation
361
+ )
362
+ if forigin in (list, List):
363
+ matches = re.findall(pattern, command, re.DOTALL)
364
+ if len(matches) > 1:
365
+ # Multiple repeated tags -> JSON array so the list parser
366
+ # below collects every value (not just the first).
367
+ extracted_data[field_name] = json.dumps([m.strip() for m in matches])
368
+ elif len(matches) == 1:
369
+ extracted_data[field_name] = matches[0].strip()
370
+ elif match := re.search(pattern, command, re.DOTALL):
324
371
  parameter_value = match[1].strip()
325
372
  extracted_data[field_name] = parameter_value
326
373
 
@@ -348,8 +395,66 @@ class ParameterExtraction:
348
395
  else:
349
396
  params_data[field_name] = None
350
397
 
351
- # Update with extracted values
352
- params_data |= extracted_data
398
+ # Parse and type-correct extracted values
399
+ for field_name, raw_value in extracted_data.items():
400
+ field_info = command_parameters_class.model_fields[field_name]
401
+ field_type, origin = _unwrap_optional(field_info.annotation)
402
+
403
+ # Handle list types with robust parsing
404
+ if origin in (list, List):
405
+ inner_type = get_args(field_type)[0] if get_args(field_type) else str
406
+ parsed_list = None
407
+
408
+ # Try JSON array format
409
+ if raw_value.startswith('[') and raw_value.endswith(']'):
410
+ with contextlib.suppress(Exception):
411
+ parsed = json.loads(raw_value)
412
+ if isinstance(parsed, list):
413
+ parsed_list = parsed
414
+
415
+ # Try Python literal format
416
+ if parsed_list is None:
417
+ with contextlib.suppress(Exception):
418
+ parsed = ast.literal_eval(raw_value)
419
+ if isinstance(parsed, list):
420
+ parsed_list = parsed
421
+
422
+ # Try comma-separated format
423
+ if parsed_list is None and ',' in raw_value:
424
+ parsed_list = [item.strip().strip('"').strip("'") for item in raw_value.split(',')]
425
+
426
+ # Try space-separated format
427
+ if parsed_list is None and ' ' in raw_value and not any(c in raw_value for c in ['[', ']', '{', '}', '"', "'"]):
428
+ parsed_list = [item.strip() for item in raw_value.split() if item.strip()]
429
+
430
+ # Single value treated as single-item list
431
+ if parsed_list is None:
432
+ cleaned = raw_value.strip().strip('"').strip("'")
433
+ parsed_list = [cleaned] if cleaned else []
434
+
435
+ # Type-convert list items to match the inner type
436
+ if parsed_list:
437
+ typed_list = []
438
+ for item in parsed_list:
439
+ if inner_type is str:
440
+ typed_list.append(str(item))
441
+ elif inner_type is int:
442
+ with contextlib.suppress(ValueError, TypeError):
443
+ typed_list.append(int(item))
444
+ elif inner_type is float:
445
+ with contextlib.suppress(ValueError, TypeError):
446
+ typed_list.append(float(item))
447
+ elif isinstance(inner_type, type) and issubclass(inner_type, BaseModel) and isinstance(item, dict):
448
+ with contextlib.suppress(Exception):
449
+ typed_list.append(inner_type(**item))
450
+ else:
451
+ typed_list.append(item)
452
+ params_data[field_name] = typed_list
453
+ else:
454
+ params_data[field_name] = []
455
+ else:
456
+ # Non-list types: use raw value as-is
457
+ params_data[field_name] = raw_value
353
458
 
354
459
  # Construct model without validation
355
460
  return command_parameters_class.model_construct(**params_data)
@@ -380,7 +485,7 @@ class ParameterExtraction:
380
485
  None,
381
486
  INVALID_INT_VALUE,
382
487
  INVALID_FLOAT_VALUE,
383
- ]:
488
+ ] or (isinstance(value, list) and len(value) == 0):
384
489
  fields_to_fill.append(field_name)
385
490
 
386
491
  if not fields_to_fill:
@@ -101,14 +101,17 @@ class ChatSession:
101
101
  def __init__(
102
102
  self,
103
103
  run_as_agent: bool = False,
104
+ generate_insights: bool = False,
104
105
  ):
105
106
  """
106
107
  Initialize a chat session.
107
-
108
+
108
109
  Args:
109
110
  run_as_agent: If True, use agent mode (DSPy-based tool selection).
110
111
  If False (default), use traditional command execution.
111
-
112
+ generate_insights: If True, enable teacher/student insights distillation
113
+ on each agent turn (Topology A / CLI only).
114
+
112
115
  A chat session can run multiple workflows that share the same message queues.
113
116
  Use start_workflow() to start a specific workflow within this session.
114
117
  ChatSession is Topology A: ask_user blocks on the queue until the human answers.
@@ -116,6 +119,7 @@ class ChatSession:
116
119
  self._core = WorkflowExecutionContext(
117
120
  run_as_agent=run_as_agent,
118
121
  mirror_action_log_to_file=True,
122
+ generate_insights=generate_insights,
119
123
  )
120
124
 
121
125
  # Create queues for user messages and command outputs (CLI transport)
@@ -275,6 +279,11 @@ class ChatSession:
275
279
  """Check if running in agent mode."""
276
280
  return self._core.run_as_agent
277
281
 
282
+ @property
283
+ def _distillation_insights_count(self) -> int:
284
+ """Number of insights extracted so far in insights-distillation mode."""
285
+ return self._core._distillation_insights_count
286
+
278
287
  @property
279
288
  def user_message_queue(self) -> Queue:
280
289
  return self._user_message_queue
@@ -273,6 +273,10 @@ def add_run_parser(subparsers):
273
273
  "--assistant", action="store_true", default=False,
274
274
  help="Run in assistant (non-agentic) mode. Default is agentic mode.",
275
275
  )
276
+ parser_run.add_argument(
277
+ "--generate_insights", action="store_true", default=False,
278
+ help="Enable insights-distillation mode: compare teacher and student agents, extract planning and execution insights on divergence.",
279
+ )
276
280
  parser_run.set_defaults(func=lambda args: run_with_defaults(args))
277
281
 
278
282
  def add_run_fastapi_mcp_parser(subparsers):