662fbf7d6d
Generalize the family-locked legal tools into caveauAI persona profiles (client 57 chat profiles, resolved in-process via the chat_profiles bridge). Each tool accepts an optional `profile` slug that scopes the corpus package(s), search method, system prompt and synthesis model; omitting it falls back to the family-legal package so existing behaviour is unchanged. - dbnToolsResolvePersona / dbnToolsListPersonas / dbnToolsBootChatProfiles in bootstrap.php; new api/personas.php + dbn.list_personas MCP tool. - LegalTools search/ask/corpusContextForSummarize and the BvjAnalyzer / LegalAnalysis / translate paths take the persona's packages + prompt + model. - Persona <select> on ask/search/summarize (populated from api/personas.php). Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
24 lines
1017 B
PHP
24 lines
1017 B
PHP
<?php
|
|
declare(strict_types=1);
|
|
|
|
require_once __DIR__ . '/../includes/LegalTools.php';
|
|
require_once __DIR__ . '/../includes/ToolModels.php';
|
|
|
|
dbnToolsRequireMethod('POST');
|
|
dbnToolsRequireAuth();
|
|
$ftUid = dbnToolsFreeTierCheck('ask');
|
|
$engine = ToolModels::engineForUser($ftUid, 'azure_mini');
|
|
$input = dbnToolsJsonInput(25000);
|
|
$language = dbnToolsNormalizeLanguage($input['language'] ?? 'en');
|
|
|
|
dbnToolsWithChargedTelemetry('ask', $language, $ftUid, function () use ($input, $language, $engine): array {
|
|
$question = dbnToolsInjectDocContent($input, dbnToolsString($input, 'question', 4000, false));
|
|
if (mb_strlen(trim($question), 'UTF-8') < 5) {
|
|
dbnToolsAbort('Enter a question or select a document before running.', 422, 'empty_text');
|
|
}
|
|
$persona = (isset($input['profile']) && is_string($input['profile']) && trim($input['profile']) !== '')
|
|
? trim($input['profile'])
|
|
: null;
|
|
return (new DbnLegalToolsService())->ask($question, $language, $engine, $persona);
|
|
});
|