82 lines
2.5 KiB
Plaintext
82 lines
2.5 KiB
Plaintext
digraph nvi {
|
|
rankdir=TB;
|
|
bgcolor="#161b22";
|
|
fontname="JetBrains Mono";
|
|
fontcolor="#c9d1d9";
|
|
node [
|
|
shape=box,
|
|
style="rounded,filled",
|
|
fillcolor="#21262d",
|
|
color="#30363d",
|
|
fontname="JetBrains Mono",
|
|
fontcolor="#c9d1d9",
|
|
fontsize=11,
|
|
];
|
|
edge [color="#8b949e", fontname="JetBrains Mono", fontcolor="#8b949e", fontsize=10];
|
|
|
|
user [label="user question", fillcolor="#1f6feb", fontcolor="#ffffff"];
|
|
|
|
subgraph cluster_l3 {
|
|
label="L3 — Plan";
|
|
color="#30363d";
|
|
fontcolor="#58a6ff";
|
|
fontsize=11;
|
|
plan [label="planner\n(1 LLM call → ordered Analyses)"];
|
|
}
|
|
|
|
subgraph cluster_l2 {
|
|
label="L2 — Analyses (mini-agents)";
|
|
color="#30363d";
|
|
fontcolor="#58a6ff";
|
|
fontsize=11;
|
|
direct [label="direct_answer\n(CoT, one shot)"];
|
|
compare [label="compare_periods\n(CoT, 2 periods)"];
|
|
drill [label="drill_down\n(ReAct loop)"];
|
|
planned [label="find_outliers · correlate\n(planned)",
|
|
style="rounded,filled,dashed", fontcolor="#6e7681"];
|
|
}
|
|
|
|
subgraph cluster_l1 {
|
|
label="L1 — Atomic actions (deterministic, no LLM)";
|
|
color="#30363d";
|
|
fontcolor="#58a6ff";
|
|
fontsize=11;
|
|
compose [label="compose(pick, recon)\n→ SQL"];
|
|
exec [label="execute_sql\n→ rows"];
|
|
}
|
|
|
|
subgraph cluster_l0 {
|
|
label="L0 — Recon + dataset setup (foundation)";
|
|
color="#30363d";
|
|
fontcolor="#58a6ff";
|
|
fontsize=11;
|
|
recon [label="recon\nknowledge graph"];
|
|
setup [label="schema_docs.yaml · metrics.yaml\nencodings · DDL extract", fontcolor="#8b949e"];
|
|
}
|
|
|
|
warehouse [label="Postgres\nBIRD financial", fillcolor="#388bfd33"];
|
|
langfuse [label="Langfuse (lng, WG)", fillcolor="#bf4b8a33", fontcolor="#ffffff"];
|
|
synth [label="synthesize\nfindings → answer"];
|
|
|
|
// General → specific flow.
|
|
user -> plan;
|
|
plan -> direct; plan -> compare; plan -> drill;
|
|
direct -> compose [label="typed Pick"];
|
|
compare -> compose;
|
|
drill -> compose [label="typed Pick"];
|
|
drill -> drill [label="iterate on results", color="#bf4b8a", fontcolor="#bf4b8a"];
|
|
compose -> exec;
|
|
exec -> warehouse;
|
|
direct -> synth; compare -> synth; drill -> synth;
|
|
|
|
// L0 is consulted by every layer above (not a one-way cascade).
|
|
setup -> recon [label="make recon"];
|
|
recon -> plan [style=dashed, label="brief names", constraint=false];
|
|
recon -> compose [style=dashed, label="columns · joins · metrics", constraint=false];
|
|
|
|
// Observability.
|
|
plan -> langfuse [style=dotted, label="spans"];
|
|
compose -> langfuse [style=dotted];
|
|
exec -> langfuse [style=dotted];
|
|
}
|