Memory & Streaming¶
Agent Memory¶
AgentMemory persists conversation history across sessions. The agent can recall past interactions.
Enable Memory¶
agent = InstaAgent(
ig=ig,
provider="gemini",
api_key="...",
memory=True, # Enable persistence
memory_dir=".InstaHarvest v2_memory", # Custom directory (optional)
)
# Conversations auto-save after each ask()
result = agent.ask("Get Cristiano's followers")
# Session saved to .InstaHarvest v2_memory/
Memory API¶
from instaharvest_v2.agent.memory import AgentMemory
mem = AgentMemory(memory_dir=".InstaHarvest v2_memory")
# Save a session
mem.save_session("session_001", messages, metadata={"topic": "followers"})
# List past sessions
sessions = mem.list_sessions(limit=20)
for s in sessions:
print(f"{s['session_id']} — {s['summary']} ({s['message_count']} msgs)")
# Load a specific session
data = mem.load_session("session_001")
# Load the most recent session
latest = mem.load_latest()
# Search through past conversations
results = mem.search("cristiano followers", limit=5)
Storage¶
Sessions are stored as JSON files:
.InstaHarvest v2_memory/
├── index.json # Session index
├── session_abc123.json # Session data
├── session_def456.json
└── ...
| Setting | Default | Description |
|---|---|---|
memory_dir |
.InstaHarvest v2_memory |
Storage directory |
max_sessions |
50 | Max stored sessions |
max_history |
100 | Max messages per session |
Streaming¶
StreamHandler enables real-time output as the agent thinks and acts.
Enable Streaming¶
agent = InstaAgent(
ig=ig,
provider="gemini",
api_key="...",
streaming=True, # Enable real-time output
)
# Now ask() will stream progress to terminal
result = agent.ask("Analyze top 10 posts by nike")
CLI output:
🤖
🔧 run_InstaHarvest v2_code: Getting nike posts...
✅ ExecutionResult: 10 posts loaded
📍 Step 2/15...
🔧 analyze_data: Computing engagement...
✅ Done
✅ Analysis complete (3.2s)
Stream Modes¶
| Mode | Usage | Description |
|---|---|---|
cli |
Terminal apps | Prints to stdout with emojis |
web |
FastAPI/SSE | Server-Sent Events format |
callback |
Custom | Calls your function |
buffer |
Silent | Buffers without output |
Custom Callback¶
from instaharvest_v2.agent.streaming import StreamHandler
def my_handler(event_type, data):
if event_type == "text":
print(f"[AI] {data}", end="")
elif event_type == "tool_call":
print(f"[TOOL] {data}")
elif event_type == "error":
print(f"[ERR] {data}")
handler = StreamHandler(callback=my_handler)
Web Streaming (SSE)¶
from instaharvest_v2.agent.streaming import WebStreamHandler
handler = WebStreamHandler()
# Get events for polling
events = handler.get_events()
# Iterate as SSE format
for sse in handler.iter_events():
print(sse) # "event: text\ndata: Hello\n\n"
Events¶
| Event | When |
|---|---|
start |
Streaming begins |
text |
Each text chunk from LLM |
tool_call |
Agent invokes a tool |
tool_result |
Tool returns result |
step |
Each agent loop iteration |
error |
Error occurs |
done |
Streaming completes |