Skip to content

Commit 0508c2d

Browse files
committed
feat: add support for redis cache
1 parent 5b18091 commit 0508c2d

File tree

1 file changed

+52
-7
lines changed

1 file changed

+52
-7
lines changed

agent/src/index.ts

+52-7
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,9 @@ import {
2424
settings,
2525
stringToUuid,
2626
validateCharacterConfig,
27+
CacheStore,
2728
} from "@ai16z/eliza";
29+
import { RedisClient } from "@ai16z/adapter-redis";
2830
import { zgPlugin } from "@ai16z/plugin-0g";
2931
import { bootstrapPlugin } from "@ai16z/plugin-bootstrap";
3032
import createGoatPlugin from "@ai16z/plugin-goat";
@@ -210,11 +212,11 @@ export async function loadCharacters(
210212
export function getTokenForProvider(
211213
provider: ModelProviderName,
212214
character: Character
213-
):string {
215+
): string {
214216
switch (provider) {
215217
// no key needed for llama_local
216218
case ModelProviderName.LLAMALOCAL:
217-
return ''
219+
return "";
218220
case ModelProviderName.OPENAI:
219221
return (
220222
character.settings?.secrets?.OPENAI_API_KEY ||
@@ -310,9 +312,9 @@ export function getTokenForProvider(
310312
settings.AKASH_CHAT_API_KEY
311313
);
312314
default:
313-
const errorMessage = `Failed to get token - unsupported model provider: ${provider}`
314-
elizaLogger.error(errorMessage)
315-
throw new Error(errorMessage)
315+
const errorMessage = `Failed to get token - unsupported model provider: ${provider}`;
316+
elizaLogger.error(errorMessage);
317+
throw new Error(errorMessage);
316318
}
317319
}
318320

@@ -402,7 +404,6 @@ export async function initializeClients(
402404
// TODO: Add Slack client to the list
403405
// Initialize clients as an object
404406

405-
406407
if (clientTypes.includes("slack")) {
407408
const slackClient = await SlackClientInterface.start(runtime);
408409
if (slackClient) clients.slack = slackClient; // Use object property instead of push
@@ -583,6 +584,45 @@ function initializeDbCache(character: Character, db: IDatabaseCacheAdapter) {
583584
return cache;
584585
}
585586

587+
function initializeCache(
588+
cacheStore: string,
589+
character: Character,
590+
baseDir?: string,
591+
db?: IDatabaseCacheAdapter
592+
) {
593+
switch (cacheStore) {
594+
case CacheStore.REDIS:
595+
if (process.env.REDIS_URL) {
596+
elizaLogger.info("Connecting to Redis...");
597+
const redisClient = new RedisClient(process.env.REDIS_URL);
598+
return new CacheManager(
599+
new DbCacheAdapter(redisClient, character.id) // Using DbCacheAdapter since RedisClient also implements IDatabaseCacheAdapter
600+
);
601+
} else {
602+
throw new Error("REDIS_URL environment variable is not set.");
603+
}
604+
605+
case CacheStore.DATABASE:
606+
if (db) {
607+
elizaLogger.info("Using Database Cache...");
608+
return initializeDbCache(character, db);
609+
} else {
610+
throw new Error(
611+
"Database adapter is not provided for CacheStore.Database."
612+
);
613+
}
614+
615+
case CacheStore.FILESYSTEM:
616+
elizaLogger.info("Using File System Cache...");
617+
return initializeFsCache(baseDir, character);
618+
619+
default:
620+
throw new Error(
621+
`Invalid cache store: ${cacheStore} or required configuration missing.`
622+
);
623+
}
624+
}
625+
586626
async function startAgent(
587627
character: Character,
588628
directClient: DirectClient
@@ -604,7 +644,12 @@ async function startAgent(
604644

605645
await db.init();
606646

607-
const cache = initializeDbCache(character, db);
647+
const cache = initializeCache(
648+
process.env.CACHE_STORE,
649+
character,
650+
"",
651+
db
652+
); // "" should be replaced with dir for file system caching. THOUGHTS: might probably make this into an env
608653
const runtime: AgentRuntime = await createAgent(
609654
character,
610655
db,

0 commit comments

Comments
 (0)