@delofarag/ai-utils 1.0.2 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/dist/heart/agent.d.ts +68 -0
  2. package/dist/heart/agent.d.ts.map +1 -0
  3. package/dist/heart/agent.js +146 -0
  4. package/dist/heart/agent.js.map +1 -0
  5. package/dist/heart/chain.d.ts +50 -0
  6. package/dist/heart/chain.d.ts.map +1 -0
  7. package/dist/heart/chain.js +165 -0
  8. package/dist/heart/chain.js.map +1 -0
  9. package/dist/heart/chatbot.d.ts +45 -0
  10. package/dist/heart/chatbot.d.ts.map +1 -0
  11. package/dist/heart/chatbot.js +117 -0
  12. package/dist/heart/chatbot.js.map +1 -0
  13. package/dist/heart/memorychain.d.ts +57 -0
  14. package/dist/heart/memorychain.d.ts.map +1 -0
  15. package/dist/heart/memorychain.js +178 -0
  16. package/dist/heart/memorychain.js.map +1 -0
  17. package/dist/heart/tools/BasicToolRegistry.d.ts +22 -0
  18. package/dist/heart/tools/BasicToolRegistry.d.ts.map +1 -0
  19. package/dist/heart/tools/BasicToolRegistry.js +45 -0
  20. package/dist/heart/tools/BasicToolRegistry.js.map +1 -0
  21. package/dist/heart/tools/CombinedRegistry.d.ts +41 -0
  22. package/dist/heart/tools/CombinedRegistry.d.ts.map +1 -0
  23. package/dist/heart/tools/CombinedRegistry.js +46 -0
  24. package/dist/heart/tools/CombinedRegistry.js.map +1 -0
  25. package/dist/heart/tools/ZodiosToolRegistry.d.ts +22 -0
  26. package/dist/heart/tools/ZodiosToolRegistry.d.ts.map +1 -0
  27. package/dist/heart/tools/ZodiosToolRegistry.js +80 -0
  28. package/dist/heart/tools/ZodiosToolRegistry.js.map +1 -0
  29. package/dist/helpers.d.ts +39 -0
  30. package/dist/helpers.d.ts.map +1 -0
  31. package/dist/helpers.js +99 -0
  32. package/dist/helpers.js.map +1 -0
  33. package/dist/imports.d.ts +44 -0
  34. package/dist/imports.d.ts.map +1 -0
  35. package/dist/imports.js +56 -0
  36. package/dist/imports.js.map +1 -0
  37. package/dist/index.d.ts +11 -0
  38. package/dist/index.d.ts.map +1 -0
  39. package/dist/index.js +11 -0
  40. package/dist/index.js.map +1 -0
  41. package/dist/memory.d.ts +78 -0
  42. package/dist/memory.d.ts.map +1 -0
  43. package/dist/memory.js +276 -0
  44. package/dist/memory.js.map +1 -0
  45. package/dist/rag.d.ts +58 -0
  46. package/dist/rag.d.ts.map +1 -0
  47. package/dist/rag.js +72 -0
  48. package/dist/rag.js.map +1 -0
  49. package/package.json +10 -9
@@ -0,0 +1,99 @@
1
+ import { ChatGroq, ChatOllama, ChatOpenAI, ChatPromptTemplate, StringOutputParser, StructuredOutputParser } from "./imports";
2
+ export function logChunk(chunk) {
3
+ const flushed = process.stdout.write(chunk);
4
+ if (!flushed) {
5
+ process.stdout.once('drain', () => { });
6
+ }
7
+ else {
8
+ // Explizit flushen, damit Output sofort sichtbar ist
9
+ process.stdout.write('', () => { });
10
+ }
11
+ }
12
+ export function createChain(prompt, llm, parser = null) {
13
+ return parser ? prompt.pipe(llm).pipe(parser) : prompt.pipe(llm);
14
+ }
15
+ export async function wait(ms) {
16
+ return new Promise(resolve => setTimeout(resolve, ms));
17
+ }
18
+ export async function* stream(text, wait_in_between = 100) {
19
+ for (const chunk of text) {
20
+ yield chunk + " ";
21
+ await wait(wait_in_between);
22
+ }
23
+ }
24
+ export function getLLM(config) {
25
+ switch (config.type) {
26
+ case "groq":
27
+ return new ChatGroq({
28
+ apiKey: config.apikey,
29
+ model: config.model ?? "llama-3.3-70b-versatile"
30
+ });
31
+ case "openrouter":
32
+ return new ChatOpenAI({
33
+ apiKey: config.apikey,
34
+ configuration: {
35
+ baseURL: "https://openrouter.ai/api/v1",
36
+ },
37
+ model: config.model ?? "openai/gpt-4o-mini"
38
+ });
39
+ case "localOllama":
40
+ return new ChatOllama({
41
+ model: config.model ?? "llama3.2:3b"
42
+ });
43
+ default:
44
+ throw new Error("Unknown LLM kind");
45
+ }
46
+ }
47
+ export async function structure({ data, into, llm, retries = 2 }) {
48
+ const inputString = typeof data === "string" ? data : JSON.stringify(data, null, 2);
49
+ const jsonParser = StructuredOutputParser.fromZodSchema(into);
50
+ const prompt = await ChatPromptTemplate.fromMessages([
51
+ ["system", `Du bist ein JSON-Formatierer.
52
+ REGELN:
53
+ - Gib NUR valides JSON zurück, KEIN anderer Text
54
+ - Keine Markdown Code-Blöcke (\`\`\`json)
55
+ - Halte dich EXAKT an das Schema
56
+
57
+ Schema:
58
+ {format_instructions}`],
59
+ ["human", "{input}"]
60
+ ]).partial({ format_instructions: jsonParser.getFormatInstructions() });
61
+ const chain = createChain(prompt, llm, jsonParser);
62
+ let lastError = null;
63
+ for (let i = 0; i <= retries; i++) {
64
+ try {
65
+ const result = await chain.invoke({ input: inputString });
66
+ return into.parse(result);
67
+ }
68
+ catch (error) {
69
+ lastError = error;
70
+ if (i < retries) {
71
+ console.warn(`structure() Versuch ${i + 1} fehlgeschlagen, retry...`);
72
+ }
73
+ }
74
+ }
75
+ throw new Error(`structure() failed after ${retries + 1} attempts, Error: ${lastError?.message}`);
76
+ }
77
+ /**
78
+ * fasst eine Chat-Konversation zwischen User und Assistant zusammen
79
+ */
80
+ export async function summarize({ conversation, fokuss, llm, maxWords = 150 }) {
81
+ const focusMessage = fokuss
82
+ ? [["system", `Fokussiere dich besonders auf die folgenden Themen:\n${fokuss}`]]
83
+ : [];
84
+ const prompt = ChatPromptTemplate.fromMessages([
85
+ ["system", `Du fasst eine Chat-Konversation zwischen User und Assistant zusammen.
86
+ WICHTIG:
87
+ - Behalte ALLE wichtigen Fakten: Namen, Präferenzen, Entscheidungen, Vereinbarungen
88
+ - Behalte chronologischen Kontext wo relevant für Verständnis
89
+ - Fasse auf max. ${maxWords} Wörter zusammen
90
+ - Format: Kurze, prägnante Zusammenfassung ohne Bullet-Points
91
+ - Ignoriere Small-Talk, fokussiere auf inhaltliche Punkte`],
92
+ ...focusMessage,
93
+ ["human", "{conversation}"]
94
+ ]);
95
+ const chain = createChain(prompt, llm, new StringOutputParser());
96
+ const result = await chain.invoke({ conversation });
97
+ return typeof result === "string" ? result : String(result);
98
+ }
99
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ import { BaseMessage, HumanMessage, AIMessage, SystemMessage } from '@langchain/core/messages';
2
+ import { ChatPromptTemplate, MessagesPlaceholder } from '@langchain/core/prompts';
3
+ import { BaseOutputParser, StructuredOutputParser, StringOutputParser } from '@langchain/core/output_parsers';
4
+ import { BaseChatModel } from '@langchain/core/language_models/chat_models';
5
+ import { Document } from '@langchain/core/documents';
6
+ import { BaseRetriever } from '@langchain/core/retrievers';
7
+ import { Runnable, type RunnableConfig } from '@langchain/core/runnables';
8
+ import { DynamicStructuredTool, tool } from '@langchain/core/tools';
9
+ import { Embeddings } from '@langchain/core/embeddings';
10
+ import { ChatOllama, OllamaEmbeddings } from '@langchain/ollama';
11
+ import { ChatGroq } from '@langchain/groq';
12
+ import { ChatOpenAI, OpenAIEmbeddings } from '@langchain/openai';
13
+ import { ChatAnthropic } from '@langchain/anthropic';
14
+ import { VectorStore, SaveableVectorStore, VectorStoreRetriever } from '@langchain/core/vectorstores';
15
+ import { SupabaseVectorStore } from '@langchain/community/vectorstores/supabase';
16
+ import { FaissStore } from '@langchain/community/vectorstores/faiss';
17
+ import { MemoryVectorStore } from '@langchain/classic/vectorstores/memory';
18
+ import { createStuffDocumentsChain } from '@langchain/classic/chains/combine_documents';
19
+ import { createRetrievalChain } from '@langchain/classic/chains/retrieval';
20
+ import { BaseChain } from '@langchain/classic/chains';
21
+ import { RecursiveCharacterTextSplitter, CharacterTextSplitter } from '@langchain/textsplitters';
22
+ import { createReactAgent, ToolNode } from '@langchain/langgraph/prebuilt';
23
+ import { MemorySaver, BaseCheckpointSaver } from '@langchain/langgraph';
24
+ import { PostgresSaver } from '@langchain/langgraph-checkpoint-postgres';
25
+ import { SqliteSaver } from '@langchain/langgraph-checkpoint-sqlite';
26
+ import { type Checkpoint, type CheckpointMetadata, type LangGraphRunnableConfig } from "@langchain/langgraph";
27
+ import type { CheckpointTuple, CheckpointListOptions, PendingWrite, ChannelVersions } from "@langchain/langgraph-checkpoint";
28
+ import { z } from 'zod';
29
+ export { BaseMessage, HumanMessage, AIMessage, SystemMessage, ChatPromptTemplate, MessagesPlaceholder, BaseOutputParser, StructuredOutputParser, StringOutputParser, BaseChatModel, Document, BaseRetriever, Runnable, DynamicStructuredTool, tool, };
30
+ export { ChatOllama, ChatGroq, ChatOpenAI, ChatAnthropic, };
31
+ export { Embeddings, // Base class für alle Embeddings
32
+ OllamaEmbeddings, OpenAIEmbeddings, };
33
+ export { VectorStore, // Base class für alle Vector Stores
34
+ SaveableVectorStore, // Base class für speicherbare Vector Stores
35
+ VectorStoreRetriever, // Retriever für Vector Stores
36
+ SupabaseVectorStore, // Cloud: Supabase
37
+ FaissStore, // Lokal: Speichert in Datei
38
+ MemoryVectorStore, };
39
+ export { createStuffDocumentsChain, createRetrievalChain, BaseChain, RecursiveCharacterTextSplitter, CharacterTextSplitter, };
40
+ export { createReactAgent, ToolNode, MemorySaver, BaseCheckpointSaver, };
41
+ export { PostgresSaver, SqliteSaver, };
42
+ export { type Checkpoint, type CheckpointMetadata, type LangGraphRunnableConfig, type RunnableConfig, type CheckpointTuple, type CheckpointListOptions, type PendingWrite, type ChannelVersions, };
43
+ export { z };
44
+ //# sourceMappingURL=imports.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"imports.d.ts","sourceRoot":"","sources":["../src/imports.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ import { BaseMessage, HumanMessage, AIMessage, SystemMessage } from '@langchain/core/messages';
2
+ import { ChatPromptTemplate, MessagesPlaceholder } from '@langchain/core/prompts';
3
+ import { BaseOutputParser, StructuredOutputParser, StringOutputParser } from '@langchain/core/output_parsers';
4
+ import { BaseChatModel } from '@langchain/core/language_models/chat_models';
5
+ import { Document } from '@langchain/core/documents';
6
+ import { BaseRetriever } from '@langchain/core/retrievers';
7
+ import { Runnable } from '@langchain/core/runnables';
8
+ import { DynamicStructuredTool, tool } from '@langchain/core/tools';
9
+ import { Embeddings } from '@langchain/core/embeddings';
10
+ // LLM Providers
11
+ import { ChatOllama, OllamaEmbeddings } from '@langchain/ollama';
12
+ import { ChatGroq } from '@langchain/groq';
13
+ import { ChatOpenAI, OpenAIEmbeddings } from '@langchain/openai';
14
+ import { ChatAnthropic } from '@langchain/anthropic';
15
+ // RAG: Vector Stores (Base Classes)
16
+ import { VectorStore, SaveableVectorStore, VectorStoreRetriever } from '@langchain/core/vectorstores';
17
+ // RAG: Vector Store Implementations
18
+ import { SupabaseVectorStore } from '@langchain/community/vectorstores/supabase';
19
+ import { FaissStore } from '@langchain/community/vectorstores/faiss';
20
+ import { MemoryVectorStore } from '@langchain/classic/vectorstores/memory';
21
+ // RAG: Chains
22
+ import { createStuffDocumentsChain } from '@langchain/classic/chains/combine_documents';
23
+ import { createRetrievalChain } from '@langchain/classic/chains/retrieval';
24
+ import { BaseChain } from '@langchain/classic/chains';
25
+ // RAG: Text Splitting
26
+ import { RecursiveCharacterTextSplitter, CharacterTextSplitter } from '@langchain/textsplitters';
27
+ // Agents
28
+ import { createReactAgent, ToolNode } from '@langchain/langgraph/prebuilt';
29
+ import { MemorySaver, BaseCheckpointSaver } from '@langchain/langgraph';
30
+ import { PostgresSaver } from '@langchain/langgraph-checkpoint-postgres';
31
+ import { SqliteSaver } from '@langchain/langgraph-checkpoint-sqlite';
32
+ import { z } from 'zod';
33
+ // Core
34
+ export { BaseMessage, HumanMessage, AIMessage, SystemMessage, ChatPromptTemplate, MessagesPlaceholder, BaseOutputParser, StructuredOutputParser, StringOutputParser, BaseChatModel, Document, BaseRetriever, Runnable, DynamicStructuredTool, tool, };
35
+ // LLM Providers
36
+ export { ChatOllama, ChatGroq, ChatOpenAI, ChatAnthropic, };
37
+ // Embeddings
38
+ export { Embeddings, // Base class für alle Embeddings
39
+ OllamaEmbeddings, OpenAIEmbeddings, };
40
+ // RAG: Vector Stores
41
+ export { VectorStore, // Base class für alle Vector Stores
42
+ SaveableVectorStore, // Base class für speicherbare Vector Stores
43
+ VectorStoreRetriever, // Retriever für Vector Stores
44
+ SupabaseVectorStore, // Cloud: Supabase
45
+ FaissStore, // Lokal: Speichert in Datei
46
+ MemoryVectorStore, // Lokal: In-Memory (kein Speichern)
47
+ };
48
+ // RAG: Chains & Utils
49
+ export { createStuffDocumentsChain, createRetrievalChain, BaseChain, RecursiveCharacterTextSplitter, CharacterTextSplitter, };
50
+ // Agents
51
+ export { createReactAgent, ToolNode, MemorySaver, BaseCheckpointSaver, };
52
+ // Checkpoint Savers (optional - Packages müssen installiert sein)
53
+ export { PostgresSaver, SqliteSaver, };
54
+ // Utils
55
+ export { z };
56
+ //# sourceMappingURL=imports.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"imports.js","sourceRoot":"","sources":["../src/imports.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ export * from "./helpers";
2
+ export * from "./memory";
3
+ export * from "./rag";
4
+ export * from "./heart/agent";
5
+ export * from "./heart/chain";
6
+ export * from "./heart/chatbot";
7
+ export * from "./heart/memorychain";
8
+ export * from "./heart/tools/BasicToolRegistry";
9
+ export * from "./heart/tools/CombinedRegistry";
10
+ export * from "./heart/tools/ZodiosToolRegistry";
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAA;AACzB,cAAc,UAAU,CAAA;AACxB,cAAc,OAAO,CAAA;AACrB,cAAc,eAAe,CAAA;AAC7B,cAAc,eAAe,CAAA;AAC7B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,qBAAqB,CAAA;AACnC,cAAc,iCAAiC,CAAA;AAC/C,cAAc,gCAAgC,CAAA;AAC9C,cAAc,kCAAkC,CAAA"}
package/dist/index.js ADDED
@@ -0,0 +1,11 @@
1
+ export * from "./helpers";
2
+ export * from "./memory";
3
+ export * from "./rag";
4
+ export * from "./heart/agent";
5
+ export * from "./heart/chain";
6
+ export * from "./heart/chatbot";
7
+ export * from "./heart/memorychain";
8
+ export * from "./heart/tools/BasicToolRegistry";
9
+ export * from "./heart/tools/CombinedRegistry";
10
+ export * from "./heart/tools/ZodiosToolRegistry";
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAA;AACzB,cAAc,UAAU,CAAA;AACxB,cAAc,OAAO,CAAA;AACrB,cAAc,eAAe,CAAA;AAC7B,cAAc,eAAe,CAAA;AAC7B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,qBAAqB,CAAA;AACnC,cAAc,iCAAiC,CAAA;AAC/C,cAAc,gCAAgC,CAAA;AAC9C,cAAc,kCAAkC,CAAA"}
@@ -0,0 +1,78 @@
1
+ import { SupabaseTable } from "@delofarag/supabase-utils";
2
+ import { BaseCheckpointSaver, BaseChatModel, type Checkpoint, type CheckpointMetadata, type LangGraphRunnableConfig, type RunnableConfig, type CheckpointTuple, type CheckpointListOptions, type PendingWrite, type ChannelVersions } from "./imports";
3
+ interface CheckpointRow {
4
+ thread_id: string;
5
+ checkpoint: Checkpoint;
6
+ metadata: CheckpointMetadata;
7
+ created_at?: string;
8
+ updated_at?: string;
9
+ }
10
+ /**
11
+ * needs testing!!!
12
+ */
13
+ export declare class SupabaseCheckpointSaver extends BaseCheckpointSaver {
14
+ private table;
15
+ constructor(supabaseTable: SupabaseTable<CheckpointRow>);
16
+ put(config: LangGraphRunnableConfig, checkpoint: Checkpoint, metadata: CheckpointMetadata): Promise<RunnableConfig>;
17
+ get(config: LangGraphRunnableConfig): Promise<Checkpoint | undefined>;
18
+ list(config: LangGraphRunnableConfig, options?: CheckpointListOptions): AsyncGenerator<CheckpointTuple>;
19
+ delete(config: LangGraphRunnableConfig): Promise<void>;
20
+ getTuple(config: LangGraphRunnableConfig): Promise<CheckpointTuple | undefined>;
21
+ putWrites(config: RunnableConfig, writes: PendingWrite[], taskId: string): Promise<void>;
22
+ deleteThread(threadId: string): Promise<void>;
23
+ }
24
+ interface SmartCheckpointSaverOptions {
25
+ messagesBeforeSummary?: number;
26
+ maxSummaries?: number;
27
+ llm: BaseChatModel;
28
+ debug?: boolean;
29
+ }
30
+ /**
31
+ * @example CONSTRUCTOR:
32
+ * constructor(
33
+ checkpointSaver: BaseCheckpointSaver,
34
+ {
35
+ messagesBeforeSummary = 12,
36
+ maxSummaries = 7,
37
+ llm = getLLM("groq"),
38
+ debug = false
39
+ }: SmartCheckpointSaverOptions = {}
40
+ ) {
41
+ super()
42
+ this.checkpointSaver = checkpointSaver
43
+ this.messagesBeforeSummary = messagesBeforeSummary
44
+ this.maxSummaries = maxSummaries
45
+ this.llm = llm
46
+ this.debug = debug
47
+ }
48
+ */
49
+ export declare class SmartCheckpointSaver extends BaseCheckpointSaver {
50
+ private checkpointSaver;
51
+ private messagesBeforeSummary;
52
+ private maxSummaries;
53
+ private llm;
54
+ private debug;
55
+ constructor(checkpointSaver: BaseCheckpointSaver, { messagesBeforeSummary, maxSummaries, llm, debug }: SmartCheckpointSaverOptions);
56
+ /**
57
+ * Zählt User/AI Messages (ignoriert System-Messages)
58
+ */
59
+ private countChatMessages;
60
+ /**
61
+ * Findet alle System-Messages die Zusammenfassungen sind
62
+ */
63
+ private findSummaryMessages;
64
+ /**
65
+ * Konvertiert Messages zu Text für Summarization
66
+ */
67
+ private messagesToText;
68
+ private applySmartSummarization;
69
+ put(config: LangGraphRunnableConfig, checkpoint: Checkpoint, metadata: CheckpointMetadata, newVersions: ChannelVersions): Promise<RunnableConfig>;
70
+ get(config: LangGraphRunnableConfig): Promise<Checkpoint | undefined>;
71
+ list(config: LangGraphRunnableConfig, options?: CheckpointListOptions): AsyncGenerator<CheckpointTuple>;
72
+ delete(config: LangGraphRunnableConfig): Promise<void>;
73
+ getTuple(config: LangGraphRunnableConfig): Promise<CheckpointTuple | undefined>;
74
+ putWrites(config: RunnableConfig, writes: PendingWrite[], taskId: string): Promise<void>;
75
+ deleteThread(threadId: string): Promise<void>;
76
+ }
77
+ export {};
78
+ //# sourceMappingURL=memory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../src/memory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AAEzD,OAAO,EACH,mBAAmB,EAKnB,aAAa,EACb,KAAK,UAAU,EACf,KAAK,kBAAkB,EACvB,KAAK,uBAAuB,EAC5B,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,qBAAqB,EAC1B,KAAK,YAAY,EACjB,KAAK,eAAe,EACvB,MAAM,WAAW,CAAA;AAElB,UAAU,aAAa;IACnB,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,UAAU,CAAA;IACtB,QAAQ,EAAE,kBAAkB,CAAA;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,UAAU,CAAC,EAAE,MAAM,CAAA;CACtB;AAED;;GAEG;AACH,qBAAa,uBAAwB,SAAQ,mBAAmB;IAC5D,OAAO,CAAC,KAAK,CAA8B;gBAE/B,aAAa,EAAE,aAAa,CAAC,aAAa,CAAC;IAKjD,GAAG,CAAC,MAAM,EAAE,uBAAuB,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,kBAAkB,GAAG,OAAO,CAAC,cAAc,CAAC;IA4BnH,GAAG,CAAC,MAAM,EAAE,uBAAuB,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC;IAYpE,IAAI,CAAC,MAAM,EAAE,uBAAuB,EAAE,OAAO,CAAC,EAAE,qBAAqB,GAAG,cAAc,CAAC,eAAe,CAAC;IAcxG,MAAM,CAAC,MAAM,EAAE,uBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC;IAQtD,QAAQ,CAAC,MAAM,EAAE,uBAAuB,GAAG,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC;IAM/E,SAAS,CAAC,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,YAAY,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQxF,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAKtD;AAED,UAAU,2BAA2B;IACjC,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,GAAG,EAAE,aAAa,CAAA;IAClB,KAAK,CAAC,EAAE,OAAO,CAAA;CAClB;AACD;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,oBAAqB,SAAQ,mBAAmB;IACzD,OAAO,CAAC,eAAe,CAAqB;IAC5C,OAAO,CAAC,qBAAqB,CAAQ;IACrC,OAAO,CAAC,YAAY,CAAQ;IAC5B,OAAO,CAAC,GAAG,CAAe;IAC1B,OAAO,CAAC,KAAK,CAAS;gBAGlB,eAAe,EAAE,mBAAmB,EAAC,EACjC,qBAA0B,EAC1B,YAAgB,EAChB,GAAG,EACH,KAAa,EAChB,EAAE,2BAA2B;IAUlC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAMzB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAY3B;;OAEG;IACH,OAAO,CAAC,cAAc;YAaR,uBAAuB;IAoH/B,GAAG,CAAC,MAAM,EAAE,uBAAuB,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,kBAAkB,EAAE,WAAW,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC;IAajJ,GAAG,CAAC,MAAM,EAAE,uBAAuB,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC;IAIpE,IAAI,CAAC,MAAM,EAAE,uBAAuB,EAAE,OAAO,CAAC,EAAE,qBAAqB,GAAG,cAAc,CAAC,eAAe,CAAC;IAIxG,MAAM,CAAC,MAAM,EAAE,uBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC;IAMtD,QAAQ,CAAC,MAAM,EAAE,uBAAuB,GAAG,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC;IAI/E,SAAS,CAAC,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,YAAY,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOxF,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAGtD"}
package/dist/memory.js ADDED
@@ -0,0 +1,276 @@
1
+ import { summarize } from "./helpers";
2
+ import { BaseCheckpointSaver, HumanMessage, AIMessage, SystemMessage } from "./imports";
3
+ /**
4
+ * needs testing!!!
5
+ */
6
+ export class SupabaseCheckpointSaver extends BaseCheckpointSaver {
7
+ table;
8
+ constructor(supabaseTable) {
9
+ super();
10
+ this.table = supabaseTable;
11
+ }
12
+ async put(config, checkpoint, metadata) {
13
+ const threadId = config.configurable?.thread_id || "default";
14
+ const now = new Date().toISOString();
15
+ // Prüfe ob Checkpoint bereits existiert um created_at zu behalten
16
+ const existing = await this.table.select({
17
+ columns: ["created_at"],
18
+ where: [{ column: "thread_id", is: threadId }],
19
+ first: true
20
+ });
21
+ // Behalte created_at wenn bereits vorhanden, sonst setze jetzt
22
+ const createdAt = existing?.created_at || now;
23
+ await this.table.upsert({
24
+ where: [{ column: "thread_id", is: threadId }],
25
+ upsert: {
26
+ checkpoint: checkpoint,
27
+ metadata: metadata,
28
+ created_at: createdAt,
29
+ updated_at: now
30
+ },
31
+ onConflict: "thread_id"
32
+ });
33
+ return config;
34
+ }
35
+ async get(config) {
36
+ const threadId = config.configurable?.thread_id || "default";
37
+ const data = await this.table.select({
38
+ columns: ["checkpoint"],
39
+ where: [{ column: "thread_id", is: threadId }],
40
+ first: true
41
+ });
42
+ return data?.checkpoint;
43
+ }
44
+ async *list(config, options) {
45
+ const threadId = config.configurable?.thread_id;
46
+ if (!threadId)
47
+ return;
48
+ const data = await this.table.select({
49
+ columns: ["checkpoint"],
50
+ where: [{ column: "thread_id", is: threadId }]
51
+ });
52
+ for (const row of data || []) {
53
+ yield [config, row.checkpoint];
54
+ }
55
+ }
56
+ async delete(config) {
57
+ const threadId = config.configurable?.thread_id || "default";
58
+ await this.table.delete({
59
+ where: [{ column: "thread_id", is: threadId }]
60
+ });
61
+ }
62
+ async getTuple(config) {
63
+ const checkpoint = await this.get(config);
64
+ if (!checkpoint)
65
+ return undefined;
66
+ return [config, checkpoint];
67
+ }
68
+ async putWrites(config, writes, taskId) {
69
+ for (const write of writes) {
70
+ const checkpoint = write.checkpoint;
71
+ const metadata = write.metadata;
72
+ await this.put(config, checkpoint, metadata);
73
+ }
74
+ }
75
+ async deleteThread(threadId) {
76
+ await this.table.delete({
77
+ where: [{ column: "thread_id", is: threadId }]
78
+ });
79
+ }
80
+ }
81
+ /**
82
+ * @example CONSTRUCTOR:
83
+ * constructor(
84
+ checkpointSaver: BaseCheckpointSaver,
85
+ {
86
+ messagesBeforeSummary = 12,
87
+ maxSummaries = 7,
88
+ llm = getLLM("groq"),
89
+ debug = false
90
+ }: SmartCheckpointSaverOptions = {}
91
+ ) {
92
+ super()
93
+ this.checkpointSaver = checkpointSaver
94
+ this.messagesBeforeSummary = messagesBeforeSummary
95
+ this.maxSummaries = maxSummaries
96
+ this.llm = llm
97
+ this.debug = debug
98
+ }
99
+ */
100
+ export class SmartCheckpointSaver extends BaseCheckpointSaver {
101
+ checkpointSaver;
102
+ messagesBeforeSummary;
103
+ maxSummaries;
104
+ llm;
105
+ debug;
106
+ constructor(checkpointSaver, { messagesBeforeSummary = 12, maxSummaries = 7, llm, debug = false }) {
107
+ super();
108
+ this.checkpointSaver = checkpointSaver;
109
+ this.messagesBeforeSummary = messagesBeforeSummary;
110
+ this.maxSummaries = maxSummaries;
111
+ this.llm = llm;
112
+ this.debug = debug;
113
+ }
114
+ /**
115
+ * Zählt User/AI Messages (ignoriert System-Messages)
116
+ */
117
+ countChatMessages(messages) {
118
+ return messages.filter(msg => msg instanceof HumanMessage || msg instanceof AIMessage).length;
119
+ }
120
+ /**
121
+ * Findet alle System-Messages die Zusammenfassungen sind
122
+ */
123
+ findSummaryMessages(messages) {
124
+ const summaries = [];
125
+ messages.forEach((msg, index) => {
126
+ if (msg instanceof SystemMessage &&
127
+ typeof msg.content === 'string' &&
128
+ msg.content.includes('Zusammenfassung')) {
129
+ summaries.push({ index, message: msg });
130
+ }
131
+ });
132
+ return summaries;
133
+ }
134
+ /**
135
+ * Konvertiert Messages zu Text für Summarization
136
+ */
137
+ messagesToText(messages) {
138
+ return messages.map(msg => {
139
+ const role = msg instanceof HumanMessage ? 'User'
140
+ : msg instanceof AIMessage ? 'Assistant'
141
+ : 'System';
142
+ const content = typeof msg.content === 'string'
143
+ ? msg.content
144
+ : JSON.stringify(msg.content);
145
+ return `${role}: ${content}`;
146
+ }).join('\n\n');
147
+ }
148
+ async applySmartSummarization(checkpoint) {
149
+ // Guard: Wenn checkpoint undefined ist, gib ihn zurück
150
+ if (!checkpoint) {
151
+ return checkpoint;
152
+ }
153
+ // Messages sind in channel_values gespeichert
154
+ const channelValues = checkpoint.channel_values || {};
155
+ const messages = channelValues.messages || [];
156
+ // Finde alle Zusammenfassungs-System-Messages
157
+ const summaryMessages = this.findSummaryMessages(messages);
158
+ // Finde den Index der letzten Zusammenfassung (falls vorhanden)
159
+ const lastSummaryIndex = summaryMessages.length > 0
160
+ ? summaryMessages[summaryMessages.length - 1].index
161
+ : -1;
162
+ // Finde die Messages NACH der letzten Zusammenfassung
163
+ const messagesAfterLastSummary = messages.slice(lastSummaryIndex + 1);
164
+ // Zähle nur User/AI Messages NACH der letzten Zusammenfassung
165
+ const chatMessageCount = this.countChatMessages(messagesAfterLastSummary);
166
+ // Wenn noch nicht genug Messages nach der letzten Zusammenfassung, keine Summarization
167
+ if (chatMessageCount < this.messagesBeforeSummary) {
168
+ return checkpoint;
169
+ }
170
+ // Finde die Indizes der letzten X User/AI Messages NACH der letzten Zusammenfassung die zusammengefasst werden sollen
171
+ const indicesToSummarize = [];
172
+ const messagesToSummarize = [];
173
+ let chatCount = 0;
174
+ // Gehe rückwärts durch Messages NACH der letzten Zusammenfassung
175
+ for (let i = messagesAfterLastSummary.length - 1; i >= 0 && chatCount < this.messagesBeforeSummary; i--) {
176
+ const msg = messagesAfterLastSummary[i];
177
+ if (msg instanceof HumanMessage || msg instanceof AIMessage) {
178
+ const originalIndex = lastSummaryIndex + 1 + i; // Original-Index im messages Array
179
+ indicesToSummarize.unshift(originalIndex); // Am Anfang einfügen für korrekte Reihenfolge
180
+ messagesToSummarize.unshift(msg); // Am Anfang einfügen für korrekte Reihenfolge
181
+ chatCount++;
182
+ }
183
+ }
184
+ if (messagesToSummarize.length === 0) {
185
+ return checkpoint;
186
+ }
187
+ // Erstelle Zusammenfassung
188
+ const conversationText = this.messagesToText(messagesToSummarize);
189
+ const summary = await summarize({
190
+ conversation: conversationText,
191
+ llm: this.llm,
192
+ maxWords: 150
193
+ });
194
+ if (this.debug) {
195
+ console.log(`Summary erstellt beim SmartCheckpointSaver: ${summary}`);
196
+ }
197
+ // Erstelle neue System-Message mit Zusammenfassung
198
+ const summarySystemMessage = new SystemMessage(`Zusammenfassung der vorherigen Konversation:\n${summary}`);
199
+ // Entferne die Messages die zusammengefasst wurden (verwende Indizes)
200
+ const remainingMessages = messages.filter((_, index) => !indicesToSummarize.includes(index));
201
+ // Finde die Position der letzten Zusammenfassung im remainingMessages Array
202
+ // (Die Indizes haben sich verschoben, aber die letzte Zusammenfassung sollte noch da sein)
203
+ const remainingSummaryMessages = this.findSummaryMessages(remainingMessages);
204
+ const lastSummaryIndexInRemaining = remainingSummaryMessages.length > 0
205
+ ? remainingSummaryMessages[remainingSummaryMessages.length - 1].index
206
+ : -1;
207
+ // Füge Zusammenfassung direkt nach der letzten Zusammenfassung ein
208
+ // Wenn keine Zusammenfassung vorhanden, füge am Anfang ein (nach System-Messages)
209
+ let newMessages;
210
+ if (lastSummaryIndexInRemaining >= 0) {
211
+ const beforeSummary = remainingMessages.slice(0, lastSummaryIndexInRemaining + 1);
212
+ const afterSummary = remainingMessages.slice(lastSummaryIndexInRemaining + 1);
213
+ newMessages = [...beforeSummary, summarySystemMessage, ...afterSummary];
214
+ }
215
+ else {
216
+ // Keine Zusammenfassung vorhanden: Füge nach System-Messages ein
217
+ const systemMessages = remainingMessages.filter((msg) => msg instanceof SystemMessage);
218
+ const nonSystemMessages = remainingMessages.filter((msg) => !(msg instanceof SystemMessage));
219
+ newMessages = [...systemMessages, summarySystemMessage, ...nonSystemMessages];
220
+ }
221
+ // Prüfe ob zu viele Zusammenfassungen vorhanden sind
222
+ const allSummaries = this.findSummaryMessages(newMessages);
223
+ if (allSummaries.length > this.maxSummaries) {
224
+ // Entferne die älteste Zusammenfassung
225
+ const oldestSummary = allSummaries[0];
226
+ const finalMessages = newMessages.filter((_, index) => index !== oldestSummary.index);
227
+ return {
228
+ ...checkpoint,
229
+ channel_values: {
230
+ ...channelValues,
231
+ messages: finalMessages
232
+ }
233
+ };
234
+ }
235
+ return {
236
+ ...checkpoint,
237
+ channel_values: {
238
+ ...channelValues,
239
+ messages: newMessages
240
+ }
241
+ };
242
+ }
243
+ async put(config, checkpoint, metadata, newVersions) {
244
+ // Guard: Wenn checkpoint undefined ist, gib ihn direkt weiter
245
+ if (!checkpoint) {
246
+ return await this.checkpointSaver.put(config, checkpoint, metadata, newVersions);
247
+ }
248
+ // Wende Smart Summarization an
249
+ const optimizedCheckpoint = await this.applySmartSummarization(checkpoint);
250
+ // Speichere im unterliegenden CheckpointSaver
251
+ return await this.checkpointSaver.put(config, optimizedCheckpoint, metadata, newVersions);
252
+ }
253
+ async get(config) {
254
+ return await this.checkpointSaver.get(config);
255
+ }
256
+ async *list(config, options) {
257
+ yield* this.checkpointSaver.list(config, options);
258
+ }
259
+ async delete(config) {
260
+ const threadId = config.configurable?.thread_id || "default";
261
+ return await this.checkpointSaver.deleteThread(threadId);
262
+ }
263
+ async getTuple(config) {
264
+ return await this.checkpointSaver.getTuple(config);
265
+ }
266
+ async putWrites(config, writes, taskId) {
267
+ // putWrites wird für Channel-Updates verwendet, nicht für vollständige Checkpoints
268
+ // Summarization wird nur in put() angewendet, wo vollständige Checkpoints gespeichert werden
269
+ // Daher delegieren wir direkt an den unterliegenden Saver
270
+ await this.checkpointSaver.putWrites(config, writes, taskId);
271
+ }
272
+ async deleteThread(threadId) {
273
+ return await this.checkpointSaver.deleteThread(threadId);
274
+ }
275
+ }
276
+ //# sourceMappingURL=memory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.js","sourceRoot":"","sources":["../src/memory.ts"],"names":[],"mappings":"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"}