@elizaos/plugin-bootstrap 1.0.0-beta.38 → 1.0.0-beta.41
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +122 -65
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
package/dist/index.js
CHANGED
|
@@ -79,11 +79,10 @@ import {
|
|
|
79
79
|
logger as logger17,
|
|
80
80
|
messageHandlerTemplate,
|
|
81
81
|
ModelType as ModelType13,
|
|
82
|
-
parseJSONObjectFromText as parseJSONObjectFromText4,
|
|
83
82
|
postCreationTemplate,
|
|
84
|
-
providersTemplate,
|
|
85
83
|
shouldRespondTemplate,
|
|
86
|
-
truncateToCompleteSentence
|
|
84
|
+
truncateToCompleteSentence,
|
|
85
|
+
parseKeyValueXml
|
|
87
86
|
} from "@elizaos/core";
|
|
88
87
|
|
|
89
88
|
// ../../node_modules/uuid/dist/esm/stringify.js
|
|
@@ -723,7 +722,10 @@ var ignoreAction = {
|
|
|
723
722
|
return true;
|
|
724
723
|
},
|
|
725
724
|
description: "Call this action if ignoring the user. If the user is aggressive, creepy or is finished with the conversation, use this action. Or, if both you and the user have already said goodbye, use this action instead of saying bye again. Use IGNORE any time the conversation has naturally ended. Do not use IGNORE if the user has engaged directly, or if something went wrong an you need to tell them. Only ignore if the user should be ignored.",
|
|
726
|
-
handler: async (_runtime, _message) => {
|
|
725
|
+
handler: async (_runtime, _message, _state, _options, callback, responses) => {
|
|
726
|
+
if (callback && responses?.[0]?.content) {
|
|
727
|
+
await callback(responses[0].content);
|
|
728
|
+
}
|
|
727
729
|
return true;
|
|
728
730
|
},
|
|
729
731
|
examples: [
|
|
@@ -3649,7 +3651,6 @@ import { addHeader as addHeader2, ChannelType as ChannelType3 } from "@elizaos/c
|
|
|
3649
3651
|
var anxietyProvider = {
|
|
3650
3652
|
name: "ANXIETY",
|
|
3651
3653
|
description: "Social directions for the AI to follow based on the channel type",
|
|
3652
|
-
dynamic: true,
|
|
3653
3654
|
get: async (_runtime, message) => {
|
|
3654
3655
|
const channelType = message.content.channelType;
|
|
3655
3656
|
const groupAnxietyExamples = [
|
|
@@ -4186,14 +4187,17 @@ var factsProvider = {
|
|
|
4186
4187
|
tableName: "facts",
|
|
4187
4188
|
embedding,
|
|
4188
4189
|
roomId: message.roomId,
|
|
4189
|
-
|
|
4190
|
+
worldId: message.worldId,
|
|
4191
|
+
count: 6,
|
|
4192
|
+
query: message.content.text
|
|
4190
4193
|
}),
|
|
4191
|
-
runtime.
|
|
4194
|
+
runtime.searchMemories({
|
|
4195
|
+
embedding,
|
|
4196
|
+
query: message.content.text,
|
|
4192
4197
|
tableName: "facts",
|
|
4193
4198
|
roomId: message.roomId,
|
|
4194
|
-
|
|
4195
|
-
|
|
4196
|
-
end: Date.now()
|
|
4199
|
+
entityId: message.entityId,
|
|
4200
|
+
count: 6
|
|
4197
4201
|
})
|
|
4198
4202
|
]);
|
|
4199
4203
|
const allFacts = [...relevantFacts, ...recentFactsData].filter(
|
|
@@ -4228,14 +4232,19 @@ var factsProvider = {
|
|
|
4228
4232
|
import { addHeader as addHeader7 } from "@elizaos/core";
|
|
4229
4233
|
var knowledgeProvider = {
|
|
4230
4234
|
name: "KNOWLEDGE",
|
|
4231
|
-
description: "Knowledge from the knowledge base that the agent knows",
|
|
4235
|
+
description: "Knowledge from the knowledge base that the agent knows, retrieved whenever the agent needs to answer a question about their expertise.",
|
|
4232
4236
|
dynamic: true,
|
|
4233
4237
|
get: async (runtime, message) => {
|
|
4234
4238
|
const knowledgeData = await runtime.getKnowledge(message);
|
|
4235
|
-
const
|
|
4239
|
+
const firstFiveKnowledgeItems = knowledgeData?.slice(0, 5);
|
|
4240
|
+
let knowledge = (firstFiveKnowledgeItems && firstFiveKnowledgeItems.length > 0 ? addHeader7(
|
|
4236
4241
|
"# Knowledge",
|
|
4237
|
-
|
|
4238
|
-
) : "";
|
|
4242
|
+
firstFiveKnowledgeItems.map((knowledge2) => `- ${knowledge2.content.text}`).join("\n")
|
|
4243
|
+
) : "") + "\n";
|
|
4244
|
+
const tokenLength = 3.5;
|
|
4245
|
+
if (knowledge.length > 4e3 * tokenLength) {
|
|
4246
|
+
knowledge = knowledge.slice(0, 4e3 * tokenLength);
|
|
4247
|
+
}
|
|
4239
4248
|
return {
|
|
4240
4249
|
data: {
|
|
4241
4250
|
knowledge
|
|
@@ -5037,7 +5046,7 @@ var ScenarioService = class _ScenarioService extends Service {
|
|
|
5037
5046
|
this.setupEventListeners();
|
|
5038
5047
|
}
|
|
5039
5048
|
static serviceType = "scenario";
|
|
5040
|
-
capabilityDescription = "The agent is currently in a scenario testing environment. It can
|
|
5049
|
+
capabilityDescription = "The agent is currently in a scenario testing environment. It can Create groups, send messages, and talk to other agents in a live interactive testing environment.";
|
|
5041
5050
|
messageHandlers = /* @__PURE__ */ new Map();
|
|
5042
5051
|
worlds = /* @__PURE__ */ new Map();
|
|
5043
5052
|
activeActions = /* @__PURE__ */ new Map();
|
|
@@ -5563,16 +5572,15 @@ var messageReceivedHandler = async ({
|
|
|
5563
5572
|
return;
|
|
5564
5573
|
}
|
|
5565
5574
|
let state = await runtime.composeState(message, [
|
|
5566
|
-
"
|
|
5575
|
+
"ANXIETY",
|
|
5567
5576
|
"SHOULD_RESPOND",
|
|
5577
|
+
"ENTITIES",
|
|
5568
5578
|
"CHARACTER",
|
|
5569
|
-
"RECENT_MESSAGES"
|
|
5570
|
-
"ENTITIES"
|
|
5579
|
+
"RECENT_MESSAGES"
|
|
5571
5580
|
]);
|
|
5572
5581
|
const room = await runtime.getRoom(message.roomId);
|
|
5573
5582
|
const shouldSkipShouldRespond = room?.type === ChannelType10.DM || room?.type === ChannelType10.VOICE_DM || room?.type === ChannelType10.SELF;
|
|
5574
5583
|
let shouldRespond = true;
|
|
5575
|
-
let providers = [];
|
|
5576
5584
|
if (!shouldSkipShouldRespond) {
|
|
5577
5585
|
const shouldRespondPrompt = composePromptFromState9({
|
|
5578
5586
|
state,
|
|
@@ -5589,32 +5597,15 @@ var messageReceivedHandler = async ({
|
|
|
5589
5597
|
logger17.debug(`*** Should Respond Response for ${runtime.character.name} ***
|
|
5590
5598
|
`, response);
|
|
5591
5599
|
logger17.debug(`*** Raw Response Type: ${typeof response} ***`);
|
|
5592
|
-
|
|
5593
|
-
|
|
5594
|
-
logger17.debug("*** Response contains code block markers, attempting to clean up ***");
|
|
5595
|
-
processedResponse = response.replace(/```json\n|\n```|```/g, "");
|
|
5596
|
-
logger17.debug("*** Processed Response ***\n", processedResponse);
|
|
5597
|
-
}
|
|
5598
|
-
const responseObject = parseJSONObjectFromText4(processedResponse);
|
|
5599
|
-
logger17.debug("*** Parsed Response Object ***", responseObject);
|
|
5600
|
+
const responseObject = parseKeyValueXml(response);
|
|
5601
|
+
logger17.debug("*** Parsed XML Response Object ***", responseObject);
|
|
5600
5602
|
shouldRespond = responseObject?.action && responseObject.action === "RESPOND";
|
|
5601
|
-
providers = responseObject?.providers || [];
|
|
5602
5603
|
} else {
|
|
5603
|
-
|
|
5604
|
-
state,
|
|
5605
|
-
template: runtime.character.templates?.providersTemplate || providersTemplate
|
|
5606
|
-
});
|
|
5607
|
-
const response = await runtime.useModel(ModelType13.TEXT_SMALL, {
|
|
5608
|
-
prompt: providersPrompt
|
|
5609
|
-
});
|
|
5610
|
-
const responseObject = parseJSONObjectFromText4(response);
|
|
5611
|
-
providers = responseObject?.providers || [];
|
|
5604
|
+
shouldRespond = true;
|
|
5612
5605
|
}
|
|
5613
|
-
logger17.debug("*** Should Respond ***", shouldRespond);
|
|
5614
|
-
logger17.debug("*** Providers Value ***", providers);
|
|
5615
|
-
state = await runtime.composeState(message, null, providers);
|
|
5616
5606
|
let responseMessages = [];
|
|
5617
5607
|
if (shouldRespond) {
|
|
5608
|
+
state = await runtime.composeState(message);
|
|
5618
5609
|
const prompt = composePromptFromState9({
|
|
5619
5610
|
state,
|
|
5620
5611
|
template: runtime.character.templates?.messageHandlerTemplate || messageHandlerTemplate
|
|
@@ -5623,13 +5614,26 @@ var messageReceivedHandler = async ({
|
|
|
5623
5614
|
let retries = 0;
|
|
5624
5615
|
const maxRetries = 3;
|
|
5625
5616
|
while (retries < maxRetries && (!responseContent?.thought || !responseContent?.actions)) {
|
|
5626
|
-
|
|
5617
|
+
let response = await runtime.useModel(ModelType13.TEXT_LARGE, {
|
|
5627
5618
|
prompt
|
|
5628
5619
|
});
|
|
5629
|
-
|
|
5620
|
+
logger17.debug("*** Raw LLM Response ***\n", response);
|
|
5621
|
+
const parsedXml = parseKeyValueXml(response);
|
|
5622
|
+
logger17.debug("*** Parsed XML Content ***\n", parsedXml);
|
|
5623
|
+
if (parsedXml) {
|
|
5624
|
+
responseContent = {
|
|
5625
|
+
thought: parsedXml.thought || "",
|
|
5626
|
+
actions: parsedXml.actions || ["IGNORE"],
|
|
5627
|
+
providers: parsedXml.providers || [],
|
|
5628
|
+
text: parsedXml.text || "",
|
|
5629
|
+
simple: parsedXml.simple || false
|
|
5630
|
+
};
|
|
5631
|
+
} else {
|
|
5632
|
+
responseContent = null;
|
|
5633
|
+
}
|
|
5630
5634
|
retries++;
|
|
5631
|
-
if (!responseContent?.thought
|
|
5632
|
-
logger17.warn("*** Missing required fields, retrying... ***");
|
|
5635
|
+
if (!responseContent?.thought || !responseContent?.actions) {
|
|
5636
|
+
logger17.warn("*** Missing required fields (thought or actions), retrying... ***");
|
|
5633
5637
|
}
|
|
5634
5638
|
}
|
|
5635
5639
|
const currentResponseId = agentResponses.get(message.roomId);
|
|
@@ -5641,26 +5645,63 @@ var messageReceivedHandler = async ({
|
|
|
5641
5645
|
}
|
|
5642
5646
|
if (responseContent) {
|
|
5643
5647
|
responseContent.inReplyTo = createUniqueUuid4(runtime, message.id);
|
|
5644
|
-
|
|
5645
|
-
|
|
5646
|
-
|
|
5647
|
-
|
|
5648
|
-
|
|
5649
|
-
|
|
5650
|
-
|
|
5651
|
-
|
|
5652
|
-
|
|
5653
|
-
];
|
|
5654
|
-
callback(responseContent);
|
|
5648
|
+
const responseMesssage = {
|
|
5649
|
+
id: asUUID(v4_default()),
|
|
5650
|
+
entityId: runtime.agentId,
|
|
5651
|
+
agentId: runtime.agentId,
|
|
5652
|
+
content: responseContent,
|
|
5653
|
+
roomId: message.roomId,
|
|
5654
|
+
createdAt: Date.now()
|
|
5655
|
+
};
|
|
5656
|
+
responseMessages = [responseMesssage];
|
|
5655
5657
|
}
|
|
5656
5658
|
agentResponses.delete(message.roomId);
|
|
5657
5659
|
if (agentResponses.size === 0) {
|
|
5658
5660
|
latestResponseIds.delete(runtime.agentId);
|
|
5659
5661
|
}
|
|
5660
|
-
|
|
5662
|
+
if (responseContent?.providers.length > 0) {
|
|
5663
|
+
state = await runtime.composeState(message, null, [...responseContent?.providers]);
|
|
5664
|
+
}
|
|
5665
|
+
if (responseContent && responseContent.simple && responseContent.text && (responseContent.actions.length === 0 || responseContent.actions.length === 1 && responseContent.actions[0].toUpperCase() === "REPLY")) {
|
|
5666
|
+
await callback(responseContent);
|
|
5667
|
+
} else {
|
|
5668
|
+
await runtime.processActions(message, responseMessages, state, callback);
|
|
5669
|
+
}
|
|
5670
|
+
await runtime.evaluate(message, state, shouldRespond, callback, responseMessages);
|
|
5671
|
+
} else {
|
|
5672
|
+
logger17.debug("Agent decided not to respond (shouldRespond is false).");
|
|
5673
|
+
const currentResponseId = agentResponses.get(message.roomId);
|
|
5674
|
+
if (currentResponseId !== responseId) {
|
|
5675
|
+
logger17.info(
|
|
5676
|
+
`Ignore response discarded - newer message being processed for agent: ${runtime.agentId}, room: ${message.roomId}`
|
|
5677
|
+
);
|
|
5678
|
+
return;
|
|
5679
|
+
}
|
|
5680
|
+
const ignoreContent = {
|
|
5681
|
+
thought: "Agent decided not to respond to this message.",
|
|
5682
|
+
actions: ["IGNORE"],
|
|
5683
|
+
simple: true,
|
|
5684
|
+
// Treat it as simple for callback purposes
|
|
5685
|
+
inReplyTo: createUniqueUuid4(runtime, message.id)
|
|
5686
|
+
// Reference original message
|
|
5687
|
+
};
|
|
5688
|
+
await callback(ignoreContent);
|
|
5689
|
+
const ignoreMemory = {
|
|
5690
|
+
id: asUUID(v4_default()),
|
|
5691
|
+
entityId: runtime.agentId,
|
|
5692
|
+
agentId: runtime.agentId,
|
|
5693
|
+
content: ignoreContent,
|
|
5694
|
+
roomId: message.roomId,
|
|
5695
|
+
createdAt: Date.now()
|
|
5696
|
+
};
|
|
5697
|
+
await runtime.createMemory(ignoreMemory, "messages");
|
|
5698
|
+
logger17.debug("Saved ignore response to memory", { memoryId: ignoreMemory.id });
|
|
5699
|
+
agentResponses.delete(message.roomId);
|
|
5700
|
+
if (agentResponses.size === 0) {
|
|
5701
|
+
latestResponseIds.delete(runtime.agentId);
|
|
5702
|
+
}
|
|
5661
5703
|
}
|
|
5662
5704
|
onComplete?.();
|
|
5663
|
-
await runtime.evaluate(message, state, shouldRespond, callback, responseMessages);
|
|
5664
5705
|
await runtime.emitEvent(EventType2.RUN_ENDED, {
|
|
5665
5706
|
runtime,
|
|
5666
5707
|
runId,
|
|
@@ -5742,7 +5783,8 @@ var postGeneratedHandler = async ({
|
|
|
5742
5783
|
roomId,
|
|
5743
5784
|
content: {},
|
|
5744
5785
|
metadata: {
|
|
5745
|
-
entityName: runtime.character.name
|
|
5786
|
+
entityName: runtime.character.name,
|
|
5787
|
+
type: "message"
|
|
5746
5788
|
}
|
|
5747
5789
|
};
|
|
5748
5790
|
let state = await runtime.composeState(message, null, [
|
|
@@ -5766,9 +5808,20 @@ var postGeneratedHandler = async ({
|
|
|
5766
5808
|
const response = await runtime.useModel(ModelType13.TEXT_SMALL, {
|
|
5767
5809
|
prompt
|
|
5768
5810
|
});
|
|
5769
|
-
|
|
5811
|
+
const parsedXml = parseKeyValueXml(response);
|
|
5812
|
+
if (parsedXml) {
|
|
5813
|
+
responseContent = {
|
|
5814
|
+
thought: parsedXml.thought || "",
|
|
5815
|
+
actions: parsedXml.actions || ["IGNORE"],
|
|
5816
|
+
providers: parsedXml.providers || [],
|
|
5817
|
+
text: parsedXml.text || "",
|
|
5818
|
+
simple: parsedXml.simple || false
|
|
5819
|
+
};
|
|
5820
|
+
} else {
|
|
5821
|
+
responseContent = null;
|
|
5822
|
+
}
|
|
5770
5823
|
retries++;
|
|
5771
|
-
if (!responseContent?.thought
|
|
5824
|
+
if (!responseContent?.thought || !responseContent?.actions) {
|
|
5772
5825
|
logger17.warn("*** Missing required fields, retrying... ***");
|
|
5773
5826
|
}
|
|
5774
5827
|
}
|
|
@@ -5777,10 +5830,14 @@ var postGeneratedHandler = async ({
|
|
|
5777
5830
|
state,
|
|
5778
5831
|
template: runtime.character.templates?.postCreationTemplate || postCreationTemplate
|
|
5779
5832
|
});
|
|
5780
|
-
const
|
|
5781
|
-
prompt: postPrompt
|
|
5782
|
-
output: "no-schema"
|
|
5833
|
+
const xmlResponseText = await runtime.useModel(ModelType13.TEXT_LARGE, {
|
|
5834
|
+
prompt: postPrompt
|
|
5783
5835
|
});
|
|
5836
|
+
const parsedXmlResponse = parseKeyValueXml(xmlResponseText);
|
|
5837
|
+
if (!parsedXmlResponse) {
|
|
5838
|
+
logger17.error("Failed to parse XML response for post creation. Raw response:", xmlResponseText);
|
|
5839
|
+
return;
|
|
5840
|
+
}
|
|
5784
5841
|
function cleanupPostText(text) {
|
|
5785
5842
|
let cleanedText2 = text.replace(/^['"](.*)['"]$/, "$1");
|
|
5786
5843
|
cleanedText2 = cleanedText2.replaceAll(/\\n/g, "\n\n");
|
|
@@ -5789,7 +5846,7 @@ var postGeneratedHandler = async ({
|
|
|
5789
5846
|
}
|
|
5790
5847
|
return cleanedText2;
|
|
5791
5848
|
}
|
|
5792
|
-
const cleanedText = cleanupPostText(
|
|
5849
|
+
const cleanedText = cleanupPostText(parsedXmlResponse.post || "");
|
|
5793
5850
|
const RM = state.providerData?.find((pd) => pd.providerName === "RECENT_MESSAGES");
|
|
5794
5851
|
if (RM) {
|
|
5795
5852
|
for (const m of RM.data.recentMessages) {
|
|
@@ -5832,7 +5889,7 @@ var postGeneratedHandler = async ({
|
|
|
5832
5889
|
text: cleanedText,
|
|
5833
5890
|
source,
|
|
5834
5891
|
channelType: ChannelType10.FEED,
|
|
5835
|
-
thought:
|
|
5892
|
+
thought: parsedXmlResponse.thought || "",
|
|
5836
5893
|
type: "post"
|
|
5837
5894
|
},
|
|
5838
5895
|
roomId: message.roomId,
|