Auto-commit 2026-09-07 16:37: 2 files changed, 43 insertions(+), 27 deletions(-)

This commit is contained in:
herzogflorian 2026-09-07 16:37:34 +02:00
parent dfb4fdf54d
commit c50ba14485
2 changed files with 43 additions and 27 deletions

Binary file not shown.

View File

@ -410,37 +410,53 @@ The next frames show \textbf{low-fidelity sketches} of the platform from the use
\begin{frame}{Reference architecture -- a logical split into services with contracts}
\begin{center}
\resizebox{0.86\textwidth}{!}{%
\resizebox{!}{6.35cm}{%
\begin{tikzpicture}[
layer/.style={rectangle, draw=gray!60!black, rounded corners=5pt, minimum width=15.2cm, align=left, font=\small\sffamily, inner sep=6pt},
box/.style={rectangle, draw=bankgreen, fill=white, rounded corners=3pt, font=\footnotesize\sffamily, minimum width=4.4cm, minimum height=0.62cm, inner sep=3pt},
abox/.style={box, draw=aiviolet},
arr/.style={-{Stealth[length=2.5mm]}, thick, gray!60!black}
layer/.style={rectangle, draw=gray!60!black, rounded corners=5pt, minimum width=12.4cm, inner sep=0pt},
ltitle/.style={anchor=west, font=\scriptsize\sffamily\bfseries},
box/.style={rectangle, draw=bankgreen, fill=white, rounded corners=3pt, font=\scriptsize\sffamily, align=center, minimum width=3.8cm, minimum height=0.6cm, inner sep=2pt},
abox/.style={box, draw=aiviolet, minimum width=3.6cm},
arr/.style={-{Stealth[length=2mm]}, line width=0.8pt, gray!60!black},
lbl/.style={font=\scriptsize\sffamily, text=gray!60!black, anchor=west}
]
\node[layer, fill=gray!12, minimum height=0.9cm] (ui) at (0,0) {\textbf{Thin dashboard (e.g.\ Streamlit)} -- API-first, no business logic};
\node[font=\footnotesize\sffamily, text=gray!60!black] at (0,-0.85) {stable HTTP/JSON API};
\node[layer, fill=aiviolet!8, minimum height=2.6cm] (ai) at (0,-2.55) {};
\node[anchor=north west, font=\small\sffamily\bfseries, text=aiviolet] at ($(ai.north west)+(0.15,-0.1)$) {Multi-agent layer -- non-deterministic};
\node[abox] (adv) at (-5.0,-2.55) {\textbf{AdvisorAgent} (orchestrator)};
\node[abox] (res) at (-0.3,-1.95) {ResearchAgent: news $\to$ Insight};
\node[abox] (risk) at (-0.3,-2.62) {RiskAgent: calls RiskService};
\node[abox] (opt) at (-0.3,-3.29) {OptimizationAgent: calls OptimizationService};
\node[abox, fill=aiviolet!15, minimum width=4.2cm, minimum height=1.6cm, align=center] (gw) at (4.9,-2.62) {\textbf{LLM gateway}\\one port for every model call\\cost, latency per request\\fallback chain};
\draw[arr] (adv) -- (res); \draw[arr] (adv) -- (risk); \draw[arr] (adv) -- (opt);
\node[layer, fill=bankgreen!8, minimum height=2.35cm] (det) at (0,-5.35) {};
\node[anchor=north west, font=\small\sffamily\bfseries, text=bankgreen!70!black] at ($(det.north west)+(0.15,-0.1)$) {Deterministic services -- no LLM inside};
\node[box] (m1) at (-5.0,-5.2) {MarketDataService: live API + cache fallback};
\node[box] (m2) at (0,-5.2) {NewsIngestionService: raw news + provenance};
\node[box] (m3) at (5.0,-5.2) {PerformanceService: returns, Sharpe};
\node[box] (m4) at (-5.0,-5.95) {RiskService: volatility, VaR};
\node[box] (m5) at (0,-5.95) {OptimizationService: mean--variance};
\node[box] (m6) at (5.0,-5.95) {PortfolioService: holdings, positions};
\node[layer, fill=camel!25, minimum height=0.8cm] (ont) at (0,-7.15) {\textbf{Domain ontology} $=$ architecture contract $+$ guard rail};
\draw[arr] (ui.south) -- (ai.north);
\draw[arr] (ai.south) -- node[right, font=\footnotesize\sffamily, text=gray!60!black] {reads the core only through its contracts} (det.north);
% UI layer
\node[layer, fill=gray!12, minimum height=0.5cm] (ui) at (0,0) {};
\node[font=\scriptsize\sffamily] at (0,0) {\textbf{Thin dashboard (e.g.\ Streamlit)} -- API-first, no business logic};
\draw[arr] (0,-0.25) -- (0,-0.65);
\node[lbl] at (0.15,-0.45) {stable HTTP/JSON API};
% Multi-agent layer
\node[layer, fill=aiviolet!8, minimum height=2.65cm] (ai) at (0,-1.975) {};
\node[ltitle, text=aiviolet] at (-6.05,-0.87) {Multi-agent layer -- non-deterministic};
\node[abox, minimum width=2.9cm, minimum height=0.75cm] (adv) at (-4.5,-2.15) {\textbf{AdvisorAgent}\\(orchestrator)};
\node[abox] (res) at (-0.2,-1.45) {\textbf{ResearchAgent}\\news $\to$ Insight};
\node[abox] (risk) at (-0.2,-2.15) {\textbf{RiskAgent}\\calls RiskService};
\node[abox] (opt) at (-0.2,-2.85) {\textbf{OptimizationAgent}\\calls OptimizationService};
\draw[line width=0.8pt, gray!60!black] (adv.east) -- (-2.6,-2.15);
\draw[line width=0.8pt, gray!60!black] (-2.6,-1.45) -- (-2.6,-2.85);
\draw[arr] (-2.6,-1.45) -- (res.west);
\draw[arr] (-2.6,-2.15) -- (risk.west);
\draw[arr] (-2.6,-2.85) -- (opt.west);
\node[abox, fill=aiviolet!15, minimum width=2.9cm, text width=2.7cm, minimum height=1.9cm] (gw) at (4.55,-2.15) {\textbf{LLM gateway}\\one port for every model call\\cost and latency per request\\fallback chain};
\draw[arr, dashed] (res.east) -- (gw.west |- res.east);
\draw[arr, dashed] (risk.east) -- (gw.west |- risk.east);
\draw[arr, dashed] (opt.east) -- (gw.west |- opt.east);
\draw[arr] (0,-3.3) -- (0,-3.7);
\node[lbl] at (0.15,-3.5) {reads the core only through its contracts};
% Deterministic layer
\node[layer, fill=bankgreen!8, minimum height=2.05cm] (det) at (0,-4.725) {};
\node[ltitle, text=bankgreen!70!black] at (-6.05,-3.92) {Deterministic services -- no LLM inside};
\node[box] at (-4.1,-4.45) {\textbf{MarketDataService}\\live API $+$ cache fallback};
\node[box] at (0,-4.45) {\textbf{NewsIngestionService}\\raw news $+$ provenance};
\node[box] at (4.1,-4.45) {\textbf{PerformanceService}\\returns, Sharpe ratio};
\node[box] at (-4.1,-5.2) {\textbf{RiskService}\\volatility, Value-at-Risk};
\node[box] at (0,-5.2) {\textbf{OptimizationService}\\mean--variance (Markowitz)};
\node[box] at (4.1,-5.2) {\textbf{PortfolioService}\\holdings, positions};
% Ontology layer
\node[layer, fill=camel!25, minimum height=0.5cm] at (0,-6.2) {};
\node[font=\scriptsize\sffamily] at (0,-6.2) {\textbf{Domain ontology} $=$ architecture contract $+$ guard rail};
\end{tikzpicture}}
\end{center}
\vspace{-0.1cm}
\vspace{-0.15cm}
\footnotesize The deployment cut -- one modular monolith, several deployables, or a hybrid -- is the outcome of your match (week 6), not part of this picture.
\end{frame}