feat(ui): list llm shield in the guardrail garden

Adds the card, preset and logo so operators can pick LLM Shield from the
guardrails page the same way as the other partner guardrails.
This commit is contained in:
Ninad Phalak 2026-09-03 12:02:48 -05:00
parent 4509c87470
commit 8ab969d56c
No known key found for this signature in database
GPG key ID: 59119ED515433744
5 changed files with 25 additions and 0 deletions

View file

@ -0,0 +1,5 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="24" height="24" rx="8" fill="#2563EB"/>
<path d="M12 4.5L17.5 6.65V11.4C17.5 14.87 15.31 17.62 12 18.9C8.69 17.62 6.5 14.87 6.5 11.4V6.65L12 4.5Z" fill="white"/>
<path d="M9.6 11.6L11.3 13.3L14.6 10" stroke="#2563EB" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 401 B

View file

@ -318,4 +318,10 @@ export const GUARDRAIL_PRESETS: Record<string, GuardrailPreset> = {
mode: "pre_call",
defaultOn: false,
},
llm_shield: {
provider: "LLM Shield",
guardrailNameSuggestion: "LLM Shield",
mode: "pre_call",
defaultOn: false,
},
};

View file

@ -28,6 +28,7 @@ const EXPECTED_PARTNER_LOGO_FILES: Record<string, string> = {
repelloai: "repelloai.png",
straiker: "straiker.svg",
alice: "alice.svg",
llm_shield: "llm_shield.svg",
};
describe("guardrail_garden_data logos", () => {

View file

@ -474,6 +474,16 @@ export const PARTNER_GUARDRAIL_CARDS: GuardrailCardInfo[] = [
tags: ["Content Moderation", "Prompt Injection", "PII", "Policy"],
providerKey: "Alice",
},
{
id: "llm_shield",
name: "LLM Shield",
description:
"Self-hosted PII redaction that puts the original values back into the model's response, so the provider never receives personal data while the end user still sees it.",
category: "partner",
logo: guardrailLogoMap["LLM Shield"],
tags: ["PII", "Data Privacy", "Compliance", "Streaming"],
providerKey: "LLM Shield",
},
];
export const ALL_CARDS = [...LITELLM_CONTENT_FILTER_CARDS, ...PARTNER_GUARDRAIL_CARDS];

View file

@ -1,6 +1,7 @@
import aimSecurityLogo from "../../../../../public/assets/logos/aim_security.jpeg";
import aktoLogo from "../../../../../public/assets/logos/akto.svg";
import aliceLogo from "../../../../../public/assets/logos/alice.svg";
import llmShieldLogo from "../../../../../public/assets/logos/llm_shield.svg";
import aporiaLogo from "../../../../../public/assets/logos/aporia.png";
import bedrockLogo from "../../../../../public/assets/logos/bedrock.svg";
import catoNetworksLogo from "../../../../../public/assets/logos/cato_networks.svg";
@ -85,6 +86,7 @@ export const guardrail_provider_map: Record<string, string> = {
QostodianNexus: "qostodian_nexus",
Repelloai: "repelloai",
Alice: "alice",
"LLM Shield": "llm_shield",
};
// Function to populate provider map from API response - updates the original map
@ -208,6 +210,7 @@ export const guardrailLogoMap = {
"RepelloAI Argus": repelloAiLogo.src,
Straiker: straikerLogo.src,
Alice: aliceLogo.src,
"LLM Shield": llmShieldLogo.src,
} satisfies Record<string, string>;
export const getGuardrailLogo = (displayName: string): string | undefined =>