fastworkflow 2.15.5__py3-none-any.whl → 2.15.7__py3-none-any.whl
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/_workflows/command_metadata_extraction/_commands/ErrorCorrection/you_misunderstood.py +1 -1
- fastworkflow/_workflows/command_metadata_extraction/_commands/wildcard.py +85 -10
- fastworkflow/chat_session.py +158 -160
- fastworkflow/examples/retail_workflow/_commands/exchange_delivered_order_items.py +32 -3
- fastworkflow/examples/retail_workflow/_commands/modify_pending_order_items.py +32 -3
- fastworkflow/examples/retail_workflow/_commands/return_delivered_order_items.py +13 -2
- fastworkflow/examples/retail_workflow/_commands/transfer_to_human_agents.py +1 -1
- fastworkflow/run/__main__.py +13 -10
- fastworkflow/utils/react.py +242 -0
- fastworkflow/utils/signatures.py +23 -19
- fastworkflow/workflow_agent.py +135 -122
- {fastworkflow-2.15.5.dist-info → fastworkflow-2.15.7.dist-info}/METADATA +1 -1
- {fastworkflow-2.15.5.dist-info → fastworkflow-2.15.7.dist-info}/RECORD +16 -15
- {fastworkflow-2.15.5.dist-info → fastworkflow-2.15.7.dist-info}/LICENSE +0 -0
- {fastworkflow-2.15.5.dist-info → fastworkflow-2.15.7.dist-info}/WHEEL +0 -0
- {fastworkflow-2.15.5.dist-info → fastworkflow-2.15.7.dist-info}/entry_points.txt +0 -0
fastworkflow/workflow_agent.py
CHANGED
|
@@ -11,17 +11,16 @@ import fastworkflow
|
|
|
11
11
|
from fastworkflow.utils.logging import logger
|
|
12
12
|
from fastworkflow.utils import dspy_utils
|
|
13
13
|
from fastworkflow.command_metadata_api import CommandMetadataAPI
|
|
14
|
-
from fastworkflow.
|
|
14
|
+
from fastworkflow.utils.react import fastWorkflowReAct
|
|
15
15
|
|
|
16
16
|
|
|
17
17
|
class WorkflowAgentSignature(dspy.Signature):
|
|
18
18
|
"""
|
|
19
|
-
Carefully review the user request
|
|
20
|
-
|
|
19
|
+
Carefully review the user request, then execute the next steps using available tools for building the final answer.
|
|
20
|
+
Every user intent must be fully addressed before returning the final answer.
|
|
21
21
|
"""
|
|
22
22
|
user_query = dspy.InputField(desc="The natural language user query.")
|
|
23
|
-
|
|
24
|
-
final_answer = dspy.OutputField(desc="Comprehensive final answer with supporting evidence to demonstrate that all the tasks in the todo list have been completed.")
|
|
23
|
+
final_answer = dspy.OutputField(desc="Comprehensive final answer with supporting evidence to demonstrate that every user intent has been fully addressed.")
|
|
25
24
|
|
|
26
25
|
def _what_can_i_do(chat_session_obj: fastworkflow.ChatSession) -> str:
|
|
27
26
|
"""
|
|
@@ -34,36 +33,36 @@ def _what_can_i_do(chat_session_obj: fastworkflow.ChatSession) -> str:
|
|
|
34
33
|
active_context_name=current_workflow.current_command_context_name,
|
|
35
34
|
)
|
|
36
35
|
|
|
37
|
-
def _clarify_ambiguous_intent(
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
def _provide_missing_or_corrected_parameters(
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
36
|
+
# def _clarify_ambiguous_intent(
|
|
37
|
+
# correct_command_name: str,
|
|
38
|
+
# chat_session_obj: fastworkflow.ChatSession) -> str:
|
|
39
|
+
# """
|
|
40
|
+
# Call this tool ONLY in the intent detection error state (ambiguous or misunderstood intent) to provide the exact command name.
|
|
41
|
+
# The intent detection error message will list the command names to pick from.
|
|
42
|
+
# """
|
|
43
|
+
# return _execute_workflow_query(correct_command_name, chat_session_obj = chat_session_obj)
|
|
44
|
+
|
|
45
|
+
# def _provide_missing_or_corrected_parameters(
|
|
46
|
+
# missing_or_corrected_parameter_values: list[str|int|float|bool],
|
|
47
|
+
# chat_session_obj: fastworkflow.ChatSession) -> str:
|
|
48
|
+
# """
|
|
49
|
+
# Call this tool ONLY in the parameter extraction error state to provide missing or corrected parameter values.
|
|
50
|
+
# Missing parameter values may be found in the user query, or information already available, or by aborting and executing a different command (refer to the optional 'available_from' hint for guidance on appropriate commands to use to get the information).
|
|
51
|
+
# If the error message indicates parameter values are improperly formatted, correct using your internal knowledge and command metadata information.
|
|
52
|
+
# """
|
|
53
|
+
# if missing_or_corrected_parameter_values:
|
|
54
|
+
# command = ', '.join(missing_or_corrected_parameter_values)
|
|
55
|
+
# else:
|
|
56
|
+
# return "Provide missing or corrected parameter values or abort"
|
|
58
57
|
|
|
59
|
-
|
|
58
|
+
# return _execute_workflow_query(command, chat_session_obj = chat_session_obj)
|
|
60
59
|
|
|
61
|
-
def _abort_current_command_to_exit_parameter_extraction_error_state(
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
60
|
+
# def _abort_current_command_to_exit_parameter_extraction_error_state(
|
|
61
|
+
# chat_session_obj: fastworkflow.ChatSession) -> str:
|
|
62
|
+
# """
|
|
63
|
+
# Call this tool ONLY in the parameter extraction error state when you want to get out of the parameter extraction error state and execute a different command.
|
|
64
|
+
# """
|
|
65
|
+
# return
|
|
67
66
|
|
|
68
67
|
def _intent_misunderstood(
|
|
69
68
|
chat_session_obj: fastworkflow.ChatSession) -> str:
|
|
@@ -71,7 +70,7 @@ def _intent_misunderstood(
|
|
|
71
70
|
Shows the full list of available command names so you can specify the command name you really meant
|
|
72
71
|
Call this tool when your intent is misunderstood (i.e. the wrong command name is executed).
|
|
73
72
|
"""
|
|
74
|
-
return
|
|
73
|
+
return _what_can_i_do(chat_session_obj = chat_session_obj)
|
|
75
74
|
|
|
76
75
|
def _execute_workflow_query(command: str, chat_session_obj: fastworkflow.ChatSession) -> str:
|
|
77
76
|
"""
|
|
@@ -105,21 +104,23 @@ def _execute_workflow_query(command: str, chat_session_obj: fastworkflow.ChatSes
|
|
|
105
104
|
params_dict = params.model_dump() if params else None
|
|
106
105
|
|
|
107
106
|
# Extract response text
|
|
108
|
-
|
|
107
|
+
response_text = ""
|
|
109
108
|
if command_output.command_responses:
|
|
110
|
-
response_parts = [
|
|
109
|
+
response_parts = []
|
|
110
|
+
response_parts.extend(
|
|
111
111
|
cmd_response.response
|
|
112
112
|
for cmd_response in command_output.command_responses
|
|
113
113
|
if cmd_response.response
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
114
|
+
)
|
|
115
|
+
response_text = "\n".join(response_parts) \
|
|
116
|
+
if response_parts else "Command executed successfully but produced no output."
|
|
117
|
+
|
|
117
118
|
chat_session_obj.command_trace_queue.put(fastworkflow.CommandTraceEvent(
|
|
118
119
|
direction=fastworkflow.CommandTraceEventDirection.WORKFLOW_TO_AGENT,
|
|
119
120
|
raw_command=None,
|
|
120
121
|
command_name=name,
|
|
121
122
|
parameters=params_dict,
|
|
122
|
-
response_text=
|
|
123
|
+
response_text=response_text,
|
|
123
124
|
success=bool(command_output.success),
|
|
124
125
|
timestamp_ms=int(time.time() * 1000),
|
|
125
126
|
))
|
|
@@ -129,66 +130,73 @@ def _execute_workflow_query(command: str, chat_session_obj: fastworkflow.ChatSes
|
|
|
129
130
|
"command" if command_output.success else "failing command": command,
|
|
130
131
|
"command_name": name,
|
|
131
132
|
"parameters": params_dict,
|
|
132
|
-
"response":
|
|
133
|
+
"response": response_text if command_output.success else ""
|
|
133
134
|
}
|
|
134
135
|
with open("action.json", "a", encoding="utf-8") as f:
|
|
135
136
|
f.write(json.dumps(record, ensure_ascii=False) + "\n")
|
|
136
137
|
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
138
|
+
if 'PARAMETER EXTRACTION ERROR' in response_text or 'The command is ambiguous' in response_text:
|
|
139
|
+
abort_confirmation = _execute_workflow_query('abort', chat_session_obj = chat_session_obj)
|
|
140
|
+
return f'{response_text}\n{abort_confirmation}'
|
|
141
|
+
|
|
142
|
+
return response_text
|
|
143
|
+
|
|
144
|
+
# def _missing_information_guidance_tool(
|
|
145
|
+
# how_to_find_request: str,
|
|
146
|
+
# chat_session_obj: fastworkflow.ChatSession) -> str:
|
|
147
|
+
# """
|
|
148
|
+
# Request guidance on finding missing information.
|
|
149
|
+
# The how_to_find_request must be plain text without any formatting.
|
|
150
|
+
# """
|
|
151
|
+
# class MissingInfoGuidanceSignature(dspy.Signature):
|
|
152
|
+
# """
|
|
153
|
+
# Carefully review the command info 'available_from' hints to see if the missing information can be found by executing a different command.
|
|
154
|
+
# You may have to walk the graph of commands based on the 'available_from' hints to find the most appropriate command
|
|
155
|
+
# Note that using the wrong command name can produce missing information errors. The requestor should double-check that the command name is correct.
|
|
156
|
+
# """
|
|
157
|
+
# command_info: str = dspy.InputField()
|
|
158
|
+
# missing_information_guidance_request: str = dspy.InputField()
|
|
159
|
+
# guidance: str = dspy.OutputField()
|
|
160
|
+
|
|
161
|
+
|
|
162
|
+
# lm = dspy_utils.get_lm("LLM_AGENT", "LITELLM_API_KEY_AGENT")
|
|
163
|
+
# with dspy.context(lm=lm):
|
|
164
|
+
# guidance_func = dspy.ChainOfThought(MissingInfoGuidanceSignature)
|
|
165
|
+
# prediction = guidance_func(
|
|
166
|
+
# command_info=_what_can_i_do(chat_session_obj),
|
|
167
|
+
# missing_information_guidance_request=how_to_find_request)
|
|
168
|
+
# return prediction.guidance
|
|
164
169
|
|
|
165
170
|
def _ask_user_tool(clarification_request: str, chat_session_obj: fastworkflow.ChatSession) -> str:
|
|
166
171
|
"""
|
|
167
|
-
|
|
172
|
+
If the missing_information_guidance_tool does not help and only as the last resort, request clarification for missing information from the human user.
|
|
168
173
|
The clarification_request must be plain text without any formatting.
|
|
174
|
+
Note that using the wrong command name can produce missing information errors. Double-check with the missing_information_guidance_tool to verify that the correct command name is being used
|
|
169
175
|
"""
|
|
170
176
|
command_output = fastworkflow.CommandOutput(
|
|
171
177
|
command_responses=[fastworkflow.CommandResponse(response=clarification_request)]
|
|
172
178
|
)
|
|
179
|
+
|
|
173
180
|
chat_session_obj.command_output_queue.put(command_output)
|
|
181
|
+
|
|
174
182
|
user_query = chat_session_obj.user_message_queue.get()
|
|
175
|
-
return
|
|
183
|
+
return build_query_with_next_steps(user_query, chat_session_obj, with_agent_inputs_and_trajectory = True)
|
|
176
184
|
|
|
177
|
-
def initialize_workflow_tool_agent(
|
|
185
|
+
def initialize_workflow_tool_agent(chat_session: fastworkflow.ChatSession, max_iters: int = 25):
|
|
178
186
|
"""
|
|
179
187
|
Initialize and return a DSPy ReAct agent that exposes individual MCP tools.
|
|
180
188
|
Each tool expects a single query string for its specific tool.
|
|
181
189
|
|
|
182
190
|
Args:
|
|
183
|
-
|
|
191
|
+
chat_session: fastworkflow.ChatSession instance
|
|
184
192
|
max_iters: Maximum iterations for the ReAct agent
|
|
185
193
|
|
|
186
194
|
Returns:
|
|
187
195
|
DSPy ReAct agent configured with workflow tools
|
|
188
196
|
"""
|
|
189
|
-
chat_session_obj =
|
|
197
|
+
chat_session_obj = chat_session
|
|
190
198
|
if not chat_session_obj:
|
|
191
|
-
|
|
199
|
+
raise ValueError("chat session cannot be null")
|
|
192
200
|
|
|
193
201
|
def what_can_i_do() -> str:
|
|
194
202
|
"""
|
|
@@ -196,36 +204,10 @@ def initialize_workflow_tool_agent(mcp_server: FastWorkflowMCPServer, max_iters:
|
|
|
196
204
|
"""
|
|
197
205
|
return _what_can_i_do(chat_session_obj=chat_session_obj)
|
|
198
206
|
|
|
199
|
-
def clarify_ambiguous_intent(
|
|
200
|
-
correct_command_name: str) -> str:
|
|
201
|
-
"""
|
|
202
|
-
Call this tool ONLY in the intent detection error state to provide the exact command name.
|
|
203
|
-
The intent detection error message will list the command names to pick from.
|
|
204
|
-
"""
|
|
205
|
-
return _clarify_ambiguous_intent(correct_command_name, chat_session_obj = chat_session_obj)
|
|
206
|
-
|
|
207
|
-
def provide_missing_or_corrected_parameters(
|
|
208
|
-
missing_or_corrected_parameter_values: list[str|int|float|bool]) -> str:
|
|
209
|
-
"""
|
|
210
|
-
Call this tool ONLY in the parameter extraction error state to provide missing or corrected parameter values.
|
|
211
|
-
Missing parameter values may be found in the user query, or information already available, or by executing a different command (refer to the optional 'available_from' hint for guidance on appropriate commands to use to get the information).
|
|
212
|
-
If the error message indicates parameter values are improperly formatted, correct using your internal knowledge.
|
|
213
|
-
"""
|
|
214
|
-
return _provide_missing_or_corrected_parameters(missing_or_corrected_parameter_values, chat_session_obj=chat_session_obj)
|
|
215
|
-
|
|
216
|
-
def abort_current_command_to_exit_parameter_extraction_error_state() -> str:
|
|
217
|
-
"""
|
|
218
|
-
Call this tool ONLY when you need to execute a different command to get missing parameters.
|
|
219
|
-
DO NOT execute the same failing command over and over. Either provide_missing_or_corrected_parameters or abort
|
|
220
|
-
"""
|
|
221
|
-
return _abort_current_command_to_exit_parameter_extraction_error_state(
|
|
222
|
-
chat_session_obj=chat_session_obj)
|
|
223
|
-
|
|
224
207
|
def intent_misunderstood() -> str:
|
|
225
208
|
"""
|
|
226
209
|
Shows the full list of available command names so you can specify the command name you really meant
|
|
227
210
|
Call this tool when your intent is misunderstood (i.e. the wrong command name is executed).
|
|
228
|
-
Do not use this tool if its a missing or invalid parameter issue. Use the provide_missing_or_corrected_parameters tool instead
|
|
229
211
|
"""
|
|
230
212
|
return _intent_misunderstood(chat_session_obj = chat_session_obj)
|
|
231
213
|
|
|
@@ -249,49 +231,63 @@ def initialize_workflow_tool_agent(mcp_server: FastWorkflowMCPServer, max_iters:
|
|
|
249
231
|
# Continue to next attempt
|
|
250
232
|
logger.warning(f"Attempt {attempt + 1} failed for command '{command}': {str(e)}")
|
|
251
233
|
|
|
252
|
-
def missing_information_guidance(how_to_find_request: str) -> str:
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
234
|
+
# def missing_information_guidance(how_to_find_request: str) -> str:
|
|
235
|
+
# """
|
|
236
|
+
# Request guidance on finding missing information.
|
|
237
|
+
# The how_to_find_request must be plain text without any formatting.
|
|
238
|
+
# """
|
|
239
|
+
# return _missing_information_guidance_tool(how_to_find_request, chat_session_obj=chat_session_obj)
|
|
258
240
|
|
|
259
241
|
def ask_user(clarification_request: str) -> str:
|
|
260
242
|
"""
|
|
261
|
-
|
|
243
|
+
Only as the last resort, request clarification for missing information from the human user.
|
|
262
244
|
The clarification_request must be plain text without any formatting.
|
|
245
|
+
Note that using the wrong command name can produce missing information errors. Double-check with the what_can_i_do tool to verify that the correct command name is being used
|
|
263
246
|
"""
|
|
264
247
|
return _ask_user_tool(clarification_request, chat_session_obj=chat_session_obj)
|
|
265
248
|
|
|
266
249
|
tools = [
|
|
267
250
|
what_can_i_do,
|
|
268
251
|
execute_workflow_query,
|
|
269
|
-
missing_information_guidance,
|
|
270
|
-
clarify_ambiguous_intent,
|
|
252
|
+
# missing_information_guidance,
|
|
271
253
|
intent_misunderstood,
|
|
272
254
|
ask_user,
|
|
273
|
-
provide_missing_or_corrected_parameters,
|
|
274
|
-
abort_current_command_to_exit_parameter_extraction_error_state,
|
|
275
255
|
]
|
|
276
256
|
|
|
277
|
-
return
|
|
257
|
+
return fastWorkflowReAct(
|
|
278
258
|
WorkflowAgentSignature,
|
|
279
259
|
tools=tools,
|
|
280
260
|
max_iters=max_iters,
|
|
281
261
|
)
|
|
282
262
|
|
|
283
|
-
|
|
263
|
+
|
|
264
|
+
def build_query_with_next_steps(user_query: str,
|
|
265
|
+
chat_session_obj: fastworkflow.ChatSession, with_agent_inputs_and_trajectory: bool = False) -> str:
|
|
284
266
|
"""
|
|
285
|
-
|
|
267
|
+
Generate a todo list.
|
|
268
|
+
Return a string that combine the user query and todo list
|
|
286
269
|
"""
|
|
287
270
|
class TaskPlannerSignature(dspy.Signature):
|
|
288
271
|
"""
|
|
289
|
-
|
|
290
|
-
|
|
272
|
+
Carefully review the user_query and generate a next steps sequence based only on available commands.
|
|
273
|
+
Walk the graph of commands based on the 'available_from' hints to build the most appropriate command sequence
|
|
274
|
+
Avoid specifying 'ask user' because 9 times out of 10, you can find the information via available commands.
|
|
291
275
|
"""
|
|
292
276
|
user_query: str = dspy.InputField()
|
|
293
277
|
available_commands: list[str] = dspy.InputField()
|
|
294
|
-
|
|
278
|
+
next_steps: list[str] = dspy.OutputField(desc="task descriptions as short sentences")
|
|
279
|
+
|
|
280
|
+
class TaskPlannerWithTrajectoryAndAgentInputsSignature(dspy.Signature):
|
|
281
|
+
"""
|
|
282
|
+
Carefully review agent inputs, agent trajectory and user response and generate a next steps sequence based only on available commands.
|
|
283
|
+
Walk the graph of commands based on the 'available_from' hints to build the most appropriate command sequence
|
|
284
|
+
Avoid specifying 'ask user' because 9 times out of 10, you can find the information via available commands.
|
|
285
|
+
"""
|
|
286
|
+
agent_inputs: dict = dspy.InputField()
|
|
287
|
+
agent_trajectory: dict = dspy.InputField()
|
|
288
|
+
user_response: str = dspy.InputField()
|
|
289
|
+
available_commands: list[str] = dspy.InputField()
|
|
290
|
+
next_steps: list[str] = dspy.OutputField(desc="task descriptions as short sentences")
|
|
295
291
|
|
|
296
292
|
current_workflow = chat_session_obj.get_active_workflow()
|
|
297
293
|
available_commands = CommandMetadataAPI.get_command_display_text(
|
|
@@ -302,10 +298,27 @@ def _think_and_plan(user_query: str, chat_session_obj: fastworkflow.ChatSession)
|
|
|
302
298
|
|
|
303
299
|
planner_lm = dspy_utils.get_lm("LLM_PLANNER", "LITELLM_API_KEY_PLANNER")
|
|
304
300
|
with dspy.context(lm=planner_lm):
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
301
|
+
if with_agent_inputs_and_trajectory:
|
|
302
|
+
workflow_tool_agent = chat_session_obj.workflow_tool_agent
|
|
303
|
+
task_planner_func = dspy.ChainOfThought(TaskPlannerWithTrajectoryAndAgentInputsSignature)
|
|
304
|
+
prediction = task_planner_func(
|
|
305
|
+
agent_inputs = workflow_tool_agent.inputs,
|
|
306
|
+
agent_trajectory = workflow_tool_agent.current_trajectory,
|
|
307
|
+
user_response = user_query,
|
|
308
|
+
available_commands=available_commands)
|
|
309
|
+
else:
|
|
310
|
+
task_planner_func = dspy.ChainOfThought(TaskPlannerSignature)
|
|
311
|
+
prediction = task_planner_func(
|
|
312
|
+
user_query=user_query,
|
|
313
|
+
available_commands=available_commands)
|
|
314
|
+
|
|
315
|
+
if not prediction.next_steps:
|
|
309
316
|
return user_query
|
|
310
317
|
|
|
311
|
-
|
|
318
|
+
steps_list = '\n'.join([f'{i + 1}. {task}' for i, task in enumerate(prediction.next_steps)])
|
|
319
|
+
user_query_and_next_steps = f"{user_query}\n\nNext steps:\n{steps_list}"
|
|
320
|
+
return (
|
|
321
|
+
f'{available_commands}\n\nUser Query:\n{user_query_and_next_steps}'
|
|
322
|
+
if with_agent_inputs_and_trajectory else
|
|
323
|
+
user_query_and_next_steps
|
|
324
|
+
)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: fastworkflow
|
|
3
|
-
Version: 2.15.
|
|
3
|
+
Version: 2.15.7
|
|
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
|
|
@@ -4,13 +4,13 @@ fastworkflow/_commands/.gitkeep,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSu
|
|
|
4
4
|
fastworkflow/_workflows/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
5
5
|
fastworkflow/_workflows/command_metadata_extraction/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
6
6
|
fastworkflow/_workflows/command_metadata_extraction/_commands/ErrorCorrection/abort.py,sha256=C5H_sOOC1KBaW888QarWnWffMoV7VnZ03q4GMqmitSE,1388
|
|
7
|
-
fastworkflow/_workflows/command_metadata_extraction/_commands/ErrorCorrection/you_misunderstood.py,sha256=
|
|
7
|
+
fastworkflow/_workflows/command_metadata_extraction/_commands/ErrorCorrection/you_misunderstood.py,sha256=VHfhwlqc1ceG9P_wL8Fl7dpJA2UlcSrcXhz7zZU9NpA,2517
|
|
8
8
|
fastworkflow/_workflows/command_metadata_extraction/_commands/IntentDetection/go_up.py,sha256=K526OAf5ks95SwqVdRNVxLM_AWDfA1qXbkNYq0dANwg,1889
|
|
9
9
|
fastworkflow/_workflows/command_metadata_extraction/_commands/IntentDetection/reset_context.py,sha256=xvInu6uDw0YRUHVXNyTZphSr75f8QiQgFwDtv7SlE9o,1346
|
|
10
10
|
fastworkflow/_workflows/command_metadata_extraction/_commands/IntentDetection/what_can_i_do.py,sha256=Fw8tsk3wyCujf8nBfUgPDxnTP9c2IE513FzqAWGm8pU,6216
|
|
11
11
|
fastworkflow/_workflows/command_metadata_extraction/_commands/IntentDetection/what_is_current_context.py,sha256=S5RQLr62Q2MnKU85nw4IW_ueAK_FXvhcY9gXajFxujg,1464
|
|
12
12
|
fastworkflow/_workflows/command_metadata_extraction/_commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
13
|
-
fastworkflow/_workflows/command_metadata_extraction/_commands/wildcard.py,sha256=
|
|
13
|
+
fastworkflow/_workflows/command_metadata_extraction/_commands/wildcard.py,sha256=0VDWnDUAoMwsfH7WEI1e9UWJz_rkVGYH8KqTv9Gwea8,33307
|
|
14
14
|
fastworkflow/_workflows/command_metadata_extraction/command_context_model.json,sha256=zGWBweQSmFf7WsfR_F2DE7AJ8S8-q7F9ZbvyccysJJI,117
|
|
15
15
|
fastworkflow/build/__main__.py,sha256=NtedkZfM56qoEJ5vQECSURbE8AMTfwHN3tAZyZoWabk,15905
|
|
16
16
|
fastworkflow/build/ast_class_extractor.py,sha256=F9OG4stkp7w3kadKqxMm8h3ZDSp_zg6mwcrKMl_XqdI,13527
|
|
@@ -33,7 +33,7 @@ fastworkflow/build/navigator_stub_generator.py,sha256=_DSvHC6r1xWQiFHtUgPhI51nQf
|
|
|
33
33
|
fastworkflow/build/pydantic_model_generator.py,sha256=oNyoANyUWBpHG-fE3tGL911RNvDzQXjxAm0ssvuXUH4,1854
|
|
34
34
|
fastworkflow/build/utterance_generator.py,sha256=UrtkF0wyAZ1hiFitHX0g8w7Wh-D0leLCrP1aUACSfHo,299
|
|
35
35
|
fastworkflow/cache_matching.py,sha256=OoB--1tO6-O4BKCuCrUbB0CkUr76J62K4VAf6MShi-w,7984
|
|
36
|
-
fastworkflow/chat_session.py,sha256=
|
|
36
|
+
fastworkflow/chat_session.py,sha256=MVHSoygLIW4Gh3BRfDYSxmh5RMuBxc96c8E9QRW6ZyU,27563
|
|
37
37
|
fastworkflow/cli.py,sha256=RB78V78NAZsZtNqF4_kk-TnEKCOy-cFLF6wSwz8aP14,26345
|
|
38
38
|
fastworkflow/command_context_model.py,sha256=nWxLP3TR7WJr3yWCedqcdFOxo_kwae_mS3VRN2cOmK8,13437
|
|
39
39
|
fastworkflow/command_directory.py,sha256=aJ6UQCwevfF11KbcQB2Qz6mQ7Kj91pZtvHmQY6JFnao,29030
|
|
@@ -84,7 +84,7 @@ fastworkflow/examples/messaging_app_4/context_hierarchy_model.json,sha256=p1PkLF
|
|
|
84
84
|
fastworkflow/examples/messaging_app_4/startup_action.json,sha256=HhS0ApuK1wZmX2M0pVusCkgrV0IU7BwvkfEOpRfN95A,84
|
|
85
85
|
fastworkflow/examples/retail_workflow/_commands/calculate.py,sha256=uj-Yg0RSiSPkK7Y0AZN1fgDdL0GWIw33g9ARAPGFFVU,2285
|
|
86
86
|
fastworkflow/examples/retail_workflow/_commands/cancel_pending_order.py,sha256=npU7sERB915WJyqjuku6L63sxvXtrWGkjoTrU0nNhEU,4466
|
|
87
|
-
fastworkflow/examples/retail_workflow/_commands/exchange_delivered_order_items.py,sha256=
|
|
87
|
+
fastworkflow/examples/retail_workflow/_commands/exchange_delivered_order_items.py,sha256=6g04D3eHUQdIBu3wqPbhHMjJUK_91uHxaZrlDggnFS0,5349
|
|
88
88
|
fastworkflow/examples/retail_workflow/_commands/find_user_id_by_email.py,sha256=EhI1bNcmWETGllyb5Z91v0mRm8Ex4eQ44IQHZ244Syc,2793
|
|
89
89
|
fastworkflow/examples/retail_workflow/_commands/find_user_id_by_name_zip.py,sha256=lA9UfEkBNjCXozM4fALSZZuS0DgO3W1qQ2cg0dv1XUA,3340
|
|
90
90
|
fastworkflow/examples/retail_workflow/_commands/get_order_details.py,sha256=X5tcMfx0lBm5vot7Ssn8Uzg0UaTPJU7GTn0C8fGnGxM,3584
|
|
@@ -92,11 +92,11 @@ fastworkflow/examples/retail_workflow/_commands/get_product_details.py,sha256=Qf
|
|
|
92
92
|
fastworkflow/examples/retail_workflow/_commands/get_user_details.py,sha256=zk_QYvoj-DYP4muq0p9uDF_puCKPwy9OZrYhyM6grnI,3091
|
|
93
93
|
fastworkflow/examples/retail_workflow/_commands/list_all_product_types.py,sha256=qnxbHU6PwWiV0E9jO6jYOIs1w5RCrTYQYqYyip14VzI,2529
|
|
94
94
|
fastworkflow/examples/retail_workflow/_commands/modify_pending_order_address.py,sha256=As6TZ2uPicrylJCULN53maHTUj4Sq-XN4C2sF653EDk,3826
|
|
95
|
-
fastworkflow/examples/retail_workflow/_commands/modify_pending_order_items.py,sha256=
|
|
95
|
+
fastworkflow/examples/retail_workflow/_commands/modify_pending_order_items.py,sha256=t4UbYlgAADyzrE37PDcjZPd7UVqqlYE906d07zdMbKs,5346
|
|
96
96
|
fastworkflow/examples/retail_workflow/_commands/modify_pending_order_payment.py,sha256=zw8mhNkT6HoSPk2ADVROyGIIPpXsT3BhB5YrRnkCtmQ,3356
|
|
97
97
|
fastworkflow/examples/retail_workflow/_commands/modify_user_address.py,sha256=2Zxgbge6wDufWEvk5D7PgOkYb3bayXGH_d0Kr0AFRsw,3864
|
|
98
|
-
fastworkflow/examples/retail_workflow/_commands/return_delivered_order_items.py,sha256=
|
|
99
|
-
fastworkflow/examples/retail_workflow/_commands/transfer_to_human_agents.py,sha256=
|
|
98
|
+
fastworkflow/examples/retail_workflow/_commands/return_delivered_order_items.py,sha256=xMKn1pO91BAjYURo5lf2GjpoOm1iQxsxidq69svVRQk,4222
|
|
99
|
+
fastworkflow/examples/retail_workflow/_commands/transfer_to_human_agents.py,sha256=09YXFSeeTN2-bNh_CzHyUN-XhYAbXOe403tjP2zo3KI,2924
|
|
100
100
|
fastworkflow/examples/retail_workflow/context_inheritance_model.json,sha256=jrlby8FUUwkx4V_EGMix_pkQlWcUCVUgmeoapZaZnt4,3
|
|
101
101
|
fastworkflow/examples/retail_workflow/retail_data/__init__.py,sha256=HW8jqarRRTRtNBMp8jqQBTanFTQQC_uShqY_PiGrVtI,629
|
|
102
102
|
fastworkflow/examples/retail_workflow/retail_data/orders.json,sha256=JZihJYbSjy1r0WvIb0yAACm2rxjgq7XEde9chpwRztE,1810945
|
|
@@ -142,7 +142,7 @@ fastworkflow/mcp_server.py,sha256=f6vqHiG-cuMpeoeRY-mvsFxApmQ28cAJFfMtqoJYy5k,88
|
|
|
142
142
|
fastworkflow/model_pipeline_training.py,sha256=P_9wrYSfJVSYCTu8VEPkgXJ16eH58LLCK4rCRbRFAVg,46740
|
|
143
143
|
fastworkflow/refine/__main__.py,sha256=bDLpPNMcdp8U4EFnMdjxx1sPDQCZuEJoBURr2KebTng,3398
|
|
144
144
|
fastworkflow/run/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
145
|
-
fastworkflow/run/__main__.py,sha256=
|
|
145
|
+
fastworkflow/run/__main__.py,sha256=LNcxQRiY3Jar-coqveyrszocHSqbcVAXw1aWYltVaPM,12438
|
|
146
146
|
fastworkflow/run_agent/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
147
147
|
fastworkflow/run_agent/__main__.py,sha256=japXWziVDHdLl7Hk-jzwcYkImVY4j4k9SodMhiRK3ow,11986
|
|
148
148
|
fastworkflow/run_agent/agent_module.py,sha256=XbOfX2K2CwmIRT45YtoROCN4en9Ud8gMQh2kGEhqw_A,8012
|
|
@@ -163,13 +163,14 @@ fastworkflow/utils/logging.py,sha256=2SA-04fg7Lx_vGf980tfCOGDQxBvU9X6Vbhv47rbdaw
|
|
|
163
163
|
fastworkflow/utils/parameterize_func_decorator.py,sha256=V6YJnishWRCdwiBQW6P17hmGGrga0Empk-AN5Gm7iMk,633
|
|
164
164
|
fastworkflow/utils/pydantic_model_2_dspy_signature_class.py,sha256=w1pvl8rJq48ulFwaAtBgfXYn_SBIDBgq1aLMUg1zJn8,12875
|
|
165
165
|
fastworkflow/utils/python_utils.py,sha256=OzSf-bGve1401SHM3QXXFauBOBrlGQzPNgvvGJPavX0,8200
|
|
166
|
-
fastworkflow/utils/
|
|
166
|
+
fastworkflow/utils/react.py,sha256=HubwmM4H9UzLaLaeIkJseKCNMjyrOXvMZz-8sw4ycCE,11224
|
|
167
|
+
fastworkflow/utils/signatures.py,sha256=pOQtvp5qXmA-ETD4xpax5Kj8abkRVbznywyCwanVpxY,20938
|
|
167
168
|
fastworkflow/utils/startup_progress.py,sha256=9icSdnpFAxzIq0sUliGpNaH0Efvrt5lDtGfURV5BD98,3539
|
|
168
169
|
fastworkflow/workflow.py,sha256=F7kGoNQbAMwy71zT1V_KF8PbRTCY4Dz-16Zv4ApK8m8,18939
|
|
169
|
-
fastworkflow/workflow_agent.py,sha256=
|
|
170
|
+
fastworkflow/workflow_agent.py,sha256=iUcaE1fKLTiRNyDaochPpRHdijCiQBYaCWR8DdslO9Y,16028
|
|
170
171
|
fastworkflow/workflow_inheritance_model.py,sha256=Pp-qSrQISgPfPjJVUfW84pc7HLmL2evuq0UVIYR51K0,7974
|
|
171
|
-
fastworkflow-2.15.
|
|
172
|
-
fastworkflow-2.15.
|
|
173
|
-
fastworkflow-2.15.
|
|
174
|
-
fastworkflow-2.15.
|
|
175
|
-
fastworkflow-2.15.
|
|
172
|
+
fastworkflow-2.15.7.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
|
173
|
+
fastworkflow-2.15.7.dist-info/METADATA,sha256=YZJQivXXFXM1M9Udw6xZ9ozbplFVSSwcZy1cTQ2xTkc,29867
|
|
174
|
+
fastworkflow-2.15.7.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
|
|
175
|
+
fastworkflow-2.15.7.dist-info/entry_points.txt,sha256=m8HqoPzCyaZLAx-V5X8MJgw3Lx3GiPDlxNEZ7K-Gb-U,54
|
|
176
|
+
fastworkflow-2.15.7.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|