illuma-agents 1.0.8 → 1.0.10
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/LICENSE +1 -5
- package/dist/cjs/common/enum.cjs +1 -2
- package/dist/cjs/common/enum.cjs.map +1 -1
- package/dist/cjs/events.cjs +11 -0
- package/dist/cjs/events.cjs.map +1 -1
- package/dist/cjs/graphs/Graph.cjs +2 -1
- package/dist/cjs/graphs/Graph.cjs.map +1 -1
- package/dist/cjs/instrumentation.cjs +3 -1
- package/dist/cjs/instrumentation.cjs.map +1 -1
- package/dist/cjs/llm/anthropic/types.cjs.map +1 -1
- package/dist/cjs/llm/anthropic/utils/message_inputs.cjs +79 -2
- package/dist/cjs/llm/anthropic/utils/message_inputs.cjs.map +1 -1
- package/dist/cjs/llm/anthropic/utils/tools.cjs.map +1 -1
- package/dist/cjs/llm/bedrock/index.cjs +99 -0
- package/dist/cjs/llm/bedrock/index.cjs.map +1 -0
- package/dist/cjs/llm/fake.cjs.map +1 -1
- package/dist/cjs/llm/openai/index.cjs +102 -0
- package/dist/cjs/llm/openai/index.cjs.map +1 -1
- package/dist/cjs/llm/openai/utils/index.cjs +87 -1
- package/dist/cjs/llm/openai/utils/index.cjs.map +1 -1
- package/dist/cjs/llm/openrouter/index.cjs +175 -1
- package/dist/cjs/llm/openrouter/index.cjs.map +1 -1
- package/dist/cjs/llm/providers.cjs +13 -16
- package/dist/cjs/llm/providers.cjs.map +1 -1
- package/dist/cjs/llm/text.cjs.map +1 -1
- package/dist/cjs/messages/core.cjs +14 -14
- package/dist/cjs/messages/core.cjs.map +1 -1
- package/dist/cjs/messages/ids.cjs.map +1 -1
- package/dist/cjs/messages/prune.cjs.map +1 -1
- package/dist/cjs/run.cjs +18 -1
- package/dist/cjs/run.cjs.map +1 -1
- package/dist/cjs/splitStream.cjs.map +1 -1
- package/dist/cjs/stream.cjs +24 -1
- package/dist/cjs/stream.cjs.map +1 -1
- package/dist/cjs/tools/ToolNode.cjs +20 -1
- package/dist/cjs/tools/ToolNode.cjs.map +1 -1
- package/dist/cjs/tools/handlers.cjs +29 -25
- package/dist/cjs/tools/handlers.cjs.map +1 -1
- package/dist/cjs/tools/search/anthropic.cjs.map +1 -1
- package/dist/cjs/tools/search/content.cjs.map +1 -1
- package/dist/cjs/tools/search/firecrawl.cjs.map +1 -1
- package/dist/cjs/tools/search/format.cjs.map +1 -1
- package/dist/cjs/tools/search/highlights.cjs.map +1 -1
- package/dist/cjs/tools/search/rerankers.cjs.map +1 -1
- package/dist/cjs/tools/search/schema.cjs +27 -25
- package/dist/cjs/tools/search/schema.cjs.map +1 -1
- package/dist/cjs/tools/search/search.cjs +6 -1
- package/dist/cjs/tools/search/search.cjs.map +1 -1
- package/dist/cjs/tools/search/serper-scraper.cjs.map +1 -1
- package/dist/cjs/tools/search/tool.cjs +182 -35
- package/dist/cjs/tools/search/tool.cjs.map +1 -1
- package/dist/cjs/tools/search/utils.cjs.map +1 -1
- package/dist/cjs/utils/graph.cjs.map +1 -1
- package/dist/cjs/utils/llm.cjs +0 -1
- package/dist/cjs/utils/llm.cjs.map +1 -1
- package/dist/cjs/utils/misc.cjs.map +1 -1
- package/dist/cjs/utils/run.cjs.map +1 -1
- package/dist/cjs/utils/title.cjs +7 -7
- package/dist/cjs/utils/title.cjs.map +1 -1
- package/dist/esm/common/enum.mjs +1 -2
- package/dist/esm/common/enum.mjs.map +1 -1
- package/dist/esm/events.mjs +11 -0
- package/dist/esm/events.mjs.map +1 -1
- package/dist/esm/graphs/Graph.mjs +2 -1
- package/dist/esm/graphs/Graph.mjs.map +1 -1
- package/dist/esm/instrumentation.mjs +3 -1
- package/dist/esm/instrumentation.mjs.map +1 -1
- package/dist/esm/llm/anthropic/types.mjs.map +1 -1
- package/dist/esm/llm/anthropic/utils/message_inputs.mjs +79 -2
- package/dist/esm/llm/anthropic/utils/message_inputs.mjs.map +1 -1
- package/dist/esm/llm/anthropic/utils/tools.mjs.map +1 -1
- package/dist/esm/llm/bedrock/index.mjs +97 -0
- package/dist/esm/llm/bedrock/index.mjs.map +1 -0
- package/dist/esm/llm/fake.mjs.map +1 -1
- package/dist/esm/llm/openai/index.mjs +103 -1
- package/dist/esm/llm/openai/index.mjs.map +1 -1
- package/dist/esm/llm/openai/utils/index.mjs +88 -2
- package/dist/esm/llm/openai/utils/index.mjs.map +1 -1
- package/dist/esm/llm/openrouter/index.mjs +175 -1
- package/dist/esm/llm/openrouter/index.mjs.map +1 -1
- package/dist/esm/llm/providers.mjs +2 -5
- package/dist/esm/llm/providers.mjs.map +1 -1
- package/dist/esm/llm/text.mjs.map +1 -1
- package/dist/esm/messages/core.mjs +14 -14
- package/dist/esm/messages/core.mjs.map +1 -1
- package/dist/esm/messages/ids.mjs.map +1 -1
- package/dist/esm/messages/prune.mjs.map +1 -1
- package/dist/esm/run.mjs +18 -1
- package/dist/esm/run.mjs.map +1 -1
- package/dist/esm/splitStream.mjs.map +1 -1
- package/dist/esm/stream.mjs +24 -1
- package/dist/esm/stream.mjs.map +1 -1
- package/dist/esm/tools/ToolNode.mjs +20 -1
- package/dist/esm/tools/ToolNode.mjs.map +1 -1
- package/dist/esm/tools/handlers.mjs +30 -26
- package/dist/esm/tools/handlers.mjs.map +1 -1
- package/dist/esm/tools/search/anthropic.mjs.map +1 -1
- package/dist/esm/tools/search/content.mjs.map +1 -1
- package/dist/esm/tools/search/firecrawl.mjs.map +1 -1
- package/dist/esm/tools/search/format.mjs.map +1 -1
- package/dist/esm/tools/search/highlights.mjs.map +1 -1
- package/dist/esm/tools/search/rerankers.mjs.map +1 -1
- package/dist/esm/tools/search/schema.mjs +27 -25
- package/dist/esm/tools/search/schema.mjs.map +1 -1
- package/dist/esm/tools/search/search.mjs +6 -1
- package/dist/esm/tools/search/search.mjs.map +1 -1
- package/dist/esm/tools/search/serper-scraper.mjs.map +1 -1
- package/dist/esm/tools/search/tool.mjs +182 -35
- package/dist/esm/tools/search/tool.mjs.map +1 -1
- package/dist/esm/tools/search/utils.mjs.map +1 -1
- package/dist/esm/utils/graph.mjs.map +1 -1
- package/dist/esm/utils/llm.mjs +0 -1
- package/dist/esm/utils/llm.mjs.map +1 -1
- package/dist/esm/utils/misc.mjs.map +1 -1
- package/dist/esm/utils/run.mjs.map +1 -1
- package/dist/esm/utils/title.mjs +7 -7
- package/dist/esm/utils/title.mjs.map +1 -1
- package/dist/types/common/enum.d.ts +1 -2
- package/dist/types/llm/bedrock/index.d.ts +36 -0
- package/dist/types/llm/openai/index.d.ts +1 -0
- package/dist/types/llm/openai/utils/index.d.ts +10 -1
- package/dist/types/llm/openrouter/index.d.ts +4 -1
- package/dist/types/tools/search/types.d.ts +2 -0
- package/dist/types/types/llm.d.ts +3 -8
- package/package.json +16 -12
- package/src/common/enum.ts +1 -2
- package/src/common/index.ts +1 -1
- package/src/events.ts +11 -0
- package/src/graphs/Graph.ts +2 -1
- package/src/instrumentation.ts +25 -22
- package/src/llm/anthropic/llm.spec.ts +1442 -1442
- package/src/llm/anthropic/types.ts +140 -140
- package/src/llm/anthropic/utils/message_inputs.ts +757 -660
- package/src/llm/anthropic/utils/output_parsers.ts +133 -133
- package/src/llm/anthropic/utils/tools.ts +29 -29
- package/src/llm/bedrock/index.ts +128 -0
- package/src/llm/fake.ts +133 -133
- package/src/llm/google/llm.spec.ts +3 -1
- package/src/llm/google/utils/tools.ts +160 -160
- package/src/llm/openai/index.ts +126 -0
- package/src/llm/openai/types.ts +24 -24
- package/src/llm/openai/utils/index.ts +116 -1
- package/src/llm/openai/utils/isReasoningModel.test.ts +90 -90
- package/src/llm/openrouter/index.ts +222 -1
- package/src/llm/providers.ts +2 -7
- package/src/llm/text.ts +94 -94
- package/src/messages/core.ts +463 -463
- package/src/messages/formatAgentMessages.tools.test.ts +400 -400
- package/src/messages/formatMessage.test.ts +693 -693
- package/src/messages/ids.ts +26 -26
- package/src/messages/prune.ts +567 -567
- package/src/messages/shiftIndexTokenCountMap.test.ts +81 -81
- package/src/mockStream.ts +98 -98
- package/src/prompts/collab.ts +5 -5
- package/src/prompts/index.ts +1 -1
- package/src/prompts/taskmanager.ts +61 -61
- package/src/run.ts +22 -4
- package/src/scripts/ant_web_search_edge_case.ts +162 -0
- package/src/scripts/ant_web_search_error_edge_case.ts +148 -0
- package/src/scripts/args.ts +48 -48
- package/src/scripts/caching.ts +123 -123
- package/src/scripts/code_exec_files.ts +193 -193
- package/src/scripts/empty_input.ts +137 -137
- package/src/scripts/memory.ts +97 -97
- package/src/scripts/test-tools-before-handoff.ts +1 -5
- package/src/scripts/thinking.ts +149 -149
- package/src/scripts/tools.ts +1 -4
- package/src/specs/anthropic.simple.test.ts +67 -0
- package/src/specs/spec.utils.ts +3 -3
- package/src/specs/token-distribution-edge-case.test.ts +316 -316
- package/src/specs/tool-error.test.ts +193 -193
- package/src/splitStream.test.ts +691 -691
- package/src/splitStream.ts +234 -234
- package/src/stream.test.ts +94 -94
- package/src/stream.ts +30 -1
- package/src/tools/ToolNode.ts +24 -1
- package/src/tools/handlers.ts +32 -28
- package/src/tools/search/anthropic.ts +51 -51
- package/src/tools/search/content.test.ts +173 -173
- package/src/tools/search/content.ts +147 -147
- package/src/tools/search/direct-url.test.ts +530 -0
- package/src/tools/search/firecrawl.ts +210 -210
- package/src/tools/search/format.ts +250 -250
- package/src/tools/search/highlights.ts +320 -320
- package/src/tools/search/index.ts +2 -2
- package/src/tools/search/jina-reranker.test.ts +126 -126
- package/src/tools/search/output.md +2775 -2775
- package/src/tools/search/rerankers.ts +242 -242
- package/src/tools/search/schema.ts +65 -63
- package/src/tools/search/search.ts +766 -759
- package/src/tools/search/serper-scraper.ts +155 -155
- package/src/tools/search/test.html +883 -883
- package/src/tools/search/test.md +642 -642
- package/src/tools/search/test.ts +159 -159
- package/src/tools/search/tool.ts +641 -471
- package/src/tools/search/types.ts +689 -687
- package/src/tools/search/utils.ts +79 -79
- package/src/types/index.ts +6 -6
- package/src/types/llm.ts +2 -8
- package/src/utils/graph.ts +10 -10
- package/src/utils/llm.ts +26 -27
- package/src/utils/llmConfig.ts +13 -5
- package/src/utils/logging.ts +48 -48
- package/src/utils/misc.ts +57 -57
- package/src/utils/run.ts +100 -100
- package/src/utils/title.ts +165 -165
- package/dist/cjs/llm/ollama/index.cjs +0 -70
- package/dist/cjs/llm/ollama/index.cjs.map +0 -1
- package/dist/cjs/llm/ollama/utils.cjs +0 -158
- package/dist/cjs/llm/ollama/utils.cjs.map +0 -1
- package/dist/esm/llm/ollama/index.mjs +0 -68
- package/dist/esm/llm/ollama/index.mjs.map +0 -1
- package/dist/esm/llm/ollama/utils.mjs +0 -155
- package/dist/esm/llm/ollama/utils.mjs.map +0 -1
- package/dist/types/llm/ollama/index.d.ts +0 -8
- package/dist/types/llm/ollama/utils.d.ts +0 -7
- package/src/llm/ollama/index.ts +0 -92
- package/src/llm/ollama/utils.ts +0 -193
- package/src/proto/CollabGraph.ts +0 -269
- package/src/proto/TaskManager.ts +0 -243
- package/src/proto/collab.ts +0 -200
- package/src/proto/collab_design.ts +0 -184
- package/src/proto/collab_design_v2.ts +0 -224
- package/src/proto/collab_design_v3.ts +0 -255
- package/src/proto/collab_design_v4.ts +0 -220
- package/src/proto/collab_design_v5.ts +0 -251
- package/src/proto/collab_graph.ts +0 -181
- package/src/proto/collab_original.ts +0 -123
- package/src/proto/example.ts +0 -93
- package/src/proto/example_new.ts +0 -68
- package/src/proto/example_old.ts +0 -201
- package/src/proto/example_test.ts +0 -152
- package/src/proto/example_test_anthropic.ts +0 -100
- package/src/proto/log_stream.ts +0 -202
- package/src/proto/main_collab_community_event.ts +0 -133
- package/src/proto/main_collab_design_v2.ts +0 -96
- package/src/proto/main_collab_design_v4.ts +0 -100
- package/src/proto/main_collab_design_v5.ts +0 -135
- package/src/proto/main_collab_global_analysis.ts +0 -122
- package/src/proto/main_collab_hackathon_event.ts +0 -153
- package/src/proto/main_collab_space_mission.ts +0 -153
- package/src/proto/main_philosophy.ts +0 -210
- package/src/proto/original_script.ts +0 -126
- package/src/proto/standard.ts +0 -100
- package/src/proto/stream.ts +0 -56
- package/src/proto/tasks.ts +0 -118
- package/src/proto/tools/global_analysis_tools.ts +0 -86
- package/src/proto/tools/space_mission_tools.ts +0 -60
- package/src/proto/vertexai.ts +0 -54
- package/src/scripts/image.ts +0 -178
package/src/utils/run.ts
CHANGED
|
@@ -1,101 +1,101 @@
|
|
|
1
|
-
import { CallbackManagerForChainRun } from '@langchain/core/callbacks/manager';
|
|
2
|
-
import {
|
|
3
|
-
mergeConfigs,
|
|
4
|
-
patchConfig,
|
|
5
|
-
Runnable,
|
|
6
|
-
RunnableConfig,
|
|
7
|
-
} from '@langchain/core/runnables';
|
|
8
|
-
import { AsyncLocalStorageProviderSingleton } from '@langchain/core/singletons';
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* Delays the execution for a specified number of milliseconds.
|
|
12
|
-
*
|
|
13
|
-
* @param {number} ms - The number of milliseconds to delay.
|
|
14
|
-
* @return {Promise<void>} A promise that resolves after the specified delay.
|
|
15
|
-
*/
|
|
16
|
-
export function sleep(ms: number): Promise<void> {
|
|
17
|
-
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
21
|
-
export interface RunnableCallableArgs extends Partial<any> {
|
|
22
|
-
name?: string;
|
|
23
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
24
|
-
func: (...args: any[]) => any;
|
|
25
|
-
tags?: string[];
|
|
26
|
-
trace?: boolean;
|
|
27
|
-
recurse?: boolean;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
export class RunnableCallable<I = unknown, O = unknown> extends Runnable<I, O> {
|
|
31
|
-
lc_namespace: string[] = ['langgraph'];
|
|
32
|
-
|
|
33
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
34
|
-
func: (...args: any[]) => any;
|
|
35
|
-
|
|
36
|
-
tags?: string[];
|
|
37
|
-
|
|
38
|
-
config?: RunnableConfig;
|
|
39
|
-
|
|
40
|
-
trace: boolean = true;
|
|
41
|
-
|
|
42
|
-
recurse: boolean = true;
|
|
43
|
-
|
|
44
|
-
constructor(fields: RunnableCallableArgs) {
|
|
45
|
-
super();
|
|
46
|
-
this.name = fields.name ?? fields.func.name;
|
|
47
|
-
this.func = fields.func;
|
|
48
|
-
this.config = fields.tags ? { tags: fields.tags } : undefined;
|
|
49
|
-
this.trace = fields.trace ?? this.trace;
|
|
50
|
-
this.recurse = fields.recurse ?? this.recurse;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
protected async _tracedInvoke(
|
|
54
|
-
input: I,
|
|
55
|
-
config?: Partial<RunnableConfig>,
|
|
56
|
-
runManager?: CallbackManagerForChainRun
|
|
57
|
-
): Promise<O> {
|
|
58
|
-
return new Promise<O>((resolve, reject) => {
|
|
59
|
-
const childConfig = patchConfig(config, {
|
|
60
|
-
callbacks: runManager?.getChild(),
|
|
61
|
-
});
|
|
62
|
-
void AsyncLocalStorageProviderSingleton.runWithConfig(
|
|
63
|
-
childConfig,
|
|
64
|
-
async () => {
|
|
65
|
-
try {
|
|
66
|
-
const output = await this.func(input, childConfig);
|
|
67
|
-
resolve(output);
|
|
68
|
-
} catch (e) {
|
|
69
|
-
reject(e);
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
);
|
|
73
|
-
});
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
async invoke(
|
|
77
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
78
|
-
input: any,
|
|
79
|
-
options?: Partial<RunnableConfig> | undefined
|
|
80
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
81
|
-
): Promise<any> {
|
|
82
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
83
|
-
let returnValue: any;
|
|
84
|
-
|
|
85
|
-
if (this.trace) {
|
|
86
|
-
returnValue = await this._callWithConfig(
|
|
87
|
-
this._tracedInvoke,
|
|
88
|
-
input,
|
|
89
|
-
mergeConfigs(this.config, options)
|
|
90
|
-
);
|
|
91
|
-
} else {
|
|
92
|
-
returnValue = await this.func(input, mergeConfigs(this.config, options));
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
if (Runnable.isRunnable(returnValue) && this.recurse) {
|
|
96
|
-
return await returnValue.invoke(input, options);
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
return returnValue;
|
|
100
|
-
}
|
|
1
|
+
import { CallbackManagerForChainRun } from '@langchain/core/callbacks/manager';
|
|
2
|
+
import {
|
|
3
|
+
mergeConfigs,
|
|
4
|
+
patchConfig,
|
|
5
|
+
Runnable,
|
|
6
|
+
RunnableConfig,
|
|
7
|
+
} from '@langchain/core/runnables';
|
|
8
|
+
import { AsyncLocalStorageProviderSingleton } from '@langchain/core/singletons';
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Delays the execution for a specified number of milliseconds.
|
|
12
|
+
*
|
|
13
|
+
* @param {number} ms - The number of milliseconds to delay.
|
|
14
|
+
* @return {Promise<void>} A promise that resolves after the specified delay.
|
|
15
|
+
*/
|
|
16
|
+
export function sleep(ms: number): Promise<void> {
|
|
17
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
21
|
+
export interface RunnableCallableArgs extends Partial<any> {
|
|
22
|
+
name?: string;
|
|
23
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
24
|
+
func: (...args: any[]) => any;
|
|
25
|
+
tags?: string[];
|
|
26
|
+
trace?: boolean;
|
|
27
|
+
recurse?: boolean;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export class RunnableCallable<I = unknown, O = unknown> extends Runnable<I, O> {
|
|
31
|
+
lc_namespace: string[] = ['langgraph'];
|
|
32
|
+
|
|
33
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
34
|
+
func: (...args: any[]) => any;
|
|
35
|
+
|
|
36
|
+
tags?: string[];
|
|
37
|
+
|
|
38
|
+
config?: RunnableConfig;
|
|
39
|
+
|
|
40
|
+
trace: boolean = true;
|
|
41
|
+
|
|
42
|
+
recurse: boolean = true;
|
|
43
|
+
|
|
44
|
+
constructor(fields: RunnableCallableArgs) {
|
|
45
|
+
super();
|
|
46
|
+
this.name = fields.name ?? fields.func.name;
|
|
47
|
+
this.func = fields.func;
|
|
48
|
+
this.config = fields.tags ? { tags: fields.tags } : undefined;
|
|
49
|
+
this.trace = fields.trace ?? this.trace;
|
|
50
|
+
this.recurse = fields.recurse ?? this.recurse;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
protected async _tracedInvoke(
|
|
54
|
+
input: I,
|
|
55
|
+
config?: Partial<RunnableConfig>,
|
|
56
|
+
runManager?: CallbackManagerForChainRun
|
|
57
|
+
): Promise<O> {
|
|
58
|
+
return new Promise<O>((resolve, reject) => {
|
|
59
|
+
const childConfig = patchConfig(config, {
|
|
60
|
+
callbacks: runManager?.getChild(),
|
|
61
|
+
});
|
|
62
|
+
void AsyncLocalStorageProviderSingleton.runWithConfig(
|
|
63
|
+
childConfig,
|
|
64
|
+
async () => {
|
|
65
|
+
try {
|
|
66
|
+
const output = await this.func(input, childConfig);
|
|
67
|
+
resolve(output);
|
|
68
|
+
} catch (e) {
|
|
69
|
+
reject(e);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
);
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
async invoke(
|
|
77
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
78
|
+
input: any,
|
|
79
|
+
options?: Partial<RunnableConfig> | undefined
|
|
80
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
81
|
+
): Promise<any> {
|
|
82
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
83
|
+
let returnValue: any;
|
|
84
|
+
|
|
85
|
+
if (this.trace) {
|
|
86
|
+
returnValue = await this._callWithConfig(
|
|
87
|
+
this._tracedInvoke,
|
|
88
|
+
input,
|
|
89
|
+
mergeConfigs(this.config, options)
|
|
90
|
+
);
|
|
91
|
+
} else {
|
|
92
|
+
returnValue = await this.func(input, mergeConfigs(this.config, options));
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
if (Runnable.isRunnable(returnValue) && this.recurse) {
|
|
96
|
+
return await returnValue.invoke(input, options);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
return returnValue;
|
|
100
|
+
}
|
|
101
101
|
}
|
package/src/utils/title.ts
CHANGED
|
@@ -1,165 +1,165 @@
|
|
|
1
|
-
import { z } from 'zod';
|
|
2
|
-
import { ChatPromptTemplate } from '@langchain/core/prompts';
|
|
3
|
-
import { RunnableLambda, RunnableSequence } from '@langchain/core/runnables';
|
|
4
|
-
import type { Runnable, RunnableConfig } from '@langchain/core/runnables';
|
|
5
|
-
import type { AIMessage } from '@langchain/core/messages';
|
|
6
|
-
import type * as t from '@/types';
|
|
7
|
-
import { ContentTypes } from '@/common';
|
|
8
|
-
|
|
9
|
-
const defaultTitlePrompt = `Analyze this conversation and provide:
|
|
10
|
-
1. The detected language of the conversation
|
|
11
|
-
2. A concise title in the detected language (5 words or less, no punctuation or quotation)
|
|
12
|
-
|
|
13
|
-
{convo}`;
|
|
14
|
-
|
|
15
|
-
const titleSchema = z.object({
|
|
16
|
-
title: z
|
|
17
|
-
.string()
|
|
18
|
-
.describe(
|
|
19
|
-
'A concise title for the conversation in 5 words or less, without punctuation or quotation'
|
|
20
|
-
),
|
|
21
|
-
});
|
|
22
|
-
|
|
23
|
-
const combinedSchema = z.object({
|
|
24
|
-
language: z.string().describe('The detected language of the conversation'),
|
|
25
|
-
title: z
|
|
26
|
-
.string()
|
|
27
|
-
.describe(
|
|
28
|
-
'A concise title for the conversation in 5 words or less, without punctuation or quotation'
|
|
29
|
-
),
|
|
30
|
-
});
|
|
31
|
-
|
|
32
|
-
export const createTitleRunnable = async (
|
|
33
|
-
model: t.ChatModelInstance,
|
|
34
|
-
_titlePrompt?: string
|
|
35
|
-
): Promise<Runnable> => {
|
|
36
|
-
// Disabled since this works fine
|
|
37
|
-
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
38
|
-
/* @ts-ignore */
|
|
39
|
-
const titleLLM = model.withStructuredOutput(titleSchema);
|
|
40
|
-
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
41
|
-
/* @ts-ignore */
|
|
42
|
-
const combinedLLM = model.withStructuredOutput(combinedSchema);
|
|
43
|
-
|
|
44
|
-
const titlePrompt = ChatPromptTemplate.fromTemplate(
|
|
45
|
-
_titlePrompt ?? defaultTitlePrompt
|
|
46
|
-
).withConfig({ runName: 'TitlePrompt' });
|
|
47
|
-
|
|
48
|
-
const titleOnlyInnerChain = RunnableSequence.from([titlePrompt, titleLLM]);
|
|
49
|
-
const combinedInnerChain = RunnableSequence.from([titlePrompt, combinedLLM]);
|
|
50
|
-
|
|
51
|
-
/** Wrap titleOnlyChain in RunnableLambda to create parent span */
|
|
52
|
-
const titleOnlyChain = new RunnableLambda({
|
|
53
|
-
func: async (
|
|
54
|
-
input: { convo: string },
|
|
55
|
-
config?: Partial<RunnableConfig>
|
|
56
|
-
): Promise<{ title: string }> => {
|
|
57
|
-
return await titleOnlyInnerChain.invoke(input, config);
|
|
58
|
-
},
|
|
59
|
-
}).withConfig({ runName: 'TitleOnlyChain' });
|
|
60
|
-
|
|
61
|
-
/** Wrap combinedChain in RunnableLambda to create parent span */
|
|
62
|
-
const combinedChain = new RunnableLambda({
|
|
63
|
-
func: async (
|
|
64
|
-
input: { convo: string },
|
|
65
|
-
config?: Partial<RunnableConfig>
|
|
66
|
-
): Promise<{ language: string; title: string }> => {
|
|
67
|
-
return await combinedInnerChain.invoke(input, config);
|
|
68
|
-
},
|
|
69
|
-
}).withConfig({ runName: 'TitleLanguageChain' });
|
|
70
|
-
|
|
71
|
-
/** Runnable to add default values if needed */
|
|
72
|
-
const addDefaults = new RunnableLambda({
|
|
73
|
-
func: (
|
|
74
|
-
result: { language: string; title: string } | undefined
|
|
75
|
-
): { language: string; title: string } => ({
|
|
76
|
-
language: result?.language ?? 'English',
|
|
77
|
-
title: result?.title ?? '',
|
|
78
|
-
}),
|
|
79
|
-
}).withConfig({ runName: 'AddDefaults' });
|
|
80
|
-
|
|
81
|
-
const combinedChainInner = RunnableSequence.from([
|
|
82
|
-
combinedChain,
|
|
83
|
-
addDefaults,
|
|
84
|
-
]);
|
|
85
|
-
|
|
86
|
-
/** Wrap combinedChainWithDefaults in RunnableLambda to create parent span */
|
|
87
|
-
const combinedChainWithDefaults = new RunnableLambda({
|
|
88
|
-
func: async (
|
|
89
|
-
input: { convo: string },
|
|
90
|
-
config?: Partial<RunnableConfig>
|
|
91
|
-
): Promise<{ language: string; title: string }> => {
|
|
92
|
-
return await combinedChainInner.invoke(input, config);
|
|
93
|
-
},
|
|
94
|
-
}).withConfig({ runName: 'CombinedChainWithDefaults' });
|
|
95
|
-
|
|
96
|
-
return new RunnableLambda({
|
|
97
|
-
func: async (
|
|
98
|
-
input: {
|
|
99
|
-
convo: string;
|
|
100
|
-
inputText: string;
|
|
101
|
-
skipLanguage: boolean;
|
|
102
|
-
},
|
|
103
|
-
config?: Partial<RunnableConfig>
|
|
104
|
-
): Promise<{ language: string; title: string } | { title: string }> => {
|
|
105
|
-
const invokeInput = { convo: input.convo };
|
|
106
|
-
|
|
107
|
-
if (input.skipLanguage) {
|
|
108
|
-
return (await titleOnlyChain.invoke(invokeInput, config)) as {
|
|
109
|
-
title: string;
|
|
110
|
-
};
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
return await combinedChainWithDefaults.invoke(invokeInput, config);
|
|
114
|
-
},
|
|
115
|
-
}).withConfig({ runName: 'TitleGenerator' });
|
|
116
|
-
};
|
|
117
|
-
|
|
118
|
-
const defaultCompletionPrompt = `Provide a concise, 5-word-or-less title for the conversation, using title case conventions. Only return the title itself.
|
|
119
|
-
|
|
120
|
-
Conversation:
|
|
121
|
-
{convo}`;
|
|
122
|
-
|
|
123
|
-
export const createCompletionTitleRunnable = async (
|
|
124
|
-
model: t.ChatModelInstance,
|
|
125
|
-
titlePrompt?: string
|
|
126
|
-
): Promise<Runnable> => {
|
|
127
|
-
const completionPrompt = ChatPromptTemplate.fromTemplate(
|
|
128
|
-
titlePrompt ?? defaultCompletionPrompt
|
|
129
|
-
).withConfig({ runName: 'CompletionTitlePrompt' });
|
|
130
|
-
|
|
131
|
-
/** Runnable to extract content from model response */
|
|
132
|
-
const extractContent = new RunnableLambda({
|
|
133
|
-
func: (response: AIMessage): { title: string } => {
|
|
134
|
-
let content = '';
|
|
135
|
-
if (typeof response.content === 'string') {
|
|
136
|
-
content = response.content;
|
|
137
|
-
} else if (Array.isArray(response.content)) {
|
|
138
|
-
content = response.content
|
|
139
|
-
.filter(
|
|
140
|
-
(part): part is { type: ContentTypes.TEXT; text: string } =>
|
|
141
|
-
part.type === ContentTypes.TEXT
|
|
142
|
-
)
|
|
143
|
-
.map((part) => part.text)
|
|
144
|
-
.join('');
|
|
145
|
-
}
|
|
146
|
-
return { title: content.trim() };
|
|
147
|
-
},
|
|
148
|
-
}).withConfig({ runName: 'ExtractTitle' });
|
|
149
|
-
|
|
150
|
-
const innerChain = RunnableSequence.from([
|
|
151
|
-
completionPrompt,
|
|
152
|
-
model,
|
|
153
|
-
extractContent,
|
|
154
|
-
]);
|
|
155
|
-
|
|
156
|
-
/** Wrap in RunnableLambda to create a parent span for LangFuse */
|
|
157
|
-
return new RunnableLambda({
|
|
158
|
-
func: async (
|
|
159
|
-
input: { convo: string },
|
|
160
|
-
config?: Partial<RunnableConfig>
|
|
161
|
-
): Promise<{ title: string }> => {
|
|
162
|
-
return await innerChain.invoke(input, config);
|
|
163
|
-
},
|
|
164
|
-
}).withConfig({ runName: 'CompletionTitleChain' });
|
|
165
|
-
};
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { ChatPromptTemplate } from '@langchain/core/prompts';
|
|
3
|
+
import { RunnableLambda, RunnableSequence } from '@langchain/core/runnables';
|
|
4
|
+
import type { Runnable, RunnableConfig } from '@langchain/core/runnables';
|
|
5
|
+
import type { AIMessage } from '@langchain/core/messages';
|
|
6
|
+
import type * as t from '@/types';
|
|
7
|
+
import { ContentTypes } from '@/common';
|
|
8
|
+
|
|
9
|
+
const defaultTitlePrompt = `Analyze this conversation and provide:
|
|
10
|
+
1. The detected language of the conversation
|
|
11
|
+
2. A concise title in the detected language (5 words or less, no punctuation or quotation)
|
|
12
|
+
|
|
13
|
+
{convo}`;
|
|
14
|
+
|
|
15
|
+
const titleSchema = z.object({
|
|
16
|
+
title: z
|
|
17
|
+
.string()
|
|
18
|
+
.describe(
|
|
19
|
+
'A concise title for the conversation in 5 words or less, without punctuation or quotation'
|
|
20
|
+
),
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
const combinedSchema = z.object({
|
|
24
|
+
language: z.string().describe('The detected language of the conversation'),
|
|
25
|
+
title: z
|
|
26
|
+
.string()
|
|
27
|
+
.describe(
|
|
28
|
+
'A concise title for the conversation in 5 words or less, without punctuation or quotation'
|
|
29
|
+
),
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
export const createTitleRunnable = async (
|
|
33
|
+
model: t.ChatModelInstance,
|
|
34
|
+
_titlePrompt?: string
|
|
35
|
+
): Promise<Runnable> => {
|
|
36
|
+
// Disabled since this works fine
|
|
37
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
38
|
+
/* @ts-ignore */
|
|
39
|
+
const titleLLM = model.withStructuredOutput(titleSchema);
|
|
40
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
41
|
+
/* @ts-ignore */
|
|
42
|
+
const combinedLLM = model.withStructuredOutput(combinedSchema);
|
|
43
|
+
|
|
44
|
+
const titlePrompt = ChatPromptTemplate.fromTemplate(
|
|
45
|
+
_titlePrompt ?? defaultTitlePrompt
|
|
46
|
+
).withConfig({ runName: 'TitlePrompt' });
|
|
47
|
+
|
|
48
|
+
const titleOnlyInnerChain = RunnableSequence.from([titlePrompt, titleLLM]);
|
|
49
|
+
const combinedInnerChain = RunnableSequence.from([titlePrompt, combinedLLM]);
|
|
50
|
+
|
|
51
|
+
/** Wrap titleOnlyChain in RunnableLambda to create parent span */
|
|
52
|
+
const titleOnlyChain = new RunnableLambda({
|
|
53
|
+
func: async (
|
|
54
|
+
input: { convo: string },
|
|
55
|
+
config?: Partial<RunnableConfig>
|
|
56
|
+
): Promise<{ title: string }> => {
|
|
57
|
+
return await titleOnlyInnerChain.invoke(input, config);
|
|
58
|
+
},
|
|
59
|
+
}).withConfig({ runName: 'TitleOnlyChain' });
|
|
60
|
+
|
|
61
|
+
/** Wrap combinedChain in RunnableLambda to create parent span */
|
|
62
|
+
const combinedChain = new RunnableLambda({
|
|
63
|
+
func: async (
|
|
64
|
+
input: { convo: string },
|
|
65
|
+
config?: Partial<RunnableConfig>
|
|
66
|
+
): Promise<{ language: string; title: string }> => {
|
|
67
|
+
return await combinedInnerChain.invoke(input, config);
|
|
68
|
+
},
|
|
69
|
+
}).withConfig({ runName: 'TitleLanguageChain' });
|
|
70
|
+
|
|
71
|
+
/** Runnable to add default values if needed */
|
|
72
|
+
const addDefaults = new RunnableLambda({
|
|
73
|
+
func: (
|
|
74
|
+
result: { language: string; title: string } | undefined
|
|
75
|
+
): { language: string; title: string } => ({
|
|
76
|
+
language: result?.language ?? 'English',
|
|
77
|
+
title: result?.title ?? '',
|
|
78
|
+
}),
|
|
79
|
+
}).withConfig({ runName: 'AddDefaults' });
|
|
80
|
+
|
|
81
|
+
const combinedChainInner = RunnableSequence.from([
|
|
82
|
+
combinedChain,
|
|
83
|
+
addDefaults,
|
|
84
|
+
]);
|
|
85
|
+
|
|
86
|
+
/** Wrap combinedChainWithDefaults in RunnableLambda to create parent span */
|
|
87
|
+
const combinedChainWithDefaults = new RunnableLambda({
|
|
88
|
+
func: async (
|
|
89
|
+
input: { convo: string },
|
|
90
|
+
config?: Partial<RunnableConfig>
|
|
91
|
+
): Promise<{ language: string; title: string }> => {
|
|
92
|
+
return await combinedChainInner.invoke(input, config);
|
|
93
|
+
},
|
|
94
|
+
}).withConfig({ runName: 'CombinedChainWithDefaults' });
|
|
95
|
+
|
|
96
|
+
return new RunnableLambda({
|
|
97
|
+
func: async (
|
|
98
|
+
input: {
|
|
99
|
+
convo: string;
|
|
100
|
+
inputText: string;
|
|
101
|
+
skipLanguage: boolean;
|
|
102
|
+
},
|
|
103
|
+
config?: Partial<RunnableConfig>
|
|
104
|
+
): Promise<{ language: string; title: string } | { title: string }> => {
|
|
105
|
+
const invokeInput = { convo: input.convo };
|
|
106
|
+
|
|
107
|
+
if (input.skipLanguage) {
|
|
108
|
+
return (await titleOnlyChain.invoke(invokeInput, config)) as {
|
|
109
|
+
title: string;
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
return await combinedChainWithDefaults.invoke(invokeInput, config);
|
|
114
|
+
},
|
|
115
|
+
}).withConfig({ runName: 'TitleGenerator' });
|
|
116
|
+
};
|
|
117
|
+
|
|
118
|
+
const defaultCompletionPrompt = `Provide a concise, 5-word-or-less title for the conversation, using title case conventions. Only return the title itself.
|
|
119
|
+
|
|
120
|
+
Conversation:
|
|
121
|
+
{convo}`;
|
|
122
|
+
|
|
123
|
+
export const createCompletionTitleRunnable = async (
|
|
124
|
+
model: t.ChatModelInstance,
|
|
125
|
+
titlePrompt?: string
|
|
126
|
+
): Promise<Runnable> => {
|
|
127
|
+
const completionPrompt = ChatPromptTemplate.fromTemplate(
|
|
128
|
+
titlePrompt ?? defaultCompletionPrompt
|
|
129
|
+
).withConfig({ runName: 'CompletionTitlePrompt' });
|
|
130
|
+
|
|
131
|
+
/** Runnable to extract content from model response */
|
|
132
|
+
const extractContent = new RunnableLambda({
|
|
133
|
+
func: (response: AIMessage): { title: string } => {
|
|
134
|
+
let content = '';
|
|
135
|
+
if (typeof response.content === 'string') {
|
|
136
|
+
content = response.content;
|
|
137
|
+
} else if (Array.isArray(response.content)) {
|
|
138
|
+
content = response.content
|
|
139
|
+
.filter(
|
|
140
|
+
(part): part is { type: ContentTypes.TEXT; text: string } =>
|
|
141
|
+
part.type === ContentTypes.TEXT
|
|
142
|
+
)
|
|
143
|
+
.map((part) => part.text)
|
|
144
|
+
.join('');
|
|
145
|
+
}
|
|
146
|
+
return { title: content.trim() };
|
|
147
|
+
},
|
|
148
|
+
}).withConfig({ runName: 'ExtractTitle' });
|
|
149
|
+
|
|
150
|
+
const innerChain = RunnableSequence.from([
|
|
151
|
+
completionPrompt,
|
|
152
|
+
model,
|
|
153
|
+
extractContent,
|
|
154
|
+
]);
|
|
155
|
+
|
|
156
|
+
/** Wrap in RunnableLambda to create a parent span for LangFuse */
|
|
157
|
+
return new RunnableLambda({
|
|
158
|
+
func: async (
|
|
159
|
+
input: { convo: string },
|
|
160
|
+
config?: Partial<RunnableConfig>
|
|
161
|
+
): Promise<{ title: string }> => {
|
|
162
|
+
return await innerChain.invoke(input, config);
|
|
163
|
+
},
|
|
164
|
+
}).withConfig({ runName: 'CompletionTitleChain' });
|
|
165
|
+
};
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var messages = require('@langchain/core/messages');
|
|
4
|
-
var outputs = require('@langchain/core/outputs');
|
|
5
|
-
var ollama = require('@langchain/ollama');
|
|
6
|
-
var utils = require('./utils.cjs');
|
|
7
|
-
|
|
8
|
-
class ChatOllama extends ollama.ChatOllama {
|
|
9
|
-
static lc_name() {
|
|
10
|
-
return 'IllumaOllama';
|
|
11
|
-
}
|
|
12
|
-
async *_streamResponseChunks(messages$1, options, runManager) {
|
|
13
|
-
if (this.checkOrPullModel) {
|
|
14
|
-
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
15
|
-
// @ts-ignore
|
|
16
|
-
if (!(await this.checkModelExistsOnMachine(this.model))) {
|
|
17
|
-
await this.pull(this.model, {
|
|
18
|
-
logProgress: true,
|
|
19
|
-
});
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
const params = this.invocationParams(options);
|
|
23
|
-
// TODO: remove cast after SDK adds support for tool calls
|
|
24
|
-
const ollamaMessages = utils.convertToOllamaMessages(messages$1);
|
|
25
|
-
const usageMetadata = {
|
|
26
|
-
input_tokens: 0,
|
|
27
|
-
output_tokens: 0,
|
|
28
|
-
total_tokens: 0,
|
|
29
|
-
};
|
|
30
|
-
const stream = await this.client.chat({
|
|
31
|
-
...params,
|
|
32
|
-
messages: ollamaMessages,
|
|
33
|
-
stream: true,
|
|
34
|
-
});
|
|
35
|
-
let lastMetadata;
|
|
36
|
-
for await (const chunk of stream) {
|
|
37
|
-
if (options.signal?.aborted === true) {
|
|
38
|
-
this.client.abort();
|
|
39
|
-
}
|
|
40
|
-
const { message: responseMessage, ...rest } = chunk;
|
|
41
|
-
usageMetadata.input_tokens += rest.prompt_eval_count ?? 0;
|
|
42
|
-
usageMetadata.output_tokens += rest.eval_count ?? 0;
|
|
43
|
-
usageMetadata.total_tokens =
|
|
44
|
-
usageMetadata.input_tokens + usageMetadata.output_tokens;
|
|
45
|
-
lastMetadata = rest;
|
|
46
|
-
if (!responseMessage) {
|
|
47
|
-
continue;
|
|
48
|
-
}
|
|
49
|
-
const message = utils.convertOllamaMessagesToLangChain(responseMessage);
|
|
50
|
-
const generationChunk = new outputs.ChatGenerationChunk({
|
|
51
|
-
text: responseMessage.content || '',
|
|
52
|
-
message,
|
|
53
|
-
});
|
|
54
|
-
yield generationChunk;
|
|
55
|
-
await runManager?.handleLLMNewToken(responseMessage.content || '', undefined, undefined, undefined, undefined, { chunk: generationChunk });
|
|
56
|
-
}
|
|
57
|
-
// Yield the `response_metadata` as the final chunk.
|
|
58
|
-
yield new outputs.ChatGenerationChunk({
|
|
59
|
-
text: '',
|
|
60
|
-
message: new messages.AIMessageChunk({
|
|
61
|
-
content: '',
|
|
62
|
-
response_metadata: lastMetadata,
|
|
63
|
-
usage_metadata: usageMetadata,
|
|
64
|
-
}),
|
|
65
|
-
});
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
exports.ChatOllama = ChatOllama;
|
|
70
|
-
//# sourceMappingURL=index.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../../../../src/llm/ollama/index.ts"],"sourcesContent":["import { AIMessageChunk } from '@langchain/core/messages';\nimport { ChatGenerationChunk } from '@langchain/core/outputs';\nimport { ChatOllama as BaseChatOllama } from '@langchain/ollama';\nimport { CallbackManagerForLLMRun } from '@langchain/core/callbacks/manager';\nimport type {\n ChatResponse as OllamaChatResponse,\n Message as OllamaMessage,\n} from 'ollama';\nimport type { UsageMetadata, BaseMessage } from '@langchain/core/messages';\nimport {\n convertOllamaMessagesToLangChain,\n convertToOllamaMessages,\n} from './utils';\n\nexport class ChatOllama extends BaseChatOllama {\n static lc_name(): 'IllumaOllama' {\n return 'IllumaOllama';\n }\n async *_streamResponseChunks(\n messages: BaseMessage[],\n options: this['ParsedCallOptions'],\n runManager?: CallbackManagerForLLMRun\n ): AsyncGenerator<ChatGenerationChunk> {\n if (this.checkOrPullModel) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n if (!((await this.checkModelExistsOnMachine(this.model)) as boolean)) {\n await this.pull(this.model, {\n logProgress: true,\n });\n }\n }\n\n const params = this.invocationParams(options);\n // TODO: remove cast after SDK adds support for tool calls\n const ollamaMessages = convertToOllamaMessages(messages) as OllamaMessage[];\n\n const usageMetadata: UsageMetadata = {\n input_tokens: 0,\n output_tokens: 0,\n total_tokens: 0,\n };\n\n const stream = await this.client.chat({\n ...params,\n messages: ollamaMessages,\n stream: true,\n });\n\n let lastMetadata: Omit<OllamaChatResponse, 'message'> | undefined;\n\n for await (const chunk of stream) {\n if (options.signal?.aborted === true) {\n this.client.abort();\n }\n const { message: responseMessage, ...rest } =\n chunk as Partial<OllamaChatResponse>;\n usageMetadata.input_tokens += rest.prompt_eval_count ?? 0;\n usageMetadata.output_tokens += rest.eval_count ?? 0;\n usageMetadata.total_tokens =\n usageMetadata.input_tokens + usageMetadata.output_tokens;\n lastMetadata = rest as Omit<OllamaChatResponse, 'message'>;\n if (!responseMessage) {\n continue;\n }\n const message = convertOllamaMessagesToLangChain(responseMessage);\n const generationChunk = new ChatGenerationChunk({\n text: responseMessage.content || '',\n message,\n });\n yield generationChunk;\n await runManager?.handleLLMNewToken(\n responseMessage.content || '',\n undefined,\n undefined,\n undefined,\n undefined,\n { chunk: generationChunk }\n );\n }\n\n // Yield the `response_metadata` as the final chunk.\n yield new ChatGenerationChunk({\n text: '',\n message: new AIMessageChunk({\n content: '',\n response_metadata: lastMetadata,\n usage_metadata: usageMetadata,\n }),\n });\n }\n}\n"],"names":["BaseChatOllama","messages","convertToOllamaMessages","convertOllamaMessagesToLangChain","ChatGenerationChunk","AIMessageChunk"],"mappings":";;;;;;;AAcM,MAAO,UAAW,SAAQA,iBAAc,CAAA;AAC5C,IAAA,OAAO,OAAO,GAAA;AACZ,QAAA,OAAO,cAAc;;IAEvB,OAAO,qBAAqB,CAC1BC,UAAuB,EACvB,OAAkC,EAClC,UAAqC,EAAA;AAErC,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE;;;AAGzB,YAAA,IAAI,EAAG,MAAM,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAa,EAAE;AACpE,gBAAA,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;AAC1B,oBAAA,WAAW,EAAE,IAAI;AAClB,iBAAA,CAAC;;;QAIN,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC;;AAE7C,QAAA,MAAM,cAAc,GAAGC,6BAAuB,CAACD,UAAQ,CAAoB;AAE3E,QAAA,MAAM,aAAa,GAAkB;AACnC,YAAA,YAAY,EAAE,CAAC;AACf,YAAA,aAAa,EAAE,CAAC;AAChB,YAAA,YAAY,EAAE,CAAC;SAChB;QAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;AACpC,YAAA,GAAG,MAAM;AACT,YAAA,QAAQ,EAAE,cAAc;AACxB,YAAA,MAAM,EAAE,IAAI;AACb,SAAA,CAAC;AAEF,QAAA,IAAI,YAA6D;AAEjE,QAAA,WAAW,MAAM,KAAK,IAAI,MAAM,EAAE;YAChC,IAAI,OAAO,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,EAAE;AACpC,gBAAA,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;;YAErB,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,GAAG,IAAI,EAAE,GACzC,KAAoC;YACtC,aAAa,CAAC,YAAY,IAAI,IAAI,CAAC,iBAAiB,IAAI,CAAC;YACzD,aAAa,CAAC,aAAa,IAAI,IAAI,CAAC,UAAU,IAAI,CAAC;AACnD,YAAA,aAAa,CAAC,YAAY;AACxB,gBAAA,aAAa,CAAC,YAAY,GAAG,aAAa,CAAC,aAAa;YAC1D,YAAY,GAAG,IAA2C;YAC1D,IAAI,CAAC,eAAe,EAAE;gBACpB;;AAEF,YAAA,MAAM,OAAO,GAAGE,sCAAgC,CAAC,eAAe,CAAC;AACjE,YAAA,MAAM,eAAe,GAAG,IAAIC,2BAAmB,CAAC;AAC9C,gBAAA,IAAI,EAAE,eAAe,CAAC,OAAO,IAAI,EAAE;gBACnC,OAAO;AACR,aAAA,CAAC;AACF,YAAA,MAAM,eAAe;YACrB,MAAM,UAAU,EAAE,iBAAiB,CACjC,eAAe,CAAC,OAAO,IAAI,EAAE,EAC7B,SAAS,EACT,SAAS,EACT,SAAS,EACT,SAAS,EACT,EAAE,KAAK,EAAE,eAAe,EAAE,CAC3B;;;QAIH,MAAM,IAAIA,2BAAmB,CAAC;AAC5B,YAAA,IAAI,EAAE,EAAE;YACR,OAAO,EAAE,IAAIC,uBAAc,CAAC;AAC1B,gBAAA,OAAO,EAAE,EAAE;AACX,gBAAA,iBAAiB,EAAE,YAAY;AAC/B,gBAAA,cAAc,EAAE,aAAa;aAC9B,CAAC;AACH,SAAA,CAAC;;AAEL;;;;"}
|