@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.
Files changed (54) hide show
  1. package/dist/functions/answerers/ask.d.ts +6 -0
  2. package/dist/functions/answerers/ask.d.ts.map +1 -0
  3. package/dist/functions/answerers/ask.js +14 -0
  4. package/dist/functions/answerers/ask.js.map +1 -0
  5. package/dist/functions/answerers/websearch.d.ts +2 -0
  6. package/dist/functions/answerers/websearch.d.ts.map +1 -0
  7. package/dist/functions/answerers/websearch.js +19 -0
  8. package/dist/functions/answerers/websearch.js.map +1 -0
  9. package/dist/functions/evaluators/classify.d.ts +23 -0
  10. package/dist/functions/evaluators/classify.d.ts.map +1 -0
  11. package/dist/functions/evaluators/classify.js +61 -0
  12. package/dist/functions/evaluators/classify.js.map +1 -0
  13. package/dist/functions/evaluators/decide.d.ts +22 -0
  14. package/dist/functions/evaluators/decide.d.ts.map +1 -0
  15. package/dist/functions/evaluators/decide.js +52 -0
  16. package/dist/functions/evaluators/decide.js.map +1 -0
  17. package/dist/functions/optimizers/promptify.d.ts +8 -0
  18. package/dist/functions/optimizers/promptify.d.ts.map +1 -0
  19. package/dist/functions/optimizers/promptify.js +48 -0
  20. package/dist/functions/optimizers/promptify.js.map +1 -0
  21. package/dist/functions/optimizers/ragify.d.ts +6 -0
  22. package/dist/functions/optimizers/ragify.d.ts.map +1 -0
  23. package/dist/functions/optimizers/ragify.js +40 -0
  24. package/dist/functions/optimizers/ragify.js.map +1 -0
  25. package/dist/functions/parsers/extract.d.ts +9 -0
  26. package/dist/functions/parsers/extract.d.ts.map +1 -0
  27. package/dist/functions/parsers/extract.js +37 -0
  28. package/dist/functions/parsers/extract.js.map +1 -0
  29. package/dist/functions/parsers/normalize.d.ts +9 -0
  30. package/dist/functions/parsers/normalize.d.ts.map +1 -0
  31. package/dist/functions/parsers/normalize.js +63 -0
  32. package/dist/functions/parsers/normalize.js.map +1 -0
  33. package/dist/functions/parsers/structure.d.ts +9 -0
  34. package/dist/functions/parsers/structure.d.ts.map +1 -0
  35. package/dist/functions/parsers/structure.js +36 -0
  36. package/dist/functions/parsers/structure.js.map +1 -0
  37. package/dist/functions/parsers/summarize.d.ts +8 -0
  38. package/dist/functions/parsers/summarize.d.ts.map +1 -0
  39. package/dist/functions/parsers/summarize.js +46 -0
  40. package/dist/functions/parsers/summarize.js.map +1 -0
  41. package/dist/heart/agent.d.ts.map +1 -1
  42. package/dist/heart/agent.js +2 -1
  43. package/dist/heart/agent.js.map +1 -1
  44. package/dist/heart/tools/Tavily.d.ts +110 -0
  45. package/dist/heart/tools/Tavily.d.ts.map +1 -0
  46. package/dist/heart/tools/Tavily.js +135 -0
  47. package/dist/heart/tools/Tavily.js.map +1 -0
  48. package/dist/helpers.d.ts +1 -56
  49. package/dist/helpers.d.ts.map +1 -1
  50. package/dist/helpers.js +2 -202
  51. package/dist/helpers.js.map +1 -1
  52. package/dist/memory.js +2 -2
  53. package/dist/memory.js.map +1 -1
  54. package/package.json +1 -1
@@ -0,0 +1,6 @@
1
+ import { BaseChatModel } from "../../imports";
2
+ export declare function ask(input: string | {
3
+ llm: BaseChatModel;
4
+ question: string;
5
+ }): Promise<unknown>;
6
+ //# sourceMappingURL=ask.d.ts.map
@@ -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,2 @@
1
+ export declare function websearch(query: string): Promise<string | undefined>;
2
+ //# sourceMappingURL=websearch.d.ts.map
@@ -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,6 @@
1
+ import { BaseChatModel } from "../../imports";
2
+ export declare function ragify({ llm, data, }: {
3
+ llm?: BaseChatModel;
4
+ data: string;
5
+ }): Promise<string>;
6
+ //# sourceMappingURL=ragify.d.ts.map
@@ -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,8 @@
1
+ import { BaseChatModel } from "../../imports";
2
+ export declare function summarize({ llm, data, fokuss, maxWords }: {
3
+ llm?: BaseChatModel;
4
+ data: any;
5
+ fokuss?: string;
6
+ maxWords?: number;
7
+ }): Promise<string>;
8
+ //# sourceMappingURL=summarize.d.ts.map
@@ -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