Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

update organization #3118

Merged
merged 10 commits into from
Nov 13, 2024
Merged
Show file tree
Hide file tree
Changes from 9 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
"""default chosen assistants to none

Revision ID: 26b931506ecb
Revises: 2daa494a0851
Create Date: 2024-11-12 13:23:29.858995

"""
from alembic import op
import sqlalchemy as sa
from sqlalchemy.dialects import postgresql

# revision identifiers, used by Alembic.
revision = "26b931506ecb"
down_revision = "2daa494a0851"
branch_labels = None
depends_on = None


def upgrade() -> None:
op.add_column(
"user", sa.Column("chosen_assistants_new", postgresql.JSONB(), nullable=True)
)

op.execute(
"""
UPDATE "user"
SET chosen_assistants_new =
CASE
WHEN chosen_assistants = '[-2, -1, 0]' THEN NULL
ELSE chosen_assistants
END
"""
)

op.drop_column("user", "chosen_assistants")

op.alter_column(
"user", "chosen_assistants_new", new_column_name="chosen_assistants"
)


def downgrade() -> None:
op.add_column(
"user",
sa.Column(
"chosen_assistants_old",
postgresql.JSONB(),
nullable=False,
server_default="[-2, -1, 0]",
),
)

op.execute(
"""
UPDATE "user"
SET chosen_assistants_old =
CASE
WHEN chosen_assistants IS NULL THEN '[-2, -1, 0]'::jsonb
ELSE chosen_assistants
END
"""
)

op.drop_column("user", "chosen_assistants")

op.alter_column(
"user", "chosen_assistants_old", new_column_name="chosen_assistants"
)
4 changes: 2 additions & 2 deletions backend/danswer/db/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -126,8 +126,8 @@ class User(SQLAlchemyBaseUserTableUUID, Base):

# if specified, controls the assistants that are shown to the user + their order
# if not specified, all assistants are shown
chosen_assistants: Mapped[list[int]] = mapped_column(
postgresql.JSONB(), nullable=False, default=[-2, -1, 0]
chosen_assistants: Mapped[list[int] | None] = mapped_column(
postgresql.JSONB(), nullable=True, default=None
)
visible_assistants: Mapped[list[int]] = mapped_column(
postgresql.JSONB(), nullable=False, default=[]
Expand Down
1 change: 0 additions & 1 deletion backend/danswer/db/persona.py
Original file line number Diff line number Diff line change
Expand Up @@ -743,5 +743,4 @@ def delete_persona_by_name(
)

db_session.execute(stmt)

db_session.commit()
22 changes: 12 additions & 10 deletions backend/danswer/server/manage/users.py
Original file line number Diff line number Diff line change
Expand Up @@ -630,31 +630,25 @@ def update_user_assistant_list(
db_session.commit()


def update_assistant_list(
def update_assistant_visibility(
preferences: UserPreferences, assistant_id: int, show: bool
) -> UserPreferences:
visible_assistants = preferences.visible_assistants or []
hidden_assistants = preferences.hidden_assistants or []
chosen_assistants = preferences.chosen_assistants or []

if show:
if assistant_id not in visible_assistants:
visible_assistants.append(assistant_id)
if assistant_id in hidden_assistants:
hidden_assistants.remove(assistant_id)
if assistant_id not in chosen_assistants:
chosen_assistants.append(assistant_id)
else:
if assistant_id in visible_assistants:
visible_assistants.remove(assistant_id)
if assistant_id not in hidden_assistants:
hidden_assistants.append(assistant_id)
if assistant_id in chosen_assistants:
chosen_assistants.remove(assistant_id)

preferences.visible_assistants = visible_assistants
preferences.hidden_assistants = hidden_assistants
preferences.chosen_assistants = chosen_assistants
return preferences


Expand All @@ -670,15 +664,23 @@ def update_user_assistant_visibility(
store = get_kv_store()
no_auth_user = fetch_no_auth_user(store)
preferences = no_auth_user.preferences
updated_preferences = update_assistant_list(preferences, assistant_id, show)
updated_preferences = update_assistant_visibility(
preferences, assistant_id, show
)
if updated_preferences.chosen_assistants is not None:
updated_preferences.chosen_assistants.append(assistant_id)

set_no_auth_user_preferences(store, updated_preferences)
return
else:
raise RuntimeError("This should never happen")

user_preferences = UserInfo.from_model(user).preferences
updated_preferences = update_assistant_list(user_preferences, assistant_id, show)

updated_preferences = update_assistant_visibility(
user_preferences, assistant_id, show
)
if updated_preferences.chosen_assistants is not None:
updated_preferences.chosen_assistants.append(assistant_id)
db_session.execute(
update(User)
.where(User.id == user.id) # type: ignore
Expand Down
2 changes: 0 additions & 2 deletions web/src/app/assistants/mine/AssistantsList.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -343,8 +343,6 @@ export function AssistantsList() {

setCurrentlyVisibleAssistants(updatedAssistants);
await updateUserAssistantList(updatedAssistants.map((a) => a.id));
await refreshUser();
await refreshAssistants();
}
}

Expand Down
2 changes: 0 additions & 2 deletions web/src/app/chat/modal/configuration/AssistantsTab.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -61,8 +61,6 @@ export function AssistantsTab({

setAssistants(updatedAssistants);
await updateUserAssistantList(updatedAssistants.map((a) => a.id));
await refreshUser();
await refreshAssistants();
}
}

Expand Down
2 changes: 1 addition & 1 deletion web/src/components/context/AssistantsContext.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ export const AssistantsProvider: React.FC<{
const [assistants, setAssistants] = useState<Persona[]>(
initialAssistants || []
);
const { user, isLoadingUser, refreshUser, isAdmin } = useUser();
const { user, isLoadingUser, isAdmin } = useUser();
const [editablePersonas, setEditablePersonas] = useState<Persona[]>([]);
const [allAssistants, setAllAssistants] = useState<Persona[]>([]);

Expand Down
12 changes: 8 additions & 4 deletions web/src/lib/assistants/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -35,16 +35,14 @@ export function classifyAssistants(user: User | null, assistants: Persona[]) {
const isNotHidden = !user.preferences?.hidden_assistants?.includes(
assistant.id
);
const isSelected = user.preferences?.chosen_assistants?.includes(
assistant.id
);

const isBuiltIn = assistant.builtin_persona;
const isDefault = assistant.is_default_persona;

const isOwnedByUser = checkUserOwnsAssistant(user, assistant);

const isShown =
(isVisible && isNotHidden && isSelected) ||
(isVisible && isNotHidden) ||
(isNotHidden && (isBuiltIn || isDefault || isOwnedByUser));
return isShown;
});
Expand Down Expand Up @@ -100,7 +98,13 @@ export function orderAssistantsForUser(
const remainingAssistants = assistants.filter(
(assistant) => !orderedAssistants.includes(assistant)
);

remainingAssistants.sort((a, b) => {
// First, prioritize default personas
if (a.is_default_persona !== b.is_default_persona) {
return a.is_default_persona ? -1 : 1;
}
// If both are default or both are not default, then sort by display priority
const priorityA = a.display_priority ?? Number.MAX_SAFE_INTEGER;
const priorityB = b.display_priority ?? Number.MAX_SAFE_INTEGER;
return priorityA - priorityB;
Expand Down
Loading