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.
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/PKG-INFO +5 -14
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/README.md +4 -13
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/cli.py +4 -173
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/fastworkflow.env +1 -1
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/run/__main__.py +27 -31
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/pyproject.toml +1 -1
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/LICENSE +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/.DS_Store +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/__init__.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/_commands/.gitkeep +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/_workflows/__init__.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/_workflows/command_metadata_extraction/__init__.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/_workflows/command_metadata_extraction/_commands/ErrorCorrection/abort.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/_workflows/command_metadata_extraction/_commands/ErrorCorrection/you_misunderstood.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/_workflows/command_metadata_extraction/_commands/IntentDetection/go_up.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/_workflows/command_metadata_extraction/_commands/IntentDetection/reset_context.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/_workflows/command_metadata_extraction/_commands/IntentDetection/what_can_i_do.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/_workflows/command_metadata_extraction/_commands/IntentDetection/what_is_current_context.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/_workflows/command_metadata_extraction/_commands/__init__.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/_workflows/command_metadata_extraction/_commands/wildcard.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/_workflows/command_metadata_extraction/command_context_model.json +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/build/__main__.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/build/ast_class_extractor.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/build/class_analysis_structures.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/build/cli_specification.md +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/build/command_dependency_resolver.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/build/command_file_generator.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/build/command_file_template.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/build/command_import_utils.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/build/command_stub_generator.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/build/context_folder_generator.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/build/context_model_generator.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/build/dependency_manager.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/build/dir_scanner.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/build/documentation_generator.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/build/genai_postprocessor.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/build/inheritance_block_regenerator.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/build/libcst_transformers.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/build/navigator_stub_generator.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/build/pydantic_model_generator.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/build/utterance_generator.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/cache_matching.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/chat_session.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/command_context_model.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/command_directory.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/command_executor.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/command_interfaces.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/command_metadata_api.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/command_routing.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/docs/context_modules_prd.txt +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/extended_workflow_example/README.md +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/extended_workflow_example/_commands/WorkItem/get_status.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/extended_workflow_example/_commands/generate_report.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/extended_workflow_example/_commands/startup.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/extended_workflow_example/simple_workflow_template.json +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/extended_workflow_example/workflow_inheritance_model.json +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/fastworkflow.passwords.env +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/hello_world/_commands/README.md +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/hello_world/_commands/add_two_numbers.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/hello_world/_commands/context_inheritance_model.json +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/hello_world/application/add_two_numbers.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/messaging_app_1/_commands/context_inheritance_model.json +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/messaging_app_1/_commands/send_message.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/messaging_app_1/application/send_message.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/messaging_app_2/_commands/User/send_message.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/messaging_app_2/_commands/context_inheritance_model.json +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/messaging_app_2/_commands/startup.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/messaging_app_2/application/user.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/messaging_app_3/_commands/PremiumUser/send_priority_message.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/messaging_app_3/_commands/User/send_message.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/messaging_app_3/_commands/context_inheritance_model.json +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/messaging_app_3/_commands/initialize_user.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/messaging_app_3/application/user.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/messaging_app_4/_commands/ChatRoom/_ChatRoom.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/messaging_app_4/_commands/ChatRoom/add_user.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/messaging_app_4/_commands/ChatRoom/broadcast_message.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/messaging_app_4/_commands/ChatRoom/get_current_user.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/messaging_app_4/_commands/ChatRoom/list_users.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/messaging_app_4/_commands/ChatRoom/set_current_user.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/messaging_app_4/_commands/PremiumUser/_PremiumUser.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/messaging_app_4/_commands/PremiumUser/send_priority_message.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/messaging_app_4/_commands/User/_User.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/messaging_app_4/_commands/User/send_message.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/messaging_app_4/_commands/context_inheritance_model.json +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/messaging_app_4/_commands/set_root_context.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/messaging_app_4/application/chatroom.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/messaging_app_4/application/user.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/messaging_app_4/context_hierarchy_model.json +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/messaging_app_4/startup_action.json +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/retail_workflow/_commands/calculate.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/retail_workflow/_commands/cancel_pending_order.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/retail_workflow/_commands/exchange_delivered_order_items.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/retail_workflow/_commands/find_user_id_by_email.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/retail_workflow/_commands/find_user_id_by_name_zip.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/retail_workflow/_commands/get_order_details.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/retail_workflow/_commands/get_product_details.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/retail_workflow/_commands/get_user_details.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/retail_workflow/_commands/list_all_product_types.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/retail_workflow/_commands/modify_pending_order_address.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/retail_workflow/_commands/modify_pending_order_items.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/retail_workflow/_commands/modify_pending_order_payment.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/retail_workflow/_commands/modify_user_address.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/retail_workflow/_commands/return_delivered_order_items.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/retail_workflow/_commands/transfer_to_human_agents.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/retail_workflow/context_inheritance_model.json +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/retail_workflow/retail_data/__init__.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/retail_workflow/retail_data/orders.json +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/retail_workflow/retail_data/products.json +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/retail_workflow/retail_data/users.json +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/retail_workflow/tools/calculate.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/retail_workflow/tools/cancel_pending_order.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/retail_workflow/tools/exchange_delivered_order_items.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/retail_workflow/tools/find_user_id_by_email.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/retail_workflow/tools/find_user_id_by_name_zip.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/retail_workflow/tools/get_order_details.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/retail_workflow/tools/get_product_details.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/retail_workflow/tools/get_user_details.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/retail_workflow/tools/list_all_product_types.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/retail_workflow/tools/modify_pending_order_address.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/retail_workflow/tools/modify_pending_order_items.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/retail_workflow/tools/modify_pending_order_payment.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/retail_workflow/tools/modify_user_address.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/retail_workflow/tools/return_delivered_order_items.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/retail_workflow/tools/think.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/retail_workflow/tools/tool.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/retail_workflow/tools/transfer_to_human_agents.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/retail_workflow/workflow_description.txt +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/simple_workflow_template/__init__.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/simple_workflow_template/_commands/WorkItem/_WorkItem.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/simple_workflow_template/_commands/WorkItem/add_child_workitem.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/simple_workflow_template/_commands/WorkItem/get_status.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/simple_workflow_template/_commands/WorkItem/go_to_workitem.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/simple_workflow_template/_commands/WorkItem/mark_as_complete.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/simple_workflow_template/_commands/WorkItem/move_to_first_child_workitem.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/simple_workflow_template/_commands/WorkItem/move_to_last_child_workitem.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/simple_workflow_template/_commands/WorkItem/move_to_next_workitem.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/simple_workflow_template/_commands/WorkItem/move_to_previous_workitem.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/simple_workflow_template/_commands/WorkItem/remove_all_child_workitems.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/simple_workflow_template/_commands/WorkItem/remove_child_workitem.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/simple_workflow_template/_commands/WorkItem/show_schema.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/simple_workflow_template/_commands/startup.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/simple_workflow_template/application/__init__.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/simple_workflow_template/application/workitem.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/simple_workflow_template/simple_workflow_template.json +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/simple_workflow_template/startup_action.json +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/mcp_server.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/model_pipeline_training.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/refine/__main__.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/run/__init__.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/run_agent/__init__.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/run_agent/__main__.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/run_agent/agent_module.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/train/__init__.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/train/__main__.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/train/generate_synthetic.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/user_message_queues.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/utils/__init__.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/utils/command_dependency_graph.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/utils/context_utils.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/utils/dspy_cache_utils.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/utils/dspy_logger.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/utils/dspy_utils.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/utils/env.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/utils/fuzzy_match.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/utils/generate_param_examples.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/utils/logging.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/utils/parameterize_func_decorator.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/utils/pydantic_model_2_dspy_signature_class.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/utils/python_utils.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/utils/react.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/utils/signatures.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/utils/startup_progress.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/workflow.py +0 -0
- {fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/workflow_agent.py +0 -0
- {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.
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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=
|
|
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(
|
|
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
|
|
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=
|
|
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
|
|
199
|
+
if user_command.startswith("//exit"):
|
|
198
200
|
break
|
|
199
|
-
if user_command.startswith("
|
|
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
|
-
#
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
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
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
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
|
-
|
|
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.
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/build/command_dependency_resolver.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/build/inheritance_block_regenerator.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/fastworkflow.passwords.env
RENAMED
|
File without changes
|
{fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/hello_world/_commands/README.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/retail_workflow/tools/calculate.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/retail_workflow/tools/think.py
RENAMED
|
File without changes
|
{fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/examples/retail_workflow/tools/tool.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastworkflow-2.15.7 → fastworkflow-2.15.8}/fastworkflow/utils/parameterize_func_decorator.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|