fix(knowledge): refresh inflight items and skip empty chunked groups
Poll the knowledge item list every 5s while any item is still pending or processing so the UI reflects ingestion progress without manual refresh, and exclude items that have no active chunks from group counters so groups with no usable content do not appear populated. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -62,6 +62,14 @@ const groupsQuery = useQuery({
|
|||||||
const itemsQuery = useQuery({
|
const itemsQuery = useQuery({
|
||||||
queryKey: computed(() => ['knowledge', 'items', selectedGroupId.value]),
|
queryKey: computed(() => ['knowledge', 'items', selectedGroupId.value]),
|
||||||
queryFn: () => knowledgeApi.listItems(selectedGroupId.value ?? undefined),
|
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<KnowledgeItem> = [
|
const columns: TableColumnsType<KnowledgeItem> = [
|
||||||
|
|||||||
@@ -240,10 +240,20 @@ func (s *KnowledgeService) ListGroups(ctx context.Context) ([]KnowledgeGroupResp
|
|||||||
}
|
}
|
||||||
|
|
||||||
countRows, err := s.pool.Query(ctx, `
|
countRows, err := s.pool.Query(ctx, `
|
||||||
SELECT group_id, COUNT(*)::bigint
|
SELECT ki.group_id, COUNT(DISTINCT ki.id)::bigint
|
||||||
FROM knowledge_items
|
FROM knowledge_items ki
|
||||||
WHERE tenant_id = $1 AND deleted_at IS NULL
|
WHERE ki.tenant_id = $1
|
||||||
GROUP BY group_id
|
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)
|
`, actor.TenantID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, response.ErrInternal(50050, "knowledge_group_counts_query_failed", "failed to list knowledge group counts")
|
return nil, response.ErrInternal(50050, "knowledge_group_counts_query_failed", "failed to list knowledge group counts")
|
||||||
|
|||||||
Reference in New Issue
Block a user