@delofarag/ai-utils 1.7.2 → 1.8.1
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 +32 -44
- package/dist/heart/agent.d.ts +17 -2
- package/dist/heart/agent.d.ts.map +1 -1
- package/dist/heart/agent.js +49 -24
- package/dist/heart/agent.js.map +1 -1
- package/dist/heart/chain.d.ts +15 -0
- package/dist/heart/chain.d.ts.map +1 -1
- package/dist/heart/chain.js +28 -1
- package/dist/heart/chain.js.map +1 -1
- package/dist/heart/deepAgent.d.ts +20 -4
- package/dist/heart/deepAgent.d.ts.map +1 -1
- package/dist/heart/deepAgent.js +84 -50
- package/dist/heart/deepAgent.js.map +1 -1
- package/dist/heart/tools/MCP.d.ts +45 -0
- package/dist/heart/tools/MCP.d.ts.map +1 -0
- package/dist/heart/tools/MCP.js +51 -0
- package/dist/heart/tools/MCP.js.map +1 -0
- package/dist/helpers/deepagent/backend.d.ts +1 -4
- package/dist/helpers/deepagent/backend.d.ts.map +1 -1
- package/dist/helpers/deepagent/backend.js.map +1 -1
- package/dist/helpers/deepagent/interruptTypes.d.ts +7 -1
- package/dist/helpers/deepagent/interruptTypes.d.ts.map +1 -1
- package/dist/helpers/deepagent/streamEvents.d.ts +4 -2
- package/dist/helpers/deepagent/streamEvents.d.ts.map +1 -1
- package/dist/helpers/deepagent/streamEvents.js +15 -0
- package/dist/helpers/deepagent/streamEvents.js.map +1 -1
- package/dist/helpers/{cli-llms.d.ts → llm/cli-llms.d.ts} +2 -2
- package/dist/helpers/llm/cli-llms.d.ts.map +1 -0
- package/dist/helpers/{cli-llms.js → llm/cli-llms.js} +1 -1
- package/dist/helpers/llm/cli-llms.js.map +1 -0
- package/dist/helpers/llm/free-llm.d.ts +92 -0
- package/dist/helpers/llm/free-llm.d.ts.map +1 -0
- package/dist/helpers/llm/free-llm.js +219 -0
- package/dist/helpers/llm/free-llm.js.map +1 -0
- package/dist/helpers/llm/llms.d.ts +28 -0
- package/dist/helpers/llm/llms.d.ts.map +1 -0
- package/dist/helpers/{llms.js → llm/llms.js} +11 -45
- package/dist/helpers/llm/llms.js.map +1 -0
- package/dist/helpers/llm/types.d.ts +82 -0
- package/dist/helpers/llm/types.d.ts.map +1 -0
- package/dist/helpers/llm/types.js +2 -0
- package/dist/helpers/llm/types.js.map +1 -0
- package/dist/helpers/memory.js +1 -1
- package/dist/helpers/memory.js.map +1 -1
- package/dist/imports.d.ts +1 -1
- package/dist/imports.d.ts.map +1 -1
- package/dist/imports.js +1 -1
- package/dist/imports.js.map +1 -1
- package/dist/index.d.ts +4 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -4
- package/dist/index.js.map +1 -1
- package/dist/magic-funcs/answerers/ask.js +1 -1
- package/dist/magic-funcs/answerers/ask.js.map +1 -1
- package/dist/magic-funcs/evaluators/classify.js +1 -1
- package/dist/magic-funcs/evaluators/classify.js.map +1 -1
- package/dist/magic-funcs/evaluators/decide.js +1 -1
- package/dist/magic-funcs/evaluators/decide.js.map +1 -1
- package/dist/magic-funcs/optimizers/promptify.js +1 -1
- package/dist/magic-funcs/optimizers/promptify.js.map +1 -1
- package/dist/magic-funcs/optimizers/ragify.js +1 -1
- package/dist/magic-funcs/optimizers/ragify.js.map +1 -1
- package/dist/magic-funcs/parsers/extract.js +1 -1
- package/dist/magic-funcs/parsers/extract.js.map +1 -1
- package/dist/magic-funcs/parsers/rewrite.js +1 -1
- package/dist/magic-funcs/parsers/rewrite.js.map +1 -1
- package/dist/magic-funcs/parsers/structure.js +1 -1
- package/dist/magic-funcs/parsers/structure.js.map +1 -1
- package/dist/magic-funcs/parsers/summarize.js +1 -1
- package/dist/magic-funcs/parsers/summarize.js.map +1 -1
- package/dist/modalities/image-gen/generateImages.d.ts +5 -3
- package/dist/modalities/image-gen/generateImages.d.ts.map +1 -1
- package/dist/modalities/image-gen/generateImages.js +5 -5
- package/dist/modalities/image-gen/generateImages.js.map +1 -1
- package/dist/modalities/image-gen/helpers.d.ts +1 -1
- package/dist/modalities/image-gen/helpers.d.ts.map +1 -1
- package/dist/modalities/openrouter.d.ts +1 -1
- package/dist/modalities/openrouter.d.ts.map +1 -1
- package/dist/modalities/vision/vision.d.ts +5 -3
- package/dist/modalities/vision/vision.d.ts.map +1 -1
- package/dist/modalities/vision/vision.js +4 -5
- package/dist/modalities/vision/vision.js.map +1 -1
- package/package.json +1 -1
- package/dist/helpers/cli-llms.d.ts.map +0 -1
- package/dist/helpers/cli-llms.js.map +0 -1
- package/dist/helpers/llms.d.ts +0 -135
- package/dist/helpers/llms.d.ts.map +0 -1
- package/dist/helpers/llms.js.map +0 -1
- package/dist/modalities/speech/VoiceEngine.d.ts +0 -3
- package/dist/modalities/speech/VoiceEngine.d.ts.map +0 -1
- package/dist/modalities/speech/VoiceEngine.js +0 -3
- package/dist/modalities/speech/VoiceEngine.js.map +0 -1
- package/dist/modalities/speech/stt/helpers.d.ts +0 -3
- package/dist/modalities/speech/stt/helpers.d.ts.map +0 -1
- package/dist/modalities/speech/stt/helpers.js +0 -28
- package/dist/modalities/speech/stt/helpers.js.map +0 -1
- package/dist/modalities/speech/stt/stt.d.ts +0 -113
- package/dist/modalities/speech/stt/stt.d.ts.map +0 -1
- package/dist/modalities/speech/stt/stt.js +0 -177
- package/dist/modalities/speech/stt/stt.js.map +0 -1
- package/dist/modalities/speech/tts/helpers.d.ts +0 -12
- package/dist/modalities/speech/tts/helpers.d.ts.map +0 -1
- package/dist/modalities/speech/tts/helpers.js +0 -10
- package/dist/modalities/speech/tts/helpers.js.map +0 -1
- package/dist/modalities/speech/tts/tts.d.ts +0 -115
- package/dist/modalities/speech/tts/tts.d.ts.map +0 -1
- package/dist/modalities/speech/tts/tts.js +0 -142
- package/dist/modalities/speech/tts/tts.js.map +0 -1
package/README.md
CHANGED
|
@@ -7,7 +7,7 @@ Ein praktisches Utility-Package für LLM-Apps mit LangChain:
|
|
|
7
7
|
- RAG-Helper (FAISS, Supabase, In-Memory)
|
|
8
8
|
- Tooling (`ToolRegistry`, `CombinedToolRegistry`, `ZodiosToolRegistry`, `createRAGTool`, `tavilySearchTool`)
|
|
9
9
|
- Magic-Funcs (Parser, Evaluator, Optimizer, Answerer)
|
|
10
|
-
- Modalities (
|
|
10
|
+
- Modalities (Vision, Image Generation)
|
|
11
11
|
|
|
12
12
|
---
|
|
13
13
|
|
|
@@ -20,7 +20,7 @@ Im Package gilt als Standard-LLM-Default für die allgemeine Nutzung:
|
|
|
20
20
|
|
|
21
21
|
Wenn du nichts explizit setzt, orientiere dich an diesem Default in deinen Aufrufen.
|
|
22
22
|
|
|
23
|
-
Für
|
|
23
|
+
Für kostenlose Modelle gibt es bei `provider: "openrouter"` die Option `free: true` — sie wählt dynamisch das beste aktuell kostenlose `:free`-Model (siehe Schnellstart).
|
|
24
24
|
|
|
25
25
|
---
|
|
26
26
|
|
|
@@ -76,13 +76,37 @@ const llmGroq = getLLM({ provider: "chatgroq", model: "llama-3.3-70b-versatile"
|
|
|
76
76
|
const llmLocal = getLLM({ provider: "local", model: "llama3.2:3b" })
|
|
77
77
|
```
|
|
78
78
|
|
|
79
|
-
|
|
79
|
+
Kostenloses Model (OpenRouter):
|
|
80
80
|
|
|
81
81
|
```ts
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
82
|
+
// free: true → getLLM wird async und wählt live das beste aktuell
|
|
83
|
+
// kostenlose :free-Model mit Tool-Support. Doppel-Ranking: Intelligenz
|
|
84
|
+
// (sort=intelligence-high-to-low) UND Latenz (sort=latency-low-to-high),
|
|
85
|
+
// kombiniert per Rang-Summe — schlau, aber kein lahmer Reasoning-Brocken.
|
|
86
|
+
// Kein model-Prop erlaubt.
|
|
87
|
+
const llm = await getLLM({ provider: "openrouter", free: true })
|
|
88
|
+
|
|
89
|
+
console.log(llm.model) // z.B. "openai/gpt-oss-120b:free"
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
Verschwindet das gewählte Model später oder ist es nicht mehr gratis (400/402/403/404), heilt sich die Instanz selbst: nächstbestes `:free`-Model holen, `model` tauschen, Request transparent wiederholen.
|
|
93
|
+
|
|
94
|
+
**Free-Limits & `FreeLimitError`:** OpenRouter begrenzt `:free`-Models account-weit auf 20 Requests/Minute und 50 Requests/Tag (bzw. 1000/Tag ab 10 gekauften Credits). Weil ein Model-Wechsel dagegen nicht hilft, wird bei 429 nicht geheilt, sondern ein typisierter `FreeLimitError` geworfen — sauber filterbar fürs Frontend:
|
|
95
|
+
|
|
96
|
+
```ts
|
|
97
|
+
import { FreeLimitError } from "@delofarag/ai-utils"
|
|
98
|
+
|
|
99
|
+
try {
|
|
100
|
+
await llm.invoke(messages)
|
|
101
|
+
} catch (e) {
|
|
102
|
+
if (e instanceof FreeLimitError && e.scope === "day") {
|
|
103
|
+
// e.code === "FREE_LIMIT_EXCEEDED" (überlebt auch JSON-Serialisierung)
|
|
104
|
+
// e.retryAfterSeconds → Sekunden bis zum Reset, falls der Server sie liefert
|
|
105
|
+
showToast("Sie haben Ihre Free-Requests für heute verbraucht.")
|
|
106
|
+
} else if (e instanceof FreeLimitError && e.scope === "minute") {
|
|
107
|
+
showToast("Kurz durchatmen — max. 20 Free-Requests pro Minute.")
|
|
108
|
+
}
|
|
109
|
+
}
|
|
86
110
|
```
|
|
87
111
|
|
|
88
112
|
EU-Datenrouting (OpenRouter):
|
|
@@ -899,42 +923,6 @@ const short = await summarize({
|
|
|
899
923
|
|
|
900
924
|
## Modalities
|
|
901
925
|
|
|
902
|
-
### STT
|
|
903
|
-
|
|
904
|
-
- `stt(...)`
|
|
905
|
-
- `createSTTPhoneSocketSession(...)` für live phone socket chunks (Twilio/Telnyx-style)
|
|
906
|
-
|
|
907
|
-
```ts
|
|
908
|
-
import { stt } from "@delofarag/ai-utils"
|
|
909
|
-
|
|
910
|
-
const result = await stt({
|
|
911
|
-
audio: "./call.wav",
|
|
912
|
-
prompt: "Transcribe in German."
|
|
913
|
-
})
|
|
914
|
-
```
|
|
915
|
-
|
|
916
|
-
### TTS
|
|
917
|
-
|
|
918
|
-
- `tts(...)`
|
|
919
|
-
- `streamTTSOverPhoneSocket(...)` für chunked outbound audio
|
|
920
|
-
|
|
921
|
-
```ts
|
|
922
|
-
import { tts, streamTTSOverPhoneSocket } from "@delofarag/ai-utils"
|
|
923
|
-
|
|
924
|
-
const speech = await tts({
|
|
925
|
-
text: "Willkommen beim Support.",
|
|
926
|
-
model: "nova"
|
|
927
|
-
})
|
|
928
|
-
|
|
929
|
-
await streamTTSOverPhoneSocket({
|
|
930
|
-
text: "Einen Moment bitte.",
|
|
931
|
-
model: "nova",
|
|
932
|
-
onChunk: async (chunk) => {
|
|
933
|
-
// socket send
|
|
934
|
-
}
|
|
935
|
-
})
|
|
936
|
-
```
|
|
937
|
-
|
|
938
926
|
### Vision
|
|
939
927
|
|
|
940
928
|
```ts
|
|
@@ -1036,7 +1024,7 @@ Top-level Exports (`@delofarag/ai-utils`):
|
|
|
1036
1024
|
- Memory (`MemorySaver`, `SmartCheckpointSaver`, `SupabaseCheckpointSaver`, `chatSummarizer`)
|
|
1037
1025
|
- Tools (`ToolRegistry`, `CombinedToolRegistry`, `ZodiosToolRegistry`, `Tavily`, `RAGTool`)
|
|
1038
1026
|
- Magic-Funcs (answerers/evaluators/parsers/optimizers)
|
|
1039
|
-
- Modalities (`
|
|
1027
|
+
- Modalities (`vision`, `generateImages`)
|
|
1040
1028
|
|
|
1041
1029
|
Client-Subpath (`@delofarag/ai-utils/client`) — ohne LangChain-Bundle, für Frontend:
|
|
1042
1030
|
|
package/dist/heart/agent.d.ts
CHANGED
|
@@ -1,14 +1,21 @@
|
|
|
1
1
|
import { z } from "zod/v4";
|
|
2
|
-
import type
|
|
2
|
+
import { type InvokeInputBase, type OutputSchema, type ReasoningEvent } from "./chain";
|
|
3
3
|
import { DynamicStructuredTool } from "../imports";
|
|
4
4
|
import { BaseChatModel } from "../imports";
|
|
5
5
|
import { BaseCheckpointSaver } from "../imports";
|
|
6
|
+
import { type MCPServersInput } from "./tools/MCP";
|
|
6
7
|
interface AgentProps<T extends OutputSchema | undefined = undefined> {
|
|
7
8
|
tools: DynamicStructuredTool[];
|
|
8
9
|
prompt?: string | Array<string>;
|
|
9
10
|
llm?: BaseChatModel;
|
|
10
11
|
output?: T;
|
|
11
12
|
checkpointer?: BaseCheckpointSaver;
|
|
13
|
+
/**
|
|
14
|
+
* MCP-Server, deren Tools dem Agent zur Verfügung gestellt werden.
|
|
15
|
+
* Pro invoke()/stream() wird ein frischer MultiServerMCPClient gebaut,
|
|
16
|
+
* die Tools per getTools() geladen und der Client am Ende wieder geschlossen.
|
|
17
|
+
*/
|
|
18
|
+
mcpServer?: MCPServersInput;
|
|
12
19
|
}
|
|
13
20
|
/**
|
|
14
21
|
* CONSTRUCTOR:
|
|
@@ -19,6 +26,7 @@ interface AgentProps<T extends OutputSchema | undefined = undefined> {
|
|
|
19
26
|
tools,
|
|
20
27
|
output,
|
|
21
28
|
checkpointer,
|
|
29
|
+
mcpServer,
|
|
22
30
|
}: AgentProps<T>) {
|
|
23
31
|
this.prompt = typeof prompt === "string" ? [["system", prompt]] : Array.isArray(prompt) ? prompt.map((p:string)=>{
|
|
24
32
|
if(typeof p === "string"){
|
|
@@ -36,6 +44,7 @@ interface AgentProps<T extends OutputSchema | undefined = undefined> {
|
|
|
36
44
|
this.llm = llm
|
|
37
45
|
this.output = output
|
|
38
46
|
this.checkpointer = checkpointer
|
|
47
|
+
this.mcpServer = mcpServer
|
|
39
48
|
}
|
|
40
49
|
* @param output - Zod-Schema: beschreibt die Struktur des Rückgabewerts von .invoke()
|
|
41
50
|
*/
|
|
@@ -46,8 +55,9 @@ export declare class Agent<T extends OutputSchema | undefined = undefined> {
|
|
|
46
55
|
private output;
|
|
47
56
|
private agent;
|
|
48
57
|
private checkpointer;
|
|
58
|
+
private mcpServer;
|
|
49
59
|
private should_use_output;
|
|
50
|
-
constructor({ prompt, llm, tools, output, checkpointer, }: AgentProps<T>);
|
|
60
|
+
constructor({ prompt, llm, tools, output, checkpointer, mcpServer, }: AgentProps<T>);
|
|
51
61
|
/** bruder ich weiss functional overloading tot aber muss hier sein! so kann sicher gesagt werden: wenn kein output gesetzt = string, wenn doch = z.infer<output>! */
|
|
52
62
|
invoke(this: Agent<undefined>, invokeInput: InvokeInputBase & {
|
|
53
63
|
thread_id?: string;
|
|
@@ -55,6 +65,11 @@ export declare class Agent<T extends OutputSchema | undefined = undefined> {
|
|
|
55
65
|
invoke<U extends OutputSchema>(this: Agent<U>, invokeInput: InvokeInputBase & {
|
|
56
66
|
thread_id?: string;
|
|
57
67
|
}): Promise<z.infer<U>>;
|
|
68
|
+
stream(invokeInput: InvokeInputBase & {
|
|
69
|
+
thread_id?: string;
|
|
70
|
+
stream_delay?: number;
|
|
71
|
+
showReasoning: true;
|
|
72
|
+
}): AsyncGenerator<string | ReasoningEvent, void, unknown>;
|
|
58
73
|
stream(invokeInput: InvokeInputBase & {
|
|
59
74
|
thread_id?: string;
|
|
60
75
|
stream_delay?: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/heart/agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAA;AAE1B,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/heart/agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAA;AAE1B,OAAO,EAAyB,KAAK,eAAe,EAAE,KAAK,YAAY,EAAE,KAAK,cAAc,EAAE,MAAM,SAAS,CAAA;AAC7G,OAAO,EAAE,qBAAqB,EAAC,MAAM,YAAY,CAAA;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAC1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAMhD,OAAO,EAAuC,KAAK,eAAe,EAAE,MAAM,aAAa,CAAA;AAqBvF,UAAU,UAAU,CAAC,CAAC,SAAS,YAAY,GAAG,SAAS,GAAG,SAAS;IAC/D,KAAK,EAAE,qBAAqB,EAAE,CAAA;IAC9B,MAAM,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAA;IAC/B,GAAG,CAAC,EAAE,aAAa,CAAA;IACnB,MAAM,CAAC,EAAE,CAAC,CAAA;IACV,YAAY,CAAC,EAAE,mBAAmB,CAAA;IAClC;;;;OAIG;IACH,SAAS,CAAC,EAAE,eAAe,CAAA;CAC9B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,qBAAa,KAAK,CAAC,CAAC,SAAS,YAAY,GAAG,SAAS,GAAG,SAAS;IAC7D,OAAO,CAAC,MAAM,CAA2B;IACzC,OAAO,CAAC,KAAK,CAAyB;IACtC,OAAO,CAAC,GAAG,CAAe;IAC1B,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,YAAY,CAAiC;IACrD,OAAO,CAAC,SAAS,CAA6B;IAC9C,OAAO,CAAC,iBAAiB,CAAgB;gBAE7B,EACR,MAA6C,EAC7C,GAAoE,EACpE,KAAK,EACL,MAAM,EACN,YAAY,EACZ,SAAS,GACZ,EAAE,UAAU,CAAC,CAAC,CAAC;IAoBhB,qKAAqK;IACxJ,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,EAAE,WAAW,EAAE,eAAe,GAAG;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IACtG,MAAM,CAAC,CAAC,SAAS,YAAY,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,eAAe,GAAG;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAgDhI,MAAM,CAAC,WAAW,EAAE,eAAe,GAAG;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,IAAI,CAAA;KAAE,GAAG,cAAc,CAAC,MAAM,GAAG,cAAc,EAAE,IAAI,EAAE,OAAO,CAAC;IACjK,MAAM,CAAC,WAAW,EAAE,eAAe,GAAG;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,cAAc,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC;IAqE3H,OAAO,CAAC,IAAI,EAAC,qBAAqB;IAIzC,IAAW,YAAY,IAAI,MAAM,EAAE,CAElC;CACJ"}
|
package/dist/heart/agent.js
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { PromptTemplate } from "@langchain/core/prompts";
|
|
2
|
+
import { extractReasoningDelta } from "./chain";
|
|
2
3
|
import { createReactAgent } from "../imports";
|
|
3
4
|
import { HumanMessage } from "../imports";
|
|
4
5
|
import { structure } from "../magic-funcs/parsers/structure";
|
|
5
|
-
import { getLLM } from "../helpers/llms";
|
|
6
|
+
import { getLLM } from "../helpers/llm/llms";
|
|
7
|
+
import { buildMcpClient, buildMcpPromptBlock } from "./tools/MCP";
|
|
6
8
|
async function resolveSystemPromptBlocks(blocks, promptVars) {
|
|
7
9
|
if (!promptVars || Object.keys(promptVars).length === 0) {
|
|
8
10
|
return blocks;
|
|
@@ -28,6 +30,7 @@ async function resolveSystemPromptBlocks(blocks, promptVars) {
|
|
|
28
30
|
tools,
|
|
29
31
|
output,
|
|
30
32
|
checkpointer,
|
|
33
|
+
mcpServer,
|
|
31
34
|
}: AgentProps<T>) {
|
|
32
35
|
this.prompt = typeof prompt === "string" ? [["system", prompt]] : Array.isArray(prompt) ? prompt.map((p:string)=>{
|
|
33
36
|
if(typeof p === "string"){
|
|
@@ -45,6 +48,7 @@ async function resolveSystemPromptBlocks(blocks, promptVars) {
|
|
|
45
48
|
this.llm = llm
|
|
46
49
|
this.output = output
|
|
47
50
|
this.checkpointer = checkpointer
|
|
51
|
+
this.mcpServer = mcpServer
|
|
48
52
|
}
|
|
49
53
|
* @param output - Zod-Schema: beschreibt die Struktur des Rückgabewerts von .invoke()
|
|
50
54
|
*/
|
|
@@ -55,8 +59,9 @@ export class Agent {
|
|
|
55
59
|
output;
|
|
56
60
|
agent;
|
|
57
61
|
checkpointer;
|
|
62
|
+
mcpServer;
|
|
58
63
|
should_use_output = true;
|
|
59
|
-
constructor({ prompt = `Du bist ein hilfreicher Assistent.`, llm = getLLM({ provider: "openrouter", model: "openai/gpt-5.4-mini" }), tools, output, checkpointer, }) {
|
|
64
|
+
constructor({ prompt = `Du bist ein hilfreicher Assistent.`, llm = getLLM({ provider: "openrouter", model: "openai/gpt-5.4-mini" }), tools, output, checkpointer, mcpServer, }) {
|
|
60
65
|
this.prompt = typeof prompt === "string" ? [["system", prompt]] : Array.isArray(prompt) ? prompt.map((p) => {
|
|
61
66
|
if (typeof p === "string") {
|
|
62
67
|
return ["system", p];
|
|
@@ -74,6 +79,7 @@ export class Agent {
|
|
|
74
79
|
this.llm = llm;
|
|
75
80
|
this.output = output;
|
|
76
81
|
this.checkpointer = checkpointer;
|
|
82
|
+
this.mcpServer = mcpServer;
|
|
77
83
|
}
|
|
78
84
|
async invoke(invokeInput) {
|
|
79
85
|
const { thread_id, debug, promptVars, ...variables } = invokeInput;
|
|
@@ -83,47 +89,60 @@ export class Agent {
|
|
|
83
89
|
console.warn("WARN: thread_id is provided but no checkpointer is set, so no state is stored");
|
|
84
90
|
const humanMessages = Object.entries(variables).map(([key, value]) => new HumanMessage(`${key}: ${typeof value === "object" ? JSON.stringify(value) : value}`));
|
|
85
91
|
const resolvedPrompt = await resolveSystemPromptBlocks(this.prompt, promptVars);
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
tools: this.tools,
|
|
89
|
-
checkpointSaver: this.checkpointer,
|
|
90
|
-
prompt: (state) => [
|
|
91
|
-
...resolvedPrompt,
|
|
92
|
-
...state.messages
|
|
93
|
-
]
|
|
94
|
-
});
|
|
92
|
+
const mcpBlock = buildMcpPromptBlock(this.mcpServer);
|
|
93
|
+
const promptBlocks = mcpBlock ? [...resolvedPrompt, ["system", mcpBlock]] : resolvedPrompt;
|
|
95
94
|
const config = thread_id && this.checkpointer ? { configurable: { thread_id } } : undefined;
|
|
96
95
|
if (thread_id && !this.checkpointer)
|
|
97
96
|
console.warn("thread_id wurde beim invoke des agenten mitgegeben aber kein checkpointer, somit wird nichts gespeichert und die thread_id ist gleichgültig");
|
|
98
|
-
const
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
97
|
+
const mcpClient = buildMcpClient(this.mcpServer);
|
|
98
|
+
try {
|
|
99
|
+
const tools = mcpClient ? [...this.tools, ...await mcpClient.getTools()] : this.tools;
|
|
100
|
+
this.agent = createReactAgent({
|
|
101
|
+
llm: this.llm,
|
|
102
|
+
tools: tools,
|
|
103
|
+
checkpointSaver: this.checkpointer,
|
|
104
|
+
prompt: (state) => [
|
|
105
|
+
...promptBlocks,
|
|
106
|
+
...state.messages
|
|
107
|
+
]
|
|
108
|
+
});
|
|
109
|
+
const result = await this.agent.invoke({ messages: humanMessages }, config);
|
|
110
|
+
if (debug)
|
|
111
|
+
return result;
|
|
112
|
+
const lastMessage = result.messages[result.messages.length - 1];
|
|
113
|
+
const raw = lastMessage?.content;
|
|
114
|
+
const content = typeof raw === "string" ? raw : (Array.isArray(raw) ? raw.map((c) => c?.text ?? c).join("") : String(raw ?? ""));
|
|
115
|
+
if (this.output && this.should_use_output) {
|
|
116
|
+
return await structure({ data: content, into: this.output, llm: this.llm });
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
return content;
|
|
120
|
+
}
|
|
106
121
|
}
|
|
107
|
-
|
|
108
|
-
|
|
122
|
+
finally {
|
|
123
|
+
await mcpClient?.close();
|
|
109
124
|
}
|
|
110
125
|
}
|
|
111
126
|
async *stream(invokeInput) {
|
|
112
127
|
this.should_use_output = false;
|
|
128
|
+
const mcpClient = buildMcpClient(this.mcpServer);
|
|
113
129
|
try {
|
|
114
|
-
const { thread_id, promptVars, ...variables } = invokeInput;
|
|
130
|
+
const { thread_id, promptVars, showReasoning, ...variables } = invokeInput;
|
|
115
131
|
if (this.checkpointer && !thread_id)
|
|
116
132
|
throw new Error("thread_id is required when using checkpointer, else no state is stored");
|
|
117
133
|
if (!this.checkpointer && thread_id)
|
|
118
134
|
console.warn("WARN: thread_id is provided but no checkpointer is set, so no state is stored");
|
|
119
135
|
const humanMessages = Object.entries(variables).map(([key, value]) => new HumanMessage(`${key}: ${typeof value === "object" ? JSON.stringify(value) : value}`));
|
|
120
136
|
const resolvedPrompt = await resolveSystemPromptBlocks(this.prompt, promptVars);
|
|
137
|
+
const mcpBlock = buildMcpPromptBlock(this.mcpServer);
|
|
138
|
+
const promptBlocks = mcpBlock ? [...resolvedPrompt, ["system", mcpBlock]] : resolvedPrompt;
|
|
139
|
+
const tools = mcpClient ? [...this.tools, ...await mcpClient.getTools()] : this.tools;
|
|
121
140
|
this.agent = createReactAgent({
|
|
122
141
|
llm: this.llm,
|
|
123
|
-
tools:
|
|
142
|
+
tools: tools,
|
|
124
143
|
checkpointSaver: this.checkpointer,
|
|
125
144
|
prompt: (state) => [
|
|
126
|
-
...
|
|
145
|
+
...promptBlocks,
|
|
127
146
|
...state.messages
|
|
128
147
|
]
|
|
129
148
|
});
|
|
@@ -139,6 +158,11 @@ export class Agent {
|
|
|
139
158
|
if (node === "tools" || messageType === "tool") {
|
|
140
159
|
continue;
|
|
141
160
|
}
|
|
161
|
+
if (showReasoning) {
|
|
162
|
+
const reasoning = extractReasoningDelta(messageChunk);
|
|
163
|
+
if (reasoning)
|
|
164
|
+
yield { kind: "reasoning", text: reasoning };
|
|
165
|
+
}
|
|
142
166
|
const raw = messageChunk?.content;
|
|
143
167
|
if (typeof raw === "string") {
|
|
144
168
|
if (raw.length > 0)
|
|
@@ -154,6 +178,7 @@ export class Agent {
|
|
|
154
178
|
}
|
|
155
179
|
finally {
|
|
156
180
|
this.should_use_output = true;
|
|
181
|
+
await mcpClient?.close();
|
|
157
182
|
}
|
|
158
183
|
}
|
|
159
184
|
addTool(tool) {
|
package/dist/heart/agent.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/heart/agent.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;
|
|
1
|
+
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/heart/agent.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AACxD,OAAO,EAAE,qBAAqB,EAAgE,MAAM,SAAS,CAAA;AAI7G,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAC7C,OAAO,EAAE,YAAY,EAAC,MAAM,YAAY,CAAA;AAExC,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAA;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAC5C,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAwB,MAAM,aAAa,CAAA;AAEvF,KAAK,UAAU,yBAAyB,CACpC,MAAiC,EACjC,UAAgC;IAEhC,IAAI,CAAC,UAAU,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtD,OAAO,MAAM,CAAA;IACjB,CAAC;IACD,MAAM,GAAG,GAA8B,EAAE,CAAA;IACzC,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,MAAM,EAAE,CAAC;QAChC,IAAI,CAAC;YACD,MAAM,SAAS,GAAG,MAAM,cAAc,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,UAAiC,CAAC,CAAA;YACnG,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAA;QAC/B,CAAC;QAAC,MAAM,CAAC;YACL,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAA;QAC1B,CAAC;IACL,CAAC;IACD,OAAO,GAAG,CAAA;AACd,CAAC;AAgBD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,MAAM,OAAO,KAAK;IACN,MAAM,CAA2B;IACjC,KAAK,CAAyB;IAC9B,GAAG,CAAe;IAClB,MAAM,CAAe;IACrB,KAAK,CAAK;IACV,YAAY,CAAiC;IAC7C,SAAS,CAA6B;IACtC,iBAAiB,GAAY,IAAI,CAAA;IAEzC,YAAY,EACR,MAAM,GAAG,oCAAoC,EAC7C,GAAG,GAAG,MAAM,CAAC,EAAE,QAAQ,EAAC,YAAY,EAAE,KAAK,EAAE,qBAAqB,EAAC,CAAC,EACpE,KAAK,EACL,MAAM,EACN,YAAY,EACZ,SAAS,GACG;QACZ,IAAI,CAAC,MAAM,GAAG,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAQ,EAAC,EAAE;YAC7G,IAAG,OAAO,CAAC,KAAK,QAAQ,EAAC,CAAC;gBACtB,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAA;YACxB,CAAC;iBAAM,CAAC;gBACJ,OAAO,CAAC,CAAA,CAAC,mEAAmE;YAChF,CAAC;QACL,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;QACP,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAC;;;;wEAIqC,CAAC,CAAC,CAAA;QAClE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;QAClB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAA;QACd,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,YAAY,GAAG,YAAY,CAAA;QAChC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;IAC9B,CAAC;IAKM,KAAK,CAAC,MAAM,CAAC,WAAqD;QACrE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,SAAS,EAAE,GAAG,WAAW,CAAA;QAElE,IAAG,IAAI,CAAC,YAAY,IAAI,CAAC,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,wEAAwE,CAAC,CAAA;QAC7H,IAAG,CAAC,IAAI,CAAC,YAAY,IAAI,SAAS;YAAE,OAAO,CAAC,IAAI,CAAC,+EAA+E,CAAC,CAAA;QAEjI,MAAM,aAAa,GAAmB,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,GAAG,CAC/D,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,IAAI,YAAY,CAAC,GAAG,GAAG,KAAK,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAC7G,CAAC;QAEF,MAAM,cAAc,GAAG,MAAM,yBAAyB,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;QAC/E,MAAM,QAAQ,GAAG,mBAAmB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QACpD,MAAM,YAAY,GAA8B,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,cAAc,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAA;QAErH,MAAM,MAAM,GAAG,SAAS,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAA;QAC3F,IAAG,SAAS,IAAI,CAAC,IAAI,CAAC,YAAY;YAAE,OAAO,CAAC,IAAI,CAAC,6IAA6I,CAAC,CAAA;QAE/L,MAAM,SAAS,GAAG,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QAChD,IAAI,CAAC;YACD,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,GAAG,MAAM,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAA;YAErF,IAAI,CAAC,KAAK,GAAG,gBAAgB,CAAC;gBAC1B,GAAG,EAAE,IAAI,CAAC,GAAU;gBACpB,KAAK,EAAE,KAAY;gBACnB,eAAe,EAAE,IAAI,CAAC,YAAmB;gBACzC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC;oBACf,GAAG,YAAY;oBACf,GAAG,KAAK,CAAC,QAAQ;iBACpB;aACJ,CAAC,CAAA;YAEF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,aAAa,EAAS,EAAE,MAAM,CAAC,CAAA;YAClF,IAAG,KAAK;gBAAE,OAAO,MAAM,CAAA;YACvB,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;YAC/D,MAAM,GAAG,GAAG,WAAW,EAAE,OAAO,CAAA;YAChC,MAAM,OAAO,GAAG,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,CAAA;YAErI,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBACxC,OAAO,MAAM,SAAS,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAA;YAC/E,CAAC;iBAAM,CAAC;gBACJ,OAAO,OAAO,CAAA;YAClB,CAAC;QACL,CAAC;gBAAS,CAAC;YACP,MAAM,SAAS,EAAE,KAAK,EAAE,CAAA;QAC5B,CAAC;IACL,CAAC;IAIM,KAAK,CAAC,CAAC,MAAM,CAAC,WAAqG;QACtH,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAA;QAC9B,MAAM,SAAS,GAAG,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QAChD,IAAI,CAAC;YACD,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,GAAG,SAAS,EAAE,GAAG,WAAW,CAAA;YAE1E,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,SAAS;gBAAE,MAAM,IAAI,KAAK,CAAC,wEAAwE,CAAC,CAAA;YAC9H,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,SAAS;gBAAE,OAAO,CAAC,IAAI,CAAC,+EAA+E,CAAC,CAAA;YAElI,MAAM,aAAa,GAAmB,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,GAAG,CAC/D,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,IAAI,YAAY,CAAC,GAAG,GAAG,KAAK,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAC7G,CAAA;YAED,MAAM,cAAc,GAAG,MAAM,yBAAyB,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;YAC/E,MAAM,QAAQ,GAAG,mBAAmB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;YACpD,MAAM,YAAY,GAA8B,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,cAAc,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAA;YAErH,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,GAAG,MAAM,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAA;YAErF,IAAI,CAAC,KAAK,GAAG,gBAAgB,CAAC;gBAC1B,GAAG,EAAE,IAAI,CAAC,GAAU;gBACpB,KAAK,EAAE,KAAY;gBACnB,eAAe,EAAE,IAAI,CAAC,YAAmB;gBACzC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC;oBACf,GAAG,YAAY;oBACf,GAAG,KAAK,CAAC,QAAQ;iBACpB;aACJ,CAAC,CAAA;YAEF,MAAM,MAAM,GAAG,SAAS,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAA;YAC3F,IAAI,SAAS,IAAI,CAAC,IAAI,CAAC,YAAY;gBAAE,OAAO,CAAC,IAAI,CAAC,6IAA6I,CAAC,CAAA;YAEhM,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CACxC,EAAE,QAAQ,EAAE,aAAa,EAAS,EAClC,EAAE,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,UAAU,EAAE,UAAU,EAAS,CACvD,CAAA;YAED,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,YAAY,EAAE,CAAC;gBACrC,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;gBAC5D,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;gBAC5D,MAAM,IAAI,GAAG,QAAQ,EAAE,cAAc,CAAA;gBACrC,MAAM,WAAW,GAAG,OAAO,YAAY,EAAE,QAAQ,KAAK,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,YAAY,EAAE,QAAQ,CAAA;gBAEnH,IAAI,IAAI,KAAK,OAAO,IAAI,WAAW,KAAK,MAAM,EAAE,CAAC;oBAC7C,SAAQ;gBACZ,CAAC;gBAED,IAAI,aAAa,EAAE,CAAC;oBAChB,MAAM,SAAS,GAAG,qBAAqB,CAAC,YAAY,CAAC,CAAA;oBACrD,IAAI,SAAS;wBAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,EAAE,CAAA;gBAC/D,CAAC;gBAED,MAAM,GAAG,GAAG,YAAY,EAAE,OAAO,CAAA;gBACjC,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;oBAC1B,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC;wBAAE,MAAM,GAAG,CAAA;oBAC7B,SAAQ;gBACZ,CAAC;gBACD,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;oBACrB,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,IAAS,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;oBAC9D,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;wBAAE,MAAM,IAAI,CAAA;gBACnC,CAAC;YACL,CAAC;QACL,CAAC;gBAAS,CAAC;YACP,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAA;YAC7B,MAAM,SAAS,EAAE,KAAK,EAAE,CAAA;QAC5B,CAAC;IACL,CAAC;IAEM,OAAO,CAAC,IAA0B;QACrC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACzB,CAAC;IAED,IAAW,YAAY;QACnB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC5C,CAAC;CACJ"}
|
package/dist/heart/chain.d.ts
CHANGED
|
@@ -14,6 +14,17 @@ export interface InvokeInputBase {
|
|
|
14
14
|
promptVars?: Record<string, any>;
|
|
15
15
|
[key: string]: any;
|
|
16
16
|
}
|
|
17
|
+
/** Reasoning-Delta im Stream — kommt nur bei `showReasoning: true` und nur, wenn das Model Reasoning liefert. */
|
|
18
|
+
export type ReasoningEvent = {
|
|
19
|
+
kind: "reasoning";
|
|
20
|
+
text: string;
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Liest das Reasoning-Delta aus einem LangChain-Message-Chunk: `reasoning_content`
|
|
24
|
+
* (mappt @langchain/openai selbst) bzw. OpenRouters `delta.reasoning` aus der
|
|
25
|
+
* Roh-Response (nur vorhanden, wenn das LLM mit `__includeRawResponse` gebaut wurde).
|
|
26
|
+
*/
|
|
27
|
+
export declare function extractReasoningDelta(messageChunk: any): string | undefined;
|
|
17
28
|
interface ChainProps<T extends OutputSchema> {
|
|
18
29
|
prompt?: string | Array<string | MessagesPlaceholder<any>>;
|
|
19
30
|
llm?: BaseChatModel;
|
|
@@ -52,6 +63,10 @@ export declare class Chain<T extends OutputSchema = typeof DEFAULT_OUTPUT_SCHEMA
|
|
|
52
63
|
private output;
|
|
53
64
|
constructor({ prompt, llm, output, vectorStore }?: ChainProps<T>);
|
|
54
65
|
invoke(input: InvokeInputBase): Promise<z.infer<T>>;
|
|
66
|
+
stream(input: Record<string, any> & {
|
|
67
|
+
debug?: boolean;
|
|
68
|
+
showReasoning: true;
|
|
69
|
+
}): AsyncGenerator<string | ReasoningEvent, void, unknown>;
|
|
55
70
|
stream(input: Record<string, any> & {
|
|
56
71
|
debug?: boolean;
|
|
57
72
|
}): AsyncGenerator<string, void, unknown>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chain.d.ts","sourceRoot":"","sources":["../../src/heart/chain.ts"],"names":[],"mappings":"AACA,OAAO,EACH,aAAa,EAGb,mBAAmB,EACnB,WAAW,EAGd,MAAM,YAAY,CAAA;AAEnB,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAA;AAG1B,wEAAwE;AACxE,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAA;AAEpD,eAAO,MAAM,qBAAqB;;iBAEhC,CAAA;AAEF;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC5B,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAChC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CACrB;AAED,UAAU,UAAU,CAAC,CAAC,SAAS,YAAY;IACvC,MAAM,CAAC,EAAC,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAA;IACzD,GAAG,CAAC,EAAC,aAAa,CAAA;IAClB,MAAM,CAAC,EAAC,CAAC,CAAC;IACV,WAAW,CAAC,EAAE,WAAW,CAAA;CAC5B;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,KAAK,CAAC,CAAC,SAAS,YAAY,GAAG,OAAO,qBAAqB;IACpE,OAAO,CAAC,MAAM,CAA+D;IAC7E,OAAO,CAAC,WAAW,CAAyB;IAC5C,OAAO,CAAC,sBAAsB,CAAY;IAC1C,OAAO,CAAC,MAAM,CAA0B;IACxC,OAAO,CAAC,GAAG,CAAc;IACzB,OAAO,CAAC,MAAM,CAAE;gBAEJ,EACR,MAA4C,EAC5C,GAAoE,EACpE,MAAmD,EACnD,WAAuB,EAC1B,GAAC,UAAU,CAAC,CAAC,CAAM;IAcP,MAAM,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"chain.d.ts","sourceRoot":"","sources":["../../src/heart/chain.ts"],"names":[],"mappings":"AACA,OAAO,EACH,aAAa,EAGb,mBAAmB,EACnB,WAAW,EAGd,MAAM,YAAY,CAAA;AAEnB,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAA;AAG1B,wEAAwE;AACxE,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAA;AAEpD,eAAO,MAAM,qBAAqB;;iBAEhC,CAAA;AAEF;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC5B,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAChC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CACrB;AAED,iHAAiH;AACjH,MAAM,MAAM,cAAc,GAAG;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAA;AAEhE;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,YAAY,EAAE,GAAG,GAAG,MAAM,GAAG,SAAS,CAQ3E;AAED,UAAU,UAAU,CAAC,CAAC,SAAS,YAAY;IACvC,MAAM,CAAC,EAAC,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAA;IACzD,GAAG,CAAC,EAAC,aAAa,CAAA;IAClB,MAAM,CAAC,EAAC,CAAC,CAAC;IACV,WAAW,CAAC,EAAE,WAAW,CAAA;CAC5B;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,KAAK,CAAC,CAAC,SAAS,YAAY,GAAG,OAAO,qBAAqB;IACpE,OAAO,CAAC,MAAM,CAA+D;IAC7E,OAAO,CAAC,WAAW,CAAyB;IAC5C,OAAO,CAAC,sBAAsB,CAAY;IAC1C,OAAO,CAAC,MAAM,CAA0B;IACxC,OAAO,CAAC,GAAG,CAAc;IACzB,OAAO,CAAC,MAAM,CAAE;gBAEJ,EACR,MAA4C,EAC5C,GAAoE,EACpE,MAAmD,EACnD,WAAuB,EAC1B,GAAC,UAAU,CAAC,CAAC,CAAM;IAcP,MAAM,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IA4CzD,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG;QAAE,KAAK,CAAC,EAAE,OAAO,CAAC;QAAC,aAAa,EAAE,IAAI,CAAA;KAAE,GAAG,cAAc,CAAC,MAAM,GAAG,cAAc,EAAE,IAAI,EAAE,OAAO,CAAC;IACrI,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,cAAc,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC;IAiEtG,8EAA8E;IACjE,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC;IAWjC,UAAU,CAAC,WAAW,EAAE,WAAW;IAKnC,YAAY;CAKtB"}
|
package/dist/heart/chain.js
CHANGED
|
@@ -1,10 +1,25 @@
|
|
|
1
1
|
import { StructuredOutputParser, ChatPromptTemplate, createRetrievalChain, createStuffDocumentsChain, } from "../imports";
|
|
2
2
|
import { turn_to_docs, baseSplitter } from "../helpers/rag";
|
|
3
3
|
import { z } from "zod/v4";
|
|
4
|
-
import { getLLM } from "../helpers/llms";
|
|
4
|
+
import { getLLM } from "../helpers/llm/llms";
|
|
5
5
|
export const DEFAULT_OUTPUT_SCHEMA = z.object({
|
|
6
6
|
output: z.string().describe("Dein Output zur anfrage des Users")
|
|
7
7
|
});
|
|
8
|
+
/**
|
|
9
|
+
* Liest das Reasoning-Delta aus einem LangChain-Message-Chunk: `reasoning_content`
|
|
10
|
+
* (mappt @langchain/openai selbst) bzw. OpenRouters `delta.reasoning` aus der
|
|
11
|
+
* Roh-Response (nur vorhanden, wenn das LLM mit `__includeRawResponse` gebaut wurde).
|
|
12
|
+
*/
|
|
13
|
+
export function extractReasoningDelta(messageChunk) {
|
|
14
|
+
const kwargs = messageChunk?.additional_kwargs;
|
|
15
|
+
if (typeof kwargs?.reasoning_content === "string" && kwargs.reasoning_content.length > 0) {
|
|
16
|
+
return kwargs.reasoning_content;
|
|
17
|
+
}
|
|
18
|
+
const raw = kwargs?.__raw_response?.choices?.[0]?.delta?.reasoning;
|
|
19
|
+
if (typeof raw === "string" && raw.length > 0)
|
|
20
|
+
return raw;
|
|
21
|
+
return undefined;
|
|
22
|
+
}
|
|
8
23
|
/**
|
|
9
24
|
* CONSTRUCTOR:
|
|
10
25
|
* @example
|
|
@@ -102,6 +117,8 @@ export class Chain {
|
|
|
102
117
|
for (const key in input) {
|
|
103
118
|
if (key === "debug")
|
|
104
119
|
continue;
|
|
120
|
+
if (key === "showReasoning")
|
|
121
|
+
continue;
|
|
105
122
|
if (key === "thread_id") {
|
|
106
123
|
console.error("eine normale chain hat keine memory, deswegen wird thread_id ignoriert");
|
|
107
124
|
continue;
|
|
@@ -128,6 +145,11 @@ export class Chain {
|
|
|
128
145
|
const streamChain = true_prompt.pipe(this.llm);
|
|
129
146
|
const stream = await streamChain.stream({ ...invokeInput, context: contextText });
|
|
130
147
|
for await (const chunk of stream) {
|
|
148
|
+
if (input.showReasoning) {
|
|
149
|
+
const reasoning = extractReasoningDelta(chunk);
|
|
150
|
+
if (reasoning)
|
|
151
|
+
yield { kind: "reasoning", text: reasoning };
|
|
152
|
+
}
|
|
131
153
|
if (chunk && typeof chunk === 'object' && 'content' in chunk) {
|
|
132
154
|
yield chunk.content;
|
|
133
155
|
}
|
|
@@ -143,6 +165,11 @@ export class Chain {
|
|
|
143
165
|
console.log("created normal chain (streaming)");
|
|
144
166
|
const stream = await streamChain.stream(invokeInput);
|
|
145
167
|
for await (const chunk of stream) {
|
|
168
|
+
if (input.showReasoning) {
|
|
169
|
+
const reasoning = extractReasoningDelta(chunk);
|
|
170
|
+
if (reasoning)
|
|
171
|
+
yield { kind: "reasoning", text: reasoning };
|
|
172
|
+
}
|
|
146
173
|
if (chunk && typeof chunk === 'object' && 'content' in chunk) {
|
|
147
174
|
yield chunk.content;
|
|
148
175
|
}
|
package/dist/heart/chain.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chain.js","sourceRoot":"","sources":["../../src/heart/chain.ts"],"names":[],"mappings":"AACA,OAAO,EAEH,sBAAsB,EACtB,kBAAkB,EAGlB,oBAAoB,EACpB,yBAAyB,GAC5B,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC3D,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAA;AAC1B,OAAO,EAAE,MAAM,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"chain.js","sourceRoot":"","sources":["../../src/heart/chain.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { z } from "zod/v4";
|
|
2
2
|
import type { OutputSchema } from "./chain";
|
|
3
3
|
import { DynamicStructuredTool, BaseChatModel, BaseCheckpointSaver, type AgentMiddleware, type BaseStore, type CreateDeepAgentParams, type SubAgent, type FilesystemPermission } from "../imports";
|
|
4
|
-
import
|
|
4
|
+
import { type MCPServersInput } from "./tools/MCP";
|
|
5
|
+
import type { DeepAgentInterrupt, DeepAgentRunInputBase, DeepAgentHitlFields, DeepAgentShowToolCallsField, DeepAgentShowReasoningField, DeepAgentToolEvent, DeepAgentReasoningEvent } from "../helpers/deepagent/interruptTypes";
|
|
5
6
|
import { type DeepAgentInterruptableToolName, type InterruptOnFor } from "../helpers/deepagent/interruptOn";
|
|
6
7
|
import type { DeepAgentBackend } from "../helpers/deepagent/backend";
|
|
7
8
|
interface DeepAgentProps<T extends OutputSchema | undefined = undefined, TTools extends readonly DynamicStructuredTool[] = readonly [], TBackend extends DeepAgentBackend | undefined = undefined> {
|
|
@@ -20,6 +21,14 @@ interface DeepAgentProps<T extends OutputSchema | undefined = undefined, TTools
|
|
|
20
21
|
store?: BaseStore;
|
|
21
22
|
name?: string;
|
|
22
23
|
contextSchema?: CreateDeepAgentParams["contextSchema"];
|
|
24
|
+
/**
|
|
25
|
+
* MCP-Server, deren Tools dem Deep Agent zur Verfügung gestellt werden.
|
|
26
|
+
* Pro invoke()/stream() wird ein frischer MultiServerMCPClient gebaut,
|
|
27
|
+
* die Tools per getTools() geladen und der Client am Ende geschlossen.
|
|
28
|
+
* Achtung: bei gesetztem mcpServer wird der Agent-Cache umgangen
|
|
29
|
+
* (Neuaufbau pro Aufruf), damit close() den Client nicht für Folge-Calls killt.
|
|
30
|
+
*/
|
|
31
|
+
mcpServer?: MCPServersInput;
|
|
23
32
|
}
|
|
24
33
|
/**
|
|
25
34
|
* @example
|
|
@@ -77,8 +86,9 @@ export declare class DeepAgent<T extends OutputSchema | undefined = undefined, c
|
|
|
77
86
|
private store;
|
|
78
87
|
private name;
|
|
79
88
|
private contextSchema;
|
|
89
|
+
private mcpServer;
|
|
80
90
|
private should_use_output;
|
|
81
|
-
constructor({ prompt, llm, tools, output, checkpointer, agentsMd, subagents, backend, permissions, skills, middleware, interruptOn, store, name, contextSchema, }?: DeepAgentProps<T, TTools, TBackend>);
|
|
91
|
+
constructor({ prompt, llm, tools, output, checkpointer, agentsMd, subagents, backend, permissions, skills, middleware, interruptOn, store, name, contextSchema, mcpServer, }?: DeepAgentProps<T, TTools, TBackend>);
|
|
82
92
|
static create<const TTools extends readonly DynamicStructuredTool[], TBackend extends DeepAgentBackend | undefined = undefined>(props: DeepAgentProps<undefined, TTools, TBackend> & {
|
|
83
93
|
interruptOn: InterruptOnFor<DeepAgentInterruptableToolName<TTools, TBackend>>;
|
|
84
94
|
}): DeepAgent<undefined, TTools, TBackend, true>;
|
|
@@ -88,6 +98,8 @@ export declare class DeepAgent<T extends OutputSchema | undefined = undefined, c
|
|
|
88
98
|
static create<const TTools extends readonly DynamicStructuredTool[], TBackend extends DeepAgentBackend | undefined = undefined>(props: DeepAgentProps<undefined, TTools, TBackend>): DeepAgent<undefined, TTools, TBackend, false>;
|
|
89
99
|
static create<const TTools extends readonly DynamicStructuredTool[], TBackend extends DeepAgentBackend | undefined = undefined, U extends OutputSchema = OutputSchema>(props: DeepAgentProps<U, TTools, TBackend>): DeepAgent<U, TTools, TBackend, false>;
|
|
90
100
|
private markAgentDirty;
|
|
101
|
+
private get hasMcp();
|
|
102
|
+
private systemPromptWithMcp;
|
|
91
103
|
private ensureAgent;
|
|
92
104
|
private buildConfig;
|
|
93
105
|
private validateThreadConfig;
|
|
@@ -100,10 +112,14 @@ export declare class DeepAgent<T extends OutputSchema | undefined = undefined, c
|
|
|
100
112
|
invoke<U extends OutputSchema>(this: DeepAgent<U, TTools, TBackend, true>, invokeInput: DeepAgentRunInputBase & DeepAgentHitlFields): Promise<z.infer<U> | DeepAgentInterrupt>;
|
|
101
113
|
invoke(this: DeepAgent<undefined, TTools, TBackend, false>, invokeInput: DeepAgentRunInputBase): Promise<string>;
|
|
102
114
|
invoke<U extends OutputSchema>(this: DeepAgent<U, TTools, TBackend, false>, invokeInput: DeepAgentRunInputBase): Promise<z.infer<U>>;
|
|
103
|
-
stream(this: DeepAgent<T, TTools, TBackend, true>, invokeInput: DeepAgentRunInputBase & DeepAgentHitlFields): AsyncGenerator<string | DeepAgentInterrupt, void, unknown>;
|
|
115
|
+
stream(this: DeepAgent<T, TTools, TBackend, true>, invokeInput: DeepAgentRunInputBase & DeepAgentHitlFields & DeepAgentShowToolCallsField & DeepAgentShowReasoningField): AsyncGenerator<string | DeepAgentInterrupt | DeepAgentToolEvent | DeepAgentReasoningEvent, void, unknown>;
|
|
104
116
|
stream(this: DeepAgent<T, TTools, TBackend, true>, invokeInput: DeepAgentRunInputBase & DeepAgentHitlFields & DeepAgentShowToolCallsField): AsyncGenerator<string | DeepAgentInterrupt | DeepAgentToolEvent, void, unknown>;
|
|
105
|
-
stream(this: DeepAgent<T, TTools, TBackend,
|
|
117
|
+
stream(this: DeepAgent<T, TTools, TBackend, true>, invokeInput: DeepAgentRunInputBase & DeepAgentHitlFields & DeepAgentShowReasoningField): AsyncGenerator<string | DeepAgentInterrupt | DeepAgentReasoningEvent, void, unknown>;
|
|
118
|
+
stream(this: DeepAgent<T, TTools, TBackend, true>, invokeInput: DeepAgentRunInputBase & DeepAgentHitlFields): AsyncGenerator<string | DeepAgentInterrupt, void, unknown>;
|
|
119
|
+
stream(this: DeepAgent<T, TTools, TBackend, false>, invokeInput: DeepAgentRunInputBase & DeepAgentShowToolCallsField & DeepAgentShowReasoningField): AsyncGenerator<string | DeepAgentToolEvent | DeepAgentReasoningEvent, void, unknown>;
|
|
106
120
|
stream(this: DeepAgent<T, TTools, TBackend, false>, invokeInput: DeepAgentRunInputBase & DeepAgentShowToolCallsField): AsyncGenerator<string | DeepAgentToolEvent, void, unknown>;
|
|
121
|
+
stream(this: DeepAgent<T, TTools, TBackend, false>, invokeInput: DeepAgentRunInputBase & DeepAgentShowReasoningField): AsyncGenerator<string | DeepAgentReasoningEvent, void, unknown>;
|
|
122
|
+
stream(this: DeepAgent<T, TTools, TBackend, false>, invokeInput: DeepAgentRunInputBase): AsyncGenerator<string, void, unknown>;
|
|
107
123
|
addTool(tool: DynamicStructuredTool): void;
|
|
108
124
|
get currentTools(): string[];
|
|
109
125
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deepAgent.d.ts","sourceRoot":"","sources":["../../src/heart/deepAgent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAA;AAE1B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAC3C,OAAO,EACH,qBAAqB,EACrB,aAAa,EACb,mBAAmB,EAInB,KAAK,eAAe,EACpB,KAAK,SAAS,EACd,KAAK,qBAAqB,EAC1B,KAAK,QAAQ,EACb,KAAK,oBAAoB,EAC5B,MAAM,YAAY,CAAA;AAGnB,OAAO,KAAK,EACR,kBAAkB,EAClB,qBAAqB,EACrB,mBAAmB,EACnB,2BAA2B,EAC3B,kBAAkB,
|
|
1
|
+
{"version":3,"file":"deepAgent.d.ts","sourceRoot":"","sources":["../../src/heart/deepAgent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAA;AAE1B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAC3C,OAAO,EACH,qBAAqB,EACrB,aAAa,EACb,mBAAmB,EAInB,KAAK,eAAe,EACpB,KAAK,SAAS,EACd,KAAK,qBAAqB,EAC1B,KAAK,QAAQ,EACb,KAAK,oBAAoB,EAC5B,MAAM,YAAY,CAAA;AAGnB,OAAO,EAAuC,KAAK,eAAe,EAAE,MAAM,aAAa,CAAA;AACvF,OAAO,KAAK,EACR,kBAAkB,EAClB,qBAAqB,EACrB,mBAAmB,EACnB,2BAA2B,EAC3B,2BAA2B,EAC3B,kBAAkB,EAClB,uBAAuB,EAE1B,MAAM,qCAAqC,CAAA;AAC5C,OAAO,EAMH,KAAK,8BAA8B,EACnC,KAAK,cAAc,EACtB,MAAM,kCAAkC,CAAA;AAEzC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAA;AAEpE,UAAU,cAAc,CACpB,CAAC,SAAS,YAAY,GAAG,SAAS,GAAG,SAAS,EAC9C,MAAM,SAAS,SAAS,qBAAqB,EAAE,GAAG,SAAS,EAAE,EAC7D,QAAQ,SAAS,gBAAgB,GAAG,SAAS,GAAG,SAAS;IAEzD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAA;IAC/B,GAAG,CAAC,EAAE,aAAa,CAAA;IACnB,MAAM,CAAC,EAAE,CAAC,CAAA;IACV,YAAY,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAA;IAC5C,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;IACnB,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAA;IACtB,OAAO,CAAC,EAAE,QAAQ,CAAA;IAClB,WAAW,CAAC,EAAE,oBAAoB,EAAE,CAAA;IACpC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;IACjB,UAAU,CAAC,EAAE,eAAe,EAAE,CAAA;IAC9B,WAAW,CAAC,EAAE,cAAc,CAAC,8BAA8B,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAA;IAC9E,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,aAAa,CAAC,EAAE,qBAAqB,CAAC,eAAe,CAAC,CAAA;IACtD;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,eAAe,CAAA;CAC9B;AAyBD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,qBAAa,SAAS,CAClB,CAAC,SAAS,YAAY,GAAG,SAAS,GAAG,SAAS,EAC9C,KAAK,CAAC,MAAM,SAAS,SAAS,qBAAqB,EAAE,GAAG,SAAS,EAAE,EACnE,QAAQ,SAAS,gBAAgB,GAAG,SAAS,GAAG,SAAS,EACzD,aAAa,SAAS,OAAO,GAAG,KAAK;IAErC,OAAO,CAAC,MAAM,CAA2B;IACzC,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,GAAG,CAAe;IAC1B,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,eAAe,CAAO;IAC9B,OAAO,CAAC,YAAY,CAA+B;IACnD,OAAO,CAAC,QAAQ,CAAsB;IACtC,OAAO,CAAC,SAAS,CAAwB;IACzC,OAAO,CAAC,OAAO,CAAsB;IACrC,OAAO,CAAC,WAAW,CAAoC;IACvD,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,UAAU,CAA+B;IACjD,OAAO,CAAC,WAAW,CAA8E;IACjG,OAAO,CAAC,KAAK,CAAuB;IACpC,OAAO,CAAC,IAAI,CAAoB;IAChC,OAAO,CAAC,aAAa,CAAwC;IAC7D,OAAO,CAAC,SAAS,CAA6B;IAC9C,OAAO,CAAC,iBAAiB,CAAgB;gBAE7B,EACR,MAA8C,EAC9C,GAAsE,EACtE,KAA+B,EAC/B,MAAM,EACN,YAAgC,EAChC,QAAQ,EACR,SAAS,EACT,OAAO,EACP,WAAW,EACX,MAAM,EACN,UAAU,EACV,WAAW,EACX,KAAK,EACL,IAAI,EACJ,aAAa,EACb,SAAS,GACZ,GAAE,cAAc,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,CAA6C;IAqBlF,MAAM,CAAC,MAAM,CACT,KAAK,CAAC,MAAM,SAAS,SAAS,qBAAqB,EAAE,EACrD,QAAQ,SAAS,gBAAgB,GAAG,SAAS,GAAG,SAAS,EAEzD,KAAK,EAAE,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,GAAG;QACjD,WAAW,EAAE,cAAc,CAAC,8BAA8B,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAA;KAChF,GACF,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC;IAC/C,MAAM,CAAC,MAAM,CACT,KAAK,CAAC,MAAM,SAAS,SAAS,qBAAqB,EAAE,EACrD,QAAQ,SAAS,gBAAgB,GAAG,SAAS,GAAG,SAAS,EACzD,CAAC,SAAS,YAAY,GAAG,YAAY,EAErC,KAAK,EAAE,cAAc,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,GAAG;QACzC,WAAW,EAAE,cAAc,CAAC,8BAA8B,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAA;KAChF,GACF,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC;IACvC,MAAM,CAAC,MAAM,CACT,KAAK,CAAC,MAAM,SAAS,SAAS,qBAAqB,EAAE,EACrD,QAAQ,SAAS,gBAAgB,GAAG,SAAS,GAAG,SAAS,EAEzD,KAAK,EAAE,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,GACnD,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC;IAChD,MAAM,CAAC,MAAM,CACT,KAAK,CAAC,MAAM,SAAS,SAAS,qBAAqB,EAAE,EACrD,QAAQ,SAAS,gBAAgB,GAAG,SAAS,GAAG,SAAS,EACzD,CAAC,SAAS,YAAY,GAAG,YAAY,EAErC,KAAK,EAAE,cAAc,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,GAC3C,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC;IAKxC,OAAO,CAAC,cAAc;IAItB,OAAO,KAAK,MAAM,GAGjB;IAED,OAAO,CAAC,mBAAmB;YAMb,WAAW;IAmCzB,OAAO,CAAC,WAAW;IAQnB,OAAO,CAAC,oBAAoB;YASd,eAAe;IAqB7B,OAAO,CAAC,kBAAkB;YAeZ,eAAe;YAqBd,eAAe;YA8Cf,eAAe;IAgCjB,MAAM,CACf,IAAI,EAAE,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,EAClD,WAAW,EAAE,qBAAqB,GAAG,mBAAmB,GACzD,OAAO,CAAC,MAAM,GAAG,kBAAkB,CAAC;IAC1B,MAAM,CAAC,CAAC,SAAS,YAAY,EACtC,IAAI,EAAE,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,EAC1C,WAAW,EAAE,qBAAqB,GAAG,mBAAmB,GACzD,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC;IAC9B,MAAM,CACf,IAAI,EAAE,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,EACnD,WAAW,EAAE,qBAAqB,GACnC,OAAO,CAAC,MAAM,CAAC;IACL,MAAM,CAAC,CAAC,SAAS,YAAY,EACtC,IAAI,EAAE,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,EAC3C,WAAW,EAAE,qBAAqB,GACnC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IA+Cf,MAAM,CACT,IAAI,EAAE,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,EAC1C,WAAW,EAAE,qBAAqB,GAAG,mBAAmB,GAAG,2BAA2B,GAAG,2BAA2B,GACrH,cAAc,CAAC,MAAM,GAAG,kBAAkB,GAAG,kBAAkB,GAAG,uBAAuB,EAAE,IAAI,EAAE,OAAO,CAAC;IACrG,MAAM,CACT,IAAI,EAAE,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,EAC1C,WAAW,EAAE,qBAAqB,GAAG,mBAAmB,GAAG,2BAA2B,GACvF,cAAc,CAAC,MAAM,GAAG,kBAAkB,GAAG,kBAAkB,EAAE,IAAI,EAAE,OAAO,CAAC;IAC3E,MAAM,CACT,IAAI,EAAE,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,EAC1C,WAAW,EAAE,qBAAqB,GAAG,mBAAmB,GAAG,2BAA2B,GACvF,cAAc,CAAC,MAAM,GAAG,kBAAkB,GAAG,uBAAuB,EAAE,IAAI,EAAE,OAAO,CAAC;IAChF,MAAM,CACT,IAAI,EAAE,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,EAC1C,WAAW,EAAE,qBAAqB,GAAG,mBAAmB,GACzD,cAAc,CAAC,MAAM,GAAG,kBAAkB,EAAE,IAAI,EAAE,OAAO,CAAC;IACtD,MAAM,CACT,IAAI,EAAE,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,EAC3C,WAAW,EAAE,qBAAqB,GAAG,2BAA2B,GAAG,2BAA2B,GAC/F,cAAc,CAAC,MAAM,GAAG,kBAAkB,GAAG,uBAAuB,EAAE,IAAI,EAAE,OAAO,CAAC;IAChF,MAAM,CACT,IAAI,EAAE,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,EAC3C,WAAW,EAAE,qBAAqB,GAAG,2BAA2B,GACjE,cAAc,CAAC,MAAM,GAAG,kBAAkB,EAAE,IAAI,EAAE,OAAO,CAAC;IACtD,MAAM,CACT,IAAI,EAAE,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,EAC3C,WAAW,EAAE,qBAAqB,GAAG,2BAA2B,GACjE,cAAc,CAAC,MAAM,GAAG,uBAAuB,EAAE,IAAI,EAAE,OAAO,CAAC;IAC3D,MAAM,CACT,IAAI,EAAE,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,EAC3C,WAAW,EAAE,qBAAqB,GACnC,cAAc,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC;IAqDjC,OAAO,CAAC,IAAI,EAAE,qBAAqB;IAK1C,IAAW,YAAY,IAAI,MAAM,EAAE,CAElC;CACJ"}
|