@langchain/core 0.2.16 → 0.2.18-rc.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/callbacks/manager.cjs +71 -23
- package/dist/callbacks/manager.js +71 -23
- package/dist/callbacks/tests/callbacks.test.js +3 -0
- package/dist/language_models/chat_models.d.ts +18 -1
- package/dist/messages/ai.cjs +17 -0
- package/dist/messages/ai.d.ts +2 -0
- package/dist/messages/ai.js +17 -0
- package/dist/messages/base.cjs +50 -0
- package/dist/messages/base.d.ts +4 -1
- package/dist/messages/base.js +50 -0
- package/dist/messages/chat.cjs +12 -0
- package/dist/messages/chat.d.ts +2 -0
- package/dist/messages/chat.js +12 -0
- package/dist/messages/index.cjs +1 -0
- package/dist/messages/index.d.ts +1 -0
- package/dist/messages/index.js +1 -0
- package/dist/messages/modifier.cjs +35 -0
- package/dist/messages/modifier.d.ts +19 -0
- package/dist/messages/modifier.js +31 -0
- package/dist/messages/tool.cjs +14 -0
- package/dist/messages/tool.d.ts +2 -0
- package/dist/messages/tool.js +14 -0
- package/dist/messages/transformers.cjs +5 -0
- package/dist/messages/transformers.d.ts +3 -2
- package/dist/messages/transformers.js +5 -0
- package/dist/runnables/base.cjs +35 -4
- package/dist/runnables/base.d.ts +52 -5
- package/dist/runnables/base.js +35 -4
- package/dist/runnables/config.cjs +4 -7
- package/dist/runnables/config.d.ts +3 -17
- package/dist/runnables/config.js +5 -8
- package/dist/runnables/graph.d.ts +1 -1
- package/dist/runnables/iter.cjs +2 -4
- package/dist/runnables/iter.js +2 -4
- package/dist/runnables/tests/runnable_stream_events_v2.test.js +52 -48
- package/dist/runnables/tests/runnable_tools.test.js +38 -0
- package/dist/runnables/types.d.ts +14 -1
- package/dist/singletons/index.cjs +35 -5
- package/dist/singletons/index.d.ts +2 -0
- package/dist/singletons/index.js +34 -4
- package/dist/singletons/tests/async_local_storage.test.js +2 -3
- package/dist/tools/index.cjs +17 -45
- package/dist/tools/index.d.ts +19 -28
- package/dist/tools/index.js +15 -42
- package/dist/tools/tests/tools.test.js +11 -0
- package/dist/tools/utils.cjs +28 -0
- package/dist/tools/utils.d.ts +11 -0
- package/dist/tools/utils.js +23 -0
- package/dist/tracers/base.cjs +67 -13
- package/dist/tracers/base.d.ts +176 -1
- package/dist/tracers/base.js +65 -12
- package/dist/tracers/event_stream.cjs +15 -2
- package/dist/tracers/event_stream.js +15 -2
- package/dist/tracers/tests/langsmith_interop.test.d.ts +1 -0
- package/dist/tracers/tests/langsmith_interop.test.js +551 -0
- package/dist/tracers/tracer_langchain.cjs +73 -31
- package/dist/tracers/tracer_langchain.d.ts +3 -1
- package/dist/tracers/tracer_langchain.js +73 -31
- package/dist/types/zod.d.ts +1 -1
- package/dist/utils/stream.cjs +8 -9
- package/dist/utils/stream.js +8 -9
- package/package.json +2 -2
|
@@ -9,8 +9,9 @@ const env_js_1 = require("../utils/env.cjs");
|
|
|
9
9
|
const tracer_langchain_js_1 = require("../tracers/tracer_langchain.cjs");
|
|
10
10
|
const promises_js_1 = require("./promises.cjs");
|
|
11
11
|
const callbacks_js_1 = require("../utils/callbacks.cjs");
|
|
12
|
+
const base_js_2 = require("../tracers/base.cjs");
|
|
12
13
|
if (
|
|
13
|
-
/* #__PURE__ */ (0,
|
|
14
|
+
/* #__PURE__ */ (0, callbacks_js_1.isTracingEnabled)() &&
|
|
14
15
|
/* #__PURE__ */ (0, env_js_1.getEnvironmentVariable)("LANGCHAIN_CALLBACKS_BACKGROUND") !==
|
|
15
16
|
"true") {
|
|
16
17
|
/* #__PURE__ */ console.warn([
|
|
@@ -417,8 +418,17 @@ class CallbackManager extends BaseCallbackManager {
|
|
|
417
418
|
return Promise.all(prompts.map(async (prompt, idx) => {
|
|
418
419
|
// Can't have duplicate runs with the same run ID (if provided)
|
|
419
420
|
const runId_ = idx === 0 && runId ? runId : (0, uuid_1.v4)();
|
|
420
|
-
await Promise.all(this.handlers.map((handler) =>
|
|
421
|
-
if (
|
|
421
|
+
await Promise.all(this.handlers.map((handler) => {
|
|
422
|
+
if (handler.ignoreLLM) {
|
|
423
|
+
return;
|
|
424
|
+
}
|
|
425
|
+
if ((0, base_js_2.isBaseTracer)(handler)) {
|
|
426
|
+
// Create and add run to the run map.
|
|
427
|
+
// We do this synchronously to avoid race conditions
|
|
428
|
+
// when callbacks are backgrounded.
|
|
429
|
+
handler._createRunForLLMStart(llm, [prompt], runId_, this._parentRunId, extraParams, this.tags, this.metadata, runName);
|
|
430
|
+
}
|
|
431
|
+
return (0, promises_js_1.consumeCallback)(async () => {
|
|
422
432
|
try {
|
|
423
433
|
await handler.handleLLMStart?.(llm, [prompt], runId_, this._parentRunId, extraParams, this.tags, this.metadata, runName);
|
|
424
434
|
}
|
|
@@ -428,8 +438,8 @@ class CallbackManager extends BaseCallbackManager {
|
|
|
428
438
|
throw err;
|
|
429
439
|
}
|
|
430
440
|
}
|
|
431
|
-
}
|
|
432
|
-
}
|
|
441
|
+
}, handler.awaitHandlers);
|
|
442
|
+
}));
|
|
433
443
|
return new CallbackManagerForLLMRun(runId_, this.handlers, this.inheritableHandlers, this.tags, this.inheritableTags, this.metadata, this.inheritableMetadata, this._parentRunId);
|
|
434
444
|
}));
|
|
435
445
|
}
|
|
@@ -437,8 +447,17 @@ class CallbackManager extends BaseCallbackManager {
|
|
|
437
447
|
return Promise.all(messages.map(async (messageGroup, idx) => {
|
|
438
448
|
// Can't have duplicate runs with the same run ID (if provided)
|
|
439
449
|
const runId_ = idx === 0 && runId ? runId : (0, uuid_1.v4)();
|
|
440
|
-
await Promise.all(this.handlers.map((handler) =>
|
|
441
|
-
if (
|
|
450
|
+
await Promise.all(this.handlers.map((handler) => {
|
|
451
|
+
if (handler.ignoreLLM) {
|
|
452
|
+
return;
|
|
453
|
+
}
|
|
454
|
+
if ((0, base_js_2.isBaseTracer)(handler)) {
|
|
455
|
+
// Create and add run to the run map.
|
|
456
|
+
// We do this synchronously to avoid race conditions
|
|
457
|
+
// when callbacks are backgrounded.
|
|
458
|
+
handler._createRunForChatModelStart(llm, [messageGroup], runId_, this._parentRunId, extraParams, this.tags, this.metadata, runName);
|
|
459
|
+
}
|
|
460
|
+
return (0, promises_js_1.consumeCallback)(async () => {
|
|
442
461
|
try {
|
|
443
462
|
if (handler.handleChatModelStart) {
|
|
444
463
|
await handler.handleChatModelStart?.(llm, [messageGroup], runId_, this._parentRunId, extraParams, this.tags, this.metadata, runName);
|
|
@@ -454,14 +473,23 @@ class CallbackManager extends BaseCallbackManager {
|
|
|
454
473
|
throw err;
|
|
455
474
|
}
|
|
456
475
|
}
|
|
457
|
-
}
|
|
458
|
-
}
|
|
476
|
+
}, handler.awaitHandlers);
|
|
477
|
+
}));
|
|
459
478
|
return new CallbackManagerForLLMRun(runId_, this.handlers, this.inheritableHandlers, this.tags, this.inheritableTags, this.metadata, this.inheritableMetadata, this._parentRunId);
|
|
460
479
|
}));
|
|
461
480
|
}
|
|
462
481
|
async handleChainStart(chain, inputs, runId = (0, uuid_1.v4)(), runType = undefined, _tags = undefined, _metadata = undefined, runName = undefined) {
|
|
463
|
-
await Promise.all(this.handlers.map((handler) =>
|
|
464
|
-
if (
|
|
482
|
+
await Promise.all(this.handlers.map((handler) => {
|
|
483
|
+
if (handler.ignoreChain) {
|
|
484
|
+
return;
|
|
485
|
+
}
|
|
486
|
+
if ((0, base_js_2.isBaseTracer)(handler)) {
|
|
487
|
+
// Create and add run to the run map.
|
|
488
|
+
// We do this synchronously to avoid race conditions
|
|
489
|
+
// when callbacks are backgrounded.
|
|
490
|
+
handler._createRunForChainStart(chain, inputs, runId, this._parentRunId, this.tags, this.metadata, runType, runName);
|
|
491
|
+
}
|
|
492
|
+
return (0, promises_js_1.consumeCallback)(async () => {
|
|
465
493
|
try {
|
|
466
494
|
await handler.handleChainStart?.(chain, inputs, runId, this._parentRunId, this.tags, this.metadata, runType, runName);
|
|
467
495
|
}
|
|
@@ -471,13 +499,22 @@ class CallbackManager extends BaseCallbackManager {
|
|
|
471
499
|
throw err;
|
|
472
500
|
}
|
|
473
501
|
}
|
|
474
|
-
}
|
|
475
|
-
}
|
|
502
|
+
}, handler.awaitHandlers);
|
|
503
|
+
}));
|
|
476
504
|
return new CallbackManagerForChainRun(runId, this.handlers, this.inheritableHandlers, this.tags, this.inheritableTags, this.metadata, this.inheritableMetadata, this._parentRunId);
|
|
477
505
|
}
|
|
478
506
|
async handleToolStart(tool, input, runId = (0, uuid_1.v4)(), _parentRunId = undefined, _tags = undefined, _metadata = undefined, runName = undefined) {
|
|
479
|
-
await Promise.all(this.handlers.map((handler) =>
|
|
480
|
-
if (
|
|
507
|
+
await Promise.all(this.handlers.map((handler) => {
|
|
508
|
+
if (handler.ignoreAgent) {
|
|
509
|
+
return;
|
|
510
|
+
}
|
|
511
|
+
if ((0, base_js_2.isBaseTracer)(handler)) {
|
|
512
|
+
// Create and add run to the run map.
|
|
513
|
+
// We do this synchronously to avoid race conditions
|
|
514
|
+
// when callbacks are backgrounded.
|
|
515
|
+
handler._createRunForToolStart(tool, input, runId, this._parentRunId, this.tags, this.metadata, runName);
|
|
516
|
+
}
|
|
517
|
+
return (0, promises_js_1.consumeCallback)(async () => {
|
|
481
518
|
try {
|
|
482
519
|
await handler.handleToolStart?.(tool, input, runId, this._parentRunId, this.tags, this.metadata, runName);
|
|
483
520
|
}
|
|
@@ -487,13 +524,22 @@ class CallbackManager extends BaseCallbackManager {
|
|
|
487
524
|
throw err;
|
|
488
525
|
}
|
|
489
526
|
}
|
|
490
|
-
}
|
|
491
|
-
}
|
|
527
|
+
}, handler.awaitHandlers);
|
|
528
|
+
}));
|
|
492
529
|
return new CallbackManagerForToolRun(runId, this.handlers, this.inheritableHandlers, this.tags, this.inheritableTags, this.metadata, this.inheritableMetadata, this._parentRunId);
|
|
493
530
|
}
|
|
494
531
|
async handleRetrieverStart(retriever, query, runId = (0, uuid_1.v4)(), _parentRunId = undefined, _tags = undefined, _metadata = undefined, runName = undefined) {
|
|
495
|
-
await Promise.all(this.handlers.map((handler) =>
|
|
496
|
-
if (
|
|
532
|
+
await Promise.all(this.handlers.map((handler) => {
|
|
533
|
+
if (handler.ignoreRetriever) {
|
|
534
|
+
return;
|
|
535
|
+
}
|
|
536
|
+
if ((0, base_js_2.isBaseTracer)(handler)) {
|
|
537
|
+
// Create and add run to the run map.
|
|
538
|
+
// We do this synchronously to avoid race conditions
|
|
539
|
+
// when callbacks are backgrounded.
|
|
540
|
+
handler._createRunForRetrieverStart(retriever, query, runId, this._parentRunId, this.tags, this.metadata, runName);
|
|
541
|
+
}
|
|
542
|
+
return (0, promises_js_1.consumeCallback)(async () => {
|
|
497
543
|
try {
|
|
498
544
|
await handler.handleRetrieverStart?.(retriever, query, runId, this._parentRunId, this.tags, this.metadata, runName);
|
|
499
545
|
}
|
|
@@ -503,8 +549,8 @@ class CallbackManager extends BaseCallbackManager {
|
|
|
503
549
|
throw err;
|
|
504
550
|
}
|
|
505
551
|
}
|
|
506
|
-
}
|
|
507
|
-
}
|
|
552
|
+
}, handler.awaitHandlers);
|
|
553
|
+
}));
|
|
508
554
|
return new CallbackManagerForRetrieverRun(runId, this.handlers, this.inheritableHandlers, this.tags, this.inheritableTags, this.metadata, this.inheritableMetadata, this._parentRunId);
|
|
509
555
|
}
|
|
510
556
|
async handleCustomEvent(eventName,
|
|
@@ -629,7 +675,8 @@ class CallbackManager extends BaseCallbackManager {
|
|
|
629
675
|
}
|
|
630
676
|
const verboseEnabled = (0, env_js_1.getEnvironmentVariable)("LANGCHAIN_VERBOSE") === "true" ||
|
|
631
677
|
options?.verbose;
|
|
632
|
-
const tracingV2Enabled =
|
|
678
|
+
const tracingV2Enabled = tracer_langchain_js_1.LangChainTracer.getTraceableRunTree()?.tracingEnabled ||
|
|
679
|
+
(0, callbacks_js_1.isTracingEnabled)();
|
|
633
680
|
const tracingEnabled = tracingV2Enabled ||
|
|
634
681
|
((0, env_js_1.getEnvironmentVariable)("LANGCHAIN_TRACING") ?? false);
|
|
635
682
|
if (verboseEnabled || tracingEnabled) {
|
|
@@ -649,7 +696,8 @@ class CallbackManager extends BaseCallbackManager {
|
|
|
649
696
|
// handoff between langchain and langsmith/traceable
|
|
650
697
|
// override the parent run ID
|
|
651
698
|
callbackManager._parentRunId =
|
|
652
|
-
|
|
699
|
+
tracer_langchain_js_1.LangChainTracer.getTraceableRunTree()?.id ??
|
|
700
|
+
callbackManager._parentRunId;
|
|
653
701
|
}
|
|
654
702
|
}
|
|
655
703
|
}
|
|
@@ -6,8 +6,9 @@ import { getEnvironmentVariable } from "../utils/env.js";
|
|
|
6
6
|
import { LangChainTracer, } from "../tracers/tracer_langchain.js";
|
|
7
7
|
import { consumeCallback } from "./promises.js";
|
|
8
8
|
import { isTracingEnabled } from "../utils/callbacks.js";
|
|
9
|
+
import { isBaseTracer } from "../tracers/base.js";
|
|
9
10
|
if (
|
|
10
|
-
/* #__PURE__ */
|
|
11
|
+
/* #__PURE__ */ isTracingEnabled() &&
|
|
11
12
|
/* #__PURE__ */ getEnvironmentVariable("LANGCHAIN_CALLBACKS_BACKGROUND") !==
|
|
12
13
|
"true") {
|
|
13
14
|
/* #__PURE__ */ console.warn([
|
|
@@ -407,8 +408,17 @@ export class CallbackManager extends BaseCallbackManager {
|
|
|
407
408
|
return Promise.all(prompts.map(async (prompt, idx) => {
|
|
408
409
|
// Can't have duplicate runs with the same run ID (if provided)
|
|
409
410
|
const runId_ = idx === 0 && runId ? runId : uuidv4();
|
|
410
|
-
await Promise.all(this.handlers.map((handler) =>
|
|
411
|
-
if (
|
|
411
|
+
await Promise.all(this.handlers.map((handler) => {
|
|
412
|
+
if (handler.ignoreLLM) {
|
|
413
|
+
return;
|
|
414
|
+
}
|
|
415
|
+
if (isBaseTracer(handler)) {
|
|
416
|
+
// Create and add run to the run map.
|
|
417
|
+
// We do this synchronously to avoid race conditions
|
|
418
|
+
// when callbacks are backgrounded.
|
|
419
|
+
handler._createRunForLLMStart(llm, [prompt], runId_, this._parentRunId, extraParams, this.tags, this.metadata, runName);
|
|
420
|
+
}
|
|
421
|
+
return consumeCallback(async () => {
|
|
412
422
|
try {
|
|
413
423
|
await handler.handleLLMStart?.(llm, [prompt], runId_, this._parentRunId, extraParams, this.tags, this.metadata, runName);
|
|
414
424
|
}
|
|
@@ -418,8 +428,8 @@ export class CallbackManager extends BaseCallbackManager {
|
|
|
418
428
|
throw err;
|
|
419
429
|
}
|
|
420
430
|
}
|
|
421
|
-
}
|
|
422
|
-
}
|
|
431
|
+
}, handler.awaitHandlers);
|
|
432
|
+
}));
|
|
423
433
|
return new CallbackManagerForLLMRun(runId_, this.handlers, this.inheritableHandlers, this.tags, this.inheritableTags, this.metadata, this.inheritableMetadata, this._parentRunId);
|
|
424
434
|
}));
|
|
425
435
|
}
|
|
@@ -427,8 +437,17 @@ export class CallbackManager extends BaseCallbackManager {
|
|
|
427
437
|
return Promise.all(messages.map(async (messageGroup, idx) => {
|
|
428
438
|
// Can't have duplicate runs with the same run ID (if provided)
|
|
429
439
|
const runId_ = idx === 0 && runId ? runId : uuidv4();
|
|
430
|
-
await Promise.all(this.handlers.map((handler) =>
|
|
431
|
-
if (
|
|
440
|
+
await Promise.all(this.handlers.map((handler) => {
|
|
441
|
+
if (handler.ignoreLLM) {
|
|
442
|
+
return;
|
|
443
|
+
}
|
|
444
|
+
if (isBaseTracer(handler)) {
|
|
445
|
+
// Create and add run to the run map.
|
|
446
|
+
// We do this synchronously to avoid race conditions
|
|
447
|
+
// when callbacks are backgrounded.
|
|
448
|
+
handler._createRunForChatModelStart(llm, [messageGroup], runId_, this._parentRunId, extraParams, this.tags, this.metadata, runName);
|
|
449
|
+
}
|
|
450
|
+
return consumeCallback(async () => {
|
|
432
451
|
try {
|
|
433
452
|
if (handler.handleChatModelStart) {
|
|
434
453
|
await handler.handleChatModelStart?.(llm, [messageGroup], runId_, this._parentRunId, extraParams, this.tags, this.metadata, runName);
|
|
@@ -444,14 +463,23 @@ export class CallbackManager extends BaseCallbackManager {
|
|
|
444
463
|
throw err;
|
|
445
464
|
}
|
|
446
465
|
}
|
|
447
|
-
}
|
|
448
|
-
}
|
|
466
|
+
}, handler.awaitHandlers);
|
|
467
|
+
}));
|
|
449
468
|
return new CallbackManagerForLLMRun(runId_, this.handlers, this.inheritableHandlers, this.tags, this.inheritableTags, this.metadata, this.inheritableMetadata, this._parentRunId);
|
|
450
469
|
}));
|
|
451
470
|
}
|
|
452
471
|
async handleChainStart(chain, inputs, runId = uuidv4(), runType = undefined, _tags = undefined, _metadata = undefined, runName = undefined) {
|
|
453
|
-
await Promise.all(this.handlers.map((handler) =>
|
|
454
|
-
if (
|
|
472
|
+
await Promise.all(this.handlers.map((handler) => {
|
|
473
|
+
if (handler.ignoreChain) {
|
|
474
|
+
return;
|
|
475
|
+
}
|
|
476
|
+
if (isBaseTracer(handler)) {
|
|
477
|
+
// Create and add run to the run map.
|
|
478
|
+
// We do this synchronously to avoid race conditions
|
|
479
|
+
// when callbacks are backgrounded.
|
|
480
|
+
handler._createRunForChainStart(chain, inputs, runId, this._parentRunId, this.tags, this.metadata, runType, runName);
|
|
481
|
+
}
|
|
482
|
+
return consumeCallback(async () => {
|
|
455
483
|
try {
|
|
456
484
|
await handler.handleChainStart?.(chain, inputs, runId, this._parentRunId, this.tags, this.metadata, runType, runName);
|
|
457
485
|
}
|
|
@@ -461,13 +489,22 @@ export class CallbackManager extends BaseCallbackManager {
|
|
|
461
489
|
throw err;
|
|
462
490
|
}
|
|
463
491
|
}
|
|
464
|
-
}
|
|
465
|
-
}
|
|
492
|
+
}, handler.awaitHandlers);
|
|
493
|
+
}));
|
|
466
494
|
return new CallbackManagerForChainRun(runId, this.handlers, this.inheritableHandlers, this.tags, this.inheritableTags, this.metadata, this.inheritableMetadata, this._parentRunId);
|
|
467
495
|
}
|
|
468
496
|
async handleToolStart(tool, input, runId = uuidv4(), _parentRunId = undefined, _tags = undefined, _metadata = undefined, runName = undefined) {
|
|
469
|
-
await Promise.all(this.handlers.map((handler) =>
|
|
470
|
-
if (
|
|
497
|
+
await Promise.all(this.handlers.map((handler) => {
|
|
498
|
+
if (handler.ignoreAgent) {
|
|
499
|
+
return;
|
|
500
|
+
}
|
|
501
|
+
if (isBaseTracer(handler)) {
|
|
502
|
+
// Create and add run to the run map.
|
|
503
|
+
// We do this synchronously to avoid race conditions
|
|
504
|
+
// when callbacks are backgrounded.
|
|
505
|
+
handler._createRunForToolStart(tool, input, runId, this._parentRunId, this.tags, this.metadata, runName);
|
|
506
|
+
}
|
|
507
|
+
return consumeCallback(async () => {
|
|
471
508
|
try {
|
|
472
509
|
await handler.handleToolStart?.(tool, input, runId, this._parentRunId, this.tags, this.metadata, runName);
|
|
473
510
|
}
|
|
@@ -477,13 +514,22 @@ export class CallbackManager extends BaseCallbackManager {
|
|
|
477
514
|
throw err;
|
|
478
515
|
}
|
|
479
516
|
}
|
|
480
|
-
}
|
|
481
|
-
}
|
|
517
|
+
}, handler.awaitHandlers);
|
|
518
|
+
}));
|
|
482
519
|
return new CallbackManagerForToolRun(runId, this.handlers, this.inheritableHandlers, this.tags, this.inheritableTags, this.metadata, this.inheritableMetadata, this._parentRunId);
|
|
483
520
|
}
|
|
484
521
|
async handleRetrieverStart(retriever, query, runId = uuidv4(), _parentRunId = undefined, _tags = undefined, _metadata = undefined, runName = undefined) {
|
|
485
|
-
await Promise.all(this.handlers.map((handler) =>
|
|
486
|
-
if (
|
|
522
|
+
await Promise.all(this.handlers.map((handler) => {
|
|
523
|
+
if (handler.ignoreRetriever) {
|
|
524
|
+
return;
|
|
525
|
+
}
|
|
526
|
+
if (isBaseTracer(handler)) {
|
|
527
|
+
// Create and add run to the run map.
|
|
528
|
+
// We do this synchronously to avoid race conditions
|
|
529
|
+
// when callbacks are backgrounded.
|
|
530
|
+
handler._createRunForRetrieverStart(retriever, query, runId, this._parentRunId, this.tags, this.metadata, runName);
|
|
531
|
+
}
|
|
532
|
+
return consumeCallback(async () => {
|
|
487
533
|
try {
|
|
488
534
|
await handler.handleRetrieverStart?.(retriever, query, runId, this._parentRunId, this.tags, this.metadata, runName);
|
|
489
535
|
}
|
|
@@ -493,8 +539,8 @@ export class CallbackManager extends BaseCallbackManager {
|
|
|
493
539
|
throw err;
|
|
494
540
|
}
|
|
495
541
|
}
|
|
496
|
-
}
|
|
497
|
-
}
|
|
542
|
+
}, handler.awaitHandlers);
|
|
543
|
+
}));
|
|
498
544
|
return new CallbackManagerForRetrieverRun(runId, this.handlers, this.inheritableHandlers, this.tags, this.inheritableTags, this.metadata, this.inheritableMetadata, this._parentRunId);
|
|
499
545
|
}
|
|
500
546
|
async handleCustomEvent(eventName,
|
|
@@ -619,7 +665,8 @@ export class CallbackManager extends BaseCallbackManager {
|
|
|
619
665
|
}
|
|
620
666
|
const verboseEnabled = getEnvironmentVariable("LANGCHAIN_VERBOSE") === "true" ||
|
|
621
667
|
options?.verbose;
|
|
622
|
-
const tracingV2Enabled =
|
|
668
|
+
const tracingV2Enabled = LangChainTracer.getTraceableRunTree()?.tracingEnabled ||
|
|
669
|
+
isTracingEnabled();
|
|
623
670
|
const tracingEnabled = tracingV2Enabled ||
|
|
624
671
|
(getEnvironmentVariable("LANGCHAIN_TRACING") ?? false);
|
|
625
672
|
if (verboseEnabled || tracingEnabled) {
|
|
@@ -639,7 +686,8 @@ export class CallbackManager extends BaseCallbackManager {
|
|
|
639
686
|
// handoff between langchain and langsmith/traceable
|
|
640
687
|
// override the parent run ID
|
|
641
688
|
callbackManager._parentRunId =
|
|
642
|
-
|
|
689
|
+
LangChainTracer.getTraceableRunTree()?.id ??
|
|
690
|
+
callbackManager._parentRunId;
|
|
643
691
|
}
|
|
644
692
|
}
|
|
645
693
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
/* eslint-disable no-promise-executor-return */
|
|
1
2
|
import { test, expect } from "@jest/globals";
|
|
2
3
|
import * as uuid from "uuid";
|
|
3
4
|
import { CallbackManager } from "../manager.js";
|
|
@@ -227,6 +228,8 @@ test("CallbackManager", async () => {
|
|
|
227
228
|
new Document({ pageContent: "test", metadata: { test: "test" } }),
|
|
228
229
|
]);
|
|
229
230
|
await retrieverCb.handleRetrieverError(new Error("test"));
|
|
231
|
+
// In case background mode is on while running this test
|
|
232
|
+
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
230
233
|
for (const handler of [handler1, handler2]) {
|
|
231
234
|
expect(handler.starts).toBe(5);
|
|
232
235
|
expect(handler.ends).toBe(5);
|
|
@@ -8,6 +8,7 @@ import type { RunnableConfig } from "../runnables/config.js";
|
|
|
8
8
|
import type { BaseCache } from "../caches/base.js";
|
|
9
9
|
import { StructuredToolInterface } from "../tools/index.js";
|
|
10
10
|
import { Runnable, RunnableToolLike } from "../runnables/base.js";
|
|
11
|
+
type ToolChoice = string | Record<string, any> | "auto" | "any";
|
|
11
12
|
/**
|
|
12
13
|
* Represents a serialized chat model.
|
|
13
14
|
*/
|
|
@@ -29,7 +30,23 @@ export type BaseChatModelParams = BaseLanguageModelParams;
|
|
|
29
30
|
/**
|
|
30
31
|
* Represents the call options for a base chat model.
|
|
31
32
|
*/
|
|
32
|
-
export type BaseChatModelCallOptions = BaseLanguageModelCallOptions
|
|
33
|
+
export type BaseChatModelCallOptions = BaseLanguageModelCallOptions & {
|
|
34
|
+
/**
|
|
35
|
+
* Specifies how the chat model should use tools.
|
|
36
|
+
* @default undefined
|
|
37
|
+
*
|
|
38
|
+
* Possible values:
|
|
39
|
+
* - "auto": The model may choose to use any of the provided tools, or none.
|
|
40
|
+
* - "any": The model must use one of the provided tools.
|
|
41
|
+
* - "none": The model must not use any tools.
|
|
42
|
+
* - A string (not "auto", "any", or "none"): The name of a specific tool the model must use.
|
|
43
|
+
* - An object: A custom schema specifying tool choice parameters. Specific to the provider.
|
|
44
|
+
*
|
|
45
|
+
* Note: Not all providers support tool_choice. An error will be thrown
|
|
46
|
+
* if used with an unsupported model.
|
|
47
|
+
*/
|
|
48
|
+
tool_choice?: ToolChoice;
|
|
49
|
+
};
|
|
33
50
|
/**
|
|
34
51
|
* Creates a transform stream for encoding chat message chunks.
|
|
35
52
|
* @deprecated Use {@link BytesOutputParser} instead
|
package/dist/messages/ai.cjs
CHANGED
|
@@ -98,6 +98,14 @@ class AIMessage extends base_js_1.BaseMessage {
|
|
|
98
98
|
_getType() {
|
|
99
99
|
return "ai";
|
|
100
100
|
}
|
|
101
|
+
get _printableFields() {
|
|
102
|
+
return {
|
|
103
|
+
...super._printableFields,
|
|
104
|
+
tool_calls: this.tool_calls,
|
|
105
|
+
invalid_tool_calls: this.invalid_tool_calls,
|
|
106
|
+
usage_metadata: this.usage_metadata,
|
|
107
|
+
};
|
|
108
|
+
}
|
|
101
109
|
}
|
|
102
110
|
exports.AIMessage = AIMessage;
|
|
103
111
|
function isAIMessage(x) {
|
|
@@ -215,6 +223,15 @@ class AIMessageChunk extends base_js_1.BaseMessageChunk {
|
|
|
215
223
|
_getType() {
|
|
216
224
|
return "ai";
|
|
217
225
|
}
|
|
226
|
+
get _printableFields() {
|
|
227
|
+
return {
|
|
228
|
+
...super._printableFields,
|
|
229
|
+
tool_calls: this.tool_calls,
|
|
230
|
+
tool_call_chunks: this.tool_call_chunks,
|
|
231
|
+
invalid_tool_calls: this.invalid_tool_calls,
|
|
232
|
+
usage_metadata: this.usage_metadata,
|
|
233
|
+
};
|
|
234
|
+
}
|
|
218
235
|
concat(chunk) {
|
|
219
236
|
const combinedFields = {
|
|
220
237
|
content: (0, base_js_1.mergeContent)(this.content, chunk.content),
|
package/dist/messages/ai.d.ts
CHANGED
|
@@ -38,6 +38,7 @@ export declare class AIMessage extends BaseMessage {
|
|
|
38
38
|
kwargs?: Record<string, unknown>);
|
|
39
39
|
static lc_name(): string;
|
|
40
40
|
_getType(): MessageType;
|
|
41
|
+
get _printableFields(): Record<string, unknown>;
|
|
41
42
|
}
|
|
42
43
|
export declare function isAIMessage(x: BaseMessage): x is AIMessage;
|
|
43
44
|
export type AIMessageChunkFields = AIMessageFields & {
|
|
@@ -59,5 +60,6 @@ export declare class AIMessageChunk extends BaseMessageChunk {
|
|
|
59
60
|
get lc_aliases(): Record<string, string>;
|
|
60
61
|
static lc_name(): string;
|
|
61
62
|
_getType(): MessageType;
|
|
63
|
+
get _printableFields(): Record<string, unknown>;
|
|
62
64
|
concat(chunk: AIMessageChunk): AIMessageChunk;
|
|
63
65
|
}
|
package/dist/messages/ai.js
CHANGED
|
@@ -95,6 +95,14 @@ export class AIMessage extends BaseMessage {
|
|
|
95
95
|
_getType() {
|
|
96
96
|
return "ai";
|
|
97
97
|
}
|
|
98
|
+
get _printableFields() {
|
|
99
|
+
return {
|
|
100
|
+
...super._printableFields,
|
|
101
|
+
tool_calls: this.tool_calls,
|
|
102
|
+
invalid_tool_calls: this.invalid_tool_calls,
|
|
103
|
+
usage_metadata: this.usage_metadata,
|
|
104
|
+
};
|
|
105
|
+
}
|
|
98
106
|
}
|
|
99
107
|
export function isAIMessage(x) {
|
|
100
108
|
return x._getType() === "ai";
|
|
@@ -210,6 +218,15 @@ export class AIMessageChunk extends BaseMessageChunk {
|
|
|
210
218
|
_getType() {
|
|
211
219
|
return "ai";
|
|
212
220
|
}
|
|
221
|
+
get _printableFields() {
|
|
222
|
+
return {
|
|
223
|
+
...super._printableFields,
|
|
224
|
+
tool_calls: this.tool_calls,
|
|
225
|
+
tool_call_chunks: this.tool_call_chunks,
|
|
226
|
+
invalid_tool_calls: this.invalid_tool_calls,
|
|
227
|
+
usage_metadata: this.usage_metadata,
|
|
228
|
+
};
|
|
229
|
+
}
|
|
213
230
|
concat(chunk) {
|
|
214
231
|
const combinedFields = {
|
|
215
232
|
content: mergeContent(this.content, chunk.content),
|
package/dist/messages/base.cjs
CHANGED
|
@@ -25,6 +25,30 @@ function mergeContent(firstContent, secondContent) {
|
|
|
25
25
|
}
|
|
26
26
|
}
|
|
27
27
|
exports.mergeContent = mergeContent;
|
|
28
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
29
|
+
function stringifyWithDepthLimit(obj, depthLimit) {
|
|
30
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
31
|
+
function helper(obj, currentDepth) {
|
|
32
|
+
if (typeof obj !== "object" || obj === null || obj === undefined) {
|
|
33
|
+
return obj;
|
|
34
|
+
}
|
|
35
|
+
if (currentDepth >= depthLimit) {
|
|
36
|
+
if (Array.isArray(obj)) {
|
|
37
|
+
return "[Array]";
|
|
38
|
+
}
|
|
39
|
+
return "[Object]";
|
|
40
|
+
}
|
|
41
|
+
if (Array.isArray(obj)) {
|
|
42
|
+
return obj.map((item) => helper(item, currentDepth + 1));
|
|
43
|
+
}
|
|
44
|
+
const result = {};
|
|
45
|
+
for (const key of Object.keys(obj)) {
|
|
46
|
+
result[key] = helper(obj[key], currentDepth + 1);
|
|
47
|
+
}
|
|
48
|
+
return result;
|
|
49
|
+
}
|
|
50
|
+
return JSON.stringify(helper(obj, 0), null, 2);
|
|
51
|
+
}
|
|
28
52
|
/**
|
|
29
53
|
* Base class for all types of messages in a conversation. It includes
|
|
30
54
|
* properties like `content`, `name`, and `additional_kwargs`. It also
|
|
@@ -129,6 +153,32 @@ class BaseMessage extends serializable_js_1.Serializable {
|
|
|
129
153
|
.kwargs,
|
|
130
154
|
};
|
|
131
155
|
}
|
|
156
|
+
static lc_name() {
|
|
157
|
+
return "BaseMessage";
|
|
158
|
+
}
|
|
159
|
+
// Can't be protected for silly reasons
|
|
160
|
+
get _printableFields() {
|
|
161
|
+
return {
|
|
162
|
+
id: this.id,
|
|
163
|
+
content: this.content,
|
|
164
|
+
name: this.name,
|
|
165
|
+
additional_kwargs: this.additional_kwargs,
|
|
166
|
+
response_metadata: this.response_metadata,
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
get [Symbol.toStringTag]() {
|
|
170
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
171
|
+
return this.constructor.lc_name();
|
|
172
|
+
}
|
|
173
|
+
// Override the default behavior of console.log
|
|
174
|
+
[Symbol.for("nodejs.util.inspect.custom")](depth) {
|
|
175
|
+
if (depth === null) {
|
|
176
|
+
return this;
|
|
177
|
+
}
|
|
178
|
+
const printable = stringifyWithDepthLimit(this._printableFields, Math.max(4, depth));
|
|
179
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
180
|
+
return `${this.constructor.lc_name()} ${printable}`;
|
|
181
|
+
}
|
|
132
182
|
}
|
|
133
183
|
exports.BaseMessage = BaseMessage;
|
|
134
184
|
function isOpenAIToolCallArray(value) {
|
package/dist/messages/base.d.ts
CHANGED
|
@@ -23,7 +23,7 @@ export interface StoredMessageV1 {
|
|
|
23
23
|
role: string | undefined;
|
|
24
24
|
text: string;
|
|
25
25
|
}
|
|
26
|
-
export type MessageType = "human" | "ai" | "generic" | "system" | "function" | "tool";
|
|
26
|
+
export type MessageType = "human" | "ai" | "generic" | "system" | "function" | "tool" | "remove";
|
|
27
27
|
export type ImageDetail = "auto" | "low" | "high";
|
|
28
28
|
export type MessageContentText = {
|
|
29
29
|
type: "text";
|
|
@@ -123,6 +123,9 @@ export declare abstract class BaseMessage extends Serializable implements BaseMe
|
|
|
123
123
|
/** @deprecated */
|
|
124
124
|
kwargs?: Record<string, unknown>);
|
|
125
125
|
toDict(): StoredMessage;
|
|
126
|
+
static lc_name(): string;
|
|
127
|
+
get _printableFields(): Record<string, unknown>;
|
|
128
|
+
get [Symbol.toStringTag](): any;
|
|
126
129
|
}
|
|
127
130
|
export type OpenAIToolCall = ToolCall & {
|
|
128
131
|
index: number;
|
package/dist/messages/base.js
CHANGED
|
@@ -21,6 +21,30 @@ export function mergeContent(firstContent, secondContent) {
|
|
|
21
21
|
return [...firstContent, { type: "text", text: secondContent }];
|
|
22
22
|
}
|
|
23
23
|
}
|
|
24
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
25
|
+
function stringifyWithDepthLimit(obj, depthLimit) {
|
|
26
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
27
|
+
function helper(obj, currentDepth) {
|
|
28
|
+
if (typeof obj !== "object" || obj === null || obj === undefined) {
|
|
29
|
+
return obj;
|
|
30
|
+
}
|
|
31
|
+
if (currentDepth >= depthLimit) {
|
|
32
|
+
if (Array.isArray(obj)) {
|
|
33
|
+
return "[Array]";
|
|
34
|
+
}
|
|
35
|
+
return "[Object]";
|
|
36
|
+
}
|
|
37
|
+
if (Array.isArray(obj)) {
|
|
38
|
+
return obj.map((item) => helper(item, currentDepth + 1));
|
|
39
|
+
}
|
|
40
|
+
const result = {};
|
|
41
|
+
for (const key of Object.keys(obj)) {
|
|
42
|
+
result[key] = helper(obj[key], currentDepth + 1);
|
|
43
|
+
}
|
|
44
|
+
return result;
|
|
45
|
+
}
|
|
46
|
+
return JSON.stringify(helper(obj, 0), null, 2);
|
|
47
|
+
}
|
|
24
48
|
/**
|
|
25
49
|
* Base class for all types of messages in a conversation. It includes
|
|
26
50
|
* properties like `content`, `name`, and `additional_kwargs`. It also
|
|
@@ -125,6 +149,32 @@ export class BaseMessage extends Serializable {
|
|
|
125
149
|
.kwargs,
|
|
126
150
|
};
|
|
127
151
|
}
|
|
152
|
+
static lc_name() {
|
|
153
|
+
return "BaseMessage";
|
|
154
|
+
}
|
|
155
|
+
// Can't be protected for silly reasons
|
|
156
|
+
get _printableFields() {
|
|
157
|
+
return {
|
|
158
|
+
id: this.id,
|
|
159
|
+
content: this.content,
|
|
160
|
+
name: this.name,
|
|
161
|
+
additional_kwargs: this.additional_kwargs,
|
|
162
|
+
response_metadata: this.response_metadata,
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
get [Symbol.toStringTag]() {
|
|
166
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
167
|
+
return this.constructor.lc_name();
|
|
168
|
+
}
|
|
169
|
+
// Override the default behavior of console.log
|
|
170
|
+
[Symbol.for("nodejs.util.inspect.custom")](depth) {
|
|
171
|
+
if (depth === null) {
|
|
172
|
+
return this;
|
|
173
|
+
}
|
|
174
|
+
const printable = stringifyWithDepthLimit(this._printableFields, Math.max(4, depth));
|
|
175
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
176
|
+
return `${this.constructor.lc_name()} ${printable}`;
|
|
177
|
+
}
|
|
128
178
|
}
|
|
129
179
|
export function isOpenAIToolCallArray(value) {
|
|
130
180
|
return (Array.isArray(value) &&
|
package/dist/messages/chat.cjs
CHANGED
|
@@ -32,6 +32,12 @@ class ChatMessage extends base_js_1.BaseMessage {
|
|
|
32
32
|
static isInstance(message) {
|
|
33
33
|
return message._getType() === "generic";
|
|
34
34
|
}
|
|
35
|
+
get _printableFields() {
|
|
36
|
+
return {
|
|
37
|
+
...super._printableFields,
|
|
38
|
+
role: this.role,
|
|
39
|
+
};
|
|
40
|
+
}
|
|
35
41
|
}
|
|
36
42
|
exports.ChatMessage = ChatMessage;
|
|
37
43
|
/**
|
|
@@ -68,5 +74,11 @@ class ChatMessageChunk extends base_js_1.BaseMessageChunk {
|
|
|
68
74
|
id: this.id ?? chunk.id,
|
|
69
75
|
});
|
|
70
76
|
}
|
|
77
|
+
get _printableFields() {
|
|
78
|
+
return {
|
|
79
|
+
...super._printableFields,
|
|
80
|
+
role: this.role,
|
|
81
|
+
};
|
|
82
|
+
}
|
|
71
83
|
}
|
|
72
84
|
exports.ChatMessageChunk = ChatMessageChunk;
|
package/dist/messages/chat.d.ts
CHANGED
|
@@ -13,6 +13,7 @@ export declare class ChatMessage extends BaseMessage implements ChatMessageField
|
|
|
13
13
|
constructor(fields: ChatMessageFieldsWithRole);
|
|
14
14
|
_getType(): MessageType;
|
|
15
15
|
static isInstance(message: BaseMessage): message is ChatMessage;
|
|
16
|
+
get _printableFields(): Record<string, unknown>;
|
|
16
17
|
}
|
|
17
18
|
/**
|
|
18
19
|
* Represents a chunk of a chat message, which can be concatenated with
|
|
@@ -25,4 +26,5 @@ export declare class ChatMessageChunk extends BaseMessageChunk {
|
|
|
25
26
|
constructor(fields: ChatMessageFieldsWithRole);
|
|
26
27
|
_getType(): MessageType;
|
|
27
28
|
concat(chunk: ChatMessageChunk): ChatMessageChunk;
|
|
29
|
+
get _printableFields(): Record<string, unknown>;
|
|
28
30
|
}
|