fastworkflow 2.15.3__tar.gz → 2.15.4__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.3 → fastworkflow-2.15.4}/PKG-INFO +1 -1
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/_workflows/command_metadata_extraction/_commands/wildcard.py +1 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/chat_session.py +57 -16
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/examples/retail_workflow/_commands/get_user_details.py +1 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/workflow_agent.py +13 -7
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/pyproject.toml +1 -1
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/LICENSE +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/README.md +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/.DS_Store +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/__init__.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/_commands/.gitkeep +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/_workflows/__init__.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/_workflows/command_metadata_extraction/__init__.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/_workflows/command_metadata_extraction/_commands/ErrorCorrection/abort.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/_workflows/command_metadata_extraction/_commands/ErrorCorrection/you_misunderstood.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/_workflows/command_metadata_extraction/_commands/IntentDetection/go_up.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/_workflows/command_metadata_extraction/_commands/IntentDetection/reset_context.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/_workflows/command_metadata_extraction/_commands/IntentDetection/what_can_i_do.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/_workflows/command_metadata_extraction/_commands/IntentDetection/what_is_current_context.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/_workflows/command_metadata_extraction/_commands/__init__.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/_workflows/command_metadata_extraction/command_context_model.json +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/build/__main__.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/build/ast_class_extractor.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/build/class_analysis_structures.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/build/cli_specification.md +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/build/command_dependency_resolver.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/build/command_file_generator.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/build/command_file_template.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/build/command_import_utils.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/build/command_stub_generator.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/build/context_folder_generator.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/build/context_model_generator.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/build/dependency_manager.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/build/dir_scanner.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/build/documentation_generator.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/build/genai_postprocessor.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/build/inheritance_block_regenerator.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/build/libcst_transformers.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/build/navigator_stub_generator.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/build/pydantic_model_generator.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/build/utterance_generator.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/cache_matching.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/cli.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/command_context_model.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/command_directory.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/command_executor.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/command_interfaces.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/command_metadata_api.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/command_routing.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/docs/context_modules_prd.txt +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/examples/extended_workflow_example/README.md +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/examples/extended_workflow_example/_commands/WorkItem/get_status.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/examples/extended_workflow_example/_commands/generate_report.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/examples/extended_workflow_example/_commands/startup.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/examples/extended_workflow_example/simple_workflow_template.json +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/examples/extended_workflow_example/workflow_inheritance_model.json +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/examples/fastworkflow.env +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/examples/fastworkflow.passwords.env +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/examples/hello_world/_commands/README.md +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/examples/hello_world/_commands/add_two_numbers.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/examples/hello_world/_commands/context_inheritance_model.json +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/examples/hello_world/application/add_two_numbers.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/examples/messaging_app_1/_commands/context_inheritance_model.json +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/examples/messaging_app_1/_commands/send_message.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/examples/messaging_app_1/application/send_message.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/examples/messaging_app_2/_commands/User/send_message.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/examples/messaging_app_2/_commands/context_inheritance_model.json +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/examples/messaging_app_2/_commands/startup.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/examples/messaging_app_2/application/user.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/examples/messaging_app_3/_commands/PremiumUser/send_priority_message.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/examples/messaging_app_3/_commands/User/send_message.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/examples/messaging_app_3/_commands/context_inheritance_model.json +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/examples/messaging_app_3/_commands/initialize_user.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/examples/messaging_app_3/application/user.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/examples/messaging_app_4/_commands/ChatRoom/_ChatRoom.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/examples/messaging_app_4/_commands/ChatRoom/add_user.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/examples/messaging_app_4/_commands/ChatRoom/broadcast_message.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/examples/messaging_app_4/_commands/ChatRoom/get_current_user.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/examples/messaging_app_4/_commands/ChatRoom/list_users.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/examples/messaging_app_4/_commands/ChatRoom/set_current_user.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/examples/messaging_app_4/_commands/PremiumUser/_PremiumUser.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/examples/messaging_app_4/_commands/PremiumUser/send_priority_message.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/examples/messaging_app_4/_commands/User/_User.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/examples/messaging_app_4/_commands/User/send_message.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/examples/messaging_app_4/_commands/context_inheritance_model.json +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/examples/messaging_app_4/_commands/set_root_context.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/examples/messaging_app_4/application/chatroom.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/examples/messaging_app_4/application/user.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/examples/messaging_app_4/context_hierarchy_model.json +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/examples/messaging_app_4/startup_action.json +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/examples/retail_workflow/_commands/calculate.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/examples/retail_workflow/_commands/cancel_pending_order.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/examples/retail_workflow/_commands/exchange_delivered_order_items.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/examples/retail_workflow/_commands/find_user_id_by_email.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/examples/retail_workflow/_commands/find_user_id_by_name_zip.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/examples/retail_workflow/_commands/get_order_details.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/examples/retail_workflow/_commands/get_product_details.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/examples/retail_workflow/_commands/list_all_product_types.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/examples/retail_workflow/_commands/modify_pending_order_address.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/examples/retail_workflow/_commands/modify_pending_order_items.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/examples/retail_workflow/_commands/modify_pending_order_payment.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/examples/retail_workflow/_commands/modify_user_address.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/examples/retail_workflow/_commands/return_delivered_order_items.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/examples/retail_workflow/_commands/transfer_to_human_agents.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/examples/retail_workflow/context_inheritance_model.json +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/examples/retail_workflow/retail_data/__init__.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/examples/retail_workflow/retail_data/orders.json +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/examples/retail_workflow/retail_data/products.json +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/examples/retail_workflow/retail_data/users.json +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/examples/retail_workflow/tools/calculate.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/examples/retail_workflow/tools/cancel_pending_order.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/examples/retail_workflow/tools/exchange_delivered_order_items.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/examples/retail_workflow/tools/find_user_id_by_email.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/examples/retail_workflow/tools/find_user_id_by_name_zip.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/examples/retail_workflow/tools/get_order_details.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/examples/retail_workflow/tools/get_product_details.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/examples/retail_workflow/tools/get_user_details.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/examples/retail_workflow/tools/list_all_product_types.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/examples/retail_workflow/tools/modify_pending_order_address.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/examples/retail_workflow/tools/modify_pending_order_items.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/examples/retail_workflow/tools/modify_pending_order_payment.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/examples/retail_workflow/tools/modify_user_address.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/examples/retail_workflow/tools/return_delivered_order_items.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/examples/retail_workflow/tools/think.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/examples/retail_workflow/tools/tool.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/examples/retail_workflow/tools/transfer_to_human_agents.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/examples/retail_workflow/workflow_description.txt +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/examples/simple_workflow_template/__init__.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/examples/simple_workflow_template/_commands/WorkItem/_WorkItem.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/examples/simple_workflow_template/_commands/WorkItem/add_child_workitem.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/examples/simple_workflow_template/_commands/WorkItem/get_status.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/examples/simple_workflow_template/_commands/WorkItem/go_to_workitem.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/examples/simple_workflow_template/_commands/WorkItem/mark_as_complete.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/examples/simple_workflow_template/_commands/WorkItem/move_to_first_child_workitem.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/examples/simple_workflow_template/_commands/WorkItem/move_to_last_child_workitem.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/examples/simple_workflow_template/_commands/WorkItem/move_to_next_workitem.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/examples/simple_workflow_template/_commands/WorkItem/move_to_previous_workitem.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/examples/simple_workflow_template/_commands/WorkItem/remove_all_child_workitems.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/examples/simple_workflow_template/_commands/WorkItem/remove_child_workitem.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/examples/simple_workflow_template/_commands/WorkItem/show_schema.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/examples/simple_workflow_template/_commands/startup.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/examples/simple_workflow_template/application/__init__.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/examples/simple_workflow_template/application/workitem.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/examples/simple_workflow_template/simple_workflow_template.json +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/examples/simple_workflow_template/startup_action.json +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/mcp_server.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/model_pipeline_training.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/refine/__main__.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/run/__init__.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/run/__main__.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/run_agent/__init__.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/run_agent/__main__.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/run_agent/agent_module.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/train/__init__.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/train/__main__.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/train/generate_synthetic.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/user_message_queues.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/utils/__init__.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/utils/command_dependency_graph.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/utils/context_utils.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/utils/dspy_cache_utils.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/utils/dspy_logger.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/utils/dspy_utils.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/utils/env.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/utils/fuzzy_match.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/utils/generate_param_examples.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/utils/logging.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/utils/parameterize_func_decorator.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/utils/pydantic_model_2_dspy_signature_class.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/utils/python_utils.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/utils/signatures.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/utils/startup_progress.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/workflow.py +0 -0
- {fastworkflow-2.15.3 → fastworkflow-2.15.4}/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.4
|
|
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
|
|
@@ -602,6 +602,7 @@ class ResponseGenerator:
|
|
|
602
602
|
if cnp_output.error_msg:
|
|
603
603
|
workflow_context = workflow.context
|
|
604
604
|
workflow_context["NLU_Pipeline_Stage"] = NLUPipelineStage.INTENT_AMBIGUITY_CLARIFICATION
|
|
605
|
+
workflow_context["command"] = command
|
|
605
606
|
workflow.context = workflow_context
|
|
606
607
|
return CommandOutput(
|
|
607
608
|
command_responses=[
|
|
@@ -424,14 +424,25 @@ class ChatSession:
|
|
|
424
424
|
if os.path.exists("action.json"):
|
|
425
425
|
os.remove("action.json")
|
|
426
426
|
|
|
427
|
-
refined_message = f'messsage\n{self._think_and_plan(message)}'
|
|
427
|
+
refined_message = f'messsage\n{self._think_and_plan(message, self.conversation_history)}'
|
|
428
428
|
|
|
429
429
|
lm = dspy_utils.get_lm("LLM_AGENT", "LITELLM_API_KEY_AGENT")
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
430
|
+
from dspy.utils.exceptions import AdapterParseError
|
|
431
|
+
# Retry logic for AdapterParseError
|
|
432
|
+
max_retries = 2
|
|
433
|
+
for attempt in range(max_retries):
|
|
434
|
+
try:
|
|
435
|
+
with dspy.context(lm=lm, adapter=dspy.ChatAdapter()):
|
|
436
|
+
agent_result = self._workflow_tool_agent(
|
|
437
|
+
user_query=refined_message,
|
|
438
|
+
conversation_history=self.conversation_history
|
|
439
|
+
)
|
|
440
|
+
break # Success, exit retry loop
|
|
441
|
+
except AdapterParseError as _:
|
|
442
|
+
if attempt == max_retries - 1: # Last attempt
|
|
443
|
+
raise # Re-raise the exception if all retries failed
|
|
444
|
+
# Continue to next attempt
|
|
445
|
+
|
|
435
446
|
# dspy.inspect_history(n=1)
|
|
436
447
|
|
|
437
448
|
# Extract the final result from the agent
|
|
@@ -441,18 +452,21 @@ class ChatSession:
|
|
|
441
452
|
else str(agent_result)
|
|
442
453
|
)
|
|
443
454
|
|
|
444
|
-
self.conversation_history.messages.append(
|
|
445
|
-
{"user_query": message,
|
|
446
|
-
"agent_response": result_text}
|
|
447
|
-
)
|
|
448
|
-
|
|
449
455
|
# Create CommandOutput with the agent's response
|
|
450
456
|
command_response = fastworkflow.CommandResponse(response=result_text)
|
|
457
|
+
|
|
458
|
+
user_instructions_summary = message
|
|
451
459
|
# Attach actions captured during agent execution as artifacts if available
|
|
452
460
|
if os.path.exists("action.json"):
|
|
453
461
|
with open("action.json", "r", encoding="utf-8") as f:
|
|
454
462
|
actions = [json.loads(line) for line in f if line.strip()]
|
|
455
|
-
|
|
463
|
+
user_instructions_summary = self._extract_user_instructions(message, actions)
|
|
464
|
+
command_response.artifacts["user_instructions_summary"] = user_instructions_summary
|
|
465
|
+
|
|
466
|
+
self.conversation_history.messages.append(
|
|
467
|
+
{"user_instructions": user_instructions_summary,
|
|
468
|
+
"agent_response": result_text}
|
|
469
|
+
)
|
|
456
470
|
|
|
457
471
|
command_output = fastworkflow.CommandOutput(
|
|
458
472
|
command_responses=[command_response]
|
|
@@ -588,16 +602,17 @@ class ChatSession:
|
|
|
588
602
|
|
|
589
603
|
return command_output
|
|
590
604
|
|
|
591
|
-
def _think_and_plan(self, user_query: str) -> str:
|
|
605
|
+
def _think_and_plan(self, user_query: str, conversation_history: dspy.History) -> str:
|
|
592
606
|
"""
|
|
593
|
-
Returns a refined plan by breaking down a user_query into simpler tasks
|
|
607
|
+
Returns a refined plan by breaking down a user_query into simpler tasks.
|
|
594
608
|
"""
|
|
595
609
|
class TaskPlannerSignature(dspy.Signature):
|
|
596
610
|
"""
|
|
597
|
-
Break down a user_query into simpler tasks based only on available commands and
|
|
611
|
+
Break down a user_query into simpler tasks based only on available commands and conversation_history.
|
|
598
612
|
If user_query is simple, return a single todo that is the user_query as-is
|
|
599
613
|
"""
|
|
600
614
|
user_query: str = dspy.InputField()
|
|
615
|
+
conversation_history: dspy.History = dspy.InputField()
|
|
601
616
|
available_commands: list[str] = dspy.InputField()
|
|
602
617
|
todo_list: list[str] = dspy.OutputField(desc="task descriptions as short sentences")
|
|
603
618
|
|
|
@@ -611,10 +626,36 @@ class ChatSession:
|
|
|
611
626
|
planner_lm = dspy_utils.get_lm("LLM_PLANNER", "LITELLM_API_KEY_PLANNER")
|
|
612
627
|
with dspy.context(lm=planner_lm):
|
|
613
628
|
task_planner_func = dspy.ChainOfThought(TaskPlannerSignature)
|
|
614
|
-
prediction = task_planner_func(
|
|
629
|
+
prediction = task_planner_func(
|
|
630
|
+
user_query=user_query,
|
|
631
|
+
conversation_history=conversation_history,
|
|
632
|
+
available_commands=available_commands)
|
|
615
633
|
|
|
616
634
|
if not prediction.todo_list or (len(prediction.todo_list) == 1 and prediction.todo_list[0] == user_query):
|
|
617
635
|
return user_query
|
|
618
636
|
|
|
619
637
|
steps_list = '\n'.join([f'{i + 1}. {task}' for i, task in enumerate(prediction.todo_list)])
|
|
620
638
|
return f"{user_query}\nNext steps:\n{steps_list}"
|
|
639
|
+
|
|
640
|
+
|
|
641
|
+
def _extract_user_instructions(self,
|
|
642
|
+
user_query: str, workflow_actions: list[dict[str, str]]) -> str:
|
|
643
|
+
"""
|
|
644
|
+
Summarizes user instructions based on original user query and subsequent user feedback in workflow actions.
|
|
645
|
+
"""
|
|
646
|
+
class UserInstructionCompilerSignature(dspy.Signature):
|
|
647
|
+
"""
|
|
648
|
+
Concise summary of user instructions based on their commands to the workflow.
|
|
649
|
+
Include parameter values passed in commands in the summary.
|
|
650
|
+
"""
|
|
651
|
+
commands_list: list[str] = dspy.InputField()
|
|
652
|
+
user_instructions_summary: str = dspy.OutputField(desc="A single paragraph summary")
|
|
653
|
+
|
|
654
|
+
commands_list: list[str] = [user_query]
|
|
655
|
+
commands_list.extend([wf_action['command'] for wf_action in workflow_actions if 'command' in wf_action])
|
|
656
|
+
|
|
657
|
+
planner_lm = dspy_utils.get_lm("LLM_PLANNER", "LITELLM_API_KEY_PLANNER")
|
|
658
|
+
with dspy.context(lm=planner_lm):
|
|
659
|
+
uic_func = dspy.ChainOfThought(UserInstructionCompilerSignature)
|
|
660
|
+
prediction = uic_func(commands_list=commands_list)
|
|
661
|
+
return prediction.user_instructions_summary
|
|
@@ -14,7 +14,7 @@ from fastworkflow.mcp_server import FastWorkflowMCPServer
|
|
|
14
14
|
|
|
15
15
|
class WorkflowAgentSignature(dspy.Signature):
|
|
16
16
|
"""
|
|
17
|
-
Carefully review the user request and execute the todo list using available tools for building the final answer.
|
|
17
|
+
Carefully review the user request and conversation_history, then execute the todo list using available tools for building the final answer.
|
|
18
18
|
All the tasks in the todo list must be completed before returning the final answer.
|
|
19
19
|
"""
|
|
20
20
|
user_query = dspy.InputField(desc="The natural language user query.")
|
|
@@ -185,12 +185,18 @@ def initialize_workflow_tool_agent(mcp_server: FastWorkflowMCPServer, max_iters:
|
|
|
185
185
|
Commands must be formatted using plain text for command name followed by XML tags enclosing parameter values (if any) as follows: command_name <param1_name>param1_value</param1_name> <param2_name>param2_value</param2_name> ...
|
|
186
186
|
Don't use this tool to respond to a clarification requests in PARAMETER EXTRACTION ERROR state
|
|
187
187
|
"""
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
188
|
+
# Retry logic for workflow execution
|
|
189
|
+
max_retries = 2
|
|
190
|
+
for attempt in range(max_retries):
|
|
191
|
+
try:
|
|
192
|
+
return _execute_workflow_query(command, chat_session_obj=chat_session_obj)
|
|
193
|
+
except Exception as e:
|
|
194
|
+
if attempt == max_retries - 1: # Last attempt
|
|
195
|
+
message = f"Terminate immediately! Exception processing {command}: {str(e)}"
|
|
196
|
+
logger.critical(message)
|
|
197
|
+
return message
|
|
198
|
+
# Continue to next attempt
|
|
199
|
+
logger.warning(f"Attempt {attempt + 1} failed for command '{command}': {str(e)}")
|
|
194
200
|
|
|
195
201
|
def missing_information_guidance(how_to_find_request: str) -> str:
|
|
196
202
|
"""
|
|
@@ -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.4"
|
|
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.3 → fastworkflow-2.15.4}/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.3 → fastworkflow-2.15.4}/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
|
|
File without changes
|
{fastworkflow-2.15.3 → fastworkflow-2.15.4}/fastworkflow/examples/fastworkflow.passwords.env
RENAMED
|
File without changes
|
{fastworkflow-2.15.3 → fastworkflow-2.15.4}/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
|
{fastworkflow-2.15.3 → fastworkflow-2.15.4}/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.3 → fastworkflow-2.15.4}/fastworkflow/examples/retail_workflow/tools/think.py
RENAMED
|
File without changes
|
{fastworkflow-2.15.3 → fastworkflow-2.15.4}/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
|
|
File without changes
|
{fastworkflow-2.15.3 → fastworkflow-2.15.4}/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
|