from fibonacci import Workflow, LLMNode, ToolNode, ConditionalNode, Config
# Optional: explicit config
config = Config(api_key="fib_live_abc123")
wf = Workflow(
name="feedback-pipeline",
description="Classifies and routes customer feedback",
version=1,
config=config
)
# Classify
classify = LLMNode(
id="classify",
name="Classify Feedback",
instruction="Classify as positive, negative, or neutral. One word only.\n\n{{input.feedback}}"
)
# Route
router = ConditionalNode(
id="router",
name="Route by Sentiment",
left_value="{{classify}}",
operator="contains",
right_value="negative",
true_branch=["escalate"],
false_branch=["log_ok"],
dependencies=["classify"]
)
# Escalate negative
escalate = ToolNode(
id="escalate",
name="Alert Support Team",
tool="slack_send_message",
params={
"channel": "#support",
"message": "Negative feedback: {{input.feedback}}"
},
dependencies=["router"]
)
# Log positive/neutral
log_ok = ToolNode(
id="log_ok",
name="Log Feedback",
tool="google_sheets_append",
params={
"spreadsheet_id": "{{input.log_sheet}}",
"range": "Log!A:C",
"values": [["{{input.feedback}}", "{{classify}}"]]
},
dependencies=["router"]
)
wf.add_nodes([classify, router, escalate, log_ok])
# Validate before deploying
wf.validate()
# Deploy
workflow_id = wf.deploy()
print(f"Deployed: {workflow_id}")
# Run
result = wf.run(
input_data={"feedback": "Great product!", "log_sheet": "abc123"}
)
print(result.output_data)
print(f"Cost: ${result.total_cost:.4f}")
# Lifecycle management
stats = wf.get_stats()
print(f"Total runs: {stats.total_runs}, success rate: {stats.success_rate:.0%}")
# Deactivate when not needed
wf.deactivate()