This prompt is for trust and safety teams, AI platform engineers, and policy authors who need a single, auditable refusal policy specification that can be adapted for multiple model providers (e.g., OpenAI, Anthropic, Google, open-weight models). Use it when you are migrating a product to a new model, running a multi-model routing system, or standardizing safety behavior across an AI platform. The prompt takes your existing policy categories and target model conventions as input and produces a structured policy document with refusal triggers, safe alternative language, and boundary communication rules.
Prompt
Refusal Policy Portability Prompt Template

When to Use This Prompt
A practical guide for trust and safety teams, platform engineers, and policy authors who need to standardize refusal behavior across multiple model providers.
Do not use this prompt for a single-model deployment where a native safety policy is sufficient, or for generating the initial policy from scratch without defined categories. This prompt assumes you already have a set of refusal categories, harm taxonomies, or content policy documents that need to be translated into model-executable instructions. If you are starting from zero—with no existing policy categories, no defined harm types, and no refusal examples—you should first complete a policy authoring workflow before attempting cross-model portability. The prompt also assumes you have access to the target model's system instruction format and understand its instruction-following characteristics; without this context, the generated policy may not bind correctly.
The output of this prompt is a structured refusal policy specification, not a final system prompt ready for deployment. You should treat the generated specification as an intermediate artifact that requires human review, cross-model testing with your refusal consistency evals, and adaptation to your specific product context. The specification includes refusal triggers mapped to each policy category, safe alternative language templates, and boundary communication rules that tell the model what to say when a request falls into a gray area. After generating the specification, validate it against your golden refusal test cases, check for over-refusal on legitimate requests, and verify that the safe alternative language aligns with your product's tone and user experience goals.
Use Case Fit
Where this prompt works and where it does not. Use this to decide if the Refusal Policy Portability Prompt Template is the right tool for your cross-model safety deployment.
Good Fit: Multi-Provider Safety Standardization
Use when: you are deploying the same product feature across OpenAI, Anthropic, and open-weight models and need refusal behavior to be consistent. Guardrail: Run cross-model refusal consistency evals before production to confirm that safe alternatives and boundary communication map correctly to each provider's instruction format.
Bad Fit: Single-Model, Static Policy
Avoid when: you are only deploying on one model family with no migration plans. Guardrail: Use a simpler refusal policy prompt without the portability overhead. The cross-model mapping adds complexity that isn't justified for single-provider deployments.
Required Input: Refusal Category Taxonomy
What to watch: The prompt requires a clear, pre-defined taxonomy of refusal categories (e.g., illegal content, self-harm, regulated advice). Guardrail: Validate that your taxonomy is complete and unambiguous before generating the portability specification. Missing categories will cause silent policy gaps on some models.
Required Input: Safe Alternative Language Templates
What to watch: Each refusal category needs a corresponding safe alternative response that redirects users constructively. Guardrail: Test safe alternatives for tone consistency across models. A redirect that sounds helpful on one model may sound dismissive on another.
Operational Risk: Silent Refusal Drift
Risk: A model upgrade or provider change can cause refusal policies to degrade silently—either over-refusing safe requests or under-refusing harmful ones. Guardrail: Implement automated cross-model refusal consistency evals that run on every model version change and flag threshold violations before they reach users.
Operational Risk: Boundary Communication Mismatch
Risk: How a model communicates the boundary of a refusal (e.g., 'I can't help with that' vs. 'I'm not able to provide medical advice') varies by provider and can confuse users. Guardrail: Include boundary communication templates in your portability spec and validate them with user-facing acceptance tests across all target models.
Copy-Ready Prompt Template
A copy-ready template for generating a cross-model refusal policy specification from your existing policy data.
This template is designed to be the single source for generating a refusal policy specification that can be ported across multiple model families. It takes your existing policy categories, safe alternative language, and boundary communication rules as input and produces a structured specification that maps each refusal category to the instruction format of your target models. Use this as the starting point for your policy portability pipeline.
markdownYou are a refusal policy architect. Your task is to produce a refusal policy specification that can be adapted across multiple model providers while preserving consistent refusal behavior. ## INPUT DATA ### Current Refusal Policy [POLICY_DOCUMENT] ### Refusal Categories [REFUSAL_CATEGORIES] ### Safe Alternative Language [SAFE_ALTERNATIVES] ### Boundary Communication Rules [BOUNDARY_RULES] ### Target Models [TARGET_MODELS] ### Risk Tolerance Level [RISK_LEVEL] ## OUTPUT SCHEMA Produce a JSON object with the following structure: ```json { "policy_specification": { "version": "string", "last_updated": "ISO8601 timestamp", "refusal_categories": [ { "category_id": "string", "category_name": "string", "description": "string", "trigger_conditions": ["string"], "refusal_template": "string", "safe_alternative_template": "string", "severity": "critical|high|medium|low", "requires_human_review": boolean, "model_specific_adaptations": { "[MODEL_NAME]": { "instruction_format": "string", "parsing_notes": "string", "known_sensitivity_flags": ["string"] } } } ], "boundary_communication": { "default_refusal": "string", "uncertainty_disclosure": "string", "escalation_path": "string" }, "cross_model_consistency_checks": [ { "check_id": "string", "description": "string", "test_input": "string", "expected_behavior": "string", "acceptable_variance": "string" } ] } }
CONSTRAINTS
- Map every refusal category to each target model's instruction format.
- Include known sensitivity differences between models for each category.
- Define consistency checks that can be run as automated evals.
- Flag categories where model behavior is known to diverge significantly.
- Preserve the original policy intent; do not weaken or strengthen boundaries.
- For high-severity categories, require human review confirmation.
To adapt this template, replace each square-bracket placeholder with your actual policy data. The [POLICY_DOCUMENT] should contain your full current refusal policy text. [REFUSAL_CATEGORIES] should list each category of request you refuse, with examples. [SAFE_ALTERNATIVES] should contain the language you use to redirect users to acceptable alternatives. [BOUNDARY_RULES] should define how your system communicates its limitations. [TARGET_MODELS] should be a list of model identifiers you need to support. [RISK_LEVEL] should be set to low, medium, high, or critical to calibrate the conservatism of the generated specification.
After generating the specification, validate it by running the cross-model consistency checks against each target model. Pay special attention to categories flagged with known sensitivity differences. For high-severity refusal categories, always include a human review step before deploying the adapted instructions to production. Store the output as a versioned artifact in your policy repository alongside the evals that prove behavioral equivalence across models.
Prompt Variables
Placeholders required to make the Refusal Policy Portability Prompt Template work across model families. Replace each placeholder with concrete values before execution.
| Placeholder | Purpose | Example | Validation Notes |
|---|---|---|---|
[REFUSAL_CATEGORIES] | List of disallowed request types the assistant must refuse | Violence, hate speech, self-harm, illegal acts, PII extraction | Must be a structured list with clear category boundaries; validate no overlap between categories |
[SAFE_ALTERNATIVE_TEMPLATES] | Per-category safe response language the assistant should use instead of raw refusal | For self-harm: 'I can't help with that. If you're in crisis, contact [RESOURCE].' | Each category must have a corresponding template; validate template completeness with category-to-template mapping check |
[BOUNDARY_COMMUNICATION_RULES] | Instructions for how the assistant communicates refusal boundaries without leaking policy details | Never quote policy text verbatim. Use 'I'm not able to help with that' not 'Policy 3.2 prohibits' | Validate that boundary rules do not contain extractable policy language; red-team for policy leakage |
[TARGET_MODEL_FAMILY] | Model provider or architecture the refusal policy is being adapted for | claude-3, gpt-4, gemini, llama-3, command-r | Must match a supported provider in the adaptation mapping; validate against known model instruction formats |
[PROVIDER_INSTRUCTION_FORMAT] | Structural conventions for system instructions on the target model | Claude: XML-wrapped system block; GPT: system message role; Gemini: system_instruction field | Validate format matches target model's documented instruction method; test with minimal policy first |
[REFUSAL_CONSISTENCY_THRESHOLD] | Minimum acceptable cross-model refusal agreement rate | 0.95 | Must be between 0.0 and 1.0; validate with pairwise refusal agreement calculation across test cases |
[DISALLOWED_EDGE_CASES] | Ambiguous or borderline requests that test refusal boundary precision | Requests using euphemisms, indirect language, roleplay framing, academic hypotheticals | Each edge case must have expected refusal or non-refusal label; validate edge case coverage against refusal categories |
[ESCALATION_PATH] | What happens when the assistant cannot confidently classify a request | Flag for human review; respond with 'I need to check before I can help with that' | Validate escalation path is reachable from refusal logic; test with boundary-pushing inputs that fall between categories |
Implementation Harness Notes
How to wire the refusal policy portability prompt into a production application with validation, logging, and cross-model consistency checks.
The refusal policy portability prompt is designed to be called programmatically as part of a policy migration pipeline, not as a one-off chat interaction. The application layer should treat this prompt as a policy compiler: it takes a source refusal policy and target model specifications as inputs, then produces a structured refusal specification that can be injected into the target model's system prompt. The harness must handle input validation, output parsing, cross-model consistency evaluation, and human review gates before the generated policy reaches production. This is a high-stakes workflow because refusal policy failures can expose users to harmful content or cause over-refusal that breaks core product functionality.
Integration pattern: Wrap the prompt in a service that accepts a source_policy (the refusal rules written for the original model), target_model (provider and model identifier), and target_model_conventions (instruction format, delimiter style, priority markers). The service should validate inputs against a schema—rejecting empty policies, unsupported target models, or missing convention fields—before constructing the prompt. After the model returns a response, parse the output against the expected refusal specification schema (categories, refusal language, safe alternatives, boundary communication). If parsing fails, retry once with a repair prompt that includes the parse error. Log every generation attempt, the parsed specification, and any validation failures for audit and debugging. For high-risk deployments, route the generated specification to a human review queue where a policy reviewer can approve, reject, or modify the output before it is deployed to production.
Cross-model consistency evaluation: The harness should include an automated evaluation step that tests the generated refusal policy against a golden set of test inputs spanning disallowed requests, borderline cases, and clearly allowed requests. Run these test inputs through the target model with the generated policy injected, then compare refusal decisions against expected outcomes. Track false-positive refusals (safe requests incorrectly refused), false-negative refusals (unsafe requests incorrectly allowed), and refusal style consistency (tone, safe alternative language). Set thresholds for each metric and block deployment if thresholds are exceeded. Store eval results alongside the generated policy for traceability. Model choice: Use a model with strong instruction-following for the generation step (GPT-4o, Claude 3.5 Sonnet) and the same target model for evaluation to ensure behavioral fidelity. Avoid using smaller or cheaper models for generation if refusal boundary precision is critical.
What to avoid: Do not deploy generated refusal policies without running the cross-model consistency eval suite. Do not assume that a policy that parses correctly will behave correctly—parsing success is not behavioral success. Do not skip human review for policies governing high-severity harm categories (CSAM, self-harm, violence). Do not use the same test inputs for generation and evaluation; maintain a held-out eval set. Finally, version every generated policy artifact with the source policy hash, target model, generation timestamp, and reviewer identity so that any production incident can be traced back to its origin.
Expected Output Contract
Fields, format, and validation rules for the refusal policy specification generated by the Refusal Policy Portability Prompt Template. Use this contract to validate the model output before downstream processing or cross-model deployment.
| Field or Element | Type or Format | Required | Validation Rule |
|---|---|---|---|
refusal_categories | Array of objects | Must contain at least one category. Each object must include id, label, and examples fields. id must be a non-empty string matching ^[a-z_]+$. | |
refusal_categories[].id | String | Must be unique within the array. Must be lowercase snake_case. Must not contain model-specific tokens. | |
refusal_categories[].label | String | Must be a human-readable phrase under 80 characters. Must not contain markdown or HTML. | |
refusal_categories[].examples | Array of strings | Must contain at least 2 example user requests that trigger this refusal category. Each string must be under 200 characters. | |
safe_alternative_language | Object | Must include default and per_category fields. default must be a non-empty string under 300 characters. | |
safe_alternative_language.default | String | Must be a refusal template that does not reveal system instructions. Must include [ALTERNATIVE] placeholder if redirection is expected. | |
safe_alternative_language.per_category | Object | Keys must match refusal_categories[].id values. Each value must be a string under 300 characters. Null allowed if no category-specific override exists. | |
boundary_communication_rules | Array of objects | Must contain at least one rule. Each object must include condition, response, and escalation fields. | |
boundary_communication_rules[].condition | String | Must describe a detectable condition using concrete signals, not vague intent. Must be parseable as a boolean check. | |
boundary_communication_rules[].response | String | Must be a refusal or redirection message under 300 characters. Must not leak system prompt content. | |
boundary_communication_rules[].escalation | String | Must be one of: none, human_review, flag_for_audit, block_and_report. Default is none. | |
provider_adaptations | Object | Must include keys for each target provider specified in [TARGET_PROVIDERS]. Each value must be an object with instruction_format and notes fields. | |
provider_adaptations.[provider].instruction_format | String | Must match the provider's documented system instruction format. Must not exceed 2000 characters. Must preserve all refusal categories from the base specification. | |
provider_adaptations.[provider].notes | String | Must describe any provider-specific behavior differences or known limitations. Null allowed if no differences are expected. | |
cross_model_consistency_evals | Array of objects | Must contain at least 3 test cases. Each object must include input, expected_category, and acceptable_variance fields. | |
cross_model_consistency_evals[].input | String | Must be a realistic user request that tests a refusal boundary. Must be under 300 characters. | |
cross_model_consistency_evals[].expected_category | String | Must match a refusal_categories[].id value or be none if refusal is not expected. | |
cross_model_consistency_evals[].acceptable_variance | String | Must be one of: exact_match, same_category, any_refusal, no_refusal. Describes how much deviation is tolerated across models. |
Common Failure Modes
Refusal policies break silently when ported across models. These are the most common failure modes and how to guard against them before they reach production.
Silent Policy Omission
What to watch: The target model ignores refusal categories entirely because the instruction format doesn't match its training distribution. A policy written as a natural-language paragraph for one model may be treated as background context by another. Guardrail: Structure refusal rules as explicit conditional directives with clear triggers. Test each refusal category in isolation before combining them. Use a cross-model equivalence eval that flags any model that fails to refuse a known-disallowed request.
Over-Refusal Creep
What to watch: A refusal policy that was balanced on the source model becomes overly aggressive on the target model, blocking legitimate requests. This happens when the target model interprets boundary language more broadly or applies refusal heuristics to adjacent topics. Guardrail: Include explicit safe-harbor examples in the policy specification. Run a false-positive test suite with borderline-but-allowed requests. Set a maximum acceptable over-refusal rate and flag models that exceed it.
Refusal Style Inconsistency
What to watch: The model refuses correctly but uses a tone, format, or explanation style that violates product requirements. One model may respond with a terse block while another provides dangerous detail about why it won't comply. Guardrail: Specify refusal response templates with required elements: acknowledgment, boundary statement, safe alternative if applicable. Test refusal outputs for tone, length, and information leakage. Use a style consistency eval that compares refusal responses across models.
Safe Alternative Drift
What to watch: The policy instructs the model to offer safe alternatives when refusing, but the target model either omits alternatives entirely or suggests alternatives that violate the policy intent. Guardrail: Define safe alternative categories explicitly in the policy. Include examples of acceptable and unacceptable alternatives. Test that alternatives offered after refusal don't reintroduce the disallowed content through indirection.
Multi-Turn Policy Decay
What to watch: Refusal behavior holds on the first turn but degrades across a conversation as the user applies pressure, reframes the request, or exploits context-window shifts. Some models are more susceptible to multi-turn jailbreaking than others. Guardrail: Include multi-turn persistence instructions that reassert refusal boundaries each turn. Test with adversarial multi-turn scenarios: rephrasing, hypothetical framing, role-play, and context-stuffing attacks. Measure refusal consistency across turn 1, turn 5, and turn 10.
Boundary Communication Leakage
What to watch: The model's refusal response reveals policy internals, category definitions, or boundary logic that an adversary can use to craft bypasses. This is especially dangerous when porting detailed policy specifications that the source model handled discreetly. Guardrail: Add an output constraint that forbids quoting or paraphrasing the refusal policy itself. Test refusal responses for policy leakage by scanning for category names, threshold values, and instruction fragments. Use a red-team probe that specifically requests policy details after a refusal.
Evaluation Rubric
Use this rubric to evaluate the quality of a generated refusal policy specification before deploying it to production. Each criterion targets a specific failure mode common in cross-model policy portability.
| Criterion | Pass Standard | Failure Signal | Test Method |
|---|---|---|---|
Refusal Category Completeness | All categories from [SOURCE_POLICY] are mapped to a target-model equivalent without omission. | A category from the source policy is missing in the output or is mapped to a generic catch-all like 'other'. | Diff the list of categories in [SOURCE_POLICY] against the output. Flag any missing entries. |
Safe Alternative Language | Every refusal category includes a concrete, non-evasive safe alternative that aligns with [PRODUCT_VOICE]. | Safe alternative is missing, is a generic disclaimer, or contradicts the refusal itself. | For each refusal category, assert that the safe alternative field is non-empty and contains a domain-specific suggestion. |
Model-Specific Instruction Format | The output uses the structural conventions defined in [TARGET_MODEL_FORMAT] (e.g., XML tags, system/user message separation). | The output is a single block of prose with no structural delimiters or uses the source model's format. | Validate the output structure against the schema defined in [TARGET_MODEL_FORMAT]. Check for required delimiters. |
Boundary Communication Clarity | The policy clearly distinguishes between a hard refusal, a request for clarification, and an escalation to a human. | The output uses the same tone for a minor clarification request and a hard disallowed-content refusal. | Parse the output for distinct boundary markers. Confirm at least two different response templates exist for different severity levels. |
Cross-Model Consistency Score | A pairwise comparison using [EVAL_JUDGE_PROMPT] shows >90% behavioral equivalence with the source policy on a golden test set. | The consistency score drops below 90% or the judge identifies a critical behavioral divergence. | Run [GOLDEN_TEST_SET] through both the source and target prompts. Score the output pairs using [EVAL_JUDGE_PROMPT]. |
Anti-Injection Hardening | The policy specification is wrapped in a defensive structure (e.g., delimiters, priority anchors) as defined in [HARDENING_RULES]. | The output contains raw policy instructions without any structural defense against prompt injection. | Check for the presence of required defensive structures from [HARDENING_RULES]. Run a basic extraction attack from [RED_TEAM_TESTS]. |
Source Grounding | Every adapted rule can be traced back to a specific clause in [SOURCE_POLICY] via a citation or mapping key. | A rule appears in the output that has no clear origin in the source policy, indicating hallucination. | For each rule in the output, require a citation to [SOURCE_POLICY]. Flag any rule without a valid trace. |
Output Schema Validity | The final output is a valid JSON object that strictly conforms to [OUTPUT_SCHEMA]. | The output is not valid JSON, contains extra keys, or has missing required fields. | Parse the output with a JSON validator. Validate the structure against [OUTPUT_SCHEMA] using a schema validator. |
Enabling Efficiency, Speed & Accuracy
Intelligent Analysis, Decision & Execution
We build AI systems for teams that need search across company data, workflow automation across tools, or AI features inside products and internal software.
Talk to Us
Search across company data
Give teams answers from docs, tickets, runbooks, and product data with sources and permissions.
Useful when people spend too long searching or get different answers from different systems.

Automate internal workflows
Use AI to route work, draft outputs, trigger actions, and keep approvals and logs in place.
Useful when repetitive work moves across multiple tools and teams.

Add AI to products and internal tools
Build assistants, guided actions, or decision support into the software your team or customers already use.
Useful when AI needs to be part of the product, not a separate tool.
Adapt This Prompt
How to adapt
Start with the base refusal policy template but relax strict schema requirements. Use a single model for initial testing and focus on getting refusal categories and safe alternative language right before adding cross-model mapping. Replace the [TARGET_MODEL_FAMILY] placeholder with a single provider and skip the cross-model consistency eval section.
Watch for
- Overly broad refusal categories that block legitimate requests
- Missing safe alternative language, causing the model to refuse without offering a path forward
- Policy drift when moving from one model to another without the structural mapping rules

About the author
Prasad Kumkar
CEO & MD, Inference Systems
Prasad Kumkar is the CEO & MD of Inference Systems and writes about AI systems architecture, LLM infrastructure, model serving, evaluation, and production deployment. Over 5+ years, he has worked across computer vision models, L5 autonomous vehicle systems, and LLM research, with a focus on taking complex AI ideas into real-world engineering systems.
His work and writing cover AI systems, large language models, AI agents, multimodal systems, autonomous systems, inference optimization, RAG, evaluation, and production AI engineering.
Partnered with leading AI, data, and software stack.
How We Work
Custom AI workflows for your Business
One-fit-all AI don't work for modern businesses. At Inferensys, we aim to understand your business & custom requirements; which we use to define most efficient agentic workflows, the data, and the tools for your business.
01
Review the use case
We understand the task, the users, and where AI can actually help.
Read more02
Pick the right approach
We define what needs search, automation, or product integration.
Read more03
Build the first useful version
We implement the part that proves the value first.
Read more04
Improve from there
We add the checks and visibility needed to keep it useful.
Read moreThe first call is a practical review of your use case and the right next step.
Talk to Us