Integrate dbn-legal-agent-v2: upgrade all v1 refs + add Korrespond legal-check

- Replace dbn-legal-agent with dbn-legal-agent-v2 in bootstrap.php
  (dbnToolsRunLegalCheck), DeepResearchAgent.php (interpretSeed,
  expandQueries, synthesis fallback, deploy label), BvjAnalyzerAgent.php
  (check_model label) — 8 locations total
- Add dbn-legal-agent-v2 legal threshold check to KorrespondAgent:
  called after selfCheck() in both generate() and refine(); result
  surfaced as legal_check[] in the API response
- Render legal_check card in korrespond.js using existing bvj-red-flag
  styles; shows only when non-empty
- Add .korr-legal-check CSS block in tools.css

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-05-19 23:59:07 +02:00
parent 29579eae66
commit 0e167bf464
7 changed files with 80 additions and 8 deletions
+1 -1
View File
@@ -968,7 +968,7 @@ PROMPT;
foreach ($checkFindings as $cf) {
$json['procedural_red_flags'][] = $cf;
}
$json['check_model'] = 'dbn-legal-agent';
$json['check_model'] = 'dbn-legal-agent-v2';
}
}
+5 -5
View File
@@ -494,7 +494,7 @@ PROMPT;
$userMsg = ['role' => 'user', 'content' => $prompt];
if ($language === 'no' || $advocateRole !== '') {
$resp = dbnToolsCallGpuLlm([$sysMsg, $userMsg], [
'model' => 'dbn-legal-agent', 'json' => true,
'model' => 'dbn-legal-agent-v2', 'json' => true,
'temperature' => 0.1, 'max_tokens' => 500, 'timeout' => 40,
]);
$raw = (string)($resp['choices'][0]['message']['content'] ?? '');
@@ -593,7 +593,7 @@ PROMPT;
$userMsg = ['role' => 'user', 'content' => $prompt];
if ($language === 'no') {
$resp = dbnToolsCallGpuLlm([$sysMsg, $userMsg], [
'model' => 'dbn-legal-agent', 'json' => true,
'model' => 'dbn-legal-agent-v2', 'json' => true,
'temperature' => 0.2, 'max_tokens' => 700, 'timeout' => 50,
]);
$raw = (string)($resp['choices'][0]['message']['content'] ?? '');
@@ -981,7 +981,7 @@ PROMPT;
],
'deploy_label' => match($engine) {
'gpu' => 'GPU (cuttlefish)',
'dbn_legal' => 'dbn-legal-agent',
'dbn_legal' => 'dbn-legal-agent-v2',
'azure_full'=> 'gpt-4o',
default => $this->azure->chatDeployment(),
},
@@ -1122,8 +1122,8 @@ PROMPT;
try {
if ($engine === 'dbn_legal') {
$response = dbnToolsCallGpuLlm($messages, array_merge($opts, ['model' => 'dbn-legal-agent', 'timeout' => 180]));
$deployLabel = 'dbn-legal-agent';
$response = dbnToolsCallGpuLlm($messages, array_merge($opts, ['model' => 'dbn-legal-agent-v2', 'timeout' => 180]));
$deployLabel = 'dbn-legal-agent-v2';
$raw = (string)($response['choices'][0]['message']['content'] ?? '');
} elseif ($engine === 'gpu') {
$response = dbnToolsCallGpuLlm($messages, $opts);
+13
View File
@@ -257,6 +257,12 @@ PROMPT;
if ($emit) { $emit('progress', ['detail' => self::L('quality_check', $userLang)]); }
$checked = $this->selfCheck($draftNo, $retrieval['sources'], $classify, $goal, $tone);
// ── Legal check: dbn-legal-agent-v2 threshold verification ────────────────
$legalCheck = [];
try {
$legalCheck = dbnToolsRunLegalCheck($checked['draft'], $body);
} catch (Throwable $e) { /* silent — non-critical */ }
// ── Translate to user language (if not Norwegian) ───────────────────────
$draftUser = $checked['draft'];
if ($userLang !== 'no') {
@@ -278,6 +284,7 @@ PROMPT;
'draft_user_lang'=> $userLang,
'cited_law' => $checked['cited_sources'],
'self_check' => $checked['flags'],
'legal_check' => $legalCheck,
'applicable_acts'=> $classify['applicable_acts'] ?? [],
'deadlines' => $classify['deadlines'] ?? [],
'parties' => $classify['parties'] ?? [],
@@ -756,6 +763,11 @@ EOT,
if ($emit) { $emit('progress', ['detail' => self::L('check_and_authorities', $userLang)]); }
$checked = $this->selfCheck($refinedNo, $retrieval['sources'], $classify, $goal, $tone);
$legalCheckRefine = [];
try {
$legalCheckRefine = dbnToolsRunLegalCheck($checked['draft'], $body);
} catch (Throwable $e) { /* silent — non-critical */ }
$draftUser = $checked['draft'];
if ($userLang !== 'no') {
if ($emit) { $emit('progress', ['detail' => self::L('translating_to', $userLang, ['lang' => dbnToolsLanguageName($userLang)])]); }
@@ -774,6 +786,7 @@ EOT,
'draft_user_lang'=> $userLang,
'cited_law' => $checked['cited_sources'],
'self_check' => $checked['flags'],
'legal_check' => $legalCheckRefine,
'applied_slices' => $retrieval['applied_slices'],
'disclaimer' => dbnToolsDisclaimer($userLang),
];
+2 -2
View File
@@ -863,7 +863,7 @@ function dbnToolsRunLegalCheck(string $brief, string $docType): array
}
$opts = [
'model' => 'dbn-legal-agent',
'model' => 'dbn-legal-agent-v2',
'temperature' => 0.1,
'max_tokens' => 350,
'timeout' => 120,
@@ -895,7 +895,7 @@ function dbnToolsRunLegalCheck(string $brief, string $docType): array
'legal_basis' => dbnToolsExtractCheckLegalBasis($clean),
'source_refs' => [],
'what_to_check'=> 'Verifiser med norsk familieretsadvokat',
'check_model' => 'dbn-legal-agent',
'check_model' => 'dbn-legal-agent-v2',
]];
}