Add premium My Case MVP

This commit is contained in:
2026-05-23 10:17:34 +02:00
parent e0aeefc73e
commit 83fc71414f
33 changed files with 1275 additions and 148 deletions
+28 -1
View File
@@ -3,6 +3,8 @@ declare(strict_types=1);
require_once __DIR__ . '/../includes/bootstrap.php';
require_once __DIR__ . '/../includes/BvjAnalyzerAgent.php';
require_once __DIR__ . '/../includes/CaseResults.php';
require_once __DIR__ . '/../includes/ToolModels.php';
dbnToolsRequireMethod('POST');
dbnToolsRequireAuth();
@@ -54,7 +56,7 @@ try {
$language = dbnToolsNormalizeLanguage($input['language'] ?? 'en');
$advocateRole = trim((string)($input['advocate_role'] ?? ''));
$engine = (string)($input['engine'] ?? 'azure_mini');
$engine = ToolModels::engineForUser($ftUid, (string)($input['engine'] ?? 'azure_mini'));
$sliceInput = $input['slices'] ?? [];
$controls = is_array($input['controls'] ?? null) ? $input['controls'] : [];
$additionalNotes = mb_substr(trim((string)($input['additional_notes'] ?? '')), 0, 2000, 'UTF-8');
@@ -112,6 +114,17 @@ try {
'file_count' => count($uploadedFiles),
]);
// Optional: append user's case-context chunks to the last uploaded document text,
// so the agent reads them as supplementary background.
$useMyCase = !empty($input['use_my_case']);
if ($useMyCase && !empty($uploadedFiles)) {
$retrievalQuery = mb_substr((string)$uploadedFiles[0]['text'], 0, 2000, 'UTF-8');
$caseBlock = dbnToolsCaseContext(true, $retrievalQuery, 5);
if ($caseBlock !== '') {
$uploadedFiles[0]['text'] .= "\n\n" . $caseBlock;
}
}
$result = (new DbnBvjAnalyzerAgent())->run(
$uploadedFiles,
$advocateRole,
@@ -138,6 +151,20 @@ try {
'bvj_doc_type' => $result['doc_meta']['doc_type'] ?? null,
]);
if ($ftUid > 0) {
$ownerId = CaseStore::caseResolveClientId($ftUid);
$resultId = CaseResults::save($ftUid, $ownerId, 'barnevernet', $input, $result, [
'used_case_context' => $useMyCase ? 1 : 0,
'case_doc_ids' => dbnToolsLastCaseDocIds(),
'model' => $result['trace_metadata']['deployment'] ?? $engine,
'latency_ms' => $result['latency_ms'],
'credits_charged' => FreeTier::cost('barnevernet'),
]);
if ($resultId > 0) {
$result['result_id'] = $resultId;
}
}
$emit('final', ['result' => $result]);
} catch (DbnToolsHttpException $e) {