beeai-framework 0.1.13 → 0.1.15

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 (129) hide show
  1. package/dist/{agents/experimental/remote → adapters/acp/agents}/agent.cjs +9 -6
  2. package/dist/adapters/acp/agents/agent.cjs.map +1 -0
  3. package/dist/{agents/experimental/remote → adapters/acp/agents}/agent.d.cts +11 -30
  4. package/dist/{agents/experimental/remote → adapters/acp/agents}/agent.d.ts +11 -30
  5. package/dist/{agents/experimental/remote → adapters/acp/agents}/agent.js +9 -6
  6. package/dist/adapters/acp/agents/agent.js.map +1 -0
  7. package/dist/adapters/acp/agents/events.cjs +4 -0
  8. package/dist/adapters/acp/agents/events.cjs.map +1 -0
  9. package/dist/adapters/acp/agents/events.d.cts +34 -0
  10. package/dist/adapters/acp/agents/events.d.ts +34 -0
  11. package/dist/adapters/acp/agents/events.js +3 -0
  12. package/dist/adapters/acp/agents/events.js.map +1 -0
  13. package/dist/adapters/acp/agents/types.cjs +4 -0
  14. package/dist/adapters/acp/agents/types.cjs.map +1 -0
  15. package/dist/adapters/acp/agents/types.d.cts +38 -0
  16. package/dist/adapters/acp/agents/types.d.ts +38 -0
  17. package/dist/adapters/acp/agents/types.js +3 -0
  18. package/dist/adapters/acp/agents/types.js.map +1 -0
  19. package/dist/adapters/amazon-bedrock/backend/client.cjs +3 -1
  20. package/dist/adapters/amazon-bedrock/backend/client.cjs.map +1 -1
  21. package/dist/adapters/amazon-bedrock/backend/client.js +3 -1
  22. package/dist/adapters/amazon-bedrock/backend/client.js.map +1 -1
  23. package/dist/adapters/anthropic/backend/client.cjs +3 -1
  24. package/dist/adapters/anthropic/backend/client.cjs.map +1 -1
  25. package/dist/adapters/anthropic/backend/client.js +3 -1
  26. package/dist/adapters/anthropic/backend/client.js.map +1 -1
  27. package/dist/adapters/azure-openai/backend/client.cjs +3 -1
  28. package/dist/adapters/azure-openai/backend/client.cjs.map +1 -1
  29. package/dist/adapters/azure-openai/backend/client.js +3 -1
  30. package/dist/adapters/azure-openai/backend/client.js.map +1 -1
  31. package/dist/adapters/beeai_platform/agents/agent.cjs +61 -0
  32. package/dist/adapters/beeai_platform/agents/agent.cjs.map +1 -0
  33. package/dist/adapters/beeai_platform/agents/agent.d.cts +49 -0
  34. package/dist/adapters/beeai_platform/agents/agent.d.ts +49 -0
  35. package/dist/adapters/beeai_platform/agents/agent.js +59 -0
  36. package/dist/adapters/beeai_platform/agents/agent.js.map +1 -0
  37. package/dist/adapters/beeai_platform/agents/events.cjs +4 -0
  38. package/dist/adapters/beeai_platform/agents/events.cjs.map +1 -0
  39. package/dist/adapters/beeai_platform/agents/events.d.cts +34 -0
  40. package/dist/adapters/beeai_platform/agents/events.d.ts +34 -0
  41. package/dist/adapters/beeai_platform/agents/events.js +3 -0
  42. package/dist/adapters/beeai_platform/agents/events.js.map +1 -0
  43. package/dist/adapters/beeai_platform/agents/types.cjs +4 -0
  44. package/dist/adapters/beeai_platform/agents/types.cjs.map +1 -0
  45. package/dist/adapters/beeai_platform/agents/types.d.cts +38 -0
  46. package/dist/adapters/beeai_platform/agents/types.d.ts +38 -0
  47. package/dist/adapters/beeai_platform/agents/types.js +3 -0
  48. package/dist/adapters/beeai_platform/agents/types.js.map +1 -0
  49. package/dist/adapters/google-vertex/backend/client.cjs +3 -1
  50. package/dist/adapters/google-vertex/backend/client.cjs.map +1 -1
  51. package/dist/adapters/google-vertex/backend/client.js +3 -1
  52. package/dist/adapters/google-vertex/backend/client.js.map +1 -1
  53. package/dist/adapters/groq/backend/client.cjs +3 -1
  54. package/dist/adapters/groq/backend/client.cjs.map +1 -1
  55. package/dist/adapters/groq/backend/client.js +3 -1
  56. package/dist/adapters/groq/backend/client.js.map +1 -1
  57. package/dist/adapters/mcp/serve/http_server.cjs +163 -0
  58. package/dist/adapters/mcp/serve/http_server.cjs.map +1 -0
  59. package/dist/adapters/mcp/serve/http_server.d.cts +21 -0
  60. package/dist/adapters/mcp/serve/http_server.d.ts +21 -0
  61. package/dist/adapters/mcp/serve/http_server.js +157 -0
  62. package/dist/adapters/mcp/serve/http_server.js.map +1 -0
  63. package/dist/adapters/mcp/serve/in_memory_store.cjs +69 -0
  64. package/dist/adapters/mcp/serve/in_memory_store.cjs.map +1 -0
  65. package/dist/adapters/mcp/serve/in_memory_store.d.cts +49 -0
  66. package/dist/adapters/mcp/serve/in_memory_store.d.ts +49 -0
  67. package/dist/adapters/mcp/serve/in_memory_store.js +67 -0
  68. package/dist/adapters/mcp/serve/in_memory_store.js.map +1 -0
  69. package/dist/adapters/mcp/serve/server.cjs +109 -0
  70. package/dist/adapters/mcp/serve/server.cjs.map +1 -0
  71. package/dist/adapters/mcp/serve/server.d.cts +70 -0
  72. package/dist/adapters/mcp/serve/server.d.ts +70 -0
  73. package/dist/adapters/mcp/serve/server.js +106 -0
  74. package/dist/adapters/mcp/serve/server.js.map +1 -0
  75. package/dist/adapters/ollama/backend/client.cjs +3 -1
  76. package/dist/adapters/ollama/backend/client.cjs.map +1 -1
  77. package/dist/adapters/ollama/backend/client.js +3 -1
  78. package/dist/adapters/ollama/backend/client.js.map +1 -1
  79. package/dist/adapters/openai/backend/client.cjs +3 -1
  80. package/dist/adapters/openai/backend/client.cjs.map +1 -1
  81. package/dist/adapters/openai/backend/client.js +3 -1
  82. package/dist/adapters/openai/backend/client.js.map +1 -1
  83. package/dist/adapters/vercel/backend/chat.cjs +7 -3
  84. package/dist/adapters/vercel/backend/chat.cjs.map +1 -1
  85. package/dist/adapters/vercel/backend/chat.js +8 -4
  86. package/dist/adapters/vercel/backend/chat.js.map +1 -1
  87. package/dist/adapters/vercel/backend/utils.cjs +82 -0
  88. package/dist/adapters/vercel/backend/utils.cjs.map +1 -0
  89. package/dist/adapters/vercel/backend/utils.d.cts +30 -0
  90. package/dist/adapters/vercel/backend/utils.d.ts +30 -0
  91. package/dist/adapters/vercel/backend/utils.js +78 -0
  92. package/dist/adapters/vercel/backend/utils.js.map +1 -0
  93. package/dist/{agent-Cmnvjx_k.d.cts → agent-Ca5UE2P1.d.cts} +1 -1
  94. package/dist/{agent-B55OuVCj.d.ts → agent-CgsoqVL5.d.ts} +1 -1
  95. package/dist/agents/react/agent.d.cts +1 -1
  96. package/dist/agents/react/agent.d.ts +1 -1
  97. package/dist/agents/react/prompts.d.cts +1 -1
  98. package/dist/agents/react/prompts.d.ts +1 -1
  99. package/dist/agents/react/runners/base.d.cts +1 -1
  100. package/dist/agents/react/runners/base.d.ts +1 -1
  101. package/dist/agents/react/runners/deep-think/prompts.d.cts +1 -1
  102. package/dist/agents/react/runners/deep-think/prompts.d.ts +1 -1
  103. package/dist/agents/react/runners/deep-think/runner.d.cts +2 -2
  104. package/dist/agents/react/runners/deep-think/runner.d.ts +2 -2
  105. package/dist/agents/react/runners/default/runner.d.cts +2 -2
  106. package/dist/agents/react/runners/default/runner.d.ts +2 -2
  107. package/dist/agents/react/runners/granite/prompts.d.cts +1 -1
  108. package/dist/agents/react/runners/granite/prompts.d.ts +1 -1
  109. package/dist/agents/react/runners/granite/runner.d.cts +2 -2
  110. package/dist/agents/react/runners/granite/runner.d.ts +2 -2
  111. package/dist/memory/slidingMemory.d.cts +1 -1
  112. package/dist/memory/slidingMemory.d.ts +1 -1
  113. package/dist/serve/server.cjs +52 -0
  114. package/dist/serve/server.cjs.map +1 -0
  115. package/dist/serve/server.d.cts +31 -0
  116. package/dist/serve/server.d.ts +31 -0
  117. package/dist/serve/server.js +50 -0
  118. package/dist/serve/server.js.map +1 -0
  119. package/dist/tools/database/qdrant.cjs +174 -0
  120. package/dist/tools/database/qdrant.cjs.map +1 -0
  121. package/dist/tools/database/qdrant.d.cts +86 -0
  122. package/dist/tools/database/qdrant.d.ts +86 -0
  123. package/dist/tools/database/qdrant.js +171 -0
  124. package/dist/tools/database/qdrant.js.map +1 -0
  125. package/dist/version.cjs +1 -1
  126. package/dist/version.js +1 -1
  127. package/package.json +17 -6
  128. package/dist/agents/experimental/remote/agent.cjs.map +0 -1
  129. package/dist/agents/experimental/remote/agent.js.map +0 -1
@@ -0,0 +1,86 @@
1
+ import { BaseToolOptions, Tool, JSONToolOutput, ToolEmitter, ToolInput, BaseToolRunOptions } from '../base.cjs';
2
+ import { AnyToolSchemaLike } from '../../internals/helpers/schema.cjs';
3
+ import { QdrantClientParams, QdrantClient } from '@qdrant/js-client-rest';
4
+ import { z } from 'zod';
5
+ import 'ajv';
6
+ import '../../context.cjs';
7
+ import '../../emitter-D5Mu0EEH.cjs';
8
+ import '../../internals/types.cjs';
9
+ import '../../internals/helpers/guards.cjs';
10
+ import '../../internals/serializable.cjs';
11
+ import '../../internals/helpers/promise.cjs';
12
+ import '../../errors.cjs';
13
+ import 'promise-based-task';
14
+ import '../../cache/base.cjs';
15
+ import 'zod-to-json-schema';
16
+
17
+ /**
18
+ * Copyright 2025 © BeeAI a Series of LF Projects, LLC
19
+ *
20
+ * Licensed under the Apache License, Version 2.0 (the "License");
21
+ * you may not use this file except in compliance with the License.
22
+ * You may obtain a copy of the License at
23
+ *
24
+ * http://www.apache.org/licenses/LICENSE-2.0
25
+ *
26
+ * Unless required by applicable law or agreed to in writing, software
27
+ * distributed under the License is distributed on an "AS IS" BASIS,
28
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
29
+ * See the License for the specific language governing permissions and
30
+ * limitations under the License.
31
+ */
32
+
33
+ interface QdrantToolOptions extends BaseToolOptions, QdrantClientParams {
34
+ connection: QdrantClientParams;
35
+ }
36
+ type QdrantSearchToolResult = any;
37
+ declare enum QdrantAction {
38
+ ListCollections = "ListCollections",
39
+ GetCollectionInfo = "GetCollectionInfo",
40
+ Search = "Search",
41
+ Insert = "Insert",
42
+ Delete = "Delete"
43
+ }
44
+ declare class QdrantDatabaseTool extends Tool<JSONToolOutput<QdrantSearchToolResult>, QdrantToolOptions> {
45
+ name: string;
46
+ description: string;
47
+ inputSchema(): z.ZodObject<{
48
+ action: z.ZodNativeEnum<typeof QdrantAction>;
49
+ collectionName: z.ZodOptional<z.ZodString>;
50
+ vector: z.ZodOptional<z.ZodArray<z.ZodNumber, "many">>;
51
+ vectors: z.ZodOptional<z.ZodArray<z.ZodArray<z.ZodNumber, "many">, "many">>;
52
+ topK: z.ZodOptional<z.ZodDefault<z.ZodNumber>>;
53
+ filter: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
54
+ payload: z.ZodOptional<z.ZodArray<z.ZodRecord<z.ZodString, z.ZodAny>, "many">>;
55
+ ids: z.ZodOptional<z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodNumber]>, "many">>;
56
+ }, "strip", z.ZodTypeAny, {
57
+ action: QdrantAction;
58
+ filter?: Record<string, any> | undefined;
59
+ collectionName?: string | undefined;
60
+ vector?: number[] | undefined;
61
+ vectors?: number[][] | undefined;
62
+ topK?: number | undefined;
63
+ ids?: (string | number)[] | undefined;
64
+ payload?: Record<string, any>[] | undefined;
65
+ }, {
66
+ action: QdrantAction;
67
+ filter?: Record<string, any> | undefined;
68
+ collectionName?: string | undefined;
69
+ vector?: number[] | undefined;
70
+ vectors?: number[][] | undefined;
71
+ topK?: number | undefined;
72
+ ids?: (string | number)[] | undefined;
73
+ payload?: Record<string, any>[] | undefined;
74
+ }>;
75
+ readonly emitter: ToolEmitter<ToolInput<this>, JSONToolOutput<QdrantSearchToolResult>>;
76
+ protected validateInput(schema: AnyToolSchemaLike, input: unknown): asserts input is ToolInput<this>;
77
+ protected client(): Promise<QdrantClient>;
78
+ protected _run(input: ToolInput<this>, _options: Partial<BaseToolRunOptions>): Promise<JSONToolOutput<any>>;
79
+ protected listCollections(): Promise<string[]>;
80
+ protected getCollectionInfo(collectionName: string): Promise<any>;
81
+ protected insert(input: ToolInput<this>): Promise<any>;
82
+ protected search(input: ToolInput<this>): Promise<any>;
83
+ protected delete(input: ToolInput<this>): Promise<any>;
84
+ }
85
+
86
+ export { QdrantAction, QdrantDatabaseTool, type QdrantSearchToolResult, type QdrantToolOptions };
@@ -0,0 +1,86 @@
1
+ import { BaseToolOptions, Tool, JSONToolOutput, ToolEmitter, ToolInput, BaseToolRunOptions } from '../base.js';
2
+ import { AnyToolSchemaLike } from '../../internals/helpers/schema.js';
3
+ import { QdrantClientParams, QdrantClient } from '@qdrant/js-client-rest';
4
+ import { z } from 'zod';
5
+ import 'ajv';
6
+ import '../../context.js';
7
+ import '../../emitter-C3dO-s2P.js';
8
+ import '../../internals/types.js';
9
+ import '../../internals/helpers/guards.js';
10
+ import '../../internals/serializable.js';
11
+ import '../../internals/helpers/promise.js';
12
+ import '../../errors.js';
13
+ import 'promise-based-task';
14
+ import '../../cache/base.js';
15
+ import 'zod-to-json-schema';
16
+
17
+ /**
18
+ * Copyright 2025 © BeeAI a Series of LF Projects, LLC
19
+ *
20
+ * Licensed under the Apache License, Version 2.0 (the "License");
21
+ * you may not use this file except in compliance with the License.
22
+ * You may obtain a copy of the License at
23
+ *
24
+ * http://www.apache.org/licenses/LICENSE-2.0
25
+ *
26
+ * Unless required by applicable law or agreed to in writing, software
27
+ * distributed under the License is distributed on an "AS IS" BASIS,
28
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
29
+ * See the License for the specific language governing permissions and
30
+ * limitations under the License.
31
+ */
32
+
33
+ interface QdrantToolOptions extends BaseToolOptions, QdrantClientParams {
34
+ connection: QdrantClientParams;
35
+ }
36
+ type QdrantSearchToolResult = any;
37
+ declare enum QdrantAction {
38
+ ListCollections = "ListCollections",
39
+ GetCollectionInfo = "GetCollectionInfo",
40
+ Search = "Search",
41
+ Insert = "Insert",
42
+ Delete = "Delete"
43
+ }
44
+ declare class QdrantDatabaseTool extends Tool<JSONToolOutput<QdrantSearchToolResult>, QdrantToolOptions> {
45
+ name: string;
46
+ description: string;
47
+ inputSchema(): z.ZodObject<{
48
+ action: z.ZodNativeEnum<typeof QdrantAction>;
49
+ collectionName: z.ZodOptional<z.ZodString>;
50
+ vector: z.ZodOptional<z.ZodArray<z.ZodNumber, "many">>;
51
+ vectors: z.ZodOptional<z.ZodArray<z.ZodArray<z.ZodNumber, "many">, "many">>;
52
+ topK: z.ZodOptional<z.ZodDefault<z.ZodNumber>>;
53
+ filter: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
54
+ payload: z.ZodOptional<z.ZodArray<z.ZodRecord<z.ZodString, z.ZodAny>, "many">>;
55
+ ids: z.ZodOptional<z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodNumber]>, "many">>;
56
+ }, "strip", z.ZodTypeAny, {
57
+ action: QdrantAction;
58
+ filter?: Record<string, any> | undefined;
59
+ collectionName?: string | undefined;
60
+ vector?: number[] | undefined;
61
+ vectors?: number[][] | undefined;
62
+ topK?: number | undefined;
63
+ ids?: (string | number)[] | undefined;
64
+ payload?: Record<string, any>[] | undefined;
65
+ }, {
66
+ action: QdrantAction;
67
+ filter?: Record<string, any> | undefined;
68
+ collectionName?: string | undefined;
69
+ vector?: number[] | undefined;
70
+ vectors?: number[][] | undefined;
71
+ topK?: number | undefined;
72
+ ids?: (string | number)[] | undefined;
73
+ payload?: Record<string, any>[] | undefined;
74
+ }>;
75
+ readonly emitter: ToolEmitter<ToolInput<this>, JSONToolOutput<QdrantSearchToolResult>>;
76
+ protected validateInput(schema: AnyToolSchemaLike, input: unknown): asserts input is ToolInput<this>;
77
+ protected client(): Promise<QdrantClient>;
78
+ protected _run(input: ToolInput<this>, _options: Partial<BaseToolRunOptions>): Promise<JSONToolOutput<any>>;
79
+ protected listCollections(): Promise<string[]>;
80
+ protected getCollectionInfo(collectionName: string): Promise<any>;
81
+ protected insert(input: ToolInput<this>): Promise<any>;
82
+ protected search(input: ToolInput<this>): Promise<any>;
83
+ protected delete(input: ToolInput<this>): Promise<any>;
84
+ }
85
+
86
+ export { QdrantAction, QdrantDatabaseTool, type QdrantSearchToolResult, type QdrantToolOptions };
@@ -0,0 +1,171 @@
1
+ import { Tool, ToolInputValidationError, ToolError, JSONToolOutput } from '../base.js';
2
+ import { Cache } from '../../cache/decoratorCache.js';
3
+ import { QdrantClient } from '@qdrant/js-client-rest';
4
+ import { v4 } from 'uuid';
5
+ import { z } from 'zod';
6
+ import { Emitter } from '../../emitter/emitter.js';
7
+
8
+ var __defProp = Object.defineProperty;
9
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
10
+ function _ts_decorate(decorators, target, key, desc) {
11
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
12
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
13
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
14
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
15
+ }
16
+ __name(_ts_decorate, "_ts_decorate");
17
+ function _ts_metadata(k, v) {
18
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
19
+ }
20
+ __name(_ts_metadata, "_ts_metadata");
21
+ var QdrantAction = /* @__PURE__ */ function(QdrantAction2) {
22
+ QdrantAction2["ListCollections"] = "ListCollections";
23
+ QdrantAction2["GetCollectionInfo"] = "GetCollectionInfo";
24
+ QdrantAction2["Search"] = "Search";
25
+ QdrantAction2["Insert"] = "Insert";
26
+ QdrantAction2["Delete"] = "Delete";
27
+ return QdrantAction2;
28
+ }({});
29
+ class QdrantDatabaseTool extends Tool {
30
+ static {
31
+ __name(this, "QdrantDatabaseTool");
32
+ }
33
+ name = "QdrantDatabaseTool";
34
+ description = `Can query data from a Qdrant vector database. IMPORTANT: strictly follow this order of actions:
35
+ 1. ${"ListCollections"} - List all the Qdrant collections
36
+ 2. ${"GetCollectionInfo"} - Get information about a Qdrant collection
37
+ 3. ${"Insert"} - Insert data into a Qdrant collection
38
+ 3. ${"Search"} - Perform search on a Qdrant collection
39
+ 4. ${"Delete"} - Delete from a Qdrant collection`;
40
+ inputSchema() {
41
+ return z.object({
42
+ action: z.nativeEnum(QdrantAction).describe(`The action to perform. ${"ListCollections"} lists all collections, ${"GetCollectionInfo"} fetches details for a specified collection, ${"Search"} executes a vector search, ${"Insert"} inserts new vectors, and ${"Delete"} removes vectors.`),
43
+ collectionName: z.string().optional().describe(`The name of the collection to query, required for ${"GetCollectionInfo"}, ${"Search"}, ${"Insert"}, and ${"Delete"}`),
44
+ vector: z.array(z.number()).optional().describe(`The vector to search for, required for ${"Search"}.`),
45
+ vectors: z.array(z.array(z.number())).optional().describe(`The vectors to insert, required for ${"Insert"}.`),
46
+ topK: z.coerce.number().int().default(10).optional().describe(`The number of nearest neighbors to return.`),
47
+ filter: z.record(z.string(), z.any()).optional().describe(`Optional filter for ${"Search"}.`),
48
+ payload: z.array(z.record(z.string(), z.any())).optional().describe(`Additional payload to insert with vectors.`),
49
+ ids: z.array(z.string().or(z.number())).optional().describe(`Array of IDs to delete or insert.`)
50
+ });
51
+ }
52
+ emitter = Emitter.root.child({
53
+ namespace: [
54
+ "tool",
55
+ "database",
56
+ "qdrant"
57
+ ],
58
+ creator: this
59
+ });
60
+ validateInput(schema, input) {
61
+ super.validateInput(schema, input);
62
+ if (input.action != "ListCollections" && !input.collectionName) {
63
+ throw new ToolInputValidationError(`Collection name is required for ${"GetCollectionInfo"}, ${"Search"}, ${"Insert"}, and ${"Delete"} actions.`);
64
+ }
65
+ if (input.action === "Search" && (!input.collectionName || !input.vector)) {
66
+ throw new ToolInputValidationError(`Vector is required for ${"Search"} action.`);
67
+ }
68
+ if (input.action === "Insert" && (!input.collectionName || !input.vectors)) {
69
+ throw new ToolInputValidationError(`Vectors are required for ${"Insert"} action.`);
70
+ }
71
+ }
72
+ static {
73
+ this.register();
74
+ }
75
+ async client() {
76
+ return new QdrantClient(this.options.connection);
77
+ }
78
+ async _run(input, _options) {
79
+ switch (input.action) {
80
+ case "ListCollections": {
81
+ const collections = await this.listCollections();
82
+ return new JSONToolOutput(collections);
83
+ }
84
+ case "GetCollectionInfo": {
85
+ if (!input.collectionName) {
86
+ throw new ToolError("A collection name is required for Qdrant GetCollectionInfo action");
87
+ }
88
+ const collectionInfo = await this.getCollectionInfo(input.collectionName);
89
+ return new JSONToolOutput(collectionInfo);
90
+ }
91
+ case "Search": {
92
+ if (!input.collectionName || !input.vector) {
93
+ throw new ToolError("A collection name and vector are required for Qdrant Search action");
94
+ }
95
+ const searchResults = await this.search(input);
96
+ return new JSONToolOutput(searchResults);
97
+ }
98
+ case "Insert": {
99
+ if (!input.collectionName || !input.vectors) {
100
+ throw new ToolError("A collection name and vectors are required for Qdrant Insert action");
101
+ }
102
+ const insertResults = await this.insert(input);
103
+ return new JSONToolOutput(insertResults);
104
+ }
105
+ case "Delete": {
106
+ if (!input.collectionName || !input.ids) {
107
+ throw new ToolError("Collection name and ids are required for Qdrant Delete action");
108
+ }
109
+ const deleteResults = await this.delete(input);
110
+ return new JSONToolOutput(deleteResults);
111
+ }
112
+ default: {
113
+ throw new ToolError(`Invalid action specified: ${input.action}`);
114
+ }
115
+ }
116
+ }
117
+ async listCollections() {
118
+ try {
119
+ const client = await this.client();
120
+ const response = await client.getCollections();
121
+ return response.collections.map((collection) => collection.name);
122
+ } catch (error) {
123
+ throw new ToolError(`Failed to list collections from Qdrant: ${error}`);
124
+ }
125
+ }
126
+ async getCollectionInfo(collectionName) {
127
+ const client = await this.client();
128
+ const response = await client.getCollection(collectionName);
129
+ return response;
130
+ }
131
+ async insert(input) {
132
+ const client = await this.client();
133
+ const points = input.vectors.map((vector, index) => ({
134
+ id: input?.ids?.[index] ?? v4(),
135
+ vector,
136
+ payload: input?.payload?.[index] || {}
137
+ }));
138
+ const response = await client.upsert(input.collectionName, {
139
+ points
140
+ });
141
+ return response;
142
+ }
143
+ async search(input) {
144
+ const client = await this.client();
145
+ const searchParams = {
146
+ query: input.vector,
147
+ limit: input.topK || 10,
148
+ with_payload: true,
149
+ filter: input.filter
150
+ };
151
+ const response = await client.query(input.collectionName, searchParams);
152
+ return response;
153
+ }
154
+ async delete(input) {
155
+ const client = await this.client();
156
+ const response = await client.delete(input.collectionName, {
157
+ points: input.ids
158
+ });
159
+ return response;
160
+ }
161
+ }
162
+ _ts_decorate([
163
+ Cache(),
164
+ _ts_metadata("design:type", Function),
165
+ _ts_metadata("design:paramtypes", []),
166
+ _ts_metadata("design:returntype", Promise)
167
+ ], QdrantDatabaseTool.prototype, "client", null);
168
+
169
+ export { QdrantAction, QdrantDatabaseTool };
170
+ //# sourceMappingURL=qdrant.js.map
171
+ //# sourceMappingURL=qdrant.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["qdrant.ts"],"names":["QdrantAction","QdrantDatabaseTool","Tool","name","description","inputSchema","z","object","action","nativeEnum","describe","collectionName","string","optional","vector","array","number","vectors","topK","coerce","int","default","filter","record","any","payload","ids","or","emitter","Emitter","root","child","namespace","creator","validateInput","schema","input","ToolInputValidationError","register","client","QdrantClient","options","connection","_run","_options","collections","listCollections","JSONToolOutput","ToolError","collectionInfo","getCollectionInfo","searchResults","search","insertResults","insert","deleteResults","delete","response","getCollections","map","collection","error","getCollection","points","index","id","uuidv4","upsert","searchParams","query","limit","with_payload"],"mappings":"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","file":"qdrant.js","sourcesContent":["/**\n * Copyright 2025 © BeeAI a Series of LF Projects, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n Tool,\n ToolInput,\n ToolError,\n BaseToolOptions,\n BaseToolRunOptions,\n JSONToolOutput,\n ToolInputValidationError,\n ToolEmitter,\n} from \"@/tools/base.js\";\nimport { Cache } from \"@/cache/decoratorCache.js\";\nimport { AnyToolSchemaLike } from \"@/internals/helpers/schema.js\";\nimport { QdrantClient, QdrantClientParams } from \"@qdrant/js-client-rest\";\nimport { v4 as uuidv4 } from \"uuid\";\n\nimport { z } from \"zod\";\nimport { Emitter } from \"@/emitter/emitter.js\";\n\nexport interface QdrantToolOptions extends BaseToolOptions, QdrantClientParams {\n connection: QdrantClientParams;\n}\n\nexport type QdrantSearchToolResult = any;\n\nexport enum QdrantAction {\n ListCollections = \"ListCollections\",\n GetCollectionInfo = \"GetCollectionInfo\",\n Search = \"Search\",\n Insert = \"Insert\",\n Delete = \"Delete\",\n}\n\nexport class QdrantDatabaseTool extends Tool<\n JSONToolOutput<QdrantSearchToolResult>,\n QdrantToolOptions\n> {\n name = \"QdrantDatabaseTool\";\n\n description = `Can query data from a Qdrant vector database. IMPORTANT: strictly follow this order of actions:\n 1. ${QdrantAction.ListCollections} - List all the Qdrant collections\n 2. ${QdrantAction.GetCollectionInfo} - Get information about a Qdrant collection\n 3. ${QdrantAction.Insert} - Insert data into a Qdrant collection\n 3. ${QdrantAction.Search} - Perform search on a Qdrant collection\n 4. ${QdrantAction.Delete} - Delete from a Qdrant collection`;\n\n inputSchema() {\n return z.object({\n action: z\n .nativeEnum(QdrantAction)\n .describe(\n `The action to perform. ${QdrantAction.ListCollections} lists all collections, ${QdrantAction.GetCollectionInfo} fetches details for a specified collection, ${QdrantAction.Search} executes a vector search, ${QdrantAction.Insert} inserts new vectors, and ${QdrantAction.Delete} removes vectors.`,\n ),\n collectionName: z\n .string()\n .optional()\n .describe(\n `The name of the collection to query, required for ${QdrantAction.GetCollectionInfo}, ${QdrantAction.Search}, ${QdrantAction.Insert}, and ${QdrantAction.Delete}`,\n ),\n vector: z\n .array(z.number())\n .optional()\n .describe(`The vector to search for, required for ${QdrantAction.Search}.`),\n vectors: z\n .array(z.array(z.number()))\n .optional()\n .describe(`The vectors to insert, required for ${QdrantAction.Insert}.`),\n topK: z.coerce\n .number()\n .int()\n .default(10)\n .optional()\n .describe(`The number of nearest neighbors to return.`),\n filter: z\n .record(z.string(), z.any())\n .optional()\n .describe(`Optional filter for ${QdrantAction.Search}.`),\n payload: z\n .array(z.record(z.string(), z.any()))\n .optional()\n .describe(`Additional payload to insert with vectors.`),\n ids: z\n .array(z.string().or(z.number()))\n .optional()\n .describe(`Array of IDs to delete or insert.`),\n });\n }\n\n public readonly emitter: ToolEmitter<ToolInput<this>, JSONToolOutput<QdrantSearchToolResult>> =\n Emitter.root.child({\n namespace: [\"tool\", \"database\", \"qdrant\"],\n creator: this,\n });\n\n protected validateInput(\n schema: AnyToolSchemaLike,\n input: unknown,\n ): asserts input is ToolInput<this> {\n super.validateInput(schema, input);\n if (input.action != QdrantAction.ListCollections && !input.collectionName) {\n throw new ToolInputValidationError(\n `Collection name is required for ${QdrantAction.GetCollectionInfo}, ${QdrantAction.Search}, ${QdrantAction.Insert}, and ${QdrantAction.Delete} actions.`,\n );\n }\n if (input.action === QdrantAction.Search && (!input.collectionName || !input.vector)) {\n throw new ToolInputValidationError(`Vector is required for ${QdrantAction.Search} action.`);\n }\n if (input.action === QdrantAction.Insert && (!input.collectionName || !input.vectors)) {\n throw new ToolInputValidationError(`Vectors are required for ${QdrantAction.Insert} action.`);\n }\n }\n\n static {\n this.register();\n }\n\n @Cache()\n protected async client(): Promise<QdrantClient> {\n return new QdrantClient(this.options.connection);\n }\n\n protected async _run(\n input: ToolInput<this>,\n _options: Partial<BaseToolRunOptions>,\n ): Promise<JSONToolOutput<any>> {\n switch (input.action) {\n case QdrantAction.ListCollections: {\n const collections = await this.listCollections();\n return new JSONToolOutput(collections);\n }\n\n case QdrantAction.GetCollectionInfo: {\n if (!input.collectionName) {\n throw new ToolError(\"A collection name is required for Qdrant GetCollectionInfo action\");\n }\n const collectionInfo = await this.getCollectionInfo(input.collectionName);\n return new JSONToolOutput(collectionInfo);\n }\n\n case QdrantAction.Search: {\n if (!input.collectionName || !input.vector) {\n throw new ToolError(\"A collection name and vector are required for Qdrant Search action\");\n }\n const searchResults = await this.search(input);\n return new JSONToolOutput(searchResults);\n }\n\n case QdrantAction.Insert: {\n if (!input.collectionName || !input.vectors) {\n throw new ToolError(\n \"A collection name and vectors are required for Qdrant Insert action\",\n );\n }\n const insertResults = await this.insert(input);\n return new JSONToolOutput(insertResults);\n }\n\n case QdrantAction.Delete: {\n if (!input.collectionName || !input.ids) {\n throw new ToolError(\"Collection name and ids are required for Qdrant Delete action\");\n }\n const deleteResults = await this.delete(input);\n return new JSONToolOutput(deleteResults);\n }\n\n default: {\n throw new ToolError(`Invalid action specified: ${input.action}`);\n }\n }\n }\n\n protected async listCollections(): Promise<string[]> {\n try {\n const client = await this.client();\n const response = await client.getCollections();\n\n return response.collections.map((collection) => collection.name);\n } catch (error) {\n throw new ToolError(`Failed to list collections from Qdrant: ${error}`);\n }\n }\n\n protected async getCollectionInfo(collectionName: string): Promise<any> {\n const client = await this.client();\n const response = await client.getCollection(collectionName);\n return response;\n }\n\n protected async insert(input: ToolInput<this>): Promise<any> {\n const client = await this.client();\n\n const points = input.vectors!.map((vector, index) => ({\n id: input?.ids?.[index] ?? uuidv4(),\n vector: vector,\n payload: input?.payload?.[index] || {},\n }));\n\n const response = await client.upsert(input.collectionName as string, {\n points: points,\n });\n\n return response;\n }\n\n protected async search(input: ToolInput<this>): Promise<any> {\n const client = await this.client();\n\n const searchParams: any = {\n query: input.vector,\n limit: input.topK || 10,\n with_payload: true,\n filter: input.filter,\n };\n\n const response = await client.query(input.collectionName as string, searchParams);\n return response;\n }\n\n protected async delete(input: ToolInput<this>): Promise<any> {\n const client = await this.client();\n\n const response = await client.delete(input.collectionName as string, {\n points: input.ids!,\n });\n\n return response;\n }\n}\n"]}
package/dist/version.cjs CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  exports.Version = "0.0.0";
4
4
  try {
5
- exports.Version = "0.1.13";
5
+ exports.Version = "0.1.15";
6
6
  } catch {
7
7
  }
8
8
  //# sourceMappingURL=version.cjs.map
package/dist/version.js CHANGED
@@ -1,6 +1,6 @@
1
1
  let Version = "0.0.0";
2
2
  try {
3
- Version = "0.1.13";
3
+ Version = "0.1.15";
4
4
  } catch {
5
5
  }
6
6
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "beeai-framework",
3
- "version": "0.1.13",
3
+ "version": "0.1.15",
4
4
  "license": "Apache-2.0",
5
5
  "description": "BeeAI Framework - LLM Agent Framework",
6
6
  "author": "BeeAI a Series of LF Projects, LLC",
@@ -183,7 +183,7 @@
183
183
  "dependencies": {
184
184
  "@ai-zen/node-fetch-event-source": "^2.1.4",
185
185
  "@streamparser/json": "^0.0.22",
186
- "ai": "^4.3.8",
186
+ "ai": "^4.3.13",
187
187
  "ajv": "^8.17.1",
188
188
  "ajv-formats": "^3.0.1",
189
189
  "duck-duck-scrape": "^2.2.7",
@@ -213,14 +213,16 @@
213
213
  "@ai-sdk/azure": "^1.3.14",
214
214
  "@ai-sdk/google-vertex": "^2.2.15",
215
215
  "@ai-sdk/groq": "^1.2.8",
216
- "@ai-sdk/openai": "^1.3.13",
216
+ "@ai-sdk/openai": "^1.3.21",
217
217
  "@aws-sdk/client-bedrock-runtime": "^3.772.0",
218
218
  "@elastic/elasticsearch": "^8.0.0",
219
219
  "@googleapis/customsearch": "^3.2.0",
220
220
  "@langchain/community": ">=0.2.28",
221
221
  "@langchain/core": ">=0.2.27",
222
- "@modelcontextprotocol/sdk": "^1.0.4",
222
+ "@modelcontextprotocol/sdk": "^1.12.0",
223
+ "@qdrant/js-client-rest": "^1.14.0",
223
224
  "@zilliz/milvus2-sdk-node": "^2.4.9",
225
+ "express": "^5.0.0",
224
226
  "ollama-ai-provider": "^1.2.0",
225
227
  "sequelize": "^6.37.3",
226
228
  "yaml": "^2.6.1"
@@ -262,9 +264,15 @@
262
264
  "@modelcontextprotocol/sdk": {
263
265
  "optional": true
264
266
  },
267
+ "@qdrant/js-client-rest": {
268
+ "optional": true
269
+ },
265
270
  "@zilliz/milvus2-sdk-node": {
266
271
  "optional": true
267
272
  },
273
+ "express": {
274
+ "optional": true
275
+ },
268
276
  "ibm-cloud-sdk-core": {
269
277
  "optional": true
270
278
  },
@@ -293,7 +301,8 @@
293
301
  "@langchain/core": "0.3.42",
294
302
  "@langchain/langgraph": "0.2.55",
295
303
  "@langchain/ollama": "^0.2.0",
296
- "@modelcontextprotocol/sdk": "^1.0.4",
304
+ "@modelcontextprotocol/sdk": "^1.12.0",
305
+ "@qdrant/js-client-rest": "^1.14.0",
297
306
  "@release-it/conventional-changelog": "^8.0.2",
298
307
  "@rollup/plugin-commonjs": "^28.0.1",
299
308
  "@stylistic/eslint-plugin-js": "^2.12.1",
@@ -301,6 +310,7 @@
301
310
  "@types/eslint": "^9.6.1",
302
311
  "@types/eslint-config-prettier": "^6.11.3",
303
312
  "@types/eslint__js": "^8.42.3",
313
+ "@types/express": "^5.0.0",
304
314
  "@types/glob": "^8.1.0",
305
315
  "@types/js-yaml": "^4.0.9",
306
316
  "@types/mustache": "^4",
@@ -315,6 +325,7 @@
315
325
  "eslint": "^9.17.0",
316
326
  "eslint-config-prettier": "^9.1.0",
317
327
  "eslint-plugin-unused-imports": "^4.1.4",
328
+ "express": "^5.0.0",
318
329
  "glob": "^11.0.0",
319
330
  "ibm-cloud-sdk-core": "^5.3.2",
320
331
  "langchain": "0.3.19",
@@ -335,7 +346,7 @@
335
346
  "typescript": "^5.8.2",
336
347
  "typescript-eslint": "^8.26.1",
337
348
  "vite-tsconfig-paths": "^5.1.4",
338
- "vitest": "^2.1.8",
349
+ "vitest": "^2.1.9",
339
350
  "yaml": "^2.6.1"
340
351
  },
341
352
  "resolutions": {
@@ -1 +0,0 @@
1
- {"version":3,"sources":["agent.ts"],"names":["RemoteAgent","BaseAgent","emitter","client","constructor","input","Emitter","root","child","namespace","creator","RestfulClient","baseUrl","url","headers","paths","runs","agents","_run","_options","context","inputs","Array","isArray","map","convertToACPMessage","generator","stream","body","JSON","stringify","agent_name","agentName","mode","signal","eventData","event","parse","data","emit","key","type","value","undefined","message","AgentError","run","error","text","output","reduce","acc","parts","acc2","part","content","assistantMessage","AssistantMessage","inputMessages","convertToMessage","memory","addMany","add","result","checkAgentExists","response","fetch","find","agent","name","isFatal","createSnapshot","shallowCopy","role","Message","UserMessage"],"mappings":"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","file":"agent.cjs","sourcesContent":["/**\n * Copyright 2025 © BeeAI a Series of LF Projects, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Callback } from \"@/emitter/types.js\";\nimport { Emitter } from \"@/emitter/emitter.js\";\nimport { AgentError, BaseAgent, BaseAgentRunOptions } from \"@/agents/base.js\";\nimport { GetRunContext } from \"@/context.js\";\nimport { AssistantMessage, Message, UserMessage } from \"@/backend/message.js\";\nimport { BaseMemory } from \"@/memory/base.js\";\nimport { shallowCopy } from \"@/serializer/utils.js\";\nimport { RestfulClient } from \"@/internals/fetcher.js\";\n\nexport interface RemoteAgentRunInput {\n input: Message | string | Message[] | string[];\n}\n\nexport interface RemoteAgentRunOutput {\n result: Message;\n event: Record<string, any>;\n}\n\nexport interface RemoteAgentEvents {\n update: Callback<{ key: string; value: any }>;\n error: Callback<{ message: string }>;\n}\n\ninterface Input {\n url: string;\n agentName: string;\n memory: BaseMemory;\n}\n\nexport class RemoteAgent extends BaseAgent<RemoteAgentRunInput, RemoteAgentRunOutput> {\n public emitter = Emitter.root.child<RemoteAgentEvents>({\n namespace: [\"agent\", \"remote\"],\n creator: this,\n });\n protected client: RestfulClient<{ runs: string; agents: string }>;\n\n constructor(protected readonly input: Input) {\n super();\n this.client = new RestfulClient({\n baseUrl: this.input.url,\n headers: async () => ({\n \"Accept\": \"application/json\",\n \"Content-Type\": \"application/json\",\n }),\n paths: { runs: `/runs`, agents: `/agents` },\n });\n }\n\n protected async _run(\n input: RemoteAgentRunInput,\n _options: BaseAgentRunOptions,\n context: GetRunContext<this>,\n ): Promise<RemoteAgentRunOutput> {\n const inputs = Array.isArray(input.input)\n ? input.input.map(this.convertToACPMessage)\n : [this.convertToACPMessage(input.input)];\n\n const generator = this.client.stream(\"runs\", {\n body: JSON.stringify({\n agent_name: this.input.agentName,\n input: inputs,\n mode: \"stream\",\n }),\n signal: context.signal,\n });\n\n let eventData: any = null;\n for await (const event of generator) {\n try {\n eventData = JSON.parse(event.data);\n await context.emitter.emit(\"update\", {\n key: eventData.type,\n value: { ...eventData, type: undefined },\n });\n } catch {\n await context.emitter.emit(\"error\", {\n message: \"Error parsing JSON\",\n });\n }\n }\n\n if (!eventData) {\n throw new AgentError(\"No event received from agent.\");\n }\n\n if (eventData.type === \"run.failed\") {\n const message =\n eventData.run?.error?.message || \"Something went wrong with the agent communication.\";\n await context.emitter.emit(\"error\", { message });\n throw new AgentError(message);\n } else if (eventData.type === \"run.completed\") {\n const text = eventData.run.output.reduce(\n (acc: string, output: any) =>\n acc + output.parts.reduce((acc2: string, part: any) => acc2 + part.content, \"\"),\n \"\",\n );\n const assistantMessage: Message = new AssistantMessage(text, { event: eventData });\n const inputMessages = Array.isArray(input.input)\n ? input.input.map(this.convertToMessage)\n : [this.convertToMessage(input.input)];\n\n await this.memory.addMany(inputMessages);\n await this.memory.add(assistantMessage);\n\n return { result: assistantMessage, event: eventData };\n } else {\n return { result: new AssistantMessage(\"No response from agent.\"), event: eventData };\n }\n }\n\n async checkAgentExists() {\n try {\n const response = await this.client.fetch(\"agents\");\n return !!response.agents.find((agent: any) => agent.name === this.input.agentName);\n } catch (error) {\n throw new AgentError(`Error while checking agent existence: ${error.message}`, [], {\n isFatal: true,\n });\n }\n }\n\n get memory() {\n return this.input.memory;\n }\n\n set memory(memory: BaseMemory) {\n this.input.memory = memory;\n }\n\n createSnapshot() {\n return {\n ...super.createSnapshot(),\n input: shallowCopy(this.input),\n emitter: this.emitter,\n };\n }\n\n protected convertToACPMessage(input: string | Message): any {\n if (typeof input === \"string\") {\n return { parts: [{ content: input, role: \"user\" }] };\n } else if (input instanceof Message) {\n return { parts: [{ content: input.content, role: input.role }] };\n } else {\n throw new AgentError(\"Unsupported input type\");\n }\n }\n\n protected convertToMessage(input: string | Message): any {\n if (typeof input === \"string\") {\n return new UserMessage(input);\n } else if (input instanceof Message) {\n return input;\n } else {\n throw new AgentError(\"Unsupported input type\");\n }\n }\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["agent.ts"],"names":["RemoteAgent","BaseAgent","emitter","client","constructor","input","Emitter","root","child","namespace","creator","RestfulClient","baseUrl","url","headers","paths","runs","agents","_run","_options","context","inputs","Array","isArray","map","convertToACPMessage","generator","stream","body","JSON","stringify","agent_name","agentName","mode","signal","eventData","event","parse","data","emit","key","type","value","undefined","message","AgentError","run","error","text","output","reduce","acc","parts","acc2","part","content","assistantMessage","AssistantMessage","inputMessages","convertToMessage","memory","addMany","add","result","checkAgentExists","response","fetch","find","agent","name","isFatal","createSnapshot","shallowCopy","role","Message","UserMessage"],"mappings":"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","file":"agent.js","sourcesContent":["/**\n * Copyright 2025 © BeeAI a Series of LF Projects, LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Callback } from \"@/emitter/types.js\";\nimport { Emitter } from \"@/emitter/emitter.js\";\nimport { AgentError, BaseAgent, BaseAgentRunOptions } from \"@/agents/base.js\";\nimport { GetRunContext } from \"@/context.js\";\nimport { AssistantMessage, Message, UserMessage } from \"@/backend/message.js\";\nimport { BaseMemory } from \"@/memory/base.js\";\nimport { shallowCopy } from \"@/serializer/utils.js\";\nimport { RestfulClient } from \"@/internals/fetcher.js\";\n\nexport interface RemoteAgentRunInput {\n input: Message | string | Message[] | string[];\n}\n\nexport interface RemoteAgentRunOutput {\n result: Message;\n event: Record<string, any>;\n}\n\nexport interface RemoteAgentEvents {\n update: Callback<{ key: string; value: any }>;\n error: Callback<{ message: string }>;\n}\n\ninterface Input {\n url: string;\n agentName: string;\n memory: BaseMemory;\n}\n\nexport class RemoteAgent extends BaseAgent<RemoteAgentRunInput, RemoteAgentRunOutput> {\n public emitter = Emitter.root.child<RemoteAgentEvents>({\n namespace: [\"agent\", \"remote\"],\n creator: this,\n });\n protected client: RestfulClient<{ runs: string; agents: string }>;\n\n constructor(protected readonly input: Input) {\n super();\n this.client = new RestfulClient({\n baseUrl: this.input.url,\n headers: async () => ({\n \"Accept\": \"application/json\",\n \"Content-Type\": \"application/json\",\n }),\n paths: { runs: `/runs`, agents: `/agents` },\n });\n }\n\n protected async _run(\n input: RemoteAgentRunInput,\n _options: BaseAgentRunOptions,\n context: GetRunContext<this>,\n ): Promise<RemoteAgentRunOutput> {\n const inputs = Array.isArray(input.input)\n ? input.input.map(this.convertToACPMessage)\n : [this.convertToACPMessage(input.input)];\n\n const generator = this.client.stream(\"runs\", {\n body: JSON.stringify({\n agent_name: this.input.agentName,\n input: inputs,\n mode: \"stream\",\n }),\n signal: context.signal,\n });\n\n let eventData: any = null;\n for await (const event of generator) {\n try {\n eventData = JSON.parse(event.data);\n await context.emitter.emit(\"update\", {\n key: eventData.type,\n value: { ...eventData, type: undefined },\n });\n } catch {\n await context.emitter.emit(\"error\", {\n message: \"Error parsing JSON\",\n });\n }\n }\n\n if (!eventData) {\n throw new AgentError(\"No event received from agent.\");\n }\n\n if (eventData.type === \"run.failed\") {\n const message =\n eventData.run?.error?.message || \"Something went wrong with the agent communication.\";\n await context.emitter.emit(\"error\", { message });\n throw new AgentError(message);\n } else if (eventData.type === \"run.completed\") {\n const text = eventData.run.output.reduce(\n (acc: string, output: any) =>\n acc + output.parts.reduce((acc2: string, part: any) => acc2 + part.content, \"\"),\n \"\",\n );\n const assistantMessage: Message = new AssistantMessage(text, { event: eventData });\n const inputMessages = Array.isArray(input.input)\n ? input.input.map(this.convertToMessage)\n : [this.convertToMessage(input.input)];\n\n await this.memory.addMany(inputMessages);\n await this.memory.add(assistantMessage);\n\n return { result: assistantMessage, event: eventData };\n } else {\n return { result: new AssistantMessage(\"No response from agent.\"), event: eventData };\n }\n }\n\n async checkAgentExists() {\n try {\n const response = await this.client.fetch(\"agents\");\n return !!response.agents.find((agent: any) => agent.name === this.input.agentName);\n } catch (error) {\n throw new AgentError(`Error while checking agent existence: ${error.message}`, [], {\n isFatal: true,\n });\n }\n }\n\n get memory() {\n return this.input.memory;\n }\n\n set memory(memory: BaseMemory) {\n this.input.memory = memory;\n }\n\n createSnapshot() {\n return {\n ...super.createSnapshot(),\n input: shallowCopy(this.input),\n emitter: this.emitter,\n };\n }\n\n protected convertToACPMessage(input: string | Message): any {\n if (typeof input === \"string\") {\n return { parts: [{ content: input, role: \"user\" }] };\n } else if (input instanceof Message) {\n return { parts: [{ content: input.content, role: input.role }] };\n } else {\n throw new AgentError(\"Unsupported input type\");\n }\n }\n\n protected convertToMessage(input: string | Message): any {\n if (typeof input === \"string\") {\n return new UserMessage(input);\n } else if (input instanceof Message) {\n return input;\n } else {\n throw new AgentError(\"Unsupported input type\");\n }\n }\n}\n"]}