fix: Rule 1/TKG trigger conditions + essential_failed guard
- Rule 1 trigger: has_asr_or_asrx → has_asrx (wait for ASRX pre_chunks) - P3/P4 triggers: has_asr_or_asrx → has_asrx (need ASRX data) - Add essential_failed check: job only fails if essential processor fails - P2/P3/P4 triggers: all_completed → has_face && has_asrx - Add publish_pipeline_progress calls at each pipeline stage
This commit is contained in:
@@ -1237,6 +1237,13 @@ impl JobWorker {
|
|||||||
// 定義必要 processor(必須完成的才算 job 成功)
|
// 定義必要 processor(必須完成的才算 job 成功)
|
||||||
let essential_processors = ["cut", "asr", "asrx", "yolo"];
|
let essential_processors = ["cut", "asr", "asrx", "yolo"];
|
||||||
|
|
||||||
|
let essential_failed = essential_processors.iter().any(|ep| {
|
||||||
|
results.iter().any(|r| {
|
||||||
|
r.processor_type.as_str() == *ep
|
||||||
|
&& matches!(r.status, crate::core::db::ProcessorJobStatus::Failed)
|
||||||
|
})
|
||||||
|
});
|
||||||
|
|
||||||
let essential_completed = essential_processors.iter().all(|ep| {
|
let essential_completed = essential_processors.iter().all(|ep| {
|
||||||
results.iter().any(|r| {
|
results.iter().any(|r| {
|
||||||
r.processor_type.as_str() == *ep
|
r.processor_type.as_str() == *ep
|
||||||
@@ -1436,6 +1443,7 @@ impl JobWorker {
|
|||||||
let has_asr_or_asrx = completed_processors
|
let has_asr_or_asrx = completed_processors
|
||||||
.iter()
|
.iter()
|
||||||
.any(|p| p == "asrx" || p == "asr");
|
.any(|p| p == "asrx" || p == "asr");
|
||||||
|
let has_asrx = completed_processors.iter().any(|p| p == "asrx");
|
||||||
let has_cut = completed_processors.iter().any(|p| p == "cut");
|
let has_cut = completed_processors.iter().any(|p| p == "cut");
|
||||||
let has_face = completed_processors.iter().any(|p| p == "face");
|
let has_face = completed_processors.iter().any(|p| p == "face");
|
||||||
let has_yolo = completed_processors.iter().any(|p| p == "yolo");
|
let has_yolo = completed_processors.iter().any(|p| p == "yolo");
|
||||||
@@ -1444,7 +1452,7 @@ impl JobWorker {
|
|||||||
.update_job_processors_arrays(job_id, completed_processors, failed_processors.clone())
|
.update_job_processors_arrays(job_id, completed_processors, failed_processors.clone())
|
||||||
.await?;
|
.await?;
|
||||||
|
|
||||||
if has_asr_or_asrx {
|
if has_asrx {
|
||||||
// Guard: only spawn Rule 1 if sentence chunks don't exist yet
|
// Guard: only spawn Rule 1 if sentence chunks don't exist yet
|
||||||
let chunk_t = schema::table_name("chunk");
|
let chunk_t = schema::table_name("chunk");
|
||||||
let already_spawned: bool = sqlx::query_scalar::<_, i32>(&format!(
|
let already_spawned: bool = sqlx::query_scalar::<_, i32>(&format!(
|
||||||
@@ -1532,7 +1540,7 @@ impl JobWorker {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if all_completed {
|
if has_face && has_asrx {
|
||||||
let mut pp = PipelineProgress::new(uuid);
|
let mut pp = PipelineProgress::new(uuid);
|
||||||
pp.update_stage("processors", 1.0, "completed", None);
|
pp.update_stage("processors", 1.0, "completed", None);
|
||||||
publish_pipeline_progress(self.redis.as_ref(), uuid, &pp).await;
|
publish_pipeline_progress(self.redis.as_ref(), uuid, &pp).await;
|
||||||
@@ -1723,7 +1731,7 @@ impl JobWorker {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 🚀 P3 Trigger: Identity Agent (Face + ASRX)
|
// 🚀 P3 Trigger: Identity Agent (Face + ASRX)
|
||||||
if has_face && has_asr_or_asrx {
|
if has_face && has_asrx {
|
||||||
info!("📝 Prerequisites met for Identity Agent. Starting analysis...");
|
info!("📝 Prerequisites met for Identity Agent. Starting analysis...");
|
||||||
let db_clone = self.db.clone();
|
let db_clone = self.db.clone();
|
||||||
let redis_clone = self.redis.clone();
|
let redis_clone = self.redis.clone();
|
||||||
@@ -1742,7 +1750,7 @@ impl JobWorker {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 🚀 P4 Trigger: TKG Build (Face + ASRX) → then Rule2 ingestion
|
// 🚀 P4 Trigger: TKG Build (Face + ASRX) → then Rule2 ingestion
|
||||||
if has_face && has_asr_or_asrx {
|
if has_face && has_asrx {
|
||||||
info!("📝 Prerequisites met for TKG Build. Starting graph construction...");
|
info!("📝 Prerequisites met for TKG Build. Starting graph construction...");
|
||||||
let db_clone = self.db.clone();
|
let db_clone = self.db.clone();
|
||||||
let redis_clone = self.redis.clone();
|
let redis_clone = self.redis.clone();
|
||||||
@@ -1845,7 +1853,7 @@ impl JobWorker {
|
|||||||
job_id,
|
job_id,
|
||||||
failed_processors.len()
|
failed_processors.len()
|
||||||
);
|
);
|
||||||
} else if any_failed {
|
} else if essential_failed {
|
||||||
self.db
|
self.db
|
||||||
.update_job_status(job_id, MonitorJobStatus::Failed)
|
.update_job_status(job_id, MonitorJobStatus::Failed)
|
||||||
.await?;
|
.await?;
|
||||||
|
|||||||
Reference in New Issue
Block a user