From 16e3c251cc91a771dc888e666faba11ce0a683ee Mon Sep 17 00:00:00 2001 From: Benjamin Boenisch Date: Tue, 17 Feb 2026 23:46:19 +0100 Subject: [PATCH] fix(admin): tune chat params, add Training sidebar link, fix reporting API keys - Reduce chat history from 10 to 6 messages to fit context window - Lower num_predict from 8192 to 2048 for faster responses - Add Training module link to SDK sidebar navigation - Add snake_case to camelCase key transformation for reporting API (Go backend returns snake_case, TypeScript expects camelCase) Co-Authored-By: Claude Opus 4.6 --- .../api/sdk/compliance-advisor/chat/route.ts | 4 +-- .../components/sdk/Sidebar/SDKSidebar.tsx | 12 +++++++++ admin-compliance/lib/sdk/reporting/api.ts | 26 ++++++++++++++++++- 3 files changed, 39 insertions(+), 3 deletions(-) diff --git a/admin-compliance/app/api/sdk/compliance-advisor/chat/route.ts b/admin-compliance/app/api/sdk/compliance-advisor/chat/route.ts index ab1407d..9cb618a 100644 --- a/admin-compliance/app/api/sdk/compliance-advisor/chat/route.ts +++ b/admin-compliance/app/api/sdk/compliance-advisor/chat/route.ts @@ -142,7 +142,7 @@ export async function POST(request: NextRequest) { // 3. Build messages array (limit history to last 10 messages) const messages = [ { role: 'system', content: systemContent }, - ...history.slice(-10).map((h: { role: string; content: string }) => ({ + ...history.slice(-6).map((h: { role: string; content: string }) => ({ role: h.role === 'user' ? 'user' : 'assistant', content: h.content, })), @@ -159,7 +159,7 @@ export async function POST(request: NextRequest) { stream: true, options: { temperature: 0.3, - num_predict: 8192, + num_predict: 2048, }, }), signal: AbortSignal.timeout(120000), diff --git a/admin-compliance/components/sdk/Sidebar/SDKSidebar.tsx b/admin-compliance/components/sdk/Sidebar/SDKSidebar.tsx index 7ac5b94..b7fb544 100644 --- a/admin-compliance/components/sdk/Sidebar/SDKSidebar.tsx +++ b/admin-compliance/components/sdk/Sidebar/SDKSidebar.tsx @@ -525,6 +525,18 @@ export function SDKSidebar({ collapsed = false, onCollapsedChange }: SDKSidebarP isActive={pathname === '/sdk/academy'} collapsed={collapsed} /> + + + + } + label="Training" + isActive={pathname === '/sdk/training'} + collapsed={collapsed} + /> camelCase Konvertierung fuer API-Responses. + * Das Go-Backend liefert snake_case JSON, der TypeScript-Client erwartet camelCase. + */ +function snakeToCamel(str: string): string { + return str.replace(/_([a-z])/g, (_, letter) => letter.toUpperCase()) +} + +function transformKeys(obj: unknown): unknown { + if (Array.isArray(obj)) { + return obj.map(transformKeys) + } + if (obj !== null && typeof obj === 'object') { + return Object.fromEntries( + Object.entries(obj as Record).map(([key, value]) => [ + snakeToCamel(key), + transformKeys(value), + ]) + ) + } + return obj +} + async function apiFetch(path: string): Promise { const res = await fetch(`${BASE_URL}${path}`, { headers: { @@ -29,7 +52,8 @@ async function apiFetch(path: string): Promise { throw new Error(error.error || `API Error: ${res.status}`) } - return res.json() + const data = await res.json() + return transformKeys(data) as T } /**