This commit is contained in:
Timothy Jaeryang Baek
2026-06-29 02:43:14 -05:00
parent 2414dfca70
commit 2bdd2ab94e
4 changed files with 114 additions and 26 deletions
+21 -3
View File
@@ -229,10 +229,25 @@ class ModelsTable:
)
return models
async def get_base_models(self, db: AsyncSession | None = None) -> list[ModelModel]:
@staticmethod
def _meta_has_tag(meta: dict | None, tag: str) -> bool:
if not meta:
return False
for raw_tag in meta.get('tags', []):
name = raw_tag.get('name') if isinstance(raw_tag, dict) else str(raw_tag)
if name == tag:
return True
return False
async def get_base_models(self, tag: str | None = None, db: AsyncSession | None = None) -> list[ModelModel]:
async with get_async_db_context(db) as db:
result = await db.execute(select(Model).filter(Model.base_model_id == None))
result = await db.execute(select(Model).filter(Model.base_model_id.is_(None)))
all_models = result.scalars().all()
if tag:
all_models = [model for model in all_models if self._meta_has_tag(model.meta, tag)]
model_ids = [model.id for model in all_models]
grants_map = await AccessGrants.get_grants_by_resources('model', model_ids, db=db)
return [
@@ -395,11 +410,14 @@ class ModelsTable:
self,
user_id: str,
is_admin: bool = False,
is_base_model: bool = False,
db: AsyncSession | None = None,
) -> set[str]:
"""Extract unique tag names from model meta, querying only the meta column."""
async with get_async_db_context(db) as db:
stmt = select(Model.meta).filter(Model.base_model_id != None)
stmt = select(Model.meta).filter(
Model.base_model_id.is_(None) if is_base_model else Model.base_model_id.is_not(None)
)
if not is_admin:
user_groups = await Groups.get_groups_by_member_id(user_id, db=db)
+12 -2
View File
@@ -198,9 +198,19 @@ async def get_models(
###########################
@router.get('/base/tags', response_model=list[str])
async def get_base_model_tags(user=Depends(get_admin_user), db: AsyncSession = Depends(get_async_session)):
tags = await Models.get_all_tags(user_id=user.id, is_admin=True, is_base_model=True, db=db)
return sorted(tags)
@router.get('/base', response_model=list[ModelResponse])
async def get_base_models(user=Depends(get_admin_user), db: AsyncSession = Depends(get_async_session)):
return await Models.get_base_models(db=db)
async def get_base_models(
tag: str | None = None,
user=Depends(get_admin_user),
db: AsyncSession = Depends(get_async_session),
):
return await Models.get_base_models(tag=tag, db=db)
###########################