timeline: remove GPU, add SSE status updates, DOCX export, single-file, engine-aware credits

- Remove GPU/cuttlefish engine from timeline.php, api/timeline.php, LegalTools.php, tools.js (all 4 langs)
- Add engine-aware credit cost: gpt-4o-mini=1 credit, gpt-4o=2 credits (matches redact pattern)
- Remove multiple attribute from file input (single document only)
- New api/timeline-stream.php: SSE endpoint emitting status events + final result
- New api/timeline-download.php: DOCX export of timeline events
- LegalTools::timeline() gains ?callable $onProgress for live status updates
- tools.js: spinner on run, SSE streaming fetch, Export to Word button
- Save to My Docs was already wired (showSaveResultButton at line 1136)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-05-25 09:32:28 +02:00
parent 4b8b675a64
commit d47024ed67
7 changed files with 406 additions and 43 deletions
+8 -4
View File
@@ -6,8 +6,12 @@ require_once __DIR__ . '/../includes/ToolModels.php';
dbnToolsRequireMethod('POST');
dbnToolsRequireAuth();
$ftUid = dbnToolsFreeTierCheck('timeline');
$input = dbnToolsJsonInput(400000);
$_validEngines = ['azure_mini', 'azure_full'];
$_engine = in_array((string)($input['engine'] ?? ''), $_validEngines, true)
? (string)$input['engine'] : 'azure_mini';
$_engineCredits = $_engine === 'azure_full' ? 2 : 1;
$ftUid = dbnToolsFreeTierCheckAmount('timeline', $_engineCredits);
$language = dbnToolsNormalizeLanguage($input['language'] ?? 'en');
dbnToolsWithChargedTelemetry('timeline', $language, $ftUid, function () use ($input, $language, $ftUid): array {
@@ -16,7 +20,7 @@ dbnToolsWithChargedTelemetry('timeline', $language, $ftUid, function () use ($in
dbnToolsAbort('Paste text, upload a file, or select a document before running.', 422, 'empty_text');
}
$validEngines = ['azure_mini', 'azure_full', 'gpu'];
$validEngines = ['azure_mini', 'azure_full'];
$engine = in_array((string)($input['engine'] ?? ''), $validEngines, true)
? (string)$input['engine'] : 'azure_mini';
$engine = ToolModels::engineForUser($ftUid, $engine);
@@ -42,7 +46,7 @@ dbnToolsWithChargedTelemetry('timeline', $language, $ftUid, function () use ($in
}
}
$result = (new DbnLegalToolsService())->timeline($text, $language, $engine, $focus, $confidenceFilter, $includeRelative, $includeBackground, $userNotes);
$result = (new DbnLegalToolsService())->timeline($text, $language, $engine, $focus, $confidenceFilter, $includeRelative, $includeBackground, $userNotes, null);
return $result;
});
}, $_engineCredits);