Skip to content

Commit

Permalink
update import
Browse files Browse the repository at this point in the history
  • Loading branch information
tcm390 committed Jan 12, 2025
1 parent 57f0eff commit a9f09bd
Showing 1 changed file with 64 additions and 40 deletions.
104 changes: 64 additions & 40 deletions agent/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ import { SlackClientInterface } from "@elizaos/client-slack";
import { TelegramClientInterface } from "@elizaos/client-telegram";
import { TwitterClientInterface } from "@elizaos/client-twitter";
// import { ReclaimAdapter } from "@elizaos/plugin-reclaim";
import { DirectClient } from "@elizaos/client-direct";
import { PrimusAdapter } from "@elizaos/plugin-primus";

import {
Expand Down Expand Up @@ -102,7 +101,7 @@ import net from "net";
import path from "path";
import { fileURLToPath } from "url";
import yargs from "yargs";
import { createNFTCollectionsPlugin } from "@ai16z/plugin-nft-collections";
import { createNFTCollectionsPlugin } from "@elizaos/plugin-nft-collections";

const __filename = fileURLToPath(import.meta.url); // get the resolved path to the file
const __dirname = path.dirname(__filename); // get the name of the directory
Expand Down Expand Up @@ -152,14 +151,29 @@ function tryLoadFile(filePath: string): string | null {
function mergeCharacters(base: Character, child: Character): Character {
const mergeObjects = (baseObj: any, childObj: any) => {
const result: any = {};
const keys = new Set([...Object.keys(baseObj || {}), ...Object.keys(childObj || {})]);
keys.forEach(key => {
if (typeof baseObj[key] === 'object' && typeof childObj[key] === 'object' && !Array.isArray(baseObj[key]) && !Array.isArray(childObj[key])) {
const keys = new Set([
...Object.keys(baseObj || {}),
...Object.keys(childObj || {}),
]);
keys.forEach((key) => {
if (
typeof baseObj[key] === "object" &&
typeof childObj[key] === "object" &&
!Array.isArray(baseObj[key]) &&
!Array.isArray(childObj[key])
) {
result[key] = mergeObjects(baseObj[key], childObj[key]);
} else if (Array.isArray(baseObj[key]) || Array.isArray(childObj[key])) {
result[key] = [...(baseObj[key] || []), ...(childObj[key] || [])];
} else if (
Array.isArray(baseObj[key]) ||
Array.isArray(childObj[key])
) {
result[key] = [
...(baseObj[key] || []),
...(childObj[key] || []),
];
} else {
result[key] = childObj[key] !== undefined ? childObj[key] : baseObj[key];
result[key] =
childObj[key] !== undefined ? childObj[key] : baseObj[key];
}
});
return result;
Expand All @@ -174,32 +188,36 @@ async function loadCharacter(filePath: string): Promise<Character> {
let character = JSON.parse(content);
validateCharacterConfig(character);

// .id isn't really valid
const characterId = character.id || character.name;
const characterPrefix = `CHARACTER.${characterId.toUpperCase().replace(/ /g, "_")}.`;
const characterSettings = Object.entries(process.env)
.filter(([key]) => key.startsWith(characterPrefix))
.reduce((settings, [key, value]) => {
const settingKey = key.slice(characterPrefix.length);
return { ...settings, [settingKey]: value };
}, {});
if (Object.keys(characterSettings).length > 0) {
character.settings = character.settings || {};
character.settings.secrets = {
...characterSettings,
...character.settings.secrets,
};
}
// Handle plugins
character.plugins = await handlePluginImporting(
character.plugins
);
// .id isn't really valid
const characterId = character.id || character.name;
const characterPrefix = `CHARACTER.${characterId.toUpperCase().replace(/ /g, "_")}.`;
const characterSettings = Object.entries(process.env)
.filter(([key]) => key.startsWith(characterPrefix))
.reduce((settings, [key, value]) => {
const settingKey = key.slice(characterPrefix.length);
return { ...settings, [settingKey]: value };
}, {});
if (Object.keys(characterSettings).length > 0) {
character.settings = character.settings || {};
character.settings.secrets = {
...characterSettings,
...character.settings.secrets,
};
}
// Handle plugins
character.plugins = await handlePluginImporting(character.plugins);
if (character.extends) {
elizaLogger.info(`Merging ${character.name} character with parent characters`);
elizaLogger.info(
`Merging ${character.name} character with parent characters`
);
for (const extendPath of character.extends) {
const baseCharacter = await loadCharacter(path.resolve(path.dirname(filePath), extendPath));
const baseCharacter = await loadCharacter(
path.resolve(path.dirname(filePath), extendPath)
);
character = mergeCharacters(baseCharacter, character);
elizaLogger.info(`Merged ${character.name} with ${baseCharacter.name}`);
elizaLogger.info(
`Merged ${character.name} with ${baseCharacter.name}`
);
}
}
return character;
Expand Down Expand Up @@ -467,7 +485,9 @@ function initializeDatabase(dataDir: string) {
// Test the connection
db.init()
.then(() => {
elizaLogger.success("Successfully connected to Supabase database");
elizaLogger.success(
"Successfully connected to Supabase database"
);
})
.catch((error) => {
elizaLogger.error("Failed to connect to Supabase:", error);
Expand All @@ -484,7 +504,9 @@ function initializeDatabase(dataDir: string) {
// Test the connection
db.init()
.then(() => {
elizaLogger.success("Successfully connected to PostgreSQL database");
elizaLogger.success(
"Successfully connected to PostgreSQL database"
);
})
.catch((error) => {
elizaLogger.error("Failed to connect to PostgreSQL:", error);
Expand All @@ -499,14 +521,17 @@ function initializeDatabase(dataDir: string) {
});
return db;
} else {
const filePath = process.env.SQLITE_FILE ?? path.resolve(dataDir, "db.sqlite");
const filePath =
process.env.SQLITE_FILE ?? path.resolve(dataDir, "db.sqlite");
elizaLogger.info(`Initializing SQLite database at ${filePath}...`);
const db = new SqliteDatabaseAdapter(new Database(filePath));

// Test the connection
db.init()
.then(() => {
elizaLogger.success("Successfully connected to SQLite database");
elizaLogger.success(
"Successfully connected to SQLite database"
);
})
.catch((error) => {
elizaLogger.error("Failed to connect to SQLite:", error);
Expand Down Expand Up @@ -684,7 +709,8 @@ export async function createAgent(
if (
process.env.PRIMUS_APP_ID &&
process.env.PRIMUS_APP_SECRET &&
process.env.VERIFIABLE_INFERENCE_ENABLED === "true"){
process.env.VERIFIABLE_INFERENCE_ENABLED === "true"
) {
verifiableInferenceAdapter = new PrimusAdapter({
appId: process.env.PRIMUS_APP_ID,
appSecret: process.env.PRIMUS_APP_SECRET,
Expand Down Expand Up @@ -846,9 +872,7 @@ export async function createAgent(
getSecret(character, "AKASH_WALLET_ADDRESS")
? akashPlugin
: null,
getSecret(character, "QUAI_PRIVATE_KEY")
? quaiPlugin
: null,
getSecret(character, "QUAI_PRIVATE_KEY") ? quaiPlugin : null,
getSecret(character, "RESERVOIR_API_KEY")
? createNFTCollectionsPlugin()
: null,
Expand Down Expand Up @@ -1063,4 +1087,4 @@ const startAgents = async () => {
startAgents().catch((error) => {
elizaLogger.error("Unhandled error in startAgents:", error);
process.exit(1);
});
});

0 comments on commit a9f09bd

Please sign in to comment.