langchain 0.0.75 → 0.0.76
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/base_language/count_tokens.cjs +5 -21
- package/dist/base_language/count_tokens.d.ts +1 -6
- package/dist/base_language/count_tokens.js +4 -19
- package/dist/base_language/index.cjs +10 -24
- package/dist/base_language/index.d.ts +3 -2
- package/dist/base_language/index.js +11 -25
- package/dist/cache/redis.d.ts +3 -1
- package/dist/callbacks/base.d.ts +4 -4
- package/dist/callbacks/handlers/initialize.cjs +2 -9
- package/dist/callbacks/handlers/initialize.d.ts +1 -1
- package/dist/callbacks/handlers/initialize.js +2 -9
- package/dist/callbacks/handlers/tracer.cjs +11 -22
- package/dist/callbacks/handlers/tracer.d.ts +2 -2
- package/dist/callbacks/handlers/tracer.js +11 -22
- package/dist/callbacks/handlers/tracer_langchain.cjs +52 -91
- package/dist/callbacks/handlers/tracer_langchain.d.ts +12 -9
- package/dist/callbacks/handlers/tracer_langchain.js +52 -68
- package/dist/callbacks/handlers/tracer_langchain_v1.cjs +5 -1
- package/dist/callbacks/handlers/tracer_langchain_v1.js +5 -1
- package/dist/callbacks/manager.cjs +10 -10
- package/dist/callbacks/manager.d.ts +2 -2
- package/dist/callbacks/manager.js +10 -10
- package/dist/chains/question_answering/map_reduce_prompts.cjs +5 -5
- package/dist/chains/question_answering/map_reduce_prompts.d.ts +1 -1
- package/dist/chains/question_answering/map_reduce_prompts.js +1 -1
- package/dist/chains/question_answering/refine_prompts.cjs +5 -5
- package/dist/chains/question_answering/refine_prompts.d.ts +1 -1
- package/dist/chains/question_answering/refine_prompts.js +1 -1
- package/dist/chains/question_answering/stuff_prompts.cjs +2 -2
- package/dist/chains/question_answering/stuff_prompts.d.ts +1 -1
- package/dist/chains/question_answering/stuff_prompts.js +1 -1
- package/dist/chains/sequential_chain.cjs +2 -2
- package/dist/chains/sequential_chain.d.ts +2 -2
- package/dist/chains/sequential_chain.js +2 -2
- package/dist/chains/sql_db/sql_db_prompt.cjs +20 -1
- package/dist/chains/sql_db/sql_db_prompt.d.ts +1 -0
- package/dist/chains/sql_db/sql_db_prompt.js +19 -0
- package/dist/chat_models/base.cjs +17 -1
- package/dist/chat_models/base.d.ts +6 -0
- package/dist/chat_models/base.js +18 -2
- package/dist/chat_models/openai.cjs +2 -2
- package/dist/chat_models/openai.js +2 -2
- package/dist/client/langchainplus.cjs +90 -29
- package/dist/client/langchainplus.d.ts +7 -5
- package/dist/client/langchainplus.js +90 -29
- package/dist/document_loaders/fs/unstructured.cjs +8 -0
- package/dist/document_loaders/fs/unstructured.d.ts +3 -0
- package/dist/document_loaders/fs/unstructured.js +8 -0
- package/dist/document_loaders/web/apify_dataset.cjs +64 -0
- package/dist/document_loaders/web/apify_dataset.d.ts +28 -0
- package/dist/document_loaders/web/apify_dataset.js +60 -0
- package/dist/embeddings/openai.cjs +2 -2
- package/dist/embeddings/openai.js +2 -2
- package/dist/llms/base.cjs +18 -1
- package/dist/llms/base.d.ts +7 -1
- package/dist/llms/base.js +19 -2
- package/dist/llms/openai-chat.cjs +2 -2
- package/dist/llms/openai-chat.js +2 -2
- package/dist/llms/openai.cjs +2 -2
- package/dist/llms/openai.js +2 -2
- package/dist/memory/base.cjs +9 -1
- package/dist/memory/base.d.ts +1 -0
- package/dist/memory/base.js +7 -0
- package/dist/memory/entity_memory.cjs +151 -0
- package/dist/memory/entity_memory.d.ts +35 -0
- package/dist/memory/entity_memory.js +147 -0
- package/dist/memory/index.cjs +5 -1
- package/dist/memory/index.d.ts +2 -0
- package/dist/memory/index.js +2 -0
- package/dist/memory/prompt.cjs +84 -1
- package/dist/memory/prompt.d.ts +6 -0
- package/dist/memory/prompt.js +83 -0
- package/dist/memory/stores/entity/in_memory.cjs +32 -0
- package/dist/memory/stores/entity/in_memory.d.ts +10 -0
- package/dist/memory/stores/entity/in_memory.js +28 -0
- package/dist/prompts/index.cjs +6 -1
- package/dist/prompts/index.d.ts +1 -0
- package/dist/prompts/index.js +1 -0
- package/dist/{chains/prompt_selector.d.ts → prompts/selectors/conditional.d.ts} +4 -4
- package/dist/schema/index.cjs +13 -1
- package/dist/schema/index.d.ts +17 -0
- package/dist/schema/index.js +11 -0
- package/dist/stores/message/dynamodb.cjs +8 -6
- package/dist/stores/message/dynamodb.js +8 -6
- package/dist/stores/message/redis.cjs +5 -3
- package/dist/stores/message/redis.js +5 -3
- package/dist/stores/message/utils.cjs +30 -15
- package/dist/stores/message/utils.d.ts +4 -2
- package/dist/stores/message/utils.js +28 -14
- package/dist/text_splitter.cjs +3 -23
- package/dist/text_splitter.d.ts +1 -3
- package/dist/text_splitter.js +3 -23
- package/dist/tools/webbrowser.cjs +5 -7
- package/dist/tools/webbrowser.js +3 -5
- package/dist/util/env.cjs +39 -7
- package/dist/util/env.d.ts +19 -0
- package/dist/util/env.js +32 -6
- package/dist/util/sql_utils.cjs +18 -0
- package/dist/util/sql_utils.js +19 -1
- package/dist/util/tiktoken.cjs +26 -0
- package/dist/util/tiktoken.d.ts +9 -0
- package/dist/util/tiktoken.js +21 -0
- package/dist/vectorstores/redis.cjs +236 -0
- package/dist/vectorstores/redis.d.ts +80 -0
- package/dist/vectorstores/redis.js +232 -0
- package/document_loaders/web/apify_dataset.cjs +1 -0
- package/document_loaders/web/apify_dataset.d.ts +1 -0
- package/document_loaders/web/apify_dataset.js +1 -0
- package/package.json +25 -5
- package/vectorstores/redis.cjs +1 -0
- package/vectorstores/redis.d.ts +1 -0
- package/vectorstores/redis.js +1 -0
- /package/dist/{chains/prompt_selector.cjs → prompts/selectors/conditional.cjs} +0 -0
- /package/dist/{chains/prompt_selector.js → prompts/selectors/conditional.js} +0 -0
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.calculateMaxTokens = exports.
|
|
4
|
-
|
|
3
|
+
exports.calculateMaxTokens = exports.getModelContextSize = exports.getEmbeddingContextSize = exports.getModelNameForTiktoken = void 0;
|
|
4
|
+
const tiktoken_js_1 = require("../util/tiktoken.cjs");
|
|
5
|
+
// https://www.npmjs.com/package/js-tiktoken
|
|
5
6
|
const getModelNameForTiktoken = (modelName) => {
|
|
6
7
|
if (modelName.startsWith("gpt-3.5-turbo-")) {
|
|
7
8
|
return "gpt-3.5-turbo";
|
|
@@ -49,31 +50,14 @@ const getModelContextSize = (modelName) => {
|
|
|
49
50
|
}
|
|
50
51
|
};
|
|
51
52
|
exports.getModelContextSize = getModelContextSize;
|
|
52
|
-
const importTiktoken = async () => {
|
|
53
|
-
try {
|
|
54
|
-
const { encoding_for_model } = await import("@dqbd/tiktoken");
|
|
55
|
-
return { encoding_for_model };
|
|
56
|
-
}
|
|
57
|
-
catch (error) {
|
|
58
|
-
console.log(error);
|
|
59
|
-
return { encoding_for_model: null };
|
|
60
|
-
}
|
|
61
|
-
};
|
|
62
|
-
exports.importTiktoken = importTiktoken;
|
|
63
53
|
const calculateMaxTokens = async ({ prompt, modelName, }) => {
|
|
64
|
-
const { encoding_for_model } = await (0, exports.importTiktoken)();
|
|
65
54
|
// fallback to approximate calculation if tiktoken is not available
|
|
66
55
|
let numTokens = Math.ceil(prompt.length / 4);
|
|
67
56
|
try {
|
|
68
|
-
|
|
69
|
-
const encoding = encoding_for_model((0, exports.getModelNameForTiktoken)(modelName));
|
|
70
|
-
const tokenized = encoding.encode(prompt);
|
|
71
|
-
numTokens = tokenized.length;
|
|
72
|
-
encoding.free();
|
|
73
|
-
}
|
|
57
|
+
numTokens = (await (0, tiktoken_js_1.encodingForModel)(modelName)).encode(prompt).length;
|
|
74
58
|
}
|
|
75
59
|
catch (error) {
|
|
76
|
-
console.warn("Failed to calculate number of tokens
|
|
60
|
+
console.warn("Failed to calculate number of tokens, falling back to approximate count");
|
|
77
61
|
}
|
|
78
62
|
const maxTokens = (0, exports.getModelContextSize)(modelName);
|
|
79
63
|
return maxTokens - numTokens;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type TiktokenModel } from "js-tiktoken/lite";
|
|
2
2
|
export declare const getModelNameForTiktoken: (modelName: string) => TiktokenModel;
|
|
3
3
|
export declare const getEmbeddingContextSize: (modelName?: string) => number;
|
|
4
4
|
export declare const getModelContextSize: (modelName: string) => number;
|
|
@@ -6,10 +6,5 @@ interface CalculateMaxTokenProps {
|
|
|
6
6
|
prompt: string;
|
|
7
7
|
modelName: TiktokenModel;
|
|
8
8
|
}
|
|
9
|
-
export declare const importTiktoken: () => Promise<{
|
|
10
|
-
encoding_for_model: typeof import("@dqbd/tiktoken").encoding_for_model;
|
|
11
|
-
} | {
|
|
12
|
-
encoding_for_model: null;
|
|
13
|
-
}>;
|
|
14
9
|
export declare const calculateMaxTokens: ({ prompt, modelName, }: CalculateMaxTokenProps) => Promise<number>;
|
|
15
10
|
export {};
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
|
|
1
|
+
import { encodingForModel } from "../util/tiktoken.js";
|
|
2
|
+
// https://www.npmjs.com/package/js-tiktoken
|
|
2
3
|
export const getModelNameForTiktoken = (modelName) => {
|
|
3
4
|
if (modelName.startsWith("gpt-3.5-turbo-")) {
|
|
4
5
|
return "gpt-3.5-turbo";
|
|
@@ -43,30 +44,14 @@ export const getModelContextSize = (modelName) => {
|
|
|
43
44
|
return 4097;
|
|
44
45
|
}
|
|
45
46
|
};
|
|
46
|
-
export const importTiktoken = async () => {
|
|
47
|
-
try {
|
|
48
|
-
const { encoding_for_model } = await import("@dqbd/tiktoken");
|
|
49
|
-
return { encoding_for_model };
|
|
50
|
-
}
|
|
51
|
-
catch (error) {
|
|
52
|
-
console.log(error);
|
|
53
|
-
return { encoding_for_model: null };
|
|
54
|
-
}
|
|
55
|
-
};
|
|
56
47
|
export const calculateMaxTokens = async ({ prompt, modelName, }) => {
|
|
57
|
-
const { encoding_for_model } = await importTiktoken();
|
|
58
48
|
// fallback to approximate calculation if tiktoken is not available
|
|
59
49
|
let numTokens = Math.ceil(prompt.length / 4);
|
|
60
50
|
try {
|
|
61
|
-
|
|
62
|
-
const encoding = encoding_for_model(getModelNameForTiktoken(modelName));
|
|
63
|
-
const tokenized = encoding.encode(prompt);
|
|
64
|
-
numTokens = tokenized.length;
|
|
65
|
-
encoding.free();
|
|
66
|
-
}
|
|
51
|
+
numTokens = (await encodingForModel(modelName)).encode(prompt).length;
|
|
67
52
|
}
|
|
68
53
|
catch (error) {
|
|
69
|
-
console.warn("Failed to calculate number of tokens
|
|
54
|
+
console.warn("Failed to calculate number of tokens, falling back to approximate count");
|
|
70
55
|
}
|
|
71
56
|
const maxTokens = getModelContextSize(modelName);
|
|
72
57
|
return maxTokens - numTokens;
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.BaseLanguageModel = exports.BaseLangChain = void 0;
|
|
4
4
|
const async_caller_js_1 = require("../util/async_caller.cjs");
|
|
5
5
|
const count_tokens_js_1 = require("./count_tokens.cjs");
|
|
6
|
+
const tiktoken_js_1 = require("../util/tiktoken.cjs");
|
|
6
7
|
const getVerbosity = () => false;
|
|
7
8
|
/**
|
|
8
9
|
* Base class for language models, chains, tools.
|
|
@@ -60,38 +61,23 @@ class BaseLanguageModel extends BaseLangChain {
|
|
|
60
61
|
writable: true,
|
|
61
62
|
value: void 0
|
|
62
63
|
});
|
|
63
|
-
Object.defineProperty(this, "_registry", {
|
|
64
|
-
enumerable: true,
|
|
65
|
-
configurable: true,
|
|
66
|
-
writable: true,
|
|
67
|
-
value: void 0
|
|
68
|
-
});
|
|
69
64
|
this.caller = new async_caller_js_1.AsyncCaller(params ?? {});
|
|
70
65
|
}
|
|
71
66
|
async getNumTokens(text) {
|
|
72
67
|
// fallback to approximate calculation if tiktoken is not available
|
|
73
68
|
let numTokens = Math.ceil(text.length / 4);
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
if (encoding_for_model) {
|
|
80
|
-
this._encoding = encoding_for_model("modelName" in this
|
|
81
|
-
? (0, count_tokens_js_1.getModelNameForTiktoken)(this.modelName)
|
|
82
|
-
: "gpt2");
|
|
83
|
-
// We need to register a finalizer to free the tokenizer when the
|
|
84
|
-
// model is garbage collected.
|
|
85
|
-
this._registry = new FinalizationRegistry((t) => t.free());
|
|
86
|
-
this._registry.register(this, this._encoding);
|
|
87
|
-
}
|
|
69
|
+
if (!this._encoding) {
|
|
70
|
+
try {
|
|
71
|
+
this._encoding = await (0, tiktoken_js_1.encodingForModel)("modelName" in this
|
|
72
|
+
? (0, count_tokens_js_1.getModelNameForTiktoken)(this.modelName)
|
|
73
|
+
: "gpt2");
|
|
88
74
|
}
|
|
89
|
-
|
|
90
|
-
|
|
75
|
+
catch (error) {
|
|
76
|
+
console.warn("Failed to calculate number of tokens, falling back to approximate count", error);
|
|
91
77
|
}
|
|
92
78
|
}
|
|
93
|
-
|
|
94
|
-
|
|
79
|
+
if (this._encoding) {
|
|
80
|
+
numTokens = this._encoding.encode(text).length;
|
|
95
81
|
}
|
|
96
82
|
return numTokens;
|
|
97
83
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { BasePromptValue, LLMResult } from "../schema/index.js";
|
|
1
|
+
import { BaseChatMessage, BasePromptValue, LLMResult } from "../schema/index.js";
|
|
2
2
|
import { CallbackManager, Callbacks } from "../callbacks/manager.js";
|
|
3
3
|
import { AsyncCaller, AsyncCallerParams } from "../util/async_caller.js";
|
|
4
4
|
export type SerializedLLM = {
|
|
@@ -63,10 +63,11 @@ export declare abstract class BaseLanguageModel extends BaseLangChain implements
|
|
|
63
63
|
caller: AsyncCaller;
|
|
64
64
|
constructor(params: BaseLanguageModelParams);
|
|
65
65
|
abstract generatePrompt(promptValues: BasePromptValue[], options?: string[] | this["CallOptions"], callbacks?: Callbacks): Promise<LLMResult>;
|
|
66
|
+
abstract predict(text: string, options?: string[] | this["CallOptions"], callbacks?: Callbacks): Promise<string>;
|
|
67
|
+
abstract predictMessages(messages: BaseChatMessage[], options?: string[] | this["CallOptions"], callbacks?: Callbacks): Promise<BaseChatMessage>;
|
|
66
68
|
abstract _modelType(): string;
|
|
67
69
|
abstract _llmType(): string;
|
|
68
70
|
private _encoding?;
|
|
69
|
-
private _registry?;
|
|
70
71
|
getNumTokens(text: string): Promise<number>;
|
|
71
72
|
/**
|
|
72
73
|
* Get the identifying parameters of the LLM.
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { AsyncCaller } from "../util/async_caller.js";
|
|
2
|
-
import { getModelNameForTiktoken
|
|
2
|
+
import { getModelNameForTiktoken } from "./count_tokens.js";
|
|
3
|
+
import { encodingForModel } from "../util/tiktoken.js";
|
|
3
4
|
const getVerbosity = () => false;
|
|
4
5
|
/**
|
|
5
6
|
* Base class for language models, chains, tools.
|
|
@@ -56,38 +57,23 @@ export class BaseLanguageModel extends BaseLangChain {
|
|
|
56
57
|
writable: true,
|
|
57
58
|
value: void 0
|
|
58
59
|
});
|
|
59
|
-
Object.defineProperty(this, "_registry", {
|
|
60
|
-
enumerable: true,
|
|
61
|
-
configurable: true,
|
|
62
|
-
writable: true,
|
|
63
|
-
value: void 0
|
|
64
|
-
});
|
|
65
60
|
this.caller = new AsyncCaller(params ?? {});
|
|
66
61
|
}
|
|
67
62
|
async getNumTokens(text) {
|
|
68
63
|
// fallback to approximate calculation if tiktoken is not available
|
|
69
64
|
let numTokens = Math.ceil(text.length / 4);
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
if (encoding_for_model) {
|
|
76
|
-
this._encoding = encoding_for_model("modelName" in this
|
|
77
|
-
? getModelNameForTiktoken(this.modelName)
|
|
78
|
-
: "gpt2");
|
|
79
|
-
// We need to register a finalizer to free the tokenizer when the
|
|
80
|
-
// model is garbage collected.
|
|
81
|
-
this._registry = new FinalizationRegistry((t) => t.free());
|
|
82
|
-
this._registry.register(this, this._encoding);
|
|
83
|
-
}
|
|
65
|
+
if (!this._encoding) {
|
|
66
|
+
try {
|
|
67
|
+
this._encoding = await encodingForModel("modelName" in this
|
|
68
|
+
? getModelNameForTiktoken(this.modelName)
|
|
69
|
+
: "gpt2");
|
|
84
70
|
}
|
|
85
|
-
|
|
86
|
-
|
|
71
|
+
catch (error) {
|
|
72
|
+
console.warn("Failed to calculate number of tokens, falling back to approximate count", error);
|
|
87
73
|
}
|
|
88
74
|
}
|
|
89
|
-
|
|
90
|
-
|
|
75
|
+
if (this._encoding) {
|
|
76
|
+
numTokens = this._encoding.encode(text).length;
|
|
91
77
|
}
|
|
92
78
|
return numTokens;
|
|
93
79
|
}
|
package/dist/cache/redis.d.ts
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { createCluster, createClient } from "redis";
|
|
2
2
|
import { BaseCache, Generation } from "../schema/index.js";
|
|
3
|
+
type RedisClientType = ReturnType<typeof createClient> | ReturnType<typeof createCluster>;
|
|
3
4
|
export declare class RedisCache extends BaseCache {
|
|
4
5
|
private redisClient;
|
|
5
6
|
constructor(redisClient: RedisClientType);
|
|
6
7
|
lookup(prompt: string, llmKey: string): Promise<Generation[] | null>;
|
|
7
8
|
update(prompt: string, llmKey: string, value: Generation[]): Promise<void>;
|
|
8
9
|
}
|
|
10
|
+
export {};
|
package/dist/callbacks/base.d.ts
CHANGED
|
@@ -12,7 +12,7 @@ declare abstract class BaseCallbackHandlerMethodsClass {
|
|
|
12
12
|
*/
|
|
13
13
|
handleLLMStart?(llm: {
|
|
14
14
|
name: string;
|
|
15
|
-
}, prompts: string[], runId: string, parentRunId?: string): Promise<void> | void;
|
|
15
|
+
}, prompts: string[], runId: string, parentRunId?: string, extraParams?: Record<string, unknown>): Promise<void> | void;
|
|
16
16
|
/**
|
|
17
17
|
* Called when an LLM/ChatModel in `streaming` mode produces a new token
|
|
18
18
|
*/
|
|
@@ -31,7 +31,7 @@ declare abstract class BaseCallbackHandlerMethodsClass {
|
|
|
31
31
|
*/
|
|
32
32
|
handleChatModelStart?(llm: {
|
|
33
33
|
name: string;
|
|
34
|
-
}, messages: BaseChatMessage[][], runId: string, parentRunId?: string): Promise<void> | void;
|
|
34
|
+
}, messages: BaseChatMessage[][], runId: string, parentRunId?: string, extraParams?: Record<string, unknown>): Promise<void> | void;
|
|
35
35
|
/**
|
|
36
36
|
* Called at the start of a Chain run, with the chain name and inputs
|
|
37
37
|
* and the run ID.
|
|
@@ -103,7 +103,7 @@ export declare abstract class BaseCallbackHandler extends BaseCallbackHandlerMet
|
|
|
103
103
|
*/
|
|
104
104
|
handleLLMStart?(llm: {
|
|
105
105
|
name: string;
|
|
106
|
-
}, prompts: string[], runId: string, parentRunId?: string | undefined): void | Promise<void>;
|
|
106
|
+
}, prompts: string[], runId: string, parentRunId?: string | undefined, extraParams?: Record<string, unknown> | undefined): void | Promise<void>;
|
|
107
107
|
/**
|
|
108
108
|
* Called when an LLM/ChatModel in `streaming` mode produces a new token
|
|
109
109
|
*/
|
|
@@ -122,7 +122,7 @@ export declare abstract class BaseCallbackHandler extends BaseCallbackHandlerMet
|
|
|
122
122
|
*/
|
|
123
123
|
handleChatModelStart?(llm: {
|
|
124
124
|
name: string;
|
|
125
|
-
}, messages: BaseChatMessage[][], runId: string, parentRunId?: string | undefined): void | Promise<void>;
|
|
125
|
+
}, messages: BaseChatMessage[][], runId: string, parentRunId?: string | undefined, extraParams?: Record<string, unknown> | undefined): void | Promise<void>;
|
|
126
126
|
/**
|
|
127
127
|
* Called at the start of a Chain run, with the chain name and inputs
|
|
128
128
|
* and the run ID.
|
|
@@ -14,14 +14,7 @@ async function getTracingCallbackHandler(session) {
|
|
|
14
14
|
return tracer;
|
|
15
15
|
}
|
|
16
16
|
exports.getTracingCallbackHandler = getTracingCallbackHandler;
|
|
17
|
-
async function getTracingV2CallbackHandler(
|
|
18
|
-
|
|
19
|
-
if (session) {
|
|
20
|
-
await tracer.loadSession(session);
|
|
21
|
-
}
|
|
22
|
-
else {
|
|
23
|
-
await tracer.loadDefaultSession();
|
|
24
|
-
}
|
|
25
|
-
return tracer;
|
|
17
|
+
async function getTracingV2CallbackHandler() {
|
|
18
|
+
return new tracer_langchain_js_1.LangChainTracer();
|
|
26
19
|
}
|
|
27
20
|
exports.getTracingV2CallbackHandler = getTracingV2CallbackHandler;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { LangChainTracer } from "./tracer_langchain.js";
|
|
2
2
|
import { LangChainTracerV1 } from "./tracer_langchain_v1.js";
|
|
3
3
|
export declare function getTracingCallbackHandler(session?: string): Promise<LangChainTracerV1>;
|
|
4
|
-
export declare function getTracingV2CallbackHandler(
|
|
4
|
+
export declare function getTracingV2CallbackHandler(): Promise<LangChainTracer>;
|
|
@@ -10,13 +10,6 @@ export async function getTracingCallbackHandler(session) {
|
|
|
10
10
|
}
|
|
11
11
|
return tracer;
|
|
12
12
|
}
|
|
13
|
-
export async function getTracingV2CallbackHandler(
|
|
14
|
-
|
|
15
|
-
if (session) {
|
|
16
|
-
await tracer.loadSession(session);
|
|
17
|
-
}
|
|
18
|
-
else {
|
|
19
|
-
await tracer.loadDefaultSession();
|
|
20
|
-
}
|
|
21
|
-
return tracer;
|
|
13
|
+
export async function getTracingV2CallbackHandler() {
|
|
14
|
+
return new LangChainTracer();
|
|
22
15
|
}
|
|
@@ -24,37 +24,28 @@ class BaseTracer extends base_js_1.BaseCallbackHandler {
|
|
|
24
24
|
if (parentRun) {
|
|
25
25
|
this._addChildRun(parentRun, run);
|
|
26
26
|
}
|
|
27
|
-
else {
|
|
28
|
-
throw new Error(`Caller run ${run.parent_run_id} not found`);
|
|
29
|
-
}
|
|
30
27
|
}
|
|
31
28
|
this.runMap.set(run.id, run);
|
|
32
29
|
}
|
|
33
30
|
async _endTrace(run) {
|
|
34
|
-
|
|
35
|
-
|
|
31
|
+
const parentRun = run.parent_run_id !== undefined && this.runMap.get(run.parent_run_id);
|
|
32
|
+
if (parentRun) {
|
|
33
|
+
parentRun.child_execution_order = Math.max(parentRun.child_execution_order, run.child_execution_order);
|
|
36
34
|
}
|
|
37
35
|
else {
|
|
38
|
-
|
|
39
|
-
if (parentRun === undefined) {
|
|
40
|
-
throw new Error(`Parent run ${run.parent_run_id} not found`);
|
|
41
|
-
}
|
|
42
|
-
parentRun.child_execution_order = Math.max(parentRun.child_execution_order, run.child_execution_order);
|
|
36
|
+
await this.persistRun(run);
|
|
43
37
|
}
|
|
44
38
|
this.runMap.delete(run.id);
|
|
45
39
|
}
|
|
46
40
|
_getExecutionOrder(parentRunId) {
|
|
41
|
+
const parentRun = parentRunId !== undefined && this.runMap.get(parentRunId);
|
|
47
42
|
// If a run has no parent then execution order is 1
|
|
48
|
-
if (
|
|
43
|
+
if (!parentRun) {
|
|
49
44
|
return 1;
|
|
50
45
|
}
|
|
51
|
-
const parentRun = this.runMap.get(parentRunId);
|
|
52
|
-
if (parentRun === undefined) {
|
|
53
|
-
throw new Error(`Parent run ${parentRunId} not found`);
|
|
54
|
-
}
|
|
55
46
|
return parentRun.child_execution_order + 1;
|
|
56
47
|
}
|
|
57
|
-
async handleLLMStart(llm, prompts, runId, parentRunId) {
|
|
48
|
+
async handleLLMStart(llm, prompts, runId, parentRunId, extraParams) {
|
|
58
49
|
const execution_order = this._getExecutionOrder(parentRunId);
|
|
59
50
|
const run = {
|
|
60
51
|
id: runId,
|
|
@@ -68,16 +59,13 @@ class BaseTracer extends base_js_1.BaseCallbackHandler {
|
|
|
68
59
|
child_runs: [],
|
|
69
60
|
child_execution_order: execution_order,
|
|
70
61
|
run_type: "llm",
|
|
62
|
+
extra: extraParams,
|
|
71
63
|
};
|
|
72
64
|
this._startTrace(run);
|
|
73
65
|
await this.onLLMStart?.(run);
|
|
74
66
|
}
|
|
75
|
-
async handleChatModelStart(llm, messages, runId, parentRunId) {
|
|
67
|
+
async handleChatModelStart(llm, messages, runId, parentRunId, extraParams) {
|
|
76
68
|
const execution_order = this._getExecutionOrder(parentRunId);
|
|
77
|
-
const convertedMessages = messages.map((batch) => batch.map((message) => ({
|
|
78
|
-
_type: message._getType(),
|
|
79
|
-
content: message.text, // TODO: Unify serialization btwn languages
|
|
80
|
-
})));
|
|
81
69
|
const run = {
|
|
82
70
|
id: runId,
|
|
83
71
|
name: llm.name,
|
|
@@ -85,11 +73,12 @@ class BaseTracer extends base_js_1.BaseCallbackHandler {
|
|
|
85
73
|
start_time: Date.now(),
|
|
86
74
|
end_time: 0,
|
|
87
75
|
serialized: llm,
|
|
88
|
-
inputs: { messages
|
|
76
|
+
inputs: { messages },
|
|
89
77
|
execution_order,
|
|
90
78
|
child_runs: [],
|
|
91
79
|
child_execution_order: execution_order,
|
|
92
80
|
run_type: "llm",
|
|
81
|
+
extra: extraParams,
|
|
93
82
|
};
|
|
94
83
|
this._startTrace(run);
|
|
95
84
|
await this.onLLMStart?.(run);
|
|
@@ -35,10 +35,10 @@ export declare abstract class BaseTracer extends BaseCallbackHandler {
|
|
|
35
35
|
protected _getExecutionOrder(parentRunId: string | undefined): number;
|
|
36
36
|
handleLLMStart(llm: {
|
|
37
37
|
name: string;
|
|
38
|
-
}, prompts: string[], runId: string, parentRunId?: string): Promise<void>;
|
|
38
|
+
}, prompts: string[], runId: string, parentRunId?: string, extraParams?: Record<string, unknown>): Promise<void>;
|
|
39
39
|
handleChatModelStart(llm: {
|
|
40
40
|
name: string;
|
|
41
|
-
}, messages: BaseChatMessage[][], runId: string, parentRunId?: string): Promise<void>;
|
|
41
|
+
}, messages: BaseChatMessage[][], runId: string, parentRunId?: string, extraParams?: Record<string, unknown>): Promise<void>;
|
|
42
42
|
handleLLMEnd(output: LLMResult, runId: string): Promise<void>;
|
|
43
43
|
handleLLMError(error: Error, runId: string): Promise<void>;
|
|
44
44
|
handleChainStart(chain: {
|
|
@@ -21,37 +21,28 @@ export class BaseTracer extends BaseCallbackHandler {
|
|
|
21
21
|
if (parentRun) {
|
|
22
22
|
this._addChildRun(parentRun, run);
|
|
23
23
|
}
|
|
24
|
-
else {
|
|
25
|
-
throw new Error(`Caller run ${run.parent_run_id} not found`);
|
|
26
|
-
}
|
|
27
24
|
}
|
|
28
25
|
this.runMap.set(run.id, run);
|
|
29
26
|
}
|
|
30
27
|
async _endTrace(run) {
|
|
31
|
-
|
|
32
|
-
|
|
28
|
+
const parentRun = run.parent_run_id !== undefined && this.runMap.get(run.parent_run_id);
|
|
29
|
+
if (parentRun) {
|
|
30
|
+
parentRun.child_execution_order = Math.max(parentRun.child_execution_order, run.child_execution_order);
|
|
33
31
|
}
|
|
34
32
|
else {
|
|
35
|
-
|
|
36
|
-
if (parentRun === undefined) {
|
|
37
|
-
throw new Error(`Parent run ${run.parent_run_id} not found`);
|
|
38
|
-
}
|
|
39
|
-
parentRun.child_execution_order = Math.max(parentRun.child_execution_order, run.child_execution_order);
|
|
33
|
+
await this.persistRun(run);
|
|
40
34
|
}
|
|
41
35
|
this.runMap.delete(run.id);
|
|
42
36
|
}
|
|
43
37
|
_getExecutionOrder(parentRunId) {
|
|
38
|
+
const parentRun = parentRunId !== undefined && this.runMap.get(parentRunId);
|
|
44
39
|
// If a run has no parent then execution order is 1
|
|
45
|
-
if (
|
|
40
|
+
if (!parentRun) {
|
|
46
41
|
return 1;
|
|
47
42
|
}
|
|
48
|
-
const parentRun = this.runMap.get(parentRunId);
|
|
49
|
-
if (parentRun === undefined) {
|
|
50
|
-
throw new Error(`Parent run ${parentRunId} not found`);
|
|
51
|
-
}
|
|
52
43
|
return parentRun.child_execution_order + 1;
|
|
53
44
|
}
|
|
54
|
-
async handleLLMStart(llm, prompts, runId, parentRunId) {
|
|
45
|
+
async handleLLMStart(llm, prompts, runId, parentRunId, extraParams) {
|
|
55
46
|
const execution_order = this._getExecutionOrder(parentRunId);
|
|
56
47
|
const run = {
|
|
57
48
|
id: runId,
|
|
@@ -65,16 +56,13 @@ export class BaseTracer extends BaseCallbackHandler {
|
|
|
65
56
|
child_runs: [],
|
|
66
57
|
child_execution_order: execution_order,
|
|
67
58
|
run_type: "llm",
|
|
59
|
+
extra: extraParams,
|
|
68
60
|
};
|
|
69
61
|
this._startTrace(run);
|
|
70
62
|
await this.onLLMStart?.(run);
|
|
71
63
|
}
|
|
72
|
-
async handleChatModelStart(llm, messages, runId, parentRunId) {
|
|
64
|
+
async handleChatModelStart(llm, messages, runId, parentRunId, extraParams) {
|
|
73
65
|
const execution_order = this._getExecutionOrder(parentRunId);
|
|
74
|
-
const convertedMessages = messages.map((batch) => batch.map((message) => ({
|
|
75
|
-
_type: message._getType(),
|
|
76
|
-
content: message.text, // TODO: Unify serialization btwn languages
|
|
77
|
-
})));
|
|
78
66
|
const run = {
|
|
79
67
|
id: runId,
|
|
80
68
|
name: llm.name,
|
|
@@ -82,11 +70,12 @@ export class BaseTracer extends BaseCallbackHandler {
|
|
|
82
70
|
start_time: Date.now(),
|
|
83
71
|
end_time: 0,
|
|
84
72
|
serialized: llm,
|
|
85
|
-
inputs: { messages
|
|
73
|
+
inputs: { messages },
|
|
86
74
|
execution_order,
|
|
87
75
|
child_runs: [],
|
|
88
76
|
child_execution_order: execution_order,
|
|
89
77
|
run_type: "llm",
|
|
78
|
+
extra: extraParams,
|
|
90
79
|
};
|
|
91
80
|
this._startTrace(run);
|
|
92
81
|
await this.onLLMStart?.(run);
|