feat(tools): persona-driven multi-domain corpus + model routing
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>
This commit is contained in:
@@ -26,6 +26,16 @@ final class DbnLegalAnalysisAgent
|
||||
private DbnAzureOpenAiGateway|DbnBedrockGateway $azureMini;
|
||||
private DbnLegalToolsService $legalSvc;
|
||||
|
||||
/** Persona system prompt (from the resolved chat profile); null ⇒ use the built-in barnevern prompt. */
|
||||
private ?string $personaPrompt = null;
|
||||
|
||||
public function withPersonaPrompt(?string $prompt): self
|
||||
{
|
||||
$prompt = is_string($prompt) ? trim($prompt) : '';
|
||||
$this->personaPrompt = $prompt !== '' ? $prompt : null;
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
// On Azure: gpt-4o-mini for extraction/synthesis. On Bedrock: factory picks Haiku/Sonnet.
|
||||
@@ -362,16 +372,19 @@ PROMPT;
|
||||
{
|
||||
$locale = dbnToolsLanguageName($language);
|
||||
|
||||
// The fine-tune was trained primarily in Norwegian; the Norwegian system
|
||||
// prompt keeps its precision on barnevernsloven / EMD. We then add a
|
||||
// language-coercion line so the prose comes back in the user's chosen
|
||||
// language. Statute and case names stay in their original Norwegian form.
|
||||
$sysMsg = 'Du er en ekspert på norsk barnevernsloven og EMD-praksis. '
|
||||
. 'Bruk korrekt juridisk terminologi. '
|
||||
. 'Bruk terskler fra barnevernsloven 2021: § 4-25 krever «klar nødvendighet». '
|
||||
. 'Strand Lobben mot Norge (37283/13) setter krav om rehabiliteringsplan før adopsjon. '
|
||||
. 'Aldri oppfinn paragrafnumre, saksnumre eller dommernavn. '
|
||||
. 'Avslutt med en «Kilder:»-seksjon som lister lovparagrafer og dommer du har sitert. ';
|
||||
// Base persona prompt comes from the resolved chat profile (default =
|
||||
// Child-welfare/barnevern). The fine-tune was trained primarily in
|
||||
// Norwegian; the Norwegian system prompt keeps its precision on
|
||||
// barnevernsloven / EMD. We then add a language-coercion line so the
|
||||
// prose comes back in the user's chosen language. Statute and case names
|
||||
// stay in their original Norwegian form.
|
||||
$sysMsg = ($this->personaPrompt
|
||||
?? 'Du er en ekspert på norsk barnevernsloven og EMD-praksis. '
|
||||
. 'Bruk korrekt juridisk terminologi. '
|
||||
. 'Bruk terskler fra barnevernsloven 2021: § 4-25 krever «klar nødvendighet». '
|
||||
. 'Strand Lobben mot Norge (37283/13) setter krav om rehabiliteringsplan før adopsjon. '
|
||||
. 'Aldri oppfinn paragrafnumre, saksnumre eller dommernavn.')
|
||||
. ' Avslutt med en «Kilder:»-seksjon som lister lovparagrafer og dommer du har sitert. ';
|
||||
|
||||
if ($language === 'no') {
|
||||
$sysMsg .= 'Svar på norsk.';
|
||||
|
||||
Reference in New Issue
Block a user