Initial commit
This commit is contained in:
124
skills/pocketflow/assets/node_template.py
Normal file
124
skills/pocketflow/assets/node_template.py
Normal file
@@ -0,0 +1,124 @@
|
||||
"""
|
||||
PocketFlow Node Template
|
||||
|
||||
Copy this template and customize for your needs
|
||||
"""
|
||||
|
||||
from pocketflow import Node
|
||||
# from utils.call_llm import call_llm # Uncomment if using LLM
|
||||
|
||||
|
||||
class TemplateNode(Node):
|
||||
"""
|
||||
Brief description of what this node does
|
||||
|
||||
Shared Store Schema:
|
||||
Input:
|
||||
- key1 (type): description
|
||||
- key2 (type): description
|
||||
|
||||
Output:
|
||||
- result_key (type): description
|
||||
|
||||
Actions:
|
||||
- "default": Normal flow
|
||||
- "error": If something goes wrong
|
||||
- "retry": If needs retry
|
||||
"""
|
||||
|
||||
def prep(self, shared):
|
||||
"""
|
||||
Prepare data from shared store
|
||||
|
||||
Args:
|
||||
shared (dict): Shared data store
|
||||
|
||||
Returns:
|
||||
Any: Data to pass to exec()
|
||||
"""
|
||||
# TODO: Get data from shared store
|
||||
input_data = shared.get("input_key")
|
||||
|
||||
# Optional: Add validation
|
||||
if not input_data:
|
||||
raise ValueError("Missing required input")
|
||||
|
||||
return input_data
|
||||
|
||||
def exec(self, prep_res):
|
||||
"""
|
||||
Execute the main logic (can fail and retry)
|
||||
|
||||
Args:
|
||||
prep_res: Data from prep()
|
||||
|
||||
Returns:
|
||||
Any: Result to pass to post()
|
||||
"""
|
||||
# TODO: Implement your logic here
|
||||
|
||||
# Example: Call LLM
|
||||
# result = call_llm(f"Process: {prep_res}")
|
||||
|
||||
# Example: Process data
|
||||
result = f"Processed: {prep_res}"
|
||||
|
||||
return result
|
||||
|
||||
def post(self, shared, prep_res, exec_res):
|
||||
"""
|
||||
Save results and return action
|
||||
|
||||
Args:
|
||||
shared (dict): Shared data store
|
||||
prep_res: Original data from prep()
|
||||
exec_res: Result from exec()
|
||||
|
||||
Returns:
|
||||
str: Action name for flow control
|
||||
"""
|
||||
# TODO: Save results to shared store
|
||||
shared["result_key"] = exec_res
|
||||
|
||||
# Optional: Conditional actions
|
||||
# if some_condition:
|
||||
# return "special_action"
|
||||
|
||||
return "default"
|
||||
|
||||
def exec_fallback(self, prep_res, exc):
|
||||
"""
|
||||
Optional: Handle errors gracefully
|
||||
|
||||
Args:
|
||||
prep_res: Data from prep()
|
||||
exc: The exception that occurred
|
||||
|
||||
Returns:
|
||||
Any: Fallback result (passed to post as exec_res)
|
||||
"""
|
||||
# TODO: Implement fallback logic
|
||||
print(f"Error occurred: {exc}")
|
||||
|
||||
# Option 1: Re-raise the exception
|
||||
# raise exc
|
||||
|
||||
# Option 2: Return fallback value
|
||||
return "Fallback result"
|
||||
|
||||
|
||||
# Example usage
|
||||
if __name__ == "__main__":
|
||||
# Create node with retry settings
|
||||
node = TemplateNode(max_retries=3, wait=5)
|
||||
|
||||
# Create shared store
|
||||
shared = {
|
||||
"input_key": "test input"
|
||||
}
|
||||
|
||||
# Run node
|
||||
action = node.run(shared)
|
||||
|
||||
print(f"Action: {action}")
|
||||
print(f"Result: {shared.get('result_key')}")
|
||||
Reference in New Issue
Block a user