# injection evaluation **Threshold 0.02 (calibrated on the validation split, objective recall_at_fpr).** The config default of 0.5 scored 0.986 against 0.991 for the calibrated value, on validation. Every table below is on test, at the calibrated threshold. > the chosen threshold 0.02 is the lowest value in the sweep, so the scores are compressed toward zero and this is underfitting rather than a calibration success. Check average precision before trusting the F1. ## Per language | Language | Support | P | R | F1 | Notes | |---|---|---|---|---|---| | `bg` Bulgarian | 41 | 1.000 | 1.000 | 1.000 | | | `cs` Czech | 42 | 0.955 | 1.000 | 0.977 | | | `da` Danish | 41 | 0.976 | 1.000 | 0.988 | | | `de` German | 42 | 1.000 | 1.000 | 1.000 | | | `el` Greek | 42 | 1.000 | 1.000 | 1.000 | | | `en` English | 41 | 1.000 | 1.000 | 1.000 | | | `es` Spanish | 40 | 0.976 | 1.000 | 0.988 | | | `et` Estonian | 41 | 1.000 | 1.000 | 1.000 | | | `fi` Finnish | 42 | 1.000 | 1.000 | 1.000 | | | `fr` French | 41 | 1.000 | 1.000 | 1.000 | | | `ga` Irish | 42 | 0.976 | 0.976 | 0.976 | | | `hr` Croatian | 42 | 0.977 | 1.000 | 0.988 | | | `hu` Hungarian | 42 | 0.955 | 1.000 | 0.977 | | | `it` Italian | 42 | 1.000 | 1.000 | 1.000 | | | `lt` Lithuanian | 42 | 1.000 | 1.000 | 1.000 | | | `lv` Latvian | 41 | 0.976 | 1.000 | 0.988 | | | `mt` Maltese | 42 | 0.804 | 0.976 | 0.882 | not in base model pretraining | | `nl` Dutch | 41 | 1.000 | 0.976 | 0.988 | | | `pl` Polish | 41 | 1.000 | 1.000 | 1.000 | | | `pt` Portuguese | 42 | 0.977 | 1.000 | 0.988 | | | `ro` Romanian | 42 | 0.977 | 1.000 | 0.988 | | | `sk` Slovak | 41 | 1.000 | 1.000 | 1.000 | | | `sl` Slovenian | 42 | 0.977 | 1.000 | 0.988 | | | `sv` Swedish | 41 | 1.000 | 1.000 | 1.000 | | | `tr` Turkish | 42 | 1.000 | 1.000 | 1.000 | | | `az` Azerbaijani | 42 | 1.000 | 1.000 | 1.000 | | The base-model note is a fact about pretraining, not a cause of the score beside it. `nsfw` Maltese carried the same note at 0.000 and reached 1.000 on corpus size alone, with nothing about the base model changed. Check how many examples a weak score rests on before reaching for this. ## Per register | Register | Support | P | R | F1 | FPR | |---|---|---|---|---|---| | `encoded_payload` | 155 | 1.000 | 1.000 | 1.000 | 0.000 | | `hypothetical_framing` | 156 | 1.000 | 0.994 | 0.997 | 0.000 | | `ignore_instructions` | 155 | 1.000 | 1.000 | 1.000 | 0.000 | | `instruction_in_document` | 155 | 1.000 | 0.994 | 0.997 | 0.000 | | `instruction_in_tool_output` | 148 | 1.000 | 0.993 | 0.997 | 0.000 | | `meta_question` | 0 | 0.000 | 0.000 | 0.000 | 0.012 | | `mundane_account_access` | 0 | 0.000 | 0.000 | 0.000 | 0.000 | | `mundane_informational` | 0 | 0.000 | 0.000 | 0.000 | 0.000 | | `mundane_operational` | 0 | 0.000 | 0.000 | 0.000 | 0.005 | | `mundane_transactional` | 0 | 0.000 | 0.000 | 0.000 | 0.005 | | `ordinary_instruction` | 0 | 0.000 | 0.000 | 0.000 | 0.000 | | `ordinary_question` | 0 | 0.000 | 0.000 | 0.000 | 0.006 | | `persona_override` | 155 | 1.000 | 1.000 | 1.000 | 0.000 | | `quoted_attack` | 0 | 0.000 | 0.000 | 0.000 | 0.009 | | `roleplay_benign` | 0 | 0.000 | 0.000 | 0.000 | 0.012 | | `security_discussion` | 0 | 0.000 | 0.000 | 0.000 | 0.009 | | `system_prompt_extraction` | 156 | 1.000 | 1.000 | 1.000 | 0.000 | | `technical_identifiers` | 0 | 0.000 | 0.000 | 0.000 | 0.006 | | `technical_payload` | 0 | 0.000 | 0.000 | 0.000 | 0.006 | ## Known weaknesses The three weakest languages by F1: `mt` at 0.882, `ga` at 0.976, `cs` at 0.977. These are published rather than dropped. A coverage table with the bad rows removed is not a coverage table.