@delofarag/ai-utils 1.4.2 → 1.5.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 (126) hide show
  1. package/README.md +354 -216
  2. package/dist/chatbot.d.ts +33 -0
  3. package/dist/chatbot.d.ts.map +1 -0
  4. package/dist/chatbot.js +72 -0
  5. package/dist/chatbot.js.map +1 -0
  6. package/dist/heart/agent.d.ts +1 -1
  7. package/dist/heart/agent.d.ts.map +1 -1
  8. package/dist/heart/agent.js +3 -8
  9. package/dist/heart/agent.js.map +1 -1
  10. package/dist/heart/chain.d.ts +1 -1
  11. package/dist/heart/chain.d.ts.map +1 -1
  12. package/dist/heart/chain.js +4 -4
  13. package/dist/heart/chain.js.map +1 -1
  14. package/dist/heart/chatbot.d.ts +1 -1
  15. package/dist/heart/memorychain.d.ts +2 -2
  16. package/dist/heart/memorychain.js +6 -6
  17. package/dist/heart/memorychain.js.map +1 -1
  18. package/dist/heart/tools/zodios/ZodiosToolRegistry.d.ts +1 -1
  19. package/dist/heart/tools/zodios/ZodiosToolRegistry.d.ts.map +1 -1
  20. package/dist/helpers/chatbot.d.ts +33 -0
  21. package/dist/helpers/chatbot.d.ts.map +1 -0
  22. package/dist/helpers/chatbot.js +72 -0
  23. package/dist/helpers/chatbot.js.map +1 -0
  24. package/dist/helpers/helpers.d.ts +25 -0
  25. package/dist/helpers/helpers.d.ts.map +1 -0
  26. package/dist/helpers/helpers.js +43 -0
  27. package/dist/helpers/helpers.js.map +1 -0
  28. package/dist/helpers/llms.d.ts +92 -0
  29. package/dist/helpers/llms.d.ts.map +1 -0
  30. package/dist/helpers/llms.js +49 -0
  31. package/dist/helpers/llms.js.map +1 -0
  32. package/dist/helpers/memory.d.ts +91 -0
  33. package/dist/helpers/memory.d.ts.map +1 -0
  34. package/dist/helpers/memory.js +351 -0
  35. package/dist/helpers/memory.js.map +1 -0
  36. package/dist/helpers/rag.d.ts +42 -0
  37. package/dist/helpers/rag.d.ts.map +1 -0
  38. package/dist/helpers/rag.js +66 -0
  39. package/dist/helpers/rag.js.map +1 -0
  40. package/dist/helpers.d.ts +3 -3
  41. package/dist/index.d.ts +10 -10
  42. package/dist/index.d.ts.map +1 -1
  43. package/dist/index.js +10 -10
  44. package/dist/index.js.map +1 -1
  45. package/dist/magic-funcs/answerers/ask.d.ts +18 -2
  46. package/dist/magic-funcs/answerers/ask.d.ts.map +1 -1
  47. package/dist/magic-funcs/answerers/ask.js +20 -9
  48. package/dist/magic-funcs/answerers/ask.js.map +1 -1
  49. package/dist/magic-funcs/answerers/websearch.d.ts +15 -0
  50. package/dist/magic-funcs/answerers/websearch.d.ts.map +1 -1
  51. package/dist/magic-funcs/answerers/websearch.js +15 -0
  52. package/dist/magic-funcs/answerers/websearch.js.map +1 -1
  53. package/dist/magic-funcs/evaluators/classify.d.ts +20 -1
  54. package/dist/magic-funcs/evaluators/classify.d.ts.map +1 -1
  55. package/dist/magic-funcs/evaluators/classify.js +22 -3
  56. package/dist/magic-funcs/evaluators/classify.js.map +1 -1
  57. package/dist/magic-funcs/evaluators/decide.d.ts +18 -0
  58. package/dist/magic-funcs/evaluators/decide.d.ts.map +1 -1
  59. package/dist/magic-funcs/evaluators/decide.js +21 -3
  60. package/dist/magic-funcs/evaluators/decide.js.map +1 -1
  61. package/dist/magic-funcs/optimizers/promptify.d.ts +18 -0
  62. package/dist/magic-funcs/optimizers/promptify.d.ts.map +1 -1
  63. package/dist/magic-funcs/optimizers/promptify.js +21 -3
  64. package/dist/magic-funcs/optimizers/promptify.js.map +1 -1
  65. package/dist/magic-funcs/optimizers/ragify.d.ts +16 -0
  66. package/dist/magic-funcs/optimizers/ragify.d.ts.map +1 -1
  67. package/dist/magic-funcs/optimizers/ragify.js +19 -3
  68. package/dist/magic-funcs/optimizers/ragify.js.map +1 -1
  69. package/dist/magic-funcs/parsers/extract.d.ts +23 -0
  70. package/dist/magic-funcs/parsers/extract.d.ts.map +1 -1
  71. package/dist/magic-funcs/parsers/extract.js +26 -3
  72. package/dist/magic-funcs/parsers/extract.js.map +1 -1
  73. package/dist/magic-funcs/parsers/rewrite.d.ts +19 -0
  74. package/dist/magic-funcs/parsers/rewrite.d.ts.map +1 -1
  75. package/dist/magic-funcs/parsers/rewrite.js +22 -2
  76. package/dist/magic-funcs/parsers/rewrite.js.map +1 -1
  77. package/dist/magic-funcs/parsers/structure.d.ts +22 -0
  78. package/dist/magic-funcs/parsers/structure.d.ts.map +1 -1
  79. package/dist/magic-funcs/parsers/structure.js +27 -4
  80. package/dist/magic-funcs/parsers/structure.js.map +1 -1
  81. package/dist/magic-funcs/parsers/summarize.d.ts +20 -0
  82. package/dist/magic-funcs/parsers/summarize.d.ts.map +1 -1
  83. package/dist/magic-funcs/parsers/summarize.js +23 -3
  84. package/dist/magic-funcs/parsers/summarize.js.map +1 -1
  85. package/dist/memory.d.ts +1 -1
  86. package/dist/modalities/image-gen/generateImages.d.ts +56 -0
  87. package/dist/modalities/image-gen/generateImages.d.ts.map +1 -0
  88. package/dist/modalities/image-gen/generateImages.js +66 -0
  89. package/dist/modalities/image-gen/generateImages.js.map +1 -0
  90. package/dist/modalities/image-gen/helpers.d.ts +15 -0
  91. package/dist/modalities/image-gen/helpers.d.ts.map +1 -0
  92. package/dist/modalities/image-gen/helpers.js +17 -0
  93. package/dist/modalities/image-gen/helpers.js.map +1 -0
  94. package/dist/modalities/openrouter.d.ts +11 -0
  95. package/dist/modalities/openrouter.d.ts.map +1 -0
  96. package/dist/modalities/openrouter.js +39 -0
  97. package/dist/modalities/openrouter.js.map +1 -0
  98. package/dist/modalities/speech/VoiceEngine.d.ts +3 -0
  99. package/dist/modalities/speech/VoiceEngine.d.ts.map +1 -0
  100. package/dist/modalities/speech/VoiceEngine.js +3 -0
  101. package/dist/modalities/speech/VoiceEngine.js.map +1 -0
  102. package/dist/modalities/speech/stt/helpers.d.ts +3 -0
  103. package/dist/modalities/speech/stt/helpers.d.ts.map +1 -0
  104. package/dist/modalities/speech/stt/helpers.js +28 -0
  105. package/dist/modalities/speech/stt/helpers.js.map +1 -0
  106. package/dist/modalities/speech/stt/stt.d.ts +113 -0
  107. package/dist/modalities/speech/stt/stt.d.ts.map +1 -0
  108. package/dist/modalities/speech/stt/stt.js +177 -0
  109. package/dist/modalities/speech/stt/stt.js.map +1 -0
  110. package/dist/modalities/speech/tts/helpers.d.ts +12 -0
  111. package/dist/modalities/speech/tts/helpers.d.ts.map +1 -0
  112. package/dist/modalities/speech/tts/helpers.js +10 -0
  113. package/dist/modalities/speech/tts/helpers.js.map +1 -0
  114. package/dist/modalities/speech/tts/tts.d.ts +115 -0
  115. package/dist/modalities/speech/tts/tts.d.ts.map +1 -0
  116. package/dist/modalities/speech/tts/tts.js +142 -0
  117. package/dist/modalities/speech/tts/tts.js.map +1 -0
  118. package/dist/modalities/vision/helpers.d.ts +3 -0
  119. package/dist/modalities/vision/helpers.d.ts.map +1 -0
  120. package/dist/modalities/vision/helpers.js +7 -0
  121. package/dist/modalities/vision/helpers.js.map +1 -0
  122. package/dist/modalities/vision/vision.d.ts +55 -0
  123. package/dist/modalities/vision/vision.d.ts.map +1 -0
  124. package/dist/modalities/vision/vision.js +71 -0
  125. package/dist/modalities/vision/vision.js.map +1 -0
  126. package/package.json +7 -7
@@ -0,0 +1,92 @@
1
+ import { ChatGroq, ChatOllama, ChatOpenAI } from "../imports";
2
+ export type Prettify<T> = {
3
+ [K in keyof T]: T[K];
4
+ } & {};
5
+ export type AutoComplete<T extends string> = T | (string & {});
6
+ /** Groq Cloud Chat-Completions (https://console.groq.com/docs/models): Production, Compound, Preview. */
7
+ export type ChatGroqModel = AutoComplete<"groq/compound" | "groq/compound-mini" | "llama-3.1-8b-instant" | "llama-3.3-70b-versatile" | "meta-llama/llama-4-scout-17b-16e-instruct" | "openai/gpt-oss-120b" | "openai/gpt-oss-20b" | "openai/gpt-oss-safeguard-20b" | "qwen/qwen3-32b">;
8
+ /** Groq Vision docs: https://console.groq.com/docs/vision */
9
+ export type ChatGroqVisionModel = AutoComplete<"meta-llama/llama-4-scout-17b-16e-instruct" | "meta-llama/llama-4-maverick-17b-128e-instruct">;
10
+ /** Groq TTS docs: https://console.groq.com/docs/text-to-speech */
11
+ export type ChatGroqTTSModel = AutoComplete<"canopylabs/orpheus-v1-english" | "canopylabs/orpheus-arabic-saudi">;
12
+ /** Groq STT docs: https://console.groq.com/docs/speech-to-text */
13
+ export type ChatGroqSTTModel = AutoComplete<"whisper-large-v3" | "whisper-large-v3-turbo">;
14
+ /** OpenRouter öffentliche /api/v1/models (2026-04): GPT ≥4.1, Claude 4.x, Gemini ≥2.5, gängige Open-Weight-IDs. */
15
+ export type OpenRouterModel = AutoComplete<"anthropic/claude-haiku-4.5" | "anthropic/claude-opus-4" | "anthropic/claude-opus-4.1" | "anthropic/claude-opus-4.5" | "anthropic/claude-opus-4.6" | "anthropic/claude-opus-4.6-fast" | "anthropic/claude-opus-4.7" | "anthropic/claude-sonnet-4" | "anthropic/claude-sonnet-4.5" | "anthropic/claude-sonnet-4.6" | "arcee-ai/trinity-large-preview:free" | "arcee-ai/trinity-large-thinking" | "arcee-ai/trinity-mini" | "bytedance-seed/seed-2.0-lite" | "bytedance-seed/seed-2.0-mini" | "deepseek/deepseek-r1" | "deepseek/deepseek-r1-0528" | "deepseek/deepseek-r1-distill-llama-70b" | "deepseek/deepseek-r1-distill-qwen-32b" | "deepseek/deepseek-v3.1-terminus" | "deepseek/deepseek-v3.2" | "deepseek/deepseek-v3.2-exp" | "deepseek/deepseek-v3.2-speciale" | "google/gemini-2.5-flash" | "google/gemini-2.5-flash-image" | "google/gemini-2.5-flash-lite" | "google/gemini-2.5-flash-lite-preview-09-2025" | "google/gemini-2.5-pro" | "google/gemini-2.5-pro-preview" | "google/gemini-2.5-pro-preview-05-06" | "google/gemini-3-flash-preview" | "google/gemini-3-pro-image-preview" | "google/gemini-3.1-flash-image-preview" | "google/gemini-3.1-flash-lite-preview" | "google/gemini-3.1-pro-preview" | "google/gemini-3.1-pro-preview-customtools" | "google/gemma-4-26b-a4b-it" | "google/gemma-4-26b-a4b-it:free" | "google/gemma-4-31b-it" | "google/gemma-4-31b-it:free" | "inception/mercury-2" | "liquid/lfm-2-24b-a2b" | "liquid/lfm-2.5-1.2b-instruct:free" | "liquid/lfm-2.5-1.2b-thinking:free" | "meta-llama/llama-3.3-70b-instruct" | "meta-llama/llama-3.3-70b-instruct:free" | "meta-llama/llama-4-maverick" | "meta-llama/llama-4-scout" | "meta-llama/llama-guard-4-12b" | "minimax/minimax-m2" | "minimax/minimax-m2-her" | "minimax/minimax-m2.1" | "minimax/minimax-m2.5" | "minimax/minimax-m2.5:free" | "minimax/minimax-m2.7" | "mistralai/devstral-2512" | "mistralai/devstral-medium" | "mistralai/devstral-small" | "mistralai/mistral-large-2512" | "mistralai/mistral-small-2603" | "moonshotai/kimi-k2" | "moonshotai/kimi-k2-0905" | "moonshotai/kimi-k2-thinking" | "moonshotai/kimi-k2.5" | "nvidia/nemotron-3-nano-30b-a3b" | "nvidia/nemotron-3-nano-30b-a3b:free" | "nvidia/nemotron-3-super-120b-a12b" | "nvidia/nemotron-3-super-120b-a12b:free" | "openai/gpt-4.1" | "openai/gpt-4.1-mini" | "openai/gpt-4.1-nano" | "openai/gpt-5" | "openai/gpt-5-chat" | "openai/gpt-5-codex" | "openai/gpt-5-image" | "openai/gpt-5-image-mini" | "openai/gpt-5-mini" | "openai/gpt-5-nano" | "openai/gpt-5-pro" | "openai/gpt-5.1" | "openai/gpt-5.1-chat" | "openai/gpt-5.1-codex" | "openai/gpt-5.1-codex-max" | "openai/gpt-5.1-codex-mini" | "openai/gpt-5.2" | "openai/gpt-5.2-chat" | "openai/gpt-5.2-codex" | "openai/gpt-5.2-pro" | "openai/gpt-5.3-chat" | "openai/gpt-5.3-codex" | "openai/gpt-5.4" | "openai/gpt-5.4-mini" | "openai/gpt-5.4-nano" | "openai/gpt-5.4-pro" | "openai/gpt-oss-120b" | "openai/gpt-oss-120b:free" | "openai/gpt-oss-20b" | "openai/gpt-oss-20b:free" | "openai/gpt-oss-safeguard-20b" | "qwen/qwen3-coder" | "qwen/qwen3-coder-30b-a3b-instruct" | "qwen/qwen3-coder-flash" | "qwen/qwen3-coder-next" | "qwen/qwen3-coder-plus" | "qwen/qwen3-coder:free" | "qwen/qwen3-max" | "qwen/qwen3-max-thinking" | "qwen/qwen3.5-122b-a10b" | "qwen/qwen3.5-27b" | "qwen/qwen3.5-35b-a3b" | "qwen/qwen3.5-397b-a17b" | "qwen/qwen3.5-9b" | "qwen/qwen3.5-flash-02-23" | "qwen/qwen3.5-plus-02-15" | "qwen/qwen3.6-plus" | "rekaai/reka-edge" | "xiaomi/mimo-v2-flash" | "xiaomi/mimo-v2-omni" | "xiaomi/mimo-v2-pro" | "z-ai/glm-5" | "z-ai/glm-5-turbo" | "z-ai/glm-5.1" | "z-ai/glm-5v-turbo">;
16
+ /** Viele OpenRouter Chat-Modelle sind vision-fähig; deshalb bewusst auf bestehende Chat-Union vereinfacht. */
17
+ export type OpenRouterVisionModel = OpenRouterModel;
18
+ /** OpenRouter TTS models via `output_modalities=speech` (2026-04). */
19
+ export type OpenRouterTTSModel = AutoComplete<"canopylabs/orpheus-3b-0.1-ft" | "google/gemini-3.1-flash-tts-preview" | "hexgrad/kokoro-82m" | "mistralai/voxtral-mini-tts-2603" | "openai/gpt-4o-mini-tts-2025-12-15" | "sesame/csm-1b" | "zyphra/zonos-v0.1-hybrid" | "zyphra/zonos-v0.1-transformer">;
20
+ /** OpenRouter audio-input models for transcription/STT flows (2026-04). */
21
+ export type OpenRouterSTTModel = AutoComplete<"google/gemini-2.0-flash-001" | "google/gemini-2.0-flash-lite-001" | "google/gemini-2.5-flash" | "google/gemini-2.5-flash-lite" | "google/gemini-2.5-flash-lite-preview-09-2025" | "google/gemini-2.5-pro" | "google/gemini-2.5-pro-preview" | "google/gemini-2.5-pro-preview-05-06" | "google/gemini-3-flash-preview" | "google/gemini-3.1-flash-lite-preview" | "google/gemini-3.1-pro-preview" | "google/gemini-3.1-pro-preview-customtools" | "mistralai/voxtral-small-24b-2507" | "openai/gpt-4o-audio-preview" | "openai/gpt-audio" | "openai/gpt-audio-mini" | "openrouter/auto" | "xiaomi/mimo-v2-omni" | "xiaomi/mimo-v2.5">;
22
+ /** OpenRouter image-generation models via `output_modalities=image` (2026-04). */
23
+ export type OpenRouterImageGenModel = AutoComplete<"black-forest-labs/flux.2-flex" | "black-forest-labs/flux.2-klein-4b" | "black-forest-labs/flux.2-max" | "black-forest-labs/flux.2-pro" | "bytedance-seed/seedream-4.5" | "google/gemini-2.5-flash-image" | "google/gemini-3-pro-image-preview" | "google/gemini-3.1-flash-image-preview" | "openai/gpt-5-image" | "openai/gpt-5-image-mini" | "openai/gpt-5.4-image-2" | "openrouter/auto" | "sourceful/riverflow-v2-fast" | "sourceful/riverflow-v2-fast-preview" | "sourceful/riverflow-v2-max-preview" | "sourceful/riverflow-v2-pro" | "sourceful/riverflow-v2-standard-preview">;
24
+ export type LocalModel = AutoComplete<"llama3.2:3b">;
25
+ export type LLMModelSpecification = "vision" | "image-gen" | "stt" | "tts";
26
+ type GroqLLMConfig = {
27
+ provider: "chatgroq";
28
+ type?: undefined;
29
+ model?: ChatGroqModel;
30
+ apikey?: string;
31
+ } | {
32
+ provider: "chatgroq";
33
+ type: "vision";
34
+ model?: ChatGroqVisionModel;
35
+ apikey?: string;
36
+ } | {
37
+ provider: "chatgroq";
38
+ type: "stt";
39
+ model?: ChatGroqSTTModel;
40
+ apikey?: string;
41
+ } | {
42
+ provider: "chatgroq";
43
+ type: "tts";
44
+ model?: ChatGroqTTSModel;
45
+ apikey?: string;
46
+ };
47
+ type OpenRouterLLMConfig = {
48
+ provider: "openrouter";
49
+ type?: undefined;
50
+ model?: OpenRouterModel;
51
+ apikey?: string;
52
+ } | {
53
+ provider: "openrouter";
54
+ type: "vision";
55
+ model?: OpenRouterVisionModel;
56
+ apikey?: string;
57
+ } | {
58
+ provider: "openrouter";
59
+ type: "stt";
60
+ model?: OpenRouterSTTModel;
61
+ apikey?: string;
62
+ } | {
63
+ provider: "openrouter";
64
+ type: "tts";
65
+ model?: OpenRouterTTSModel;
66
+ apikey?: string;
67
+ } | {
68
+ provider: "openrouter";
69
+ type: "image-gen";
70
+ model?: OpenRouterImageGenModel;
71
+ apikey?: string;
72
+ };
73
+ type LocalLLMConfig = {
74
+ provider: "local";
75
+ type?: undefined;
76
+ model?: LocalModel;
77
+ };
78
+ export type LLMConfig = GroqLLMConfig | OpenRouterLLMConfig | LocalLLMConfig;
79
+ /**
80
+ * env-var for openrouter: process.env.OPENROUTER_API_KEY
81
+ *
82
+ * env-var for chatgroq: process.env.CHATGROQ_API_KEY
83
+ *
84
+ * default llm for chatgroq: "llama-3.3-70b-versatile"
85
+ *
86
+ * default llm for openrouter: "openai/gpt-5.4-mini"
87
+ *
88
+ * default llm for local: "llama3.2:3b"
89
+ */
90
+ export declare function getLLM(config: LLMConfig): ChatGroq | ChatOpenAI<import("@langchain/openai").ChatOpenAICallOptions> | ChatOllama;
91
+ export {};
92
+ //# sourceMappingURL=llms.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llms.d.ts","sourceRoot":"","sources":["../../src/helpers/llms.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ import { ChatGroq, ChatOllama, ChatOpenAI } from "../imports";
2
+ /**
3
+ * env-var for openrouter: process.env.OPENROUTER_API_KEY
4
+ *
5
+ * env-var for chatgroq: process.env.CHATGROQ_API_KEY
6
+ *
7
+ * default llm for chatgroq: "llama-3.3-70b-versatile"
8
+ *
9
+ * default llm for openrouter: "openai/gpt-5.4-mini"
10
+ *
11
+ * default llm for local: "llama3.2:3b"
12
+ */
13
+ export function getLLM(config) {
14
+ const type = config.type;
15
+ switch (config.provider) {
16
+ case "chatgroq":
17
+ return new ChatGroq({
18
+ apiKey: config.apikey ?? process.env.CHATGROQ_API_KEY,
19
+ model: config.model ?? (type === "vision"
20
+ ? "meta-llama/llama-4-scout-17b-16e-instruct"
21
+ : type === "stt"
22
+ ? "whisper-large-v3-turbo"
23
+ : type === "tts"
24
+ ? "canopylabs/orpheus-v1-english"
25
+ : "llama-3.3-70b-versatile")
26
+ });
27
+ case "openrouter":
28
+ return new ChatOpenAI({
29
+ apiKey: config.apikey ?? process.env.OPENROUTER_API_KEY,
30
+ configuration: {
31
+ baseURL: "https://openrouter.ai/api/v1",
32
+ },
33
+ model: config.model ?? (type === "image-gen"
34
+ ? "google/gemini-3.1-flash-image-preview"
35
+ : type === "stt"
36
+ ? "google/gemini-2.5-flash"
37
+ : type === "tts"
38
+ ? "openai/gpt-4o-mini-tts-2025-12-15"
39
+ : "openai/gpt-5.4-mini")
40
+ });
41
+ case "local":
42
+ return new ChatOllama({
43
+ model: config.model ?? "llama3.2:3b"
44
+ });
45
+ default:
46
+ throw new Error("Unknown LLM provider");
47
+ }
48
+ }
49
+ //# sourceMappingURL=llms.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llms.js","sourceRoot":"","sources":["../../src/helpers/llms.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAyP5D;;;;;;;;;;GAUG;AACL,MAAM,UAAU,MAAM,CAAC,MAAiB;IACtC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAA;IAExB,QAAQ,MAAM,CAAC,QAAQ,EAAE,CAAC;QACxB,KAAK,UAAU;YACb,OAAO,IAAI,QAAQ,CAAC;gBAClB,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB;gBACrD,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,CACrB,IAAI,KAAK,QAAQ;oBACf,CAAC,CAAC,2CAA2C;oBAC7C,CAAC,CAAC,IAAI,KAAK,KAAK;wBACd,CAAC,CAAC,wBAAwB;wBAC1B,CAAC,CAAC,IAAI,KAAK,KAAK;4BACd,CAAC,CAAC,+BAA+B;4BACjC,CAAC,CAAC,yBAAyB,CAClC;aACF,CAAC,CAAC;QAEL,KAAK,YAAY;YACf,OAAO,IAAI,UAAU,CAAC;gBACpB,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB;gBACvD,aAAa,EAAE;oBACX,OAAO,EAAE,8BAA8B;iBAC1C;gBACD,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,CACrB,IAAI,KAAK,WAAW;oBAClB,CAAC,CAAC,uCAAuC;oBACzC,CAAC,CAAC,IAAI,KAAK,KAAK;wBACd,CAAC,CAAC,yBAAyB;wBAC3B,CAAC,CAAC,IAAI,KAAK,KAAK;4BACd,CAAC,CAAC,mCAAmC;4BACrC,CAAC,CAAC,qBAAqB,CAC9B;aACF,CAAC,CAAC;QAEL,KAAK,OAAO;YACV,OAAO,IAAI,UAAU,CAAC;gBACpB,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,aAAa;aACrC,CAAC,CAAC;QAEL;YACE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAC5C,CAAC;AACH,CAAC"}
@@ -0,0 +1,91 @@
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
+ export interface SupabaseCheckpointRow {
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<SupabaseCheckpointRow>);
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
+ * CONSTRUCTOR:
32
+ * @example
33
+ * constructor(
34
+ checkpointSaver: BaseCheckpointSaver,
35
+ {
36
+ messagesBeforeSummary = 12,
37
+ maxSummaries = 7,
38
+ llm = getLLM({ provider:"openrouter", model: "openai/gpt-5.4-mini"}),
39
+ debug = false
40
+ }: SmartCheckpointSaverOptions = {}
41
+ ) {
42
+ super()
43
+ this.checkpointSaver = checkpointSaver
44
+ this.messagesBeforeSummary = messagesBeforeSummary
45
+ this.maxSummaries = maxSummaries
46
+ this.llm = llm
47
+ this.debug = debug
48
+ }
49
+ */
50
+ export declare class SmartCheckpointSaver extends BaseCheckpointSaver {
51
+ private checkpointSaver;
52
+ private messagesBeforeSummary;
53
+ private maxSummaries;
54
+ private llm;
55
+ private debug;
56
+ private lastDebugState;
57
+ constructor(checkpointSaver: BaseCheckpointSaver, { messagesBeforeSummary, maxSummaries, llm, debug }?: SmartCheckpointSaverOptions);
58
+ private getMessageRole;
59
+ private getMessageContent;
60
+ /**
61
+ * Zählt User/AI Messages (ignoriert System-Messages)
62
+ */
63
+ private countChatMessages;
64
+ /**
65
+ * Findet alle System-Messages die Zusammenfassungen sind
66
+ */
67
+ private findSummaryMessages;
68
+ /**
69
+ * Konvertiert Messages zu Text für Summarization
70
+ */
71
+ private messagesToText;
72
+ private applySmartSummarization;
73
+ put(config: LangGraphRunnableConfig, checkpoint: Checkpoint, metadata: CheckpointMetadata, newVersions: ChannelVersions): Promise<RunnableConfig>;
74
+ get(config: LangGraphRunnableConfig): Promise<Checkpoint | undefined>;
75
+ list(config: LangGraphRunnableConfig, options?: CheckpointListOptions): AsyncGenerator<CheckpointTuple>;
76
+ delete(config: LangGraphRunnableConfig): Promise<void>;
77
+ getTuple(config: LangGraphRunnableConfig): Promise<CheckpointTuple | undefined>;
78
+ putWrites(config: RunnableConfig, writes: PendingWrite[], taskId: string): Promise<void>;
79
+ deleteThread(threadId: string): Promise<void>;
80
+ }
81
+ /**
82
+ * fasst eine Chat-Konversation zwischen User und Assistant zusammen
83
+ */
84
+ export declare function chatSummarizer({ conversation, fokuss, llm, maxWords }: {
85
+ conversation: string;
86
+ fokuss?: string;
87
+ llm: BaseChatModel;
88
+ maxWords?: number;
89
+ }): Promise<string>;
90
+ export {};
91
+ //# sourceMappingURL=memory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../src/helpers/memory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,351 @@
1
+ import { createSimpleChain } from "./helpers";
2
+ import { getLLM } from "./llms";
3
+ import { BaseCheckpointSaver, HumanMessage, AIMessage, SystemMessage, StringOutputParser, ChatPromptTemplate } from "../imports";
4
+ /**
5
+ * needs testing!!!
6
+ */
7
+ export class SupabaseCheckpointSaver extends BaseCheckpointSaver {
8
+ table;
9
+ constructor(supabaseTable) {
10
+ super();
11
+ this.table = supabaseTable;
12
+ }
13
+ async put(config, checkpoint, metadata) {
14
+ const threadId = config.configurable?.thread_id || "default";
15
+ const now = new Date().toISOString();
16
+ // Prüfe ob Checkpoint bereits existiert um created_at zu behalten
17
+ const existingRows = await this.table.select({
18
+ columns: ["created_at"],
19
+ where: [{ column: "thread_id", is: threadId }],
20
+ limited_to: 1,
21
+ });
22
+ const existing = existingRows[0];
23
+ // Behalte created_at wenn bereits vorhanden, sonst setze jetzt
24
+ const createdAt = existing?.created_at || now;
25
+ await this.table.upsert({
26
+ where: [{ column: "thread_id", is: threadId }],
27
+ upsert: {
28
+ checkpoint: checkpoint,
29
+ metadata: metadata,
30
+ created_at: createdAt,
31
+ updated_at: now
32
+ },
33
+ onConflict: "thread_id"
34
+ });
35
+ return config;
36
+ }
37
+ async get(config) {
38
+ const threadId = config.configurable?.thread_id || "default";
39
+ const rows = await this.table.select({
40
+ columns: ["checkpoint"],
41
+ where: [{ column: "thread_id", is: threadId }],
42
+ limited_to: 1,
43
+ });
44
+ return rows[0]?.checkpoint;
45
+ }
46
+ async *list(config, options) {
47
+ const threadId = config.configurable?.thread_id;
48
+ if (!threadId)
49
+ return;
50
+ const data = await this.table.select({
51
+ columns: ["checkpoint"],
52
+ where: [{ column: "thread_id", is: threadId }]
53
+ });
54
+ for (const row of data || []) {
55
+ yield [config, row.checkpoint];
56
+ }
57
+ }
58
+ async delete(config) {
59
+ const threadId = config.configurable?.thread_id || "default";
60
+ await this.table.delete({
61
+ where: [{ column: "thread_id", is: threadId }]
62
+ });
63
+ }
64
+ async getTuple(config) {
65
+ const checkpoint = await this.get(config);
66
+ if (!checkpoint)
67
+ return undefined;
68
+ return [config, checkpoint];
69
+ }
70
+ async putWrites(config, writes, taskId) {
71
+ for (const write of writes) {
72
+ const checkpoint = write.checkpoint;
73
+ const metadata = write.metadata;
74
+ await this.put(config, checkpoint, metadata);
75
+ }
76
+ }
77
+ async deleteThread(threadId) {
78
+ await this.table.delete({
79
+ where: [{ column: "thread_id", is: threadId }]
80
+ });
81
+ }
82
+ }
83
+ /**
84
+ * CONSTRUCTOR:
85
+ * @example
86
+ * constructor(
87
+ checkpointSaver: BaseCheckpointSaver,
88
+ {
89
+ messagesBeforeSummary = 12,
90
+ maxSummaries = 7,
91
+ llm = getLLM({ provider:"openrouter", model: "openai/gpt-5.4-mini"}),
92
+ debug = false
93
+ }: SmartCheckpointSaverOptions = {}
94
+ ) {
95
+ super()
96
+ this.checkpointSaver = checkpointSaver
97
+ this.messagesBeforeSummary = messagesBeforeSummary
98
+ this.maxSummaries = maxSummaries
99
+ this.llm = llm
100
+ this.debug = debug
101
+ }
102
+ */
103
+ export class SmartCheckpointSaver extends BaseCheckpointSaver {
104
+ checkpointSaver;
105
+ messagesBeforeSummary;
106
+ maxSummaries;
107
+ llm;
108
+ debug;
109
+ lastDebugState;
110
+ constructor(checkpointSaver, { messagesBeforeSummary = 12, maxSummaries = 7, llm = getLLM({ provider: "openrouter", model: "openai/gpt-5.4-mini" }), debug = false } = {}) {
111
+ super();
112
+ this.checkpointSaver = checkpointSaver;
113
+ this.messagesBeforeSummary = messagesBeforeSummary;
114
+ this.maxSummaries = maxSummaries;
115
+ this.llm = llm;
116
+ this.debug = debug;
117
+ }
118
+ getMessageRole(message) {
119
+ if (message instanceof HumanMessage)
120
+ return "human";
121
+ if (message instanceof AIMessage)
122
+ return "ai";
123
+ if (message instanceof SystemMessage)
124
+ return "system";
125
+ const rawMessage = message;
126
+ const type = typeof rawMessage._getType === "function" ? rawMessage._getType() : rawMessage._getType;
127
+ if (type === "human" || type === "user")
128
+ return "human";
129
+ if (type === "ai" || type === "assistant")
130
+ return "ai";
131
+ if (type === "system")
132
+ return "system";
133
+ const id = rawMessage.id?.[rawMessage.id.length - 1];
134
+ if (id === "HumanMessage")
135
+ return "human";
136
+ if (id === "AIMessage" || id === "AIMessageChunk")
137
+ return "ai";
138
+ if (id === "SystemMessage")
139
+ return "system";
140
+ const role = rawMessage.role ?? rawMessage.kwargs?.role;
141
+ if (role === "human" || role === "user")
142
+ return "human";
143
+ if (role === "ai" || role === "assistant")
144
+ return "ai";
145
+ if (role === "system")
146
+ return "system";
147
+ return "other";
148
+ }
149
+ getMessageContent(message) {
150
+ const rawContent = message.content ?? message.kwargs?.content ?? "";
151
+ return typeof rawContent === "string" ? rawContent : JSON.stringify(rawContent);
152
+ }
153
+ /**
154
+ * Zählt User/AI Messages (ignoriert System-Messages)
155
+ */
156
+ countChatMessages(messages) {
157
+ return messages.filter(msg => {
158
+ const role = this.getMessageRole(msg);
159
+ return role === "human" || role === "ai";
160
+ }).length;
161
+ }
162
+ /**
163
+ * Findet alle System-Messages die Zusammenfassungen sind
164
+ */
165
+ findSummaryMessages(messages) {
166
+ const summaries = [];
167
+ messages.forEach((msg, index) => {
168
+ if (this.getMessageRole(msg) === "system" && this.getMessageContent(msg).includes("Zusammenfassung")) {
169
+ summaries.push({ index, message: msg });
170
+ }
171
+ });
172
+ return summaries;
173
+ }
174
+ /**
175
+ * Konvertiert Messages zu Text für Summarization
176
+ */
177
+ messagesToText(messages) {
178
+ return messages.map(msg => {
179
+ const role = this.getMessageRole(msg);
180
+ const label = role === "human" ? "User" : role === "ai" ? "Assistant" : "System";
181
+ return `${label}: ${this.getMessageContent(msg)}`;
182
+ }).join('\n\n');
183
+ }
184
+ async applySmartSummarization(checkpoint) {
185
+ // Guard: Wenn checkpoint undefined ist, gib ihn zurück
186
+ if (!checkpoint) {
187
+ return checkpoint;
188
+ }
189
+ // Messages sind in channel_values gespeichert
190
+ const channelValues = checkpoint.channel_values || {};
191
+ const messages = channelValues.messages || [];
192
+ // Finde alle Zusammenfassungs-System-Messages
193
+ const summaryMessages = this.findSummaryMessages(messages);
194
+ // Finde den Index der letzten Zusammenfassung (falls vorhanden)
195
+ const lastSummaryIndex = summaryMessages.length > 0
196
+ ? summaryMessages[summaryMessages.length - 1].index
197
+ : -1;
198
+ // Finde die Messages NACH der letzten Zusammenfassung
199
+ const messagesAfterLastSummary = messages.slice(lastSummaryIndex + 1);
200
+ const chatMessagesAfterLastSummary = messagesAfterLastSummary.filter(msg => {
201
+ const role = this.getMessageRole(msg);
202
+ return role === "human" || role === "ai";
203
+ });
204
+ const lastChatMessageRole = chatMessagesAfterLastSummary.length > 0
205
+ ? this.getMessageRole(chatMessagesAfterLastSummary[chatMessagesAfterLastSummary.length - 1])
206
+ : "other";
207
+ // Zähle nur User/AI Messages NACH der letzten Zusammenfassung
208
+ const chatMessageCount = chatMessagesAfterLastSummary.length;
209
+ if (this.debug) {
210
+ const missingUntilNextSummary = Math.max(0, this.messagesBeforeSummary - chatMessageCount);
211
+ const debugState = `${summaryMessages.length}:${chatMessageCount}:${missingUntilNextSummary}:${lastChatMessageRole}`;
212
+ if (debugState !== this.lastDebugState) {
213
+ console.log(`[SmartCheckpointSaver] Chat messages since last summary: ${chatMessageCount}`);
214
+ console.log(`[SmartCheckpointSaver] Messages until next summary: ${missingUntilNextSummary}`);
215
+ this.lastDebugState = debugState;
216
+ }
217
+ }
218
+ // Wenn noch nicht genug Messages nach der letzten Zusammenfassung, keine Summarization
219
+ if (chatMessageCount < this.messagesBeforeSummary || lastChatMessageRole !== "ai") {
220
+ return checkpoint;
221
+ }
222
+ // Finde die Indizes der letzten X User/AI Messages NACH der letzten Zusammenfassung die zusammengefasst werden sollen
223
+ const indicesToSummarize = [];
224
+ const messagesToSummarize = [];
225
+ let chatCount = 0;
226
+ // Gehe rückwärts durch Messages NACH der letzten Zusammenfassung
227
+ for (let i = messagesAfterLastSummary.length - 1; i >= 0 && chatCount < this.messagesBeforeSummary; i--) {
228
+ const msg = messagesAfterLastSummary[i];
229
+ const role = this.getMessageRole(msg);
230
+ if (role === "human" || role === "ai") {
231
+ const originalIndex = lastSummaryIndex + 1 + i; // Original-Index im messages Array
232
+ indicesToSummarize.unshift(originalIndex); // Am Anfang einfügen für korrekte Reihenfolge
233
+ messagesToSummarize.unshift(msg); // Am Anfang einfügen für korrekte Reihenfolge
234
+ chatCount++;
235
+ }
236
+ }
237
+ if (messagesToSummarize.length === 0) {
238
+ return checkpoint;
239
+ }
240
+ // Erstelle Zusammenfassung
241
+ const conversationText = this.messagesToText(messagesToSummarize);
242
+ const summary = await chatSummarizer({
243
+ conversation: conversationText,
244
+ llm: this.llm,
245
+ maxWords: 150
246
+ });
247
+ if (this.debug) {
248
+ console.log(`Summary erstellt beim SmartCheckpointSaver: ${summary}`);
249
+ }
250
+ // Erstelle neue System-Message mit Zusammenfassung
251
+ const summarySystemMessage = new SystemMessage(`Zusammenfassung der vorherigen Konversation:\n${summary}`);
252
+ // Entferne die Messages die zusammengefasst wurden (verwende Indizes)
253
+ const remainingMessages = messages.filter((_, index) => !indicesToSummarize.includes(index));
254
+ // Finde die Position der letzten Zusammenfassung im remainingMessages Array
255
+ // (Die Indizes haben sich verschoben, aber die letzte Zusammenfassung sollte noch da sein)
256
+ const remainingSummaryMessages = this.findSummaryMessages(remainingMessages);
257
+ const lastSummaryIndexInRemaining = remainingSummaryMessages.length > 0
258
+ ? remainingSummaryMessages[remainingSummaryMessages.length - 1].index
259
+ : -1;
260
+ // Füge Zusammenfassung direkt nach der letzten Zusammenfassung ein
261
+ // Wenn keine Zusammenfassung vorhanden, füge am Anfang ein (nach System-Messages)
262
+ let newMessages;
263
+ if (lastSummaryIndexInRemaining >= 0) {
264
+ const beforeSummary = remainingMessages.slice(0, lastSummaryIndexInRemaining + 1);
265
+ const afterSummary = remainingMessages.slice(lastSummaryIndexInRemaining + 1);
266
+ newMessages = [...beforeSummary, summarySystemMessage, ...afterSummary];
267
+ }
268
+ else {
269
+ // Keine Zusammenfassung vorhanden: Füge nach System-Messages ein
270
+ const systemMessages = remainingMessages.filter((msg) => this.getMessageRole(msg) === "system");
271
+ const nonSystemMessages = remainingMessages.filter((msg) => this.getMessageRole(msg) !== "system");
272
+ newMessages = [...systemMessages, summarySystemMessage, ...nonSystemMessages];
273
+ }
274
+ // Prüfe ob zu viele Zusammenfassungen vorhanden sind
275
+ const allSummaries = this.findSummaryMessages(newMessages);
276
+ if (allSummaries.length > this.maxSummaries) {
277
+ // Entferne die älteste Zusammenfassung
278
+ const oldestSummary = allSummaries[0];
279
+ const finalMessages = newMessages.filter((_, index) => index !== oldestSummary.index);
280
+ return {
281
+ ...checkpoint,
282
+ channel_values: {
283
+ ...channelValues,
284
+ messages: finalMessages
285
+ }
286
+ };
287
+ }
288
+ return {
289
+ ...checkpoint,
290
+ channel_values: {
291
+ ...channelValues,
292
+ messages: newMessages
293
+ }
294
+ };
295
+ }
296
+ async put(config, checkpoint, metadata, newVersions) {
297
+ // Guard: Wenn checkpoint undefined ist, gib ihn direkt weiter
298
+ if (!checkpoint) {
299
+ return await this.checkpointSaver.put(config, checkpoint, metadata, newVersions);
300
+ }
301
+ // Wende Smart Summarization an
302
+ const optimizedCheckpoint = await this.applySmartSummarization(checkpoint);
303
+ // Speichere im unterliegenden CheckpointSaver
304
+ return await this.checkpointSaver.put(config, optimizedCheckpoint, metadata, newVersions);
305
+ }
306
+ async get(config) {
307
+ return await this.checkpointSaver.get(config);
308
+ }
309
+ async *list(config, options) {
310
+ yield* this.checkpointSaver.list(config, options);
311
+ }
312
+ async delete(config) {
313
+ const threadId = config.configurable?.thread_id || "default";
314
+ return await this.checkpointSaver.deleteThread(threadId);
315
+ }
316
+ async getTuple(config) {
317
+ return await this.checkpointSaver.getTuple(config);
318
+ }
319
+ async putWrites(config, writes, taskId) {
320
+ // putWrites wird für Channel-Updates verwendet, nicht für vollständige Checkpoints
321
+ // Summarization wird nur in put() angewendet, wo vollständige Checkpoints gespeichert werden
322
+ // Daher delegieren wir direkt an den unterliegenden Saver
323
+ await this.checkpointSaver.putWrites(config, writes, taskId);
324
+ }
325
+ async deleteThread(threadId) {
326
+ return await this.checkpointSaver.deleteThread(threadId);
327
+ }
328
+ }
329
+ /**
330
+ * fasst eine Chat-Konversation zwischen User und Assistant zusammen
331
+ */
332
+ export async function chatSummarizer({ conversation, fokuss, llm, maxWords = 150 }) {
333
+ const focusMessage = fokuss
334
+ ? [["system", `Fokussiere dich besonders auf die folgenden Themen:\n${fokuss}`]]
335
+ : [];
336
+ const prompt = ChatPromptTemplate.fromMessages([
337
+ ["system", `Du fasst eine Chat-Konversation zwischen User und Assistant zusammen.
338
+ WICHTIG:
339
+ - Behalte ALLE wichtigen Fakten: Namen, Präferenzen, Entscheidungen, Vereinbarungen
340
+ - Behalte chronologischen Kontext wo relevant für Verständnis
341
+ - Fasse auf max. ${maxWords} Wörter zusammen
342
+ - Format: Kurze, prägnante Zusammenfassung ohne Bullet-Points
343
+ - Ignoriere Small-Talk, fokussiere auf inhaltliche Punkte`],
344
+ ...focusMessage,
345
+ ["human", "{conversation}"]
346
+ ]);
347
+ const chain = createSimpleChain(prompt, llm, new StringOutputParser());
348
+ const result = await chain.invoke({ conversation });
349
+ return typeof result === "string" ? result : String(result);
350
+ }
351
+ //# sourceMappingURL=memory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.js","sourceRoot":"","sources":["../../src/helpers/memory.ts"],"names":[],"mappings":"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"}