Skip to content

Commit e783ed5

Browse files
authored
Merge branch 'develop' into refactor-websearch
2 parents 629fccc + b8cb35f commit e783ed5

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

44 files changed

+7624
-46
lines changed

.gitignore

+1-1
Original file line numberDiff line numberDiff line change
@@ -60,4 +60,4 @@ agent/content
6060

6161
eliza.manifest
6262
eliza.manifest.sgx
63-
eliza.sig
63+
eliza.sig

README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212

1313
## 🌍 README Translations
1414

15-
[中文说明](./README_CN.md) | [日本語の説明](./README_JA.md) | [한국어 설명](./README_KOR.md) | [Persian](./README_FA.md) | [Français](./README_FR.md) | [Português](./README_PTBR.md) | [Türkçe](./README_TR.md) | [Русский](./README_RU.md) | [Español](./README_ES.md) | [Italiano](./README_IT.md) | [ไทย](./README_TH.md) | [Deutsch](./README_DE.md) | [Tiếng Việt](./README_VI.md) | [עִברִית](https://github.com/elizaos/Elisa/blob/main/README_HE.md) | [Tagalog](./README_TG.md) | [Polski](./README_PL.md) | [Arabic](./README_AR.md) | [Hungarian](./README_HU.md) | [Srpski](./README_RS.md) | [Română](./README_RO.md) | [Nederlands](./README_NL.md)
15+
[中文说明](./README_CN.md) | [日本語の説明](./README_JA.md) | [한국어 설명](./README_KOR.md) | [Persian](./README_FA.md) | [Français](./README_FR.md) | [Português](./README_PTBR.md) | [Türkçe](./README_TR.md) | [Русский](./README_RU.md) | [Español](./README_ES.md) | [Italiano](./README_IT.md) | [ไทย](./README_TH.md) | [Deutsch](./README_DE.md) | [Tiếng Việt](./README_VI.md) | [עִברִית](https://github.com/elizaos/Elisa/blob/main/README_HE.md) | [Tagalog](./README_TG.md) | [Polski](./README_PL.md) | [Arabic](./README_AR.md) | [Hungarian](./README_HU.md) | [Srpski](./README_RS.md) | [Română](./README_RO.md) | [Nederlands](./README_NL.md) | [Ελληνικά](./README_GR.md)
1616

1717
## 🚩 Overview
1818

README_GR.md

+148
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,148 @@
1+
# Eliza 🤖
2+
3+
<div align="center">
4+
<img src="./docs/static/img/eliza_banner.jpg" alt="Eliza Banner" width="100%" />
5+
</div>
6+
7+
<div align="center">
8+
9+
📖 [Τεκμηρίωση](https://elizaos.github.io/eliza/) | 🎯 [Παραδείγματα](https://github.com/thejoven/awesome-eliza)
10+
11+
</div>
12+
13+
## 🌍 Μεταφράσεις README
14+
[中文说明](./README_CN.md) | [日本語の説明](./README_JA.md) | [한국어 설명](./README_KOR.md) | [Persian](./README_FA.md) | [Français](./README_FR.md) | [Português](./README_PTBR.md) | [Türkçe](./README_TR.md) | [Русский](./README_RU.md) | [Español](./README_ES.md) | [Italiano](./README_IT.md) | [ไทย](./README_TH.md) | [Deutsch](./README_DE.md) | [Tiếng Việt](./README_VI.md) | [עִברִית](https://github.com/elizaos/Elisa/blob/main/README_HE.md) | [Tagalog](./README_TG.md) | [Polski](./README_PL.md) | [Arabic](./README_AR.md) | [Hungarian](./README_HU.md) | [Srpski](./README_RS.md) | [Română](./README_RO.md) | [Nederlands](./README_NL.md) | [Ελληνικά](./README_GR.md)
15+
16+
## 🚩 Επισκόπηση
17+
<div align="center">
18+
<img src="./docs/static/img/eliza_diagram.png" alt="Eliza Diagram" width="100%" />
19+
</div>
20+
21+
## ✨ Χαρακτηριστικά
22+
23+
- 🛠️ Πλήρεις συνδέσεις για Discord, Twitter και Telegram
24+
- 🔗 Υποστήριξη για κάθε μοντέλο (Llama, Grok, OpenAI, Anthropic, κ.λπ.)
25+
- 👥 Υποστήριξη πολλών πρακτόρων και δωματίων
26+
- 📚 Εύκολη ενσωμάτωση και αλληλεπίδραση με τα έγγραφά σας
27+
- 💾 Ανακτήσιμη μνήμη και αποθήκευση εγγράφων
28+
- 🚀 Εξαιρετικά επεκτάσιμο - δημιουργήστε τις δικές σας δράσεις και πελάτες
29+
- ☁️ Υποστήριξη για πολλά μοντέλα (τοπικά Llama, OpenAI, Anthropic, Groq, κ.λπ.)
30+
- 📦 Έτοιμο για χρήση!
31+
32+
[Σχολείο για προγραμματιστές για Πράκτορες Τεχνητής Νοημοσύνης (ΑΙ)](https://www.youtube.com/watch?v=ArptLpQiKfI&list=PLx5pnFXdPTRzWla0RaOxALTSTnVq53fKL)
33+
34+
## 🎯 Περιτπώσεις για χρήση
35+
36+
- 🤖 Chatbots
37+
- 🕵️ Αυτόνομοι πράκτορες
38+
- 📈 Διαχείριση επιχειρηματικών διαδικασιών
39+
- 🎮 NPC σε βιντεοπαιχνίδια
40+
- 🧠 Trading
41+
- 🚀 Γρήγορη Εκκίνηση
42+
43+
44+
## 🚀 Γρήγορη Εκκίνηση
45+
46+
## Προαπαιτούμενα
47+
48+
- [Python 2.7+](https://www.python.org/downloads/)
49+
- [Node.js 23+](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm)
50+
- [pnpm](https://pnpm.io/installation)
51+
52+
> **Σημείωση για χρήστες Windows:** Απαιτείται [WSL 2](https://learn.microsoft.com/en-us/windows/wsl/install-manual).
53+
54+
### Πως να ξεκινήσετε (Συνιστάται)
55+
56+
```bash
57+
git clone https://github.com/elizaos/eliza-starter.git
58+
cd eliza-starter
59+
cp .env.example .env
60+
pnpm i && pnpm build && pnpm start
61+
```
62+
63+
Μόλις ο πράκτορας ξεκινήσει, θα δείτε ένα μήνυμα να εκτελέσετε ```pnpm start:client```.
64+
Ανοίξτε ένα νέο τερματικό, μεταβείτε στον ίδιο κατάλογο και εκτελέστε την παρακάτω εντολή:
65+
66+
```bash
67+
pnpm start:client
68+
```
69+
70+
Έπειτα διαβάστε την [Τεκμηρίωση]((https://elizaos.github.io/eliza/)) για να μάθετε πώς να προσαρμόσετε το Eliza.
71+
72+
### Χειροκίνητη Εκκίνηση του Eliza (Μόνο για προχωρημένους χρήστες)
73+
74+
```bash
75+
# Κλωνοποίηση του αποθετηρίου
76+
git clone https://github.com/elizaos/eliza.git
77+
78+
# Έλεγχος της τελευταίας έκδοσης
79+
# Αυτό το έργο εξελίσσεται γρήγορα, οπότε συνιστούμε να ελέγξετε την τελευταία έκδοση
80+
git checkout $(git describe --tags --abbrev=0)
81+
# Αν το παραπάνω δεν ελέγξει την τελευταία έκδοση, αυτό θα πρέπει να λειτουργήσει:
82+
# git checkout $(git describe --tags `git rev-list --tags --max-count=1`)
83+
```
84+
85+
### Εκκίνηση του Eliza με το Gitpod
86+
87+
[![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/elizaos/eliza/tree/main)
88+
### Τροποποιήστε το .env αρχείο
89+
90+
Αντιγράψτε το αρχείο .env.example σε ένα νέο αρχείο .env και συμπληρώστε τις παραμέτρους που χρειάζεστε.
91+
92+
```
93+
cp .env.example .env
94+
```
95+
96+
Σημείωση: Το .env είναι προαιρετικό. Αν σχεδιάζετε να τρέξετε πολλούς διαφορετικούς πράκτορες, μπορείτε να περάσετε τα secrets μέσω του JSON της χαρακτήρα.
97+
98+
### Αυτόματη Εκκίνηση του Eliza
99+
100+
Αυτό θα εκτελέσει όλα τα απαραίτητα βήματα για να ρυθμίσετε το έργο και να ξεκινήσετε το bot με τον προεπιλεγμένο χαρακτήρα.
101+
102+
```bash
103+
sh scripts/start.sh
104+
```
105+
106+
### Τροποποίηση του αρχείου σχετικού με τον χαρακτήρα
107+
108+
1. Ανοίξτε το `packages/core/src/defaultCharacter.ts` για να τροποποιήσετε τον προεπιλεγμένο χαρακτήρα. Αποσχολιάστε και επεξεργαστείτε.
109+
110+
2. Για να φορτώσετε προσαρμοσμένους χαρακτήρες:
111+
- Χρησιμοποιήστε `pnpm start --characters="path/to/your/character.json"`
112+
- Πολλά αρχεία χαρακτήρων μπορούν να φορτωθούν ταυτόχρονα
113+
114+
3. Σύνδεση με το X (Twitter)
115+
αλλάξτε `"clients": []` σε `"clients": ["twitter"]` στο αρχείο χαρακτήρα για να συνδεθείτε με το X
116+
117+
### Χειροκίνητη Εκκίνηση του Eliza
118+
119+
```bash
120+
pnpm i
121+
pnpm build
122+
pnpm start
123+
124+
# Το έργο εξελίσσεται γρήγορα, μερικές φορές πρέπει να καθαρίσετε το έργο, εαν επιστρέφετε στο έργο
125+
```
126+
127+
#### Επιπλέον Πληροφορίες
128+
129+
Μπορεί να χρειαστεί να εγκαταστήσετε το Sharp. Αν αντιμετωπίζετε προβλήματα, προσπαθήστε να το εγκαταστήσετε, εκτελώντας την παρακάτω εντολή:
130+
131+
```
132+
pnpm install --include=optional sharp
133+
```
134+
135+
### Κοινότητα & Επικοινωνία
136+
137+
- [Προβλήματα στο GitHub](https://github.com/elizaos/eliza/issues). Καλύτερο για: Προβλήματα που αντιμετωπίζετε με το Eliza, και για προτάσεις βελτίωσης.
138+
- [Discord](https://discord.gg/ai16z). Καλύτερο για: Κοινοποίηση των εφαρμογών σας και συνομιλία με την κοινότητα.
139+
140+
## Συνεισφορές
141+
142+
<a href="https://github.com/elizaos/eliza/graphs/contributors">
143+
<img src="https://contrib.rocks/image?repo=elizaos/eliza" />
144+
</a>
145+
146+
## Ιστορικό Αστεριών
147+
148+
[![Star History Chart](https://api.star-history.com/svg?repos=elizaos/eliza&type=Date)](https://star-history.com/#elizaos/eliza&Date)

agent/package.json

+1
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@
9292
"@elizaos/plugin-hyperliquid": "workspace:*",
9393
"@elizaos/plugin-akash": "workspace:*",
9494
"@elizaos/plugin-quai": "workspace:*",
95+
"@elizaos/plugin-nft-collections": "workspace:*",
9596
"readline": "1.3.0",
9697
"ws": "8.18.0",
9798
"yargs": "17.7.2"

agent/src/index.ts

+66-36
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,8 @@ import net from "net";
101101
import path from "path";
102102
import { fileURLToPath } from "url";
103103
import yargs from "yargs";
104+
import createNFTCollectionsPlugin from "@elizaos/plugin-nft-collections";
105+
104106

105107
const __filename = fileURLToPath(import.meta.url); // get the resolved path to the file
106108
const __dirname = path.dirname(__filename); // get the name of the directory
@@ -150,14 +152,29 @@ function tryLoadFile(filePath: string): string | null {
150152
function mergeCharacters(base: Character, child: Character): Character {
151153
const mergeObjects = (baseObj: any, childObj: any) => {
152154
const result: any = {};
153-
const keys = new Set([...Object.keys(baseObj || {}), ...Object.keys(childObj || {})]);
154-
keys.forEach(key => {
155-
if (typeof baseObj[key] === 'object' && typeof childObj[key] === 'object' && !Array.isArray(baseObj[key]) && !Array.isArray(childObj[key])) {
155+
const keys = new Set([
156+
...Object.keys(baseObj || {}),
157+
...Object.keys(childObj || {}),
158+
]);
159+
keys.forEach((key) => {
160+
if (
161+
typeof baseObj[key] === "object" &&
162+
typeof childObj[key] === "object" &&
163+
!Array.isArray(baseObj[key]) &&
164+
!Array.isArray(childObj[key])
165+
) {
156166
result[key] = mergeObjects(baseObj[key], childObj[key]);
157-
} else if (Array.isArray(baseObj[key]) || Array.isArray(childObj[key])) {
158-
result[key] = [...(baseObj[key] || []), ...(childObj[key] || [])];
167+
} else if (
168+
Array.isArray(baseObj[key]) ||
169+
Array.isArray(childObj[key])
170+
) {
171+
result[key] = [
172+
...(baseObj[key] || []),
173+
...(childObj[key] || []),
174+
];
159175
} else {
160-
result[key] = childObj[key] !== undefined ? childObj[key] : baseObj[key];
176+
result[key] =
177+
childObj[key] !== undefined ? childObj[key] : baseObj[key];
161178
}
162179
});
163180
return result;
@@ -172,32 +189,36 @@ async function loadCharacter(filePath: string): Promise<Character> {
172189
let character = JSON.parse(content);
173190
validateCharacterConfig(character);
174191

175-
// .id isn't really valid
176-
const characterId = character.id || character.name;
177-
const characterPrefix = `CHARACTER.${characterId.toUpperCase().replace(/ /g, "_")}.`;
178-
const characterSettings = Object.entries(process.env)
179-
.filter(([key]) => key.startsWith(characterPrefix))
180-
.reduce((settings, [key, value]) => {
181-
const settingKey = key.slice(characterPrefix.length);
182-
return { ...settings, [settingKey]: value };
183-
}, {});
184-
if (Object.keys(characterSettings).length > 0) {
185-
character.settings = character.settings || {};
186-
character.settings.secrets = {
187-
...characterSettings,
188-
...character.settings.secrets,
189-
};
190-
}
191-
// Handle plugins
192-
character.plugins = await handlePluginImporting(
193-
character.plugins
194-
);
192+
// .id isn't really valid
193+
const characterId = character.id || character.name;
194+
const characterPrefix = `CHARACTER.${characterId.toUpperCase().replace(/ /g, "_")}.`;
195+
const characterSettings = Object.entries(process.env)
196+
.filter(([key]) => key.startsWith(characterPrefix))
197+
.reduce((settings, [key, value]) => {
198+
const settingKey = key.slice(characterPrefix.length);
199+
return { ...settings, [settingKey]: value };
200+
}, {});
201+
if (Object.keys(characterSettings).length > 0) {
202+
character.settings = character.settings || {};
203+
character.settings.secrets = {
204+
...characterSettings,
205+
...character.settings.secrets,
206+
};
207+
}
208+
// Handle plugins
209+
character.plugins = await handlePluginImporting(character.plugins);
195210
if (character.extends) {
196-
elizaLogger.info(`Merging ${character.name} character with parent characters`);
211+
elizaLogger.info(
212+
`Merging ${character.name} character with parent characters`
213+
);
197214
for (const extendPath of character.extends) {
198-
const baseCharacter = await loadCharacter(path.resolve(path.dirname(filePath), extendPath));
215+
const baseCharacter = await loadCharacter(
216+
path.resolve(path.dirname(filePath), extendPath)
217+
);
199218
character = mergeCharacters(baseCharacter, character);
200-
elizaLogger.info(`Merged ${character.name} with ${baseCharacter.name}`);
219+
elizaLogger.info(
220+
`Merged ${character.name} with ${baseCharacter.name}`
221+
);
201222
}
202223
}
203224
return character;
@@ -470,7 +491,9 @@ function initializeDatabase(dataDir: string) {
470491
// Test the connection
471492
db.init()
472493
.then(() => {
473-
elizaLogger.success("Successfully connected to Supabase database");
494+
elizaLogger.success(
495+
"Successfully connected to Supabase database"
496+
);
474497
})
475498
.catch((error) => {
476499
elizaLogger.error("Failed to connect to Supabase:", error);
@@ -487,7 +510,9 @@ function initializeDatabase(dataDir: string) {
487510
// Test the connection
488511
db.init()
489512
.then(() => {
490-
elizaLogger.success("Successfully connected to PostgreSQL database");
513+
elizaLogger.success(
514+
"Successfully connected to PostgreSQL database"
515+
);
491516
})
492517
.catch((error) => {
493518
elizaLogger.error("Failed to connect to PostgreSQL:", error);
@@ -502,14 +527,17 @@ function initializeDatabase(dataDir: string) {
502527
});
503528
return db;
504529
} else {
505-
const filePath = process.env.SQLITE_FILE ?? path.resolve(dataDir, "db.sqlite");
530+
const filePath =
531+
process.env.SQLITE_FILE ?? path.resolve(dataDir, "db.sqlite");
506532
elizaLogger.info(`Initializing SQLite database at ${filePath}...`);
507533
const db = new SqliteDatabaseAdapter(new Database(filePath));
508534

509535
// Test the connection
510536
db.init()
511537
.then(() => {
512-
elizaLogger.success("Successfully connected to SQLite database");
538+
elizaLogger.success(
539+
"Successfully connected to SQLite database"
540+
);
513541
})
514542
.catch((error) => {
515543
elizaLogger.error("Failed to connect to SQLite:", error);
@@ -687,7 +715,8 @@ export async function createAgent(
687715
if (
688716
process.env.PRIMUS_APP_ID &&
689717
process.env.PRIMUS_APP_SECRET &&
690-
process.env.VERIFIABLE_INFERENCE_ENABLED === "true"){
718+
process.env.VERIFIABLE_INFERENCE_ENABLED === "true"
719+
) {
691720
verifiableInferenceAdapter = new PrimusAdapter({
692721
appId: process.env.PRIMUS_APP_ID,
693722
appSecret: process.env.PRIMUS_APP_SECRET,
@@ -849,8 +878,9 @@ export async function createAgent(
849878
getSecret(character, "AKASH_WALLET_ADDRESS")
850879
? akashPlugin
851880
: null,
852-
getSecret(character, "QUAI_PRIVATE_KEY")
853-
? quaiPlugin
881+
getSecret(character, "QUAI_PRIVATE_KEY") ? quaiPlugin : null,
882+
getSecret(character, "RESERVOIR_API_KEY")
883+
? createNFTCollectionsPlugin()
854884
: null,
855885
].filter(Boolean),
856886
providers: [],

package.json

+7-6
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
"devDependencies": {
2828
"@commitlint/cli": "18.6.1",
2929
"@commitlint/config-conventional": "18.6.3",
30+
"@types/jest": "^29.5.11",
3031
"@typescript-eslint/eslint-plugin": "8.16.0",
3132
"@typescript-eslint/parser": "8.16.0",
3233
"@vitest/eslint-plugin": "1.1.13",
@@ -35,18 +36,17 @@
3536
"eslint": "9.16.0",
3637
"eslint-config-prettier": "9.1.0",
3738
"husky": "9.1.7",
39+
"jest": "^29.7.0",
3840
"lerna": "8.1.5",
3941
"only-allow": "1.2.1",
4042
"prettier": "3.4.1",
43+
"ts-jest": "^29.1.1",
4144
"turbo": "2.3.3",
4245
"typedoc": "0.26.11",
4346
"typescript": "5.6.3",
44-
"vite": "5.4.11",
45-
"vitest": "2.1.5",
4647
"viem": "2.21.58",
47-
"ts-jest": "^29.1.1",
48-
"@types/jest": "^29.5.11",
49-
"jest": "^29.7.0"
48+
"vite": "5.4.11",
49+
"vitest": "2.1.5"
5050
},
5151
"pnpm": {
5252
"overrides": {
@@ -64,6 +64,7 @@
6464
"@vitest/eslint-plugin": "1.0.1",
6565
"amqplib": "0.10.5",
6666
"csv-parse": "5.6.0",
67+
"langdetect": "^0.2.1",
6768
"ollama-ai-provider": "0.16.1",
6869
"optional": "0.1.4",
6970
"pnpm": "9.14.4",
@@ -74,4 +75,4 @@
7475
"workspaces": [
7576
"packages/*"
7677
]
77-
}
78+
}

packages/core/src/types.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1533,4 +1533,4 @@ export enum TranscriptionProvider {
15331533
export enum ActionTimelineType {
15341534
ForYou = "foryou",
15351535
Following = "following",
1536-
}
1536+
}

0 commit comments

Comments
 (0)