Skip to content

Commit

Permalink
Merge pull request elizaOS#2 from pmckelvy1/fix-starter-v0.1.4
Browse files Browse the repository at this point in the history
use index.ts from latest release v0.1.4-alpha.3
  • Loading branch information
ponderingdemocritus authored Nov 23, 2024
2 parents fed6d03 + e57c605 commit ba95cdf
Showing 1 changed file with 76 additions and 31 deletions.
107 changes: 76 additions & 31 deletions src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,21 @@ import { AutoClientInterface } from "@ai16z/client-auto";
import { TelegramClientInterface } from "@ai16z/client-telegram";
import { TwitterClientInterface } from "@ai16z/client-twitter";
import {
DbCacheAdapter,
defaultCharacter,
FsCacheAdapter,
ICacheManager,
IDatabaseCacheAdapter,
stringToUuid,
AgentRuntime,
settings,
CacheManager,
Character,
IAgentRuntime,
ModelProviderName,
elizaLogger,
settings,
IDatabaseAdapter,
validateCharacterConfig,
} from "@ai16z/eliza";
import { bootstrapPlugin } from "@ai16z/plugin-bootstrap";
import { solanaPlugin } from "@ai16z/plugin-solana";
Expand All @@ -21,7 +29,13 @@ import Database from "better-sqlite3";
import fs from "fs";
import readline from "readline";
import yargs from "yargs";
import path from "path";
import { fileURLToPath } from "url";
import { character } from "./character.ts";
import type { DirectClient } from "@ai16z/client-direct";

const __filename = fileURLToPath(import.meta.url); // get the resolved path to the file
const __dirname = path.dirname(__filename); // get the name of the directory

export const wait = (minTime: number = 1000, maxTime: number = 3000) => {
const waitTime =
Expand Down Expand Up @@ -53,28 +67,22 @@ export function parseArguments(): {
export async function loadCharacters(
charactersArg: string
): Promise<Character[]> {
let characterPaths = charactersArg
?.split(",")
.map((path) => path.trim())
.map((path) => {
if (path.startsWith("../characters")) {
return `../${path}`;
}
if (path.startsWith("characters")) {
return `../../${path}`;
}
if (path.startsWith("./characters")) {
return `../.${path}`;
}
return path;
});
let characterPaths = charactersArg?.split(",").map((filePath) => {
if (path.basename(filePath) === filePath) {
filePath = "../characters/" + filePath;
}
return path.resolve(process.cwd(), filePath.trim());
});

const loadedCharacters = [];

if (characterPaths?.length > 0) {
for (const path of characterPaths) {
try {
const character = JSON.parse(fs.readFileSync(path, "utf8"));

validateCharacterConfig(character);

// is there a "plugins" field?
if (character.plugins) {
console.log("Plugins are: ", character.plugins);
Expand Down Expand Up @@ -154,13 +162,18 @@ export function getTokenForProvider(
}
}

function initializeDatabase() {
function initializeDatabase(dataDir: string) {
if (process.env.POSTGRES_URL) {
return new PostgresDatabaseAdapter({
const db = new PostgresDatabaseAdapter({
connectionString: process.env.POSTGRES_URL,
});
return db;
} else {
return new SqliteDatabaseAdapter(new Database("./db.sqlite"));
const filePath =
process.env.SQLITE_FILE ?? path.resolve(dataDir, "db.sqlite");
// ":memory:";
const db = new SqliteDatabaseAdapter(new Database(filePath));
return db;
}
}

Expand Down Expand Up @@ -203,9 +216,10 @@ export async function initializeClients(
return clients;
}

export async function createAgent(
export function createAgent(
character: Character,
db: any,
db: IDatabaseAdapter,
cache: ICacheManager,
token: string
) {
elizaLogger.success(
Expand All @@ -228,29 +242,54 @@ export async function createAgent(
actions: [],
services: [],
managers: [],
cacheManager: cache,
});
}

async function startAgent(character: Character, directClient: any) {
function intializeFsCache(baseDir: string, character: Character) {
const cacheDir = path.resolve(baseDir, character.id, "cache");

const cache = new CacheManager(new FsCacheAdapter(cacheDir));
return cache;
}

function intializeDbCache(character: Character, db: IDatabaseCacheAdapter) {
const cache = new CacheManager(new DbCacheAdapter(db, character.id));
return cache;
}

async function startAgent(character: Character, directClient: DirectClient) {
try {
character.id ??= stringToUuid(character.name);
character.username ??= character.name;

const token = getTokenForProvider(character.modelProvider, character);
const db = initializeDatabase();
const dataDir = path.join(__dirname, "../data");

const runtime = await createAgent(character, db, token);
if (!fs.existsSync(dataDir)) {
fs.mkdirSync(dataDir, { recursive: true });
}

const clients = await initializeClients(
character,
runtime as IAgentRuntime
);
const db = initializeDatabase(dataDir);

directClient.registerAgent(await runtime);
await db.init();

const cache = intializeDbCache(character, db);
const runtime = createAgent(character, db, cache, token);

await runtime.initialize();

const clients = await initializeClients(character, runtime);

directClient.registerAgent(runtime);

return clients;
} catch (error) {
console.error(
elizaLogger.error(
`Error starting agent for character ${character.name}:`,
error
);
console.error(error);
throw error;
}
}
Expand All @@ -269,7 +308,7 @@ const startAgents = async () => {

try {
for (const character of characters) {
await startAgent(character, directClient);
await startAgent(character, directClient as DirectClient);
}
} catch (error) {
elizaLogger.error("Error starting agents:", error);
Expand Down Expand Up @@ -299,9 +338,15 @@ const rl = readline.createInterface({
output: process.stdout,
});

rl.on("SIGINT", () => {
rl.close();
process.exit(0);
});

async function handleUserInput(input, agentId) {
if (input.toLowerCase() === "exit") {
rl.close();
process.exit(0);
return;
}

Expand Down

0 comments on commit ba95cdf

Please sign in to comment.