fastworkflow 2.8.19__tar.gz → 2.8.21__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 (152) hide show
  1. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/PKG-INFO +28 -16
  2. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/README.md +27 -15
  3. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/command_directory.py +1 -1
  4. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/command_routing.py +1 -1
  5. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/run/__main__.py +6 -0
  6. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/train/__main__.py +6 -2
  7. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/pyproject.toml +1 -1
  8. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/LICENSE +0 -0
  9. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/.DS_Store +0 -0
  10. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/__init__.py +0 -0
  11. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/_workflows/__init__.py +0 -0
  12. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/_workflows/command_metadata_extraction/__init__.py +0 -0
  13. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/_workflows/command_metadata_extraction/_commands/ErrorCorrection/abort.py +0 -0
  14. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/_workflows/command_metadata_extraction/_commands/ErrorCorrection/you_misunderstood.py +0 -0
  15. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/_workflows/command_metadata_extraction/_commands/IntentDetection/go_up.py +0 -0
  16. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/_workflows/command_metadata_extraction/_commands/IntentDetection/reset_context.py +0 -0
  17. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/_workflows/command_metadata_extraction/_commands/IntentDetection/what_can_i_do.py +0 -0
  18. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/_workflows/command_metadata_extraction/_commands/IntentDetection/what_is_current_context.py +0 -0
  19. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/_workflows/command_metadata_extraction/_commands/__init__.py +0 -0
  20. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/_workflows/command_metadata_extraction/_commands/wildcard.py +0 -0
  21. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/_workflows/command_metadata_extraction/command_context_model.json +0 -0
  22. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/build/__main__.py +0 -0
  23. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/build/ast_class_extractor.py +0 -0
  24. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/build/class_analysis_structures.py +0 -0
  25. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/build/cli_specification.md +0 -0
  26. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/build/command_dependency_resolver.py +0 -0
  27. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/build/command_file_generator.py +0 -0
  28. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/build/command_file_template.py +0 -0
  29. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/build/command_import_utils.py +0 -0
  30. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/build/command_stub_generator.py +0 -0
  31. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/build/context_folder_generator.py +0 -0
  32. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/build/context_model_generator.py +0 -0
  33. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/build/dependency_manager.py +0 -0
  34. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/build/dir_scanner.py +0 -0
  35. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/build/documentation_generator.py +0 -0
  36. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/build/inheritance_block_regenerator.py +0 -0
  37. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/build/navigator_stub_generator.py +0 -0
  38. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/build/pydantic_model_generator.py +0 -0
  39. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/build/utterance_generator.py +0 -0
  40. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/cache_matching.py +0 -0
  41. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/chat_session.py +0 -0
  42. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/cli.py +0 -0
  43. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/command_context_model.py +0 -0
  44. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/command_executor.py +0 -0
  45. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/command_interfaces.py +0 -0
  46. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/docs/context_modules_prd.txt +0 -0
  47. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/examples/fastworkflow.env +0 -0
  48. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/examples/fastworkflow.passwords.env +0 -0
  49. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/examples/hello_world/__init__.py +0 -0
  50. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/examples/hello_world/_commands/README.md +0 -0
  51. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/examples/hello_world/_commands/__init__.py +0 -0
  52. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/examples/hello_world/_commands/add_two_numbers.py +0 -0
  53. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/examples/hello_world/_commands/context_inheritance_model.json +0 -0
  54. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/examples/hello_world/application/__init__.py +0 -0
  55. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/examples/hello_world/application/add_two_numbers.py +0 -0
  56. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/examples/retail_workflow/__init__.py +0 -0
  57. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/examples/retail_workflow/_commands/__init__.py +0 -0
  58. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/examples/retail_workflow/_commands/cancel_pending_order.py +0 -0
  59. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/examples/retail_workflow/_commands/exchange_delivered_order_items.py +0 -0
  60. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/examples/retail_workflow/_commands/find_user_id_by_email.py +0 -0
  61. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/examples/retail_workflow/_commands/find_user_id_by_name_zip.py +0 -0
  62. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/examples/retail_workflow/_commands/get_order_details.py +0 -0
  63. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/examples/retail_workflow/_commands/get_product_details.py +0 -0
  64. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/examples/retail_workflow/_commands/get_user_details.py +0 -0
  65. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/examples/retail_workflow/_commands/list_all_product_types.py +0 -0
  66. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/examples/retail_workflow/_commands/modify_pending_order_address.py +0 -0
  67. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/examples/retail_workflow/_commands/modify_pending_order_items.py +0 -0
  68. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/examples/retail_workflow/_commands/modify_pending_order_payment.py +0 -0
  69. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/examples/retail_workflow/_commands/modify_user_address.py +0 -0
  70. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/examples/retail_workflow/_commands/return_delivered_order_items.py +0 -0
  71. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/examples/retail_workflow/_commands/transfer_to_human_agents.py +0 -0
  72. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/examples/retail_workflow/context_inheritance_model.json +0 -0
  73. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/examples/retail_workflow/retail_data/__init__.py +0 -0
  74. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/examples/retail_workflow/retail_data/orders.json +0 -0
  75. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/examples/retail_workflow/retail_data/products.json +0 -0
  76. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/examples/retail_workflow/retail_data/users.json +0 -0
  77. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/examples/retail_workflow/tools/__init__.py +0 -0
  78. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/examples/retail_workflow/tools/calculate.py +0 -0
  79. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/examples/retail_workflow/tools/cancel_pending_order.py +0 -0
  80. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/examples/retail_workflow/tools/exchange_delivered_order_items.py +0 -0
  81. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/examples/retail_workflow/tools/find_user_id_by_email.py +0 -0
  82. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/examples/retail_workflow/tools/find_user_id_by_name_zip.py +0 -0
  83. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/examples/retail_workflow/tools/get_order_details.py +0 -0
  84. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/examples/retail_workflow/tools/get_product_details.py +0 -0
  85. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/examples/retail_workflow/tools/get_user_details.py +0 -0
  86. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/examples/retail_workflow/tools/list_all_product_types.py +0 -0
  87. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/examples/retail_workflow/tools/modify_pending_order_address.py +0 -0
  88. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/examples/retail_workflow/tools/modify_pending_order_items.py +0 -0
  89. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/examples/retail_workflow/tools/modify_pending_order_payment.py +0 -0
  90. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/examples/retail_workflow/tools/modify_user_address.py +0 -0
  91. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/examples/retail_workflow/tools/return_delivered_order_items.py +0 -0
  92. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/examples/retail_workflow/tools/think.py +0 -0
  93. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/examples/retail_workflow/tools/tool.py +0 -0
  94. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/examples/retail_workflow/tools/transfer_to_human_agents.py +0 -0
  95. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/examples/todo_list/__init__.py +0 -0
  96. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/examples/todo_list/_commands/README.md +0 -0
  97. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/examples/todo_list/_commands/TodoItem/_TodoItem.py +0 -0
  98. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/examples/todo_list/_commands/TodoItem/assign_to.py +0 -0
  99. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/examples/todo_list/_commands/TodoItem/description.py +0 -0
  100. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/examples/todo_list/_commands/TodoItem/get_properties.py +0 -0
  101. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/examples/todo_list/_commands/TodoItem/set_properties.py +0 -0
  102. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/examples/todo_list/_commands/TodoItem/status.py +0 -0
  103. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/examples/todo_list/_commands/TodoList/_TodoList.py +0 -0
  104. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/examples/todo_list/_commands/TodoList/add_child_todoitem.py +0 -0
  105. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/examples/todo_list/_commands/TodoList/add_child_todolist.py +0 -0
  106. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/examples/todo_list/_commands/TodoList/get_all_children.py +0 -0
  107. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/examples/todo_list/_commands/TodoList/get_child_by_id.py +0 -0
  108. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/examples/todo_list/_commands/TodoList/get_properties.py +0 -0
  109. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/examples/todo_list/_commands/TodoList/mark_completed.py +0 -0
  110. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/examples/todo_list/_commands/TodoList/mark_pending.py +0 -0
  111. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/examples/todo_list/_commands/TodoList/remove_child_by_id.py +0 -0
  112. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/examples/todo_list/_commands/TodoList/set_properties.py +0 -0
  113. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/examples/todo_list/_commands/TodoList/update_status.py +0 -0
  114. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/examples/todo_list/_commands/TodoListManager/_TodoListManager.py +0 -0
  115. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/examples/todo_list/_commands/TodoListManager/create_todo_list.py +0 -0
  116. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/examples/todo_list/_commands/TodoListManager/delete_todo_list.py +0 -0
  117. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/examples/todo_list/_commands/TodoListManager/get_todo_list.py +0 -0
  118. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/examples/todo_list/_commands/TodoListManager/list_todo_lists.py +0 -0
  119. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/examples/todo_list/_commands/TodoListManager/save_lists.py +0 -0
  120. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/examples/todo_list/_commands/TodoListManager/update_todo_list.py +0 -0
  121. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/examples/todo_list/_commands/context_inheritance_model.json +0 -0
  122. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/examples/todo_list/_commands/startup.py +0 -0
  123. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/examples/todo_list/application/__init__.py +0 -0
  124. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/examples/todo_list/application/todo_item.py +0 -0
  125. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/examples/todo_list/application/todo_list.json +0 -0
  126. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/examples/todo_list/application/todo_list.py +0 -0
  127. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/examples/todo_list/application/todo_manager.py +0 -0
  128. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/examples/todo_list/context_hierarchy_model.json +0 -0
  129. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/examples/todo_list/startup_action.json +0 -0
  130. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/mcp_server.py +0 -0
  131. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/model_pipeline_training.py +0 -0
  132. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/run/__init__.py +0 -0
  133. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/run_agent/__init__.py +0 -0
  134. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/run_agent/__main__.py +0 -0
  135. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/run_agent/agent_module.py +0 -0
  136. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/train/__init__.py +0 -0
  137. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/train/generate_synthetic.py +0 -0
  138. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/user_message_queues.py +0 -0
  139. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/utils/__init__.py +0 -0
  140. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/utils/context_utils.py +0 -0
  141. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/utils/dspy_cache_utils.py +0 -0
  142. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/utils/dspy_logger.py +0 -0
  143. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/utils/dspy_utils.py +0 -0
  144. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/utils/env.py +0 -0
  145. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/utils/fuzzy_match.py +0 -0
  146. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/utils/generate_param_examples.py +0 -0
  147. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/utils/logging.py +0 -0
  148. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/utils/parameterize_func_decorator.py +0 -0
  149. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/utils/pydantic_model_2_dspy_signature_class.py +0 -0
  150. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/utils/python_utils.py +0 -0
  151. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/utils/signatures.py +0 -0
  152. {fastworkflow-2.8.19 → fastworkflow-2.8.21}/fastworkflow/workflow.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: fastworkflow
3
- Version: 2.8.19
3
+ Version: 2.8.21
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
@@ -31,19 +31,32 @@ Description-Content-Type: text/markdown
31
31
  [![License](https://img.shields.io/badge/license-Apache%202.0-blue)](LICENSE)
32
32
  [![CI](https://img.shields.io/badge/ci-passing-brightgreen)](<LINK_TO_CI>)
33
33
 
34
- A framework for rapidly building large-scale, deterministic, interactive workflows on top of existing Python applications, featuring a fault-tolerant, conversational UX and AI-powered recommendations.
34
+ Build agents and assistants for complex workflows and large-scale Python applications, with deterministic or AI-powered business logic.
35
35
 
36
36
  ---
37
37
 
38
- ### Who is this for?
38
+ ### Why fastWorkflow?
39
39
 
40
- | `fastWorkflow` is a great fit if... | `fastWorkflow` might be overkill if... |
41
- | :--- | :--- |
42
- |You have an existing Python domain model and want to add a conversational or agentic interface **without** rewriting business logic. | ❌ You just need a standard CRUD REST or GraphQL API. |
43
- |You are building back-office tools that benefit from multi-step, interactive command sequences (e.g., inventory management, data review). | Your system requires ultra-low latency (1k+ TPS) where any NLP overhead is unacceptable. |
44
- |You prefer a *convention-over-configuration* approach and want to auto-generate boilerplate for your CLI/agent interface. | ❌ Your project requires every API endpoint to be handcrafted with bespoke JSON payloads and manual routing. |
40
+ - **Unlimited Tool Scaling**: fastworkflow can scale to an unlimited number of tools
41
+ - **Cost-Effective Performance**: fastWorkFlow with small, free models can match the quality of large expensive models
42
+ -**Reliable Tool Execution**: fastworkflow validation pipeline virtually eliminates incorrect tool calling or parameter extraction, ensuring a reliable tool response
43
+ -**Adaptive Learning**: 1-shot learning from intent detection mistakes. It learns your conversational vocabulary as you interact with it
44
+ -**Interface Flexibility**: Support programmatic, assistant-driven and agent-driven interfaces with the same codebase
45
+ - ✅ **Deep Code Understanding**: fastworkflow understands classes, methods, inheritance and aggregation so you can quickly 'AI-enable' large-scale Python applications
45
46
 
46
- > **See it in Action**: A live terminal chat session of the `hello_world` example is available at [docs/assets/hello_world_demo.gif](docs/assets/hello_world_demo.gif).
47
+ ---
48
+
49
+ ### Key Concepts
50
+
51
+ **Adaptive Intent Understanding**: Misunderstandings are a given in any conversation, no matter how intelligent the participants. Natural language applications should have intent clarification and parameter validation built-in. We have the ability to 1-shot adapt our semantic understanding of words and sentences based on the context of the conversation and clarifications of intent. Applications should also be able to do the same.
52
+
53
+ **Contextual Hierarchies**: Communication is always within a context. And not just one concept but layers of contexts. Interpretation starts with the narrowest context and expands to larger contexts if the narrow context does not 'fit' the interpretation. In programming languages, we express contexts as classes, tools as methods and context hierarchies using inheritance and aggregation. Natural language applications should understand classes, methods, inheritance and aggregation out-of-the-box.
54
+
55
+ **Signatures**: Signatures (ALA Pydantic and DSPy) are the most efficient way of mapping natural language commands to tool implementations, whether programmatic or GenAI. We use signatures as a backbone for implementing commands, enabling seamless integration with DSPy for producing LLM-content within a deterministic programming framework.
56
+
57
+ **Code Generation**: AI-enabling large-scale, complex applications is non-trivial. Build tools that can quickly map natural language commands to application classes and methods are critical if we are to build more than prototypes and demos.
58
+
59
+ **Context Navigation at Runtime**: Classes maintain state, not just methods. Method behaviors can change based on state. These capabilities are the building blocks for creating complex finite-state-machines on which non-trivial workflows are built. We need to support dynamically enabling/disabling methods along with the ability to navigate object instance hierarchies at run-time, if we want to build complex workflows.
47
60
 
48
61
  ---
49
62
 
@@ -52,7 +65,7 @@ A framework for rapidly building large-scale, deterministic, interactive workflo
52
65
  `fastWorkflow` separates the build-time, train-time, and run-time concerns. The `build` tool creates a command interface from your code, the `train` tool builds NLP models to understand commands, and the `run` scripts execute the workflow.
53
66
 
54
67
  ```mermaid
55
- graph TD
68
+ graph LR
56
69
  subgraph A[Build-Time]
57
70
  A1(Your Python App Source) --> A2{fastworkflow.build};
58
71
  A2 --> A3(Generated _commands);
@@ -87,6 +100,8 @@ pip install fastworkflow
87
100
  uv pip install fastworkflow
88
101
  ```
89
102
 
103
+ **Note:** `fastWorkflow` installs PyTorch as a dependency. If you don't already have PyTorch installed, this could take 20-30 minutes depending on your internet connection and system.
104
+
90
105
  ---
91
106
 
92
107
  ## Quick Start: Running an Example in 5 Minutes
@@ -404,11 +419,8 @@ The example workflows are configured to use Mistral's models by default. You can
404
419
  > **`PARAMETER EXTRACTION ERROR`**
405
420
  > This means the LLM failed to extract the required parameters from your command. The error message will list the missing or invalid fields. Rephrase your command to be more specific.
406
421
 
407
- > **`speedict` Permission Denied**
408
- > This can happen if the cache files in `___command_info/` become corrupted. Delete the `___command_info` directory and retrain the workflow.
409
-
410
- > **Slow Training on CPU**
411
- > The first run may be slow due to model downloads from Hugging Face. Subsequent runs will be faster. Set `export HF_HOME=/path/to/cache` to control where models are stored. Training a small workflow takes ~5-8 minutes on a modern CPU.
422
+ > **Slow Training**
423
+ > Training involves generating synthetic utterances, which requires multiple LLM calls, making it inherently time-consuming. The first run may also be slow due to model downloads from Hugging Face. Subsequent runs will be faster. Set `export HF_HOME=/path/to/cache` to control where models are stored. Training a small workflow takes ~5-8 minutes on a modern CPU.
412
424
 
413
425
  > **Missing API Keys**
414
426
  > If you see errors about missing environment variables or API keys, make sure you've added your API keys to the `fastworkflow.passwords.env` file as described in the Quick Start guide.
@@ -420,7 +432,7 @@ The example workflows are configured to use Mistral's models by default. You can
420
432
  Interested in contributing to `fastWorkflow` itself? Great!
421
433
 
422
434
  1. **Clone the repository:** `git clone https://github.com/your-repo/fastworkflow.git`
423
- 2. **Set up the Conda environment:** `conda create --name fastworkflow python=3.11 -y && conda activate fastworkflow`
435
+ 2. **Set up the environment:** Create a virtual environment using your preferred tool (venv, uv, conda, poetry, etc.) with Python 3.11+
424
436
  3. **Install in editable mode with dev dependencies:** `pip install -e ".[dev]"`
425
437
 
426
438
  Please see `CONTRIBUTING.md` for our contribution guidelines and code of conduct.
@@ -3,19 +3,32 @@
3
3
  [![License](https://img.shields.io/badge/license-Apache%202.0-blue)](LICENSE)
4
4
  [![CI](https://img.shields.io/badge/ci-passing-brightgreen)](<LINK_TO_CI>)
5
5
 
6
- A framework for rapidly building large-scale, deterministic, interactive workflows on top of existing Python applications, featuring a fault-tolerant, conversational UX and AI-powered recommendations.
6
+ Build agents and assistants for complex workflows and large-scale Python applications, with deterministic or AI-powered business logic.
7
7
 
8
8
  ---
9
9
 
10
- ### Who is this for?
10
+ ### Why fastWorkflow?
11
11
 
12
- | `fastWorkflow` is a great fit if... | `fastWorkflow` might be overkill if... |
13
- | :--- | :--- |
14
- |You have an existing Python domain model and want to add a conversational or agentic interface **without** rewriting business logic. | ❌ You just need a standard CRUD REST or GraphQL API. |
15
- |You are building back-office tools that benefit from multi-step, interactive command sequences (e.g., inventory management, data review). | Your system requires ultra-low latency (1k+ TPS) where any NLP overhead is unacceptable. |
16
- |You prefer a *convention-over-configuration* approach and want to auto-generate boilerplate for your CLI/agent interface. | ❌ Your project requires every API endpoint to be handcrafted with bespoke JSON payloads and manual routing. |
12
+ - **Unlimited Tool Scaling**: fastworkflow can scale to an unlimited number of tools
13
+ - **Cost-Effective Performance**: fastWorkFlow with small, free models can match the quality of large expensive models
14
+ -**Reliable Tool Execution**: fastworkflow validation pipeline virtually eliminates incorrect tool calling or parameter extraction, ensuring a reliable tool response
15
+ -**Adaptive Learning**: 1-shot learning from intent detection mistakes. It learns your conversational vocabulary as you interact with it
16
+ -**Interface Flexibility**: Support programmatic, assistant-driven and agent-driven interfaces with the same codebase
17
+ - ✅ **Deep Code Understanding**: fastworkflow understands classes, methods, inheritance and aggregation so you can quickly 'AI-enable' large-scale Python applications
17
18
 
18
- > **See it in Action**: A live terminal chat session of the `hello_world` example is available at [docs/assets/hello_world_demo.gif](docs/assets/hello_world_demo.gif).
19
+ ---
20
+
21
+ ### Key Concepts
22
+
23
+ **Adaptive Intent Understanding**: Misunderstandings are a given in any conversation, no matter how intelligent the participants. Natural language applications should have intent clarification and parameter validation built-in. We have the ability to 1-shot adapt our semantic understanding of words and sentences based on the context of the conversation and clarifications of intent. Applications should also be able to do the same.
24
+
25
+ **Contextual Hierarchies**: Communication is always within a context. And not just one concept but layers of contexts. Interpretation starts with the narrowest context and expands to larger contexts if the narrow context does not 'fit' the interpretation. In programming languages, we express contexts as classes, tools as methods and context hierarchies using inheritance and aggregation. Natural language applications should understand classes, methods, inheritance and aggregation out-of-the-box.
26
+
27
+ **Signatures**: Signatures (ALA Pydantic and DSPy) are the most efficient way of mapping natural language commands to tool implementations, whether programmatic or GenAI. We use signatures as a backbone for implementing commands, enabling seamless integration with DSPy for producing LLM-content within a deterministic programming framework.
28
+
29
+ **Code Generation**: AI-enabling large-scale, complex applications is non-trivial. Build tools that can quickly map natural language commands to application classes and methods are critical if we are to build more than prototypes and demos.
30
+
31
+ **Context Navigation at Runtime**: Classes maintain state, not just methods. Method behaviors can change based on state. These capabilities are the building blocks for creating complex finite-state-machines on which non-trivial workflows are built. We need to support dynamically enabling/disabling methods along with the ability to navigate object instance hierarchies at run-time, if we want to build complex workflows.
19
32
 
20
33
  ---
21
34
 
@@ -24,7 +37,7 @@ A framework for rapidly building large-scale, deterministic, interactive workflo
24
37
  `fastWorkflow` separates the build-time, train-time, and run-time concerns. The `build` tool creates a command interface from your code, the `train` tool builds NLP models to understand commands, and the `run` scripts execute the workflow.
25
38
 
26
39
  ```mermaid
27
- graph TD
40
+ graph LR
28
41
  subgraph A[Build-Time]
29
42
  A1(Your Python App Source) --> A2{fastworkflow.build};
30
43
  A2 --> A3(Generated _commands);
@@ -59,6 +72,8 @@ pip install fastworkflow
59
72
  uv pip install fastworkflow
60
73
  ```
61
74
 
75
+ **Note:** `fastWorkflow` installs PyTorch as a dependency. If you don't already have PyTorch installed, this could take 20-30 minutes depending on your internet connection and system.
76
+
62
77
  ---
63
78
 
64
79
  ## Quick Start: Running an Example in 5 Minutes
@@ -376,11 +391,8 @@ The example workflows are configured to use Mistral's models by default. You can
376
391
  > **`PARAMETER EXTRACTION ERROR`**
377
392
  > This means the LLM failed to extract the required parameters from your command. The error message will list the missing or invalid fields. Rephrase your command to be more specific.
378
393
 
379
- > **`speedict` Permission Denied**
380
- > This can happen if the cache files in `___command_info/` become corrupted. Delete the `___command_info` directory and retrain the workflow.
381
-
382
- > **Slow Training on CPU**
383
- > The first run may be slow due to model downloads from Hugging Face. Subsequent runs will be faster. Set `export HF_HOME=/path/to/cache` to control where models are stored. Training a small workflow takes ~5-8 minutes on a modern CPU.
394
+ > **Slow Training**
395
+ > Training involves generating synthetic utterances, which requires multiple LLM calls, making it inherently time-consuming. The first run may also be slow due to model downloads from Hugging Face. Subsequent runs will be faster. Set `export HF_HOME=/path/to/cache` to control where models are stored. Training a small workflow takes ~5-8 minutes on a modern CPU.
384
396
 
385
397
  > **Missing API Keys**
386
398
  > If you see errors about missing environment variables or API keys, make sure you've added your API keys to the `fastworkflow.passwords.env` file as described in the Quick Start guide.
@@ -392,7 +404,7 @@ The example workflows are configured to use Mistral's models by default. You can
392
404
  Interested in contributing to `fastWorkflow` itself? Great!
393
405
 
394
406
  1. **Clone the repository:** `git clone https://github.com/your-repo/fastworkflow.git`
395
- 2. **Set up the Conda environment:** `conda create --name fastworkflow python=3.11 -y && conda activate fastworkflow`
407
+ 2. **Set up the environment:** Create a virtual environment using your preferred tool (venv, uv, conda, poetry, etc.) with Python 3.11+
396
408
  3. **Install in editable mode with dev dependencies:** `pip install -e ".[dev]"`
397
409
 
398
410
  Please see `CONTRIBUTING.md` for our contribution guidelines and code of conduct.
@@ -178,7 +178,7 @@ class CommandDirectory(BaseModel):
178
178
  commands_root_folder = Path(workflow_folderpath) / "_commands"
179
179
 
180
180
  if not commands_root_folder.is_dir():
181
- if 'fastworkflow' not in workflow_folderpath:
181
+ if not workflow_folderpath.endswith('fastworkflow'):
182
182
  raise RuntimeError(f"Internal error: workflow_folderpath '{workflow_folderpath}' does not contain '_commands'")
183
183
  return command_directory
184
184
 
@@ -280,7 +280,7 @@ class RoutingDefinition(BaseModel):
280
280
  if resolved_contexts != {"*": []}:
281
281
  routing_definition.save()
282
282
  else:
283
- logger.error(f"Could not build command_routing_defintion.json for workflow folderpath {workflow_folderpath}")
283
+ logger.error(f"Could not build command_routing_definition.json for workflow folderpath {workflow_folderpath}")
284
284
 
285
285
  return routing_definition
286
286
 
@@ -15,6 +15,7 @@ from rich.text import Text
15
15
  from rich.console import Group
16
16
 
17
17
  import fastworkflow
18
+ from fastworkflow.utils.logging import logger
18
19
  from fastworkflow.command_executor import CommandExecutor
19
20
 
20
21
 
@@ -79,6 +80,11 @@ def run_main(args):
79
80
  console.print(f"[bold red]Error:[/bold red] The specified workflow path '{args.workflow_path}' is not a valid directory.")
80
81
  exit(1)
81
82
 
83
+ commands_dir = os.path.join(args.workflow_path, "_commands")
84
+ if not os.path.isdir(commands_dir):
85
+ logger.info(f"No _commands directory found at {args.workflow_path}, existing...")
86
+ return
87
+
82
88
  env_vars = {
83
89
  **dotenv_values(args.env_file_path),
84
90
  **dotenv_values(args.passwords_file_path)
@@ -5,8 +5,10 @@ import shutil
5
5
  from dotenv import dotenv_values
6
6
 
7
7
  from colorama import Fore, Style
8
- from fastworkflow.utils import python_utils
8
+
9
9
  import fastworkflow
10
+ from fastworkflow.utils.logging import logger
11
+ from fastworkflow.utils import python_utils
10
12
  from fastworkflow import ModuleType
11
13
  from fastworkflow.model_pipeline_training import train, get_route_layer_filepath_model
12
14
  from fastworkflow.utils.generate_param_examples import generate_dspy_examples
@@ -37,7 +39,9 @@ def train_workflow(workflow_path: str):
37
39
  print(f"{Fore.YELLOW}Training child workflow: {child_workflow_path}{Style.RESET_ALL}")
38
40
  train_workflow(child_workflow_path)
39
41
 
40
- if "fastworkflow/fastworkflow" in workflow_path and "_workflows" not in workflow_path:
42
+ commands_dir = os.path.join(workflow_path, "_commands")
43
+ if not os.path.isdir(commands_dir):
44
+ logger.info(f"No _commands directory found at {workflow_path}, skipping training")
41
45
  return
42
46
 
43
47
  # create a workflow and train the main workflow
@@ -9,7 +9,7 @@ repository = "https://github.com/radiantlogicinc/fastworkflow"
9
9
 
10
10
  [tool.poetry]
11
11
  name = "fastworkflow"
12
- version = "2.8.19"
12
+ version = "2.8.21"
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