@fluidframework/tree-agent 2.63.0-359461 → 2.63.0-359962

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.
Files changed (63) hide show
  1. package/api-report/tree-agent.alpha.api.md +3 -24
  2. package/dist/agent.d.ts +0 -3
  3. package/dist/agent.d.ts.map +1 -1
  4. package/dist/agent.js +21 -49
  5. package/dist/agent.js.map +1 -1
  6. package/dist/alpha.d.ts +0 -2
  7. package/dist/api.d.ts +19 -7
  8. package/dist/api.d.ts.map +1 -1
  9. package/dist/api.js.map +1 -1
  10. package/dist/index.d.ts +0 -1
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/index.js +1 -4
  13. package/dist/index.js.map +1 -1
  14. package/dist/prompt.d.ts.map +1 -1
  15. package/dist/prompt.js +15 -17
  16. package/dist/prompt.js.map +1 -1
  17. package/dist/utils.d.ts +4 -0
  18. package/dist/utils.d.ts.map +1 -1
  19. package/dist/utils.js +16 -1
  20. package/dist/utils.js.map +1 -1
  21. package/lib/agent.d.ts +0 -3
  22. package/lib/agent.d.ts.map +1 -1
  23. package/lib/agent.js +22 -50
  24. package/lib/agent.js.map +1 -1
  25. package/lib/alpha.d.ts +0 -2
  26. package/lib/api.d.ts +19 -7
  27. package/lib/api.d.ts.map +1 -1
  28. package/lib/api.js.map +1 -1
  29. package/lib/index.d.ts +0 -1
  30. package/lib/index.d.ts.map +1 -1
  31. package/lib/index.js +0 -1
  32. package/lib/index.js.map +1 -1
  33. package/lib/prompt.d.ts.map +1 -1
  34. package/lib/prompt.js +15 -17
  35. package/lib/prompt.js.map +1 -1
  36. package/lib/utils.d.ts +4 -0
  37. package/lib/utils.d.ts.map +1 -1
  38. package/lib/utils.js +14 -0
  39. package/lib/utils.js.map +1 -1
  40. package/package.json +11 -12
  41. package/src/agent.ts +29 -61
  42. package/src/api.ts +20 -12
  43. package/src/index.ts +0 -1
  44. package/src/prompt.ts +15 -17
  45. package/src/utils.ts +14 -0
  46. package/dist/functionParsing.d.ts +0 -13
  47. package/dist/functionParsing.d.ts.map +0 -1
  48. package/dist/functionParsing.js +0 -215
  49. package/dist/functionParsing.js.map +0 -1
  50. package/dist/langchain.d.ts +0 -43
  51. package/dist/langchain.d.ts.map +0 -1
  52. package/dist/langchain.js +0 -90
  53. package/dist/langchain.js.map +0 -1
  54. package/lib/functionParsing.d.ts +0 -13
  55. package/lib/functionParsing.d.ts.map +0 -1
  56. package/lib/functionParsing.js +0 -210
  57. package/lib/functionParsing.js.map +0 -1
  58. package/lib/langchain.d.ts +0 -43
  59. package/lib/langchain.d.ts.map +0 -1
  60. package/lib/langchain.js +0 -84
  61. package/lib/langchain.js.map +0 -1
  62. package/src/functionParsing.ts +0 -268
  63. package/src/langchain.ts +0 -146
@@ -1,43 +0,0 @@
1
- /*!
2
- * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
- * Licensed under the MIT License.
4
- */
5
- import type { ImplicitFieldSchema, ReadableField, TreeNode } from "@fluidframework/tree/alpha";
6
- import type { BaseChatModel } from "@langchain/core/language_models/chat_models";
7
- import { SharedTreeSemanticAgent } from "./agent.js";
8
- import { type SemanticAgentOptions, type SharedTreeChatModel, type SharedTreeChatQuery } from "./api.js";
9
- import type { TreeView } from "./utils.js";
10
- /**
11
- * An implementation of {@link SharedTreeChatModel} that wraps a Langchain chat model.
12
- * @remarks This class is responsible for managing the conversation history and interacting with the Langchain model (e.g. via Tool use for editing).
13
- * @alpha
14
- */
15
- export declare class LangchainChatModel implements SharedTreeChatModel {
16
- private readonly model;
17
- private readonly messages;
18
- constructor(model: BaseChatModel);
19
- readonly editToolName = "GenerateTreeEditingCode";
20
- get name(): string | undefined;
21
- appendContext(text: string): void;
22
- query(query: SharedTreeChatQuery): Promise<string>;
23
- private queryEdit;
24
- }
25
- /**
26
- * Create a {@link SharedTreeSemanticAgent} using a Langchain chat model.
27
- * @alpha
28
- * @deprecated Use {@link SharedTreeSemanticAgent} with a {@link LangchainChatModel} instead.
29
- */
30
- export declare function createSemanticAgent<TSchema extends ImplicitFieldSchema>(client: BaseChatModel, treeView: TreeView<TSchema>, options?: Readonly<SemanticAgentOptions>): SharedTreeSemanticAgent<TSchema>;
31
- /**
32
- * Create a {@link SharedTreeSemanticAgent} using a Langchain chat model.
33
- * @alpha
34
- * @deprecated Use {@link SharedTreeSemanticAgent} with a {@link LangchainChatModel} instead.
35
- */
36
- export declare function createSemanticAgent<TSchema extends ImplicitFieldSchema>(client: BaseChatModel, node: ReadableField<TSchema> & TreeNode, options?: Readonly<SemanticAgentOptions>): SharedTreeSemanticAgent<TSchema>;
37
- /**
38
- * Create a {@link SharedTreeSemanticAgent} using a Langchain chat model.
39
- * @alpha
40
- * @deprecated Use {@link SharedTreeSemanticAgent} with a {@link LangchainChatModel} instead.
41
- */
42
- export declare function createSemanticAgent<TSchema extends ImplicitFieldSchema>(client: BaseChatModel, treeView: TreeView<TSchema> | (ReadableField<TSchema> & TreeNode), options?: Readonly<SemanticAgentOptions>): SharedTreeSemanticAgent<TSchema>;
43
- //# sourceMappingURL=langchain.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"langchain.d.ts","sourceRoot":"","sources":["../src/langchain.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,mBAAmB,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAE/F,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6CAA6C,CAAC;AAYjF,OAAO,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAEN,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACxB,MAAM,UAAU,CAAC;AAClB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C;;;;GAIG;AACH,qBAAa,kBAAmB,YAAW,mBAAmB;IAE1C,OAAO,CAAC,QAAQ,CAAC,KAAK;IADzC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkD;gBACvC,KAAK,EAAE,aAAa;IAExD,SAAgB,YAAY,6BAA6B;IAEzD,IAAW,IAAI,IAAI,MAAM,GAAG,SAAS,CAGpC;IAEM,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI3B,KAAK,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,MAAM,CAAC;YAKjD,SAAS;CA4CvB;AAID;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,SAAS,mBAAmB,EACtE,MAAM,EAAE,aAAa,EACrB,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,EAC3B,OAAO,CAAC,EAAE,QAAQ,CAAC,oBAAoB,CAAC,GACtC,uBAAuB,CAAC,OAAO,CAAC,CAAC;AACpC;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,SAAS,mBAAmB,EACtE,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE,aAAa,CAAC,OAAO,CAAC,GAAG,QAAQ,EACvC,OAAO,CAAC,EAAE,QAAQ,CAAC,oBAAoB,CAAC,GACtC,uBAAuB,CAAC,OAAO,CAAC,CAAC;AACpC;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,SAAS,mBAAmB,EACtE,MAAM,EAAE,aAAa,EACrB,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,QAAQ,CAAC,EACjE,OAAO,CAAC,EAAE,QAAQ,CAAC,oBAAoB,CAAC,GACtC,uBAAuB,CAAC,OAAO,CAAC,CAAC"}
package/dist/langchain.js DELETED
@@ -1,90 +0,0 @@
1
- "use strict";
2
- /*!
3
- * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
4
- * Licensed under the MIT License.
5
- */
6
- var __importDefault = (this && this.__importDefault) || function (mod) {
7
- return (mod && mod.__esModule) ? mod : { "default": mod };
8
- };
9
- Object.defineProperty(exports, "__esModule", { value: true });
10
- exports.createSemanticAgent = exports.LangchainChatModel = void 0;
11
- const internal_1 = require("@fluidframework/telemetry-utils/internal");
12
- const messages_1 = require("@langchain/core/messages");
13
- // eslint-disable-next-line import/no-internal-modules
14
- const tools_1 = require("@langchain/core/tools");
15
- const zod_1 = __importDefault(require("zod"));
16
- const agent_js_1 = require("./agent.js");
17
- const api_js_1 = require("./api.js");
18
- /**
19
- * An implementation of {@link SharedTreeChatModel} that wraps a Langchain chat model.
20
- * @remarks This class is responsible for managing the conversation history and interacting with the Langchain model (e.g. via Tool use for editing).
21
- * @alpha
22
- */
23
- class LangchainChatModel {
24
- constructor(model) {
25
- this.model = model;
26
- this.messages = [];
27
- this.editToolName = "GenerateTreeEditingCode";
28
- }
29
- get name() {
30
- const name = this.model.metadata?.modelName;
31
- return typeof name === "string" ? name : undefined;
32
- }
33
- appendContext(text) {
34
- this.messages.push(new messages_1.SystemMessage(text));
35
- }
36
- async query(query) {
37
- this.messages.push(new messages_1.HumanMessage(query.text));
38
- return this.queryEdit(async (js) => query.edit(js));
39
- }
40
- async queryEdit(edit) {
41
- const editingTool = (0, tools_1.tool)(async ({ functionCode }) => {
42
- return edit(functionCode);
43
- }, {
44
- name: this.editToolName,
45
- description: `Invokes a JavaScript function to edit a user's tree`,
46
- schema: zod_1.default.object({
47
- functionCode: zod_1.default.string().describe(`The code of the JavaScript function.
48
- For example: "function editTree({ root, create }) { /* your code here */ }"`),
49
- }),
50
- });
51
- const runnable = this.model.bindTools?.([editingTool], { tool_choice: "auto" });
52
- if (runnable === undefined) {
53
- throw new internal_1.UsageError("LLM client must support function calling or tool use.");
54
- }
55
- const responseMessage = await runnable.invoke(this.messages);
56
- this.messages.push(responseMessage);
57
- if (responseMessage.tool_calls !== undefined && responseMessage.tool_calls.length > 0) {
58
- for (const toolCall of responseMessage.tool_calls) {
59
- switch (toolCall.name) {
60
- case editingTool.name: {
61
- const toolResult = await editingTool.invoke(toolCall);
62
- this.messages.push(toolResult);
63
- const editResult = JSON.parse(toolResult.text);
64
- if ((0, api_js_1.isEditResult)(editResult) && editResult.type === "tooManyEditsError") {
65
- return editResult.message;
66
- }
67
- // This call will either terminate the edit chain (if the LLM decides not to edit further) or continue it if more edits are required.
68
- return this.queryEdit(edit);
69
- }
70
- default: {
71
- this.messages.push(new messages_1.HumanMessage(`Unrecognized tool call: ${toolCall.name}`));
72
- }
73
- }
74
- }
75
- }
76
- return responseMessage.text;
77
- }
78
- }
79
- exports.LangchainChatModel = LangchainChatModel;
80
- /**
81
- * Create a {@link SharedTreeSemanticAgent} using a Langchain chat model.
82
- * @alpha
83
- * @deprecated Use {@link SharedTreeSemanticAgent} with a {@link LangchainChatModel} instead.
84
- */
85
- function createSemanticAgent(client, treeView, options) {
86
- return new agent_js_1.SharedTreeSemanticAgent(new LangchainChatModel(client), treeView, options);
87
- }
88
- exports.createSemanticAgent = createSemanticAgent;
89
- // #endregion Legacy APIs
90
- //# sourceMappingURL=langchain.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"langchain.js","sourceRoot":"","sources":["../src/langchain.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { UsageError } from \"@fluidframework/telemetry-utils/internal\";\nimport type { ImplicitFieldSchema, ReadableField, TreeNode } from \"@fluidframework/tree/alpha\";\n// eslint-disable-next-line import/no-internal-modules\nimport type { BaseChatModel } from \"@langchain/core/language_models/chat_models\";\n// eslint-disable-next-line import/no-internal-modules\nimport type { AIMessage, ToolMessage } from \"@langchain/core/messages\";\nimport {\n\tHumanMessage,\n\tSystemMessage,\n\t// eslint-disable-next-line import/no-internal-modules\n} from \"@langchain/core/messages\";\n// eslint-disable-next-line import/no-internal-modules\nimport { tool } from \"@langchain/core/tools\";\nimport z from \"zod\";\n\nimport { SharedTreeSemanticAgent } from \"./agent.js\";\nimport {\n\tisEditResult,\n\ttype SemanticAgentOptions,\n\ttype SharedTreeChatModel,\n\ttype SharedTreeChatQuery,\n} from \"./api.js\";\nimport type { TreeView } from \"./utils.js\";\n\n/**\n * An implementation of {@link SharedTreeChatModel} that wraps a Langchain chat model.\n * @remarks This class is responsible for managing the conversation history and interacting with the Langchain model (e.g. via Tool use for editing).\n * @alpha\n */\nexport class LangchainChatModel implements SharedTreeChatModel {\n\tprivate readonly messages: (HumanMessage | AIMessage | ToolMessage)[] = [];\n\tpublic constructor(private readonly model: BaseChatModel) {}\n\n\tpublic readonly editToolName = \"GenerateTreeEditingCode\";\n\n\tpublic get name(): string | undefined {\n\t\tconst name = this.model.metadata?.modelName;\n\t\treturn typeof name === \"string\" ? name : undefined;\n\t}\n\n\tpublic appendContext(text: string): void {\n\t\tthis.messages.push(new SystemMessage(text));\n\t}\n\n\tpublic async query(query: SharedTreeChatQuery): Promise<string> {\n\t\tthis.messages.push(new HumanMessage(query.text));\n\t\treturn this.queryEdit(async (js) => query.edit(js));\n\t}\n\n\tprivate async queryEdit(edit: SharedTreeChatQuery[\"edit\"]): Promise<string> {\n\t\tconst editingTool = tool(\n\t\t\tasync ({ functionCode }) => {\n\t\t\t\treturn edit(functionCode);\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: this.editToolName,\n\t\t\t\tdescription: `Invokes a JavaScript function to edit a user's tree`,\n\t\t\t\tschema: z.object({\n\t\t\t\t\tfunctionCode: z.string().describe(`The code of the JavaScript function.\nFor example: \"function editTree({ root, create }) { /* your code here */ }\"`),\n\t\t\t\t}),\n\t\t\t},\n\t\t);\n\t\tconst runnable = this.model.bindTools?.([editingTool], { tool_choice: \"auto\" });\n\t\tif (runnable === undefined) {\n\t\t\tthrow new UsageError(\"LLM client must support function calling or tool use.\");\n\t\t}\n\n\t\tconst responseMessage = await runnable.invoke(this.messages);\n\t\tthis.messages.push(responseMessage);\n\n\t\tif (responseMessage.tool_calls !== undefined && responseMessage.tool_calls.length > 0) {\n\t\t\tfor (const toolCall of responseMessage.tool_calls) {\n\t\t\t\tswitch (toolCall.name) {\n\t\t\t\t\tcase editingTool.name: {\n\t\t\t\t\t\tconst toolResult = await editingTool.invoke(toolCall);\n\t\t\t\t\t\tthis.messages.push(toolResult);\n\t\t\t\t\t\tconst editResult: unknown = JSON.parse(toolResult.text);\n\t\t\t\t\t\tif (isEditResult(editResult) && editResult.type === \"tooManyEditsError\") {\n\t\t\t\t\t\t\treturn editResult.message;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// This call will either terminate the edit chain (if the LLM decides not to edit further) or continue it if more edits are required.\n\t\t\t\t\t\treturn this.queryEdit(edit);\n\t\t\t\t\t}\n\t\t\t\t\tdefault: {\n\t\t\t\t\t\tthis.messages.push(new HumanMessage(`Unrecognized tool call: ${toolCall.name}`));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn responseMessage.text;\n\t}\n}\n\n// #region Legacy APIs\n\n/**\n * Create a {@link SharedTreeSemanticAgent} using a Langchain chat model.\n * @alpha\n * @deprecated Use {@link SharedTreeSemanticAgent} with a {@link LangchainChatModel} instead.\n */\nexport function createSemanticAgent<TSchema extends ImplicitFieldSchema>(\n\tclient: BaseChatModel,\n\ttreeView: TreeView<TSchema>,\n\toptions?: Readonly<SemanticAgentOptions>,\n): SharedTreeSemanticAgent<TSchema>;\n/**\n * Create a {@link SharedTreeSemanticAgent} using a Langchain chat model.\n * @alpha\n * @deprecated Use {@link SharedTreeSemanticAgent} with a {@link LangchainChatModel} instead.\n */\nexport function createSemanticAgent<TSchema extends ImplicitFieldSchema>(\n\tclient: BaseChatModel,\n\tnode: ReadableField<TSchema> & TreeNode,\n\toptions?: Readonly<SemanticAgentOptions>,\n): SharedTreeSemanticAgent<TSchema>;\n/**\n * Create a {@link SharedTreeSemanticAgent} using a Langchain chat model.\n * @alpha\n * @deprecated Use {@link SharedTreeSemanticAgent} with a {@link LangchainChatModel} instead.\n */\nexport function createSemanticAgent<TSchema extends ImplicitFieldSchema>(\n\tclient: BaseChatModel,\n\ttreeView: TreeView<TSchema> | (ReadableField<TSchema> & TreeNode),\n\toptions?: Readonly<SemanticAgentOptions>,\n): SharedTreeSemanticAgent<TSchema>;\n/**\n * Create a {@link SharedTreeSemanticAgent} using a Langchain chat model.\n * @alpha\n * @deprecated Use {@link SharedTreeSemanticAgent} with a {@link LangchainChatModel} instead.\n */\nexport function createSemanticAgent<TSchema extends ImplicitFieldSchema>(\n\tclient: BaseChatModel,\n\ttreeView: TreeView<TSchema> | (ReadableField<TSchema> & TreeNode),\n\toptions?: Readonly<SemanticAgentOptions>,\n): SharedTreeSemanticAgent<TSchema> {\n\treturn new SharedTreeSemanticAgent(new LangchainChatModel(client), treeView, options);\n}\n\n// #endregion Legacy APIs\n"]}
@@ -1,13 +0,0 @@
1
- /*!
2
- * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
- * Licensed under the MIT License.
4
- */
5
- /**
6
- * Finds the name of the first invocable function in the given code string.
7
- */
8
- export declare function findInvocableFunctionName(code: string): string | undefined;
9
- /**
10
- * Removes top-level export syntax so that the provided code can execute in a classic script context.
11
- */
12
- export declare function stripExportSyntax(code: string): string;
13
- //# sourceMappingURL=functionParsing.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"functionParsing.d.ts","sourceRoot":"","sources":["../src/functionParsing.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAsBH;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAc1E;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CA0DtD"}
@@ -1,210 +0,0 @@
1
- /*!
2
- * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
- * Licensed under the MIT License.
4
- */
5
- /* eslint-disable @rushstack/no-new-null */
6
- import { parse } from "acorn";
7
- /**
8
- * Finds the name of the first invocable function in the given code string.
9
- */
10
- export function findInvocableFunctionName(code) {
11
- const program = parseProgram(code);
12
- if (program === undefined) {
13
- return undefined;
14
- }
15
- for (const node of program.body) {
16
- const name = getNameFromTopLevelNode(node);
17
- if (name !== undefined) {
18
- return name;
19
- }
20
- }
21
- return undefined;
22
- }
23
- /**
24
- * Removes top-level export syntax so that the provided code can execute in a classic script context.
25
- */
26
- export function stripExportSyntax(code) {
27
- const program = parseProgram(code);
28
- if (program === undefined) {
29
- return code;
30
- }
31
- const replacements = [];
32
- for (const node of program.body) {
33
- switch (node.type) {
34
- case "ExportNamedDeclaration": {
35
- if (node.declaration !== undefined && node.declaration !== null) {
36
- replacements.push({
37
- start: node.start,
38
- end: node.declaration.start,
39
- replacement: "",
40
- });
41
- }
42
- else {
43
- replacements.push({ start: node.start, end: node.end, replacement: "" });
44
- }
45
- break;
46
- }
47
- case "ExportDefaultDeclaration": {
48
- const { declaration, start, end } = node;
49
- if (declaration.type === "FunctionDeclaration" ||
50
- declaration.type === "FunctionExpression") {
51
- replacements.push({
52
- start,
53
- end: declaration.start,
54
- replacement: "",
55
- });
56
- }
57
- else {
58
- replacements.push({ start, end, replacement: "" });
59
- }
60
- break;
61
- }
62
- case "ExportAllDeclaration": {
63
- replacements.push({ start: node.start, end: node.end, replacement: "" });
64
- break;
65
- }
66
- // No default
67
- }
68
- }
69
- if (replacements.length === 0) {
70
- return code;
71
- }
72
- replacements.sort((a, b) => b.start - a.start);
73
- let sanitized = code;
74
- for (const { start, end, replacement } of replacements) {
75
- sanitized = `${sanitized.slice(0, start)}${replacement}${sanitized.slice(end)}`;
76
- }
77
- return sanitized;
78
- }
79
- function parseProgram(code) {
80
- try {
81
- return parse(code, {
82
- ecmaVersion: "latest",
83
- sourceType: "module",
84
- });
85
- }
86
- catch {
87
- try {
88
- return parse(code, {
89
- ecmaVersion: "latest",
90
- sourceType: "script",
91
- allowReturnOutsideFunction: true,
92
- allowAwaitOutsideFunction: true,
93
- allowSuperOutsideMethod: true,
94
- });
95
- }
96
- catch {
97
- return undefined;
98
- }
99
- }
100
- }
101
- function getNameFromTopLevelNode(node) {
102
- switch (node.type) {
103
- case "FunctionDeclaration": {
104
- return getFunctionIdentifier(node);
105
- }
106
- case "VariableDeclaration": {
107
- return getNameFromVariableDeclaration(node);
108
- }
109
- case "ExpressionStatement": {
110
- return getNameFromExpression(node.expression);
111
- }
112
- case "ExportNamedDeclaration": {
113
- return getNameFromExportNamed(node);
114
- }
115
- case "ExportDefaultDeclaration": {
116
- return getNameFromExportDefault(node);
117
- }
118
- default: {
119
- return undefined;
120
- }
121
- }
122
- }
123
- function getNameFromVariableDeclaration(node) {
124
- for (const declarator of node.declarations) {
125
- const name = getIdentifierFromPattern(declarator.id);
126
- if (name === undefined) {
127
- continue;
128
- }
129
- if (isFunctionLikeExpression(declarator.init)) {
130
- return name;
131
- }
132
- }
133
- return undefined;
134
- }
135
- function getNameFromExpression(expression) {
136
- if (!isAssignmentExpression(expression)) {
137
- return undefined;
138
- }
139
- if (expression.operator !== "=") {
140
- return undefined;
141
- }
142
- const target = getIdentifierFromPattern(expression.left);
143
- if (target === undefined) {
144
- return undefined;
145
- }
146
- return isFunctionLikeExpression(expression.right) ? target : undefined;
147
- }
148
- function getNameFromExportNamed(node) {
149
- const declaration = node.declaration;
150
- if (declaration !== undefined && declaration !== null) {
151
- if (declaration.type === "FunctionDeclaration") {
152
- const name = getFunctionIdentifier(declaration);
153
- if (name !== undefined) {
154
- return name;
155
- }
156
- }
157
- else if (declaration.type === "VariableDeclaration") {
158
- const name = getNameFromVariableDeclaration(declaration);
159
- if (name !== undefined) {
160
- return name;
161
- }
162
- }
163
- }
164
- if (node.source === undefined || node.source === null) {
165
- for (const specifier of node.specifiers) {
166
- const localName = getIdentifierName(specifier.local);
167
- if (localName !== undefined) {
168
- return localName;
169
- }
170
- }
171
- }
172
- return undefined;
173
- }
174
- function getNameFromExportDefault(node) {
175
- const declaration = node.declaration;
176
- if (declaration.type === "Identifier") {
177
- return declaration.name;
178
- }
179
- if (declaration.type === "FunctionDeclaration" ||
180
- declaration.type === "FunctionExpression") {
181
- return getFunctionIdentifier(declaration);
182
- }
183
- return undefined;
184
- }
185
- function isAssignmentExpression(expression) {
186
- return expression?.type === "AssignmentExpression";
187
- }
188
- function getIdentifierFromPattern(pattern) {
189
- if (pattern.type === "Identifier") {
190
- return pattern.name;
191
- }
192
- return undefined;
193
- }
194
- function isFunctionLikeExpression(expression) {
195
- return (expression?.type === "FunctionExpression" || expression?.type === "ArrowFunctionExpression");
196
- }
197
- function getFunctionIdentifier(fn) {
198
- const id = fn.id;
199
- if (id === undefined || id === null) {
200
- return undefined;
201
- }
202
- return id.name;
203
- }
204
- function getIdentifierName(node) {
205
- if (node.type === "Identifier") {
206
- return node.name;
207
- }
208
- return undefined;
209
- }
210
- //# sourceMappingURL=functionParsing.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"functionParsing.js","sourceRoot":"","sources":["../src/functionParsing.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/* eslint-disable @rushstack/no-new-null */\n\nimport { parse } from \"acorn\";\nimport type {\n\tProgram,\n\tStatement,\n\tModuleDeclaration,\n\tVariableDeclaration,\n\tExpression,\n\tAssignmentExpression,\n\tPattern,\n\tIdentifier,\n\tLiteral,\n\tExportNamedDeclaration,\n\tExportDefaultDeclaration,\n\tFunctionDeclaration,\n\tFunctionExpression,\n\tArrowFunctionExpression,\n} from \"acorn\";\n\n/**\n * Finds the name of the first invocable function in the given code string.\n */\nexport function findInvocableFunctionName(code: string): string | undefined {\n\tconst program = parseProgram(code);\n\tif (program === undefined) {\n\t\treturn undefined;\n\t}\n\n\tfor (const node of program.body) {\n\t\tconst name = getNameFromTopLevelNode(node);\n\t\tif (name !== undefined) {\n\t\t\treturn name;\n\t\t}\n\t}\n\n\treturn undefined;\n}\n\n/**\n * Removes top-level export syntax so that the provided code can execute in a classic script context.\n */\nexport function stripExportSyntax(code: string): string {\n\tconst program = parseProgram(code);\n\tif (program === undefined) {\n\t\treturn code;\n\t}\n\n\tconst replacements: { start: number; end: number; replacement: string }[] = [];\n\tfor (const node of program.body) {\n\t\tswitch (node.type) {\n\t\t\tcase \"ExportNamedDeclaration\": {\n\t\t\t\tif (node.declaration !== undefined && node.declaration !== null) {\n\t\t\t\t\treplacements.push({\n\t\t\t\t\t\tstart: node.start,\n\t\t\t\t\t\tend: node.declaration.start,\n\t\t\t\t\t\treplacement: \"\",\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\treplacements.push({ start: node.start, end: node.end, replacement: \"\" });\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"ExportDefaultDeclaration\": {\n\t\t\t\tconst { declaration, start, end } = node;\n\t\t\t\tif (\n\t\t\t\t\tdeclaration.type === \"FunctionDeclaration\" ||\n\t\t\t\t\tdeclaration.type === \"FunctionExpression\"\n\t\t\t\t) {\n\t\t\t\t\treplacements.push({\n\t\t\t\t\t\tstart,\n\t\t\t\t\t\tend: declaration.start,\n\t\t\t\t\t\treplacement: \"\",\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\treplacements.push({ start, end, replacement: \"\" });\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"ExportAllDeclaration\": {\n\t\t\t\treplacements.push({ start: node.start, end: node.end, replacement: \"\" });\n\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\t// No default\n\t\t}\n\t}\n\n\tif (replacements.length === 0) {\n\t\treturn code;\n\t}\n\n\treplacements.sort((a, b) => b.start - a.start);\n\tlet sanitized = code;\n\tfor (const { start, end, replacement } of replacements) {\n\t\tsanitized = `${sanitized.slice(0, start)}${replacement}${sanitized.slice(end)}`;\n\t}\n\treturn sanitized;\n}\n\ntype TopLevelNode = Statement | ModuleDeclaration;\n\nfunction parseProgram(code: string): Program | undefined {\n\ttry {\n\t\treturn parse(code, {\n\t\t\tecmaVersion: \"latest\",\n\t\t\tsourceType: \"module\",\n\t\t});\n\t} catch {\n\t\ttry {\n\t\t\treturn parse(code, {\n\t\t\t\tecmaVersion: \"latest\",\n\t\t\t\tsourceType: \"script\",\n\t\t\t\tallowReturnOutsideFunction: true,\n\t\t\t\tallowAwaitOutsideFunction: true,\n\t\t\t\tallowSuperOutsideMethod: true,\n\t\t\t});\n\t\t} catch {\n\t\t\treturn undefined;\n\t\t}\n\t}\n}\n\nfunction getNameFromTopLevelNode(node: TopLevelNode): string | undefined {\n\tswitch (node.type) {\n\t\tcase \"FunctionDeclaration\": {\n\t\t\treturn getFunctionIdentifier(node);\n\t\t}\n\t\tcase \"VariableDeclaration\": {\n\t\t\treturn getNameFromVariableDeclaration(node);\n\t\t}\n\t\tcase \"ExpressionStatement\": {\n\t\t\treturn getNameFromExpression(node.expression);\n\t\t}\n\t\tcase \"ExportNamedDeclaration\": {\n\t\t\treturn getNameFromExportNamed(node);\n\t\t}\n\t\tcase \"ExportDefaultDeclaration\": {\n\t\t\treturn getNameFromExportDefault(node);\n\t\t}\n\t\tdefault: {\n\t\t\treturn undefined;\n\t\t}\n\t}\n}\n\nfunction getNameFromVariableDeclaration(node: VariableDeclaration): string | undefined {\n\tfor (const declarator of node.declarations) {\n\t\tconst name = getIdentifierFromPattern(declarator.id);\n\t\tif (name === undefined) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (isFunctionLikeExpression(declarator.init)) {\n\t\t\treturn name;\n\t\t}\n\t}\n\n\treturn undefined;\n}\n\nfunction getNameFromExpression(\n\texpression: Expression | Literal | undefined,\n): string | undefined {\n\tif (!isAssignmentExpression(expression)) {\n\t\treturn undefined;\n\t}\n\n\tif (expression.operator !== \"=\") {\n\t\treturn undefined;\n\t}\n\n\tconst target = getIdentifierFromPattern(expression.left);\n\tif (target === undefined) {\n\t\treturn undefined;\n\t}\n\n\treturn isFunctionLikeExpression(expression.right) ? target : undefined;\n}\n\nfunction getNameFromExportNamed(node: ExportNamedDeclaration): string | undefined {\n\tconst declaration = node.declaration;\n\tif (declaration !== undefined && declaration !== null) {\n\t\tif (declaration.type === \"FunctionDeclaration\") {\n\t\t\tconst name = getFunctionIdentifier(declaration);\n\t\t\tif (name !== undefined) {\n\t\t\t\treturn name;\n\t\t\t}\n\t\t} else if (declaration.type === \"VariableDeclaration\") {\n\t\t\tconst name = getNameFromVariableDeclaration(declaration);\n\t\t\tif (name !== undefined) {\n\t\t\t\treturn name;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (node.source === undefined || node.source === null) {\n\t\tfor (const specifier of node.specifiers) {\n\t\t\tconst localName = getIdentifierName(specifier.local);\n\t\t\tif (localName !== undefined) {\n\t\t\t\treturn localName;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn undefined;\n}\n\nfunction getNameFromExportDefault(node: ExportDefaultDeclaration): string | undefined {\n\tconst declaration = node.declaration;\n\tif (declaration.type === \"Identifier\") {\n\t\treturn declaration.name;\n\t}\n\n\tif (\n\t\tdeclaration.type === \"FunctionDeclaration\" ||\n\t\tdeclaration.type === \"FunctionExpression\"\n\t) {\n\t\treturn getFunctionIdentifier(declaration);\n\t}\n\n\treturn undefined;\n}\n\nfunction isAssignmentExpression(\n\texpression: Expression | Literal | undefined,\n): expression is AssignmentExpression {\n\treturn expression?.type === \"AssignmentExpression\";\n}\n\nfunction getIdentifierFromPattern(pattern: Pattern): string | undefined {\n\tif (pattern.type === \"Identifier\") {\n\t\treturn pattern.name;\n\t}\n\treturn undefined;\n}\n\nfunction isFunctionLikeExpression(\n\texpression: Expression | null | undefined,\n): expression is FunctionExpression | ArrowFunctionExpression {\n\treturn (\n\t\texpression?.type === \"FunctionExpression\" || expression?.type === \"ArrowFunctionExpression\"\n\t);\n}\n\nfunction getFunctionIdentifier(\n\tfn: FunctionDeclaration | FunctionExpression | { id?: Identifier | null },\n): string | undefined {\n\tconst id = fn.id;\n\tif (id === undefined || id === null) {\n\t\treturn undefined;\n\t}\n\treturn id.name;\n}\n\nfunction getIdentifierName(node: Identifier | Literal): string | undefined {\n\tif (node.type === \"Identifier\") {\n\t\treturn node.name;\n\t}\n\treturn undefined;\n}\n"]}
@@ -1,43 +0,0 @@
1
- /*!
2
- * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
- * Licensed under the MIT License.
4
- */
5
- import type { ImplicitFieldSchema, ReadableField, TreeNode } from "@fluidframework/tree/alpha";
6
- import type { BaseChatModel } from "@langchain/core/language_models/chat_models";
7
- import { SharedTreeSemanticAgent } from "./agent.js";
8
- import { type SemanticAgentOptions, type SharedTreeChatModel, type SharedTreeChatQuery } from "./api.js";
9
- import type { TreeView } from "./utils.js";
10
- /**
11
- * An implementation of {@link SharedTreeChatModel} that wraps a Langchain chat model.
12
- * @remarks This class is responsible for managing the conversation history and interacting with the Langchain model (e.g. via Tool use for editing).
13
- * @alpha
14
- */
15
- export declare class LangchainChatModel implements SharedTreeChatModel {
16
- private readonly model;
17
- private readonly messages;
18
- constructor(model: BaseChatModel);
19
- readonly editToolName = "GenerateTreeEditingCode";
20
- get name(): string | undefined;
21
- appendContext(text: string): void;
22
- query(query: SharedTreeChatQuery): Promise<string>;
23
- private queryEdit;
24
- }
25
- /**
26
- * Create a {@link SharedTreeSemanticAgent} using a Langchain chat model.
27
- * @alpha
28
- * @deprecated Use {@link SharedTreeSemanticAgent} with a {@link LangchainChatModel} instead.
29
- */
30
- export declare function createSemanticAgent<TSchema extends ImplicitFieldSchema>(client: BaseChatModel, treeView: TreeView<TSchema>, options?: Readonly<SemanticAgentOptions>): SharedTreeSemanticAgent<TSchema>;
31
- /**
32
- * Create a {@link SharedTreeSemanticAgent} using a Langchain chat model.
33
- * @alpha
34
- * @deprecated Use {@link SharedTreeSemanticAgent} with a {@link LangchainChatModel} instead.
35
- */
36
- export declare function createSemanticAgent<TSchema extends ImplicitFieldSchema>(client: BaseChatModel, node: ReadableField<TSchema> & TreeNode, options?: Readonly<SemanticAgentOptions>): SharedTreeSemanticAgent<TSchema>;
37
- /**
38
- * Create a {@link SharedTreeSemanticAgent} using a Langchain chat model.
39
- * @alpha
40
- * @deprecated Use {@link SharedTreeSemanticAgent} with a {@link LangchainChatModel} instead.
41
- */
42
- export declare function createSemanticAgent<TSchema extends ImplicitFieldSchema>(client: BaseChatModel, treeView: TreeView<TSchema> | (ReadableField<TSchema> & TreeNode), options?: Readonly<SemanticAgentOptions>): SharedTreeSemanticAgent<TSchema>;
43
- //# sourceMappingURL=langchain.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"langchain.d.ts","sourceRoot":"","sources":["../src/langchain.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,mBAAmB,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAE/F,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6CAA6C,CAAC;AAYjF,OAAO,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAEN,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACxB,MAAM,UAAU,CAAC;AAClB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C;;;;GAIG;AACH,qBAAa,kBAAmB,YAAW,mBAAmB;IAE1C,OAAO,CAAC,QAAQ,CAAC,KAAK;IADzC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkD;gBACvC,KAAK,EAAE,aAAa;IAExD,SAAgB,YAAY,6BAA6B;IAEzD,IAAW,IAAI,IAAI,MAAM,GAAG,SAAS,CAGpC;IAEM,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI3B,KAAK,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,MAAM,CAAC;YAKjD,SAAS;CA4CvB;AAID;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,SAAS,mBAAmB,EACtE,MAAM,EAAE,aAAa,EACrB,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,EAC3B,OAAO,CAAC,EAAE,QAAQ,CAAC,oBAAoB,CAAC,GACtC,uBAAuB,CAAC,OAAO,CAAC,CAAC;AACpC;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,SAAS,mBAAmB,EACtE,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE,aAAa,CAAC,OAAO,CAAC,GAAG,QAAQ,EACvC,OAAO,CAAC,EAAE,QAAQ,CAAC,oBAAoB,CAAC,GACtC,uBAAuB,CAAC,OAAO,CAAC,CAAC;AACpC;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,SAAS,mBAAmB,EACtE,MAAM,EAAE,aAAa,EACrB,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,QAAQ,CAAC,EACjE,OAAO,CAAC,EAAE,QAAQ,CAAC,oBAAoB,CAAC,GACtC,uBAAuB,CAAC,OAAO,CAAC,CAAC"}
package/lib/langchain.js DELETED
@@ -1,84 +0,0 @@
1
- /*!
2
- * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
- * Licensed under the MIT License.
4
- */
5
- import { UsageError } from "@fluidframework/telemetry-utils/internal";
6
- import { HumanMessage, SystemMessage,
7
- // eslint-disable-next-line import/no-internal-modules
8
- } from "@langchain/core/messages";
9
- // eslint-disable-next-line import/no-internal-modules
10
- import { tool } from "@langchain/core/tools";
11
- import z from "zod";
12
- import { SharedTreeSemanticAgent } from "./agent.js";
13
- import { isEditResult, } from "./api.js";
14
- /**
15
- * An implementation of {@link SharedTreeChatModel} that wraps a Langchain chat model.
16
- * @remarks This class is responsible for managing the conversation history and interacting with the Langchain model (e.g. via Tool use for editing).
17
- * @alpha
18
- */
19
- export class LangchainChatModel {
20
- constructor(model) {
21
- this.model = model;
22
- this.messages = [];
23
- this.editToolName = "GenerateTreeEditingCode";
24
- }
25
- get name() {
26
- const name = this.model.metadata?.modelName;
27
- return typeof name === "string" ? name : undefined;
28
- }
29
- appendContext(text) {
30
- this.messages.push(new SystemMessage(text));
31
- }
32
- async query(query) {
33
- this.messages.push(new HumanMessage(query.text));
34
- return this.queryEdit(async (js) => query.edit(js));
35
- }
36
- async queryEdit(edit) {
37
- const editingTool = tool(async ({ functionCode }) => {
38
- return edit(functionCode);
39
- }, {
40
- name: this.editToolName,
41
- description: `Invokes a JavaScript function to edit a user's tree`,
42
- schema: z.object({
43
- functionCode: z.string().describe(`The code of the JavaScript function.
44
- For example: "function editTree({ root, create }) { /* your code here */ }"`),
45
- }),
46
- });
47
- const runnable = this.model.bindTools?.([editingTool], { tool_choice: "auto" });
48
- if (runnable === undefined) {
49
- throw new UsageError("LLM client must support function calling or tool use.");
50
- }
51
- const responseMessage = await runnable.invoke(this.messages);
52
- this.messages.push(responseMessage);
53
- if (responseMessage.tool_calls !== undefined && responseMessage.tool_calls.length > 0) {
54
- for (const toolCall of responseMessage.tool_calls) {
55
- switch (toolCall.name) {
56
- case editingTool.name: {
57
- const toolResult = await editingTool.invoke(toolCall);
58
- this.messages.push(toolResult);
59
- const editResult = JSON.parse(toolResult.text);
60
- if (isEditResult(editResult) && editResult.type === "tooManyEditsError") {
61
- return editResult.message;
62
- }
63
- // This call will either terminate the edit chain (if the LLM decides not to edit further) or continue it if more edits are required.
64
- return this.queryEdit(edit);
65
- }
66
- default: {
67
- this.messages.push(new HumanMessage(`Unrecognized tool call: ${toolCall.name}`));
68
- }
69
- }
70
- }
71
- }
72
- return responseMessage.text;
73
- }
74
- }
75
- /**
76
- * Create a {@link SharedTreeSemanticAgent} using a Langchain chat model.
77
- * @alpha
78
- * @deprecated Use {@link SharedTreeSemanticAgent} with a {@link LangchainChatModel} instead.
79
- */
80
- export function createSemanticAgent(client, treeView, options) {
81
- return new SharedTreeSemanticAgent(new LangchainChatModel(client), treeView, options);
82
- }
83
- // #endregion Legacy APIs
84
- //# sourceMappingURL=langchain.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"langchain.js","sourceRoot":"","sources":["../src/langchain.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { UsageError } from \"@fluidframework/telemetry-utils/internal\";\nimport type { ImplicitFieldSchema, ReadableField, TreeNode } from \"@fluidframework/tree/alpha\";\n// eslint-disable-next-line import/no-internal-modules\nimport type { BaseChatModel } from \"@langchain/core/language_models/chat_models\";\n// eslint-disable-next-line import/no-internal-modules\nimport type { AIMessage, ToolMessage } from \"@langchain/core/messages\";\nimport {\n\tHumanMessage,\n\tSystemMessage,\n\t// eslint-disable-next-line import/no-internal-modules\n} from \"@langchain/core/messages\";\n// eslint-disable-next-line import/no-internal-modules\nimport { tool } from \"@langchain/core/tools\";\nimport z from \"zod\";\n\nimport { SharedTreeSemanticAgent } from \"./agent.js\";\nimport {\n\tisEditResult,\n\ttype SemanticAgentOptions,\n\ttype SharedTreeChatModel,\n\ttype SharedTreeChatQuery,\n} from \"./api.js\";\nimport type { TreeView } from \"./utils.js\";\n\n/**\n * An implementation of {@link SharedTreeChatModel} that wraps a Langchain chat model.\n * @remarks This class is responsible for managing the conversation history and interacting with the Langchain model (e.g. via Tool use for editing).\n * @alpha\n */\nexport class LangchainChatModel implements SharedTreeChatModel {\n\tprivate readonly messages: (HumanMessage | AIMessage | ToolMessage)[] = [];\n\tpublic constructor(private readonly model: BaseChatModel) {}\n\n\tpublic readonly editToolName = \"GenerateTreeEditingCode\";\n\n\tpublic get name(): string | undefined {\n\t\tconst name = this.model.metadata?.modelName;\n\t\treturn typeof name === \"string\" ? name : undefined;\n\t}\n\n\tpublic appendContext(text: string): void {\n\t\tthis.messages.push(new SystemMessage(text));\n\t}\n\n\tpublic async query(query: SharedTreeChatQuery): Promise<string> {\n\t\tthis.messages.push(new HumanMessage(query.text));\n\t\treturn this.queryEdit(async (js) => query.edit(js));\n\t}\n\n\tprivate async queryEdit(edit: SharedTreeChatQuery[\"edit\"]): Promise<string> {\n\t\tconst editingTool = tool(\n\t\t\tasync ({ functionCode }) => {\n\t\t\t\treturn edit(functionCode);\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: this.editToolName,\n\t\t\t\tdescription: `Invokes a JavaScript function to edit a user's tree`,\n\t\t\t\tschema: z.object({\n\t\t\t\t\tfunctionCode: z.string().describe(`The code of the JavaScript function.\nFor example: \"function editTree({ root, create }) { /* your code here */ }\"`),\n\t\t\t\t}),\n\t\t\t},\n\t\t);\n\t\tconst runnable = this.model.bindTools?.([editingTool], { tool_choice: \"auto\" });\n\t\tif (runnable === undefined) {\n\t\t\tthrow new UsageError(\"LLM client must support function calling or tool use.\");\n\t\t}\n\n\t\tconst responseMessage = await runnable.invoke(this.messages);\n\t\tthis.messages.push(responseMessage);\n\n\t\tif (responseMessage.tool_calls !== undefined && responseMessage.tool_calls.length > 0) {\n\t\t\tfor (const toolCall of responseMessage.tool_calls) {\n\t\t\t\tswitch (toolCall.name) {\n\t\t\t\t\tcase editingTool.name: {\n\t\t\t\t\t\tconst toolResult = await editingTool.invoke(toolCall);\n\t\t\t\t\t\tthis.messages.push(toolResult);\n\t\t\t\t\t\tconst editResult: unknown = JSON.parse(toolResult.text);\n\t\t\t\t\t\tif (isEditResult(editResult) && editResult.type === \"tooManyEditsError\") {\n\t\t\t\t\t\t\treturn editResult.message;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// This call will either terminate the edit chain (if the LLM decides not to edit further) or continue it if more edits are required.\n\t\t\t\t\t\treturn this.queryEdit(edit);\n\t\t\t\t\t}\n\t\t\t\t\tdefault: {\n\t\t\t\t\t\tthis.messages.push(new HumanMessage(`Unrecognized tool call: ${toolCall.name}`));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn responseMessage.text;\n\t}\n}\n\n// #region Legacy APIs\n\n/**\n * Create a {@link SharedTreeSemanticAgent} using a Langchain chat model.\n * @alpha\n * @deprecated Use {@link SharedTreeSemanticAgent} with a {@link LangchainChatModel} instead.\n */\nexport function createSemanticAgent<TSchema extends ImplicitFieldSchema>(\n\tclient: BaseChatModel,\n\ttreeView: TreeView<TSchema>,\n\toptions?: Readonly<SemanticAgentOptions>,\n): SharedTreeSemanticAgent<TSchema>;\n/**\n * Create a {@link SharedTreeSemanticAgent} using a Langchain chat model.\n * @alpha\n * @deprecated Use {@link SharedTreeSemanticAgent} with a {@link LangchainChatModel} instead.\n */\nexport function createSemanticAgent<TSchema extends ImplicitFieldSchema>(\n\tclient: BaseChatModel,\n\tnode: ReadableField<TSchema> & TreeNode,\n\toptions?: Readonly<SemanticAgentOptions>,\n): SharedTreeSemanticAgent<TSchema>;\n/**\n * Create a {@link SharedTreeSemanticAgent} using a Langchain chat model.\n * @alpha\n * @deprecated Use {@link SharedTreeSemanticAgent} with a {@link LangchainChatModel} instead.\n */\nexport function createSemanticAgent<TSchema extends ImplicitFieldSchema>(\n\tclient: BaseChatModel,\n\ttreeView: TreeView<TSchema> | (ReadableField<TSchema> & TreeNode),\n\toptions?: Readonly<SemanticAgentOptions>,\n): SharedTreeSemanticAgent<TSchema>;\n/**\n * Create a {@link SharedTreeSemanticAgent} using a Langchain chat model.\n * @alpha\n * @deprecated Use {@link SharedTreeSemanticAgent} with a {@link LangchainChatModel} instead.\n */\nexport function createSemanticAgent<TSchema extends ImplicitFieldSchema>(\n\tclient: BaseChatModel,\n\ttreeView: TreeView<TSchema> | (ReadableField<TSchema> & TreeNode),\n\toptions?: Readonly<SemanticAgentOptions>,\n): SharedTreeSemanticAgent<TSchema> {\n\treturn new SharedTreeSemanticAgent(new LangchainChatModel(client), treeView, options);\n}\n\n// #endregion Legacy APIs\n"]}