Skip to content

Commit faaa373

Browse files
authored
Merge branch 'elizaOS:develop' into develop
2 parents ceac6e9 + 0afde97 commit faaa373

File tree

346 files changed

+63091
-2270
lines changed

Some content is hidden

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

346 files changed

+63091
-2270
lines changed

.env.example

+45-1
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,13 @@ WHATSAPP_BUSINESS_ACCOUNT_ID= # Business Account ID from Facebook Business Mana
8080
WHATSAPP_WEBHOOK_VERIFY_TOKEN= # Custom string for webhook verification
8181
WHATSAPP_API_VERSION=v17.0 # WhatsApp API version (default: v17.0)
8282

83+
84+
# Simsai Specific Configuration
85+
SIMSAI_API_KEY= # API key for SimsAI authentication
86+
SIMSAI_AGENT_ID= # Unique identifier for the SimsAI agent
87+
SIMSAI_USERNAME= # Username for SimsAI platform access
88+
SIMSAI_DRY_RUN= # Set to true to test without making actual API calls
89+
8390
# Direct Client Setting
8491
EXPRESS_MAX_PAYLOAD= # Default: 100kb
8592

@@ -612,6 +619,16 @@ DEEPGRAM_API_KEY=
612619
VERIFIABLE_INFERENCE_ENABLED=false # Set to false to disable verifiable inference
613620
VERIFIABLE_INFERENCE_PROVIDER=opacity # Options: opacity
614621

622+
# Qdrant
623+
# URL of your Qdrant instance (e.g., https://your-instance.qdrant.tech)
624+
QDRANT_URL=
625+
# API key for authentication (optional for local instances)
626+
QDRANT_KEY=
627+
# Qdrant service port (default: 443 for cloud, typically 6333 for local)
628+
QDRANT_PORT=443
629+
# Vector size matching your embedding model (default: 1536 for OpenAI embeddings)
630+
QDRANT_VECTOR_SIZE=1536
631+
615632
# Autonome Configuration
616633
AUTONOME_JWT_TOKEN=
617634
AUTONOME_RPC=https://wizard-bff-rpc.alt.technology/v1/bff/aaa/apps
@@ -660,11 +677,13 @@ AKASH_MANIFEST_MODE=auto
660677
AKASH_MANIFEST_PATH=
661678
# Values: "strict" | "lenient" | "none" - Default: "strict"
662679
AKASH_MANIFEST_VALIDATION_LEVEL=strict
663-
664680
# Quai Network Ecosystem
665681
QUAI_PRIVATE_KEY=
666682
QUAI_RPC_URL=https://rpc.quai.network
667683

684+
# Chainbase
685+
CHAINBASE_API_KEY=demo # demo is a free tier key
686+
668687
# 0x
669688
ZERO_EX_API_KEY=
670689
ALCHEMY_HTTP_TRANSPORT_URL=
@@ -777,3 +796,28 @@ EMAIL_INCOMING_HOST=imap.example.com
777796
EMAIL_INCOMING_PORT=993 # Default port for secure IMAP
778797
EMAIL_INCOMING_USER=
779798
EMAIL_INCOMING_PASS=
799+
800+
801+
# Omniflix
802+
OMNIFLIX_API_URL= # https://rest.omniflix.network
803+
OMNIFLIX_MNEMONIC= # your mnemonic 12 words or 24 words
804+
OMNIFLIX_RPC_ENDPOINT= # https://rpc.omniflix.network
805+
OMNIFLIX_PRIVATE_KEY= # your private key
806+
807+
# Suno AI Music Generation
808+
SUNO_API_KEY=
809+
810+
# Udio AI Music Generation
811+
UDIO_AUTH_TOKEN=
812+
813+
# ####################################
814+
# #### Hyperbolic Configuration ####
815+
# ####################################
816+
HYPERBOLIC_ENV=production
817+
HYPERBOLIC_API_KEY=
818+
HYPERBOLIC_GRANULAR_LOG=true
819+
HYPERBOLIC_SPASH=true
820+
HYPERBOLIC_LOG_LEVEL=debug
821+
822+
# Football Plugin Configuration
823+
FOOTBALL_API_KEY= # API key from Football-Data.org (https://www.football-data.org/)

Dockerfile

+2
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,8 @@ WORKDIR /app
6262
# Copy built artifacts and production dependencies from the builder stage
6363
COPY --from=builder /app/package.json ./
6464
COPY --from=builder /app/pnpm-workspace.yaml ./
65+
COPY --from=builder /app/eslint.config.mjs ./
66+
COPY --from=builder /app/.eslintrc.json ./
6567
COPY --from=builder /app/.npmrc ./
6668
COPY --from=builder /app/turbo.json ./
6769
COPY --from=builder /app/node_modules ./node_modules

agent/package.json

+11-2
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
"@elizaos/adapter-redis": "workspace:*",
2424
"@elizaos/adapter-sqlite": "workspace:*",
2525
"@elizaos/adapter-pglite": "workspace:*",
26+
"@elizaos/adapter-qdrant": "workspace:*",
2627
"@elizaos/client-auto": "workspace:*",
2728
"@elizaos/client-direct": "workspace:*",
2829
"@elizaos/client-discord": "workspace:*",
@@ -32,6 +33,7 @@
3233
"@elizaos/client-twitter": "workspace:*",
3334
"@elizaos/client-instagram": "workspace:*",
3435
"@elizaos/client-slack": "workspace:*",
36+
"@elizaos/client-simsai":"workspace:*",
3537
"@elizaos/core": "workspace:*",
3638
"@elizaos/plugin-0g": "workspace:*",
3739
"@elizaos/plugin-abstract": "workspace:*",
@@ -114,9 +116,15 @@
114116
"@elizaos/plugin-router-nitro": "workspace:*",
115117
"@elizaos/plugin-nvidia-nim": "workspace:*",
116118
"@elizaos/plugin-0x": "workspace:*",
119+
"@elizaos/plugin-chainbase": "workspace:*",
117120
"@elizaos/plugin-dkg": "workspace:*",
118121
"@elizaos/plugin-email": "workspace:*",
119-
"readline": "1.3.0",
122+
"@elizaos/plugin-omniflix": "workspace:*",
123+
"@elizaos/plugin-suno": "workspace:*",
124+
"@elizaos/plugin-udio": "workspace:*",
125+
"@elizaos/plugin-hyperbolic": "workspace:*",
126+
"@elizaos/plugin-football": "workspace:*",
127+
"readline": "1.3.0",
120128
"ws": "8.18.0",
121129
"yargs": "17.7.2"
122130
},
@@ -127,4 +135,5 @@
127135
"ts-node": "10.9.2",
128136
"tsup": "8.3.5"
129137
}
130-
}
138+
}
139+

agent/src/index.ts

+47-12
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { PGLiteDatabaseAdapter } from "@elizaos/adapter-pglite";
22
import { PostgresDatabaseAdapter } from "@elizaos/adapter-postgres";
3+
import { QdrantDatabaseAdapter } from "@elizaos/adapter-qdrant";
34
import { RedisClient } from "@elizaos/adapter-redis";
45
import { SqliteDatabaseAdapter } from "@elizaos/adapter-sqlite";
56
import { SupabaseDatabaseAdapter } from "@elizaos/adapter-supabase";
@@ -11,9 +12,12 @@ import { SlackClientInterface } from "@elizaos/client-slack";
1112
import { TelegramClientInterface } from "@elizaos/client-telegram";
1213
import { TwitterClientInterface } from "@elizaos/client-twitter";
1314
import { FarcasterClientInterface } from "@elizaos/client-farcaster";
15+
import { OmniflixPlugin } from "@elizaos/plugin-omniflix";
16+
import { JeeterClientInterface } from "@elizaos/client-simsai";
17+
1418
import { DirectClient } from "@elizaos/client-direct";
1519
import { agentKitPlugin } from "@elizaos/plugin-agentkit";
16-
// import { ReclaimAdapter } from "@elizaos/plugin-reclaim";
20+
1721
import { PrimusAdapter } from "@elizaos/plugin-primus";
1822
import { lightningPlugin } from "@elizaos/plugin-lightning";
1923
import { elizaCodeinPlugin, onchainJson } from "@elizaos/plugin-iq6900";
@@ -40,6 +44,7 @@ import {
4044
validateCharacterConfig,
4145
} from "@elizaos/core";
4246
import { zgPlugin } from "@elizaos/plugin-0g";
47+
import { footballPlugin } from "@elizaos/plugin-football";
4348

4449
import { bootstrapPlugin } from "@elizaos/plugin-bootstrap";
4550
import { normalizeCharacter } from "@elizaos/plugin-di";
@@ -114,19 +119,20 @@ import { pythDataPlugin } from "@elizaos/plugin-pyth-data";
114119
import { openaiPlugin } from "@elizaos/plugin-openai";
115120
import nitroPlugin from "@elizaos/plugin-router-nitro";
116121
import { devinPlugin } from "@elizaos/plugin-devin";
117-
118122
import { zksyncEraPlugin } from "@elizaos/plugin-zksync-era";
119-
123+
import { chainbasePlugin } from "@elizaos/plugin-chainbase";
120124
import { nvidiaNimPlugin } from "@elizaos/plugin-nvidia-nim";
121-
122125
import { zxPlugin } from "@elizaos/plugin-0x";
126+
import { hyperbolicPlugin } from "@elizaos/plugin-hyperbolic";
123127
import Database from "better-sqlite3";
124128
import fs from "fs";
125129
import net from "net";
126130
import path from "path";
127131
import { fileURLToPath } from "url";
128132
import yargs from "yargs";
129133
import { emailPlugin } from "@elizaos/plugin-email";
134+
import { sunoPlugin } from "@elizaos/plugin-suno";
135+
import { udioPlugin } from "@elizaos/plugin-udio";
130136

131137
const __filename = fileURLToPath(import.meta.url); // get the resolved path to the file
132138
const __dirname = path.dirname(__filename); // get the name of the directory
@@ -696,7 +702,20 @@ function initializeDatabase(dataDir: string) {
696702
dataDir: process.env.PGLITE_DATA_DIR,
697703
});
698704
return db;
699-
} else {
705+
} else if (process.env.QDRANT_URL
706+
&& process.env.QDRANT_KEY
707+
&& process.env.QDRANT_PORT
708+
&& process.env.QDRANT_VECTOR_SIZE
709+
) {
710+
elizaLogger.info("Initializing Qdrant adapter...");
711+
const db = new QdrantDatabaseAdapter(
712+
process.env.QDRANT_URL,
713+
process.env.QDRANT_KEY,
714+
Number(process.env.QDRANT_PORT),
715+
Number(process.env.QDRANT_VECTOR_SIZE)
716+
);
717+
return db;
718+
}else {
700719
const filePath =
701720
process.env.SQLITE_FILE ?? path.resolve(dataDir, "db.sqlite");
702721
elizaLogger.info(`Initializing SQLite database at ${filePath}...`);
@@ -765,12 +784,18 @@ export async function initializeClients(
765784
clients.farcaster = farcasterClient;
766785
}
767786
}
787+
768788
if (clientTypes.includes("lens")) {
769789
const lensClient = new LensAgentClient(runtime);
770790
lensClient.start();
771791
clients.lens = lensClient;
772792
}
773793

794+
if (clientTypes.includes(Clients.SIMSAI)) {
795+
const simsaiClient = await JeeterClientInterface.start(runtime);
796+
if (simsaiClient) clients.simsai = simsaiClient;
797+
}
798+
774799
elizaLogger.log("client keys", Object.keys(clients));
775800

776801
// TODO: Add Slack client to the list
@@ -915,12 +940,15 @@ export async function createAgent(
915940
? elizaCodeinPlugin
916941
: null,
917942
bootstrapPlugin,
918-
getSecret(character, "CDP_API_KEY_NAME") && getSecret(character, "CDP_API_KEY_PRIVATE_KEY") && getSecret(character, "CDP_AGENT_KIT_NETWORK")
943+
getSecret(character, "CDP_API_KEY_NAME") &&
944+
getSecret(character, "CDP_API_KEY_PRIVATE_KEY") &&
945+
getSecret(character, "CDP_AGENT_KIT_NETWORK")
919946
? agentKitPlugin
920947
: null,
921948
getSecret(character, "DEXSCREENER_API_KEY")
922949
? dexScreenerPlugin
923950
: null,
951+
getSecret(character, "FOOTBALL_API_KEY") ? footballPlugin : null,
924952
getSecret(character, "CONFLUX_CORE_PRIVATE_KEY")
925953
? confluxPlugin
926954
: null,
@@ -1005,6 +1033,10 @@ export async function createAgent(
10051033
getSecret(character, "SGX"))
10061034
? teeLogPlugin
10071035
: null,
1036+
getSecret(character, "OMNIFLIX_API_URL") &&
1037+
getSecret(character, "OMNIFLIX_MNEMONIC")
1038+
? OmniflixPlugin
1039+
: null,
10081040
getSecret(character, "COINBASE_API_KEY") &&
10091041
getSecret(character, "COINBASE_PRIVATE_KEY") &&
10101042
getSecret(character, "COINBASE_NOTIFICATION_URI")
@@ -1090,6 +1122,7 @@ export async function createAgent(
10901122
getSecret(character, "AKASH_WALLET_ADDRESS")
10911123
? akashPlugin
10921124
: null,
1125+
getSecret(character, "CHAINBASE_API_KEY") ? chainbasePlugin : null,
10931126
getSecret(character, "QUAI_PRIVATE_KEY") ? quaiPlugin : null,
10941127
getSecret(character, "RESERVOIR_API_KEY")
10951128
? createNFTCollectionsPlugin()
@@ -1115,7 +1148,6 @@ export async function createAgent(
11151148
? devinPlugin
11161149
: null,
11171150
getSecret(character, "INITIA_PRIVATE_KEY") ? initiaPlugin : null,
1118-
11191151
getSecret(character, "NVIDIA_NIM_API_KEY") ||
11201152
getSecret(character, "NVIDIA_NGC_API_KEY")
11211153
? nvidiaNimPlugin
@@ -1127,11 +1159,14 @@ export async function createAgent(
11271159
: null,
11281160
getSecret(character, "EMAIL_INCOMING_USER") && getSecret(character, "EMAIL_INCOMING_PASS") ||
11291161
getSecret(character, "EMAIL_OUTGOING_USER") && getSecret(character, "EMAIL_OUTGOING_PASS") ?
1130-
emailPlugin : null
1162+
emailPlugin : null,
1163+
getSecret(character, "HYPERBOLIC_API_KEY")
1164+
? hyperbolicPlugin
1165+
: null,
1166+
getSecret(character, "SUNO_API_KEY") ? sunoPlugin : null,
1167+
getSecret(character, "UDIO_AUTH_TOKEN") ? udioPlugin : null
11311168
].filter(Boolean),
11321169
providers: [],
1133-
actions: [],
1134-
services: [],
11351170
managers: [],
11361171
cacheManager: cache,
11371172
fetch: logFetch,
@@ -1364,12 +1399,12 @@ if (
13641399
parseBooleanFromText(process.env.PREVENT_UNHANDLED_EXIT)
13651400
) {
13661401
// Handle uncaught exceptions to prevent the process from crashing
1367-
process.on("uncaughtException", (err) => {
1402+
process.on('uncaughtException', function(err) {
13681403
console.error("uncaughtException", err);
13691404
});
13701405

13711406
// Handle unhandled rejections to prevent the process from crashing
1372-
process.on("unhandledRejection", (err) => {
1407+
process.on('unhandledRejection', function(err) {
13731408
console.error("unhandledRejection", err);
13741409
});
13751410
}

characters/omniflix.character.json

+49
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
{
2+
"name": "Omniflix",
3+
"clients": ["telegram"],
4+
"modelProvider": "akash_chat_api",
5+
"settings": {
6+
"secrets": {},
7+
"voice": {
8+
"model": "en_US-male-medium"
9+
}
10+
},
11+
"plugins": ["@elizaos/plugin-omniflix"],
12+
"bio": [
13+
"I am an Omniflix assistant designed to interact directly with your connected wallet for blockchain operations.",
14+
"I perform actions such as sending tokens, voting on proposals, and managing staking directly using your wallet once connected.",
15+
"I request only the necessary details to execute actions and do not require the wallet address separately."
16+
],
17+
"lore": [],
18+
"knowledge": [
19+
"I can execute token transfers, staking, unstaking, and governance actions directly with the connected wallet.",
20+
"I ensure all actions are verified and secure before execution.",
21+
"I support creating new denominations (denoms) directly through your wallet."
22+
],
23+
"messageExamples": [],
24+
"postExamples": [],
25+
"topics": [
26+
"Direct wallet operations",
27+
"Token management",
28+
"Secure transaction execution"
29+
],
30+
"style": {
31+
"all": [
32+
"Direct",
33+
"Precise",
34+
"Factual",
35+
"Data-driven"
36+
],
37+
"chat": [
38+
"Clear",
39+
"Verification-focused",
40+
"Data-driven"
41+
],
42+
"post": []
43+
},
44+
"adjectives": [
45+
"Accurate",
46+
"Methodical",
47+
"Wallet-integrated"
48+
]
49+
}

0 commit comments

Comments
 (0)