@delofarag/ai-utils 1.0.1 → 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/dist/heart/agent.d.ts +68 -0
- package/dist/heart/agent.d.ts.map +1 -0
- package/dist/heart/agent.js +140 -0
- package/dist/heart/agent.js.map +1 -0
- package/dist/heart/chain.d.ts +42 -0
- package/dist/heart/chain.d.ts.map +1 -0
- package/dist/heart/chain.js +152 -0
- package/dist/heart/chain.js.map +1 -0
- package/dist/heart/chatbot.d.ts +27 -0
- package/dist/heart/chatbot.d.ts.map +1 -0
- package/dist/heart/chatbot.js +100 -0
- package/dist/heart/chatbot.js.map +1 -0
- package/dist/heart/memorychain.d.ts +59 -0
- package/dist/heart/memorychain.d.ts.map +1 -0
- package/dist/heart/memorychain.js +165 -0
- package/dist/heart/memorychain.js.map +1 -0
- package/dist/heart/tools/BasicToolRegistry.d.ts +22 -0
- package/dist/heart/tools/BasicToolRegistry.d.ts.map +1 -0
- package/dist/heart/tools/BasicToolRegistry.js +45 -0
- package/dist/heart/tools/BasicToolRegistry.js.map +1 -0
- package/dist/heart/tools/CombinedRegistry.d.ts +41 -0
- package/dist/heart/tools/CombinedRegistry.d.ts.map +1 -0
- package/dist/heart/tools/CombinedRegistry.js +46 -0
- package/dist/heart/tools/CombinedRegistry.js.map +1 -0
- package/dist/heart/tools/ZodiosToolRegistry.d.ts +22 -0
- package/dist/heart/tools/ZodiosToolRegistry.d.ts.map +1 -0
- package/dist/heart/tools/ZodiosToolRegistry.js +80 -0
- package/dist/heart/tools/ZodiosToolRegistry.js.map +1 -0
- package/dist/helpers.d.ts +31 -0
- package/dist/helpers.d.ts.map +1 -0
- package/dist/helpers.js +105 -0
- package/dist/helpers.js.map +1 -0
- package/dist/imports.d.ts +44 -0
- package/dist/imports.d.ts.map +1 -0
- package/dist/imports.js +56 -0
- package/dist/imports.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +11 -0
- package/dist/index.js.map +1 -0
- package/dist/memory.d.ts +78 -0
- package/dist/memory.d.ts.map +1 -0
- package/dist/memory.js +282 -0
- package/dist/memory.js.map +1 -0
- package/dist/rag.d.ts +38 -0
- package/dist/rag.d.ts.map +1 -0
- package/dist/rag.js +72 -0
- package/dist/rag.js.map +1 -0
- package/package.json +9 -9
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
import { HumanMessage, AIMessage } from "../imports";
|
|
2
|
+
import { SmartCheckpointSaver } from "../memory";
|
|
3
|
+
import { Chain, DEFAULT_SCHEMA } from "./chain";
|
|
4
|
+
import { MemorySaver } from "../imports";
|
|
5
|
+
/**
|
|
6
|
+
* CONSTRUCTOR
|
|
7
|
+
* @example constructor({memory, ...rest}: MemoryChainProps<T> = {}){
|
|
8
|
+
this.memory = memory ?? new SmartCheckpointSaver(new MemorySaver())
|
|
9
|
+
if ("chain" in rest){
|
|
10
|
+
this.chain = rest.chain
|
|
11
|
+
} else {
|
|
12
|
+
this.chain = new Chain<T>({
|
|
13
|
+
llm: rest.llm ?? getLLM("groq"),
|
|
14
|
+
prompt: rest.prompt ?? [["system", "Du bist ein hilfreicher Chatbot der mit dem User ein höffliches und hilfreiches Gespräch führt"]],
|
|
15
|
+
schema: (rest.schema ?? DEFAULT_SCHEMA) as unknown as T
|
|
16
|
+
})
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
*
|
|
20
|
+
* @example entweder gibst du direkt eine chain + memory:
|
|
21
|
+
* @param props.memory
|
|
22
|
+
* @param props.chain
|
|
23
|
+
*
|
|
24
|
+
* @example oder eine chain wird anhand deines llms, schemas oder prompts erstellt + memory:
|
|
25
|
+
* @param props.memory
|
|
26
|
+
* @param props.llm
|
|
27
|
+
* @param props.prompt
|
|
28
|
+
* @param props.schema
|
|
29
|
+
*/
|
|
30
|
+
export class MemoryChain {
|
|
31
|
+
memory;
|
|
32
|
+
chain;
|
|
33
|
+
constructor({ memory, ...rest }) {
|
|
34
|
+
// @ts-expect-error - Type incompatibility due to duplicate LangChain versions in monorepo
|
|
35
|
+
this.memory = memory ?? new SmartCheckpointSaver(new MemorySaver(), { llm: rest.llm });
|
|
36
|
+
if ("chain" in rest) {
|
|
37
|
+
this.chain = rest.chain;
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
this.chain = new Chain({
|
|
41
|
+
llm: rest.llm,
|
|
42
|
+
prompt: rest.prompt ?? [["system", "Du bist ein hilfreicher Chatbot der mit dem User ein höffliches und hilfreiches Gespräch führt"]],
|
|
43
|
+
schema: (rest.schema ?? DEFAULT_SCHEMA)
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
async invoke(input) {
|
|
48
|
+
const config = {
|
|
49
|
+
configurable: { thread_id: input.thread_id }
|
|
50
|
+
};
|
|
51
|
+
const checkpoint = await this.memory.get(config);
|
|
52
|
+
let historyMessages = [];
|
|
53
|
+
if (checkpoint && checkpoint.channel_values && checkpoint.channel_values.messages) {
|
|
54
|
+
historyMessages = checkpoint.channel_values.messages;
|
|
55
|
+
}
|
|
56
|
+
const historyText = this.messagesToHistoryText(historyMessages);
|
|
57
|
+
const { thread_id, ...restInput } = input;
|
|
58
|
+
const invokeInput = {};
|
|
59
|
+
for (const key in restInput) {
|
|
60
|
+
if (key === "debug")
|
|
61
|
+
continue;
|
|
62
|
+
invokeInput[key] = restInput[key];
|
|
63
|
+
}
|
|
64
|
+
// Unterstütze sowohl 'input' als auch 'message' als Key
|
|
65
|
+
if (invokeInput.input && !invokeInput.message) {
|
|
66
|
+
invokeInput.message = invokeInput.input;
|
|
67
|
+
delete invokeInput.input;
|
|
68
|
+
}
|
|
69
|
+
if (historyText && invokeInput.message) {
|
|
70
|
+
invokeInput.message = `${historyText}\n\nUser: ${invokeInput.message}`;
|
|
71
|
+
}
|
|
72
|
+
const response = await this.chain.invoke(invokeInput);
|
|
73
|
+
const responseText = typeof response === 'object' && 'output' in response
|
|
74
|
+
? response.output
|
|
75
|
+
: typeof response === 'string'
|
|
76
|
+
? response
|
|
77
|
+
: JSON.stringify(response);
|
|
78
|
+
const userInputText = invokeInput.message || input.input || JSON.stringify(restInput);
|
|
79
|
+
await this.saveResponse(thread_id, userInputText, responseText, historyMessages);
|
|
80
|
+
return response;
|
|
81
|
+
}
|
|
82
|
+
async *stream({ input, thread_id }) {
|
|
83
|
+
const config = {
|
|
84
|
+
configurable: { thread_id }
|
|
85
|
+
};
|
|
86
|
+
const checkpoint = await this.memory.get(config);
|
|
87
|
+
let historyMessages = [];
|
|
88
|
+
if (checkpoint && checkpoint.channel_values && checkpoint.channel_values.messages) {
|
|
89
|
+
historyMessages = checkpoint.channel_values.messages;
|
|
90
|
+
}
|
|
91
|
+
const userMessage = new HumanMessage(input);
|
|
92
|
+
const allMessages = [...historyMessages, userMessage];
|
|
93
|
+
const historyText = this.messagesToHistoryText(allMessages);
|
|
94
|
+
const chunks = [];
|
|
95
|
+
try {
|
|
96
|
+
for await (const chunk of this.chain.stream({
|
|
97
|
+
message: `${historyText}\n\nUser: ${input}`
|
|
98
|
+
})) {
|
|
99
|
+
chunks.push(chunk);
|
|
100
|
+
yield chunk;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
finally {
|
|
104
|
+
// Memory-Speicherung wird IMMER ausgeführt, auch wenn der Stream fehlschlägt
|
|
105
|
+
const responseText = chunks.join('');
|
|
106
|
+
await this.saveResponse(thread_id, input, responseText, historyMessages);
|
|
107
|
+
}
|
|
108
|
+
return chunks.join('');
|
|
109
|
+
}
|
|
110
|
+
async addContext(data) {
|
|
111
|
+
this.chain.addContext(data);
|
|
112
|
+
}
|
|
113
|
+
async setContext(vectorStore) {
|
|
114
|
+
this.chain.setContext(vectorStore);
|
|
115
|
+
}
|
|
116
|
+
async clearContext() {
|
|
117
|
+
this.chain.clearContext();
|
|
118
|
+
}
|
|
119
|
+
messagesToHistoryText(messages) {
|
|
120
|
+
return messages.map(msg => {
|
|
121
|
+
if (msg instanceof HumanMessage) {
|
|
122
|
+
return `User: ${typeof msg.content === 'string' ? msg.content : JSON.stringify(msg.content)}`;
|
|
123
|
+
}
|
|
124
|
+
else if (msg instanceof AIMessage) {
|
|
125
|
+
return `Assistant: ${typeof msg.content === 'string' ? msg.content : JSON.stringify(msg.content)}`;
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
return `System: ${typeof msg.content === 'string' ? msg.content : JSON.stringify(msg.content)}`;
|
|
129
|
+
}
|
|
130
|
+
}).join('\n\n');
|
|
131
|
+
}
|
|
132
|
+
async saveResponse(thread_id, userInputText, responseText, historyMessages) {
|
|
133
|
+
if (!responseText || responseText.length === 0)
|
|
134
|
+
return;
|
|
135
|
+
const config = {
|
|
136
|
+
configurable: { thread_id }
|
|
137
|
+
};
|
|
138
|
+
const checkpoint = await this.memory.get(config);
|
|
139
|
+
const userMessage = new HumanMessage(userInputText);
|
|
140
|
+
const aiMessage = new AIMessage(responseText);
|
|
141
|
+
const newMessages = [...historyMessages, userMessage, aiMessage];
|
|
142
|
+
const newCheckpoint = {
|
|
143
|
+
...checkpoint,
|
|
144
|
+
channel_values: {
|
|
145
|
+
...(checkpoint?.channel_values || {}),
|
|
146
|
+
messages: newMessages
|
|
147
|
+
},
|
|
148
|
+
channel_versions: {
|
|
149
|
+
...(checkpoint?.channel_versions || {}),
|
|
150
|
+
messages: newMessages.length
|
|
151
|
+
},
|
|
152
|
+
versions_seen: checkpoint?.versions_seen || {},
|
|
153
|
+
v: (checkpoint?.v || 0) + 1,
|
|
154
|
+
id: checkpoint?.id || `${thread_id}-${Date.now()}`,
|
|
155
|
+
ts: checkpoint?.ts || new Date().toISOString()
|
|
156
|
+
};
|
|
157
|
+
const metadata = {
|
|
158
|
+
source: "input",
|
|
159
|
+
step: (checkpoint?.v || 0) + 1,
|
|
160
|
+
parents: {}
|
|
161
|
+
};
|
|
162
|
+
await this.memory.put(config, newCheckpoint, metadata, { messages: newMessages.length });
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
//# sourceMappingURL=memorychain.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memorychain.js","sourceRoot":"","sources":["../../src/heart/memorychain.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { DynamicStructuredTool } from "@langchain/core/tools";
|
|
2
|
+
import type { ExtractToolNames } from "./CombinedRegistry";
|
|
3
|
+
import { z } from "zod/v3";
|
|
4
|
+
export interface Tool {
|
|
5
|
+
name: string;
|
|
6
|
+
description: string;
|
|
7
|
+
schema: z.AnyZodObject;
|
|
8
|
+
func: (...args: any[]) => any;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* vergiss nicht 'as const' am ende des input-arrays zu verwenden für perekten autocomplete!!!
|
|
12
|
+
*/
|
|
13
|
+
export declare class ToolRegistry<T extends Tool[]> {
|
|
14
|
+
private tools;
|
|
15
|
+
constructor(tools: T);
|
|
16
|
+
getTool(name: ExtractToolNames<T>): DynamicStructuredTool | undefined;
|
|
17
|
+
getTools(...names: ExtractToolNames<T>[]): (DynamicStructuredTool<import("@langchain/core/tools").ToolSchemaBase, any, any, any> | undefined)[];
|
|
18
|
+
private turnToTool;
|
|
19
|
+
private checkDuplicatedTools;
|
|
20
|
+
get allTools(): DynamicStructuredTool[];
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=BasicToolRegistry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BasicToolRegistry.d.ts","sourceRoot":"","sources":["../../../src/heart/tools/BasicToolRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAA;AAC7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAC1D,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAA;AAE1B,MAAM,WAAW,IAAI;IACjB,IAAI,EAAC,MAAM,CAAA;IACX,WAAW,EAAC,MAAM,CAAA;IAClB,MAAM,EAAC,CAAC,CAAC,YAAY,CAAA;IACrB,IAAI,EAAC,CAAC,GAAG,IAAI,EAAC,GAAG,EAAE,KAAK,GAAG,CAAA;CAC9B;AAED;;GAEG;AACH,qBAAa,YAAY,CAAC,CAAC,SAAS,IAAI,EAAE;IACtC,OAAO,CAAC,KAAK,CAAwB;gBACzB,KAAK,EAAC,CAAC;IAOZ,OAAO,CAAC,IAAI,EAAC,gBAAgB,CAAC,CAAC,CAAC,GAAG,qBAAqB,GAAG,SAAS;IAYpE,QAAQ,CAAC,GAAG,KAAK,EAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE;IAI9C,OAAO,CAAC,UAAU;IAUlB,OAAO,CAAC,oBAAoB;IAO5B,IAAW,QAAQ,IAAG,qBAAqB,EAAE,CAE5C;CACJ"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { DynamicStructuredTool } from "@langchain/core/tools";
|
|
2
|
+
/**
|
|
3
|
+
* vergiss nicht 'as const' am ende des input-arrays zu verwenden für perekten autocomplete!!!
|
|
4
|
+
*/
|
|
5
|
+
export class ToolRegistry {
|
|
6
|
+
tools;
|
|
7
|
+
constructor(tools) {
|
|
8
|
+
this.tools = tools.map(tool => tool instanceof DynamicStructuredTool ? tool : this.turnToTool(tool));
|
|
9
|
+
if (this.checkDuplicatedTools()) {
|
|
10
|
+
throw new Error(`Error! mehrere tools wurden unter den gleichen Namen registriert!`);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
getTool(name) {
|
|
14
|
+
const tools = this.tools.filter(tool => tool.name.toLowerCase() === name.toLowerCase());
|
|
15
|
+
if (tools.length > 1) {
|
|
16
|
+
throw new Error(`Error! mehrere tools wurden unter den gleichen Namen ${name} registriert!`);
|
|
17
|
+
}
|
|
18
|
+
if (tools.length !== 1) {
|
|
19
|
+
console.error(`unter ${name} wurde kein Tool gefunden`);
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
return tools[0];
|
|
23
|
+
}
|
|
24
|
+
getTools(...names) {
|
|
25
|
+
return names.map(name => this.getTool(name));
|
|
26
|
+
}
|
|
27
|
+
turnToTool(tool) {
|
|
28
|
+
return new DynamicStructuredTool({
|
|
29
|
+
name: tool.name,
|
|
30
|
+
description: tool.description,
|
|
31
|
+
schema: tool.schema,
|
|
32
|
+
func: tool.func
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
checkDuplicatedTools() {
|
|
36
|
+
const dublikaes = this.tools.filter((tool, index) => {
|
|
37
|
+
return this.tools.indexOf(tool) !== index;
|
|
38
|
+
});
|
|
39
|
+
return dublikaes.length > 0 ? true : false;
|
|
40
|
+
}
|
|
41
|
+
get allTools() {
|
|
42
|
+
return this.tools;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=BasicToolRegistry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BasicToolRegistry.js","sourceRoot":"","sources":["../../../src/heart/tools/BasicToolRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAA;AAW7D;;GAEG;AACH,MAAM,OAAO,YAAY;IACb,KAAK,CAAwB;IACrC,YAAY,KAAO;QACf,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,YAAY,qBAAqB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAA;QACpG,IAAI,IAAI,CAAC,oBAAoB,EAAE,EAAC,CAAC;YAC7B,MAAM,IAAI,KAAK,CAAC,mEAAmE,CAAC,CAAA;QACxF,CAAC;IACL,CAAC;IAEM,OAAO,CAAC,IAAwB;QACnC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC,CAAA;QACvF,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,wDAAwD,IAAI,eAAe,CAAC,CAAA;QAChG,CAAC;QACD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAC,CAAC;YACpB,OAAO,CAAC,KAAK,CAAC,SAAS,IAAI,2BAA2B,CAAC,CAAA;YACvD,OAAM;QACV,CAAC;QACD,OAAO,KAAK,CAAC,CAAC,CAAC,CAAA;IACnB,CAAC;IAEM,QAAQ,CAAC,GAAG,KAA2B;QAC1C,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAA;IAChD,CAAC;IAEO,UAAU,CAAC,IAAS;QACxB,OAAO,IAAI,qBAAqB,CAAC;YAC7B,IAAI,EAAC,IAAI,CAAC,IAAI;YACd,WAAW,EAAC,IAAI,CAAC,WAAW;YAC5B,MAAM,EAAC,IAAI,CAAC,MAAM;YAClB,IAAI,EAAC,IAAI,CAAC,IAAI;SACjB,CAAC,CAAA;IAEN,CAAC;IAEO,oBAAoB;QACxB,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAC,KAAK,EAAC,EAAE;YAC9C,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,KAAK,CAAA;QAC7C,CAAC,CAAC,CAAA;QACF,OAAO,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAA;IAC9C,CAAC;IAED,IAAW,QAAQ;QACf,OAAO,IAAI,CAAC,KAAK,CAAA;IACrB,CAAC;CACJ"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { type Tool } from "./BasicToolRegistry";
|
|
2
|
+
import type { DynamicStructuredTool } from "@langchain/core/tools";
|
|
3
|
+
import { Zodios, type ApiOf } from "zodios";
|
|
4
|
+
export type ExtractToolNames<T extends readonly {
|
|
5
|
+
name: string;
|
|
6
|
+
}[]> = {
|
|
7
|
+
[K in keyof T]: T[K] extends {
|
|
8
|
+
name: string;
|
|
9
|
+
} ? T[K]['name'] : never;
|
|
10
|
+
}[number];
|
|
11
|
+
type ExtractToolNamesFromZodiosApi<Api extends readonly any[]> = {
|
|
12
|
+
[K in keyof Api]: Api[K] extends {
|
|
13
|
+
name: infer N;
|
|
14
|
+
} ? N extends string ? N : Api[K] extends {
|
|
15
|
+
method: infer M;
|
|
16
|
+
path: infer P;
|
|
17
|
+
} ? `call api ${M & string} ${P & string}` : never : Api[K] extends {
|
|
18
|
+
method: infer M;
|
|
19
|
+
path: infer P;
|
|
20
|
+
} ? `call api ${M & string} ${P & string}` : never;
|
|
21
|
+
}[number];
|
|
22
|
+
type ExtractToolNamesFromInput<T extends readonly (Tool | Zodios<any>)[]> = {
|
|
23
|
+
[K in keyof T]: T[K] extends Tool ? T[K]['name'] : T[K] extends Zodios<infer Api> ? ExtractToolNamesFromZodiosApi<ApiOf<T[K]>> : never;
|
|
24
|
+
}[number];
|
|
25
|
+
/**
|
|
26
|
+
* needs testing!!!
|
|
27
|
+
*/
|
|
28
|
+
/**
|
|
29
|
+
* vergiss nicht 'as const' am ende des input-arrays zu verwenden für perekten autocomplete!!!
|
|
30
|
+
*/
|
|
31
|
+
export declare class CombinedToolRegistry<T extends readonly (Tool | Zodios<any>)[]> {
|
|
32
|
+
private BaseToolRegistry;
|
|
33
|
+
private ZodiosToolRegistry;
|
|
34
|
+
private tools;
|
|
35
|
+
constructor(input: T);
|
|
36
|
+
getTool(name: ExtractToolNamesFromInput<T>): DynamicStructuredTool | undefined;
|
|
37
|
+
getTools(...names: ExtractToolNamesFromInput<T>[]): DynamicStructuredTool[];
|
|
38
|
+
get allTools(): DynamicStructuredTool[];
|
|
39
|
+
}
|
|
40
|
+
export {};
|
|
41
|
+
//# sourceMappingURL=CombinedRegistry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CombinedRegistry.d.ts","sourceRoot":"","sources":["../../../src/heart/tools/CombinedRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAG7D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAA;AAClE,OAAO,EAAE,MAAM,EAAE,KAAK,KAAK,EAAE,MAAM,QAAQ,CAAA;AAG3C,MAAM,MAAM,gBAAgB,CAAC,CAAC,SAAS,SAAS;IAAC,IAAI,EAAC,MAAM,CAAA;CAAC,EAAE,IAAI;KAC9D,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS;QAAC,IAAI,EAAC,MAAM,CAAA;KAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,KAAK;CACpE,CAAC,MAAM,CAAC,CAAA;AAET,KAAK,6BAA6B,CAAC,GAAG,SAAS,SAAS,GAAG,EAAE,IAAI;KAC5D,CAAC,IAAI,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,SAAS;QAAC,IAAI,EAAE,MAAM,CAAC,CAAA;KAAC,GAC1C,CAAC,SAAS,MAAM,GACZ,CAAC,GACD,GAAG,CAAC,CAAC,CAAC,SAAS;QAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC,CAAA;KAAC,GAC/C,YAAY,CAAC,GAAG,MAAM,IAAI,CAAC,GAAG,MAAM,EAAE,GACtC,KAAK,GACT,GAAG,CAAC,CAAC,CAAC,SAAS;QAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC,CAAA;KAAC,GAC/C,YAAY,CAAC,GAAG,MAAM,IAAI,CAAC,GAAG,MAAM,EAAE,GACtC,KAAK;CACd,CAAC,MAAM,CAAC,CAAA;AAET,KAAK,yBAAyB,CAAC,CAAC,SAAS,SAAS,CAAC,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI;KACvE,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,GAC3B,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GACZ,CAAC,CAAC,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,GAAG,CAAC,GAC9B,6BAA6B,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAC1C,KAAK;CACd,CAAC,MAAM,CAAC,CAAA;AAET;;GAEG;AACH;;GAEG;AACH,qBAAa,oBAAoB,CAAC,CAAC,SAAS,SAAS,CAAC,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE;IACvE,OAAO,CAAC,gBAAgB,CAAiC;IACzD,OAAO,CAAC,kBAAkB,CAA4C;IACtE,OAAO,CAAC,KAAK,CAAwB;gBAEzB,KAAK,EAAE,CAAC;IAyBpB,OAAO,CAAC,IAAI,EAAE,yBAAyB,CAAC,CAAC,CAAC,GAAG,qBAAqB,GAAG,SAAS;IAI9E,QAAQ,CAAC,GAAG,KAAK,EAAE,yBAAyB,CAAC,CAAC,CAAC,EAAE,GAAG,qBAAqB,EAAE;IAI3E,IAAI,QAAQ,IAAI,qBAAqB,EAAE,CAEtC;CACJ"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { ToolRegistry } from "./BasicToolRegistry";
|
|
2
|
+
import { ZodiosToolRegistry } from "./ZodiosToolRegistry";
|
|
3
|
+
import { Zodios } from "zodios";
|
|
4
|
+
/**
|
|
5
|
+
* needs testing!!!
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* vergiss nicht 'as const' am ende des input-arrays zu verwenden für perekten autocomplete!!!
|
|
9
|
+
*/
|
|
10
|
+
export class CombinedToolRegistry {
|
|
11
|
+
BaseToolRegistry;
|
|
12
|
+
ZodiosToolRegistry;
|
|
13
|
+
tools;
|
|
14
|
+
constructor(input) {
|
|
15
|
+
//getting and checking the tools
|
|
16
|
+
const baseTools = input.filter((tool) => {
|
|
17
|
+
return typeof tool === "object" && tool !== null && "name" in tool && "description" in tool && "schema" in tool && "func" in tool;
|
|
18
|
+
});
|
|
19
|
+
if (baseTools.length > 0) {
|
|
20
|
+
this.BaseToolRegistry = new ToolRegistry(baseTools);
|
|
21
|
+
}
|
|
22
|
+
//getting and checking the zodios clients
|
|
23
|
+
const zodiosClients = input.filter((item) => {
|
|
24
|
+
return item instanceof Zodios;
|
|
25
|
+
});
|
|
26
|
+
if (zodiosClients.length > 1) {
|
|
27
|
+
throw new Error("Only one Zodios client can be registered");
|
|
28
|
+
}
|
|
29
|
+
const zodiosClient = zodiosClients[0];
|
|
30
|
+
if (zodiosClient) {
|
|
31
|
+
this.ZodiosToolRegistry = new ZodiosToolRegistry(zodiosClient);
|
|
32
|
+
}
|
|
33
|
+
//combining the tools
|
|
34
|
+
this.tools = [...(this.BaseToolRegistry?.allTools || []), ...(this.ZodiosToolRegistry?.allTools || [])];
|
|
35
|
+
}
|
|
36
|
+
getTool(name) {
|
|
37
|
+
return this.tools.find((tool) => tool.name === name);
|
|
38
|
+
}
|
|
39
|
+
getTools(...names) {
|
|
40
|
+
return names.map((name) => this.getTool(name)).filter((tool) => tool !== undefined);
|
|
41
|
+
}
|
|
42
|
+
get allTools() {
|
|
43
|
+
return this.tools;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=CombinedRegistry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CombinedRegistry.js","sourceRoot":"","sources":["../../../src/heart/tools/CombinedRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAa,MAAM,qBAAqB,CAAA;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AAGzD,OAAO,EAAE,MAAM,EAAc,MAAM,QAAQ,CAAA;AA2B3C;;GAEG;AACH;;GAEG;AACH,MAAM,OAAO,oBAAoB;IACrB,gBAAgB,CAAiC;IACjD,kBAAkB,CAA4C;IAC9D,KAAK,CAAwB;IAErC,YAAY,KAAQ;QAChB,gCAAgC;QAChC,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAC,EAAE;YACnC,OAAO,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,aAAa,IAAI,IAAI,IAAI,QAAQ,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI,CAAA;QACrI,CAAC,CAAC,CAAA;QACF,IAAG,SAAS,CAAC,MAAM,GAAG,CAAC,EAAC,CAAC;YACrB,IAAI,CAAC,gBAAgB,GAAG,IAAI,YAAY,CAAC,SAAS,CAAC,CAAA;QACvD,CAAC;QAED,yCAAyC;QACzC,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;YACxC,OAAO,IAAI,YAAY,MAAM,CAAA;QACjC,CAAC,CAAC,CAAA;QACF,IAAG,aAAa,CAAC,MAAM,GAAG,CAAC,EAAC,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAA;QAC/D,CAAC;QACD,MAAM,YAAY,GAAG,aAAa,CAAC,CAAC,CAAC,CAAA;QACrC,IAAI,YAAY,EAAE,CAAC;YACf,IAAI,CAAC,kBAAkB,GAAG,IAAI,kBAAkB,CAAC,YAAY,CAAC,CAAA;QAClE,CAAC;QAED,qBAAqB;QACrB,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,EAAE,QAAQ,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,kBAAkB,EAAE,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAA;IAC3G,CAAC;IAED,OAAO,CAAC,IAAkC;QACtC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,CAAA;IACxD,CAAC;IAED,QAAQ,CAAC,GAAG,KAAqC;QAC7C,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAiC,EAAE,CAAC,IAAI,KAAK,SAAS,CAAC,CAAA;IACtH,CAAC;IAED,IAAI,QAAQ;QACR,OAAO,IAAI,CAAC,KAAK,CAAA;IACrB,CAAC;CACJ"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { Zodios, ZodiosEndpointDescription, ApiOf } from "zodios";
|
|
2
|
+
import { DynamicStructuredTool } from "../../imports";
|
|
3
|
+
import { Prettify } from "../../helpers";
|
|
4
|
+
import type { ExtractToolNames } from "./CombinedRegistry";
|
|
5
|
+
export type ZodiosEndpointWithAlias<R> = Prettify<ZodiosEndpointDescription<R> & {
|
|
6
|
+
name?: string;
|
|
7
|
+
}>;
|
|
8
|
+
/**
|
|
9
|
+
* needs testing!!!
|
|
10
|
+
*/
|
|
11
|
+
export declare class ZodiosToolRegistry<Z extends Zodios<any>> {
|
|
12
|
+
private apiSchema;
|
|
13
|
+
private tools;
|
|
14
|
+
private zodiosClient;
|
|
15
|
+
constructor(zodiosClient: Z);
|
|
16
|
+
getTool(name: ExtractToolNames<ApiOf<Z>>): DynamicStructuredTool | undefined;
|
|
17
|
+
getTools(...names: ExtractToolNames<ApiOf<Z>>[]): (DynamicStructuredTool | undefined)[];
|
|
18
|
+
get allTools(): DynamicStructuredTool[];
|
|
19
|
+
private turnApiIntoTools;
|
|
20
|
+
private buildToolSchema;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=ZodiosToolRegistry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ZodiosToolRegistry.d.ts","sourceRoot":"","sources":["../../../src/heart/tools/ZodiosToolRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,yBAAyB,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AACtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA;AAErD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAE1D,MAAM,MAAM,uBAAuB,CAAC,CAAC,IAAI,QAAQ,CAAC,yBAAyB,CAAC,CAAC,CAAC,GAAG;IAC7E,IAAI,CAAC,EAAE,MAAM,CAAA;CAChB,CAAC,CAAA;AAEF;;GAEG;AACH,qBAAa,kBAAkB,CAAC,CAAC,SAAS,MAAM,CAAC,GAAG,CAAC;IACjD,OAAO,CAAC,SAAS,CAAU;IAC3B,OAAO,CAAC,KAAK,CAAyB;IACtC,OAAO,CAAC,YAAY,CAAG;gBACX,YAAY,EAAE,CAAC;IAMpB,OAAO,CAAC,IAAI,EAAE,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,qBAAqB,GAAG,SAAS;IAa5E,QAAQ,CAAC,GAAG,KAAK,EAAE,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,qBAAqB,GAAG,SAAS,CAAC,EAAE;IAI9F,IAAI,QAAQ,IAAI,qBAAqB,EAAE,CAEtC;IAED,OAAO,CAAC,gBAAgB;IAoBxB,OAAO,CAAC,eAAe;CAkC1B"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { DynamicStructuredTool } from "../../imports";
|
|
2
|
+
import { z } from 'zod/v3';
|
|
3
|
+
/**
|
|
4
|
+
* needs testing!!!
|
|
5
|
+
*/
|
|
6
|
+
export class ZodiosToolRegistry {
|
|
7
|
+
apiSchema;
|
|
8
|
+
tools;
|
|
9
|
+
zodiosClient;
|
|
10
|
+
constructor(zodiosClient) {
|
|
11
|
+
this.zodiosClient = zodiosClient;
|
|
12
|
+
this.apiSchema = zodiosClient.api;
|
|
13
|
+
this.tools = this.turnApiIntoTools();
|
|
14
|
+
}
|
|
15
|
+
getTool(name) {
|
|
16
|
+
const tools = this.tools.filter((tool) => tool.name?.toLowerCase() === name.toLowerCase());
|
|
17
|
+
if (tools.length > 1) {
|
|
18
|
+
throw new Error(`Error! es wurden unter dem gleichen namen ${name} mehrere tools registriert!`);
|
|
19
|
+
}
|
|
20
|
+
const tool = tools[0];
|
|
21
|
+
if (!tool) {
|
|
22
|
+
console.error(`Tool ${name} not found`);
|
|
23
|
+
return undefined;
|
|
24
|
+
}
|
|
25
|
+
return tool;
|
|
26
|
+
}
|
|
27
|
+
getTools(...names) {
|
|
28
|
+
return names.map(name => this.getTool(name));
|
|
29
|
+
}
|
|
30
|
+
get allTools() {
|
|
31
|
+
return this.tools;
|
|
32
|
+
}
|
|
33
|
+
turnApiIntoTools() {
|
|
34
|
+
return this.apiSchema.map((endpoint) => {
|
|
35
|
+
return new DynamicStructuredTool({
|
|
36
|
+
name: endpoint.name || `call api ${endpoint.method} ${endpoint.path}`,
|
|
37
|
+
description: endpoint.description || `calls the api ${endpoint.method} ${endpoint.path}`,
|
|
38
|
+
schema: this.buildToolSchema(endpoint),
|
|
39
|
+
func: async (input) => {
|
|
40
|
+
return this.zodiosClient.request({
|
|
41
|
+
method: endpoint.method,
|
|
42
|
+
url: endpoint.path,
|
|
43
|
+
params: input?.params,
|
|
44
|
+
queries: input?.queries,
|
|
45
|
+
headers: input?.headers,
|
|
46
|
+
data: input?.body,
|
|
47
|
+
});
|
|
48
|
+
},
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
buildToolSchema(endpoint) {
|
|
53
|
+
const queries = {};
|
|
54
|
+
const headers = {};
|
|
55
|
+
let body;
|
|
56
|
+
for (const param of endpoint.parameters ?? []) {
|
|
57
|
+
if (param.type === "Query") {
|
|
58
|
+
queries[param.name] = param.schema;
|
|
59
|
+
}
|
|
60
|
+
if (param.type === "Header") {
|
|
61
|
+
headers[param.name] = param.schema;
|
|
62
|
+
}
|
|
63
|
+
if (param.type === "Body") {
|
|
64
|
+
body = param.schema;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
const schemaShape = {};
|
|
68
|
+
if (Object.keys(queries).length > 0) {
|
|
69
|
+
schemaShape.queries = z.object(queries).optional();
|
|
70
|
+
}
|
|
71
|
+
if (Object.keys(headers).length > 0) {
|
|
72
|
+
schemaShape.headers = z.object(headers).optional();
|
|
73
|
+
}
|
|
74
|
+
if (body) {
|
|
75
|
+
schemaShape.body = body.optional();
|
|
76
|
+
}
|
|
77
|
+
return z.object(schemaShape);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=ZodiosToolRegistry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ZodiosToolRegistry.js","sourceRoot":"","sources":["../../../src/heart/tools/ZodiosToolRegistry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { BaseChatModel, BaseOutputParser, ChatPromptTemplate } from "./imports";
|
|
2
|
+
import { z } from "zod/v3";
|
|
3
|
+
export type LLMKind = "groq" | "localOllama" | "vision";
|
|
4
|
+
export type Prettify<T> = {
|
|
5
|
+
[K in keyof T]: T[K];
|
|
6
|
+
} & {};
|
|
7
|
+
export declare function logChunk(chunk: string): void;
|
|
8
|
+
export declare function createChain(prompt: ChatPromptTemplate, llm: BaseChatModel, parser?: BaseOutputParser | null): import("@langchain/core/dist/runnables/base").Runnable<any, unknown, import("@langchain/core/dist/runnables/types").RunnableConfig<Record<string, any>>>;
|
|
9
|
+
export declare function wait(ms: number): Promise<unknown>;
|
|
10
|
+
export declare function stream(text: string | Array<any>, wait_in_between?: number): AsyncGenerator<string, void, unknown>;
|
|
11
|
+
export type LLMConfig = {
|
|
12
|
+
chatgroqApiKey?: string;
|
|
13
|
+
openrouterApiKey?: string;
|
|
14
|
+
};
|
|
15
|
+
export declare function getLLM(kind?: LLMKind, config?: LLMConfig): any;
|
|
16
|
+
export declare function structure<T extends z.ZodObject<any, any>>({ data, into, llm, retries }: {
|
|
17
|
+
data: any;
|
|
18
|
+
into: T;
|
|
19
|
+
llm: BaseChatModel;
|
|
20
|
+
retries?: number;
|
|
21
|
+
}): Promise<z.infer<T>>;
|
|
22
|
+
/**
|
|
23
|
+
* fasst eine Chat-Konversation zwischen User und Assistant zusammen
|
|
24
|
+
*/
|
|
25
|
+
export declare function summarize({ conversation, fokuss, llm, maxWords }: {
|
|
26
|
+
conversation: string;
|
|
27
|
+
fokuss?: string;
|
|
28
|
+
llm: BaseChatModel;
|
|
29
|
+
maxWords?: number;
|
|
30
|
+
}): Promise<string>;
|
|
31
|
+
//# sourceMappingURL=helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAoC,kBAAkB,EAA8C,MAAM,WAAW,CAAC;AAC9J,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAE3B,MAAM,MAAM,OAAO,GAAG,MAAM,GAAG,aAAa,GAAG,QAAQ,CAAA;AAEvD,MAAM,MAAM,QAAQ,CAAC,CAAC,IAAI;KACvB,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CACrB,GAAG,EAAE,CAAC;AAEP,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,QAQrC;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,kBAAkB,EAAE,GAAG,EAAE,aAAa,EAAE,MAAM,GAAE,gBAAgB,GAAG,IAAW,4JAEjH;AAED,wBAAsB,IAAI,CAAC,EAAE,EAAC,MAAM,oBAEnC;AAED,wBAAuB,MAAM,CAAC,IAAI,EAAC,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,EAAC,eAAe,GAAC,MAAY,yCAKlF;AAED,MAAM,MAAM,SAAS,GAAG;IACtB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAC1B,CAAA;AAED,wBAAgB,MAAM,CAAC,IAAI,GAAE,OAAgB,EAAE,MAAM,CAAC,EAAE,SAAS,OA+BhE;AAED,wBAAsB,SAAS,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EAC7D,IAAI,EACJ,IAAI,EACJ,GAAG,EACH,OAAW,EACd,EAAC;IACE,IAAI,EAAE,GAAG,CAAC;IACV,IAAI,EAAE,CAAC,CAAC;IACR,GAAG,EAAE,aAAa,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAA;CACnB,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CA4BtB;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,EAC5B,YAAY,EACZ,MAAM,EACN,GAAG,EACH,QAAc,EACjB,EAAE;IACC,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,aAAa,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAA;CACpB,GAAG,OAAO,CAAC,MAAM,CAAC,CAoBlB"}
|
package/dist/helpers.js
ADDED
|
@@ -0,0 +1,105 @@
|
|
|
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(kind = "groq", config) {
|
|
25
|
+
switch (kind) {
|
|
26
|
+
case "groq":
|
|
27
|
+
if (!config?.chatgroqApiKey) {
|
|
28
|
+
throw new Error("chatgroqApiKey is required in config for groq LLM");
|
|
29
|
+
}
|
|
30
|
+
return new ChatGroq({
|
|
31
|
+
apiKey: config.chatgroqApiKey,
|
|
32
|
+
model: "llama-3.3-70b-versatile"
|
|
33
|
+
});
|
|
34
|
+
case "vision":
|
|
35
|
+
if (!config?.openrouterApiKey) {
|
|
36
|
+
throw new Error("openrouterApiKey is required in config for vision LLM");
|
|
37
|
+
}
|
|
38
|
+
return new ChatOpenAI({
|
|
39
|
+
apiKey: config.openrouterApiKey,
|
|
40
|
+
configuration: {
|
|
41
|
+
baseURL: "https://openrouter.ai/api/v1",
|
|
42
|
+
},
|
|
43
|
+
model: "openai/gpt-4o-mini"
|
|
44
|
+
});
|
|
45
|
+
case "localOllama":
|
|
46
|
+
return new ChatOllama({
|
|
47
|
+
model: "llama3.2:3b"
|
|
48
|
+
});
|
|
49
|
+
default:
|
|
50
|
+
throw new Error("Unknown LLM kind");
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
export async function structure({ data, into, llm, retries = 2 }) {
|
|
54
|
+
const inputString = typeof data === "string" ? data : JSON.stringify(data, null, 2);
|
|
55
|
+
const jsonParser = StructuredOutputParser.fromZodSchema(into);
|
|
56
|
+
const prompt = await ChatPromptTemplate.fromMessages([
|
|
57
|
+
["system", `Du bist ein JSON-Formatierer.
|
|
58
|
+
REGELN:
|
|
59
|
+
- Gib NUR valides JSON zurück, KEIN anderer Text
|
|
60
|
+
- Keine Markdown Code-Blöcke (\`\`\`json)
|
|
61
|
+
- Halte dich EXAKT an das Schema
|
|
62
|
+
|
|
63
|
+
Schema:
|
|
64
|
+
{format_instructions}`],
|
|
65
|
+
["human", "{input}"]
|
|
66
|
+
]).partial({ format_instructions: jsonParser.getFormatInstructions() });
|
|
67
|
+
const chain = createChain(prompt, llm, jsonParser);
|
|
68
|
+
let lastError = null;
|
|
69
|
+
for (let i = 0; i <= retries; i++) {
|
|
70
|
+
try {
|
|
71
|
+
const result = await chain.invoke({ input: inputString });
|
|
72
|
+
return into.parse(result);
|
|
73
|
+
}
|
|
74
|
+
catch (error) {
|
|
75
|
+
lastError = error;
|
|
76
|
+
if (i < retries) {
|
|
77
|
+
console.warn(`structure() Versuch ${i + 1} fehlgeschlagen, retry...`);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
throw new Error(`structure() failed after ${retries + 1} attempts, Error: ${lastError?.message}`);
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* fasst eine Chat-Konversation zwischen User und Assistant zusammen
|
|
85
|
+
*/
|
|
86
|
+
export async function summarize({ conversation, fokuss, llm, maxWords = 150 }) {
|
|
87
|
+
const focusMessage = fokuss
|
|
88
|
+
? [["system", `Fokussiere dich besonders auf die folgenden Themen:\n${fokuss}`]]
|
|
89
|
+
: [];
|
|
90
|
+
const prompt = ChatPromptTemplate.fromMessages([
|
|
91
|
+
["system", `Du fasst eine Chat-Konversation zwischen User und Assistant zusammen.
|
|
92
|
+
WICHTIG:
|
|
93
|
+
- Behalte ALLE wichtigen Fakten: Namen, Präferenzen, Entscheidungen, Vereinbarungen
|
|
94
|
+
- Behalte chronologischen Kontext wo relevant für Verständnis
|
|
95
|
+
- Fasse auf max. ${maxWords} Wörter zusammen
|
|
96
|
+
- Format: Kurze, prägnante Zusammenfassung ohne Bullet-Points
|
|
97
|
+
- Ignoriere Small-Talk, fokussiere auf inhaltliche Punkte`],
|
|
98
|
+
...focusMessage,
|
|
99
|
+
["human", "{conversation}"]
|
|
100
|
+
]);
|
|
101
|
+
const chain = createChain(prompt, llm, new StringOutputParser());
|
|
102
|
+
const result = await chain.invoke({ conversation });
|
|
103
|
+
return typeof result === "string" ? result : String(result);
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"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"}
|