File size: 3,832 Bytes
8c26ecf
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 480" font-family="-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif">
  <rect width="1200" height="480" fill="#ffffff"/>

  <defs>
    <marker id="arr2" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto">
      <path d="M 0 0 L 10 5 L 0 10 z" fill="#374151"/>
    </marker>
    <filter id="sh2" x="-20%" y="-20%" width="140%" height="140%">
      <feDropShadow dx="0" dy="2" stdDeviation="3" flood-opacity="0.08"/>
    </filter>
  </defs>

  <text x="600" y="40" font-size="22" font-weight="700" text-anchor="middle" fill="#111827">The agent loop — partial observation, hierarchical action</text>
  <text x="600" y="65" font-size="13" fill="#6b7280" text-anchor="middle">validate → mutate → tick → observe → reward</text>

  <!-- Agent box -->
  <g filter="url(#sh2)">
    <rect x="80" y="170" width="260" height="160" rx="14" fill="#eef2ff" stroke="#6366f1" stroke-width="1.5"/>
    <text x="210" y="200" font-size="16" font-weight="700" text-anchor="middle" fill="#3730a3">LLM Agent</text>
    <text x="210" y="222" font-size="11" text-anchor="middle" fill="#4338ca">(Qwen2.5-7B + LoRA)</text>
    <text x="100" y="250" font-size="12" fill="#374151">emits one JSON action:</text>
    <text x="100" y="272" font-size="11" font-family="ui-monospace,monospace" fill="#111">{</text>
    <text x="115" y="288" font-size="11" font-family="ui-monospace,monospace" fill="#111">"action_type": "...",</text>
    <text x="115" y="302" font-size="11" font-family="ui-monospace,monospace" fill="#111">"target_service": "...",</text>
    <text x="115" y="316" font-size="11" font-family="ui-monospace,monospace" fill="#111">"parameters": { ... }</text>
    <text x="100" y="332" font-size="11" font-family="ui-monospace,monospace" fill="#111">}</text>
  </g>

  <!-- Env box -->
  <g filter="url(#sh2)">
    <rect x="860" y="170" width="260" height="160" rx="14" fill="#fef3c7" stroke="#f59e0b" stroke-width="1.5"/>
    <text x="990" y="200" font-size="16" font-weight="700" text-anchor="middle" fill="#92400e">incident_env</text>
    <text x="990" y="222" font-size="11" text-anchor="middle" fill="#b45309">FastAPI / OpenEnv</text>
    <text x="880" y="252" font-size="12" fill="#374151">7 reactive services</text>
    <text x="880" y="272" font-size="12" fill="#374151">10 P1 actions  ·  7 P2 actions</text>
    <text x="880" y="292" font-size="12" fill="#374151">10 scenarios across 4 pools</text>
    <text x="880" y="312" font-size="12" fill="#374151">phase-aware step dispatch</text>
  </g>

  <!-- Arrows -->
  <path d="M 340 230 Q 600 150 860 230" stroke="#374151" stroke-width="2" fill="none" marker-end="url(#arr2)"/>
  <text x="600" y="170" font-size="13" font-weight="600" text-anchor="middle" fill="#111">action  (POST /step)</text>

  <path d="M 860 290 Q 600 380 340 290" stroke="#374151" stroke-width="2" fill="none" marker-end="url(#arr2)"/>
  <text x="600" y="395" font-size="13" font-weight="600" text-anchor="middle" fill="#111">observation, reward, valid_actions, done</text>

  <!-- Observation card -->
  <g filter="url(#sh2)">
    <rect x="430" y="220" width="340" height="100" rx="10" fill="#ffffff" stroke="#e5e7eb" stroke-width="1"/>
    <text x="600" y="245" font-size="13" font-weight="700" text-anchor="middle" fill="#111">Partial observation (POMDP)</text>
    <text x="445" y="268" font-size="11" fill="#374151">·  alerts, metrics, logs, deps, deploys</text>
    <text x="445" y="284" font-size="11" fill="#374151">·  service_statuses + cumulative_reward</text>
    <text x="445" y="300" font-size="11" fill="#374151">·  valid_actions (action mask)</text>
    <text x="445" y="316" font-size="11" fill="#dc2626" font-weight="600">never:  fault_type, is_bad, root cause</text>
  </g>
</svg>