Skip to content

Commit

Permalink
Merge branch 'develop' into feature/squid-bridge
Browse files Browse the repository at this point in the history
  • Loading branch information
odilitime authored Jan 3, 2025
2 parents 8a4e85a + a5dc13c commit 3ad0900
Show file tree
Hide file tree
Showing 20 changed files with 2,212 additions and 1,665 deletions.
44 changes: 26 additions & 18 deletions README_KOR.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,14 +12,18 @@

## ✨ 기능

- 🛠 SNS 지원: 디스코드, 트위터, 텔레그램 모두 지원됩니다.
- 🔗 다양한 모델 지원 (Llama, Grok, OpenAI, Anthropic 등)
- 👥 다중 지원: 다중 에이전트 및 채팅방이 지원됩니다.
- 📚 높은 유연성: 개발자가 쉽게 데이터를 추가하고, 이를 활용해 다양한 기능을 만들 수 있습니다.
- 💾 검색 지원: 당신의 데이터와 작업을 쉽게 찾아볼 수 있도록, 검색 기능을 지원합니다.
- 🚀 높은 확장성: 자신의 동작과 클라이언트를 만들어 기능을 확장할 수 있습니다.
- ☁️ 다양한 AI 모델 지원: local Llama, OpenAI, Anthropic, Groq 등 다양한 AI 모델을 지원합니다
- 📦 즐겁게 개발해 봐요!
- 🛠 SNS 통합 지원: Discord, Twitter, Telegram을 모두 지원합니다.
- 🔗 다양한 모델 호환: Llama, Grok, OpenAI, Anthropic 등 다양한 AI 모델을 지원합니다.
- 👥 다중 에이전트 및 채팅방 지원: 여러 에이전트와 채팅방을 손쉽게 관리할 수 있습니다.
- 📚 문서 처리 및 상호작용: 데이터를 손쉽게 추가하고 활용할 수 있는 기능을 제공합니다.
- 💾 검색 가능한 메모리 및 문서 저장소: 데이터를 빠르고 간편하게 검색하고 액세스할 수 있습니다.
- 🚀 높은 확장성: 사용자 정의 동작 및 클라이언트를 만들어 기능을 확장할 수 있습니다.
- ☁️ 다양한 AI 모델 지원: Local Llama, OpenAI, Anthropic, Groq 등과 호환됩니다.
- 📦 쉽게 시작하세요: 바로 작동하며 손쉽게 활용할 수 있습니다!

## 비디오 튜토리얼

[AI Agent Dev School](https://www.youtube.com/watch?v=ArptLpQiKfI&list=PLx5pnFXdPTRzWla0RaOxALTSTnVq53fKL)

## 🎯 eliza로 어떤걸 만들 수 있을까요?

Expand All @@ -37,21 +41,25 @@
- [Node.js 23.3+](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm)
- [pnpm](https://pnpm.io/installation)

> **Windows 사용자 참고:** [WSL 2](https://learn.microsoft.com/en-us/windows/wsl/install-manual) 필요.
> **Windows 사용자 참고:** [WSL 2](https://learn.microsoft.com/en-us/windows/wsl/install-manual)가 필요합니다.
### Starter 사용 (권장)

```bash
git clone https://github.com/elizaos/eliza-starter.git

cd eliza-starter
cp .env.example .env

pnpm i && pnpm start
pnpm i && pnpm build && pnpm start
```
에이전트가 실행되면 마지막에 "pnpm start:client"를 실행하라는 메시지가 표시됩니다.
다른 터미널을 열고 같은 디렉토리로 이동한 뒤 아래 명령어를 실행하세요. 표시된 URL을 열어 에이전트와 대화하세요.
```bash
pnpm start:client
```

[문서](https://elizaos.github.io/eliza/)를 참고하여 Eliza를 커스마이징 방법을 확인하세요.
[문서](https://elizaos.github.io/eliza/)를 참고하여 Eliza를 커스터마이징하는 방법을 배워보세요.

### 직접 실행하기 (경험자만 권장)
### Eliza를 수동으로 실행하기 (경험자에게만 권장)

```bash
# 리포지토리 클론
Expand Down Expand Up @@ -107,16 +115,16 @@ pnpm clean

#### 추가 요구 사항

시작 시 에러가 발생하면 Sharp를 설치해야 할 있습니다. 아래 명령어를 사용하여 설치하세요:
시작할 때 오류가 발생하면 Sharp를 설치해야 할 수도 있습니다. 아래 명령어를 실행하여 설치하세요:

```
pnpm install --include=optional sharp
```

### Community & contact
### 커뮤니티 & 문의

- [Github Issues](https://github.com/elizaos/eliza/issues). 용도: Eliza 사용 중 발견된 버그 리포트, 기능 제안.
- [Discord](https://discord.gg/ai16z). 용도: 애플리케이션 공유 및 커뮤니티 활동.
- [Github Issues](https://github.com/elizaos/eliza/issues). liza 사용 중 발견된 버그 보고 및 기능 제안에 적합합니다.
- [Discord](https://discord.gg/ai16z). 애플리케이션 공유 및 커뮤니티와의 소통에 적합합니다.

## 컨트리뷰터

Expand Down
5 changes: 3 additions & 2 deletions agent/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -510,7 +510,8 @@ export async function createAgent(
}

let goatPlugin: any | undefined;
if (getSecret(character, "EVM_PROVIDER_URL")) {

if (getSecret(character, "EVM_PRIVATE_KEY")) {
goatPlugin = await createGoatPlugin((secret) =>
getSecret(character, secret)
);
Expand Down Expand Up @@ -588,7 +589,7 @@ export async function createAgent(
getSecret(character, "COINBASE_NOTIFICATION_URI")
? webhookPlugin
: null,
getSecret(character, "EVM_PROVIDER_URL") ? goatPlugin : null,
goatPlugin,
getSecret(character, "ABSTRACT_PRIVATE_KEY")
? abstractPlugin
: null,
Expand Down
20 changes: 5 additions & 15 deletions packages/adapter-postgres/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -210,21 +210,11 @@ export class PostgresDatabaseAdapter
await client.query("SET app.use_gaianet_embedding = 'false'");
}

// Check if schema already exists (check for a core table)
const { rows } = await client.query(`
SELECT EXISTS (
SELECT FROM information_schema.tables
WHERE table_name = 'rooms'
);
`);

if (!rows[0].exists) {
const schema = fs.readFileSync(
path.resolve(__dirname, "../schema.sql"),
"utf8"
);
await client.query(schema);
}
const schema = fs.readFileSync(
path.resolve(__dirname, "../schema.sql"),
"utf8"
);
await client.query(schema);

await client.query("COMMIT");
} catch (error) {
Expand Down
111 changes: 62 additions & 49 deletions packages/client-twitter/src/environment.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,14 @@ import { z, ZodError } from "zod";

export const DEFAULT_MAX_TWEET_LENGTH = 280;

const twitterUsernameSchema = z.string()
.min(1, 'An X/Twitter Username must be at least 1 characters long')
.max(15, 'n X/Twitter Username cannot exceed 15 characters')
.regex(/^[A-Za-z0-9_]*$/, 'n X Username can only contain letters, numbers, and underscores');
const twitterUsernameSchema = z
.string()
.min(1, "An X/Twitter Username must be at least 1 characters long")
.max(15, "An X/Twitter Username cannot exceed 15 characters")
.regex(
/^[A-Za-z0-9_]*$/,
"An X Username can only contain letters, numbers, and underscores"
);

/**
* This schema defines all required/optional environment settings,
Expand Down Expand Up @@ -75,7 +79,10 @@ function parseTargetUsers(targetUsersStr?: string | null): string[] {
.filter(Boolean);
}

function safeParseInt(value: string | undefined | null, defaultValue: number): number {
function safeParseInt(
value: string | undefined | null,
defaultValue: number
): number {
if (!value) return defaultValue;
const parsed = parseInt(value, 10);
return isNaN(parsed) ? defaultValue : Math.max(1, parsed);
Expand All @@ -90,13 +97,15 @@ function safeParseInt(value: string | undefined | null, defaultValue: number): n

// we also do a lot of typing/parsing here
// so we can do it once and only once per character
export async function validateTwitterConfig(runtime: IAgentRuntime): Promise<TwitterConfig> {
export async function validateTwitterConfig(
runtime: IAgentRuntime
): Promise<TwitterConfig> {
try {
const twitterConfig = {
TWITTER_DRY_RUN:
parseBooleanFromText(
runtime.getSetting("TWITTER_DRY_RUN") ||
process.env.TWITTER_DRY_RUN
process.env.TWITTER_DRY_RUN
) ?? false, // parseBooleanFromText return null if "", map "" to false

TWITTER_USERNAME:
Expand All @@ -111,80 +120,84 @@ export async function validateTwitterConfig(runtime: IAgentRuntime): Promise<Twi
runtime.getSetting("TWITTER_EMAIL") ||
process.env.TWITTER_EMAIL,

MAX_TWEET_LENGTH: // number as string?
safeParseInt(
runtime.getSetting("MAX_TWEET_LENGTH") ||
// number as string?
MAX_TWEET_LENGTH: safeParseInt(
runtime.getSetting("MAX_TWEET_LENGTH") ||
process.env.MAX_TWEET_LENGTH,
DEFAULT_MAX_TWEET_LENGTH
),
DEFAULT_MAX_TWEET_LENGTH
),

TWITTER_SEARCH_ENABLE:
parseBooleanFromText(
runtime.getSetting("TWITTER_SEARCH_ENABLE") ||
process.env.TWITTER_SEARCH_ENABLE
process.env.TWITTER_SEARCH_ENABLE
) ?? false,

TWITTER_2FA_SECRET: // string passthru
// string passthru
TWITTER_2FA_SECRET:
runtime.getSetting("TWITTER_2FA_SECRET") ||
process.env.TWITTER_2FA_SECRET || "",
process.env.TWITTER_2FA_SECRET ||
"",

TWITTER_RETRY_LIMIT: // int
safeParseInt(
runtime.getSetting("TWITTER_RETRY_LIMIT") ||
// int
TWITTER_RETRY_LIMIT: safeParseInt(
runtime.getSetting("TWITTER_RETRY_LIMIT") ||
process.env.TWITTER_RETRY_LIMIT,
5
),
5
),

TWITTER_POLL_INTERVAL: // int in seconds
safeParseInt(
runtime.getSetting("TWITTER_POLL_INTERVAL") ||
// int in seconds
TWITTER_POLL_INTERVAL: safeParseInt(
runtime.getSetting("TWITTER_POLL_INTERVAL") ||
process.env.TWITTER_POLL_INTERVAL,
120 // 2m
),
120 // 2m
),

TWITTER_TARGET_USERS: // comma separated string
parseTargetUsers(
runtime.getSetting("TWITTER_TARGET_USERS") ||
// comma separated string
TWITTER_TARGET_USERS: parseTargetUsers(
runtime.getSetting("TWITTER_TARGET_USERS") ||
process.env.TWITTER_TARGET_USERS
),
),

POST_INTERVAL_MIN: // int in minutes
safeParseInt(
runtime.getSetting("POST_INTERVAL_MIN") ||
// int in minutes
POST_INTERVAL_MIN: safeParseInt(
runtime.getSetting("POST_INTERVAL_MIN") ||
process.env.POST_INTERVAL_MIN,
90 // 1.5 hours
),
90 // 1.5 hours
),

POST_INTERVAL_MAX: // int in minutes
safeParseInt(
runtime.getSetting("POST_INTERVAL_MAX") ||
// int in minutes
POST_INTERVAL_MAX: safeParseInt(
runtime.getSetting("POST_INTERVAL_MAX") ||
process.env.POST_INTERVAL_MAX,
180 // 3 hours
),
180 // 3 hours
),

ENABLE_ACTION_PROCESSING: // bool
// bool
ENABLE_ACTION_PROCESSING:
parseBooleanFromText(
runtime.getSetting("ENABLE_ACTION_PROCESSING") ||
process.env.ENABLE_ACTION_PROCESSING
process.env.ENABLE_ACTION_PROCESSING
) ?? false,

ACTION_INTERVAL: // init in minutes (min 1m)
safeParseInt(
runtime.getSetting("ACTION_INTERVAL") ||
// init in minutes (min 1m)
ACTION_INTERVAL: safeParseInt(
runtime.getSetting("ACTION_INTERVAL") ||
process.env.ACTION_INTERVAL,
5 // 5 minutes
),
5 // 5 minutes
),

POST_IMMEDIATELY: // bool
// bool
POST_IMMEDIATELY:
parseBooleanFromText(
runtime.getSetting("POST_IMMEDIATELY") ||
process.env.POST_IMMEDIATELY
process.env.POST_IMMEDIATELY
) ?? false,

TWITTER_SPACES_ENABLE:
parseBooleanFromText(
runtime.getSetting("TWITTER_SPACES_ENABLE") ||
process.env.TWITTER_SPACES_ENABLE
process.env.TWITTER_SPACES_ENABLE
) ?? false,
};

Expand Down
Loading

0 comments on commit 3ad0900

Please sign in to comment.