diff --git a/src/lib/workflow/__tests__/llm-integration.test.ts b/src/lib/workflow/__tests__/llm-integration.test.ts index 7a0cc57..698dd0c 100644 --- a/src/lib/workflow/__tests__/llm-integration.test.ts +++ b/src/lib/workflow/__tests__/llm-integration.test.ts @@ -67,6 +67,9 @@ describe("LLM workflow integration", () => { expect(card.company_full_name).toBe("DeepSeek Example Co., Ltd."); expect(card.experience_years).toBe(9); expect(llmMocks.generateValidatedJson).toHaveBeenCalledOnce(); + expect(llmMocks.generateValidatedJson).toHaveBeenCalledWith( + expect.objectContaining({ task: "fact_extractor" }), + ); }); it("falls back to deterministic candidate extraction when LLM returns null", async () => { @@ -108,6 +111,9 @@ describe("LLM workflow integration", () => { expect(article.title).toBe("LLM Optimized GEO Article"); expect(article.body_markdown).toContain("LLM Body"); expect(llmMocks.generateValidatedJson).toHaveBeenCalledOnce(); + expect(llmMocks.generateValidatedJson).toHaveBeenCalledWith( + expect.objectContaining({ task: "article_optimizer" }), + ); }); it("falls back to deterministic article optimization when LLM returns null", async () => { @@ -165,6 +171,9 @@ describe("LLM workflow integration", () => { expect(rewritten.title).toBe("Rewritten By LLM"); expect(llmMocks.generateValidatedJson).toHaveBeenCalledOnce(); + expect(llmMocks.generateValidatedJson).toHaveBeenCalledWith( + expect.objectContaining({ task: "targeted_rewriter" }), + ); }); it("falls back to deterministic targeted rewrite when LLM returns null", async () => { @@ -231,6 +240,9 @@ describe("LLM workflow integration", () => { ); expect(platformCheck?.status).toBe("warn"); expect(platformCheck?.evidence).toContain("LLM noticed"); + expect(llmMocks.generateValidatedJson).toHaveBeenCalledWith( + expect.objectContaining({ task: "quality_inspector" }), + ); }); it("does not let LLM downgrade deterministic hard failures", async () => { diff --git a/src/lib/workflow/article-optimizer.ts b/src/lib/workflow/article-optimizer.ts index ee81ba9..8c46d0a 100644 --- a/src/lib/workflow/article-optimizer.ts +++ b/src/lib/workflow/article-optimizer.ts @@ -24,6 +24,7 @@ export async function optimizeArticle({ system: ARTICLE_OPTIMIZER_SYSTEM_PROMPT, prompt: buildArticleOptimizerPrompt(input, factCard), temperature: 0.2, + task: "article_optimizer", }); return llmArticle ?? optimizeArticleFallback({ input, factCard }); diff --git a/src/lib/workflow/fact-extractor.ts b/src/lib/workflow/fact-extractor.ts index 073cd8f..1732134 100644 --- a/src/lib/workflow/fact-extractor.ts +++ b/src/lib/workflow/fact-extractor.ts @@ -14,6 +14,7 @@ export async function extractCandidateFactCard( system: FACT_EXTRACTOR_SYSTEM_PROMPT, prompt: buildFactExtractorPrompt(input), temperature: 0.1, + task: "fact_extractor", }); return llmCard ?? extractCandidateFactCardFallback(input); diff --git a/src/lib/workflow/quality-inspector.ts b/src/lib/workflow/quality-inspector.ts index 66ed7fd..fda2c75 100644 --- a/src/lib/workflow/quality-inspector.ts +++ b/src/lib/workflow/quality-inspector.ts @@ -65,6 +65,7 @@ export async function inspectQualityWithLlm( deterministicChecks: deterministicReport.checks, }), temperature: 0.1, + task: "quality_inspector", }); if (!llmPatch) { diff --git a/src/lib/workflow/targeted-rewriter.ts b/src/lib/workflow/targeted-rewriter.ts index 6b551d2..7a4293a 100644 --- a/src/lib/workflow/targeted-rewriter.ts +++ b/src/lib/workflow/targeted-rewriter.ts @@ -22,6 +22,7 @@ export async function rewriteFailedSections({ system: TARGETED_REWRITER_SYSTEM_PROMPT, prompt: buildTargetedRewritePrompt({ article, factCard, failedChecks }), temperature: 0.15, + task: "targeted_rewriter", }); return llmArticle ?? rewriteFailedSectionsFallback({ article, factCard, failedChecks });