Skip to content

Commit a8e8337

Browse files
committed
implement browser runtime
1 parent ef7963f commit a8e8337

File tree

1 file changed

+33
-61
lines changed

1 file changed

+33
-61
lines changed

web-agent/src/runtime.ts

+33-61
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ import {
1010
IAgentRuntime,
1111
ModelProviderName,
1212
elizaLogger,
13-
settings,
1413
IDatabaseAdapter,
1514
Client,
1615
UUID,
@@ -23,87 +22,48 @@ import {
2322
generateMessageResponse,
2423
} from "@ai16z/eliza";
2524

26-
2725
import { bootstrapPlugin } from "@ai16z/plugin-bootstrap"
2826
import initSqlJs from 'sql.js';
2927

30-
export const wait = (minTime: number = 1000, maxTime: number = 3000) => {
31-
const waitTime =
32-
Math.floor(Math.random() * (maxTime - minTime + 1)) + minTime;
33-
return new Promise((resolve) => setTimeout(resolve, waitTime));
34-
};
35-
36-
3728
export function getTokenForProvider(
3829
provider: ModelProviderName,
3930
character: Character
4031
) {
4132
switch (provider) {
4233
case ModelProviderName.OPENAI:
43-
return (
44-
character.settings?.secrets?.OPENAI_API_KEY ||
45-
settings.OPENAI_API_KEY
46-
);
34+
return getSecret(character, "OPENAI_API_KEY")
4735
case ModelProviderName.LLAMACLOUD:
48-
return (
49-
character.settings?.secrets?.LLAMACLOUD_API_KEY ||
50-
settings.LLAMACLOUD_API_KEY ||
51-
character.settings?.secrets?.TOGETHER_API_KEY ||
52-
settings.TOGETHER_API_KEY ||
53-
character.settings?.secrets?.XAI_API_KEY ||
54-
settings.XAI_API_KEY ||
55-
character.settings?.secrets?.OPENAI_API_KEY ||
56-
settings.OPENAI_API_KEY
57-
);
36+
return findSecret(character, ["LLAMACLOUD_API_KEY", "TOGETHER_API_KEY", "XAI_API_KEY", "OPENAI_API_KEY"])
5837
case ModelProviderName.ANTHROPIC:
59-
return (
60-
character.settings?.secrets?.ANTHROPIC_API_KEY ||
61-
character.settings?.secrets?.CLAUDE_API_KEY ||
62-
settings.ANTHROPIC_API_KEY ||
63-
settings.CLAUDE_API_KEY
64-
);
38+
return findSecret(character, ["ANTHROPIC_API_KEY", "CLAUDE_API_KEY"])
6539
case ModelProviderName.REDPILL:
66-
return (
67-
character.settings?.secrets?.REDPILL_API_KEY ||
68-
settings.REDPILL_API_KEY
69-
);
40+
return getSecret(character, "REDPILL_API_KEY");
7041
case ModelProviderName.OPENROUTER:
71-
return (
72-
character.settings?.secrets?.OPENROUTER ||
73-
settings.OPENROUTER_API_KEY
74-
);
42+
return getSecret(character, "OPENROUTER_API_KEY");
7543
case ModelProviderName.GROK:
76-
return (
77-
character.settings?.secrets?.GROK_API_KEY ||
78-
settings.GROK_API_KEY
79-
);
44+
return getSecret(character, "GROK_API_KEY");
8045
case ModelProviderName.HEURIST:
81-
return (
82-
character.settings?.secrets?.HEURIST_API_KEY ||
83-
settings.HEURIST_API_KEY
84-
);
46+
return getSecret(character, "HEURIST_API_KEY");
8547
case ModelProviderName.GROQ:
86-
return (
87-
character.settings?.secrets?.GROQ_API_KEY ||
88-
settings.GROQ_API_KEY
89-
);
48+
return getSecret(character, "GROQ_API_KEY");
9049
}
9150
}
9251

93-
94-
export async function initializeClients(
95-
character: Character,
96-
runtime: IAgentRuntime
97-
) {
98-
const clients: Client[] = [];
99-
const clientTypes =
100-
character.clients?.map((str) => str.toLowerCase()) || [];
101-
102-
return clients;
52+
function findSecret(character: Character, secretKeys: string[]) {
53+
for (const secret of secretKeys) {
54+
const res = getSecret(character, secret)
55+
if (res) return res;
56+
}
10357
}
10458

10559
function getSecret(character: Character, secret: string) {
106-
return character.settings?.secrets?.[secret] || process.env[secret];
60+
return character.settings?.secrets?.[secret] || localStorage.getItem(character.id + "/secrets/" + secret);
61+
}
62+
63+
class BrowserAgentRuntime extends AgentRuntime {
64+
getSetting(key: string) {
65+
return getSecret(this.character, key);
66+
}
10767
}
10868

10969
export function createAgent(
@@ -118,7 +78,7 @@ export function createAgent(
11878
character.name
11979
);
12080

121-
return new AgentRuntime({
81+
return new BrowserAgentRuntime({
12282
databaseAdapter: db,
12383
token,
12484
modelProvider: character.modelProvider,
@@ -135,6 +95,18 @@ export function createAgent(
13595
});
13696
}
13797

98+
async function initializeClients(
99+
character: Character,
100+
runtime: IAgentRuntime
101+
) {
102+
const clients: Client[] = [];
103+
const clientTypes =
104+
character.clients?.map((str) => str.toLowerCase()) || [];
105+
106+
return clients;
107+
}
108+
109+
138110
async function initializeDatabase() {
139111
const SQL = await initSqlJs({
140112
// Required to load the wasm binary asynchronously. Of course, you can host it wherever you want

0 commit comments

Comments
 (0)