@cloudbase/agent-adapter-langgraph 1.0.1-alpha.27 → 1.0.1-alpha.29
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/dist/index.d.mts +6 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.js +91 -43
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +91 -43
- package/dist/index.mjs.map +1 -1
- package/package.json +5 -5
package/dist/index.d.mts
CHANGED
|
@@ -82,6 +82,12 @@ declare class LanggraphAgent extends AbstractAgent {
|
|
|
82
82
|
}>;
|
|
83
83
|
_run(subscriber: Subscriber<BaseEvent>, input: RunAgentInput): Promise<void>;
|
|
84
84
|
clone(): LanggraphAgent;
|
|
85
|
+
/**
|
|
86
|
+
* Setup observability for agent execution.
|
|
87
|
+
* Lazy loads observability callback, restores server context from forwardedProps,
|
|
88
|
+
* and configures the callback for graph execution.
|
|
89
|
+
*/
|
|
90
|
+
private setupObservability;
|
|
85
91
|
}
|
|
86
92
|
|
|
87
93
|
type PendingWrite = [string, any];
|
package/dist/index.d.ts
CHANGED
|
@@ -82,6 +82,12 @@ declare class LanggraphAgent extends AbstractAgent {
|
|
|
82
82
|
}>;
|
|
83
83
|
_run(subscriber: Subscriber<BaseEvent>, input: RunAgentInput): Promise<void>;
|
|
84
84
|
clone(): LanggraphAgent;
|
|
85
|
+
/**
|
|
86
|
+
* Setup observability for agent execution.
|
|
87
|
+
* Lazy loads observability callback, restores server context from forwardedProps,
|
|
88
|
+
* and configures the callback for graph execution.
|
|
89
|
+
*/
|
|
90
|
+
private setupObservability;
|
|
85
91
|
}
|
|
86
92
|
|
|
87
93
|
type PendingWrite = [string, any];
|
package/dist/index.js
CHANGED
|
@@ -120,46 +120,7 @@ var LanggraphAgent = class extends import_client.AbstractAgent {
|
|
|
120
120
|
const { messages, runId, threadId } = input;
|
|
121
121
|
const logger = this.logger.child?.({ runId, threadId }) ?? this.logger;
|
|
122
122
|
logger.info?.("Run started");
|
|
123
|
-
|
|
124
|
-
try {
|
|
125
|
-
logger.debug?.("Attempting to load observability...");
|
|
126
|
-
const obsModule = await import("@cloudbase/agent-observability/langchain");
|
|
127
|
-
LangChainCallbackHandler = obsModule.CallbackHandler;
|
|
128
|
-
logger.debug?.("\u2713 Observability handler loaded");
|
|
129
|
-
} catch (e) {
|
|
130
|
-
logger.debug?.(
|
|
131
|
-
"\u2717 Observability not available:",
|
|
132
|
-
e instanceof Error ? e.message : String(e)
|
|
133
|
-
);
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
this.observabilityCallback = LangChainCallbackHandler ? new LangChainCallbackHandler({
|
|
137
|
-
adapterName: this.adapterName,
|
|
138
|
-
logger
|
|
139
|
-
}) : void 0;
|
|
140
|
-
if (this.observabilityCallback && input.forwardedProps?.__agui_server_context) {
|
|
141
|
-
try {
|
|
142
|
-
const serverContextData = input.forwardedProps.__agui_server_context;
|
|
143
|
-
const serverSpanContext = {
|
|
144
|
-
traceId: serverContextData.traceId,
|
|
145
|
-
spanId: serverContextData.spanId,
|
|
146
|
-
traceFlags: serverContextData.traceFlags,
|
|
147
|
-
isRemote: false
|
|
148
|
-
};
|
|
149
|
-
this.observabilityCallback.setExternalParentContext(serverSpanContext, {
|
|
150
|
-
threadId: input.threadId,
|
|
151
|
-
runId: input.runId
|
|
152
|
-
});
|
|
153
|
-
logger.debug?.("\u2713 Server context restored:", {
|
|
154
|
-
traceId: serverSpanContext.traceId,
|
|
155
|
-
spanId: serverSpanContext.spanId,
|
|
156
|
-
threadId: input.threadId,
|
|
157
|
-
runId: input.runId
|
|
158
|
-
});
|
|
159
|
-
} catch (e) {
|
|
160
|
-
logger.debug?.("Failed to restore server context:", e);
|
|
161
|
-
}
|
|
162
|
-
}
|
|
123
|
+
await this.setupObservability(input, logger);
|
|
163
124
|
const runStartedEvent = {
|
|
164
125
|
type: import_client.EventType.RUN_STARTED,
|
|
165
126
|
threadId,
|
|
@@ -178,7 +139,7 @@ var LanggraphAgent = class extends import_client.AbstractAgent {
|
|
|
178
139
|
"Preparing stream input"
|
|
179
140
|
);
|
|
180
141
|
logger.trace?.({ messages, tools: input.tools }, "Full input messages");
|
|
181
|
-
const langChainMessages = aguiMessagesToLangChain(messages);
|
|
142
|
+
const langChainMessages = aguiMessagesToLangChain(messages, logger);
|
|
182
143
|
logger.trace?.(
|
|
183
144
|
{
|
|
184
145
|
langChainMessages,
|
|
@@ -585,8 +546,55 @@ var LanggraphAgent = class extends import_client.AbstractAgent {
|
|
|
585
546
|
cloned.logger = logger;
|
|
586
547
|
return cloned;
|
|
587
548
|
}
|
|
549
|
+
/**
|
|
550
|
+
* Setup observability for agent execution.
|
|
551
|
+
* Lazy loads observability callback, restores server context from forwardedProps,
|
|
552
|
+
* and configures the callback for graph execution.
|
|
553
|
+
*/
|
|
554
|
+
async setupObservability(input, logger) {
|
|
555
|
+
if (!LangChainCallbackHandler) {
|
|
556
|
+
try {
|
|
557
|
+
logger.debug?.("Attempting to load observability...");
|
|
558
|
+
const obsModule = await import("@cloudbase/agent-observability/langchain");
|
|
559
|
+
LangChainCallbackHandler = obsModule.CallbackHandler;
|
|
560
|
+
logger.debug?.("\u2713 Observability handler loaded");
|
|
561
|
+
} catch (e) {
|
|
562
|
+
logger.debug?.(
|
|
563
|
+
"\u2717 Observability not available:",
|
|
564
|
+
e instanceof Error ? e.message : String(e)
|
|
565
|
+
);
|
|
566
|
+
}
|
|
567
|
+
}
|
|
568
|
+
this.observabilityCallback = LangChainCallbackHandler ? new LangChainCallbackHandler({
|
|
569
|
+
adapterName: this.adapterName,
|
|
570
|
+
logger
|
|
571
|
+
}) : void 0;
|
|
572
|
+
if (this.observabilityCallback && input.forwardedProps?.__agui_server_context) {
|
|
573
|
+
try {
|
|
574
|
+
const serverContextData = input.forwardedProps.__agui_server_context;
|
|
575
|
+
const serverSpanContext = {
|
|
576
|
+
traceId: serverContextData.traceId,
|
|
577
|
+
spanId: serverContextData.spanId,
|
|
578
|
+
traceFlags: serverContextData.traceFlags,
|
|
579
|
+
isRemote: true
|
|
580
|
+
};
|
|
581
|
+
this.observabilityCallback.setExternalParentContext(serverSpanContext, {
|
|
582
|
+
threadId: input.threadId,
|
|
583
|
+
runId: input.runId
|
|
584
|
+
});
|
|
585
|
+
logger.debug?.("\u2713 Server context restored:", {
|
|
586
|
+
traceId: serverSpanContext.traceId,
|
|
587
|
+
spanId: serverSpanContext.spanId,
|
|
588
|
+
threadId: input.threadId,
|
|
589
|
+
runId: input.runId
|
|
590
|
+
});
|
|
591
|
+
} catch (e) {
|
|
592
|
+
logger.debug?.("Failed to restore server context:", e);
|
|
593
|
+
}
|
|
594
|
+
}
|
|
595
|
+
}
|
|
588
596
|
};
|
|
589
|
-
function aguiMessagesToLangChain(messages) {
|
|
597
|
+
function aguiMessagesToLangChain(messages, logger) {
|
|
590
598
|
return messages.map((message) => {
|
|
591
599
|
switch (message.role) {
|
|
592
600
|
case "user":
|
|
@@ -598,10 +606,34 @@ function aguiMessagesToLangChain(messages) {
|
|
|
598
606
|
type: "human"
|
|
599
607
|
};
|
|
600
608
|
} else {
|
|
609
|
+
const langChainContent = [];
|
|
610
|
+
for (const part of message.content) {
|
|
611
|
+
if (part.type === "text") {
|
|
612
|
+
langChainContent.push({ type: "text", text: part.text });
|
|
613
|
+
} else if (part.type === "binary") {
|
|
614
|
+
const imageUrl = convertBinaryToImageUrl(
|
|
615
|
+
part,
|
|
616
|
+
message.id,
|
|
617
|
+
logger
|
|
618
|
+
);
|
|
619
|
+
if (imageUrl) {
|
|
620
|
+
langChainContent.push({
|
|
621
|
+
type: "image_url",
|
|
622
|
+
image_url: { url: imageUrl }
|
|
623
|
+
});
|
|
624
|
+
}
|
|
625
|
+
}
|
|
626
|
+
}
|
|
627
|
+
if (langChainContent.length === 0) {
|
|
628
|
+
logger?.warn?.(
|
|
629
|
+
{ messageId: message.id },
|
|
630
|
+
"User message content array resulted in empty LangChain content"
|
|
631
|
+
);
|
|
632
|
+
}
|
|
601
633
|
return {
|
|
602
634
|
id: message.id,
|
|
603
635
|
role: message.role,
|
|
604
|
-
content:
|
|
636
|
+
content: langChainContent,
|
|
605
637
|
type: "human"
|
|
606
638
|
};
|
|
607
639
|
}
|
|
@@ -646,6 +678,22 @@ function isValidJson(json) {
|
|
|
646
678
|
return false;
|
|
647
679
|
}
|
|
648
680
|
}
|
|
681
|
+
function convertBinaryToImageUrl(part, messageId, logger) {
|
|
682
|
+
if (!part.mimeType.startsWith("image/")) {
|
|
683
|
+
logger?.debug?.(
|
|
684
|
+
{ mimeType: part.mimeType, messageId },
|
|
685
|
+
"Skipping non-image binary content"
|
|
686
|
+
);
|
|
687
|
+
return void 0;
|
|
688
|
+
}
|
|
689
|
+
if (part.url) {
|
|
690
|
+
return part.url;
|
|
691
|
+
}
|
|
692
|
+
if (part.data) {
|
|
693
|
+
return `data:${part.mimeType};base64,${part.data}`;
|
|
694
|
+
}
|
|
695
|
+
return void 0;
|
|
696
|
+
}
|
|
649
697
|
|
|
650
698
|
// src/checkpoint.ts
|
|
651
699
|
var import_langgraph2 = require("@langchain/langgraph");
|