Assemble-first loop (recommended)
Copy
import os, uuid, requests
API = "https://api.flumes.ai/v0"
HEADERS = {
"Authorization": f"Bearer {os.getenv('FLUMES_API_KEY')}",
"Content-Type": "application/json",
"X-Flumes-Agent": "demo"
}
def assemble(entity_id: str, turn: str):
r = requests.post(
f"{API}/context/assemble",
headers={**HEADERS, "Idempotency-Key": str(uuid.uuid4())},
json={
"entity_id": entity_id,
"turn": turn,
"retrieval": {"preset": "balanced"},
"ingest": {"extract": True},
"return": {"include_structured_facts": True, "include_scores": True},
"max_context_tokens": 1200
},
)
r.raise_for_status()
return r.json()["context"]
# After each tool/turn, call assemble and feed summary + facts into your next prompt
ctx = assemble("ent:user_123", "I want to go to Rome in July. Any museum tips?")
prompt = (
"You are a helpful assistant.\n"
f"Facts:\n- " + "\n- ".join(ctx.get("facts", ctx.get("facts_struct", []))) + "\n\n"
f"Summary:\n{ctx.get('summary','')}\n"
)
Structured upserts (explicit facts)
Copy
curl -s "https://api.flumes.ai/v0/memories:batch_upsert" \
-H "Authorization: Bearer $FLUMES_API_KEY" \
-H "Content-Type: application/json" \
-H "X-Flumes-Agent: demo" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{
"items": [
{"type": "fact", "subject": "ent:user_123", "predicate": "likes_city", "object_text": "Rome", "keys": ["ent:user_123|likes_city"]}
],
"upsert_conflicts": "smart"
}'
Manual prompt injection (without a framework)
Copy
const ctx = await fetch("https://api.flumes.ai/v0/context/assemble", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.FLUMES_API_KEY}`,
"Content-Type": "application/json",
"X-Flumes-Agent": "demo",
"Idempotency-Key": crypto.randomUUID(),
},
body: JSON.stringify({
entity_id: "ent:user_123",
turn: "Plan July trip to Rome",
return: { include_structured_facts: true }
})
}).then(r => r.json())
const systemPrompt = `You are a helpful assistant.\nFacts:\n- ${ctx.context.facts?.join("\n- ")}\n\nSummary:\n${ctx.context.summary}`