fix: harden knowledge lifecycle rollout
This commit is contained in:
@@ -251,6 +251,7 @@ export type DeletionImpact = {
|
||||
learningTasks: number;
|
||||
broadcasts: number;
|
||||
generations: number;
|
||||
activeGenerationMemberships: number;
|
||||
canRequestPurge: boolean;
|
||||
blockers: string[];
|
||||
};
|
||||
@@ -296,6 +297,9 @@ export type GenerationBuild = {
|
||||
expectedVersions: number;
|
||||
includedVersions: number;
|
||||
outstandingJobs: number;
|
||||
embeddingModel?: string;
|
||||
embeddingDimension?: number;
|
||||
manifestSha256?: string;
|
||||
};
|
||||
|
||||
export type ActivationGate = {
|
||||
|
||||
@@ -936,6 +936,12 @@
|
||||
:type="deletionImpact.canRequestPurge ? 'warning' : 'info'"
|
||||
:closable="false"
|
||||
/>
|
||||
<el-alert
|
||||
v-if="deletionImpact?.activeGenerationMemberships"
|
||||
title="当前活动向量代次仍包含此资料。请先构建并启用不含该资料的新代次,再申请物理清理。"
|
||||
type="error"
|
||||
:closable="false"
|
||||
/>
|
||||
<el-button
|
||||
v-if="selectedQualityAsset.lifecycleStatus === 'DEPRECATED' && deletionImpact?.canRequestPurge"
|
||||
type="danger"
|
||||
@@ -1148,6 +1154,18 @@
|
||||
<el-button :loading="rolloutAssisting" @click="buildCandidateGeneration">构建候选代次</el-button>
|
||||
<el-button :loading="rolloutAssisting" @click="refreshCandidateGeneration">刷新构建状态</el-button>
|
||||
</div>
|
||||
<el-alert
|
||||
v-if="candidateBuild"
|
||||
:title="`候选 G${candidateBuild.generation}:${candidateBuild.status},已纳入 ${candidateBuild.includedVersions}/${candidateBuild.expectedVersions}`"
|
||||
:description="
|
||||
candidateBuild.embeddingModel
|
||||
? `嵌入模型 ${candidateBuild.embeddingModel},维度 ${candidateBuild.embeddingDimension || '-'},待处理 ${candidateBuild.outstandingJobs}`
|
||||
: `嵌入清单尚未生成,待处理 ${candidateBuild.outstandingJobs}`
|
||||
"
|
||||
:type="candidateBuild.status === 'READY' ? 'success' : candidateBuild.status === 'FAILED' ? 'error' : 'info'"
|
||||
:closable="false"
|
||||
show-icon
|
||||
/>
|
||||
<el-form label-position="top">
|
||||
<el-form-item label="影子验证问题">
|
||||
<el-input v-model="rolloutQuery" maxlength="1000" placeholder="输入一条真实业务问题进行旧链路与治理链路对照" />
|
||||
@@ -1285,6 +1303,7 @@ import {
|
||||
type DeletionImpact,
|
||||
type PurgeRequest,
|
||||
type MigrationRun,
|
||||
type GenerationBuild,
|
||||
type ActivationGate,
|
||||
type KnowledgeGlossaryTerm,
|
||||
type KnowledgeRolloutMode,
|
||||
@@ -1337,6 +1356,7 @@ const rolloutTransitioningId = ref<number | null>(null);
|
||||
const rolloutScopes = ref<KnowledgeRolloutScope[]>([]);
|
||||
const rolloutDialogVisible = ref(false);
|
||||
const selectedRolloutScope = ref<KnowledgeRolloutScope | null>(null);
|
||||
const candidateBuild = ref<GenerationBuild | null>(null);
|
||||
const rolloutGate = ref<ActivationGate | null>(null);
|
||||
const rolloutQuery = ref('');
|
||||
const rolloutAssisting = ref(false);
|
||||
@@ -1870,9 +1890,11 @@ async function executePurge(request: PurgeRequest) {
|
||||
|
||||
function openRolloutAssistant(scope: KnowledgeRolloutScope) {
|
||||
selectedRolloutScope.value = scope;
|
||||
candidateBuild.value = null;
|
||||
rolloutGate.value = null;
|
||||
rolloutQuery.value = '';
|
||||
rolloutDialogVisible.value = true;
|
||||
if (scope.candidateGeneration) void refreshCandidateGeneration();
|
||||
}
|
||||
|
||||
async function buildCandidateGeneration() {
|
||||
@@ -1880,7 +1902,7 @@ async function buildCandidateGeneration() {
|
||||
if (!scope) return;
|
||||
rolloutAssisting.value = true;
|
||||
try {
|
||||
await startGenerationBuild(scope.knowledgeId, '管理端启动候选代次全量构建');
|
||||
candidateBuild.value = (await startGenerationBuild(scope.knowledgeId, '管理端启动候选代次全量构建')).data;
|
||||
await loadRolloutScopes();
|
||||
selectedRolloutScope.value = rolloutScopes.value.find((item) => item.knowledgeId === scope.knowledgeId) || scope;
|
||||
ElMessage.success('候选代次已排队构建');
|
||||
@@ -1897,6 +1919,7 @@ async function refreshCandidateGeneration() {
|
||||
rolloutAssisting.value = true;
|
||||
try {
|
||||
const result = (await refreshGenerationBuild(scope.knowledgeId)).data;
|
||||
candidateBuild.value = result;
|
||||
ElMessage.info(`候选 G${result.generation}:${result.status},已纳入 ${result.includedVersions}/${result.expectedVersions}`);
|
||||
} catch {
|
||||
ElMessage.error('候选代次状态刷新失败');
|
||||
@@ -1914,7 +1937,7 @@ async function runShadowComparison() {
|
||||
rolloutQuery.value = '';
|
||||
ElMessage.success('影子对照样本已记录,不影响当前在线结果');
|
||||
} catch {
|
||||
ElMessage.error('影子对照失败,请确认候选代次已创建');
|
||||
ElMessage.error('影子对照失败,请确认候选代次已就绪且向量服务可用');
|
||||
} finally {
|
||||
rolloutAssisting.value = false;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user