Skip to main content
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)

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)

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}`