@delofarag/ai-utils 1.3.5 → 1.4.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 (55) hide show
  1. package/README.md +52 -30
  2. package/dist/heart/agent.d.ts +22 -25
  3. package/dist/heart/agent.d.ts.map +1 -1
  4. package/dist/heart/agent.js +37 -68
  5. package/dist/heart/agent.js.map +1 -1
  6. package/dist/heart/chain.d.ts +19 -12
  7. package/dist/heart/chain.d.ts.map +1 -1
  8. package/dist/heart/chain.js +23 -17
  9. package/dist/heart/chain.js.map +1 -1
  10. package/dist/heart/chatbot.d.ts +22 -18
  11. package/dist/heart/chatbot.d.ts.map +1 -1
  12. package/dist/heart/chatbot.js +30 -56
  13. package/dist/heart/chatbot.js.map +1 -1
  14. package/dist/heart/memorychain.d.ts +14 -10
  15. package/dist/heart/memorychain.d.ts.map +1 -1
  16. package/dist/heart/memorychain.js +15 -11
  17. package/dist/heart/memorychain.js.map +1 -1
  18. package/dist/heart/tools/RAGTool.d.ts +20 -0
  19. package/dist/heart/tools/RAGTool.d.ts.map +1 -0
  20. package/dist/heart/tools/RAGTool.js +15 -0
  21. package/dist/heart/tools/RAGTool.js.map +1 -0
  22. package/dist/heart/tools/Tavily.d.ts.map +1 -1
  23. package/dist/heart/tools/Tavily.js.map +1 -1
  24. package/dist/heart/tools/ToolRegistry.d.ts +19 -0
  25. package/dist/heart/tools/ToolRegistry.d.ts.map +1 -0
  26. package/dist/heart/tools/ToolRegistry.js +42 -0
  27. package/dist/heart/tools/ToolRegistry.js.map +1 -0
  28. package/dist/heart/tools/zodios/CombinedRegistry.d.ts +41 -0
  29. package/dist/heart/tools/zodios/CombinedRegistry.d.ts.map +1 -0
  30. package/dist/heart/tools/zodios/CombinedRegistry.js +46 -0
  31. package/dist/heart/tools/zodios/CombinedRegistry.js.map +1 -0
  32. package/dist/heart/tools/zodios/ZodiosToolRegistry.d.ts +22 -0
  33. package/dist/heart/tools/zodios/ZodiosToolRegistry.d.ts.map +1 -0
  34. package/dist/heart/tools/zodios/ZodiosToolRegistry.js +80 -0
  35. package/dist/heart/tools/zodios/ZodiosToolRegistry.js.map +1 -0
  36. package/dist/helpers.d.ts +2 -2
  37. package/dist/helpers.d.ts.map +1 -1
  38. package/dist/helpers.js +2 -2
  39. package/dist/helpers.js.map +1 -1
  40. package/dist/index.d.ts +5 -3
  41. package/dist/index.d.ts.map +1 -1
  42. package/dist/index.js +5 -3
  43. package/dist/index.js.map +1 -1
  44. package/dist/magic-funcs/parsers/structure.d.ts +2 -1
  45. package/dist/magic-funcs/parsers/structure.d.ts.map +1 -1
  46. package/dist/magic-funcs/parsers/structure.js.map +1 -1
  47. package/dist/memory.d.ts +4 -3
  48. package/dist/memory.d.ts.map +1 -1
  49. package/dist/memory.js +5 -4
  50. package/dist/memory.js.map +1 -1
  51. package/dist/rag.d.ts +7 -27
  52. package/dist/rag.d.ts.map +1 -1
  53. package/dist/rag.js +6 -18
  54. package/dist/rag.js.map +1 -1
  55. package/package.json +1 -1
package/README.md CHANGED
@@ -29,25 +29,26 @@ Du kannst jederzeit ein eigenes LLM übergeben (z.B. anderes Modell, anderer Pro
29
29
 
30
30
  ### 1. Chain
31
31
 
32
- **Was:** Stateless LLM-Chain mit strukturiertem Output (Zod-Schema) und optionalem RAG.
32
+ **Was:** Stateless LLM-Chain mit strukturiertem Output (Zod-Schema) und optionalem RAG. Für `output` (Zod v3) kannst du **z.object()** oder **z.record()** verwenden.
33
33
 
34
34
  **Wann:** Einmalige Abfragen ohne Konversationsgedächtnis. Ideal für formularähnliche Eingabe → strukturierte Ausgabe.
35
35
 
36
36
  **Initialisierung:**
37
37
 
38
38
  ```ts
39
- import { Chain, DEFAULT_SCHEMA } from "@delofarag/ai-utils"
39
+ import { Chain, DEFAULT_OUTPUT_SCHEMA } from "@delofarag/ai-utils"
40
40
  import { z } from "zod/v3"
41
41
 
42
- const schema = z.object({
42
+ const output = z.object({
43
43
  output: z.string().describe("Deine Antwort"),
44
44
  score: z.number().optional()
45
45
  })
46
+ // alternativ: z.record(z.string()) für beliebige Key-Value-Struktur
46
47
 
47
48
  const chain = new Chain({
48
49
  prompt: "Du bist ein hilfreicher Assistent.",
49
50
  // llm optional – Default: Groq
50
- schema
51
+ output
51
52
  })
52
53
 
53
54
  const result = await chain.invoke({ input: "Was ist die Hauptstadt von Frankreich?" })
@@ -56,7 +57,7 @@ const result = await chain.invoke({ input: "Was ist die Hauptstadt von Frankreic
56
57
 
57
58
  **RAG:** Mit `chain.setContext(vectorStore)` und `chain.addContext(["Text 1", "Text 2"])` wird automatisch Retrieval vor dem LLM-Call eingebaut.
58
59
 
59
- **Warum so:** Chain ist die kleinste Einheit – nur Prompt + LLM + Schema. Kein Memory, keine Tools. Einfach zu testen und zu komponieren.
60
+ **Warum so:** Chain ist die kleinste Einheit – nur Prompt + LLM + Output (Zod-Schema für .invoke()). Kein Memory, keine Tools. Einfach zu testen und zu komponieren.
60
61
 
61
62
  ---
62
63
 
@@ -98,24 +99,32 @@ const result2 = await memoryChain.invoke({
98
99
 
99
100
  ### 3. Agent
100
101
 
101
- **Was:** LLM mit Tools (z.B. Web-Suche, API-Calls). Nutzt LangGraphs `createReactAgent` unter der Haube.
102
+ **Was:** LLM mit Tools (z.B. Web-Suche, API-Calls, RAG). Nutzt LangGraphs `createReactAgent` unter der Haube.
102
103
 
103
104
  **Wann:** Wenn das LLM externe Aktionen ausführen soll (Suche, Rechner, Datenbank, etc.).
104
105
 
105
106
  **Initialisierung:**
106
107
 
107
108
  ```ts
108
- import { Agent, ToolRegistry, tavilySearchTool, getLLM } from "@delofarag/ai-utils"
109
+ import { Agent, ToolRegistry, createRAGTool, createFaissStore, tavilySearchTool, getLLM } from "@delofarag/ai-utils"
110
+
111
+ const vectorStore = await createFaissStore(["Dokumenteninhalt..."])
112
+ const ragTool = createRAGTool({
113
+ vectorStore,
114
+ name: "search_context",
115
+ description: "Durchsucht den Kontext nach relevanten Informationen"
116
+ })
109
117
 
110
118
  const registry = new ToolRegistry([
111
119
  { name: "calculator", description: "...", schema: z.object({ a: z.number(), b: z.number() }), func: ({ a, b }) => a + b },
112
- tavilySearchTool
113
- ] as const)
120
+ tavilySearchTool,
121
+ ragTool
122
+ ])
114
123
 
115
124
  const agent = new Agent({
116
125
  prompt: "Du bist ein hilfreicher Assistent mit Zugang zu Tools.",
117
126
  tools: registry.allTools,
118
- llm: getLLM({ type: "groq", apikey: process.env.CHATGROQ_API_KEY! }),
127
+ llm: getLLM({ type: "groq" }),
119
128
  memory: new SmartCheckpointSaver(new MemorySaver(), { llm }) // optional
120
129
  })
121
130
 
@@ -123,35 +132,42 @@ const result = await agent.invoke({
123
132
  thread_id: "session-1", // nötig wenn memory gesetzt
124
133
  input: "Was steht heute in den Nachrichten zu KI?"
125
134
  })
135
+
136
+ agent.addTool(weiteresTool) // Tools nachträglich hinzufügen
126
137
  ```
127
138
 
128
- **RAG:** `agent.setContext(vectorStore)` erzeugt automatisch ein `search_context`-Tool, mit dem das LLM den Vector Store durchsuchen kann.
139
+ **RAG:** RAG ist ein normales Tool – nutze `createRAGTool({ vectorStore, name, description })` und füge es zu `tools` hinzu oder via `agent.addTool()`.
129
140
 
130
- **Warum so:** Der Agent entscheidet selbst, wann er Tools nutzt. Die Klasse fügt dem System-Prompt Regeln hinzu, damit unnötige Tool-Calls vermieden werden.
141
+ **Warum so:** Der Agent entscheidet selbst, wann er Tools nutzt. RAG wird wie jedes andere Tool behandelt (kein setContext/addContext mehr).
131
142
 
132
143
  ---
133
144
 
134
145
  ### 4. Chatbot
135
146
 
136
- **Was:** High-Level Wrapper – je nach Konfiguration entweder ein `MemoryChain` oder ein `Agent`.
147
+ **Was:** High-Level Wrapper – je nach Konfiguration entweder ein `MemoryChain` oder ein `Agent`. Discriminated Union: `tools` → Agent, `vectorStore` → MemoryChain.
137
148
 
138
149
  **Wann:** Schnell einen chatbasierten Assistenten bauen, mit oder ohne Tools.
139
150
 
140
151
  **Initialisierung:**
141
152
 
142
153
  ```ts
143
- import { Chatbot, tavilySearchTool, getLLM } from "@delofarag/ai-utils"
154
+ import { Chatbot, createRAGTool, createFaissStore, tavilySearchTool, getLLM } from "@delofarag/ai-utils"
144
155
 
145
- // Ohne Tools → nutzt MemoryChain
156
+ // Ohne Tools, mit RAG MemoryChain + vectorStore
157
+ const vectorStore = await createFaissStore(["Kontextdaten..."])
146
158
  const simpleChatbot = new Chatbot({
147
- llm: getLLM({ type: "groq", apikey: process.env.CHATGROQ_API_KEY! }),
148
- prompt: "Du bist ein freundlicher Assistent."
159
+ llm: getLLM({ type: "groq" }),
160
+ prompt: "Du bist ein freundlicher Assistent.",
161
+ vectorStore
149
162
  })
150
163
 
151
- // Mit Tools → nutzt Agent
164
+ // Mit Tools → Agent (RAG als Tool möglich)
152
165
  const toolChatbot = new Chatbot({
153
- llm: getLLM({ type: "groq", apikey: process.env.CHATGROQ_API_KEY! }),
154
- tools: [tavilySearchTool],
166
+ llm: getLLM({ type: "groq" }),
167
+ tools: [
168
+ tavilySearchTool,
169
+ createRAGTool({ vectorStore, name: "search", description: "Durchsucht den Kontext" })
170
+ ],
155
171
  prompt: "Du bist ein Assistent mit Webzugang."
156
172
  })
157
173
 
@@ -185,7 +201,7 @@ const registry = new ToolRegistry([
185
201
  schema: z.object({ name: z.string() }),
186
202
  func: ({ name }) => `Hallo, ${name}!`
187
203
  }
188
- ] as const) // 'as const' für besseren Autocomplete
204
+ ])
189
205
 
190
206
  const tool = registry.getTool("greet")
191
207
  const allTools = registry.allTools
@@ -256,22 +272,28 @@ const kurz = await summarize({ data: langerText, maxWords: 50 })
256
272
 
257
273
  ## RAG-Implementierungen
258
274
 
259
- In `rag.ts`:
275
+ **Vector Stores** (in `rag.ts`):
260
276
 
261
277
  - **turn_to_docs(data)** – Wandelt Strings/Objekte in LangChain-`Document[]` um
262
278
  - **createSupabaseVectoreStore({ supabase, data, table_name?, RPC_function? })** – Supabase Vector Store aus Daten
263
279
  - **getSupabaseVectorStore({ supabase, table_name?, RPC_function? })** – Bestehenden Store holen
264
280
  - **createFaissStore({ data, save_path?, embeddings? })** – FAISS-Store (lokal, speicherbar)
265
281
  - **loadFaissStore({ path, embeddings? })** – FAISS-Store laden
282
+
283
+ **RAG als Tool** (für Agent):
284
+
285
+ - **createRAGTool({ vectorStore, name, description })** – Erzeugt ein Tool, mit dem der Agent den Vector Store durchsucht. In `tools` übergeben oder via `agent.addTool()`.
286
+
287
+ **Retrieval-Chains** (in `rag.ts`):
288
+
266
289
  - **createRAGChain({ vectorStore, llm, prompt?, num_of_results_from_vdb? })** – Retrieval-Chain
267
290
  - **createRAGChainFromRetriever({ retriever, llm, prompt? })** – Alternative mit eigenem Retriever
268
291
 
269
292
  **Typischer Ablauf:**
270
293
 
271
- 1. Daten mit `turn_to_docs` vorbereiten
272
- 2. Vector Store erstellen (Supabase oder FAISS)
273
- 3. `chain.setContext(vectorStore)` oder `agent.setContext(vectorStore)` aufrufen
274
- 4. Optional: `addContext(docs)` für weitere Dokumente
294
+ 1. Vector Store erstellen: `createFaissStore({ data })` oder `createSupabaseVectoreStore({ data })`
295
+ 2. **Chain/MemoryChain:** `chain.setContext(vectorStore)` RAG wird automatisch eingebaut. Optional `chain.addContext(weitereDaten)` für weitere Docs
296
+ 3. **Agent/Chatbot:** `createRAGTool({ vectorStore, name, description })` als Tool übergeben
275
297
 
276
298
  ---
277
299
 
@@ -325,14 +347,14 @@ const chatbot = new Chatbot({ llm, memory })
325
347
 
326
348
  | Util | Zweck |
327
349
  |------|-------|
328
- | **Chain** | Stateless LLM + Schema, optional RAG |
350
+ | **Chain** | Stateless LLM + Schema, optional RAG (setContext/addContext) |
329
351
  | **MemoryChain** | Chain + Konversations-Memory pro thread_id, optional RAG |
330
- | **Agent** | LLM + Tools, optional Memory + RAG |
331
- | **Chatbot** | Einfacher Einstieg: MemoryChain oder Agent |
352
+ | **Agent** | LLM + Tools, optional Memory. RAG via createRAGTool + addTool |
353
+ | **Chatbot** | Discriminated Union: tools Agent, vectorStore → MemoryChain |
332
354
  | **ToolRegistry** | Tools registrieren (empfohlen) |
333
355
  | **tavilySearchTool** | Web-Suche (TAVILY_API_KEY) |
334
356
  | **Magic-Funcs** | ask, websearch, classify, decide, extract, structure, rewrite, summarize, promptify, ragify |
335
- | **RAG** | Supabase/FAISS Vector Stores, createRAGChain |
357
+ | **RAG** | createRAGTool, Supabase/FAISS Vector Stores, createRAGChain |
336
358
  | **SupabaseCheckpointSaver** | Persistente Memory in Supabase |
337
359
  | **SmartCheckpointSaver** | Memory mit Auto-Summarization |
338
360
  | **getLLM()** | LLM aus Groq, OpenRouter oder Ollama |
@@ -1,26 +1,31 @@
1
1
  import { z } from "zod/v3";
2
+ import type { OutputSchema } from "./chain";
2
3
  import { DynamicStructuredTool } from "../imports";
3
4
  import { BaseChatModel } from "../imports";
4
5
  import { BaseCheckpointSaver } from "../imports";
5
- import { VectorStore } from "../imports";
6
- interface AgentProps<T extends z.ZodType<any, any, any>> {
7
- prompt?: string | Array<string>;
6
+ interface AgentProps<T extends OutputSchema> {
8
7
  tools: DynamicStructuredTool[];
9
- llm: BaseChatModel;
10
- schema?: T;
8
+ prompt?: string | Array<string>;
9
+ llm?: BaseChatModel;
10
+ output?: T;
11
11
  memory?: BaseCheckpointSaver;
12
12
  }
13
13
  /**
14
14
  * CONSTRUCTOR:
15
- * @example constructor({
15
+ * @example
16
+ * constructor({
16
17
  prompt = `Du bist ein hilfreicher Assistent.`,
17
- llm = getLLM({type:"groq", apikey: process.env.CHATGROQ_API_KEY ?? ""}),
18
+ llm = getLLM({ type:"groq" }),
18
19
  tools,
19
- schema,
20
- memory
20
+ output,
21
+ memory,
21
22
  }: AgentProps<T>) {
22
23
  this.prompt = typeof prompt === "string" ? [["system", prompt]] : Array.isArray(prompt) ? prompt.map((p:string)=>{
23
- return ["system", p]
24
+ if(typeof p === "string"){
25
+ return ["system", p]
26
+ } else {
27
+ return p // weil wenn es kein string ist muss es ein MessagePlaceholder sein
28
+ }
24
29
  }) : []
25
30
  this.prompt.push(["system",`WICHTIG:
26
31
  - Nutze Tools NUR wenn nötig
@@ -29,38 +34,30 @@ interface AgentProps<T extends z.ZodType<any, any, any>> {
29
34
  - Vermeide unnötige Tool-Calls, die dem user nichts bringen`])
30
35
  this.tools = tools
31
36
  this.llm = llm
32
- this.schema = schema
37
+ this.output = output
33
38
  this.memory = memory
34
39
  }
40
+ * @param output - Zod-Schema: beschreibt die Struktur des Rückgabewerts von .invoke()
35
41
  */
36
- export declare class Agent<T extends z.ZodObject<any, any>> {
42
+ export declare class Agent<T extends OutputSchema> {
37
43
  private prompt;
38
44
  private tools;
39
45
  private llm;
40
- private schema;
46
+ private output;
41
47
  private agent;
42
48
  private memory;
43
- private vectorStore;
44
- private rag_tool;
45
- private times_of_added_context;
46
- private should_use_schema;
47
- constructor({ prompt, llm, tools, schema, memory }: AgentProps<T>);
49
+ private should_use_output;
50
+ constructor({ prompt, llm, tools, output, memory, }: AgentProps<T>);
48
51
  invoke(invokeInput: Record<string, any> & {
49
52
  thread_id?: string;
50
53
  debug?: boolean;
51
54
  }): Promise<T extends undefined ? string : z.infer<T>>;
55
+ /** bro nutzt später vielleicht intern mal die native .stream() von createReactAgent */
52
56
  stream(invokeInput: Record<string, any> & {
53
57
  thread_id?: string;
54
58
  debug?: boolean;
55
59
  stream_delay?: number;
56
60
  }): 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
61
  addTool(tool: DynamicStructuredTool): void;
65
62
  get currentTools(): string[];
66
63
  }
@@ -1 +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,EAAC,MAAM,YAAY,CAAA;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAC1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAOxC,UAAU,UAAU,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACnD,MAAM,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAA;IAC/B,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;;;;;;;;;;;;;;;;;;;;;;GAsBG;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,MAA6C,EAC7C,GAAuE,EACvE,KAAK,EACL,MAAM,EACN,MAAM,EACT,EAAE,UAAU,CAAC,CAAC,CAAC;IAeH,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG;QAAE,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;IAqCrI,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG;QAAE,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;IAevJ,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"}
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,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAC3C,OAAO,EAAE,qBAAqB,EAAC,MAAM,YAAY,CAAA;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAC1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAchD,UAAU,UAAU,CAAC,CAAC,SAAS,YAAY;IACvC,KAAK,EAAE,qBAAqB,EAAE,CAAA;IAC9B,MAAM,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAA;IAC/B,GAAG,CAAC,EAAE,aAAa,CAAA;IACnB,MAAM,CAAC,EAAE,CAAC,CAAA;IACV,MAAM,CAAC,EAAE,mBAAmB,CAAA;CAC/B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,qBAAa,KAAK,CAAC,CAAC,SAAS,YAAY;IACrC,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,iBAAiB,CAAgB;gBAE7B,EACR,MAA6C,EAC7C,GAA6B,EAC7B,KAAK,EACL,MAAM,EACN,MAAM,GACT,EAAE,UAAU,CAAC,CAAC,CAAC;IAmBH,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG;QAAE,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;IAoCnJ,uFAAuF;IACzE,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG;QAAE,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;IAevJ,OAAO,CAAC,IAAI,EAAC,qBAAqB;IAIzC,IAAW,YAAY,IAAI,MAAM,EAAE,CAElC;CACJ"}
@@ -1,21 +1,23 @@
1
- import { z } from "zod/v3";
2
- import { DynamicStructuredTool } from "../imports";
3
- import { turn_to_docs } from "../rag";
4
1
  import { createReactAgent } from "../imports";
5
2
  import { HumanMessage } from "../imports";
6
3
  import { getLLM, stream } from "../helpers";
7
4
  import { structure } from "../magic-funcs/parsers/structure";
8
5
  /**
9
6
  * CONSTRUCTOR:
10
- * @example constructor({
7
+ * @example
8
+ * constructor({
11
9
  prompt = `Du bist ein hilfreicher Assistent.`,
12
- llm = getLLM({type:"groq", apikey: process.env.CHATGROQ_API_KEY ?? ""}),
10
+ llm = getLLM({ type:"groq" }),
13
11
  tools,
14
- schema,
15
- memory
12
+ output,
13
+ memory,
16
14
  }: AgentProps<T>) {
17
15
  this.prompt = typeof prompt === "string" ? [["system", prompt]] : Array.isArray(prompt) ? prompt.map((p:string)=>{
18
- return ["system", p]
16
+ if(typeof p === "string"){
17
+ return ["system", p]
18
+ } else {
19
+ return p // weil wenn es kein string ist muss es ein MessagePlaceholder sein
20
+ }
19
21
  }) : []
20
22
  this.prompt.push(["system",`WICHTIG:
21
23
  - Nutze Tools NUR wenn nötig
@@ -24,24 +26,27 @@ import { structure } from "../magic-funcs/parsers/structure";
24
26
  - Vermeide unnötige Tool-Calls, die dem user nichts bringen`])
25
27
  this.tools = tools
26
28
  this.llm = llm
27
- this.schema = schema
29
+ this.output = output
28
30
  this.memory = memory
29
31
  }
32
+ * @param output - Zod-Schema: beschreibt die Struktur des Rückgabewerts von .invoke()
30
33
  */
31
34
  export class Agent {
32
35
  prompt;
33
36
  tools;
34
37
  llm;
35
- schema;
38
+ output;
36
39
  agent;
37
40
  memory;
38
- vectorStore;
39
- rag_tool;
40
- times_of_added_context = 0;
41
- should_use_schema = true;
42
- constructor({ prompt = `Du bist ein hilfreicher Assistent.`, llm = getLLM({ type: "groq", apikey: process.env.CHATGROQ_API_KEY ?? "" }), tools, schema, memory }) {
41
+ should_use_output = true;
42
+ constructor({ prompt = `Du bist ein hilfreicher Assistent.`, llm = getLLM({ type: "groq" }), tools, output, memory, }) {
43
43
  this.prompt = typeof prompt === "string" ? [["system", prompt]] : Array.isArray(prompt) ? prompt.map((p) => {
44
- return ["system", p];
44
+ if (typeof p === "string") {
45
+ return ["system", p];
46
+ }
47
+ else {
48
+ return p; // weil wenn es kein string ist muss es ein MessagePlaceholder sein
49
+ }
45
50
  }) : [];
46
51
  this.prompt.push(["system", `WICHTIG:
47
52
  - Nutze Tools NUR wenn nötig
@@ -50,7 +55,7 @@ export class Agent {
50
55
  - Vermeide unnötige Tool-Calls, die dem user nichts bringen`]);
51
56
  this.tools = tools;
52
57
  this.llm = llm;
53
- this.schema = schema;
58
+ this.output = output;
54
59
  this.memory = memory;
55
60
  }
56
61
  async invoke(invokeInput) {
@@ -60,13 +65,9 @@ export class Agent {
60
65
  if (!this.memory && thread_id)
61
66
  console.warn("WARN: thread_id is provided but no memory is set, so no memory is stored");
62
67
  const humanMessages = Object.entries(variables).map(([key, value]) => new HumanMessage(`${key}: ${typeof value === "object" ? JSON.stringify(value) : value}`));
63
- // Tools für diesen invoke (inkl. RAG falls vorhanden)
64
- const activeTools = this.rag_tool
65
- ? [...this.tools, this.rag_tool]
66
- : this.tools;
67
68
  this.agent = createReactAgent({
68
69
  llm: this.llm,
69
- tools: activeTools,
70
+ tools: this.tools,
70
71
  checkpointSaver: this.memory,
71
72
  prompt: (state) => [
72
73
  ...this.prompt,
@@ -74,20 +75,26 @@ export class Agent {
74
75
  ]
75
76
  });
76
77
  const config = thread_id && this.memory ? { configurable: { thread_id } } : undefined;
78
+ if (thread_id && !this.memory)
79
+ console.warn("thread_id wurde beim invoke des agenten mitgegeben aber keine memory, somit wird nichts gespeichert und die thread_id ist gleichgültig");
77
80
  const result = await this.agent.invoke({ messages: humanMessages }, config);
78
81
  if (debug)
79
82
  return result;
80
83
  const lastMessage = result.messages[result.messages.length - 1];
81
- const content = lastMessage.content;
82
- if (this.schema && this.should_use_schema) {
83
- return await structure({ data: content, into: this.schema, llm: this.llm });
84
+ const raw = lastMessage?.content;
85
+ const content = typeof raw === "string" ? raw : (Array.isArray(raw) ? raw.map((c) => c?.text ?? c).join("") : String(raw ?? ""));
86
+ if (this.output && this.should_use_output) {
87
+ return await structure({ data: content, into: this.output, llm: this.llm });
88
+ }
89
+ else {
90
+ return content;
84
91
  }
85
- return content;
86
92
  }
93
+ /** bro nutzt später vielleicht intern mal die native .stream() von createReactAgent */
87
94
  async *stream(invokeInput) {
88
- this.should_use_schema = false;
95
+ this.should_use_output = false;
89
96
  try {
90
- const { stream_delay = 1, ...rest } = invokeInput;
97
+ const { stream_delay = 50, ...rest } = invokeInput;
91
98
  const response = await this.invoke(rest);
92
99
  const responseStr = typeof response === "string" ? response : JSON.stringify(response);
93
100
  const words = responseStr.split(" ");
@@ -96,52 +103,14 @@ export class Agent {
96
103
  }
97
104
  }
98
105
  finally {
99
- this.should_use_schema = true;
100
- }
101
- }
102
- setContext(vectorStore, metadata = {}) {
103
- this.vectorStore = vectorStore;
104
- this.rag_tool = new DynamicStructuredTool({
105
- name: metadata.name ?? "search_context",
106
- description: metadata.description ?? "Search the knowledge base for relevant information",
107
- schema: z.object({
108
- query: z.string().describe("The search query")
109
- }),
110
- func: async ({ query }) => {
111
- const docs = await this.vectorStore?.similaritySearch(query, 3);
112
- if (!docs || docs.length === 0)
113
- return "No relevant information found.";
114
- return docs.map(doc => doc.pageContent).join("\n\n---\n\n");
115
- }
116
- });
117
- }
118
- async addContext(data) {
119
- if (!this.vectorStore) {
120
- throw new Error("Cant add context, no vector store set");
106
+ this.should_use_output = true;
121
107
  }
122
- this.times_of_added_context++;
123
- const docs = turn_to_docs(data);
124
- await this.vectorStore.addDocuments(docs);
125
- console.log(`Added context ${this.times_of_added_context} ${this.times_of_added_context === 1 ? "time" : "times"}`);
126
- }
127
- clearContext() {
128
- this.rag_tool = undefined;
129
- this.vectorStore = undefined;
130
- this.times_of_added_context = 0;
131
- console.log("Context cleared");
132
- }
133
- hasContext() {
134
- return this.vectorStore !== undefined && this.rag_tool !== undefined;
135
108
  }
136
109
  addTool(tool) {
137
110
  this.tools.push(tool);
138
111
  }
139
112
  get currentTools() {
140
- const tools = [...this.tools];
141
- if (this.rag_tool) {
142
- tools.push(this.rag_tool);
143
- }
144
- return tools.map(tool => tool.name);
113
+ return this.tools.map(tool => tool.name);
145
114
  }
146
115
  }
147
116
  //# sourceMappingURL=agent.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/heart/agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAA;AAC1B,OAAO,EAAE,qBAAqB,EAAC,MAAM,YAAY,CAAA;AAIjD,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAA;AACrC,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAC7C,OAAO,EAAE,YAAY,EAAC,MAAM,YAAY,CAAA;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAA;AAU5D;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,OAAO,KAAK;IACN,MAAM,CAA2B;IACjC,KAAK,CAAyB;IAC9B,GAAG,CAAe;IAClB,MAAM,CAAe;IACrB,KAAK,CAAK;IACV,MAAM,CAAiC;IACvC,WAAW,CAAyB;IACpC,QAAQ,CAAmC;IAC3C,sBAAsB,GAAW,CAAC,CAAA;IAClC,iBAAiB,GAAY,IAAI,CAAA;IAEzC,YAAY,EACR,MAAM,GAAG,oCAAoC,EAC7C,GAAG,GAAG,MAAM,CAAC,EAAC,IAAI,EAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,EAAE,EAAC,CAAC,EACvE,KAAK,EACL,MAAM,EACN,MAAM,EACM;QACZ,IAAI,CAAC,MAAM,GAAG,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAQ,EAAC,EAAE;YAC7G,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAA;QACxB,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;QACP,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAC;;;;wEAIqC,CAAC,CAAC,CAAA;QAClE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;QAClB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAA;QACd,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;IACxB,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,WAA0E;QAC1F,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,SAAS,EAAE,GAAG,WAAW,CAAA;QAEtD,IAAG,IAAI,CAAC,MAAM,IAAI,CAAC,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,mEAAmE,CAAC,CAAA;QAClH,IAAG,CAAC,IAAI,CAAC,MAAM,IAAI,SAAS;YAAE,OAAO,CAAC,IAAI,CAAC,0EAA0E,CAAC,CAAA;QAEtH,MAAM,aAAa,GAAmB,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,GAAG,CAC/D,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,IAAI,YAAY,CAAC,GAAG,GAAG,KAAK,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAC7G,CAAC;QAEF,sDAAsD;QACtD,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ;YAC7B,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC;YAChC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAA;QAEhB,IAAI,CAAC,KAAK,GAAG,gBAAgB,CAAC;YAC1B,GAAG,EAAE,IAAI,CAAC,GAAU;YACpB,KAAK,EAAE,WAAkB;YACzB,eAAe,EAAE,IAAI,CAAC,MAAa;YACnC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC;gBACf,GAAG,IAAI,CAAC,MAAM;gBACd,GAAG,KAAK,CAAC,QAAQ;aACpB;SACJ,CAAC,CAAA;QAEF,MAAM,MAAM,GAAG,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAA;QACrF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,aAAa,EAAS,EAAE,MAAM,CAAC,CAAA;QAClF,IAAG,KAAK;YAAE,OAAO,MAAM,CAAA;QACvB,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;QAC/D,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAA;QAEnC,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACxC,OAAO,MAAM,SAAS,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAQ,CAAA;QACtF,CAAC;QACD,OAAO,OAAO,CAAA;IAClB,CAAC;IAEM,KAAK,CAAC,CAAC,MAAM,CAAC,WAAiG;QAClH,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAA;QAC9B,IAAG,CAAC;YACA,MAAM,EAAE,YAAY,GAAG,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,WAAW,CAAA;YACjD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;YACxC,MAAM,WAAW,GAAG,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA;YACtF,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;YACpC,IAAI,KAAK,EAAE,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,EAAC,YAAY,CAAC,EAAC,CAAC;gBACjD,MAAM,IAAI,GAAG,GAAG,CAAA;YACpB,CAAC;QACL,CAAC;gBAAS,CAAC;YACP,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAA;QACjC,CAAC;IACL,CAAC;IAEM,UAAU,CAAC,WAAwB,EAAE,WAAoD,EAAE;QAC9F,IAAI,CAAC,WAAW,GAAG,WAAW,CAAA;QAC9B,IAAI,CAAC,QAAQ,GAAG,IAAI,qBAAqB,CAAC;YACtC,IAAI,EAAE,QAAQ,CAAC,IAAI,IAAI,gBAAgB;YACvC,WAAW,EAAE,QAAQ,CAAC,WAAW,IAAI,oDAAoD;YACzF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;gBACb,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;aACjD,CAAC;YACF,IAAI,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;gBACtB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,gBAAgB,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;gBAC/D,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;oBAAE,OAAO,gCAAgC,CAAA;gBACvE,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;YAC/D,CAAC;SACJ,CAAC,CAAA;IACN,CAAC;IAEM,KAAK,CAAC,UAAU,CAAC,IAAgB;QACpC,IAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAA;QAC5D,CAAC;QACD,IAAI,CAAC,sBAAsB,EAAE,CAAA;QAC7B,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,CAAA;QAC/B,MAAM,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,CAAA;QACzC,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,CAAC,sBAAsB,IAAI,IAAI,CAAC,sBAAsB,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAA;IACvH,CAAC;IAEM,YAAY;QACf,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAA;QACzB,IAAI,CAAC,WAAW,GAAG,SAAS,CAAA;QAC5B,IAAI,CAAC,sBAAsB,GAAG,CAAC,CAAA;QAC/B,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAA;IAClC,CAAC;IAEM,UAAU;QACb,OAAO,IAAI,CAAC,WAAW,KAAK,SAAS,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,CAAA;IACxE,CAAC;IAEM,OAAO,CAAC,IAA0B;QACrC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACzB,CAAC;IAED,IAAW,YAAY;QACnB,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAA;QAC7B,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QAC7B,CAAC;QACD,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACvC,CAAC;CACJ"}
1
+ {"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/heart/agent.ts"],"names":[],"mappings":"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"}
@@ -1,44 +1,51 @@
1
1
  import { BaseChatModel, MessagesPlaceholder, VectorStore } from "../imports";
2
2
  import { z } from "zod/v3";
3
- export declare const DEFAULT_SCHEMA: z.ZodObject<{
3
+ /** Output-Schema für .invoke(): z.object() oder z.record() (Zod v3). */
4
+ export type OutputSchema = z.ZodObject<any, any, any> | z.ZodRecord<any, any>;
5
+ export declare const DEFAULT_OUTPUT_SCHEMA: z.ZodObject<{
4
6
  output: z.ZodString;
5
7
  }, "strip", z.ZodTypeAny, {
6
8
  output: string;
7
9
  }, {
8
10
  output: string;
9
11
  }>;
10
- interface ChainProps<T extends z.ZodType<any, any, any>> {
12
+ interface ChainProps<T extends OutputSchema> {
11
13
  prompt?: string | Array<string | MessagesPlaceholder<any>>;
12
14
  llm?: BaseChatModel;
13
- schema?: T;
15
+ output?: T;
16
+ vectorStore?: VectorStore;
14
17
  }
15
18
  /**
16
19
  * CONSTRUCTOR:
17
- * @example constructor({
20
+ * @example
21
+ * constructor({
18
22
  prompt = "du bist ein hilfreicher Assistent",
19
23
  llm = getLLM({type:"groq", apikey: process.env.CHATGROQ_API_KEY ?? ""}),
20
- schema = DEFAULT_SCHEMA as unknown as T as T
24
+ output = DEFAULT_OUTPUT_SCHEMA as unknown as T as T
25
+ vectorStore = undefined
21
26
  }:ChainProps<T>){
22
27
  this.prompt = typeof prompt === "string" ? [["system", prompt]] : Array.isArray(prompt) ? prompt.map((p:string | MessagesPlaceholder<any>)=>{
23
28
  if(typeof p === "string"){
24
29
  return ["system", p]
25
30
  } else {
26
- return p
31
+ return p // weil wenn es kein string ist dann ist es ein MessagePlaceholder
27
32
  }
28
33
  }) : []
29
34
  this.llm = llm
30
- this.schema = schema
31
- this.parser = StructuredOutputParser.fromZodSchema(this.schema)
35
+ this.vectorStore = vectorStore
36
+ this.output = output
37
+ this.parser = StructuredOutputParser.fromZodSchema(this.output)
32
38
  }
39
+ * @param output - Zod-Schema: beschreibt die Struktur des Rückgabewerts von .invoke()
33
40
  */
34
- export declare class Chain<T extends z.ZodType<any, any, any> = typeof DEFAULT_SCHEMA> {
41
+ export declare class Chain<T extends OutputSchema = typeof DEFAULT_OUTPUT_SCHEMA> {
35
42
  private prompt;
36
43
  private vectorStore;
37
44
  private times_of_added_context;
38
45
  private parser;
39
46
  private llm;
40
- private schema;
41
- constructor({ prompt, llm, schema }: ChainProps<T>);
47
+ private output;
48
+ constructor({ prompt, llm, output, vectorStore }?: ChainProps<T>);
42
49
  invoke(input: Record<string, any> & {
43
50
  debug?: boolean;
44
51
  }): Promise<z.infer<T>>;
@@ -47,7 +54,7 @@ export declare class Chain<T extends z.ZodType<any, any, any> = typeof DEFAULT_S
47
54
  }): AsyncGenerator<string, void, unknown>;
48
55
  /** Fügt RAG-Kontext hinzu. Docs werden EINMAL zum VectorStore hinzugefügt. */
49
56
  addContext(data: Array<any>): Promise<void>;
50
- setContext(vectorStore: VectorStore): Promise<void>;
57
+ setContext(vectorStore: VectorStore): void;
51
58
  clearContext(): void;
52
59
  }
53
60
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"chain.d.ts","sourceRoot":"","sources":["../../src/heart/chain.ts"],"names":[],"mappings":"AACA,OAAO,EACH,aAAa,EAGb,mBAAmB,EACnB,WAAW,EAGd,MAAM,YAAY,CAAA;AAEnB,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAA;AAE1B,eAAO,MAAM,cAAc;;;;;;EAEzB,CAAA;AAEF,UAAU,UAAU,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACnD,MAAM,CAAC,EAAC,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAA;IACzD,GAAG,CAAC,EAAC,aAAa,CAAA;IAClB,MAAM,CAAC,EAAC,CAAC,CAAA;CACZ;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,OAAO,cAAc;IACzE,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,EACR,MAA4C,EAC5C,GAAuE,EACvE,MAA4C,EAC/C,EAAC,UAAU,CAAC,CAAC,CAAC;IAaF,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;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,cAAc,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC;IAuD7G,8EAA8E;IACjE,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC;IAU3B,UAAU,CAAC,WAAW,EAAE,WAAW;IAKzC,YAAY;CAKtB"}
1
+ {"version":3,"file":"chain.d.ts","sourceRoot":"","sources":["../../src/heart/chain.ts"],"names":[],"mappings":"AACA,OAAO,EACH,aAAa,EAGb,mBAAmB,EACnB,WAAW,EAGd,MAAM,YAAY,CAAA;AAEnB,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAA;AAE1B,wEAAwE;AACxE,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;AAE7E,eAAO,MAAM,qBAAqB;;;;;;EAEhC,CAAA;AAEF,UAAU,UAAU,CAAC,CAAC,SAAS,YAAY;IACvC,MAAM,CAAC,EAAC,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAA;IACzD,GAAG,CAAC,EAAC,aAAa,CAAA;IAClB,MAAM,CAAC,EAAC,CAAC,CAAC;IACV,WAAW,CAAC,EAAE,WAAW,CAAA;CAC5B;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,KAAK,CAAC,CAAC,SAAS,YAAY,GAAG,OAAO,qBAAqB;IACpE,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,EACR,MAA4C,EAC5C,GAA6B,EAC7B,MAAmD,EACnD,WAAuB,EAC1B,GAAC,UAAU,CAAC,CAAC,CAAM;IAcP,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;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,cAAc,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC;IAuD7G,8EAA8E;IACjE,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC;IAWjC,UAAU,CAAC,WAAW,EAAE,WAAW;IAKnC,YAAY;CAKtB"}