Initial commit

This commit is contained in:
Zhongwei Li
2025-11-30 08:44:08 +08:00
commit 12f823b4a9
24 changed files with 4951 additions and 0 deletions

View File

@@ -0,0 +1,85 @@
"""
PocketFlow Cookbook Example: Interactive Chat Bot
Difficulty: ☆☆☆ Dummy Level
Source: https://github.com/The-Pocket/PocketFlow/tree/main/cookbook/pocketflow-chat
Description:
A basic chat bot with conversation history. Demonstrates:
- Self-looping nodes for continuous interaction
- Message history management
- User input handling
- Graceful exit conditions
"""
from pocketflow import Node, Flow
# from utils import call_llm # You need to implement this
class ChatNode(Node):
"""Interactive chat node that maintains conversation history"""
def prep(self, shared):
"""Get user input and maintain message history"""
# Initialize messages if this is the first run
if "messages" not in shared:
shared["messages"] = []
print("Welcome to the chat! Type 'exit' to end the conversation.")
# Get user input
user_input = input("\nYou: ")
# Check if user wants to exit
if user_input.lower() == 'exit':
return None
# Add user message to history
shared["messages"].append({"role": "user", "content": user_input})
# Return all messages for the LLM
return shared["messages"]
def exec(self, messages):
"""Call LLM with conversation history"""
if messages is None:
return None
# Call LLM with the entire conversation history
# response = call_llm(messages)
response = "This is a placeholder response. Implement call_llm()."
return response
def post(self, shared, prep_res, exec_res):
"""Display response and continue or end conversation"""
if prep_res is None or exec_res is None:
print("\nGoodbye!")
return None # End the conversation
# Print the assistant's response
print(f"\nAssistant: {exec_res}")
# Add assistant message to history
shared["messages"].append({"role": "assistant", "content": exec_res})
# Loop back to continue the conversation
return "continue"
# Build the flow with self-loop
def create_chat_flow():
"""Create a chat flow that loops back to itself"""
chat_node = ChatNode()
chat_node - "continue" >> chat_node # Loop back to continue conversation
flow = Flow(start=chat_node)
return flow
# Example usage
if __name__ == "__main__":
shared = {}
flow = create_chat_flow()
flow.run(shared)
# Conversation history is preserved in shared["messages"]
print(f"\n\nTotal messages: {len(shared.get('messages', []))}")