@delofarag/ai-utils 1.2.0 → 1.3.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/dist/functions/answerers/ask.d.ts +6 -0
- package/dist/functions/answerers/ask.d.ts.map +1 -0
- package/dist/functions/answerers/ask.js +14 -0
- package/dist/functions/answerers/ask.js.map +1 -0
- package/dist/functions/answerers/websearch.d.ts +2 -0
- package/dist/functions/answerers/websearch.d.ts.map +1 -0
- package/dist/functions/answerers/websearch.js +19 -0
- package/dist/functions/answerers/websearch.js.map +1 -0
- package/dist/functions/evaluators/classify.d.ts +23 -0
- package/dist/functions/evaluators/classify.d.ts.map +1 -0
- package/dist/functions/evaluators/classify.js +61 -0
- package/dist/functions/evaluators/classify.js.map +1 -0
- package/dist/functions/evaluators/decide.d.ts +22 -0
- package/dist/functions/evaluators/decide.d.ts.map +1 -0
- package/dist/functions/evaluators/decide.js +52 -0
- package/dist/functions/evaluators/decide.js.map +1 -0
- package/dist/functions/optimizers/promptify.d.ts +8 -0
- package/dist/functions/optimizers/promptify.d.ts.map +1 -0
- package/dist/functions/optimizers/promptify.js +48 -0
- package/dist/functions/optimizers/promptify.js.map +1 -0
- package/dist/functions/optimizers/ragify.d.ts +6 -0
- package/dist/functions/optimizers/ragify.d.ts.map +1 -0
- package/dist/functions/optimizers/ragify.js +40 -0
- package/dist/functions/optimizers/ragify.js.map +1 -0
- package/dist/functions/parsers/extract.d.ts +9 -0
- package/dist/functions/parsers/extract.d.ts.map +1 -0
- package/dist/functions/parsers/extract.js +37 -0
- package/dist/functions/parsers/extract.js.map +1 -0
- package/dist/functions/parsers/normalize.d.ts +9 -0
- package/dist/functions/parsers/normalize.d.ts.map +1 -0
- package/dist/functions/parsers/normalize.js +63 -0
- package/dist/functions/parsers/normalize.js.map +1 -0
- package/dist/functions/parsers/structure.d.ts +9 -0
- package/dist/functions/parsers/structure.d.ts.map +1 -0
- package/dist/functions/parsers/structure.js +36 -0
- package/dist/functions/parsers/structure.js.map +1 -0
- package/dist/functions/parsers/summarize.d.ts +8 -0
- package/dist/functions/parsers/summarize.d.ts.map +1 -0
- package/dist/functions/parsers/summarize.js +46 -0
- package/dist/functions/parsers/summarize.js.map +1 -0
- package/dist/heart/agent.d.ts.map +1 -1
- package/dist/heart/agent.js +2 -1
- package/dist/heart/agent.js.map +1 -1
- package/dist/heart/tools/Tavily.d.ts +110 -0
- package/dist/heart/tools/Tavily.d.ts.map +1 -0
- package/dist/heart/tools/Tavily.js +135 -0
- package/dist/heart/tools/Tavily.js.map +1 -0
- package/dist/helpers.d.ts +1 -56
- package/dist/helpers.d.ts.map +1 -1
- package/dist/helpers.js +2 -202
- package/dist/helpers.js.map +1 -1
- package/dist/memory.js +2 -2
- package/dist/memory.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ask.d.ts","sourceRoot":"","sources":["../../../src/functions/answerers/ask.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAA0C,MAAM,eAAe,CAAA;AAErF,wBAAsB,GAAG,CAAC,KAAK,EAAC,MAAM,GAAG;IAAC,GAAG,EAAC,aAAa,CAAC;IAAC,QAAQ,EAAC,MAAM,CAAA;CAAC,oBAU1E"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { createSimpleChain, getLLM } from "../../helpers";
|
|
2
|
+
import { ChatPromptTemplate, StringOutputParser } from "../../imports";
|
|
3
|
+
export async function ask(input) {
|
|
4
|
+
const llm = typeof input === "string" ? getLLM({ type: "groq", apikey: process.env.CHATGROQ_API_KEY ?? "" }) : input.llm;
|
|
5
|
+
const prompt = ChatPromptTemplate.fromMessages([
|
|
6
|
+
["system", `
|
|
7
|
+
Du bist ein hilfreicher Assistent.
|
|
8
|
+
`],
|
|
9
|
+
["human", "{input}"]
|
|
10
|
+
]);
|
|
11
|
+
const chain = createSimpleChain(prompt, llm, new StringOutputParser());
|
|
12
|
+
return await chain.invoke({ input });
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=ask.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ask.js","sourceRoot":"","sources":["../../../src/functions/answerers/ask.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AACzD,OAAO,EAAiB,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAErF,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,KAAmD;IACzE,MAAM,GAAG,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,EAAC,IAAI,EAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,EAAE,EAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAA;IACrH,MAAM,MAAM,GAAG,kBAAkB,CAAC,YAAY,CAAC;QAC7C,CAAC,QAAQ,EAAE;;SAER,CAAC;QACJ,CAAC,OAAO,EAAE,SAAS,CAAC;KACrB,CAAC,CAAA;IACF,MAAM,KAAK,GAAG,iBAAiB,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,kBAAkB,EAAE,CAAC,CAAA;IACtE,OAAO,MAAM,KAAK,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAA;AACtC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"websearch.d.ts","sourceRoot":"","sources":["../../../src/functions/answerers/websearch.ts"],"names":[],"mappings":"AAGA,wBAAsB,SAAS,CAAC,KAAK,EAAC,MAAM,+BAczC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { classify } from "../evaluators/classify";
|
|
2
|
+
import { TavilySearch } from "../../heart/tools/Tavily";
|
|
3
|
+
export async function websearch(query) {
|
|
4
|
+
if (!process.env.TAVILY_API_KEY)
|
|
5
|
+
throw new Error("TAVILY_API_KEY is not set for websearch() call");
|
|
6
|
+
const topic = await classify({
|
|
7
|
+
data: query,
|
|
8
|
+
classes: ["general", "news", "finance"],
|
|
9
|
+
context: "die query soll in einem websearch verwendet werden, um relevante informationen zu finden, welcher gegebenen klasse passt er am besten?"
|
|
10
|
+
});
|
|
11
|
+
const tavily = new TavilySearch({
|
|
12
|
+
maxResults: 10,
|
|
13
|
+
tavilyApiKey: process.env.TAVILY_API_KEY,
|
|
14
|
+
includeAnswer: true,
|
|
15
|
+
topic: topic.class
|
|
16
|
+
});
|
|
17
|
+
return (await tavily.invoke({ query })).answer;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=websearch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"websearch.js","sourceRoot":"","sources":["../../../src/functions/answerers/websearch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAEvD,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,KAAY;IACxC,IAAG,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc;QAAE,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAA;IACjG,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC;QAC3B,IAAI,EAAC,KAAK;QACV,OAAO,EAAC,CAAC,SAAS,EAAC,MAAM,EAAC,SAAS,CAAU;QAC7C,OAAO,EAAC,wIAAwI;KACjJ,CAAC,CAAA;IACF,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC;QAC9B,UAAU,EAAC,EAAE;QACb,YAAY,EAAC,OAAO,CAAC,GAAG,CAAC,cAAe;QACxC,aAAa,EAAC,IAAI;QAClB,KAAK,EAAC,KAAK,CAAC,KAAK;KAClB,CAAC,CAAA;IACF,OAAO,CAAC,MAAM,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,CAAA;AAChD,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { BaseChatModel } from "../../imports";
|
|
2
|
+
import { z } from "zod/v3";
|
|
3
|
+
declare function createClassificationSchema<T extends readonly [string, ...string[]]>(classes: T): z.ZodObject<{
|
|
4
|
+
class: z.ZodEnum<z.Writeable<T>>;
|
|
5
|
+
confidence: z.ZodNumber;
|
|
6
|
+
reasoning: z.ZodString;
|
|
7
|
+
}, "strip", z.ZodTypeAny, z.objectUtil.addQuestionMarks<z.baseObjectOutputType<{
|
|
8
|
+
class: z.ZodEnum<z.Writeable<T>>;
|
|
9
|
+
confidence: z.ZodNumber;
|
|
10
|
+
reasoning: z.ZodString;
|
|
11
|
+
}>, any> extends infer T_1 ? { [k in keyof T_1]: T_1[k]; } : never, z.baseObjectInputType<{
|
|
12
|
+
class: z.ZodEnum<z.Writeable<T>>;
|
|
13
|
+
confidence: z.ZodNumber;
|
|
14
|
+
reasoning: z.ZodString;
|
|
15
|
+
}> extends infer T_2 ? { [k_1 in keyof T_2]: T_2[k_1]; } : never>;
|
|
16
|
+
export declare function classify<T extends readonly [string, ...string[]]>({ llm, data, classes, context }: {
|
|
17
|
+
llm?: BaseChatModel;
|
|
18
|
+
data: any;
|
|
19
|
+
classes: T;
|
|
20
|
+
context?: string;
|
|
21
|
+
}): Promise<z.infer<ReturnType<typeof createClassificationSchema<T>>>>;
|
|
22
|
+
export {};
|
|
23
|
+
//# sourceMappingURL=classify.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"classify.d.ts","sourceRoot":"","sources":["../../../src/functions/evaluators/classify.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAE7C,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAA;AAI1B,iBAAS,0BAA0B,CAAC,CAAC,SAAS,SAAS,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC;;;;;;;;;;;;kEAUrF;AAED,wBAAsB,QAAQ,CAAC,CAAC,SAAS,SAAS,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,EAAE,EACvE,GAAuE,EACvE,IAAI,EACJ,OAAO,EACP,OAAO,EACR,EAAE;IACD,GAAG,CAAC,EAAE,aAAa,CAAA;IACnB,IAAI,EAAE,GAAG,CAAC;IACV,OAAO,EAAE,CAAC,CAAC;IACX,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,0BAA0B,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAiDrE"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { createSimpleChain } from "../../helpers";
|
|
2
|
+
import { ChatPromptTemplate } from "../../imports";
|
|
3
|
+
import { z } from "zod/v3";
|
|
4
|
+
import { getLLM } from "../../helpers";
|
|
5
|
+
import { StructuredOutputParser } from "../../imports";
|
|
6
|
+
function createClassificationSchema(classes) {
|
|
7
|
+
return z.object({
|
|
8
|
+
class: z.enum(classes),
|
|
9
|
+
confidence: z.number()
|
|
10
|
+
.min(0)
|
|
11
|
+
.max(100)
|
|
12
|
+
.describe("Sicherheit der Klassifikation"),
|
|
13
|
+
reasoning: z.string()
|
|
14
|
+
.describe("Kurze Begründung basierend auf dem Input")
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
export async function classify({ llm = getLLM({ type: "groq", apikey: process.env.CHATGROQ_API_KEY ?? "" }), data, classes, context }) {
|
|
18
|
+
const inputString = typeof data === "string"
|
|
19
|
+
? data
|
|
20
|
+
: JSON.stringify(data, null, 2);
|
|
21
|
+
const schema = createClassificationSchema(classes);
|
|
22
|
+
const parser = StructuredOutputParser.fromZodSchema(schema);
|
|
23
|
+
const prompt = await ChatPromptTemplate.fromMessages([
|
|
24
|
+
["system", `
|
|
25
|
+
Du bist ein präziser Klassifizierungsagent.
|
|
26
|
+
|
|
27
|
+
Aufgabe:
|
|
28
|
+
- Ordne den gegebenen Input exakt EINER der folgenden Klassen zu:
|
|
29
|
+
${classes.map(c => `- ${c}`).join("\n")}
|
|
30
|
+
|
|
31
|
+
Regeln:
|
|
32
|
+
- Wähle genau eine Klasse
|
|
33
|
+
- Nutze nur Informationen aus dem Input
|
|
34
|
+
- Keine Annahmen oder erfundene Inhalte
|
|
35
|
+
- Wenn die Zuordnung unsicher ist, wähle die wahrscheinlichste Klasse und setze eine niedrige Confidence
|
|
36
|
+
|
|
37
|
+
Confidence:
|
|
38
|
+
- 0 = reine Vermutung
|
|
39
|
+
- 100 = absolut sicher
|
|
40
|
+
|
|
41
|
+
Antwort:
|
|
42
|
+
- Ausschließlich valides JSON gemäß Schema
|
|
43
|
+
- Kein zusätzlicher Text
|
|
44
|
+
|
|
45
|
+
${context ? `
|
|
46
|
+
Etwas Kontext, um dir das klassifizieren zu erleichtern:
|
|
47
|
+
${context}
|
|
48
|
+
` : ""}
|
|
49
|
+
|
|
50
|
+
Schema:
|
|
51
|
+
{format_instructions}
|
|
52
|
+
`],
|
|
53
|
+
["human", "{input}"]
|
|
54
|
+
]).partial({
|
|
55
|
+
format_instructions: parser.getFormatInstructions()
|
|
56
|
+
});
|
|
57
|
+
const chain = createSimpleChain(prompt, llm, parser);
|
|
58
|
+
const result = await chain.invoke({ input: inputString });
|
|
59
|
+
return schema.parse(result);
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=classify.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"classify.js","sourceRoot":"","sources":["../../../src/functions/evaluators/classify.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AAEjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAClD,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAA;AAC1B,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AACtC,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAA;AAEtD,SAAS,0BAA0B,CAA2C,OAAU;IACpF,OAAO,CAAC,CAAC,MAAM,CAAC;QACd,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC;QACtB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;aACnB,GAAG,CAAC,CAAC,CAAC;aACN,GAAG,CAAC,GAAG,CAAC;aACR,QAAQ,CAAC,+BAA+B,CAAC;QAC5C,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;aAClB,QAAQ,CAAC,0CAA0C,CAAC;KACxD,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ,CAA2C,EACvE,GAAG,GAAG,MAAM,CAAC,EAAC,IAAI,EAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,EAAE,EAAC,CAAC,EACvE,IAAI,EACJ,OAAO,EACP,OAAO,EAMR;IAEC,MAAM,WAAW,GACf,OAAO,IAAI,KAAK,QAAQ;QACtB,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;IAEnC,MAAM,MAAM,GAAG,0BAA0B,CAAC,OAAO,CAAC,CAAA;IAClD,MAAM,MAAM,GAAG,sBAAsB,CAAC,aAAa,CAAC,MAAM,CAAC,CAAA;IAE3D,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,YAAY,CAAC;QACnD,CAAC,QAAQ,EAAE;;;;;UAKP,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;UAgBrC,OAAO,CAAC,CAAC,CAAC;;UAEV,OAAO;SACR,CAAC,CAAC,CAAC,EAAE;;;;SAIL,CAAC;QACJ,CAAC,OAAO,EAAE,SAAS,CAAC;KACrB,CAAC,CAAC,OAAO,CAAC;QACT,mBAAmB,EAAE,MAAM,CAAC,qBAAqB,EAAE;KACpD,CAAC,CAAA;IAEF,MAAM,KAAK,GAAG,iBAAiB,CAAC,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,CAAA;IACpD,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAA;IAEzD,OAAO,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;AAC7B,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { z } from "zod/v3";
|
|
2
|
+
import { BaseChatModel } from "../../imports";
|
|
3
|
+
declare const decideSchema: z.ZodObject<{
|
|
4
|
+
decision: z.ZodEnum<["yes", "no", "unclear"]>;
|
|
5
|
+
reason: z.ZodString;
|
|
6
|
+
confidence: z.ZodNumber;
|
|
7
|
+
}, "strip", z.ZodTypeAny, {
|
|
8
|
+
confidence: number;
|
|
9
|
+
decision: "yes" | "no" | "unclear";
|
|
10
|
+
reason: string;
|
|
11
|
+
}, {
|
|
12
|
+
confidence: number;
|
|
13
|
+
decision: "yes" | "no" | "unclear";
|
|
14
|
+
reason: string;
|
|
15
|
+
}>;
|
|
16
|
+
export declare function decide({ llm, material, kriteria_to_decide }: {
|
|
17
|
+
llm?: BaseChatModel;
|
|
18
|
+
material: any;
|
|
19
|
+
kriteria_to_decide: string;
|
|
20
|
+
}): Promise<z.infer<typeof decideSchema>>;
|
|
21
|
+
export {};
|
|
22
|
+
//# sourceMappingURL=decide.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decide.d.ts","sourceRoot":"","sources":["../../../src/functions/evaluators/decide.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAA;AAC1B,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAM7C,QAAA,MAAM,YAAY;;;;;;;;;;;;EAad,CAAA;AAEF,wBAAsB,MAAM,CAAC,EAC3B,GAAuE,EACvE,QAAQ,EACR,kBAAkB,EACnB,EAAE;IACD,GAAG,CAAC,EAAE,aAAa,CAAA;IACnB,QAAQ,EAAE,GAAG,CAAA;IACb,kBAAkB,EAAE,MAAM,CAAA;CAC3B,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC,CAoCxC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { z } from "zod/v3";
|
|
2
|
+
import { ChatPromptTemplate } from "../../imports";
|
|
3
|
+
import { getLLM } from "../../helpers";
|
|
4
|
+
import { StructuredOutputParser } from "../../imports";
|
|
5
|
+
import { createSimpleChain } from "../../helpers";
|
|
6
|
+
const decideSchema = z.object({
|
|
7
|
+
decision: z.enum(["yes", "no", "unclear"])
|
|
8
|
+
.describe("Ergebnis der Entscheidung basierend auf dem Kriterium"),
|
|
9
|
+
reason: z.string()
|
|
10
|
+
.describe("Sachliche Begründung, die sich ausschließlich auf das gegebene Material bezieht"),
|
|
11
|
+
confidence: z.number()
|
|
12
|
+
.min(0)
|
|
13
|
+
.max(100)
|
|
14
|
+
.describe("Sicherheit der Entscheidung. Regeln: " +
|
|
15
|
+
"decision='unclear' → confidence=0. " +
|
|
16
|
+
"decision='yes' oder 'no' → confidence > 0")
|
|
17
|
+
});
|
|
18
|
+
export async function decide({ llm = getLLM({ type: "groq", apikey: process.env.CHATGROQ_API_KEY ?? "" }), material, kriteria_to_decide }) {
|
|
19
|
+
const inputString = typeof material === "string"
|
|
20
|
+
? material
|
|
21
|
+
: JSON.stringify(material, null, 2);
|
|
22
|
+
const jsonParser = StructuredOutputParser.fromZodSchema(decideSchema);
|
|
23
|
+
const prompt = await ChatPromptTemplate.fromMessages([
|
|
24
|
+
["system", `
|
|
25
|
+
Analytischer Entscheidungsagent.
|
|
26
|
+
|
|
27
|
+
Entscheide anhand des Materials und des Kriteriums:
|
|
28
|
+
- Ergebnis: "yes" | "no" | "unclear"
|
|
29
|
+
- "unclear", wenn keine klare Entscheidung möglich ist
|
|
30
|
+
- Begründung nur aus dem Material
|
|
31
|
+
|
|
32
|
+
Regeln:
|
|
33
|
+
- Keine Annahmen oder erfundenen Infos
|
|
34
|
+
- decision="unclear" → confidence<10
|
|
35
|
+
- decision≠"unclear" → confidence>10
|
|
36
|
+
- Nur JSON gemäß Schema
|
|
37
|
+
|
|
38
|
+
Kriterium:
|
|
39
|
+
${kriteria_to_decide}
|
|
40
|
+
|
|
41
|
+
Schema:
|
|
42
|
+
{format_instructions}
|
|
43
|
+
`],
|
|
44
|
+
["human", "{input}"]
|
|
45
|
+
]).partial({
|
|
46
|
+
format_instructions: jsonParser.getFormatInstructions()
|
|
47
|
+
});
|
|
48
|
+
const chain = createSimpleChain(prompt, llm, jsonParser);
|
|
49
|
+
const result = await chain.invoke({ input: inputString });
|
|
50
|
+
return decideSchema.parse(result);
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=decide.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decide.js","sourceRoot":"","sources":["../../../src/functions/evaluators/decide.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAA;AAE1B,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AACtC,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAA;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AAEjD,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1B,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;SACvC,QAAQ,CAAC,uDAAuD,CAAC;IACpE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;SACf,QAAQ,CAAC,iFAAiF,CAAC;IAC9F,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;SACnB,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,GAAG,CAAC;SACR,QAAQ,CACP,uCAAuC;QACvC,qCAAqC;QACrC,2CAA2C,CAC5C;CACJ,CAAC,CAAA;AAEF,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,EAC3B,GAAG,GAAG,MAAM,CAAC,EAAC,IAAI,EAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,EAAE,EAAC,CAAC,EACvE,QAAQ,EACR,kBAAkB,EAKnB;IAEC,MAAM,WAAW,GACf,OAAO,QAAQ,KAAK,QAAQ;QAC1B,CAAC,CAAC,QAAQ;QACV,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;IAEvC,MAAM,UAAU,GAAG,sBAAsB,CAAC,aAAa,CAAC,YAAY,CAAC,CAAA;IACrE,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,YAAY,CAAC;QACnD,CAAC,QAAQ,EAAE;;;;;;;;;;;;;;;UAeP,kBAAkB;;;;SAInB,CAAC;QACJ,CAAC,OAAO,EAAE,SAAS,CAAC;KACrB,CAAC,CAAC,OAAO,CAAC;QACT,mBAAmB,EAAE,UAAU,CAAC,qBAAqB,EAAE;KACxD,CAAC,CAAA;IACF,MAAM,KAAK,GAAG,iBAAiB,CAAC,MAAM,EAAE,GAAG,EAAE,UAAU,CAAC,CAAA;IACxD,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAA;IACzD,OAAO,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;AACnC,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { BaseChatModel } from "../../imports";
|
|
2
|
+
export declare function promptify({ llm, request, agentRole, }: {
|
|
3
|
+
llm?: BaseChatModel;
|
|
4
|
+
request: string;
|
|
5
|
+
agentRole?: string;
|
|
6
|
+
outputFormat?: string;
|
|
7
|
+
}): Promise<string>;
|
|
8
|
+
//# sourceMappingURL=promptify.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"promptify.d.ts","sourceRoot":"","sources":["../../../src/functions/optimizers/promptify.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAK7C,wBAAsB,SAAS,CAAC,EAC5B,GAAuE,EACvE,OAAO,EACP,SAAS,GACV,EAAE;IACD,GAAG,CAAC,EAAE,aAAa,CAAA;IACnB,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB,GAAG,OAAO,CAAC,MAAM,CAAC,CA6ClB"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { getLLM } from "../../helpers";
|
|
2
|
+
import { ChatPromptTemplate } from "../../imports";
|
|
3
|
+
import { createSimpleChain } from "../../helpers";
|
|
4
|
+
import { StringOutputParser } from "../../imports";
|
|
5
|
+
export async function promptify({ llm = getLLM({ type: "groq", apikey: process.env.CHATGROQ_API_KEY ?? "" }), request, agentRole, }) {
|
|
6
|
+
const prompt = ChatPromptTemplate.fromMessages([
|
|
7
|
+
["system", `
|
|
8
|
+
Du bist ein Prompt-Engineering-Experte für KI-Agenten.
|
|
9
|
+
|
|
10
|
+
Deine Aufgabe:
|
|
11
|
+
- Erstelle aus der Nutzeranfrage einen präzisen, stabilen System-Prompt
|
|
12
|
+
für einen spezialisierten KI-Agenten.
|
|
13
|
+
|
|
14
|
+
Grundprinzip:
|
|
15
|
+
- Der Prompt soll das Denken des Agenten steuern, nicht nur sein Verhalten.
|
|
16
|
+
|
|
17
|
+
Regeln für den zu erzeugenden Prompt:
|
|
18
|
+
- Definiere Rolle, Ziel, Vorgehen, Regeln und Output klar und explizit
|
|
19
|
+
- Vermeide vage oder motivierende Sprache
|
|
20
|
+
- Keine Marketingbegriffe, kein Berater-Ton
|
|
21
|
+
- Keine Annahmen über Nutzerziele oder Kontext, außer sie sind explizit genannt
|
|
22
|
+
- Erlaube explizit Unsicherheit und den Hinweis auf fehlende Informationen
|
|
23
|
+
- Trenne Fakten klar von Einschätzungen
|
|
24
|
+
- Keine Empfehlungen oder Handlungsaufforderungen, außer sie sind ausdrücklich gefordert
|
|
25
|
+
|
|
26
|
+
Zwingende Struktur des erzeugten Prompts:
|
|
27
|
+
1. Rolle des Agenten
|
|
28
|
+
2. Ziel / Aufgabe
|
|
29
|
+
3. Vorgehensweise (Analyse- oder Denkprinzipien)
|
|
30
|
+
4. Regeln & Einschränkungen
|
|
31
|
+
5. Erwartetes Output-Format
|
|
32
|
+
|
|
33
|
+
${agentRole ? `
|
|
34
|
+
Agent-Rolle (stilistischer Kontext, keine Logikannahmen):
|
|
35
|
+
- ${agentRole}
|
|
36
|
+
` : ""}
|
|
37
|
+
|
|
38
|
+
Ausgabe:
|
|
39
|
+
- Gib ausschließlich den finalen System-Prompt als Klartext zurück
|
|
40
|
+
- Keine Meta-Erklärungen, keine Kommentare
|
|
41
|
+
`],
|
|
42
|
+
["human", "{input}"]
|
|
43
|
+
]);
|
|
44
|
+
const chain = createSimpleChain(prompt, llm, new StringOutputParser());
|
|
45
|
+
const result = await chain.invoke({ input: request });
|
|
46
|
+
return result;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=promptify.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"promptify.js","sourceRoot":"","sources":["../../../src/functions/optimizers/promptify.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AAEtC,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAElD,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,EAC5B,GAAG,GAAG,MAAM,CAAC,EAAC,IAAI,EAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,EAAE,EAAC,CAAC,EACvE,OAAO,EACP,SAAS,GAMV;IAEC,MAAM,MAAM,GAAG,kBAAkB,CAAC,YAAY,CAAC;QAC7C,CAAC,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;UA0BP,SAAS,CAAC,CAAC,CAAC;;YAEV,SAAS;SACZ,CAAC,CAAC,CAAC,EAAE;;;;;SAKL,CAAC;QACJ,CAAC,OAAO,EAAE,SAAS,CAAC;KACrB,CAAC,CAAA;IAEF,MAAM,KAAK,GAAG,iBAAiB,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,kBAAkB,EAAE,CAAC,CAAA;IACtE,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAA;IAErD,OAAO,MAAgB,CAAA;AACzB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ragify.d.ts","sourceRoot":"","sources":["../../../src/functions/optimizers/ragify.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAK7C,wBAAsB,MAAM,CAAC,EACzB,GAAuE,EACvE,IAAI,GACL,EAAE;IACD,GAAG,CAAC,EAAE,aAAa,CAAA;IACnB,IAAI,EAAE,MAAM,CAAA;CACb,GAAG,OAAO,CAAC,MAAM,CAAC,CAqClB"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { getLLM } from "../../helpers";
|
|
2
|
+
import { ChatPromptTemplate } from "../../imports";
|
|
3
|
+
import { createSimpleChain } from "../../helpers";
|
|
4
|
+
import { StringOutputParser } from "../../imports";
|
|
5
|
+
export async function ragify({ llm = getLLM({ type: "groq", apikey: process.env.CHATGROQ_API_KEY ?? "" }), data, }) {
|
|
6
|
+
const prompt = ChatPromptTemplate.fromMessages([
|
|
7
|
+
["system", `
|
|
8
|
+
Du bist ein RAG-Kontext-Optimierer.
|
|
9
|
+
|
|
10
|
+
Aufgabe:
|
|
11
|
+
- Wandle den gegebenen Input in einen strukturierten, informationsdichten Kontext um,
|
|
12
|
+
der für nachgelagertes Reasoning optimal geeignet ist.
|
|
13
|
+
|
|
14
|
+
Regeln:
|
|
15
|
+
- Nutze ausschließlich Informationen aus dem Input
|
|
16
|
+
- Keine Annahmen, keine Ergänzungen
|
|
17
|
+
- Entferne Redundanz und Füllwörter
|
|
18
|
+
- Erhalte alle relevanten Fakten, Risiken, Entscheidungen und Zusammenhänge
|
|
19
|
+
- Schreibe sachlich, präzise und explizit
|
|
20
|
+
|
|
21
|
+
Struktur:
|
|
22
|
+
- Nutze klare Abschnitte mit Überschriften
|
|
23
|
+
- Bevorzuge Listen gegenüber Fließtext
|
|
24
|
+
- Jede Aussage muss eigenständig verständlich sein
|
|
25
|
+
|
|
26
|
+
Ausgabe:
|
|
27
|
+
- Gib ausschließlich den strukturierten Kontext als Text zurück
|
|
28
|
+
- Kein JSON, kein Meta-Text
|
|
29
|
+
- Bevorzuge Fakten, Beobachtungen und Risiken gegenüber narrativen Zusammenfassungen.
|
|
30
|
+
- Wenn ein Satz mit „es gibt“, „wird angesehen“, „könnte“ beginnt,
|
|
31
|
+
ist er fast immer zu weich für gutes RAG.
|
|
32
|
+
|
|
33
|
+
`],
|
|
34
|
+
["human", "{input}"]
|
|
35
|
+
]);
|
|
36
|
+
const chain = createSimpleChain(prompt, llm, new StringOutputParser());
|
|
37
|
+
const result = await chain.invoke({ input: data });
|
|
38
|
+
return result;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=ragify.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ragify.js","sourceRoot":"","sources":["../../../src/functions/optimizers/ragify.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AAEtC,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAElD,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,EACzB,GAAG,GAAG,MAAM,CAAC,EAAC,IAAI,EAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,EAAE,EAAC,CAAC,EACvE,IAAI,GAIL;IAEC,MAAM,MAAM,GAAG,kBAAkB,CAAC,YAAY,CAAC;QAC7C,CAAC,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;aA0BJ,CAAC;QACR,CAAC,OAAO,EAAE,SAAS,CAAC;KACrB,CAAC,CAAA;IAEF,MAAM,KAAK,GAAG,iBAAiB,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,kBAAkB,EAAE,CAAC,CAAA;IACtE,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;IAElD,OAAO,MAAgB,CAAA;AACzB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { BaseChatModel } from "../../imports";
|
|
2
|
+
import { z } from "zod/v3";
|
|
3
|
+
export declare function extract<T extends z.ZodObject<any>>({ llm, data, goal, schema }: {
|
|
4
|
+
llm?: BaseChatModel;
|
|
5
|
+
data: any;
|
|
6
|
+
goal?: string;
|
|
7
|
+
schema: T;
|
|
8
|
+
}): Promise<z.infer<T>>;
|
|
9
|
+
//# sourceMappingURL=extract.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extract.d.ts","sourceRoot":"","sources":["../../../src/functions/parsers/extract.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAE7C,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAA;AAI1B,wBAAsB,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,EACtD,GAAuE,EACvE,IAAI,EACJ,IAAI,EACJ,MAAM,EACP,EAAE;IACD,GAAG,CAAC,EAAE,aAAa,CAAA;IACnB,IAAI,EAAE,GAAG,CAAA;IACT,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,CAAC,CAAA;CACV,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAiCtB"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { createSimpleChain } from "../../helpers";
|
|
2
|
+
import { ChatPromptTemplate } from "../../imports";
|
|
3
|
+
import { getLLM } from "../../helpers";
|
|
4
|
+
import { StructuredOutputParser } from "../../imports";
|
|
5
|
+
export async function extract({ llm = getLLM({ type: "groq", apikey: process.env.CHATGROQ_API_KEY ?? "" }), data, goal, schema }) {
|
|
6
|
+
const inputString = typeof data === "string"
|
|
7
|
+
? data
|
|
8
|
+
: JSON.stringify(data, null, 2);
|
|
9
|
+
const parser = StructuredOutputParser.fromZodSchema(schema);
|
|
10
|
+
const prompt = await ChatPromptTemplate.fromMessages([
|
|
11
|
+
["system", `
|
|
12
|
+
Du bist ein präziser Informationsextraktor.
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
${goal ? `
|
|
16
|
+
Ziel:
|
|
17
|
+
Extrahiere ausschließlich die Informationen, die für folgendes Ziel relevant sind:
|
|
18
|
+
- "${goal}"`
|
|
19
|
+
:
|
|
20
|
+
"- Extrahiere ALLE Informationen aus dem Input, die zum angegebenen Schema passen."}
|
|
21
|
+
|
|
22
|
+
Regeln:
|
|
23
|
+
- Keine Interpretation
|
|
24
|
+
- Keine Ergänzungen
|
|
25
|
+
- Nur Informationen, die explizit im Input enthalten sind
|
|
26
|
+
- Antworte ausschließlich im JSON-Schema
|
|
27
|
+
|
|
28
|
+
Schema:
|
|
29
|
+
{format_instructions}
|
|
30
|
+
`],
|
|
31
|
+
["human", "{input}"]
|
|
32
|
+
]).partial({ format_instructions: parser.getFormatInstructions() });
|
|
33
|
+
const chain = createSimpleChain(prompt, llm, parser);
|
|
34
|
+
const result = await chain.invoke({ input: inputString });
|
|
35
|
+
return schema.parse(result);
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=extract.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extract.js","sourceRoot":"","sources":["../../../src/functions/parsers/extract.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AAEjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAElD,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AACtC,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAA;AAEtD,MAAM,CAAC,KAAK,UAAU,OAAO,CAA6B,EACtD,GAAG,GAAG,MAAM,CAAC,EAAC,IAAI,EAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,EAAE,EAAC,CAAC,EACvE,IAAI,EACJ,IAAI,EACJ,MAAM,EAMP;IAEC,MAAM,WAAW,GAAG,OAAO,IAAI,KAAK,QAAQ;QAC1C,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;IAEjC,MAAM,MAAM,GAAG,sBAAsB,CAAC,aAAa,CAAC,MAAM,CAAC,CAAA;IAC3D,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,YAAY,CAAC;QACnD,CAAC,QAAQ,EAAE;;;;YAIL,IAAI,CAAC,CAAC,CAAC;;;aAGN,IAAI,GAAG;gBACZ,CAAC;oBACA,mFAAmF;;;;;;;;;;aAU/E,CAAC;QACR,CAAC,OAAO,EAAE,SAAS,CAAC;KACrB,CAAC,CAAC,OAAO,CAAC,EAAE,mBAAmB,EAAE,MAAM,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAA;IACnE,MAAM,KAAK,GAAG,iBAAiB,CAAC,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,CAAA;IACpD,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAA;IACzD,OAAO,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;AAC7B,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { BaseChatModel } from "../../imports";
|
|
2
|
+
import { z } from "zod/v3";
|
|
3
|
+
export declare function normalize<T extends z.ZodObject<any>>({ llm, data, into, retries }: {
|
|
4
|
+
llm?: BaseChatModel;
|
|
5
|
+
data: any;
|
|
6
|
+
into: T;
|
|
7
|
+
retries?: number;
|
|
8
|
+
}): Promise<z.infer<T>>;
|
|
9
|
+
//# sourceMappingURL=normalize.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalize.d.ts","sourceRoot":"","sources":["../../../src/functions/parsers/normalize.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAE7C,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAA;AAI1B,wBAAsB,SAAS,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,EACxD,GAAyE,EACzE,IAAI,EACJ,IAAI,EACJ,OAAW,EACZ,EAAE;IACD,GAAG,CAAC,EAAE,aAAa,CAAA;IACnB,IAAI,EAAE,GAAG,CAAA;IACT,IAAI,EAAE,CAAC,CAAA;IACP,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAkEtB"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { createSimpleChain } from "../../helpers";
|
|
2
|
+
import { ChatPromptTemplate } from "../../imports";
|
|
3
|
+
import { getLLM } from "../../helpers";
|
|
4
|
+
import { StructuredOutputParser } from "../../imports";
|
|
5
|
+
export async function normalize({ llm = getLLM({ type: "groq", apikey: process.env.CHATGROQ_API_KEY ?? "" }), data, into, retries = 2 }) {
|
|
6
|
+
const inputString = typeof data === "string"
|
|
7
|
+
? data
|
|
8
|
+
: JSON.stringify(data, null, 2);
|
|
9
|
+
const parser = StructuredOutputParser.fromZodSchema(into);
|
|
10
|
+
const prompt = await ChatPromptTemplate.fromMessages([
|
|
11
|
+
["system", `
|
|
12
|
+
Du bist ein strenger Normalisierungs-Parser.
|
|
13
|
+
|
|
14
|
+
Deine Aufgabe:
|
|
15
|
+
- Wandle den gegebenen Input in die EXAKTE Zielstruktur um
|
|
16
|
+
- Nutze ausschließlich Informationen aus dem Input
|
|
17
|
+
- Führe nur offensichtliche, deterministische Normalisierungen durch
|
|
18
|
+
|
|
19
|
+
Erlaubt:
|
|
20
|
+
- Formatvereinheitlichung (z. B. Datumsformate, Booleans, Numbers)
|
|
21
|
+
- Entfernen irrelevanter Felder
|
|
22
|
+
- Umwandlung äquivalenter Werte (z. B. "yes" → true)
|
|
23
|
+
|
|
24
|
+
NICHT erlaubt:
|
|
25
|
+
- Raten oder Ergänzen fehlender Informationen
|
|
26
|
+
- Interpretation oder Bedeutungsänderung
|
|
27
|
+
- Ableitung impliziter Fakten
|
|
28
|
+
- Kreative oder heuristische Entscheidungen
|
|
29
|
+
|
|
30
|
+
Wenn ein Wert nicht eindeutig normalisiert werden kann:
|
|
31
|
+
- Setze ihn auf null ODER
|
|
32
|
+
- lasse ihn weg (wenn optional)
|
|
33
|
+
- aber erfinde nichts
|
|
34
|
+
|
|
35
|
+
Antwort:
|
|
36
|
+
- AUSSCHLIESSLICH valides JSON
|
|
37
|
+
- KEIN zusätzlicher Text
|
|
38
|
+
- KEINE Markdown-Blöcke
|
|
39
|
+
|
|
40
|
+
Schema:
|
|
41
|
+
{format_instructions}
|
|
42
|
+
`],
|
|
43
|
+
["human", "{input}"]
|
|
44
|
+
]).partial({
|
|
45
|
+
format_instructions: parser.getFormatInstructions()
|
|
46
|
+
});
|
|
47
|
+
const chain = createSimpleChain(prompt, llm, parser);
|
|
48
|
+
let lastError = null;
|
|
49
|
+
for (let i = 0; i <= retries; i++) {
|
|
50
|
+
try {
|
|
51
|
+
const result = await chain.invoke({ input: inputString });
|
|
52
|
+
return into.parse(result);
|
|
53
|
+
}
|
|
54
|
+
catch (error) {
|
|
55
|
+
lastError = error;
|
|
56
|
+
if (i < retries) {
|
|
57
|
+
console.warn(`normalize() Versuch ${i + 1} fehlgeschlagen, retry...`);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
throw new Error(`normalize() failed after ${retries + 1} attempts. Last error: ${lastError?.message}`);
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=normalize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalize.js","sourceRoot":"","sources":["../../../src/functions/parsers/normalize.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AAEjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAElD,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AACtC,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAA;AAEtD,MAAM,CAAC,KAAK,UAAU,SAAS,CAA6B,EACxD,GAAG,GAAG,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,EAAE,EAAC,CAAC,EACzE,IAAI,EACJ,IAAI,EACJ,OAAO,GAAG,CAAC,EAMZ;IAEC,MAAM,WAAW,GACf,OAAO,IAAI,KAAK,QAAQ;QACtB,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;IAEnC,MAAM,MAAM,GAAG,sBAAsB,CAAC,aAAa,CAAC,IAAI,CAAC,CAAA;IAEzD,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,YAAY,CAAC;QACnD,CAAC,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;aA+BJ,CAAC;QACR,CAAC,OAAO,EAAE,SAAS,CAAC;KACrB,CAAC,CAAC,OAAO,CAAC;QACT,mBAAmB,EAAE,MAAM,CAAC,qBAAqB,EAAE;KACpD,CAAC,CAAA;IAEF,MAAM,KAAK,GAAG,iBAAiB,CAAC,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,CAAA;IAEpD,IAAI,SAAS,GAAiB,IAAI,CAAA;IAElC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAA;YACzD,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;QAC3B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,SAAS,GAAG,KAAc,CAAA;YAC1B,IAAI,CAAC,GAAG,OAAO,EAAE,CAAC;gBAChB,OAAO,CAAC,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAA;YACvE,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,IAAI,KAAK,CACb,4BAA4B,OAAO,GAAG,CAAC,0BAA0B,SAAS,EAAE,OAAO,EAAE,CACtF,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { BaseChatModel } from "../../imports";
|
|
2
|
+
import { z } from "zod/v3";
|
|
3
|
+
export declare function structure<T extends z.ZodObject<any, any>>({ data, into, llm, retries }: {
|
|
4
|
+
data: any;
|
|
5
|
+
into: T;
|
|
6
|
+
llm?: BaseChatModel;
|
|
7
|
+
retries?: number;
|
|
8
|
+
}): Promise<z.infer<T>>;
|
|
9
|
+
//# sourceMappingURL=structure.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"structure.d.ts","sourceRoot":"","sources":["../../../src/functions/parsers/structure.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAA0B,MAAM,eAAe,CAAA;AAErE,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAA;AAE1B,wBAAsB,SAAS,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EAC7D,IAAI,EACJ,IAAI,EACJ,GAAuE,EACvE,OAAW,EACd,EAAC;IACE,IAAI,EAAE,GAAG,CAAC;IACV,IAAI,EAAE,CAAC,CAAC;IACR,GAAG,CAAC,EAAE,aAAa,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAA;CACnB,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CA8BtB"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { createSimpleChain, getLLM } from "../../helpers";
|
|
2
|
+
import { StructuredOutputParser } from "../../imports";
|
|
3
|
+
import { ChatPromptTemplate } from "../../imports";
|
|
4
|
+
export async function structure({ data, into, llm = getLLM({ type: "groq", apikey: process.env.CHATGROQ_API_KEY ?? "" }), retries = 2 }) {
|
|
5
|
+
if (!process.env.CHATGROQ_API_KEY)
|
|
6
|
+
throw new Error("CHATGROQ_API_KEY is not set for structure() call");
|
|
7
|
+
const inputString = typeof data === "string" ? data : JSON.stringify(data, null, 2);
|
|
8
|
+
const jsonParser = StructuredOutputParser.fromZodSchema(into);
|
|
9
|
+
const prompt = await ChatPromptTemplate.fromMessages([
|
|
10
|
+
["system", `Du bist ein JSON-Formatierer.
|
|
11
|
+
REGELN:
|
|
12
|
+
- Gib NUR valides JSON zurück, KEIN anderer Text
|
|
13
|
+
- Keine Markdown Code-Blöcke (\`\`\`json)
|
|
14
|
+
- Halte dich EXAKT an das Schema
|
|
15
|
+
|
|
16
|
+
Schema:
|
|
17
|
+
{format_instructions}`],
|
|
18
|
+
["human", "{input}"]
|
|
19
|
+
]).partial({ format_instructions: jsonParser.getFormatInstructions() });
|
|
20
|
+
const chain = createSimpleChain(prompt, llm, jsonParser);
|
|
21
|
+
let lastError = null;
|
|
22
|
+
for (let i = 0; i <= retries; i++) {
|
|
23
|
+
try {
|
|
24
|
+
const result = await chain.invoke({ input: inputString });
|
|
25
|
+
return into.parse(result);
|
|
26
|
+
}
|
|
27
|
+
catch (error) {
|
|
28
|
+
lastError = error;
|
|
29
|
+
if (i < retries) {
|
|
30
|
+
console.warn(`structure() Versuch ${i + 1} fehlgeschlagen, retry...`);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
throw new Error(`structure() failed after ${retries + 1} attempts, Error: ${lastError?.message}`);
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=structure.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"structure.js","sourceRoot":"","sources":["../../../src/functions/parsers/structure.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AACzD,OAAO,EAAiB,sBAAsB,EAAE,MAAM,eAAe,CAAA;AACrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAGlD,MAAM,CAAC,KAAK,UAAU,SAAS,CAAkC,EAC7D,IAAI,EACJ,IAAI,EACJ,GAAG,GAAG,MAAM,CAAC,EAAC,IAAI,EAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,EAAE,EAAC,CAAC,EACvE,OAAO,GAAG,CAAC,EAMd;IACG,IAAG,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB;QAAE,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAA;IACrG,MAAM,WAAW,GAAG,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;IACnF,MAAM,UAAU,GAAG,sBAAsB,CAAC,aAAa,CAAC,IAAI,CAAC,CAAA;IAC7D,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,YAAY,CAAC;QACjD,CAAC,QAAQ,EAAE;;;;;;;kCAOe,CAAC;QAC3B,CAAC,OAAO,EAAE,SAAS,CAAC;KACvB,CAAC,CAAC,OAAO,CAAC,EAAE,mBAAmB,EAAE,UAAU,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAA;IACvE,MAAM,KAAK,GAAG,iBAAiB,CAAC,MAAM,EAAE,GAAG,EAAE,UAAU,CAAC,CAAA;IAExD,IAAI,SAAS,GAAiB,IAAI,CAAA;IAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC;QAChC,IAAI,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAA;YACzD,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;QAC7B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,SAAS,GAAG,KAAc,CAAA;YAC1B,IAAI,CAAC,GAAG,OAAO,EAAE,CAAC;gBACd,OAAO,CAAC,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAA;YACzE,CAAC;QACL,CAAC;IACL,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,4BAA4B,OAAO,GAAG,CAAC,qBAAqB,SAAS,EAAE,OAAO,EAAE,CAAC,CAAA;AACrG,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"summarize.d.ts","sourceRoot":"","sources":["../../../src/functions/parsers/summarize.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAI7C,wBAAsB,SAAS,CAAC,EAC5B,GAAuE,EACvE,IAAI,EACJ,MAAM,EACN,QAAc,EACf,EAAC;IACA,GAAG,CAAC,EAAC,aAAa,CAAC;IACnB,IAAI,EAAC,GAAG,CAAC;IACT,MAAM,CAAC,EAAC,MAAM,CAAC;IACf,QAAQ,CAAC,EAAC,MAAM,CAAA;CACjB,GAAE,OAAO,CAAC,MAAM,CAAC,CAwCjB"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { StringOutputParser } from "@langchain/core/output_parsers";
|
|
2
|
+
import { createSimpleChain } from "../../helpers";
|
|
3
|
+
import { ChatPromptTemplate } from "../../imports";
|
|
4
|
+
import { getLLM } from "../../helpers";
|
|
5
|
+
export async function summarize({ llm = getLLM({ type: "groq", apikey: process.env.CHATGROQ_API_KEY ?? "" }), data, fokuss, maxWords = 150 }) {
|
|
6
|
+
const inputString = typeof data === "string" ? data : JSON.stringify(data, null, 2);
|
|
7
|
+
const prompt = ChatPromptTemplate.fromMessages([
|
|
8
|
+
["system", `
|
|
9
|
+
Du bist ein analytischer Summarizer.
|
|
10
|
+
|
|
11
|
+
Deine Aufgabe:
|
|
12
|
+
- Fasse den gegebenen Input präzise, sachlich und faktengetreu zusammen.
|
|
13
|
+
- Entferne Wiederholungen, irrelevante Details und Ausschmückungen.
|
|
14
|
+
- Behalte ausschließlich die inhaltlich wichtigsten Punkte.
|
|
15
|
+
|
|
16
|
+
Priorisierungsregeln (zwingend):
|
|
17
|
+
1. Zentrale Aussagen, Probleme oder Ergebnisse
|
|
18
|
+
2. Wichtige Entscheidungen, Risiken oder Konsequenzen
|
|
19
|
+
3. Relevanter Kontext (nur wenn nötig zum Verständnis)
|
|
20
|
+
4. Alles andere weglassen
|
|
21
|
+
|
|
22
|
+
Regeln:
|
|
23
|
+
- Erfinde keine Informationen
|
|
24
|
+
- Triff keine Annahmen über fehlende Daten
|
|
25
|
+
- Nutze nur Informationen aus dem Input
|
|
26
|
+
- Keine Meta-Kommentare („der Text beschreibt…“)
|
|
27
|
+
|
|
28
|
+
Längenbegrenzung:
|
|
29
|
+
- Maximal ${maxWords} Wörter
|
|
30
|
+
- Wenn nötig, kürze aggressiv
|
|
31
|
+
|
|
32
|
+
${fokuss ? `
|
|
33
|
+
Fokus (höchste Priorität):
|
|
34
|
+
- ${fokuss}
|
|
35
|
+
Informationen außerhalb dieses Fokus nur erwähnen, wenn sie essenziell sind.
|
|
36
|
+
` : ""}
|
|
37
|
+
|
|
38
|
+
Gib nur die Zusammenfassung aus. Kein zusätzlicher Text.
|
|
39
|
+
`],
|
|
40
|
+
["human", "{input}"]
|
|
41
|
+
]);
|
|
42
|
+
const chain = createSimpleChain(prompt, llm, new StringOutputParser());
|
|
43
|
+
const result = await chain.invoke({ input: inputString });
|
|
44
|
+
return typeof result === "string" ? result : String(result);
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=summarize.js.map
|