feat: training pipeline for all 10 ML ensemble models
- Add standalone training binaries: TGGN, KAN, xLSTM, Diffusion (DBN data) - Update Dockerfile.training: 6 → 16 binaries (all 10 models + hyperopt + baseline) - Expand train.sh: 4 → 10 models, fix registry URL and GPU pool nodeSelector - Add GPU overlay manifests for trading-service and ml-training-service - Create training data PVC and upload pod manifests - Expand web-gateway model validation: 4 → 10 types (training + tune routes) - Extend dashboard: 10 model cards grouped by category (RL/Temporal/Graph/Generative) - Add training image build job to Gitea CI workflow - Update GPU taint controller to exclude inference pool from tainting - Fix job-template nodeSelector: gpu → gpu-training Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -4,7 +4,7 @@ interface Props {
|
||||
predictions?: MlPrediction[];
|
||||
}
|
||||
|
||||
const MODELS = ['DQN', 'PPO', 'TFT', 'Mamba2'];
|
||||
const MODELS = ['DQN', 'PPO', 'TFT', 'Mamba2', 'xLSTM', 'TGGN', 'TLOB', 'LNN', 'KAN', 'Diffusion'];
|
||||
|
||||
export function EnsemblePanel({ predictions = [] }: Props) {
|
||||
// Count votes
|
||||
|
||||
@@ -13,7 +13,12 @@ interface RegimeData {
|
||||
duration?: string;
|
||||
}
|
||||
|
||||
const MODELS = ['DQN', 'PPO', 'TFT', 'Mamba2'] as const;
|
||||
const MODEL_GROUPS = [
|
||||
{ label: 'Reinforcement Learning', models: ['DQN', 'PPO'] },
|
||||
{ label: 'Temporal', models: ['TFT', 'Mamba2', 'xLSTM'] },
|
||||
{ label: 'Graph / Structure', models: ['TGGN', 'TLOB', 'LNN'] },
|
||||
{ label: 'Generative', models: ['KAN', 'Diffusion'] },
|
||||
] as const;
|
||||
|
||||
export function MLDashboard() {
|
||||
const predictions = useApiQuery<MlPrediction[]>(
|
||||
@@ -46,25 +51,34 @@ export function MLDashboard() {
|
||||
</div>
|
||||
)}
|
||||
|
||||
{/* Model Cards */}
|
||||
{/* Model Cards grouped by category */}
|
||||
<ComponentErrorBoundary name="Model Cards">
|
||||
<div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4">
|
||||
{MODELS.map((model) => {
|
||||
const pred = preds.find((p) => p.model === model);
|
||||
return (
|
||||
<div
|
||||
key={model}
|
||||
className="rounded border border-[var(--color-border)] bg-[var(--color-bg-card)]"
|
||||
>
|
||||
<ModelCard
|
||||
model={model}
|
||||
signal={pred?.signal}
|
||||
confidence={pred?.confidence}
|
||||
predictedReturn={pred?.predicted_return}
|
||||
/>
|
||||
<div className="space-y-4">
|
||||
{MODEL_GROUPS.map((group) => (
|
||||
<div key={group.label}>
|
||||
<h3 className="text-xs font-semibold uppercase tracking-wider text-[var(--color-text-secondary)] mb-2">
|
||||
{group.label}
|
||||
</h3>
|
||||
<div className="grid grid-cols-1 sm:grid-cols-2 xl:grid-cols-5 gap-4">
|
||||
{group.models.map((model) => {
|
||||
const pred = preds.find((p) => p.model === model);
|
||||
return (
|
||||
<div
|
||||
key={model}
|
||||
className="rounded border border-[var(--color-border)] bg-[var(--color-bg-card)]"
|
||||
>
|
||||
<ModelCard
|
||||
model={model}
|
||||
signal={pred?.signal}
|
||||
confidence={pred?.confidence}
|
||||
predictedReturn={pred?.predicted_return}
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
})}
|
||||
</div>
|
||||
);
|
||||
})}
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
</ComponentErrorBoundary>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user