Skip to content

Commit b241103

Browse files
authored
Merge pull request #3379 from QuivrHQ/fix/sort-brain-list-km-only
fix: sort brain name and knowledge list local
2 parents 2fe24d2 + 4e88b7e commit b241103

File tree

4 files changed

+22
-3
lines changed

4 files changed

+22
-3
lines changed

backend/api/quivr_api/modules/knowledge/entity/knowledge.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,7 @@ async def to_dto(
112112
await self.awaitable_attrs.created_at
113113
), "knowledge should be inserted before transforming to dto"
114114
brains = await self.awaitable_attrs.brains
115+
brains = sorted(brains, key=lambda b: (b is None, b.name))
115116
children: list[KnowledgeDB] = (
116117
await self.awaitable_attrs.children if get_children else []
117118
)

backend/api/quivr_api/modules/knowledge/repository/knowledges.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
)
2121
from quivr_api.modules.knowledge.entity.knowledge import (
2222
KnowledgeDB,
23+
KnowledgeSource,
2324
)
2425
from quivr_api.modules.knowledge.service.knowledge_exceptions import (
2526
KnowledgeCreationError,
@@ -328,6 +329,7 @@ async def get_root_knowledge_user(self, user_id: UUID) -> list[KnowledgeDB]:
328329
select(KnowledgeDB)
329330
.where(KnowledgeDB.parent_id.is_(None)) # type: ignore
330331
.where(KnowledgeDB.user_id == user_id)
332+
.where(KnowledgeDB.source == KnowledgeSource.LOCAL)
331333
.options(joinedload(KnowledgeDB.children)) # type: ignore
332334
)
333335
result = await self.session.exec(query)

backend/api/quivr_api/modules/knowledge/tests/conftest.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,19 @@ async def sync(session: AsyncSession, user: User) -> Sync:
134134
@pytest_asyncio.fixture(scope="function")
135135
async def brain(session):
136136
brain_1 = Brain(
137-
name="test_brain",
137+
name="brain_1",
138+
description="this is a test brain",
139+
brain_type=BrainType.integration,
140+
)
141+
session.add(brain_1)
142+
await session.commit()
143+
return brain_1
144+
145+
146+
@pytest_asyncio.fixture(scope="function")
147+
async def brain2(session):
148+
brain_1 = Brain(
149+
name="brain_2",
138150
description="this is a test brain",
139151
brain_type=BrainType.integration,
140152
)

backend/api/quivr_api/modules/knowledge/tests/test_knowledge_entity.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ async def test_knowledge_remove_folder_cascade(
141141

142142

143143
@pytest.mark.asyncio(loop_scope="session")
144-
async def test_knowledge_dto(session, user, brain, sync):
144+
async def test_knowledge_dto(session, user, brain, brain2, sync):
145145
# add folder in brain
146146
folder = KnowledgeDB(
147147
file_name="folder_1",
@@ -165,7 +165,7 @@ async def test_knowledge_dto(session, user, brain, sync):
165165
file_size=100,
166166
file_sha1="test_sha1",
167167
user_id=user.id,
168-
brains=[brain],
168+
brains=[brain2, brain],
169169
parent=folder,
170170
sync_file_id="file1",
171171
sync=sync,
@@ -194,7 +194,11 @@ async def test_knowledge_dto(session, user, brain, sync):
194194
# Syncs fields
195195
assert km_dto.sync_id == km.sync_id
196196
assert km_dto.sync_file_id == km.sync_file_id
197+
# Check brain_name order
198+
assert len(km_dto.brains) == 2
199+
assert km_dto.brains[1]["name"] > km_dto.brains[0]["name"]
197200

201+
# Check folder to dto
198202
folder_dto = await folder.to_dto()
199203
assert folder_dto.brains[0] == brain.model_dump()
200204
assert folder_dto.children == [await km.to_dto()]

0 commit comments

Comments
 (0)