fix(admin): tune chat params, add Training sidebar link, fix reporting API keys
All checks were successful
CI / go-lint (push) Has been skipped
CI / python-lint (push) Has been skipped
CI / nodejs-lint (push) Has been skipped
CI / test-go-ai-compliance (push) Successful in 36s
CI / test-python-backend-compliance (push) Successful in 28s
CI / test-python-document-crawler (push) Successful in 23s
CI / test-python-dsms-gateway (push) Successful in 18s

- 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 <noreply@anthropic.com>
This commit is contained in:
Benjamin Boenisch
2026-02-17 23:46:19 +01:00
parent 899e22a31b
commit 16e3c251cc
3 changed files with 39 additions and 3 deletions

View File

@@ -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),

View File

@@ -525,6 +525,18 @@ export function SDKSidebar({ collapsed = false, onCollapsedChange }: SDKSidebarP
isActive={pathname === '/sdk/academy'}
collapsed={collapsed}
/>
<AdditionalModuleItem
href="/sdk/training"
icon={
<svg className="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2}
d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4" />
</svg>
}
label="Training"
isActive={pathname === '/sdk/training'}
collapsed={collapsed}
/>
<AdditionalModuleItem
href="/sdk/whistleblower"
icon={

View File

@@ -14,6 +14,29 @@ import type {
const BASE_URL = '/api/sdk/v1/reporting'
/**
* Rekursive snake_case -> 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<string, unknown>).map(([key, value]) => [
snakeToCamel(key),
transformKeys(value),
])
)
}
return obj
}
async function apiFetch<T>(path: string): Promise<T> {
const res = await fetch(`${BASE_URL}${path}`, {
headers: {
@@ -29,7 +52,8 @@ async function apiFetch<T>(path: string): Promise<T> {
throw new Error(error.error || `API Error: ${res.status}`)
}
return res.json()
const data = await res.json()
return transformKeys(data) as T
}
/**