feat(advisor): multi-collection RAG search + country filter (DE/AT/CH/EU)
All checks were successful
CI / go-lint (push) Has been skipped
CI / python-lint (push) Has been skipped
CI / nodejs-lint (push) Has been skipped
CI / test-go-ai-compliance (push) Successful in 40s
CI / test-python-backend-compliance (push) Successful in 26s
CI / test-python-document-crawler (push) Successful in 20s
CI / test-python-dsms-gateway (push) Successful in 18s

- Replace single DSFA corpus query with parallel search across 6 collections
  via RAG service (port 8097)
- Add country parameter with metadata filter for bp_compliance_gesetze
- Add country-specific system prompt section
- Add DE/AT/CH/EU toggle buttons in ComplianceAdvisorWidget header

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Benjamin Admin
2026-02-28 01:04:30 +01:00
parent 8acf1d2e12
commit 0e932c0df8
2 changed files with 129 additions and 33 deletions

View File

@@ -59,6 +59,15 @@ const EXAMPLE_QUESTIONS: Record<string, string[]> = {
// COMPONENT
// =============================================================================
type Country = 'DE' | 'AT' | 'CH' | 'EU'
const COUNTRIES: { code: Country; label: string }[] = [
{ code: 'DE', label: 'DE' },
{ code: 'AT', label: 'AT' },
{ code: 'CH', label: 'CH' },
{ code: 'EU', label: 'EU' },
]
export function ComplianceAdvisorWidget({ currentStep = 'default', enableDraftingEngine = false }: ComplianceAdvisorWidgetProps) {
// Feature-flag: If Drafting Engine enabled, render DraftingEngineWidget instead
if (enableDraftingEngine) {
@@ -71,6 +80,7 @@ export function ComplianceAdvisorWidget({ currentStep = 'default', enableDraftin
const [messages, setMessages] = useState<Message[]>([])
const [inputValue, setInputValue] = useState('')
const [isTyping, setIsTyping] = useState(false)
const [selectedCountry, setSelectedCountry] = useState<Country>('DE')
const messagesEndRef = useRef<HTMLDivElement>(null)
const abortControllerRef = useRef<AbortController | null>(null)
@@ -124,6 +134,7 @@ export function ComplianceAdvisorWidget({ currentStep = 'default', enableDraftin
message: content.trim(),
history,
currentStep,
country: selectedCountry,
}),
signal: abortControllerRef.current.signal,
})
@@ -201,7 +212,7 @@ export function ComplianceAdvisorWidget({ currentStep = 'default', enableDraftin
setIsTyping(false)
}
},
[isTyping, messages, currentStep]
[isTyping, messages, currentStep, selectedCountry]
)
// Handle stop generation
@@ -269,7 +280,21 @@ export function ComplianceAdvisorWidget({ currentStep = 'default', enableDraftin
</div>
<div>
<div className="font-semibold text-sm">Compliance Advisor</div>
<div className="text-xs text-white/80">KI-gestuetzter Assistent</div>
<div className="flex items-center gap-1 mt-0.5">
{COUNTRIES.map(({ code, label }) => (
<button
key={code}
onClick={() => setSelectedCountry(code)}
className={`px-1.5 py-0.5 text-[10px] font-medium rounded transition-colors ${
selectedCountry === code
? 'bg-white text-indigo-700'
: 'bg-white/15 text-white/80 hover:bg-white/25'
}`}
>
{label}
</button>
))}
</div>
</div>
</div>
<div className="flex items-center gap-1">