diff --git a/backend/onyx/db/persona.py b/backend/onyx/db/persona.py index b879e426cf3..ae37b3f50a6 100644 --- a/backend/onyx/db/persona.py +++ b/backend/onyx/db/persona.py @@ -209,13 +209,21 @@ def create_update_persona( if not all_prompt_ids: raise ValueError("No prompt IDs provided") + is_default_persona: bool | None = create_persona_request.is_default_persona # Default persona validation if create_persona_request.is_default_persona: if not create_persona_request.is_public: raise ValueError("Cannot make a default persona non public") - if user and user.role != UserRole.ADMIN: - raise ValueError("Only admins can make a default persona") + if user: + # Curators can edit default personas, but not make them + if ( + user.role == UserRole.CURATOR + or user.role == UserRole.GLOBAL_CURATOR + ): + is_default_persona = None + elif user.role != UserRole.ADMIN: + raise ValueError("Only admins can make a default persona") persona = upsert_persona( persona_id=persona_id, @@ -241,7 +249,7 @@ def create_update_persona( num_chunks=create_persona_request.num_chunks, llm_relevance_filter=create_persona_request.llm_relevance_filter, llm_filter_extraction=create_persona_request.llm_filter_extraction, - is_default_persona=create_persona_request.is_default_persona, + is_default_persona=is_default_persona, ) versioned_make_persona_private = fetch_versioned_implementation( @@ -428,7 +436,7 @@ def upsert_persona( remove_image: bool | None = None, search_start_date: datetime | None = None, builtin_persona: bool = False, - is_default_persona: bool = False, + is_default_persona: bool | None = None, label_ids: list[int] | None = None, chunks_above: int = CONTEXT_CHUNKS_ABOVE, chunks_below: int = CONTEXT_CHUNKS_BELOW, @@ -523,7 +531,11 @@ def upsert_persona( existing_persona.is_visible = is_visible existing_persona.search_start_date = search_start_date existing_persona.labels = labels or [] - existing_persona.is_default_persona = is_default_persona + existing_persona.is_default_persona = ( + is_default_persona + if is_default_persona is not None + else existing_persona.is_default_persona + ) # Do not delete any associations manually added unless # a new updated list is provided if document_sets is not None: @@ -575,7 +587,9 @@ def upsert_persona( display_priority=display_priority, is_visible=is_visible, search_start_date=search_start_date, - is_default_persona=is_default_persona, + is_default_persona=is_default_persona + if is_default_persona is not None + else False, labels=labels or [], ) db_session.add(new_persona)