{"record":{"id":"de57559fba717fd1","repo":"invoke-ai/InvokeAI","slug":"at-least-one-krea-2-text-conditioning-is-required","errorCode":null,"errorMessage":"At least one Krea-2 text conditioning is required.","messagePattern":"At least one Krea-2 text conditioning is required\\.","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"invokeai/backend/krea2/regional_prompting.py","lineNumber":54,"sourceCode":"    def attention_mask_numel(self) -> int:\n        if not self.has_regional_masks:\n            return 0\n        total_seq_len = self.regional_text_conditioning.prompt_embeds.shape[1] + self.image_seq_len\n        return total_seq_len**2\n\n    @property\n    def attention_mask_build_scratch_numel(self) -> int:\n        \"\"\"Peak boolean scratch allocation used while constructing the image-to-image attention block.\"\"\"\n        if not self.has_regional_masks:\n            return 0\n        return self.image_seq_len**2\n\n    @classmethod\n    def from_text_conditionings(\n        cls, text_conditionings: list[Krea2TextConditioning], image_seq_len: int\n    ) -> \"Krea2RegionalPromptingExtension\":\n        if not text_conditionings:\n            raise ValueError(\"At least one Krea-2 text conditioning is required.\")\n\n        prompt_embeds: list[torch.Tensor] = []\n        image_masks: list[torch.Tensor | None] = []\n        embedding_ranges: list[Range] = []\n        current_start = 0\n        for conditioning in text_conditionings:\n            sequence_length = conditioning.prompt_embeds.shape[1]\n            if conditioning.mask is not None and conditioning.mask.numel() != image_seq_len:\n                raise ValueError(\n                    f\"Krea-2 regional mask has {conditioning.mask.numel()} values, expected {image_seq_len}.\"\n                )\n            prompt_embeds.append(conditioning.prompt_embeds)\n            image_masks.append(conditioning.mask)\n            embedding_ranges.append(Range(start=current_start, end=current_start + sequence_length))\n            current_start += sequence_length\n\n        regional_text_conditioning = Krea2RegionalTextConditioning(\n            prompt_embeds=torch.cat(prompt_embeds, dim=1),","sourceCodeStart":36,"sourceCodeEnd":72,"githubUrl":"https://github.com/invoke-ai/InvokeAI/blob/0b6a024f2ff6a86bfb953dcdb9cc504ef7397a06/invokeai/backend/krea2/regional_prompting.py#L36-L72","documentation":"Krea2RegionalPromptingExtension.from_text_conditionings assembles concatenated embeddings and embedding ranges from the supplied text conditionings. With an empty list there is nothing to build a regional layout from, so it raises ValueError immediately.","triggerScenarios":"Calling from_text_conditionings([], image_seq_len=N) — e.g. the regional-prompting path was enabled but regional prompt extraction produced zero conditionings, or a filter dropped all conditionings before this call.","commonSituations":"Regional prompting toggle enabled with no regional prompts defined; a bug upstream that skips adding the base conditioning; passing an empty slice of conditionings.","solutions":["Ensure at least one Krea2TextConditioning (typically the global/base prompt) is passed.","Check upstream code that filters or splits prompts into regional conditionings and fix the empty-list case.","Disable regional prompting if you only have a single non-regional prompt.","Assert len(text_conditionings) > 0 before calling the classmethod."],"exampleFix":"// before\next = Krea2RegionalPromptingExtension.from_text_conditionings(regions, image_seq_len)  # regions == []\n// after\nif not regions:\n    regions = [default_text_conditioning]\next = Krea2RegionalPromptingExtension.from_text_conditionings(regions, image_seq_len)","handlingStrategy":"validation","validationCode":"if not text_conditionings:\n    raise ValueError('Regional prompting enabled but no text conditionings provided; add at least the base prompt')\next = Krea2RegionalPromptingExtension.from_text_conditionings(text_conditionings, image_seq_len)","typeGuard":"def can_build_regional_extension(conds) -> bool:\n    return isinstance(conds, (list, tuple)) and len(conds) > 0","tryCatchPattern":"try:\n    ext = Krea2RegionalPromptingExtension.from_text_conditionings(conds, image_seq_len)\nexcept ValueError as e:\n    if 'At least one Krea-2 text conditioning' in str(e):\n        ext = None  # fall back to non-regional generation\n    else:\n        raise","preventionTips":["Always include the global/base prompt as the first conditioning","Check the regional-prompt extraction step for silent empty results","Skip regional prompting entirely when there is only one prompt","Unit-test the prompt-splitting path to never emit an empty list"],"tags":["krea2","regional-prompting","validation"],"backgroundTag":"empty-required-input","analyzedSha":"0b6a024f2ff6a86bfb953dcdb9cc504ef7397a06","analyzedAt":"2026-08-29T04:46:49.967Z","schemaVersion":2},"datasetVersion":"2026-08-29T07:17:48.351Z"}