38 lines
988 B
TypeScript
38 lines
988 B
TypeScript
import type {
|
|
ArticleInput,
|
|
OptimizationFactCard,
|
|
OptimizedArticle,
|
|
} from "../domain/types";
|
|
import { optimizedArticleSchema } from "../domain/validation";
|
|
import { generateValidatedJson, type GenerateInput } from "../llm/client";
|
|
import {
|
|
ARTICLE_OPTIMIZER_SYSTEM_PROMPT,
|
|
buildArticleOptimizerPrompt,
|
|
} from "../llm/prompts";
|
|
|
|
export interface OptimizeArticleInput {
|
|
input: ArticleInput;
|
|
factCard: OptimizationFactCard;
|
|
onAuditSummary?: GenerateInput["onAuditSummary"];
|
|
}
|
|
|
|
export async function optimizeArticle({
|
|
input,
|
|
factCard,
|
|
onAuditSummary,
|
|
}: OptimizeArticleInput): Promise<OptimizedArticle> {
|
|
const llmArticle = await generateValidatedJson({
|
|
schema: optimizedArticleSchema,
|
|
system: ARTICLE_OPTIMIZER_SYSTEM_PROMPT,
|
|
prompt: buildArticleOptimizerPrompt(input, factCard),
|
|
temperature: 0.2,
|
|
task: "article_optimizer",
|
|
onAuditSummary,
|
|
});
|
|
|
|
return optimizedArticleSchema.parse({
|
|
...llmArticle,
|
|
image_suggestions: [],
|
|
});
|
|
}
|