{
 "loop": 10,
 "accent": "#4CF490",
 "events": [
  {
   "id": "q1",
   "kind": "packet",
   "note": "prompt reaches identity-aware proxy",
   "at": 0.2,
   "travel": 0.4,
   "from": [
    44,
    152
   ],
   "to": [
    112,
    152
   ],
   "ring": false,
   "glow": {
    "x": 112,
    "y": 124,
    "w": 80,
    "h": 56
   }
  },
  {
   "id": "q2",
   "kind": "packet",
   "note": "authenticated request to the frontend's chat interface",
   "after": "q1",
   "travel": 0.3,
   "from": [
    192,
    152
   ],
   "to": [
    232,
    152
   ],
   "glow": {
    "x": 232,
    "y": 124,
    "w": 112,
    "h": 72
   }
  },
  {
   "id": "q3",
   "kind": "packet",
   "note": "semantic search in pgvector",
   "after": "q2",
   "travel": 0.4,
   "from": [
    344,
    152
   ],
   "to": [
    400,
    152
   ],
   "glow": {
    "x": 400,
    "y": 132,
    "w": 112,
    "h": 56
   }
  },
  {
   "id": "q3b",
   "kind": "packet",
   "note": "responsible ai check runs in parallel",
   "with": "q3",
   "travel": 0.5,
   "from": [
    248,
    196
   ],
   "via": [
    [
     248,
     240
    ]
   ],
   "to": [
    192,
    240
   ],
   "glow": {
    "x": 112,
    "y": 212,
    "w": 80,
    "h": 56
   }
  },
  {
   "id": "ph1",
   "kind": "phase",
   "note": "act 1",
   "at": 0,
   "until": 2.8,
   "text": "1 · RETRIEVE",
   "x": 632,
   "y": 96,
   "color": "#4CF490"
  },
  {
   "id": "q4",
   "kind": "packet",
   "note": "nearest chunks come back",
   "after": "q3",
   "gap": 0.5,
   "travel": 0.4,
   "from": [
    400,
    168
   ],
   "to": [
    344,
    168
   ],
   "label": "CHUNKS",
   "label_dy": 14
  },
  {
   "id": "q5",
   "kind": "packet",
   "note": "contextualized prompt to the inference server",
   "after": "q4",
   "travel": 0.4,
   "from": [
    272,
    196
   ],
   "to": [
    272,
    228
   ],
   "glow": {
    "x": 232,
    "y": 228,
    "w": 112,
    "h": 56
   }
  },
  {
   "id": "ph2",
   "kind": "phase",
   "note": "act 2: the model generates",
   "at": 2.9,
   "until": 5.6,
   "text": "2 · GENERATE",
   "x": 632,
   "y": 96,
   "color": "#FBDC8E"
  },
  {
   "id": "q6",
   "kind": "packet",
   "note": "answer after generation",
   "after": "q5",
   "gap": 1.2,
   "travel": 0.4,
   "from": [
    304,
    228
   ],
   "to": [
    304,
    196
   ],
   "label": "ANSWER",
   "label_dy": -10
  },
  {
   "id": "q7",
   "kind": "packet",
   "note": "response returns through the proxy",
   "after": "q6",
   "travel": 1.2,
   "from": [
    256,
    124
   ],
   "via": [
    [
     256,
     108
    ],
    [
     40,
     108
    ]
   ],
   "to": [
    40,
    144
   ]
  },
  {
   "id": "ph3",
   "kind": "phase",
   "note": "act 3",
   "at": 5.7,
   "until": 7.6,
   "text": "3 · RESPOND",
   "x": 632,
   "y": 96,
   "color": "#4CF490"
  },
  {
   "id": "s1",
   "kind": "stream",
   "note": "internal and external sources land raw data in the bucket",
   "from": [
    556,
    324
   ],
   "via": [
    [
     556,
     308
    ],
    [
     592,
     308
    ]
   ],
   "to": [
    592,
    284
   ],
   "period": 1.8,
   "count": 2,
   "color": "#02BEFA",
   "r": 2.5
  },
  {
   "id": "s2",
   "kind": "stream",
   "note": "ray job reads the bucket over the fuse csi driver",
   "from": [
    552,
    256
   ],
   "to": [
    528,
    256
   ],
   "period": 1.8,
   "count": 2,
   "color": "#02BEFA",
   "r": 2.5,
   "phase": 0.6
  },
  {
   "id": "s3",
   "kind": "stream",
   "note": "embeddings stored in cloud sql",
   "from": [
    456,
    212
   ],
   "to": [
    456,
    188
   ],
   "period": 1.8,
   "count": 2,
   "color": "#02BEFA",
   "r": 2.5,
   "phase": 1.2
  },
  {
   "id": "s4",
   "kind": "stream",
   "note": "inference server streams logs, metrics and analytics",
   "from": [
    288,
    284
   ],
   "to": [
    288,
    324
   ],
   "period": 1.4,
   "count": 2,
   "color": "#02BEFA",
   "r": 2.5
  }
 ]
}