@sourcepress/ai 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.omc/state/last-tool-error.json +7 -0
- package/.turbo/turbo-build.log +4 -0
- package/.turbo/turbo-test.log +24 -0
- package/LICENSE +21 -0
- package/dist/__tests__/budget.test.d.ts +2 -0
- package/dist/__tests__/budget.test.d.ts.map +1 -0
- package/dist/__tests__/budget.test.js +96 -0
- package/dist/__tests__/budget.test.js.map +1 -0
- package/dist/__tests__/classify.test.d.ts +2 -0
- package/dist/__tests__/classify.test.d.ts.map +1 -0
- package/dist/__tests__/classify.test.js +72 -0
- package/dist/__tests__/classify.test.js.map +1 -0
- package/dist/__tests__/eval-runner.test.d.ts +2 -0
- package/dist/__tests__/eval-runner.test.d.ts.map +1 -0
- package/dist/__tests__/eval-runner.test.js +171 -0
- package/dist/__tests__/eval-runner.test.js.map +1 -0
- package/dist/__tests__/extract.test.d.ts +2 -0
- package/dist/__tests__/extract.test.d.ts.map +1 -0
- package/dist/__tests__/extract.test.js +79 -0
- package/dist/__tests__/extract.test.js.map +1 -0
- package/dist/__tests__/find-gaps.test.d.ts +2 -0
- package/dist/__tests__/find-gaps.test.d.ts.map +1 -0
- package/dist/__tests__/find-gaps.test.js +82 -0
- package/dist/__tests__/find-gaps.test.js.map +1 -0
- package/dist/__tests__/generate.test.d.ts +2 -0
- package/dist/__tests__/generate.test.d.ts.map +1 -0
- package/dist/__tests__/generate.test.js +68 -0
- package/dist/__tests__/generate.test.js.map +1 -0
- package/dist/__tests__/improve-prompt.test.d.ts +2 -0
- package/dist/__tests__/improve-prompt.test.d.ts.map +1 -0
- package/dist/__tests__/improve-prompt.test.js +32 -0
- package/dist/__tests__/improve-prompt.test.js.map +1 -0
- package/dist/__tests__/intent-impact.test.d.ts +2 -0
- package/dist/__tests__/intent-impact.test.d.ts.map +1 -0
- package/dist/__tests__/intent-impact.test.js +51 -0
- package/dist/__tests__/intent-impact.test.js.map +1 -0
- package/dist/__tests__/judge.test.d.ts +2 -0
- package/dist/__tests__/judge.test.d.ts.map +1 -0
- package/dist/__tests__/judge.test.js +61 -0
- package/dist/__tests__/judge.test.js.map +1 -0
- package/dist/__tests__/score.test.d.ts +2 -0
- package/dist/__tests__/score.test.d.ts.map +1 -0
- package/dist/__tests__/score.test.js +50 -0
- package/dist/__tests__/score.test.js.map +1 -0
- package/dist/__tests__/staleness.test.d.ts +2 -0
- package/dist/__tests__/staleness.test.d.ts.map +1 -0
- package/dist/__tests__/staleness.test.js +66 -0
- package/dist/__tests__/staleness.test.js.map +1 -0
- package/dist/budget.d.ts +13 -0
- package/dist/budget.d.ts.map +1 -0
- package/dist/budget.js +40 -0
- package/dist/budget.js.map +1 -0
- package/dist/eval/runner.d.ts +34 -0
- package/dist/eval/runner.d.ts.map +1 -0
- package/dist/eval/runner.js +128 -0
- package/dist/eval/runner.js.map +1 -0
- package/dist/functions/classify.d.ts +5 -0
- package/dist/functions/classify.d.ts.map +1 -0
- package/dist/functions/classify.js +43 -0
- package/dist/functions/classify.js.map +1 -0
- package/dist/functions/extract.d.ts +5 -0
- package/dist/functions/extract.d.ts.map +1 -0
- package/dist/functions/extract.js +57 -0
- package/dist/functions/extract.js.map +1 -0
- package/dist/functions/find-gaps.d.ts +5 -0
- package/dist/functions/find-gaps.d.ts.map +1 -0
- package/dist/functions/find-gaps.js +51 -0
- package/dist/functions/find-gaps.js.map +1 -0
- package/dist/functions/generate.d.ts +5 -0
- package/dist/functions/generate.d.ts.map +1 -0
- package/dist/functions/generate.js +39 -0
- package/dist/functions/generate.js.map +1 -0
- package/dist/functions/improve-prompt.d.ts +5 -0
- package/dist/functions/improve-prompt.d.ts.map +1 -0
- package/dist/functions/improve-prompt.js +38 -0
- package/dist/functions/improve-prompt.js.map +1 -0
- package/dist/functions/index.d.ts +11 -0
- package/dist/functions/index.d.ts.map +1 -0
- package/dist/functions/index.js +11 -0
- package/dist/functions/index.js.map +1 -0
- package/dist/functions/intent-impact.d.ts +5 -0
- package/dist/functions/intent-impact.d.ts.map +1 -0
- package/dist/functions/intent-impact.js +45 -0
- package/dist/functions/intent-impact.js.map +1 -0
- package/dist/functions/judge.d.ts +5 -0
- package/dist/functions/judge.d.ts.map +1 -0
- package/dist/functions/judge.js +32 -0
- package/dist/functions/judge.js.map +1 -0
- package/dist/functions/model-factory.d.ts +4 -0
- package/dist/functions/model-factory.d.ts.map +1 -0
- package/dist/functions/model-factory.js +52 -0
- package/dist/functions/model-factory.js.map +1 -0
- package/dist/functions/score.d.ts +5 -0
- package/dist/functions/score.d.ts.map +1 -0
- package/dist/functions/score.js +47 -0
- package/dist/functions/score.js.map +1 -0
- package/dist/functions/staleness.d.ts +5 -0
- package/dist/functions/staleness.d.ts.map +1 -0
- package/dist/functions/staleness.js +45 -0
- package/dist/functions/staleness.js.map +1 -0
- package/dist/functions/usage.d.ts +8 -0
- package/dist/functions/usage.d.ts.map +1 -0
- package/dist/functions/usage.js +13 -0
- package/dist/functions/usage.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/provider.d.ts +10 -0
- package/dist/provider.d.ts.map +1 -0
- package/dist/provider.js +32 -0
- package/dist/provider.js.map +1 -0
- package/dist/types.d.ts +207 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +41 -0
- package/src/__tests__/budget.test.ts +103 -0
- package/src/__tests__/classify.test.ts +90 -0
- package/src/__tests__/eval-runner.test.ts +199 -0
- package/src/__tests__/extract.test.ts +92 -0
- package/src/__tests__/find-gaps.test.ts +93 -0
- package/src/__tests__/generate.test.ts +92 -0
- package/src/__tests__/improve-prompt.test.ts +42 -0
- package/src/__tests__/intent-impact.test.ts +62 -0
- package/src/__tests__/judge.test.ts +78 -0
- package/src/__tests__/score.test.ts +61 -0
- package/src/__tests__/staleness.test.ts +77 -0
- package/src/budget.ts +47 -0
- package/src/eval/runner.ts +163 -0
- package/src/functions/classify.ts +54 -0
- package/src/functions/extract.ts +72 -0
- package/src/functions/find-gaps.ts +65 -0
- package/src/functions/generate.ts +51 -0
- package/src/functions/improve-prompt.ts +48 -0
- package/src/functions/index.ts +10 -0
- package/src/functions/intent-impact.ts +56 -0
- package/src/functions/judge.ts +41 -0
- package/src/functions/model-factory.ts +60 -0
- package/src/functions/score.ts +56 -0
- package/src/functions/staleness.ts +54 -0
- package/src/functions/usage.ts +25 -0
- package/src/index.ts +47 -0
- package/src/provider.ts +41 -0
- package/src/types.ts +225 -0
- package/tsconfig.json +5 -0
- package/vitest.config.ts +2 -0
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { generate } from "../functions/generate.js";
|
|
2
|
+
import { improvePrompt } from "../functions/improve-prompt.js";
|
|
3
|
+
import { judge } from "../functions/judge.js";
|
|
4
|
+
function mergeUsage(a, b) {
|
|
5
|
+
return {
|
|
6
|
+
input_tokens: a.input_tokens + b.input_tokens,
|
|
7
|
+
output_tokens: a.output_tokens + b.output_tokens,
|
|
8
|
+
estimated_cost_usd: a.estimated_cost_usd + b.estimated_cost_usd,
|
|
9
|
+
function_name: "eval-run",
|
|
10
|
+
timestamp: new Date().toISOString(),
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
function emptyUsage() {
|
|
14
|
+
return {
|
|
15
|
+
input_tokens: 0,
|
|
16
|
+
output_tokens: 0,
|
|
17
|
+
estimated_cost_usd: 0,
|
|
18
|
+
function_name: "eval-run",
|
|
19
|
+
timestamp: new Date().toISOString(),
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
export class EvalRunner {
|
|
23
|
+
provider;
|
|
24
|
+
budget;
|
|
25
|
+
constructor(provider, budget) {
|
|
26
|
+
this.provider = provider;
|
|
27
|
+
this.budget = budget;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Run the generate-judge-decide-improve loop.
|
|
31
|
+
*
|
|
32
|
+
* 1. GENERATE — AI creates content with current prompt
|
|
33
|
+
* 2. JUDGE — Locked judge-prompt scores 0-100
|
|
34
|
+
* 3. DECIDE — Score >= threshold? Keep. Otherwise discard.
|
|
35
|
+
* 4. IMPROVE — If discard: agent adjusts generation prompt
|
|
36
|
+
* 5. LOG — Result recorded
|
|
37
|
+
* 6. REPEAT — Until threshold met or max iterations
|
|
38
|
+
*/
|
|
39
|
+
async run(config) {
|
|
40
|
+
const iterations = [];
|
|
41
|
+
let currentPrompt = config.generation_prompt;
|
|
42
|
+
let totalUsage = emptyUsage();
|
|
43
|
+
let finalContent;
|
|
44
|
+
let finalScore = 0;
|
|
45
|
+
let finalStatus = "discard";
|
|
46
|
+
let promptImproved = false;
|
|
47
|
+
for (let i = 0; i < config.max_iterations; i++) {
|
|
48
|
+
// 1. GENERATE
|
|
49
|
+
const generated = await generate({
|
|
50
|
+
content_type: config.content_type,
|
|
51
|
+
generation_prompt: currentPrompt,
|
|
52
|
+
knowledge_context: config.knowledge_context,
|
|
53
|
+
intent: config.intent,
|
|
54
|
+
collection_schema: config.collection_schema,
|
|
55
|
+
}, this.provider, this.budget);
|
|
56
|
+
totalUsage = mergeUsage(totalUsage, generated.usage);
|
|
57
|
+
// Compose the draft as frontmatter + body for judging
|
|
58
|
+
const draft = `---\n${Object.entries(generated.frontmatter)
|
|
59
|
+
.map(([k, v]) => `${k}: ${JSON.stringify(v)}`)
|
|
60
|
+
.join("\n")}\n---\n\n${generated.content}`;
|
|
61
|
+
// 2. JUDGE
|
|
62
|
+
const judged = await judge({
|
|
63
|
+
draft,
|
|
64
|
+
gold_standard: config.gold_standard,
|
|
65
|
+
judge_prompt: config.judge_prompt,
|
|
66
|
+
intent: config.intent,
|
|
67
|
+
}, this.provider, this.budget);
|
|
68
|
+
totalUsage = mergeUsage(totalUsage, judged.usage);
|
|
69
|
+
// 3. DECIDE
|
|
70
|
+
const status = judged.score >= config.threshold ? "keep" : "discard";
|
|
71
|
+
const evalResult = {
|
|
72
|
+
id: `eval-${config.content_type}-${Date.now()}-${i}`,
|
|
73
|
+
content_type: config.content_type,
|
|
74
|
+
prompt_version: `v${i + 1}`,
|
|
75
|
+
score: judged.score,
|
|
76
|
+
status,
|
|
77
|
+
reasoning: judged.reasoning,
|
|
78
|
+
iteration: i + 1,
|
|
79
|
+
generated_content: draft,
|
|
80
|
+
timestamp: new Date().toISOString(),
|
|
81
|
+
total_usage: { ...totalUsage },
|
|
82
|
+
};
|
|
83
|
+
iterations.push(evalResult);
|
|
84
|
+
finalScore = judged.score;
|
|
85
|
+
finalContent = draft;
|
|
86
|
+
if (status === "keep") {
|
|
87
|
+
finalStatus = "keep";
|
|
88
|
+
break;
|
|
89
|
+
}
|
|
90
|
+
// 4. IMPROVE — adjust generation prompt (not on last iteration)
|
|
91
|
+
if (i < config.max_iterations - 1) {
|
|
92
|
+
const improved = await improvePrompt({
|
|
93
|
+
current_prompt: currentPrompt,
|
|
94
|
+
judge_reasoning: judged.reasoning,
|
|
95
|
+
judge_score: judged.score,
|
|
96
|
+
content_type: config.content_type,
|
|
97
|
+
}, this.provider, this.budget);
|
|
98
|
+
totalUsage = mergeUsage(totalUsage, improved.usage);
|
|
99
|
+
currentPrompt = improved.improved_prompt;
|
|
100
|
+
promptImproved = true;
|
|
101
|
+
// Mark previous iteration as improved
|
|
102
|
+
evalResult.status = "improved";
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
return {
|
|
106
|
+
iterations,
|
|
107
|
+
final_score: finalScore,
|
|
108
|
+
final_status: finalStatus,
|
|
109
|
+
final_content: finalStatus === "keep" ? finalContent : undefined,
|
|
110
|
+
final_prompt: currentPrompt,
|
|
111
|
+
prompt_improved: promptImproved,
|
|
112
|
+
total_usage: totalUsage,
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Single judge pass — score existing content without the improve loop.
|
|
117
|
+
* Used for quality scoring of already-published content.
|
|
118
|
+
*/
|
|
119
|
+
async judgeOnly(input) {
|
|
120
|
+
const result = await judge(input, this.provider, this.budget);
|
|
121
|
+
return {
|
|
122
|
+
score: result.score,
|
|
123
|
+
reasoning: result.reasoning,
|
|
124
|
+
usage: result.usage,
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=runner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/eval/runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { BudgetTracker } from "../budget.js";
|
|
2
|
+
import type { ResolvedProvider } from "../provider.js";
|
|
3
|
+
import type { ClassifyInput, ClassifyResult } from "../types.js";
|
|
4
|
+
export declare function classify(input: ClassifyInput, provider: ResolvedProvider, budget: BudgetTracker): Promise<ClassifyResult>;
|
|
5
|
+
//# sourceMappingURL=classify.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"classify.d.ts","sourceRoot":"","sources":["../../src/functions/classify.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAWjE,wBAAsB,QAAQ,CAC7B,KAAK,EAAE,aAAa,EACpB,QAAQ,EAAE,gBAAgB,EAC1B,MAAM,EAAE,aAAa,GACnB,OAAO,CAAC,cAAc,CAAC,CAkCzB"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { generateObject } from "ai";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
import { createModel } from "./model-factory.js";
|
|
4
|
+
import { recordUsage } from "./usage.js";
|
|
5
|
+
const classifySchema = z.object({
|
|
6
|
+
quality: z.enum(["structured", "draft", "thoughts"]),
|
|
7
|
+
quality_score: z.number().min(1).max(10),
|
|
8
|
+
type: z.string(),
|
|
9
|
+
reasoning: z.string(),
|
|
10
|
+
});
|
|
11
|
+
export async function classify(input, provider, budget) {
|
|
12
|
+
const typeConstraint = input.available_types
|
|
13
|
+
? `Choose the type from these options: ${input.available_types.join(", ")}`
|
|
14
|
+
: "Infer the most appropriate type (e.g. project-notes, meeting-notes, transcript, brainstorm, research, documentation)";
|
|
15
|
+
const { object, usage } = await generateObject({
|
|
16
|
+
model: await createModel(provider),
|
|
17
|
+
schema: classifySchema,
|
|
18
|
+
prompt: `You are a knowledge classifier for a content engine. Analyze the following text and classify it.
|
|
19
|
+
|
|
20
|
+
Quality levels:
|
|
21
|
+
- "structured": Well-organized, has clear sections, headings, or data points. Score 7-10.
|
|
22
|
+
- "draft": Has useful information but needs editing, incomplete. Score 4-6.
|
|
23
|
+
- "thoughts": Raw brainstorm, bullet points, rough ideas. Score 1-3.
|
|
24
|
+
|
|
25
|
+
${typeConstraint}
|
|
26
|
+
|
|
27
|
+
Text to classify:
|
|
28
|
+
---
|
|
29
|
+
${input.text}
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
Respond with quality, quality_score (1-10), type, and reasoning.`,
|
|
33
|
+
});
|
|
34
|
+
const tokenUsage = recordUsage(budget, provider, usage, "classify");
|
|
35
|
+
return {
|
|
36
|
+
quality: object.quality,
|
|
37
|
+
quality_score: object.quality_score,
|
|
38
|
+
type: object.type,
|
|
39
|
+
reasoning: object.reasoning,
|
|
40
|
+
usage: tokenUsage,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=classify.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"classify.js","sourceRoot":"","sources":["../../src/functions/classify.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/B,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;IACpD,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;IACxC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;CACrB,CAAC,CAAC;AAEH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC7B,KAAoB,EACpB,QAA0B,EAC1B,MAAqB;IAErB,MAAM,cAAc,GAAG,KAAK,CAAC,eAAe;QAC3C,CAAC,CAAC,uCAAuC,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;QAC3E,CAAC,CAAC,sHAAsH,CAAC;IAE1H,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,cAAc,CAAC;QAC9C,KAAK,EAAE,MAAM,WAAW,CAAC,QAAQ,CAAC;QAClC,MAAM,EAAE,cAAc;QACtB,MAAM,EAAE;;;;;;;EAOR,cAAc;;;;EAId,KAAK,CAAC,IAAI;;;iEAGqD;KAC/D,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,WAAW,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;IAEpE,OAAO;QACN,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,aAAa,EAAE,MAAM,CAAC,aAAa;QACnC,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,KAAK,EAAE,UAAU;KACjB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { BudgetTracker } from "../budget.js";
|
|
2
|
+
import type { ResolvedProvider } from "../provider.js";
|
|
3
|
+
import type { ExtractInput, ExtractResult } from "../types.js";
|
|
4
|
+
export declare function extract(input: ExtractInput, provider: ResolvedProvider, budget: BudgetTracker): Promise<ExtractResult>;
|
|
5
|
+
//# sourceMappingURL=extract.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extract.d.ts","sourceRoot":"","sources":["../../src/functions/extract.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAwB/D,wBAAsB,OAAO,CAC5B,KAAK,EAAE,YAAY,EACnB,QAAQ,EAAE,gBAAgB,EAC1B,MAAM,EAAE,aAAa,GACnB,OAAO,CAAC,aAAa,CAAC,CAuCxB"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { generateObject } from "ai";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
import { createModel } from "./model-factory.js";
|
|
4
|
+
import { recordUsage } from "./usage.js";
|
|
5
|
+
const extractSchema = z.object({
|
|
6
|
+
entities: z.array(z.object({
|
|
7
|
+
type: z.string(),
|
|
8
|
+
name: z.string(),
|
|
9
|
+
aliases: z.array(z.string()),
|
|
10
|
+
confidence: z.number().min(0).max(1),
|
|
11
|
+
})),
|
|
12
|
+
relations: z.array(z.object({
|
|
13
|
+
from_entity: z.string(),
|
|
14
|
+
to_entity: z.string(),
|
|
15
|
+
relation_type: z.string(),
|
|
16
|
+
confidence: z.number().min(0).max(1),
|
|
17
|
+
evidence: z.string(),
|
|
18
|
+
})),
|
|
19
|
+
});
|
|
20
|
+
export async function extract(input, provider, budget) {
|
|
21
|
+
const existingContext = input.existing_entities?.length
|
|
22
|
+
? `\nExisting entities in the knowledge graph (you may create relations to these):\n${input.existing_entities.map((e) => `- ${e.name} (${e.type})`).join("\n")}`
|
|
23
|
+
: "";
|
|
24
|
+
const { object, usage } = await generateObject({
|
|
25
|
+
model: await createModel(provider),
|
|
26
|
+
schema: extractSchema,
|
|
27
|
+
maxTokens: 16384,
|
|
28
|
+
prompt: `You are an entity and relation extractor for a knowledge graph. Extract the most important named entities and their relationships from the following text.
|
|
29
|
+
|
|
30
|
+
Focus on concrete, named entities — not generic concepts. Limit to the 30 most significant entities.
|
|
31
|
+
|
|
32
|
+
Entity types to look for: client, technology, service, person, organization, concept, project, location, event.
|
|
33
|
+
|
|
34
|
+
For each entity provide:
|
|
35
|
+
- type: the entity category
|
|
36
|
+
- name: the canonical name
|
|
37
|
+
- aliases: alternative names or abbreviations
|
|
38
|
+
- confidence: 0.0-1.0 how confident you are this is a real entity
|
|
39
|
+
|
|
40
|
+
For each relation provide:
|
|
41
|
+
- from_entity / to_entity: entity names (must match extracted entities or existing ones)
|
|
42
|
+
- relation_type: e.g. "uses", "built_on", "employs", "located_in", "needs", "provides"
|
|
43
|
+
- confidence: 0.0-1.0
|
|
44
|
+
- evidence: the text snippet supporting this relation
|
|
45
|
+
${existingContext}
|
|
46
|
+
|
|
47
|
+
Source file: ${input.file_path}
|
|
48
|
+
|
|
49
|
+
Text to analyze:
|
|
50
|
+
---
|
|
51
|
+
${input.text}
|
|
52
|
+
---`,
|
|
53
|
+
});
|
|
54
|
+
const tokenUsage = recordUsage(budget, provider, usage, "extract");
|
|
55
|
+
return { entities: object.entities, relations: object.relations, usage: tokenUsage };
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=extract.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extract.js","sourceRoot":"","sources":["../../src/functions/extract.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9B,QAAQ,EAAE,CAAC,CAAC,KAAK,CAChB,CAAC,CAAC,MAAM,CAAC;QACR,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;QAChB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;QAChB,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAC5B,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;KACpC,CAAC,CACF;IACD,SAAS,EAAE,CAAC,CAAC,KAAK,CACjB,CAAC,CAAC,MAAM,CAAC;QACR,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;QACvB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;QACrB,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE;QACzB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACpC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;KACpB,CAAC,CACF;CACD,CAAC,CAAC;AAEH,MAAM,CAAC,KAAK,UAAU,OAAO,CAC5B,KAAmB,EACnB,QAA0B,EAC1B,MAAqB;IAErB,MAAM,eAAe,GAAG,KAAK,CAAC,iBAAiB,EAAE,MAAM;QACtD,CAAC,CAAC,oFAAoF,KAAK,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;QAChK,CAAC,CAAC,EAAE,CAAC;IAEN,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,cAAc,CAAC;QAC9C,KAAK,EAAE,MAAM,WAAW,CAAC,QAAQ,CAAC;QAClC,MAAM,EAAE,aAAa;QACrB,SAAS,EAAE,KAAK;QAChB,MAAM,EAAE;;;;;;;;;;;;;;;;;EAiBR,eAAe;;eAEF,KAAK,CAAC,SAAS;;;;EAI5B,KAAK,CAAC,IAAI;IACR;KACF,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,WAAW,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;IAEnE,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;AACtF,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { BudgetTracker } from "../budget.js";
|
|
2
|
+
import type { ResolvedProvider } from "../provider.js";
|
|
3
|
+
import type { FindGapsInput, FindGapsResult } from "../types.js";
|
|
4
|
+
export declare function findGaps(input: FindGapsInput, provider: ResolvedProvider, budget: BudgetTracker): Promise<FindGapsResult>;
|
|
5
|
+
//# sourceMappingURL=find-gaps.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"find-gaps.d.ts","sourceRoot":"","sources":["../../src/functions/find-gaps.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAgBjE,wBAAsB,QAAQ,CAC7B,KAAK,EAAE,aAAa,EACpB,QAAQ,EAAE,gBAAgB,EAC1B,MAAM,EAAE,aAAa,GACnB,OAAO,CAAC,cAAc,CAAC,CAwCzB"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { generateObject } from "ai";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
import { createModel } from "./model-factory.js";
|
|
4
|
+
import { recordUsage } from "./usage.js";
|
|
5
|
+
const findGapsSchema = z.object({
|
|
6
|
+
gaps: z.array(z.object({
|
|
7
|
+
entity_name: z.string(),
|
|
8
|
+
entity_type: z.string(),
|
|
9
|
+
suggested_content_type: z.string(),
|
|
10
|
+
priority: z.enum(["high", "medium", "low"]),
|
|
11
|
+
reason: z.string(),
|
|
12
|
+
})),
|
|
13
|
+
});
|
|
14
|
+
export async function findGaps(input, provider, budget) {
|
|
15
|
+
const entityList = input.entities.map((e) => `- ${e.name} (${e.type})`).join("\n");
|
|
16
|
+
const relationList = input.relations.length > 0
|
|
17
|
+
? input.relations.map((r) => `- ${r.from} --[${r.type}]--> ${r.to}`).join("\n")
|
|
18
|
+
: "No relations yet.";
|
|
19
|
+
const contentList = input.existing_content.length > 0
|
|
20
|
+
? input.existing_content.map((c) => `- ${c.path}: "${c.title}" — ${c.summary}`).join("\n")
|
|
21
|
+
: "No content yet.";
|
|
22
|
+
const businessContext = input.business_context
|
|
23
|
+
? `\nBusiness context:\n${input.business_context}\n`
|
|
24
|
+
: "";
|
|
25
|
+
const { object, usage } = await generateObject({
|
|
26
|
+
model: await createModel(provider),
|
|
27
|
+
schema: findGapsSchema,
|
|
28
|
+
prompt: `You are a content gap analyzer for a content engine. Identify entities from the knowledge graph that should have dedicated content pages but currently don't.
|
|
29
|
+
|
|
30
|
+
Knowledge graph entities:
|
|
31
|
+
${entityList}
|
|
32
|
+
|
|
33
|
+
Relations:
|
|
34
|
+
${relationList}
|
|
35
|
+
|
|
36
|
+
Existing content:
|
|
37
|
+
${contentList}
|
|
38
|
+
${businessContext}
|
|
39
|
+
|
|
40
|
+
For each gap, determine:
|
|
41
|
+
- Which entity lacks content
|
|
42
|
+
- What type of content would best serve it (blog-post, case-study, service-page, landing-page, documentation)
|
|
43
|
+
- Priority: "high" (core business entity, many relations), "medium" (useful but not critical), "low" (nice to have)
|
|
44
|
+
- Why this gap matters
|
|
45
|
+
|
|
46
|
+
Only report genuine gaps.`,
|
|
47
|
+
});
|
|
48
|
+
const tokenUsage = recordUsage(budget, provider, usage, "findGaps");
|
|
49
|
+
return { gaps: object.gaps, usage: tokenUsage };
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=find-gaps.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"find-gaps.js","sourceRoot":"","sources":["../../src/functions/find-gaps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/B,IAAI,EAAE,CAAC,CAAC,KAAK,CACZ,CAAC,CAAC,MAAM,CAAC;QACR,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;QACvB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;QACvB,sBAAsB,EAAE,CAAC,CAAC,MAAM,EAAE;QAClC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;QAC3C,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;KAClB,CAAC,CACF;CACD,CAAC,CAAC;AAEH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC7B,KAAoB,EACpB,QAA0B,EAC1B,MAAqB;IAErB,MAAM,UAAU,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnF,MAAM,YAAY,GACjB,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC;QACzB,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QAC/E,CAAC,CAAC,mBAAmB,CAAC;IACxB,MAAM,WAAW,GAChB,KAAK,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC;QAChC,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QAC1F,CAAC,CAAC,iBAAiB,CAAC;IACtB,MAAM,eAAe,GAAG,KAAK,CAAC,gBAAgB;QAC7C,CAAC,CAAC,wBAAwB,KAAK,CAAC,gBAAgB,IAAI;QACpD,CAAC,CAAC,EAAE,CAAC;IAEN,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,cAAc,CAAC;QAC9C,KAAK,EAAE,MAAM,WAAW,CAAC,QAAQ,CAAC;QAClC,MAAM,EAAE,cAAc;QACtB,MAAM,EAAE;;;EAGR,UAAU;;;EAGV,YAAY;;;EAGZ,WAAW;EACX,eAAe;;;;;;;;0BAQS;KACxB,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,WAAW,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;IACpE,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;AACjD,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { BudgetTracker } from "../budget.js";
|
|
2
|
+
import type { ResolvedProvider } from "../provider.js";
|
|
3
|
+
import type { GenerateInput, GenerateResult } from "../types.js";
|
|
4
|
+
export declare function generate(input: GenerateInput, provider: ResolvedProvider, budget: BudgetTracker): Promise<GenerateResult>;
|
|
5
|
+
//# sourceMappingURL=generate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../src/functions/generate.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AASjE,wBAAsB,QAAQ,CAC7B,KAAK,EAAE,aAAa,EACpB,QAAQ,EAAE,gBAAgB,EAC1B,MAAM,EAAE,aAAa,GACnB,OAAO,CAAC,cAAc,CAAC,CAiCzB"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { generateObject } from "ai";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
import { createModel } from "./model-factory.js";
|
|
4
|
+
import { recordUsage } from "./usage.js";
|
|
5
|
+
const generateSchema = z.object({
|
|
6
|
+
frontmatter: z.record(z.unknown()),
|
|
7
|
+
body: z.string(),
|
|
8
|
+
});
|
|
9
|
+
export async function generate(input, provider, budget) {
|
|
10
|
+
const intentSection = input.intent
|
|
11
|
+
? `\nIntent/tone-of-voice rules:\n---\n${input.intent}\n---\n`
|
|
12
|
+
: "";
|
|
13
|
+
const schemaSection = input.collection_schema
|
|
14
|
+
? `\nExpected frontmatter fields:\n${JSON.stringify(input.collection_schema, null, 2)}\n`
|
|
15
|
+
: "";
|
|
16
|
+
const { object, usage } = await generateObject({
|
|
17
|
+
model: await createModel(provider),
|
|
18
|
+
schema: generateSchema,
|
|
19
|
+
prompt: `${input.generation_prompt}
|
|
20
|
+
|
|
21
|
+
You are generating content of type "${input.content_type}" for a content engine. Use ONLY the knowledge context provided below. Do not invent facts.
|
|
22
|
+
|
|
23
|
+
Knowledge context:
|
|
24
|
+
---
|
|
25
|
+
${input.knowledge_context}
|
|
26
|
+
---
|
|
27
|
+
${intentSection}${schemaSection}
|
|
28
|
+
Return a JSON object with:
|
|
29
|
+
- "frontmatter": an object with metadata fields (title, description, etc.)
|
|
30
|
+
- "body": the full content body in markdown format`,
|
|
31
|
+
});
|
|
32
|
+
const tokenUsage = recordUsage(budget, provider, usage, "generate");
|
|
33
|
+
return {
|
|
34
|
+
content: object.body,
|
|
35
|
+
frontmatter: object.frontmatter,
|
|
36
|
+
usage: tokenUsage,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=generate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../src/functions/generate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/B,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;IAClC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;CAChB,CAAC,CAAC;AAEH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC7B,KAAoB,EACpB,QAA0B,EAC1B,MAAqB;IAErB,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM;QACjC,CAAC,CAAC,uCAAuC,KAAK,CAAC,MAAM,SAAS;QAC9D,CAAC,CAAC,EAAE,CAAC;IAEN,MAAM,aAAa,GAAG,KAAK,CAAC,iBAAiB;QAC5C,CAAC,CAAC,mCAAmC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,iBAAiB,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI;QACzF,CAAC,CAAC,EAAE,CAAC;IAEN,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,cAAc,CAAC;QAC9C,KAAK,EAAE,MAAM,WAAW,CAAC,QAAQ,CAAC;QAClC,MAAM,EAAE,cAAc;QACtB,MAAM,EAAE,GAAG,KAAK,CAAC,iBAAiB;;sCAEE,KAAK,CAAC,YAAY;;;;EAItD,KAAK,CAAC,iBAAiB;;EAEvB,aAAa,GAAG,aAAa;;;mDAGoB;KACjD,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,WAAW,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;IAEpE,OAAO;QACN,OAAO,EAAE,MAAM,CAAC,IAAI;QACpB,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,KAAK,EAAE,UAAU;KACjB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { BudgetTracker } from "../budget.js";
|
|
2
|
+
import type { ResolvedProvider } from "../provider.js";
|
|
3
|
+
import type { ImprovePromptInput, ImprovePromptResult } from "../types.js";
|
|
4
|
+
export declare function improvePrompt(input: ImprovePromptInput, provider: ResolvedProvider, budget: BudgetTracker): Promise<ImprovePromptResult>;
|
|
5
|
+
//# sourceMappingURL=improve-prompt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"improve-prompt.d.ts","sourceRoot":"","sources":["../../src/functions/improve-prompt.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,KAAK,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAS3E,wBAAsB,aAAa,CAClC,KAAK,EAAE,kBAAkB,EACzB,QAAQ,EAAE,gBAAgB,EAC1B,MAAM,EAAE,aAAa,GACnB,OAAO,CAAC,mBAAmB,CAAC,CA8B9B"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { generateObject } from "ai";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
import { createModel } from "./model-factory.js";
|
|
4
|
+
import { recordUsage } from "./usage.js";
|
|
5
|
+
const improvePromptSchema = z.object({
|
|
6
|
+
improved_prompt: z.string(),
|
|
7
|
+
changes_summary: z.string(),
|
|
8
|
+
});
|
|
9
|
+
export async function improvePrompt(input, provider, budget) {
|
|
10
|
+
const { object, usage } = await generateObject({
|
|
11
|
+
model: await createModel(provider),
|
|
12
|
+
schema: improvePromptSchema,
|
|
13
|
+
prompt: `You are a prompt engineer improving a content generation prompt. The current prompt was used to generate "${input.content_type}" content, but the judge gave it a score of ${input.judge_score}/100.
|
|
14
|
+
|
|
15
|
+
Current generation prompt:
|
|
16
|
+
---
|
|
17
|
+
${input.current_prompt}
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
Judge's reasoning for the low score:
|
|
21
|
+
---
|
|
22
|
+
${input.judge_reasoning}
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
Improve the generation prompt to address the judge's feedback. Keep the same overall structure but make it more specific about what the judge found lacking. Do NOT change the fundamental approach — just refine the instructions.
|
|
26
|
+
|
|
27
|
+
Return:
|
|
28
|
+
- "improved_prompt": the full improved prompt text
|
|
29
|
+
- "changes_summary": a brief summary of what you changed and why`,
|
|
30
|
+
});
|
|
31
|
+
const tokenUsage = recordUsage(budget, provider, usage, "improvePrompt");
|
|
32
|
+
return {
|
|
33
|
+
improved_prompt: object.improved_prompt,
|
|
34
|
+
changes_summary: object.changes_summary,
|
|
35
|
+
usage: tokenUsage,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=improve-prompt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"improve-prompt.js","sourceRoot":"","sources":["../../src/functions/improve-prompt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE;IAC3B,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE;CAC3B,CAAC,CAAC;AAEH,MAAM,CAAC,KAAK,UAAU,aAAa,CAClC,KAAyB,EACzB,QAA0B,EAC1B,MAAqB;IAErB,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,cAAc,CAAC;QAC9C,KAAK,EAAE,MAAM,WAAW,CAAC,QAAQ,CAAC;QAClC,MAAM,EAAE,mBAAmB;QAC3B,MAAM,EAAE,6GAA6G,KAAK,CAAC,YAAY,+CAA+C,KAAK,CAAC,WAAW;;;;EAIvM,KAAK,CAAC,cAAc;;;;;EAKpB,KAAK,CAAC,eAAe;;;;;;;iEAO0C;KAC/D,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,WAAW,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC;IAEzE,OAAO;QACN,eAAe,EAAE,MAAM,CAAC,eAAe;QACvC,eAAe,EAAE,MAAM,CAAC,eAAe;QACvC,KAAK,EAAE,UAAU;KACjB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export { classify } from "./classify.js";
|
|
2
|
+
export { extract } from "./extract.js";
|
|
3
|
+
export { score } from "./score.js";
|
|
4
|
+
export { judge } from "./judge.js";
|
|
5
|
+
export { detectStaleness } from "./staleness.js";
|
|
6
|
+
export { analyzeIntentImpact } from "./intent-impact.js";
|
|
7
|
+
export { findGaps } from "./find-gaps.js";
|
|
8
|
+
export { generate } from "./generate.js";
|
|
9
|
+
export { improvePrompt } from "./improve-prompt.js";
|
|
10
|
+
export { recordUsage } from "./usage.js";
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/functions/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export { classify } from "./classify.js";
|
|
2
|
+
export { extract } from "./extract.js";
|
|
3
|
+
export { score } from "./score.js";
|
|
4
|
+
export { judge } from "./judge.js";
|
|
5
|
+
export { detectStaleness } from "./staleness.js";
|
|
6
|
+
export { analyzeIntentImpact } from "./intent-impact.js";
|
|
7
|
+
export { findGaps } from "./find-gaps.js";
|
|
8
|
+
export { generate } from "./generate.js";
|
|
9
|
+
export { improvePrompt } from "./improve-prompt.js";
|
|
10
|
+
export { recordUsage } from "./usage.js";
|
|
11
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/functions/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { BudgetTracker } from "../budget.js";
|
|
2
|
+
import type { ResolvedProvider } from "../provider.js";
|
|
3
|
+
import type { IntentImpactInput, IntentImpactResult } from "../types.js";
|
|
4
|
+
export declare function analyzeIntentImpact(input: IntentImpactInput, provider: ResolvedProvider, budget: BudgetTracker): Promise<IntentImpactResult>;
|
|
5
|
+
//# sourceMappingURL=intent-impact.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"intent-impact.d.ts","sourceRoot":"","sources":["../../src/functions/intent-impact.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAWzE,wBAAsB,mBAAmB,CACxC,KAAK,EAAE,iBAAiB,EACxB,QAAQ,EAAE,gBAAgB,EAC1B,MAAM,EAAE,aAAa,GACnB,OAAO,CAAC,kBAAkB,CAAC,CAoC7B"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { generateObject } from "ai";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
import { createModel } from "./model-factory.js";
|
|
4
|
+
import { recordUsage } from "./usage.js";
|
|
5
|
+
const intentImpactSchema = z.object({
|
|
6
|
+
affected_pages: z.array(z.object({ path: z.string(), impact: z.enum(["high", "medium", "low"]), reason: z.string() })),
|
|
7
|
+
summary: z.string(),
|
|
8
|
+
});
|
|
9
|
+
export async function analyzeIntentImpact(input, provider, budget) {
|
|
10
|
+
const contentList = input.content_pages
|
|
11
|
+
.map((p) => `Page: ${p.path}\n---\n${p.text}\n---`)
|
|
12
|
+
.join("\n\n");
|
|
13
|
+
const { object, usage } = await generateObject({
|
|
14
|
+
model: await createModel(provider),
|
|
15
|
+
schema: intentImpactSchema,
|
|
16
|
+
prompt: `You are an intent impact analyzer for a content engine. When editorial intent rules change, you identify which published content pages are affected.
|
|
17
|
+
|
|
18
|
+
Previous intent rules:
|
|
19
|
+
---
|
|
20
|
+
${input.previous_intent}
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
New intent rules:
|
|
24
|
+
---
|
|
25
|
+
${input.changed_intent}
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
Analyze each content page and determine if it violates the NEW rules (but was fine under the old rules).
|
|
29
|
+
|
|
30
|
+
Impact levels:
|
|
31
|
+
- "high": Directly violates new rules (e.g., uses a now-forbidden word, wrong tone)
|
|
32
|
+
- "medium": Partially misaligned, needs revision
|
|
33
|
+
- "low": Minor adjustment needed
|
|
34
|
+
|
|
35
|
+
Only include pages that are actually affected.
|
|
36
|
+
|
|
37
|
+
Content pages:
|
|
38
|
+
${contentList}
|
|
39
|
+
|
|
40
|
+
Return the list of affected pages with impact level and reason, plus a brief summary.`,
|
|
41
|
+
});
|
|
42
|
+
const tokenUsage = recordUsage(budget, provider, usage, "analyzeIntentImpact");
|
|
43
|
+
return { affected_pages: object.affected_pages, summary: object.summary, usage: tokenUsage };
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=intent-impact.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"intent-impact.js","sourceRoot":"","sources":["../../src/functions/intent-impact.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,cAAc,EAAE,CAAC,CAAC,KAAK,CACtB,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAC7F;IACD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;CACnB,CAAC,CAAC;AAEH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACxC,KAAwB,EACxB,QAA0B,EAC1B,MAAqB;IAErB,MAAM,WAAW,GAAG,KAAK,CAAC,aAAa;SACrC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,IAAI,OAAO,CAAC;SAClD,IAAI,CAAC,MAAM,CAAC,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,cAAc,CAAC;QAC9C,KAAK,EAAE,MAAM,WAAW,CAAC,QAAQ,CAAC;QAClC,MAAM,EAAE,kBAAkB;QAC1B,MAAM,EAAE;;;;EAIR,KAAK,CAAC,eAAe;;;;;EAKrB,KAAK,CAAC,cAAc;;;;;;;;;;;;;EAapB,WAAW;;sFAEyE;KACpF,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,WAAW,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,qBAAqB,CAAC,CAAC;IAC/E,OAAO,EAAE,cAAc,EAAE,MAAM,CAAC,cAAc,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;AAC9F,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { BudgetTracker } from "../budget.js";
|
|
2
|
+
import type { ResolvedProvider } from "../provider.js";
|
|
3
|
+
import type { JudgeInput, JudgeResult } from "../types.js";
|
|
4
|
+
export declare function judge(input: JudgeInput, provider: ResolvedProvider, budget: BudgetTracker): Promise<JudgeResult>;
|
|
5
|
+
//# sourceMappingURL=judge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"judge.d.ts","sourceRoot":"","sources":["../../src/functions/judge.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAM3D,wBAAsB,KAAK,CAC1B,KAAK,EAAE,UAAU,EACjB,QAAQ,EAAE,gBAAgB,EAC1B,MAAM,EAAE,aAAa,GACnB,OAAO,CAAC,WAAW,CAAC,CA0BtB"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { generateObject } from "ai";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
import { createModel } from "./model-factory.js";
|
|
4
|
+
import { recordUsage } from "./usage.js";
|
|
5
|
+
const judgeSchema = z.object({ score: z.number().min(0).max(100), reasoning: z.string() });
|
|
6
|
+
export async function judge(input, provider, budget) {
|
|
7
|
+
const intentSection = input.intent
|
|
8
|
+
? `\nIntent/tone-of-voice rules:\n---\n${input.intent}\n---\n`
|
|
9
|
+
: "";
|
|
10
|
+
const { object, usage } = await generateObject({
|
|
11
|
+
model: await createModel(provider),
|
|
12
|
+
schema: judgeSchema,
|
|
13
|
+
prompt: `${input.judge_prompt}
|
|
14
|
+
|
|
15
|
+
You are evaluating a content draft against a gold standard example. Compare quality, structure, specificity, tone, and accuracy.
|
|
16
|
+
|
|
17
|
+
Gold standard (this is what "perfect" looks like):
|
|
18
|
+
---
|
|
19
|
+
${input.gold_standard}
|
|
20
|
+
---
|
|
21
|
+
${intentSection}
|
|
22
|
+
Draft to evaluate:
|
|
23
|
+
---
|
|
24
|
+
${input.draft}
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
Return a single score (0-100) and detailed reasoning explaining the score.`,
|
|
28
|
+
});
|
|
29
|
+
const tokenUsage = recordUsage(budget, provider, usage, "judge");
|
|
30
|
+
return { score: object.score, reasoning: object.reasoning, usage: tokenUsage };
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=judge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"judge.js","sourceRoot":"","sources":["../../src/functions/judge.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AAE3F,MAAM,CAAC,KAAK,UAAU,KAAK,CAC1B,KAAiB,EACjB,QAA0B,EAC1B,MAAqB;IAErB,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM;QACjC,CAAC,CAAC,uCAAuC,KAAK,CAAC,MAAM,SAAS;QAC9D,CAAC,CAAC,EAAE,CAAC;IACN,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,cAAc,CAAC;QAC9C,KAAK,EAAE,MAAM,WAAW,CAAC,QAAQ,CAAC;QAClC,MAAM,EAAE,WAAW;QACnB,MAAM,EAAE,GAAG,KAAK,CAAC,YAAY;;;;;;EAM7B,KAAK,CAAC,aAAa;;EAEnB,aAAa;;;EAGb,KAAK,CAAC,KAAK;;;2EAG8D;KACzE,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,WAAW,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IACjE,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;AAChF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-factory.d.ts","sourceRoot":"","sources":["../../src/functions/model-factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AACxC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAEvD,wBAAsB,WAAW,CAAC,QAAQ,EAAE,gBAAgB,GAAG,OAAO,CAAC,aAAa,CAAC,CAWpF"}
|