Skip to content

Commit 60116c5

Browse files
authored
Merge pull request #2281 from v1xingyue/character-from-url
feat: support load character from character_url
2 parents 4d42de6 + caacc61 commit 60116c5

File tree

2 files changed

+40
-9
lines changed

2 files changed

+40
-9
lines changed

.env.example

+4
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,10 @@ SERVER_PORT=3000
1414
SUPABASE_URL=
1515
SUPABASE_ANON_KEY=
1616

17+
# Remote character url (optional)
18+
REMOTE_CHARACTER_URL=
19+
20+
1721
###############################
1822
#### Client Configurations ####
1923
###############################

agent/src/index.ts

+36-9
Original file line numberDiff line numberDiff line change
@@ -184,12 +184,17 @@ function mergeCharacters(base: Character, child: Character): Character {
184184
};
185185
return mergeObjects(base, child);
186186
}
187-
async function loadCharacter(filePath: string): Promise<Character> {
188-
const content = tryLoadFile(filePath);
189-
if (!content) {
190-
throw new Error(`Character file not found: ${filePath}`);
191-
}
192-
let character = JSON.parse(content);
187+
188+
async function loadCharacterFromUrl(url: string): Promise<Character> {
189+
const response = await fetch(url);
190+
const character = await response.json();
191+
return jsonToCharacter(url, character);
192+
}
193+
194+
async function jsonToCharacter(
195+
filePath: string,
196+
character: any
197+
): Promise<Character> {
193198
validateCharacterConfig(character);
194199

195200
// .id isn't really valid
@@ -227,6 +232,15 @@ async function loadCharacter(filePath: string): Promise<Character> {
227232
return character;
228233
}
229234

235+
async function loadCharacter(filePath: string): Promise<Character> {
236+
const content = tryLoadFile(filePath);
237+
if (!content) {
238+
throw new Error(`Character file not found: ${filePath}`);
239+
}
240+
let character = JSON.parse(content);
241+
return jsonToCharacter(filePath, character);
242+
}
243+
230244
export async function loadCharacters(
231245
charactersArg: string
232246
): Promise<Character[]> {
@@ -305,6 +319,16 @@ export async function loadCharacters(
305319
}
306320

307321
if (loadedCharacters.length === 0) {
322+
if (
323+
process.env.REMOTE_CHARACTER_URL != "" &&
324+
process.env.REMOTE_CHARACTER_URL.startsWith("http")
325+
) {
326+
const character = await loadCharacterFromUrl(
327+
process.env.REMOTE_CHARACTER_URL
328+
);
329+
loadedCharacters.push(character);
330+
}
331+
308332
elizaLogger.info("No characters found, using default character");
309333
loadedCharacters.push(defaultCharacter);
310334
}
@@ -1116,14 +1140,17 @@ startAgents().catch((error) => {
11161140
});
11171141

11181142
// Prevent unhandled exceptions from crashing the process if desired
1119-
if (process.env.PREVENT_UNHANDLED_EXIT && parseBooleanFromText(process.env.PREVENT_UNHANDLED_EXIT)) {
1143+
if (
1144+
process.env.PREVENT_UNHANDLED_EXIT &&
1145+
parseBooleanFromText(process.env.PREVENT_UNHANDLED_EXIT)
1146+
) {
11201147
// Handle uncaught exceptions to prevent the process from crashing
1121-
process.on('uncaughtException', function(err) {
1148+
process.on("uncaughtException", function (err) {
11221149
console.error("uncaughtException", err);
11231150
});
11241151

11251152
// Handle unhandled rejections to prevent the process from crashing
1126-
process.on('unhandledRejection', function(err) {
1153+
process.on("unhandledRejection", function (err) {
11271154
console.error("unhandledRejection", err);
11281155
});
11291156
}

0 commit comments

Comments
 (0)