invoke-ai/InvokeAI · error · ValueError

The selected system prompt '{system_prompt_id}' is not acces

Error message

The selected system prompt '{system_prompt_id}' is not accessible to this user.

What it means

In multiuser mode, after resolving the record, the code enforces access control: the queue item's user must own the system prompt, the prompt must be public, or the user must be an admin. Otherwise a ValueError is raised to prevent using another user's private prompt.

Source

Thrown at invokeai/app/invocations/text_llm.py:165

        un-privatizable here while the REST layer still 403s on it. The seeded defaults are
        `is_public=TRUE`, so `record.is_public` already covers them.
        (`call_saved_workflow` can keep its default-category clause: workflow `category=default`
        is a real column value, not an overloaded owner id.)
        """
        system_prompt_id = self.system_prompt.system_prompt_id
        try:
            record = context._services.system_prompt_records.get(system_prompt_id)
        except SystemPromptNotFoundError as e:
            raise ValueError(f"The selected system prompt '{system_prompt_id}' could not be found.") from e

        config = context._services.configuration
        if config.multiuser:
            queue_user_id = context._data.queue_item.user_id
            user = context._services.users.get(queue_user_id)
            is_admin = bool(user and user.is_admin)
            is_owner = record.user_id == queue_user_id
            if not (is_owner or record.is_public or is_admin):
                raise ValueError(f"The selected system prompt '{system_prompt_id}' is not accessible to this user.")

        return record

    @torch.no_grad()
    def invoke(self, context: InvocationContext) -> StringOutput:
        record = self._resolve_system_prompt(context)
        output = _run_text_llm(
            context=context,
            text_llm_model=self.text_llm_model,
            prompt=self.prompt,
            system_prompt=record.content,
            max_tokens=self.max_tokens,
            seed=self.seed,
        )
        return StringOutput(value=output)

View on GitHub (pinned to 0b6a024f2f)

Solutions

  1. Have the prompt owner set it to public so other users' queue items can use it.
  2. Log in / enqueue as the owning user or an admin account.
  3. Duplicate the prompt into your own account and point the workflow at your copy.
  4. Disable multiuser mode if this is a single-user install and access control is unnecessary.

Example fix

// before
record.is_public = False; record.user_id = "admin"
// after
record.is_public = True  # or pick a prompt owned by the queue user
Defensive patterns

Strategy: validation

Validate before calling

record = services.system_prompt_records.get(node.system_prompt.system_prompt_id)
user = services.users.get(queue_user_id)
if not (record.is_public or record.user_id == queue_user_id or (user and user.is_admin)):
    raise PermissionError("Queue user cannot access this system prompt")

Type guard

def can_access(record, user_id: str, is_admin: bool) -> bool:
    return record.is_public or record.user_id == user_id or is_admin

Try / catch

try:
    result = invoke(context)
except ValueError as e:
    if "not accessible to this user" in str(e):
        duplicate_prompt_for_user(graph, queue_user_id)
        retry(context)
    else:
        raise

Prevention

When it happens

Trigger: A non-admin user's queue item references a private system prompt owned by someone else (record.user_id != queue_user_id, record.is_public False, user.is_admin False) while config.multiuser is enabled.

Common situations: Sharing workflow JSON between users of a shared multiuser instance; an admin building workflows for regular users using admin-owned private prompts; changing ownership of prompts after user cleanup.

Understand the failure class

Background: Permission denied / not authorized / 403 Forbidden: access-control rejections when the caller lacks the required role, grant, or ownership — this error's family across 18 libraries.

Related errors


AI-assisted analysis of invoke-ai/InvokeAI@0b6a024f2f (2026-08-29). Data as JSON: /api/errors/a24b9a983ff28e28. Report an issue: GitHub.