diff --git a/apps/admin-web/src/views/KnowledgeView.vue b/apps/admin-web/src/views/KnowledgeView.vue index cf423d3..e5f4434 100644 --- a/apps/admin-web/src/views/KnowledgeView.vue +++ b/apps/admin-web/src/views/KnowledgeView.vue @@ -62,6 +62,14 @@ const groupsQuery = useQuery({ const itemsQuery = useQuery({ queryKey: computed(() => ['knowledge', 'items', selectedGroupId.value]), queryFn: () => knowledgeApi.listItems(selectedGroupId.value ?? undefined), + refetchInterval: (query) => { + const items = query.state.data as KnowledgeItem[] | undefined + if (!items || items.length === 0) return false + const hasInflight = items.some( + (item) => item.status !== 'completed' && item.status !== 'failed', + ) + return hasInflight ? 5000 : false + }, }) const columns: TableColumnsType = [ diff --git a/server/internal/tenant/app/knowledge_service.go b/server/internal/tenant/app/knowledge_service.go index 3e17e1e..11931fd 100644 --- a/server/internal/tenant/app/knowledge_service.go +++ b/server/internal/tenant/app/knowledge_service.go @@ -240,10 +240,20 @@ func (s *KnowledgeService) ListGroups(ctx context.Context) ([]KnowledgeGroupResp } countRows, err := s.pool.Query(ctx, ` - SELECT group_id, COUNT(*)::bigint - FROM knowledge_items - WHERE tenant_id = $1 AND deleted_at IS NULL - GROUP BY group_id + SELECT ki.group_id, COUNT(DISTINCT ki.id)::bigint + FROM knowledge_items ki + WHERE ki.tenant_id = $1 + AND ki.deleted_at IS NULL + AND ki.status = 'completed' + AND EXISTS ( + SELECT 1 + FROM knowledge_chunks_meta kcm + WHERE kcm.tenant_id = ki.tenant_id + AND kcm.knowledge_item_id = ki.id + AND kcm.item_version = ki.item_version + AND kcm.status = 'active' + ) + GROUP BY ki.group_id `, actor.TenantID) if err != nil { return nil, response.ErrInternal(50050, "knowledge_group_counts_query_failed", "failed to list knowledge group counts")