@delofarag/ai-utils 1.0.1 → 1.0.3

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 (50) hide show
  1. package/README.md +1 -0
  2. package/dist/heart/agent.d.ts +68 -0
  3. package/dist/heart/agent.d.ts.map +1 -0
  4. package/dist/heart/agent.js +140 -0
  5. package/dist/heart/agent.js.map +1 -0
  6. package/dist/heart/chain.d.ts +42 -0
  7. package/dist/heart/chain.d.ts.map +1 -0
  8. package/dist/heart/chain.js +152 -0
  9. package/dist/heart/chain.js.map +1 -0
  10. package/dist/heart/chatbot.d.ts +27 -0
  11. package/dist/heart/chatbot.d.ts.map +1 -0
  12. package/dist/heart/chatbot.js +100 -0
  13. package/dist/heart/chatbot.js.map +1 -0
  14. package/dist/heart/memorychain.d.ts +59 -0
  15. package/dist/heart/memorychain.d.ts.map +1 -0
  16. package/dist/heart/memorychain.js +165 -0
  17. package/dist/heart/memorychain.js.map +1 -0
  18. package/dist/heart/tools/BasicToolRegistry.d.ts +22 -0
  19. package/dist/heart/tools/BasicToolRegistry.d.ts.map +1 -0
  20. package/dist/heart/tools/BasicToolRegistry.js +45 -0
  21. package/dist/heart/tools/BasicToolRegistry.js.map +1 -0
  22. package/dist/heart/tools/CombinedRegistry.d.ts +41 -0
  23. package/dist/heart/tools/CombinedRegistry.d.ts.map +1 -0
  24. package/dist/heart/tools/CombinedRegistry.js +46 -0
  25. package/dist/heart/tools/CombinedRegistry.js.map +1 -0
  26. package/dist/heart/tools/ZodiosToolRegistry.d.ts +22 -0
  27. package/dist/heart/tools/ZodiosToolRegistry.d.ts.map +1 -0
  28. package/dist/heart/tools/ZodiosToolRegistry.js +80 -0
  29. package/dist/heart/tools/ZodiosToolRegistry.js.map +1 -0
  30. package/dist/helpers.d.ts +31 -0
  31. package/dist/helpers.d.ts.map +1 -0
  32. package/dist/helpers.js +105 -0
  33. package/dist/helpers.js.map +1 -0
  34. package/dist/imports.d.ts +44 -0
  35. package/dist/imports.d.ts.map +1 -0
  36. package/dist/imports.js +56 -0
  37. package/dist/imports.js.map +1 -0
  38. package/dist/index.d.ts +11 -0
  39. package/dist/index.d.ts.map +1 -0
  40. package/dist/index.js +11 -0
  41. package/dist/index.js.map +1 -0
  42. package/dist/memory.d.ts +78 -0
  43. package/dist/memory.d.ts.map +1 -0
  44. package/dist/memory.js +282 -0
  45. package/dist/memory.js.map +1 -0
  46. package/dist/rag.d.ts +38 -0
  47. package/dist/rag.d.ts.map +1 -0
  48. package/dist/rag.js +72 -0
  49. package/dist/rag.js.map +1 -0
  50. package/package.json +9 -9
package/README.md CHANGED
@@ -94,3 +94,4 @@ const result = await chain.invoke({
94
94
  - RAG utilities for vector stores
95
95
 
96
96
 
97
+
@@ -0,0 +1,68 @@
1
+ import { z } from "zod/v3";
2
+ import { DynamicStructuredTool } from "../imports";
3
+ import { BaseChatModel } from "../imports";
4
+ import { BaseCheckpointSaver } from "../imports";
5
+ import { VectorStore } from "../imports";
6
+ interface AgentProps<T extends z.ZodObject<any, any>> {
7
+ prompt?: Array<["system", string]>;
8
+ tools: DynamicStructuredTool[];
9
+ llm: BaseChatModel;
10
+ schema?: T;
11
+ memory?: BaseCheckpointSaver;
12
+ }
13
+ /**
14
+ * CONSTRUCTOR:
15
+ * @example constructor({
16
+ prompt = [["system", `Du bist ein hilfreicher Assistent.
17
+ WICHTIG:
18
+ - Nutze Tools NUR wenn nötig
19
+ - Nach jedem Tool-Call gib eine finale Antwort
20
+ - Stoppe nach der Antwort, rufe keine Tools mehr auf
21
+ - Wenn du die Antwort hast, gib sie direkt zurück`]],
22
+ tools,
23
+ llm = getLLM("groq"),
24
+ schema,
25
+ memory
26
+ }: AgentProps<T>) {
27
+ this.prompt = prompt
28
+ this.tools = tools
29
+ this.llm = llm
30
+ this.schema = schema
31
+ this.memory = memory
32
+ }
33
+ */
34
+ export declare class Agent<T extends z.ZodObject<any, any>> {
35
+ private prompt;
36
+ private tools;
37
+ private llm;
38
+ private schema;
39
+ private agent;
40
+ private memory;
41
+ private vectorStore;
42
+ private rag_tool;
43
+ private times_of_added_context;
44
+ private should_use_schema;
45
+ constructor({ prompt, tools, llm, schema, memory }: AgentProps<T>);
46
+ invoke(invokeInput: Record<string, any> & {
47
+ input: string;
48
+ thread_id?: string;
49
+ debug?: boolean;
50
+ }): Promise<T extends undefined ? string : z.infer<T>>;
51
+ stream(invokeInput: Record<string, any> & {
52
+ input: string;
53
+ thread_id?: string;
54
+ debug?: boolean;
55
+ stream_delay?: number;
56
+ }): AsyncGenerator<string, void, unknown>;
57
+ setContext(vectorStore: VectorStore, metadata?: {
58
+ name?: string;
59
+ description?: string;
60
+ }): void;
61
+ addContext(data: Array<any>): Promise<void>;
62
+ clearContext(): void;
63
+ hasContext(): boolean;
64
+ addTool(tool: DynamicStructuredTool): void;
65
+ get currentTools(): string[];
66
+ }
67
+ export {};
68
+ //# sourceMappingURL=agent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/heart/agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAA;AAC1B,OAAO,EAAE,qBAAqB,EAAY,MAAM,YAAY,CAAA;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAC1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AASxC,UAAU,UAAU,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,GAAG,EAAC,GAAG,CAAC;IAC/C,MAAM,CAAC,EAAE,KAAK,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAA;IAClC,KAAK,EAAE,qBAAqB,EAAE,CAAA;IAC9B,GAAG,EAAE,aAAa,CAAA;IAClB,MAAM,CAAC,EAAE,CAAC,CAAA;IACV,MAAM,CAAC,EAAE,mBAAmB,CAAA;CAC/B;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,GAAG,EAAC,GAAG,CAAC;IAC7C,OAAO,CAAC,MAAM,CAA2B;IACzC,OAAO,CAAC,KAAK,CAAyB;IACtC,OAAO,CAAC,GAAG,CAAe;IAC1B,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,MAAM,CAAiC;IAC/C,OAAO,CAAC,WAAW,CAAyB;IAC5C,OAAO,CAAC,QAAQ,CAAmC;IACnD,OAAO,CAAC,sBAAsB,CAAY;IAC1C,OAAO,CAAC,iBAAiB,CAAgB;gBAE7B,EACR,MAKwD,EACxD,KAAK,EACL,GAAG,EACH,MAAM,EACN,MAAM,EACT,EAAE,UAAU,CAAC,CAAC,CAAC;IAQH,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,CAAC,SAAS,SAAS,GAAG,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAoCpJ,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,cAAc,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC;IAetK,UAAU,CAAC,WAAW,EAAE,WAAW,EAAE,QAAQ,GAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAO;IAgBrF,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC;IAUjC,YAAY;IAOZ,UAAU,IAAI,OAAO;IAIrB,OAAO,CAAC,IAAI,EAAC,qBAAqB;IAIzC,IAAW,YAAY,IAAI,MAAM,EAAE,CAMlC;CACJ"}
@@ -0,0 +1,140 @@
1
+ import { z } from "zod/v3";
2
+ import { DynamicStructuredTool } from "../imports";
3
+ import { turn_to_docs } from "../rag";
4
+ import { createReactAgent } from "../imports";
5
+ import { HumanMessage } from "../imports";
6
+ import { structure, stream } from "../helpers";
7
+ /**
8
+ * CONSTRUCTOR:
9
+ * @example constructor({
10
+ prompt = [["system", `Du bist ein hilfreicher Assistent.
11
+ WICHTIG:
12
+ - Nutze Tools NUR wenn nötig
13
+ - Nach jedem Tool-Call gib eine finale Antwort
14
+ - Stoppe nach der Antwort, rufe keine Tools mehr auf
15
+ - Wenn du die Antwort hast, gib sie direkt zurück`]],
16
+ tools,
17
+ llm = getLLM("groq"),
18
+ schema,
19
+ memory
20
+ }: AgentProps<T>) {
21
+ this.prompt = prompt
22
+ this.tools = tools
23
+ this.llm = llm
24
+ this.schema = schema
25
+ this.memory = memory
26
+ }
27
+ */
28
+ export class Agent {
29
+ prompt;
30
+ tools;
31
+ llm;
32
+ schema;
33
+ agent;
34
+ memory;
35
+ vectorStore;
36
+ rag_tool;
37
+ times_of_added_context = 0;
38
+ should_use_schema = true;
39
+ constructor({ prompt = [["system", `Du bist ein hilfreicher Assistent.
40
+ WICHTIG:
41
+ - Nutze Tools NUR wenn nötig
42
+ - Nach jedem Tool-Call gib eine finale Antwort
43
+ - Stoppe nach der Antwort, rufe keine Tools mehr auf
44
+ - Wenn du die Antwort hast, gib sie direkt zurück`]], tools, llm, schema, memory }) {
45
+ this.prompt = prompt;
46
+ this.tools = tools;
47
+ this.llm = llm;
48
+ this.schema = schema;
49
+ this.memory = memory;
50
+ }
51
+ async invoke(invokeInput) {
52
+ const { input, thread_id, debug, ...variables } = invokeInput;
53
+ // Dynamische Variablen als System-Messages (thread_id wird NICHT als Message, sondern als config genutzt)
54
+ const contextMessages = Object.entries(variables).map(([key, value]) => ["system", `${key}: ${typeof value === "object" ? JSON.stringify(value) : value}`]);
55
+ // Tools für diesen invoke (inkl. RAG falls vorhanden)
56
+ const activeTools = this.rag_tool
57
+ ? [...this.tools, this.rag_tool]
58
+ : this.tools;
59
+ this.agent = createReactAgent({
60
+ llm: this.llm,
61
+ tools: activeTools,
62
+ checkpointSaver: this.memory,
63
+ prompt: (state) => [
64
+ ...this.prompt,
65
+ ...contextMessages,
66
+ ...state.messages
67
+ ]
68
+ });
69
+ const config = thread_id && this.memory ? { configurable: { thread_id } } : undefined;
70
+ const result = await this.agent.invoke({ messages: [new HumanMessage(input)] }, config);
71
+ if (debug)
72
+ return result;
73
+ const lastMessage = result.messages[result.messages.length - 1];
74
+ const content = lastMessage.content;
75
+ if (this.schema && this.should_use_schema) {
76
+ return await structure({ data: content, into: this.schema, llm: this.llm });
77
+ }
78
+ return content;
79
+ }
80
+ async *stream(invokeInput) {
81
+ this.should_use_schema = false;
82
+ try {
83
+ const { stream_delay = 1, ...rest } = invokeInput;
84
+ const response = await this.invoke(rest);
85
+ const responseStr = typeof response === "string" ? response : JSON.stringify(response);
86
+ const words = responseStr.split(" ");
87
+ for await (const word of stream(words, stream_delay)) {
88
+ yield word + " ";
89
+ }
90
+ }
91
+ finally {
92
+ this.should_use_schema = true;
93
+ }
94
+ }
95
+ setContext(vectorStore, metadata = {}) {
96
+ this.vectorStore = vectorStore;
97
+ this.rag_tool = new DynamicStructuredTool({
98
+ name: metadata.name ?? "search_context",
99
+ description: metadata.description ?? "Search the knowledge base for relevant information",
100
+ schema: z.object({
101
+ query: z.string().describe("The search query")
102
+ }),
103
+ func: async ({ query }) => {
104
+ const docs = await this.vectorStore?.similaritySearch(query, 3);
105
+ if (!docs || docs.length === 0)
106
+ return "No relevant information found.";
107
+ return docs.map(doc => doc.pageContent).join("\n\n---\n\n");
108
+ }
109
+ });
110
+ }
111
+ async addContext(data) {
112
+ if (!this.vectorStore) {
113
+ throw new Error("Cant add context, no vector store set");
114
+ }
115
+ this.times_of_added_context++;
116
+ const docs = turn_to_docs(data);
117
+ await this.vectorStore.addDocuments(docs);
118
+ console.log(`Added context ${this.times_of_added_context} ${this.times_of_added_context === 1 ? "time" : "times"}`);
119
+ }
120
+ clearContext() {
121
+ this.rag_tool = undefined;
122
+ this.vectorStore = undefined;
123
+ this.times_of_added_context = 0;
124
+ console.log("Context cleared");
125
+ }
126
+ hasContext() {
127
+ return this.vectorStore !== undefined && this.rag_tool !== undefined;
128
+ }
129
+ addTool(tool) {
130
+ this.tools.push(tool);
131
+ }
132
+ get currentTools() {
133
+ const tools = [...this.tools];
134
+ if (this.rag_tool) {
135
+ tools.push(this.rag_tool);
136
+ }
137
+ return tools.map(tool => tool.name);
138
+ }
139
+ }
140
+ //# sourceMappingURL=agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/heart/agent.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ import { BaseChatModel, MessagesPlaceholder, VectorStore } from "../imports";
2
+ import { z } from "zod/v3";
3
+ interface ChainProps<T extends z.ZodObject<any, any>> {
4
+ prompt?: Array<["human" | "system", string] | MessagesPlaceholder<any>>;
5
+ llm: BaseChatModel;
6
+ schema?: T;
7
+ }
8
+ export declare const DEFAULT_SCHEMA: z.ZodObject<{
9
+ output: z.ZodString;
10
+ }, "strip", z.ZodTypeAny, {
11
+ output: string;
12
+ }, {
13
+ output: string;
14
+ }>;
15
+ /**
16
+ * CONSTRUCTOR:
17
+ * @example constructor({prompt = [["system","du bist ein hilfreicher Assistent"]],llm = getLLM("groq"),schema}:ChainProps<T> = {}){
18
+ this.prompt = prompt
19
+ this.llm = llm
20
+ this.schema = (schema ?? DEFAULT_SCHEMA) as unknown as T
21
+ this.parser = StructuredOutputParser.fromZodSchema(this.schema)
22
+ }
23
+ */
24
+ export declare class Chain<T extends z.ZodObject<any, any> = typeof DEFAULT_SCHEMA> {
25
+ private prompt;
26
+ private vectorStore;
27
+ private times_of_added_context;
28
+ private parser;
29
+ private llm;
30
+ private schema;
31
+ constructor({ prompt, llm, schema }: ChainProps<T>);
32
+ invoke(input: Record<string, any> & {
33
+ debug?: boolean;
34
+ }): Promise<z.infer<T>>;
35
+ stream(input: Record<string, any>): AsyncGenerator<string, void, unknown>;
36
+ /** Fügt RAG-Kontext hinzu. Docs werden EINMAL zum VectorStore hinzugefügt. */
37
+ addContext(data: Array<any>): Promise<void>;
38
+ setContext(vectorStore: VectorStore): Promise<void>;
39
+ clearContext(): void;
40
+ }
41
+ export {};
42
+ //# sourceMappingURL=chain.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chain.d.ts","sourceRoot":"","sources":["../../src/heart/chain.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,aAAa,EAGb,mBAAmB,EACnB,WAAW,EAGd,MAAM,YAAY,CAAA;AAGnB,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAA;AAE1B,UAAU,UAAU,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,GAAG,EAAC,GAAG,CAAC;IAC/C,MAAM,CAAC,EAAC,KAAK,CAAC,CAAC,OAAO,GAAG,QAAQ,EAAE,MAAM,CAAC,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAA;IACtE,GAAG,EAAC,aAAa,CAAA;IACjB,MAAM,CAAC,EAAC,CAAC,CAAA;CACZ;AAED,eAAO,MAAM,cAAc;;;;;;EAEzB,CAAA;AAEF;;;;;;;;GAQG;AACH,qBAAa,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,GAAG,EAAC,GAAG,CAAC,GAAG,OAAO,cAAc;IACrE,OAAO,CAAC,MAAM,CAA+D;IAC7E,OAAO,CAAC,WAAW,CAAyB;IAC5C,OAAO,CAAC,sBAAsB,CAAY;IAC1C,OAAO,CAAC,MAAM,CAA0B;IACxC,OAAO,CAAC,GAAG,CAAc;IACzB,OAAO,CAAC,MAAM,CAAE;gBAEJ,EAAC,MAAyD,EAAC,GAAG,EAAC,MAAM,EAAC,EAAC,UAAU,CAAC,CAAC,CAAC;IAOnF,MAAM,CAAC,KAAK,EAAC,MAAM,CAAC,MAAM,EAAC,GAAG,CAAC,GAAG;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAC,GAAE,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IA2CvE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC;IAuDvF,8EAA8E;IACjE,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC;IAU3B,UAAU,CAAC,WAAW,EAAE,WAAW;IAKzC,YAAY;CAKtB"}
@@ -0,0 +1,152 @@
1
+ import { StructuredOutputParser, ChatPromptTemplate, createRetrievalChain, createStuffDocumentsChain, } from "../imports";
2
+ import { turn_to_docs } from "../rag";
3
+ import { z } from "zod/v3";
4
+ export const DEFAULT_SCHEMA = z.object({
5
+ output: z.string().describe("Dein Output zur anfrage des Users")
6
+ });
7
+ /**
8
+ * CONSTRUCTOR:
9
+ * @example constructor({prompt = [["system","du bist ein hilfreicher Assistent"]],llm = getLLM("groq"),schema}:ChainProps<T> = {}){
10
+ this.prompt = prompt
11
+ this.llm = llm
12
+ this.schema = (schema ?? DEFAULT_SCHEMA) as unknown as T
13
+ this.parser = StructuredOutputParser.fromZodSchema(this.schema)
14
+ }
15
+ */
16
+ export class Chain {
17
+ prompt;
18
+ vectorStore;
19
+ times_of_added_context = 0;
20
+ parser;
21
+ llm;
22
+ schema;
23
+ constructor({ prompt = [["system", "du bist ein hilfreicher Assistent"]], llm, schema }) {
24
+ this.prompt = prompt;
25
+ this.llm = llm;
26
+ this.schema = (schema ?? DEFAULT_SCHEMA);
27
+ this.parser = StructuredOutputParser.fromZodSchema(this.schema);
28
+ }
29
+ async invoke(input) {
30
+ const messagesArray = [...this.prompt];
31
+ messagesArray.push(["system", "You MUST respond ONLY with valid JSON matching this exact schema:\n{format_instructions}\n\nIMPORTANT: \n- Output ONLY valid JSON, no markdown code blocks\n- No backslashes or line breaks in strings\n- All strings must be on single lines\n- Do NOT wrap in ```json``` blocks\n- Return the JSON object DIRECTLY"]);
32
+ if (this.vectorStore)
33
+ messagesArray.push(["system", "Hier ist relevanter Kontext:\n{context}"]);
34
+ for (const key in input) {
35
+ if (key === "debug")
36
+ continue;
37
+ if (key === "thread_id") {
38
+ console.error("eine normale chain hat keine memory, deswegen wird thread_id ignoriert");
39
+ continue;
40
+ }
41
+ if (typeof input[key] !== "string") {
42
+ messagesArray.push(["human", `${key}:${JSON.stringify(input[key])}`]);
43
+ }
44
+ else {
45
+ messagesArray.push(["human", `${key}:{${key}}`]);
46
+ }
47
+ }
48
+ const true_prompt = ChatPromptTemplate.fromMessages(messagesArray);
49
+ if (input.debug)
50
+ console.log("Prompt: ", true_prompt);
51
+ const invokeInput = { ...input, format_instructions: this.parser.getFormatInstructions() };
52
+ if (this.vectorStore) {
53
+ const retriever = this.vectorStore.asRetriever();
54
+ const stuff_chain = await createStuffDocumentsChain({
55
+ llm: this.llm,
56
+ prompt: true_prompt,
57
+ outputParser: this.parser
58
+ });
59
+ const chain = await createRetrievalChain({
60
+ combineDocsChain: stuff_chain,
61
+ retriever: retriever
62
+ });
63
+ if (input.debug)
64
+ console.log("created retrieval chain");
65
+ const respo = await chain.invoke({ input: JSON.stringify(input), ...invokeInput });
66
+ return this.schema.parse(respo.answer);
67
+ }
68
+ const chain = true_prompt.pipe(this.llm).pipe(this.parser);
69
+ if (input.debug)
70
+ console.log("created normal chain");
71
+ const respo = await chain.invoke(invokeInput);
72
+ return this.schema.parse(respo);
73
+ }
74
+ async *stream(input) {
75
+ const messagesArray = [...this.prompt];
76
+ // Beim Streamen KEIN Schema-Prompt - nur reiner Text
77
+ if (this.vectorStore)
78
+ messagesArray.push(["system", "Hier ist relevanter Kontext:\n{context}"]);
79
+ for (const key in input) {
80
+ if (key === "debug")
81
+ continue;
82
+ if (key === "thread_id") {
83
+ console.error("eine normale chain hat keine memory, deswegen wird thread_id ignoriert");
84
+ continue;
85
+ }
86
+ if (typeof input[key] !== "string") {
87
+ messagesArray.push(["human", `${key}:${JSON.stringify(input[key])}`]);
88
+ }
89
+ else {
90
+ messagesArray.push(["human", `${key}:{${key}}`]);
91
+ }
92
+ }
93
+ const true_prompt = ChatPromptTemplate.fromMessages(messagesArray);
94
+ if (input.debug)
95
+ console.log("Prompt: ", true_prompt);
96
+ const invokeInput = { ...input };
97
+ if (this.vectorStore) {
98
+ const retriever = this.vectorStore.asRetriever();
99
+ if (input.debug)
100
+ console.log("created retrieval chain (streaming)");
101
+ // Für RAG: Hole Context und stream dann die LLM-Antwort
102
+ const contextDocs = await retriever.invoke(JSON.stringify(input));
103
+ const contextText = contextDocs.map((doc) => doc.pageContent).join("\n\n");
104
+ // Stream die LLM-Antwort mit Context
105
+ const streamChain = true_prompt.pipe(this.llm);
106
+ const stream = await streamChain.stream({ ...invokeInput, context: contextText });
107
+ for await (const chunk of stream) {
108
+ if (chunk && typeof chunk === 'object' && 'content' in chunk) {
109
+ yield chunk.content;
110
+ }
111
+ else if (typeof chunk === 'string') {
112
+ yield chunk;
113
+ }
114
+ }
115
+ }
116
+ else {
117
+ // Ohne RAG: Stream direkt
118
+ const streamChain = true_prompt.pipe(this.llm);
119
+ if (input.debug)
120
+ console.log("created normal chain (streaming)");
121
+ const stream = await streamChain.stream(invokeInput);
122
+ for await (const chunk of stream) {
123
+ if (chunk && typeof chunk === 'object' && 'content' in chunk) {
124
+ yield chunk.content;
125
+ }
126
+ else if (typeof chunk === 'string') {
127
+ yield chunk;
128
+ }
129
+ }
130
+ }
131
+ }
132
+ /** Fügt RAG-Kontext hinzu. Docs werden EINMAL zum VectorStore hinzugefügt. */
133
+ async addContext(data) {
134
+ if (!this.vectorStore) {
135
+ throw new Error("Cant add context, no vector store set");
136
+ }
137
+ this.times_of_added_context++;
138
+ const docs = turn_to_docs(data);
139
+ await this.vectorStore.addDocuments(docs);
140
+ console.log(`Added context ${this.times_of_added_context} ${this.times_of_added_context === 1 ? "time" : "times"}`);
141
+ }
142
+ async setContext(vectorStore) {
143
+ console.log("Setting context");
144
+ this.vectorStore = vectorStore;
145
+ }
146
+ clearContext() {
147
+ this.vectorStore = undefined;
148
+ this.times_of_added_context = 0;
149
+ console.log("Context cleared");
150
+ }
151
+ }
152
+ //# sourceMappingURL=chain.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chain.js","sourceRoot":"","sources":["../../src/heart/chain.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import { BaseCheckpointSaver, VectorStore, DynamicStructuredTool } from "../imports";
2
+ import { BaseChatModel } from "../imports";
3
+ type ChatbotProps = {
4
+ llm: BaseChatModel;
5
+ prompt?: Array<["system", string]>;
6
+ tools?: DynamicStructuredTool[];
7
+ memory?: BaseCheckpointSaver;
8
+ };
9
+ export declare class Chatbot {
10
+ private chain;
11
+ private agent;
12
+ constructor({ llm, prompt, tools, memory }: ChatbotProps);
13
+ chat({ input, thread_id }: {
14
+ input: string;
15
+ thread_id: string;
16
+ }): AsyncGenerator<string, string, unknown>;
17
+ session({ breakword, numberOfMessages, id }?: {
18
+ breakword?: string;
19
+ numberOfMessages?: number;
20
+ id?: string;
21
+ }): Promise<void>;
22
+ addContext(data: Array<any>): Promise<void>;
23
+ setContext(vectorStore: VectorStore): Promise<void>;
24
+ clearContext(): Promise<void>;
25
+ }
26
+ export {};
27
+ //# sourceMappingURL=chatbot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chatbot.d.ts","sourceRoot":"","sources":["../../src/heart/chatbot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAqF,WAAW,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AACvK,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAQ1C,KAAK,YAAY,GAAG;IAChB,GAAG,EAAE,aAAa,CAAA;IAClB,MAAM,CAAC,EAAE,KAAK,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAA;IAClC,KAAK,CAAC,EAAE,qBAAqB,EAAE,CAAA;IAC/B,MAAM,CAAC,EAAE,mBAAmB,CAAA;CAC/B,CAAA;AAED,qBAAa,OAAO;IAChB,OAAO,CAAC,KAAK,CAAyB;IACtC,OAAO,CAAC,KAAK,CAAwB;gBAEzB,EAAC,GAAG,EAAC,MAAM,EAAC,KAAK,EAAC,MAAM,EAAC,EAAC,YAAY;IAkBpC,IAAI,CAAC,EAAC,KAAK,EAAC,SAAS,EAAC,EAAC;QAAC,KAAK,EAAC,MAAM,CAAC;QAAC,SAAS,EAAC,MAAM,CAAA;KAAC,GAAG,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC;IAWlG,OAAO,CAAC,EACjB,SAAkB,EAClB,gBAA2C,EAC3C,EAAoB,EACvB,GAAC;QACE,SAAS,CAAC,EAAC,MAAM,CAAC;QAClB,gBAAgB,CAAC,EAAC,MAAM,CAAC;QACzB,EAAE,CAAC,EAAC,MAAM,CAAA;KACR;IA2BO,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC;IAU3B,UAAU,CAAC,WAAW,EAAE,WAAW;IAUnC,YAAY;CAS5B"}
@@ -0,0 +1,100 @@
1
+ import { SmartCheckpointSaver } from "../memory";
2
+ import { MemorySaver } from "../imports";
3
+ import { logChunk } from "../helpers";
4
+ import { input } from "@delofarag/base-utils";
5
+ import { MemoryChain } from "./memorychain";
6
+ import { Agent } from "./agent";
7
+ export class Chatbot {
8
+ chain;
9
+ agent;
10
+ constructor({ llm, prompt, tools, memory }) {
11
+ if (tools) {
12
+ this.agent = new Agent({
13
+ // @ts-expect-error - Type incompatibility due to duplicate LangChain versions in monorepo
14
+ memory: memory ?? new SmartCheckpointSaver(new MemorySaver(), { llm }),
15
+ tools: tools,
16
+ prompt: prompt,
17
+ llm: llm
18
+ });
19
+ }
20
+ else {
21
+ this.chain = new MemoryChain({
22
+ memory: memory,
23
+ prompt: prompt,
24
+ llm: llm
25
+ });
26
+ }
27
+ }
28
+ async *chat({ input, thread_id }) {
29
+ const streamable = this.chain ? this.chain : this.agent;
30
+ if (!streamable)
31
+ throw new Error("kein streamable!");
32
+ let fullResponse = "";
33
+ for await (const chunk of streamable.stream({ input, thread_id })) {
34
+ fullResponse += chunk;
35
+ yield chunk;
36
+ }
37
+ return fullResponse;
38
+ }
39
+ async session({ breakword = "exit", numberOfMessages = Number.POSITIVE_INFINITY, id = `${Date.now()}` } = {}) {
40
+ let messages = 0;
41
+ while (true) {
42
+ try {
43
+ const message = await input("You: ");
44
+ if (message === breakword) {
45
+ break;
46
+ }
47
+ const response = this.chat({
48
+ input: message,
49
+ thread_id: id,
50
+ });
51
+ console.log("Assistant: ");
52
+ for await (const chunk of response) {
53
+ logChunk(chunk);
54
+ }
55
+ console.log(""); // Zeilenumbruch nach dem Streamen, damit Output nicht überschrieben wird
56
+ }
57
+ catch (e) {
58
+ console.error("Error: ", e);
59
+ }
60
+ messages = messages + 2;
61
+ if (messages > numberOfMessages) {
62
+ break;
63
+ }
64
+ }
65
+ }
66
+ async addContext(data) {
67
+ if (this.chain) {
68
+ await this.chain.addContext(data);
69
+ }
70
+ else if (this.agent) {
71
+ await this.agent.addContext(data);
72
+ }
73
+ else {
74
+ throw Error("weder agent noch chain, kein addContext möglich");
75
+ }
76
+ }
77
+ async setContext(vectorStore) {
78
+ if (this.chain) {
79
+ this.chain.setContext(vectorStore);
80
+ }
81
+ else if (this.agent) {
82
+ this.agent.setContext(vectorStore);
83
+ }
84
+ else {
85
+ throw Error("weder agent noch chain, kein setContext möglich");
86
+ }
87
+ }
88
+ async clearContext() {
89
+ if (this.chain) {
90
+ this.chain.clearContext();
91
+ }
92
+ else if (this.agent) {
93
+ this.agent.clearContext();
94
+ }
95
+ else {
96
+ throw Error("weder agent noch chain, kein clearContext möglich");
97
+ }
98
+ }
99
+ }
100
+ //# sourceMappingURL=chatbot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chatbot.js","sourceRoot":"","sources":["../../src/heart/chatbot.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ import { BaseCheckpointSaver, VectorStore } from "../imports";
2
+ import { BaseChatModel } from "../imports";
3
+ import { Chain, DEFAULT_SCHEMA } from "./chain";
4
+ import { z } from "zod/v3";
5
+ type MemoryChainProps<T extends z.ZodObject<any, any> = typeof DEFAULT_SCHEMA> = {
6
+ llm: BaseChatModel;
7
+ memory?: BaseCheckpointSaver;
8
+ } & ({
9
+ chain: Chain<T>;
10
+ } | {
11
+ prompt?: Array<["system", string]>;
12
+ schema?: T;
13
+ });
14
+ /**
15
+ * CONSTRUCTOR
16
+ * @example constructor({memory, ...rest}: MemoryChainProps<T> = {}){
17
+ this.memory = memory ?? new SmartCheckpointSaver(new MemorySaver())
18
+ if ("chain" in rest){
19
+ this.chain = rest.chain
20
+ } else {
21
+ this.chain = new Chain<T>({
22
+ llm: rest.llm ?? getLLM("groq"),
23
+ prompt: rest.prompt ?? [["system", "Du bist ein hilfreicher Chatbot der mit dem User ein höffliches und hilfreiches Gespräch führt"]],
24
+ schema: (rest.schema ?? DEFAULT_SCHEMA) as unknown as T
25
+ })
26
+ }
27
+ }
28
+ *
29
+ * @example entweder gibst du direkt eine chain + memory:
30
+ * @param props.memory
31
+ * @param props.chain
32
+ *
33
+ * @example oder eine chain wird anhand deines llms, schemas oder prompts erstellt + memory:
34
+ * @param props.memory
35
+ * @param props.llm
36
+ * @param props.prompt
37
+ * @param props.schema
38
+ */
39
+ export declare class MemoryChain<T extends z.ZodObject<any, any> = typeof DEFAULT_SCHEMA> {
40
+ private memory;
41
+ private chain;
42
+ constructor({ memory, ...rest }: MemoryChainProps<T>);
43
+ invoke(input: Record<string, any> & {
44
+ thread_id: string;
45
+ input: string;
46
+ debug?: boolean;
47
+ }): Promise<z.infer<T>>;
48
+ stream({ input, thread_id }: {
49
+ input: string;
50
+ thread_id: string;
51
+ }): AsyncGenerator<string, string, unknown>;
52
+ addContext(data: Array<any>): Promise<void>;
53
+ setContext(vectorStore: VectorStore): Promise<void>;
54
+ clearContext(): Promise<void>;
55
+ private messagesToHistoryText;
56
+ private saveResponse;
57
+ }
58
+ export {};
59
+ //# sourceMappingURL=memorychain.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memorychain.d.ts","sourceRoot":"","sources":["../../src/heart/memorychain.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAqF,WAAW,EAAE,MAAM,YAAY,CAAA;AAChJ,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE1C,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAE/C,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAA;AAE1B,KAAK,gBAAgB,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,GAAG,EAAC,GAAG,CAAC,GAAG,OAAO,cAAc,IAAI;IAAE,GAAG,EAAC,aAAa,CAAC;IAAA,MAAM,CAAC,EAAE,mBAAmB,CAAA;CAAE,GAAG,CAAC;IAClI,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAA;CAClB,GAAG;IACA,MAAM,CAAC,EAAE,KAAK,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAA;IAClC,MAAM,CAAC,EAAC,CAAC,CAAA;CACZ,CAAC,CAAA;AAEF;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,qBAAa,WAAW,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,GAAG,EAAC,GAAG,CAAC,GAAG,OAAO,cAAc;IAC3E,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,KAAK,CAAU;gBAEX,EAAC,MAAM,EAAE,GAAG,IAAI,EAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAcrC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IA8C9G,MAAM,CAAC,EAAC,KAAK,EAAE,SAAS,EAAC,EAAE;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAC,GAAG,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC;IAmCxG,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC;IAI3B,UAAU,CAAC,WAAW,EAAE,WAAW;IAInC,YAAY;IAIzB,OAAO,CAAC,qBAAqB;YAYf,YAAY;CA2C7B"}