@copilotkit/runtime 1.50.0-beta.8 → 1.50.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +168 -0
- package/dist/chunk-27JKTS6P.mjs +1704 -0
- package/dist/chunk-27JKTS6P.mjs.map +1 -0
- package/dist/chunk-2GPTVDTO.mjs +25 -0
- package/dist/chunk-2GPTVDTO.mjs.map +1 -0
- package/dist/chunk-2OZAGFV3.mjs +43 -0
- package/dist/chunk-2OZAGFV3.mjs.map +1 -0
- package/dist/chunk-3AJVKDZX.mjs +3097 -0
- package/dist/chunk-3AJVKDZX.mjs.map +1 -0
- package/dist/chunk-45RCC3ZS.mjs +25 -0
- package/dist/chunk-45RCC3ZS.mjs.map +1 -0
- package/dist/chunk-4EHJ4XFJ.mjs +25 -0
- package/dist/chunk-4EHJ4XFJ.mjs.map +1 -0
- package/dist/chunk-4IANB4TC.mjs +25 -0
- package/dist/chunk-4IANB4TC.mjs.map +1 -0
- package/dist/chunk-4KES76K3.mjs +74 -0
- package/dist/chunk-4KES76K3.mjs.map +1 -0
- package/dist/chunk-4OGE3SLW.mjs +3100 -0
- package/dist/chunk-4OGE3SLW.mjs.map +1 -0
- package/dist/chunk-54YJBMCP.mjs +3097 -0
- package/dist/chunk-54YJBMCP.mjs.map +1 -0
- package/dist/chunk-62NE5S6M.mjs +226 -0
- package/dist/chunk-62NE5S6M.mjs.map +1 -0
- package/dist/chunk-6ER4SZYH.mjs +74 -0
- package/dist/chunk-6ER4SZYH.mjs.map +1 -0
- package/dist/chunk-6TNSLHVR.mjs +74 -0
- package/dist/chunk-6TNSLHVR.mjs.map +1 -0
- package/dist/chunk-6XRUR5UK.mjs +1 -0
- package/dist/chunk-6XRUR5UK.mjs.map +1 -0
- package/dist/chunk-7V4BK7TZ.mjs +25 -0
- package/dist/chunk-7V4BK7TZ.mjs.map +1 -0
- package/dist/chunk-7YZIEXD2.mjs +74 -0
- package/dist/chunk-7YZIEXD2.mjs.map +1 -0
- package/dist/chunk-A4XHOAFU.mjs +25 -0
- package/dist/chunk-A4XHOAFU.mjs.map +1 -0
- package/dist/chunk-A555KEAD.mjs +6020 -0
- package/dist/chunk-A555KEAD.mjs.map +1 -0
- package/dist/chunk-AF73TFTX.mjs +74 -0
- package/dist/chunk-AF73TFTX.mjs.map +1 -0
- package/dist/chunk-AMUJQ6IR.mjs +50 -0
- package/dist/chunk-AMUJQ6IR.mjs.map +1 -0
- package/dist/chunk-AQG2SVCA.mjs +25 -0
- package/dist/chunk-AQG2SVCA.mjs.map +1 -0
- package/dist/chunk-BJZHMXND.mjs +74 -0
- package/dist/chunk-BJZHMXND.mjs.map +1 -0
- package/dist/chunk-CB2OJXF6.mjs +25 -0
- package/dist/chunk-CB2OJXF6.mjs.map +1 -0
- package/dist/chunk-CEOMFPJU.mjs +6020 -0
- package/dist/chunk-CEOMFPJU.mjs.map +1 -0
- package/dist/chunk-CZVLR7CC.mjs +175 -0
- package/dist/chunk-CZVLR7CC.mjs.map +1 -0
- package/dist/chunk-DCEEHMLJ.mjs +1127 -0
- package/dist/chunk-DCEEHMLJ.mjs.map +1 -0
- package/dist/chunk-DE3CLKUG.mjs +25 -0
- package/dist/chunk-DE3CLKUG.mjs.map +1 -0
- package/dist/chunk-DTPRUTNV.mjs +25 -0
- package/dist/chunk-DTPRUTNV.mjs.map +1 -0
- package/dist/chunk-ERUOA47O.mjs +626 -0
- package/dist/chunk-ERUOA47O.mjs.map +1 -0
- package/dist/chunk-ESSRC64W.mjs +74 -0
- package/dist/chunk-ESSRC64W.mjs.map +1 -0
- package/dist/chunk-FHD4JECV.mjs +33 -0
- package/dist/chunk-FHD4JECV.mjs.map +1 -0
- package/dist/chunk-GRAN6K6N.mjs +25 -0
- package/dist/chunk-GRAN6K6N.mjs.map +1 -0
- package/dist/chunk-I27F2UPA.mjs +175 -0
- package/dist/chunk-I27F2UPA.mjs.map +1 -0
- package/dist/chunk-IAZKTOQW.mjs +25 -0
- package/dist/chunk-IAZKTOQW.mjs.map +1 -0
- package/dist/chunk-J6XZ5MFB.mjs +25 -0
- package/dist/chunk-J6XZ5MFB.mjs.map +1 -0
- package/dist/chunk-JJ32MA4C.mjs +73 -0
- package/dist/chunk-JJ32MA4C.mjs.map +1 -0
- package/dist/chunk-JJY4ZTHQ.mjs +25 -0
- package/dist/chunk-JJY4ZTHQ.mjs.map +1 -0
- package/dist/chunk-KEYLBFU2.mjs +3117 -0
- package/dist/chunk-KEYLBFU2.mjs.map +1 -0
- package/dist/chunk-KQ53L4WZ.mjs +3094 -0
- package/dist/chunk-KQ53L4WZ.mjs.map +1 -0
- package/dist/chunk-KTELVQ67.mjs +3098 -0
- package/dist/chunk-KTELVQ67.mjs.map +1 -0
- package/dist/chunk-LPEPX6NH.mjs +25 -0
- package/dist/chunk-LPEPX6NH.mjs.map +1 -0
- package/dist/chunk-MDXE55DK.mjs +3117 -0
- package/dist/chunk-MDXE55DK.mjs.map +1 -0
- package/dist/chunk-MMFUVOXH.mjs +73 -0
- package/dist/chunk-MMFUVOXH.mjs.map +1 -0
- package/dist/chunk-N3Y4U66N.mjs +253 -0
- package/dist/chunk-N3Y4U66N.mjs.map +1 -0
- package/dist/chunk-O7UYB4MH.mjs +25 -0
- package/dist/chunk-O7UYB4MH.mjs.map +1 -0
- package/dist/chunk-OFNVQHNM.mjs +3089 -0
- package/dist/chunk-OFNVQHNM.mjs.map +1 -0
- package/dist/chunk-OFSV5GET.mjs +3074 -0
- package/dist/chunk-OFSV5GET.mjs.map +1 -0
- package/dist/chunk-OMRST67R.mjs +25 -0
- package/dist/chunk-OMRST67R.mjs.map +1 -0
- package/dist/chunk-OWIGJONH.mjs +275 -0
- package/dist/chunk-OWIGJONH.mjs.map +1 -0
- package/dist/chunk-PRZHE74A.mjs +25 -0
- package/dist/chunk-PRZHE74A.mjs.map +1 -0
- package/dist/chunk-PTYRVXXP.mjs +80 -0
- package/dist/chunk-PTYRVXXP.mjs.map +1 -0
- package/dist/chunk-R22B5CCO.mjs +25 -0
- package/dist/chunk-R22B5CCO.mjs.map +1 -0
- package/dist/chunk-SHBDMA63.mjs +141 -0
- package/dist/chunk-SHBDMA63.mjs.map +1 -0
- package/dist/chunk-SPVXBPRA.mjs +74 -0
- package/dist/chunk-SPVXBPRA.mjs.map +1 -0
- package/dist/chunk-T72G46ME.mjs +25 -0
- package/dist/chunk-T72G46ME.mjs.map +1 -0
- package/dist/chunk-TGELROPU.mjs +25 -0
- package/dist/chunk-TGELROPU.mjs.map +1 -0
- package/dist/chunk-UNX4IAAD.mjs +25 -0
- package/dist/chunk-UNX4IAAD.mjs.map +1 -0
- package/dist/chunk-V4DHVC7M.mjs +3085 -0
- package/dist/chunk-V4DHVC7M.mjs.map +1 -0
- package/dist/chunk-VVRFOB66.mjs +25 -0
- package/dist/chunk-VVRFOB66.mjs.map +1 -0
- package/dist/chunk-W6NVBYM6.mjs +80 -0
- package/dist/chunk-W6NVBYM6.mjs.map +1 -0
- package/dist/chunk-W7MBACGC.mjs +74 -0
- package/dist/chunk-W7MBACGC.mjs.map +1 -0
- package/dist/chunk-WMD4XZZS.mjs +25 -0
- package/dist/chunk-WMD4XZZS.mjs.map +1 -0
- package/dist/chunk-WX2ZNCRT.mjs +74 -0
- package/dist/chunk-WX2ZNCRT.mjs.map +1 -0
- package/dist/chunk-XWBDEXDA.mjs +153 -0
- package/dist/chunk-XWBDEXDA.mjs.map +1 -0
- package/dist/chunk-Y2Z62E2T.mjs +74 -0
- package/dist/chunk-Y2Z62E2T.mjs.map +1 -0
- package/dist/chunk-YO4I6RVI.mjs +25 -0
- package/dist/chunk-YO4I6RVI.mjs.map +1 -0
- package/dist/chunk-Z6Q5IW6I.mjs +3098 -0
- package/dist/chunk-Z6Q5IW6I.mjs.map +1 -0
- package/dist/chunk-Z726O3G2.mjs +25 -0
- package/dist/chunk-Z726O3G2.mjs.map +1 -0
- package/dist/chunk-ZE4SMZZR.mjs +3097 -0
- package/dist/chunk-ZE4SMZZR.mjs.map +1 -0
- package/dist/chunk-ZULZB33C.mjs +73 -0
- package/dist/chunk-ZULZB33C.mjs.map +1 -0
- package/dist/chunk-ZVRGXMY7.mjs +25 -0
- package/dist/chunk-ZVRGXMY7.mjs.map +1 -0
- package/dist/chunk-ZZ35WBYQ.mjs +25 -0
- package/dist/chunk-ZZ35WBYQ.mjs.map +1 -0
- package/dist/graphql/message-conversion/index.d.ts +18 -0
- package/dist/graphql/message-conversion/index.js +725 -0
- package/dist/graphql/message-conversion/index.js.map +1 -0
- package/dist/graphql/message-conversion/index.mjs +245 -0
- package/dist/graphql/message-conversion/index.mjs.map +1 -0
- package/dist/graphql/types/base/index.d.ts +6 -0
- package/dist/graphql/types/base/index.js +63 -0
- package/dist/graphql/types/base/index.js.map +1 -0
- package/dist/graphql/types/base/index.mjs +8 -0
- package/dist/graphql/types/base/index.mjs.map +1 -0
- package/dist/graphql/types/converted/index.d.ts +2 -0
- package/dist/graphql/types/converted/index.js +200 -0
- package/dist/graphql/types/converted/index.js.map +1 -0
- package/dist/graphql/types/converted/index.mjs +19 -0
- package/dist/graphql/types/converted/index.mjs.map +1 -0
- package/dist/groq-adapter-540da9c3.d.ts +331 -0
- package/dist/groq-adapter-a6f5e9d2.d.ts +331 -0
- package/dist/groq-adapter-c8aec5c5.d.ts +321 -0
- package/dist/index-96b330da.d.ts +119 -0
- package/dist/index-adbd78f1.d.ts +154 -0
- package/dist/index.d.ts +67 -8
- package/dist/index.js +118 -28
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +120 -31
- package/dist/index.mjs.map +1 -1
- package/dist/langserve-0c6100e3.d.ts +257 -0
- package/dist/langserve-978d5790.d.ts +243 -0
- package/dist/langserve-9fc76ce5.d.ts +243 -0
- package/dist/lib/cloud/index.d.ts +6 -0
- package/dist/lib/cloud/index.js +18 -0
- package/dist/lib/cloud/index.js.map +1 -0
- package/dist/lib/cloud/index.mjs +1 -0
- package/dist/lib/cloud/index.mjs.map +1 -0
- package/dist/lib/index.d.ts +212 -0
- package/dist/lib/index.js +7843 -0
- package/dist/lib/index.js.map +1 -0
- package/dist/lib/index.mjs +76 -0
- package/dist/lib/index.mjs.map +1 -0
- package/dist/lib/integrations/index.d.ts +34 -0
- package/dist/lib/integrations/index.js +3052 -0
- package/dist/lib/integrations/index.js.map +1 -0
- package/dist/lib/integrations/index.mjs +37 -0
- package/dist/lib/integrations/index.mjs.map +1 -0
- package/dist/lib/integrations/nest/index.d.ts +15 -0
- package/dist/lib/integrations/nest/index.js +2959 -0
- package/dist/lib/integrations/nest/index.js.map +1 -0
- package/dist/lib/integrations/nest/index.mjs +14 -0
- package/dist/lib/integrations/nest/index.mjs.map +1 -0
- package/dist/lib/integrations/node-express/index.d.ts +15 -0
- package/dist/lib/integrations/node-express/index.js +2959 -0
- package/dist/lib/integrations/node-express/index.js.map +1 -0
- package/dist/lib/integrations/node-express/index.mjs +14 -0
- package/dist/lib/integrations/node-express/index.mjs.map +1 -0
- package/dist/lib/integrations/node-http/index.d.ts +15 -0
- package/dist/lib/integrations/node-http/index.js +2945 -0
- package/dist/lib/integrations/node-http/index.js.map +1 -0
- package/dist/lib/integrations/node-http/index.mjs +13 -0
- package/dist/lib/integrations/node-http/index.mjs.map +1 -0
- package/dist/service-adapters/index.d.ts +162 -0
- package/dist/service-adapters/index.js +1787 -0
- package/dist/service-adapters/index.js.map +1 -0
- package/dist/service-adapters/index.mjs +34 -0
- package/dist/service-adapters/index.mjs.map +1 -0
- package/dist/service-adapters/shared/index.d.ts +9 -0
- package/dist/service-adapters/shared/index.js +72 -0
- package/dist/service-adapters/shared/index.js.map +1 -0
- package/dist/service-adapters/shared/index.mjs +8 -0
- package/dist/service-adapters/shared/index.mjs.map +1 -0
- package/dist/shared-0a7346ce.d.ts +466 -0
- package/dist/shared-35c6eb04.d.ts +448 -0
- package/dist/shared-9ed1dc31.d.ts +414 -0
- package/dist/shared-da5708fe.d.ts +449 -0
- package/dist/utils/index.d.ts +65 -0
- package/dist/utils/index.js +175 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/index.mjs +12 -0
- package/dist/utils/index.mjs.map +1 -0
- package/package.json +14 -20
- package/src/lib/index.ts +7 -6
- package/src/lib/runtime/copilot-runtime.ts +62 -26
- package/src/lib/runtime/telemetry-agent-runner.ts +139 -0
|
@@ -0,0 +1,626 @@
|
|
|
1
|
+
import {
|
|
2
|
+
LangChainAdapter
|
|
3
|
+
} from "./chunk-DCEEHMLJ.mjs";
|
|
4
|
+
import {
|
|
5
|
+
convertServiceAdapterError
|
|
6
|
+
} from "./chunk-AMUJQ6IR.mjs";
|
|
7
|
+
import {
|
|
8
|
+
__name
|
|
9
|
+
} from "./chunk-FHD4JECV.mjs";
|
|
10
|
+
|
|
11
|
+
// src/service-adapters/langchain/langserve.ts
|
|
12
|
+
import { RemoteRunnable } from "langchain/runnables/remote";
|
|
13
|
+
var RemoteChain = class {
|
|
14
|
+
name;
|
|
15
|
+
description;
|
|
16
|
+
chainUrl;
|
|
17
|
+
parameters;
|
|
18
|
+
parameterType;
|
|
19
|
+
constructor(options) {
|
|
20
|
+
this.name = options.name;
|
|
21
|
+
this.description = options.description;
|
|
22
|
+
this.chainUrl = options.chainUrl;
|
|
23
|
+
this.parameters = options.parameters;
|
|
24
|
+
this.parameterType = options.parameterType || "multi";
|
|
25
|
+
}
|
|
26
|
+
async toAction() {
|
|
27
|
+
if (!this.parameters) {
|
|
28
|
+
await this.inferLangServeParameters();
|
|
29
|
+
}
|
|
30
|
+
return {
|
|
31
|
+
name: this.name,
|
|
32
|
+
description: this.description,
|
|
33
|
+
parameters: this.parameters,
|
|
34
|
+
handler: async (args) => {
|
|
35
|
+
const runnable = new RemoteRunnable({
|
|
36
|
+
url: this.chainUrl
|
|
37
|
+
});
|
|
38
|
+
let input;
|
|
39
|
+
if (this.parameterType === "single") {
|
|
40
|
+
input = args[Object.keys(args)[0]];
|
|
41
|
+
} else {
|
|
42
|
+
input = args;
|
|
43
|
+
}
|
|
44
|
+
return await runnable.invoke(input);
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
async inferLangServeParameters() {
|
|
49
|
+
const supportedTypes = [
|
|
50
|
+
"string",
|
|
51
|
+
"number",
|
|
52
|
+
"boolean"
|
|
53
|
+
];
|
|
54
|
+
let schemaUrl = this.chainUrl.replace(/\/+$/, "") + "/input_schema";
|
|
55
|
+
let schema = await fetch(schemaUrl).then((res) => res.json()).catch(() => {
|
|
56
|
+
throw new Error("Failed to fetch langserve schema at " + schemaUrl);
|
|
57
|
+
});
|
|
58
|
+
if (supportedTypes.includes(schema.type)) {
|
|
59
|
+
this.parameterType = "single";
|
|
60
|
+
this.parameters = [
|
|
61
|
+
{
|
|
62
|
+
name: "input",
|
|
63
|
+
type: schema.type,
|
|
64
|
+
description: "The input to the chain"
|
|
65
|
+
}
|
|
66
|
+
];
|
|
67
|
+
} else if (schema.type === "object") {
|
|
68
|
+
this.parameterType = "multi";
|
|
69
|
+
this.parameters = Object.keys(schema.properties).map((key) => {
|
|
70
|
+
var _a;
|
|
71
|
+
let property = schema.properties[key];
|
|
72
|
+
if (!supportedTypes.includes(property.type)) {
|
|
73
|
+
throw new Error("Unsupported schema type");
|
|
74
|
+
}
|
|
75
|
+
return {
|
|
76
|
+
name: key,
|
|
77
|
+
type: property.type,
|
|
78
|
+
description: property.description || "",
|
|
79
|
+
required: ((_a = schema.required) == null ? void 0 : _a.includes(key)) || false
|
|
80
|
+
};
|
|
81
|
+
});
|
|
82
|
+
} else {
|
|
83
|
+
throw new Error("Unsupported schema type");
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
__name(RemoteChain, "RemoteChain");
|
|
88
|
+
|
|
89
|
+
// src/service-adapters/anthropic/anthropic-adapter.ts
|
|
90
|
+
import Anthropic from "@anthropic-ai/sdk";
|
|
91
|
+
|
|
92
|
+
// src/service-adapters/anthropic/utils.ts
|
|
93
|
+
function limitMessagesToTokenCount(messages, tools, model, maxTokens) {
|
|
94
|
+
maxTokens || (maxTokens = MAX_TOKENS);
|
|
95
|
+
const result = [];
|
|
96
|
+
const toolsNumTokens = countToolsTokens(model, tools);
|
|
97
|
+
if (toolsNumTokens > maxTokens) {
|
|
98
|
+
throw new Error(`Too many tokens in function definitions: ${toolsNumTokens} > ${maxTokens}`);
|
|
99
|
+
}
|
|
100
|
+
maxTokens -= toolsNumTokens;
|
|
101
|
+
for (const message of messages) {
|
|
102
|
+
if (message.role === "system") {
|
|
103
|
+
const numTokens = countMessageTokens(model, message);
|
|
104
|
+
maxTokens -= numTokens;
|
|
105
|
+
if (maxTokens < 0) {
|
|
106
|
+
throw new Error("Not enough tokens for system message.");
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
let cutoff = false;
|
|
111
|
+
const reversedMessages = [
|
|
112
|
+
...messages
|
|
113
|
+
].reverse();
|
|
114
|
+
for (const message of reversedMessages) {
|
|
115
|
+
if (message.role === "system") {
|
|
116
|
+
result.unshift(message);
|
|
117
|
+
continue;
|
|
118
|
+
} else if (cutoff) {
|
|
119
|
+
continue;
|
|
120
|
+
}
|
|
121
|
+
let numTokens = countMessageTokens(model, message);
|
|
122
|
+
if (maxTokens < numTokens) {
|
|
123
|
+
cutoff = true;
|
|
124
|
+
continue;
|
|
125
|
+
}
|
|
126
|
+
result.unshift(message);
|
|
127
|
+
maxTokens -= numTokens;
|
|
128
|
+
}
|
|
129
|
+
return result;
|
|
130
|
+
}
|
|
131
|
+
__name(limitMessagesToTokenCount, "limitMessagesToTokenCount");
|
|
132
|
+
var MAX_TOKENS = 128e3;
|
|
133
|
+
function countToolsTokens(model, tools) {
|
|
134
|
+
if (tools.length === 0) {
|
|
135
|
+
return 0;
|
|
136
|
+
}
|
|
137
|
+
const json = JSON.stringify(tools);
|
|
138
|
+
return countTokens(model, json);
|
|
139
|
+
}
|
|
140
|
+
__name(countToolsTokens, "countToolsTokens");
|
|
141
|
+
function countMessageTokens(model, message) {
|
|
142
|
+
return countTokens(model, JSON.stringify(message.content) || "");
|
|
143
|
+
}
|
|
144
|
+
__name(countMessageTokens, "countMessageTokens");
|
|
145
|
+
function countTokens(model, text) {
|
|
146
|
+
return text.length / 3;
|
|
147
|
+
}
|
|
148
|
+
__name(countTokens, "countTokens");
|
|
149
|
+
function convertActionInputToAnthropicTool(action) {
|
|
150
|
+
return {
|
|
151
|
+
name: action.name,
|
|
152
|
+
description: action.description,
|
|
153
|
+
input_schema: JSON.parse(action.jsonSchema)
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
__name(convertActionInputToAnthropicTool, "convertActionInputToAnthropicTool");
|
|
157
|
+
function convertMessageToAnthropicMessage(message) {
|
|
158
|
+
if (message.isTextMessage()) {
|
|
159
|
+
if (message.role === "system") {
|
|
160
|
+
return {
|
|
161
|
+
role: "assistant",
|
|
162
|
+
content: [
|
|
163
|
+
{
|
|
164
|
+
type: "text",
|
|
165
|
+
text: "THE FOLLOWING MESSAGE IS A SYSTEM MESSAGE: " + message.content
|
|
166
|
+
}
|
|
167
|
+
]
|
|
168
|
+
};
|
|
169
|
+
} else {
|
|
170
|
+
return {
|
|
171
|
+
role: message.role === "user" ? "user" : "assistant",
|
|
172
|
+
content: [
|
|
173
|
+
{
|
|
174
|
+
type: "text",
|
|
175
|
+
text: message.content
|
|
176
|
+
}
|
|
177
|
+
]
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
} else if (message.isImageMessage()) {
|
|
181
|
+
let mediaType;
|
|
182
|
+
switch (message.format) {
|
|
183
|
+
case "jpeg":
|
|
184
|
+
mediaType = "image/jpeg";
|
|
185
|
+
break;
|
|
186
|
+
case "png":
|
|
187
|
+
mediaType = "image/png";
|
|
188
|
+
break;
|
|
189
|
+
case "webp":
|
|
190
|
+
mediaType = "image/webp";
|
|
191
|
+
break;
|
|
192
|
+
case "gif":
|
|
193
|
+
mediaType = "image/gif";
|
|
194
|
+
break;
|
|
195
|
+
default:
|
|
196
|
+
throw new Error(`Unsupported image format: ${message.format}`);
|
|
197
|
+
}
|
|
198
|
+
return {
|
|
199
|
+
role: "user",
|
|
200
|
+
content: [
|
|
201
|
+
{
|
|
202
|
+
type: "image",
|
|
203
|
+
source: {
|
|
204
|
+
type: "base64",
|
|
205
|
+
media_type: mediaType,
|
|
206
|
+
data: message.bytes
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
]
|
|
210
|
+
};
|
|
211
|
+
} else if (message.isActionExecutionMessage()) {
|
|
212
|
+
return {
|
|
213
|
+
role: "assistant",
|
|
214
|
+
content: [
|
|
215
|
+
{
|
|
216
|
+
id: message.id,
|
|
217
|
+
type: "tool_use",
|
|
218
|
+
input: message.arguments,
|
|
219
|
+
name: message.name
|
|
220
|
+
}
|
|
221
|
+
]
|
|
222
|
+
};
|
|
223
|
+
} else if (message.isResultMessage()) {
|
|
224
|
+
return {
|
|
225
|
+
role: "user",
|
|
226
|
+
content: [
|
|
227
|
+
{
|
|
228
|
+
type: "tool_result",
|
|
229
|
+
content: message.result || "Action completed successfully",
|
|
230
|
+
tool_use_id: message.actionExecutionId
|
|
231
|
+
}
|
|
232
|
+
]
|
|
233
|
+
};
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
__name(convertMessageToAnthropicMessage, "convertMessageToAnthropicMessage");
|
|
237
|
+
|
|
238
|
+
// src/service-adapters/anthropic/anthropic-adapter.ts
|
|
239
|
+
import { randomId, randomUUID } from "@copilotkit/shared";
|
|
240
|
+
var DEFAULT_MODEL = "claude-3-5-sonnet-latest";
|
|
241
|
+
var AnthropicAdapter = class {
|
|
242
|
+
model = DEFAULT_MODEL;
|
|
243
|
+
provider = "anthropic";
|
|
244
|
+
promptCaching;
|
|
245
|
+
_anthropic;
|
|
246
|
+
get anthropic() {
|
|
247
|
+
return this._anthropic;
|
|
248
|
+
}
|
|
249
|
+
get name() {
|
|
250
|
+
return "AnthropicAdapter";
|
|
251
|
+
}
|
|
252
|
+
constructor(params) {
|
|
253
|
+
this._anthropic = (params == null ? void 0 : params.anthropic) || new Anthropic({});
|
|
254
|
+
if (params == null ? void 0 : params.model) {
|
|
255
|
+
this.model = params.model;
|
|
256
|
+
}
|
|
257
|
+
this.promptCaching = (params == null ? void 0 : params.promptCaching) || {
|
|
258
|
+
enabled: false
|
|
259
|
+
};
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Adds cache control to system prompt
|
|
263
|
+
*/
|
|
264
|
+
addSystemPromptCaching(system, debug = false) {
|
|
265
|
+
if (!this.promptCaching.enabled || !system) {
|
|
266
|
+
return system;
|
|
267
|
+
}
|
|
268
|
+
const originalTextLength = system.length;
|
|
269
|
+
if (debug) {
|
|
270
|
+
console.log(`[ANTHROPIC CACHE DEBUG] Added cache control to system prompt (${originalTextLength} chars).`);
|
|
271
|
+
}
|
|
272
|
+
return [
|
|
273
|
+
{
|
|
274
|
+
type: "text",
|
|
275
|
+
text: system,
|
|
276
|
+
cache_control: {
|
|
277
|
+
type: "ephemeral"
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
];
|
|
281
|
+
}
|
|
282
|
+
/**
|
|
283
|
+
* Adds cache control to the final message
|
|
284
|
+
*/
|
|
285
|
+
addIncrementalMessageCaching(messages, debug = false) {
|
|
286
|
+
if (!this.promptCaching.enabled || messages.length === 0) {
|
|
287
|
+
return messages;
|
|
288
|
+
}
|
|
289
|
+
const finalMessage = messages[messages.length - 1];
|
|
290
|
+
const messageNumber = messages.length;
|
|
291
|
+
if (Array.isArray(finalMessage.content) && finalMessage.content.length > 0) {
|
|
292
|
+
const finalBlock = finalMessage.content[finalMessage.content.length - 1];
|
|
293
|
+
const updatedMessages = [
|
|
294
|
+
...messages.slice(0, -1),
|
|
295
|
+
{
|
|
296
|
+
...finalMessage,
|
|
297
|
+
content: [
|
|
298
|
+
...finalMessage.content.slice(0, -1),
|
|
299
|
+
{
|
|
300
|
+
...finalBlock,
|
|
301
|
+
cache_control: {
|
|
302
|
+
type: "ephemeral"
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
]
|
|
306
|
+
}
|
|
307
|
+
];
|
|
308
|
+
if (debug) {
|
|
309
|
+
console.log(`[ANTHROPIC CACHE DEBUG] Added cache control to final message (message ${messageNumber}).`);
|
|
310
|
+
}
|
|
311
|
+
return updatedMessages;
|
|
312
|
+
}
|
|
313
|
+
return messages;
|
|
314
|
+
}
|
|
315
|
+
shouldGenerateFallbackResponse(messages) {
|
|
316
|
+
var _a, _b, _c;
|
|
317
|
+
if (messages.length === 0)
|
|
318
|
+
return false;
|
|
319
|
+
const lastMessage = messages[messages.length - 1];
|
|
320
|
+
const endsWithToolResult = lastMessage.role === "user" && Array.isArray(lastMessage.content) && lastMessage.content.some((content) => content.type === "tool_result");
|
|
321
|
+
if (messages.length >= 3 && endsWithToolResult) {
|
|
322
|
+
const lastThree = messages.slice(-3);
|
|
323
|
+
const hasRecentToolPattern = ((_a = lastThree[0]) == null ? void 0 : _a.role) === "user" && // Initial user message
|
|
324
|
+
((_b = lastThree[1]) == null ? void 0 : _b.role) === "assistant" && // Assistant tool use
|
|
325
|
+
Array.isArray(lastThree[1].content) && lastThree[1].content.some((content) => content.type === "tool_use") && ((_c = lastThree[2]) == null ? void 0 : _c.role) === "user" && // Tool result
|
|
326
|
+
Array.isArray(lastThree[2].content) && lastThree[2].content.some((content) => content.type === "tool_result");
|
|
327
|
+
return hasRecentToolPattern;
|
|
328
|
+
}
|
|
329
|
+
return endsWithToolResult;
|
|
330
|
+
}
|
|
331
|
+
async process(request) {
|
|
332
|
+
const { threadId, model = this.model, messages: rawMessages, actions, eventSource, forwardedParameters } = request;
|
|
333
|
+
const tools = actions.map(convertActionInputToAnthropicTool);
|
|
334
|
+
const messages = [
|
|
335
|
+
...rawMessages
|
|
336
|
+
];
|
|
337
|
+
const instructionsMessage = messages.shift();
|
|
338
|
+
const instructions = instructionsMessage.isTextMessage() ? instructionsMessage.content : "";
|
|
339
|
+
const validToolUseIds = /* @__PURE__ */ new Set();
|
|
340
|
+
for (const message of messages) {
|
|
341
|
+
if (message.isActionExecutionMessage()) {
|
|
342
|
+
validToolUseIds.add(message.id);
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
const processedToolResultIds = /* @__PURE__ */ new Set();
|
|
346
|
+
const anthropicMessages = messages.map((message) => {
|
|
347
|
+
if (message.isResultMessage()) {
|
|
348
|
+
if (!validToolUseIds.has(message.actionExecutionId)) {
|
|
349
|
+
return null;
|
|
350
|
+
}
|
|
351
|
+
if (processedToolResultIds.has(message.actionExecutionId)) {
|
|
352
|
+
return null;
|
|
353
|
+
}
|
|
354
|
+
processedToolResultIds.add(message.actionExecutionId);
|
|
355
|
+
return {
|
|
356
|
+
role: "user",
|
|
357
|
+
content: [
|
|
358
|
+
{
|
|
359
|
+
type: "tool_result",
|
|
360
|
+
content: message.result || "Action completed successfully",
|
|
361
|
+
tool_use_id: message.actionExecutionId
|
|
362
|
+
}
|
|
363
|
+
]
|
|
364
|
+
};
|
|
365
|
+
}
|
|
366
|
+
return convertMessageToAnthropicMessage(message);
|
|
367
|
+
}).filter(Boolean).filter((msg) => {
|
|
368
|
+
if (msg.role === "assistant" && Array.isArray(msg.content)) {
|
|
369
|
+
const hasEmptyTextOnly = msg.content.length === 1 && msg.content[0].type === "text" && (!msg.content[0].text || msg.content[0].text.trim() === "");
|
|
370
|
+
return !hasEmptyTextOnly;
|
|
371
|
+
}
|
|
372
|
+
return true;
|
|
373
|
+
});
|
|
374
|
+
const limitedMessages = limitMessagesToTokenCount(anthropicMessages, tools, model);
|
|
375
|
+
const cachedSystemPrompt = this.addSystemPromptCaching(instructions, this.promptCaching.debug);
|
|
376
|
+
const cachedMessages = this.addIncrementalMessageCaching(limitedMessages, this.promptCaching.debug);
|
|
377
|
+
let toolChoice = forwardedParameters == null ? void 0 : forwardedParameters.toolChoice;
|
|
378
|
+
if ((forwardedParameters == null ? void 0 : forwardedParameters.toolChoice) === "function") {
|
|
379
|
+
toolChoice = {
|
|
380
|
+
type: "tool",
|
|
381
|
+
name: forwardedParameters.toolChoiceFunctionName
|
|
382
|
+
};
|
|
383
|
+
}
|
|
384
|
+
try {
|
|
385
|
+
const createParams = {
|
|
386
|
+
system: cachedSystemPrompt,
|
|
387
|
+
model: this.model,
|
|
388
|
+
messages: cachedMessages,
|
|
389
|
+
max_tokens: (forwardedParameters == null ? void 0 : forwardedParameters.maxTokens) || 1024,
|
|
390
|
+
...(forwardedParameters == null ? void 0 : forwardedParameters.temperature) ? {
|
|
391
|
+
temperature: forwardedParameters.temperature
|
|
392
|
+
} : {},
|
|
393
|
+
...tools.length > 0 && {
|
|
394
|
+
tools
|
|
395
|
+
},
|
|
396
|
+
...toolChoice && {
|
|
397
|
+
tool_choice: toolChoice
|
|
398
|
+
},
|
|
399
|
+
stream: true
|
|
400
|
+
};
|
|
401
|
+
const stream = await this.anthropic.messages.create(createParams);
|
|
402
|
+
eventSource.stream(async (eventStream$) => {
|
|
403
|
+
let mode = null;
|
|
404
|
+
let didOutputText = false;
|
|
405
|
+
let currentMessageId = randomId();
|
|
406
|
+
let currentToolCallId = randomId();
|
|
407
|
+
let filterThinkingTextBuffer = new FilterThinkingTextBuffer();
|
|
408
|
+
let hasReceivedContent = false;
|
|
409
|
+
try {
|
|
410
|
+
for await (const chunk of stream) {
|
|
411
|
+
if (chunk.type === "message_start") {
|
|
412
|
+
currentMessageId = chunk.message.id;
|
|
413
|
+
} else if (chunk.type === "content_block_start") {
|
|
414
|
+
hasReceivedContent = true;
|
|
415
|
+
if (chunk.content_block.type === "text") {
|
|
416
|
+
didOutputText = false;
|
|
417
|
+
filterThinkingTextBuffer.reset();
|
|
418
|
+
mode = "message";
|
|
419
|
+
} else if (chunk.content_block.type === "tool_use") {
|
|
420
|
+
currentToolCallId = chunk.content_block.id;
|
|
421
|
+
eventStream$.sendActionExecutionStart({
|
|
422
|
+
actionExecutionId: currentToolCallId,
|
|
423
|
+
actionName: chunk.content_block.name,
|
|
424
|
+
parentMessageId: currentMessageId
|
|
425
|
+
});
|
|
426
|
+
mode = "function";
|
|
427
|
+
}
|
|
428
|
+
} else if (chunk.type === "content_block_delta") {
|
|
429
|
+
if (chunk.delta.type === "text_delta") {
|
|
430
|
+
const text = filterThinkingTextBuffer.onTextChunk(chunk.delta.text);
|
|
431
|
+
if (text.length > 0) {
|
|
432
|
+
if (!didOutputText) {
|
|
433
|
+
eventStream$.sendTextMessageStart({
|
|
434
|
+
messageId: currentMessageId
|
|
435
|
+
});
|
|
436
|
+
didOutputText = true;
|
|
437
|
+
}
|
|
438
|
+
eventStream$.sendTextMessageContent({
|
|
439
|
+
messageId: currentMessageId,
|
|
440
|
+
content: text
|
|
441
|
+
});
|
|
442
|
+
}
|
|
443
|
+
} else if (chunk.delta.type === "input_json_delta") {
|
|
444
|
+
eventStream$.sendActionExecutionArgs({
|
|
445
|
+
actionExecutionId: currentToolCallId,
|
|
446
|
+
args: chunk.delta.partial_json
|
|
447
|
+
});
|
|
448
|
+
}
|
|
449
|
+
} else if (chunk.type === "content_block_stop") {
|
|
450
|
+
if (mode === "message") {
|
|
451
|
+
if (didOutputText) {
|
|
452
|
+
eventStream$.sendTextMessageEnd({
|
|
453
|
+
messageId: currentMessageId
|
|
454
|
+
});
|
|
455
|
+
}
|
|
456
|
+
} else if (mode === "function") {
|
|
457
|
+
eventStream$.sendActionExecutionEnd({
|
|
458
|
+
actionExecutionId: currentToolCallId
|
|
459
|
+
});
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
}
|
|
463
|
+
} catch (error) {
|
|
464
|
+
throw convertServiceAdapterError(error, "Anthropic");
|
|
465
|
+
}
|
|
466
|
+
if (!hasReceivedContent && this.shouldGenerateFallbackResponse(cachedMessages)) {
|
|
467
|
+
let fallbackContent = "Task completed successfully.";
|
|
468
|
+
const lastMessage = cachedMessages[cachedMessages.length - 1];
|
|
469
|
+
if ((lastMessage == null ? void 0 : lastMessage.role) === "user" && Array.isArray(lastMessage.content)) {
|
|
470
|
+
const toolResult = lastMessage.content.find((c) => c.type === "tool_result");
|
|
471
|
+
if ((toolResult == null ? void 0 : toolResult.content) && toolResult.content !== "Action completed successfully") {
|
|
472
|
+
fallbackContent = toolResult.content;
|
|
473
|
+
}
|
|
474
|
+
}
|
|
475
|
+
currentMessageId = randomId();
|
|
476
|
+
eventStream$.sendTextMessageStart({
|
|
477
|
+
messageId: currentMessageId
|
|
478
|
+
});
|
|
479
|
+
eventStream$.sendTextMessageContent({
|
|
480
|
+
messageId: currentMessageId,
|
|
481
|
+
content: fallbackContent
|
|
482
|
+
});
|
|
483
|
+
eventStream$.sendTextMessageEnd({
|
|
484
|
+
messageId: currentMessageId
|
|
485
|
+
});
|
|
486
|
+
}
|
|
487
|
+
eventStream$.complete();
|
|
488
|
+
});
|
|
489
|
+
} catch (error) {
|
|
490
|
+
throw convertServiceAdapterError(error, "Anthropic");
|
|
491
|
+
}
|
|
492
|
+
return {
|
|
493
|
+
threadId: threadId || randomUUID()
|
|
494
|
+
};
|
|
495
|
+
}
|
|
496
|
+
};
|
|
497
|
+
__name(AnthropicAdapter, "AnthropicAdapter");
|
|
498
|
+
var THINKING_TAG = "<thinking>";
|
|
499
|
+
var THINKING_TAG_END = "</thinking>";
|
|
500
|
+
var FilterThinkingTextBuffer = /* @__PURE__ */ __name(class FilterThinkingTextBuffer2 {
|
|
501
|
+
buffer;
|
|
502
|
+
didFilterThinkingTag = false;
|
|
503
|
+
constructor() {
|
|
504
|
+
this.buffer = "";
|
|
505
|
+
}
|
|
506
|
+
onTextChunk(text) {
|
|
507
|
+
this.buffer += text;
|
|
508
|
+
if (this.didFilterThinkingTag) {
|
|
509
|
+
return text;
|
|
510
|
+
}
|
|
511
|
+
const potentialTag = this.buffer.slice(0, THINKING_TAG.length);
|
|
512
|
+
if (THINKING_TAG.startsWith(potentialTag)) {
|
|
513
|
+
if (this.buffer.includes(THINKING_TAG_END)) {
|
|
514
|
+
const end = this.buffer.indexOf(THINKING_TAG_END);
|
|
515
|
+
const filteredText = this.buffer.slice(end + THINKING_TAG_END.length);
|
|
516
|
+
this.buffer = filteredText;
|
|
517
|
+
this.didFilterThinkingTag = true;
|
|
518
|
+
return filteredText;
|
|
519
|
+
} else {
|
|
520
|
+
return "";
|
|
521
|
+
}
|
|
522
|
+
}
|
|
523
|
+
return text;
|
|
524
|
+
}
|
|
525
|
+
reset() {
|
|
526
|
+
this.buffer = "";
|
|
527
|
+
this.didFilterThinkingTag = false;
|
|
528
|
+
}
|
|
529
|
+
}, "FilterThinkingTextBuffer");
|
|
530
|
+
|
|
531
|
+
// src/service-adapters/experimental/ollama/ollama-adapter.ts
|
|
532
|
+
import { Ollama } from "@langchain/community/llms/ollama";
|
|
533
|
+
import { randomId as randomId2, randomUUID as randomUUID2 } from "@copilotkit/shared";
|
|
534
|
+
var DEFAULT_MODEL2 = "llama3:latest";
|
|
535
|
+
var ExperimentalOllamaAdapter = class {
|
|
536
|
+
model;
|
|
537
|
+
provider = "ollama";
|
|
538
|
+
get name() {
|
|
539
|
+
return "OllamaAdapter";
|
|
540
|
+
}
|
|
541
|
+
constructor(options) {
|
|
542
|
+
if (options == null ? void 0 : options.model) {
|
|
543
|
+
this.model = options.model;
|
|
544
|
+
} else {
|
|
545
|
+
this.model = DEFAULT_MODEL2;
|
|
546
|
+
}
|
|
547
|
+
}
|
|
548
|
+
async process(request) {
|
|
549
|
+
const { messages, actions, eventSource } = request;
|
|
550
|
+
const ollama = new Ollama({
|
|
551
|
+
model: this.model
|
|
552
|
+
});
|
|
553
|
+
const contents = messages.filter((m) => m.isTextMessage()).map((m) => m.content);
|
|
554
|
+
const _stream = await ollama.stream(contents);
|
|
555
|
+
eventSource.stream(async (eventStream$) => {
|
|
556
|
+
const currentMessageId = randomId2();
|
|
557
|
+
eventStream$.sendTextMessageStart({
|
|
558
|
+
messageId: currentMessageId
|
|
559
|
+
});
|
|
560
|
+
for await (const chunkText of _stream) {
|
|
561
|
+
eventStream$.sendTextMessageContent({
|
|
562
|
+
messageId: currentMessageId,
|
|
563
|
+
content: chunkText
|
|
564
|
+
});
|
|
565
|
+
}
|
|
566
|
+
eventStream$.sendTextMessageEnd({
|
|
567
|
+
messageId: currentMessageId
|
|
568
|
+
});
|
|
569
|
+
eventStream$.complete();
|
|
570
|
+
});
|
|
571
|
+
return {
|
|
572
|
+
threadId: request.threadId || randomUUID2()
|
|
573
|
+
};
|
|
574
|
+
}
|
|
575
|
+
};
|
|
576
|
+
__name(ExperimentalOllamaAdapter, "ExperimentalOllamaAdapter");
|
|
577
|
+
|
|
578
|
+
// src/service-adapters/bedrock/bedrock-adapter.ts
|
|
579
|
+
import { ChatBedrockConverse } from "@langchain/aws";
|
|
580
|
+
var DEFAULT_MODEL3 = "amazon.nova-lite-v1:0";
|
|
581
|
+
var BedrockAdapter = class extends LangChainAdapter {
|
|
582
|
+
provider = "bedrock";
|
|
583
|
+
model = DEFAULT_MODEL3;
|
|
584
|
+
constructor(options) {
|
|
585
|
+
super({
|
|
586
|
+
chainFn: async ({ messages, tools, threadId }) => {
|
|
587
|
+
this.model = (options == null ? void 0 : options.model) ?? "amazon.nova-lite-v1:0";
|
|
588
|
+
const model = new ChatBedrockConverse({
|
|
589
|
+
model: this.model,
|
|
590
|
+
region: (options == null ? void 0 : options.region) ?? "us-east-1",
|
|
591
|
+
credentials: (options == null ? void 0 : options.credentials) ? {
|
|
592
|
+
accessKeyId: options.credentials.accessKeyId,
|
|
593
|
+
secretAccessKey: options.credentials.secretAccessKey
|
|
594
|
+
} : void 0
|
|
595
|
+
}).bindTools(tools);
|
|
596
|
+
return model.stream(messages);
|
|
597
|
+
}
|
|
598
|
+
});
|
|
599
|
+
}
|
|
600
|
+
};
|
|
601
|
+
__name(BedrockAdapter, "BedrockAdapter");
|
|
602
|
+
|
|
603
|
+
// src/service-adapters/empty/empty-adapter.ts
|
|
604
|
+
import { randomUUID as randomUUID3 } from "@copilotkit/shared";
|
|
605
|
+
var EmptyAdapter = class {
|
|
606
|
+
async process(request) {
|
|
607
|
+
return {
|
|
608
|
+
threadId: request.threadId || randomUUID3()
|
|
609
|
+
};
|
|
610
|
+
}
|
|
611
|
+
get name() {
|
|
612
|
+
return "EmptyAdapter";
|
|
613
|
+
}
|
|
614
|
+
};
|
|
615
|
+
__name(EmptyAdapter, "EmptyAdapter");
|
|
616
|
+
var ExperimentalEmptyAdapter = EmptyAdapter;
|
|
617
|
+
|
|
618
|
+
export {
|
|
619
|
+
RemoteChain,
|
|
620
|
+
AnthropicAdapter,
|
|
621
|
+
ExperimentalOllamaAdapter,
|
|
622
|
+
BedrockAdapter,
|
|
623
|
+
EmptyAdapter,
|
|
624
|
+
ExperimentalEmptyAdapter
|
|
625
|
+
};
|
|
626
|
+
//# sourceMappingURL=chunk-ERUOA47O.mjs.map
|