From 997cc7036a8cdd728ddaa295e5601e1ec8a2ac18 Mon Sep 17 00:00:00 2001 From: 0xbbjoker <0xbbjoker@proton.me> Date: Sun, 9 Feb 2025 18:09:15 +0100 Subject: [PATCH 01/12] feat: add drizzle psg --- packages/plugin-drizzle/.gitignore | 176 ++ packages/plugin-drizzle/.npmignore | 9 + packages/plugin-drizzle/config.toml | 159 ++ packages/plugin-drizzle/drizzle.config.ts | 18 + .../migrations/20250201002018_init.sql | 169 ++ .../meta/20250201002018_snapshot.json | 18 + .../drizzle/migrations/meta/_journal.json | 13 + packages/plugin-drizzle/package.json | 41 + packages/plugin-drizzle/src/index.ts | 1501 +++++++++++++++++ packages/plugin-drizzle/src/migrations.ts | 22 + packages/plugin-drizzle/src/schema.ts | 177 ++ packages/plugin-drizzle/tsconfig.json | 10 + packages/plugin-drizzle/tsup.config.ts | 21 + packages/plugin-drizzle/vitest.config.ts | 12 + 14 files changed, 2346 insertions(+) create mode 100644 packages/plugin-drizzle/.gitignore create mode 100644 packages/plugin-drizzle/.npmignore create mode 100644 packages/plugin-drizzle/config.toml create mode 100644 packages/plugin-drizzle/drizzle.config.ts create mode 100644 packages/plugin-drizzle/drizzle/migrations/20250201002018_init.sql create mode 100644 packages/plugin-drizzle/drizzle/migrations/meta/20250201002018_snapshot.json create mode 100644 packages/plugin-drizzle/drizzle/migrations/meta/_journal.json create mode 100644 packages/plugin-drizzle/package.json create mode 100644 packages/plugin-drizzle/src/index.ts create mode 100644 packages/plugin-drizzle/src/migrations.ts create mode 100644 packages/plugin-drizzle/src/schema.ts create mode 100644 packages/plugin-drizzle/tsconfig.json create mode 100644 packages/plugin-drizzle/tsup.config.ts create mode 100644 packages/plugin-drizzle/vitest.config.ts diff --git a/packages/plugin-drizzle/.gitignore b/packages/plugin-drizzle/.gitignore new file mode 100644 index 00000000000..7a2e48a9e76 --- /dev/null +++ b/packages/plugin-drizzle/.gitignore @@ -0,0 +1,176 @@ +# Based on https://raw.githubusercontent.com/github/gitignore/main/Node.gitignore + +# Logs + +logs +_.log +npm-debug.log_ +yarn-debug.log* +yarn-error.log* +lerna-debug.log* +.pnpm-debug.log* + +# Caches + +.cache + +# Diagnostic reports (https://nodejs.org/api/report.html) + +report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json + +# Runtime data + +pids +_.pid +_.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover + +lib-cov + +# Coverage directory used by tools like istanbul + +coverage +*.lcov + +# nyc test coverage + +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) + +.grunt + +# Bower dependency directory (https://bower.io/) + +bower_components + +# node-waf configuration + +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) + +build/Release + +# Dependency directories + +node_modules/ +jspm_packages/ + +# Snowpack dependency directory (https://snowpack.dev/) + +web_modules/ + +# TypeScript cache + +*.tsbuildinfo + +# Optional npm cache directory + +.npm + +# Optional eslint cache + +.eslintcache + +# Optional stylelint cache + +.stylelintcache + +# Microbundle cache + +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history + +.node_repl_history + +# Output of 'npm pack' + +*.tgz + +# Yarn Integrity file + +.yarn-integrity + +# dotenv environment variable files + +.env +.env.development.local +.env.test.local +.env.production.local +.env.local +.env.test + +# parcel-bundler cache (https://parceljs.org/) + +.parcel-cache + +# Next.js build output + +.next +out + +# Nuxt.js build / generate output + +.nuxt +dist + +# Gatsby files + +# Comment in the public line in if your project uses Gatsby and not Next.js + +# https://nextjs.org/blog/next-9-1#public-directory-support + +# public + +# vuepress build output + +.vuepress/dist + +# vuepress v2.x temp and cache directory + +.temp + +# Docusaurus cache and generated files + +.docusaurus + +# Serverless directories + +.serverless/ + +# FuseBox cache + +.fusebox/ + +# DynamoDB Local files + +.dynamodb/ + +# TernJS port file + +.tern-port + +# Stores VSCode versions used for testing VSCode extensions + +.vscode-test + +# yarn v2 + +.yarn/cache +.yarn/unplugged +.yarn/build-state.yml +.yarn/install-state.gz +.pnp.* + +# IntelliJ based IDEs +.idea + +# Finder (MacOS) folder config +.DS_Store diff --git a/packages/plugin-drizzle/.npmignore b/packages/plugin-drizzle/.npmignore new file mode 100644 index 00000000000..eb4b3947ffa --- /dev/null +++ b/packages/plugin-drizzle/.npmignore @@ -0,0 +1,9 @@ +* + +!dist/** +!package.json +!readme.md +!tsup.config.ts +!schema.sql +!seed.sql +!config.toml \ No newline at end of file diff --git a/packages/plugin-drizzle/config.toml b/packages/plugin-drizzle/config.toml new file mode 100644 index 00000000000..c1f016d4a40 --- /dev/null +++ b/packages/plugin-drizzle/config.toml @@ -0,0 +1,159 @@ +# A string used to distinguish different Supabase projects on the same host. Defaults to the +# working directory name when running `supabase init`. +project_id = "eliza" + +[api] +enabled = true +# Port to use for the API URL. +port = 54321 +# Schemas to expose in your API. Tables, views and stored procedures in this schema will get API +# endpoints. public and storage are always included. +schemas = ["public", "storage", "graphql_public"] +# Extra schemas to add to the search_path of every request. public is always included. +extra_search_path = ["public", "extensions"] +# The maximum number of rows returns from a view, table, or stored procedure. Limits payload size +# for accidental or malicious requests. +max_rows = 1000 + +[db] +# Port to use for the local database URL. +port = 54322 +# Port used by db diff command to initialize the shadow database. +shadow_port = 54320 +# The database major version to use. This has to be the same as your remote database's. Run `SHOW +# server_version;` on the remote database to check. +major_version = 15 + +[db.pooler] +enabled = false +# Port to use for the local connection pooler. +port = 54329 +# Specifies when a server connection can be reused by other clients. +# Configure one of the supported pooler modes: `transaction`, `session`. +pool_mode = "transaction" +# How many server connections to allow per user/database pair. +default_pool_size = 20 +# Maximum number of client connections allowed. +max_client_conn = 100 + +[realtime] +enabled = true +# Bind realtime via either IPv4 or IPv6. (default: IPv6) +# ip_version = "IPv6" +# The maximum length in bytes of HTTP request headers. (default: 4096) +# max_header_length = 4096 + +[studio] +enabled = true +# Port to use for Supabase Studio. +port = 54323 +# External URL of the API server that frontend connects to. +api_url = "http://127.0.0.1" + +# Email testing server. Emails sent with the local dev setup are not actually sent - rather, they +# are monitored, and you can view the emails that would have been sent from the web interface. +[inbucket] +enabled = true +# Port to use for the email testing server web interface. +port = 54324 +# Uncomment to expose additional ports for testing user applications that send emails. +# smtp_port = 54325 +# pop3_port = 54326 + +[storage] +enabled = true +# The maximum file size allowed (e.g. "5MB", "500KB"). +file_size_limit = "50MiB" + +[auth] +enabled = true +# The base URL of your website. Used as an allow-list for redirects and for constructing URLs used +# in emails. +site_url = "http://127.0.0.1:3000" +# A list of *exact* URLs that auth providers are permitted to redirect to post authentication. +additional_redirect_urls = ["https://127.0.0.1:3000"] +# How long tokens are valid for, in seconds. Defaults to 3600 (1 hour), maximum 604,800 (1 week). +jwt_expiry = 3600 +# If disabled, the refresh token will never expire. +enable_refresh_token_rotation = true +# Allows refresh tokens to be reused after expiry, up to the specified interval in seconds. +# Requires enable_refresh_token_rotation = true. +refresh_token_reuse_interval = 10 +# Allow/disallow new user signups to your project. +enable_signup = true +# Allow/disallow testing manual linking of accounts +enable_manual_linking = false + +[auth.email] +# Allow/disallow new user signups via email to your project. +enable_signup = true +# If enabled, a user will be required to confirm any email change on both the old, and new email +# addresses. If disabled, only the new email is required to confirm. +double_confirm_changes = true +# If enabled, users need to confirm their email address before signing in. +enable_confirmations = false + +# Uncomment to customize email template +# [auth.email.template.invite] +# subject = "You have been invited" +# content_path = "./supabase/templates/invite.html" + +[auth.sms] +# Allow/disallow new user signups via SMS to your project. +enable_signup = true +# If enabled, users need to confirm their phone number before signing in. +enable_confirmations = false +# Template for sending OTP to users +template = "Your code is {{ .Code }} ." + +# Use pre-defined map of phone number to OTP for testing. +[auth.sms.test_otp] +# 4152127777 = "123456" + +# This hook runs before a token is issued and allows you to add additional claims based on the authentication method used. +[auth.hook.custom_access_token] +# enabled = true +# uri = "pg-functions:////" + + +# Configure one of the supported SMS providers: `twilio`, `twilio_verify`, `messagebird`, `textlocal`, `vonage`. +[auth.sms.twilio] +enabled = false +account_sid = "" +message_service_sid = "" +# DO NOT commit your Twilio auth token to git. Use environment variable substitution instead: +auth_token = "env(SUPABASE_AUTH_SMS_TWILIO_AUTH_TOKEN)" + +# Use an external OAuth provider. The full list of providers are: `apple`, `azure`, `bitbucket`, +# `discord`, `facebook`, `github`, `gitlab`, `google`, `keycloak`, `linkedin_oidc`, `notion`, `twitch`, +# `twitter`, `slack`, `spotify`, `workos`, `zoom`. +[auth.external.apple] +enabled = false +client_id = "" +# DO NOT commit your OAuth provider secret to git. Use environment variable substitution instead: +secret = "env(SUPABASE_AUTH_EXTERNAL_APPLE_SECRET)" +# Overrides the default auth redirectUrl. +redirect_uri = "" +# Overrides the default auth provider URL. Used to support self-hosted gitlab, single-tenant Azure, +# or any other third-party OIDC providers. +url = "" + +[analytics] +enabled = false +port = 54327 +vector_port = 54328 +# Configure one of the supported backends: `postgres`, `bigquery`. +backend = "postgres" + +# Experimental features may be deprecated any time +[experimental] +# Configures Postgres storage engine to use OrioleDB (S3) +orioledb_version = "" +# Configures S3 bucket URL, eg. .s3-.amazonaws.com +s3_host = "env(S3_HOST)" +# Configures S3 bucket region, eg. us-east-1 +s3_region = "env(S3_REGION)" +# Configures AWS_ACCESS_KEY_ID for S3 bucket +s3_access_key = "env(S3_ACCESS_KEY)" +# Configures AWS_SECRET_ACCESS_KEY for S3 bucket +s3_secret_key = "env(S3_SECRET_KEY)" diff --git a/packages/plugin-drizzle/drizzle.config.ts b/packages/plugin-drizzle/drizzle.config.ts new file mode 100644 index 00000000000..fba4a2f22fe --- /dev/null +++ b/packages/plugin-drizzle/drizzle.config.ts @@ -0,0 +1,18 @@ +import { defineConfig } from "drizzle-kit"; + +// TODO: read URL from env. + +export default defineConfig({ + dialect: "postgresql", + schema: "./src/schema.ts", + out: "./drizzle/migrations", + dbCredentials: { + url: "postgres://postgres:postgres@localhost:5432/eliza", + }, + migrations: { + table: "__drizzle_migrations", + schema: "public", + prefix: "timestamp", + }, + breakpoints: true, +}); diff --git a/packages/plugin-drizzle/drizzle/migrations/20250201002018_init.sql b/packages/plugin-drizzle/drizzle/migrations/20250201002018_init.sql new file mode 100644 index 00000000000..7889470c149 --- /dev/null +++ b/packages/plugin-drizzle/drizzle/migrations/20250201002018_init.sql @@ -0,0 +1,169 @@ +-- Custom SQL migration file, put your code below! -- +-- Enable pgvector extension + +-- -- Drop existing tables and extensions +-- DROP EXTENSION IF EXISTS vector CASCADE; +-- DROP TABLE IF EXISTS relationships CASCADE; +-- DROP TABLE IF EXISTS participants CASCADE; +-- DROP TABLE IF EXISTS logs CASCADE; +-- DROP TABLE IF EXISTS goals CASCADE; +-- DROP TABLE IF EXISTS memories CASCADE; +-- DROP TABLE IF EXISTS rooms CASCADE; +-- DROP TABLE IF EXISTS accounts CASCADE; +-- DROP TABLE IF EXISTS knowledge CASCADE; + + +CREATE EXTENSION IF NOT EXISTS vector; +CREATE EXTENSION IF NOT EXISTS fuzzystrmatch; + +-- Create a function to determine vector dimension +CREATE OR REPLACE FUNCTION get_embedding_dimension() +RETURNS INTEGER AS $$ +BEGIN + -- Check for OpenAI first + IF current_setting('app.use_openai_embedding', TRUE) = 'true' THEN + RETURN 1536; -- OpenAI dimension + -- Then check for Ollama + ELSIF current_setting('app.use_ollama_embedding', TRUE) = 'true' THEN + RETURN 1024; -- Ollama mxbai-embed-large dimension + -- Then check for GAIANET + ELSIF current_setting('app.use_gaianet_embedding', TRUE) = 'true' THEN + RETURN 768; -- Gaianet nomic-embed dimension + ELSE + RETURN 384; -- BGE/Other embedding dimension + END IF; +END; +$$ LANGUAGE plpgsql; + +BEGIN; + +CREATE TABLE IF NOT EXISTS accounts ( + "id" UUID PRIMARY KEY, + "createdAt" TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP, + "name" TEXT, + "username" TEXT, + "email" TEXT NOT NULL, + "avatarUrl" TEXT, + "details" JSONB DEFAULT '{}'::jsonb +); + +CREATE TABLE IF NOT EXISTS rooms ( + "id" UUID PRIMARY KEY, + "createdAt" TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP +); + +DO $$ +DECLARE + vector_dim INTEGER; +BEGIN + vector_dim := get_embedding_dimension(); + + EXECUTE format(' + CREATE TABLE IF NOT EXISTS memories ( + "id" UUID PRIMARY KEY, + "type" TEXT NOT NULL, + "createdAt" TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP, + "content" JSONB NOT NULL, + "embedding" vector(%s), + "userId" UUID REFERENCES accounts("id"), + "agentId" UUID REFERENCES accounts("id"), + "roomId" UUID REFERENCES rooms("id"), + "unique" BOOLEAN DEFAULT true NOT NULL, + CONSTRAINT fk_room FOREIGN KEY ("roomId") REFERENCES rooms("id") ON DELETE CASCADE, + CONSTRAINT fk_user FOREIGN KEY ("userId") REFERENCES accounts("id") ON DELETE CASCADE, + CONSTRAINT fk_agent FOREIGN KEY ("agentId") REFERENCES accounts("id") ON DELETE CASCADE + )', vector_dim); +END $$; + +CREATE TABLE IF NOT EXISTS goals ( + "id" UUID PRIMARY KEY, + "createdAt" TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP, + "userId" UUID REFERENCES accounts("id"), + "name" TEXT, + "status" TEXT, + "description" TEXT, + "roomId" UUID REFERENCES rooms("id"), + "objectives" JSONB DEFAULT '[]'::jsonb NOT NULL, + CONSTRAINT fk_room FOREIGN KEY ("roomId") REFERENCES rooms("id") ON DELETE CASCADE, + CONSTRAINT fk_user FOREIGN KEY ("userId") REFERENCES accounts("id") ON DELETE CASCADE +); + +CREATE TABLE IF NOT EXISTS logs ( + "id" UUID PRIMARY KEY DEFAULT gen_random_uuid(), + "createdAt" TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP, + "userId" UUID NOT NULL REFERENCES accounts("id"), + "body" JSONB NOT NULL, + "type" TEXT NOT NULL, + "roomId" UUID NOT NULL REFERENCES rooms("id"), + CONSTRAINT fk_room FOREIGN KEY ("roomId") REFERENCES rooms("id") ON DELETE CASCADE, + CONSTRAINT fk_user FOREIGN KEY ("userId") REFERENCES accounts("id") ON DELETE CASCADE +); + +CREATE TABLE IF NOT EXISTS participants ( + "id" UUID PRIMARY KEY, + "createdAt" TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP, + "userId" UUID REFERENCES accounts("id"), + "roomId" UUID REFERENCES rooms("id"), + "userState" TEXT, + "last_message_read" TEXT, + UNIQUE("userId", "roomId"), + CONSTRAINT fk_room FOREIGN KEY ("roomId") REFERENCES rooms("id") ON DELETE CASCADE, + CONSTRAINT fk_user FOREIGN KEY ("userId") REFERENCES accounts("id") ON DELETE CASCADE +); + +CREATE TABLE IF NOT EXISTS relationships ( + "id" UUID PRIMARY KEY, + "createdAt" TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP, + "userA" UUID NOT NULL REFERENCES accounts("id"), + "userB" UUID NOT NULL REFERENCES accounts("id"), + "status" TEXT, + "userId" UUID NOT NULL REFERENCES accounts("id"), + CONSTRAINT fk_user_a FOREIGN KEY ("userA") REFERENCES accounts("id") ON DELETE CASCADE, + CONSTRAINT fk_user_b FOREIGN KEY ("userB") REFERENCES accounts("id") ON DELETE CASCADE, + CONSTRAINT fk_user FOREIGN KEY ("userId") REFERENCES accounts("id") ON DELETE CASCADE +); + +CREATE TABLE IF NOT EXISTS cache ( + "key" TEXT NOT NULL, + "agentId" TEXT NOT NULL, + "value" JSONB DEFAULT '{}'::jsonb, + "createdAt" TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + "expiresAt" TIMESTAMP, + PRIMARY KEY ("key", "agentId") +); + +DO $$ +DECLARE + vector_dim INTEGER; +BEGIN + vector_dim := get_embedding_dimension(); + + EXECUTE format(' + CREATE TABLE IF NOT EXISTS knowledge ( + "id" UUID PRIMARY KEY, + "agentId" UUID REFERENCES accounts("id"), + "content" JSONB NOT NULL, + "embedding" vector(%s), + "createdAt" TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP, + "isMain" BOOLEAN DEFAULT FALSE, + "originalId" UUID REFERENCES knowledge("id"), + "chunkIndex" INTEGER, + "isShared" BOOLEAN DEFAULT FALSE, + CHECK(("isShared" = true AND "agentId" IS NULL) OR ("isShared" = false AND "agentId" IS NOT NULL)) + )', vector_dim); +END $$; + +-- Indexes +CREATE INDEX IF NOT EXISTS idx_memories_embedding ON memories USING hnsw ("embedding" vector_cosine_ops); +CREATE INDEX IF NOT EXISTS idx_memories_type_room ON memories("type", "roomId"); +CREATE INDEX IF NOT EXISTS idx_participants_user ON participants("userId"); +CREATE INDEX IF NOT EXISTS idx_participants_room ON participants("roomId"); +CREATE INDEX IF NOT EXISTS idx_relationships_users ON relationships("userA", "userB"); +CREATE INDEX IF NOT EXISTS idx_knowledge_agent ON knowledge("agentId"); +CREATE INDEX IF NOT EXISTS idx_knowledge_agent_main ON knowledge("agentId", "isMain"); +CREATE INDEX IF NOT EXISTS idx_knowledge_original ON knowledge("originalId"); +CREATE INDEX IF NOT EXISTS idx_knowledge_created ON knowledge("agentId", "createdAt"); +CREATE INDEX IF NOT EXISTS idx_knowledge_shared ON knowledge("isShared"); +CREATE INDEX IF NOT EXISTS idx_knowledge_embedding ON knowledge USING ivfflat (embedding vector_cosine_ops); + +COMMIT; diff --git a/packages/plugin-drizzle/drizzle/migrations/meta/20250201002018_snapshot.json b/packages/plugin-drizzle/drizzle/migrations/meta/20250201002018_snapshot.json new file mode 100644 index 00000000000..6453ebcdf85 --- /dev/null +++ b/packages/plugin-drizzle/drizzle/migrations/meta/20250201002018_snapshot.json @@ -0,0 +1,18 @@ +{ + "id": "1011a59b-2c21-47a9-bf57-cc3585fcc660", + "prevId": "00000000-0000-0000-0000-000000000000", + "version": "7", + "dialect": "postgresql", + "tables": {}, + "enums": {}, + "schemas": {}, + "views": {}, + "sequences": {}, + "roles": {}, + "policies": {}, + "_meta": { + "columns": {}, + "schemas": {}, + "tables": {} + } +} \ No newline at end of file diff --git a/packages/plugin-drizzle/drizzle/migrations/meta/_journal.json b/packages/plugin-drizzle/drizzle/migrations/meta/_journal.json new file mode 100644 index 00000000000..47e5d13dc92 --- /dev/null +++ b/packages/plugin-drizzle/drizzle/migrations/meta/_journal.json @@ -0,0 +1,13 @@ +{ + "version": "7", + "dialect": "postgresql", + "entries": [ + { + "idx": 0, + "version": "7", + "when": 1738369218670, + "tag": "20250201002018_init", + "breakpoints": true + } + ] +} \ No newline at end of file diff --git a/packages/plugin-drizzle/package.json b/packages/plugin-drizzle/package.json new file mode 100644 index 00000000000..b5d5eecd099 --- /dev/null +++ b/packages/plugin-drizzle/package.json @@ -0,0 +1,41 @@ +{ + "name": "@elizaos/plugin-drizzle", + "version": "0.25.6-alpha.1", + "type": "module", + "main": "dist/index.js", + "module": "dist/index.js", + "types": "dist/index.d.ts", + "exports": { + "./package.json": "./package.json", + ".": { + "import": { + "@elizaos/source": "./src/index.ts", + "types": "./dist/index.d.ts", + "default": "./dist/index.js" + } + } + }, + "files": [ + "dist", + "schema.sql", + "seed.sql" + ], + "dependencies": { + "@elizaos/core": "workspace:*", + "@types/pg": "8.11.10", + "drizzle-kit": "^0.30.4", + "drizzle-orm": "^0.39.1", + "pg": "8.13.1" + }, + "devDependencies": { + "dockerode": "^4.0.4", + "tsup": "8.3.5" + }, + "scripts": { + "build": "tsup --format esm --dts", + "dev": "tsup --format esm --dts --watch" + }, + "peerDependencies": { + "typescript": "^5.0.0" + } +} \ No newline at end of file diff --git a/packages/plugin-drizzle/src/index.ts b/packages/plugin-drizzle/src/index.ts new file mode 100644 index 00000000000..3ee7949ec85 --- /dev/null +++ b/packages/plugin-drizzle/src/index.ts @@ -0,0 +1,1501 @@ +import { + type Account, + type Actor, + DatabaseAdapter, + type GoalStatus, + type Participant, + elizaLogger, + type Goal, + type IDatabaseCacheAdapter, + type Memory, + type Relationship, + type UUID, +} from "@elizaos/core"; +import { + and, + eq, + gte, + lte, + sql, + desc, + inArray, + or, + cosineDistance, +} from "drizzle-orm"; +import { + accountTable, + goalTable, + logTable, + memoryTable, + participantTable, + relationshipTable, + roomTable, + knowledgeTable, + cacheTable, +} from "./schema"; +import { drizzle, NodePgDatabase } from "drizzle-orm/node-postgres"; +import { v4 } from "uuid"; +import { runMigrations } from "./migrations"; +import pg, { ConnectionConfig, PoolConfig } from "pg"; +type Pool = pg.Pool; + +export class DrizzleDatabaseAdapter + extends DatabaseAdapter + implements IDatabaseCacheAdapter +{ + private pool: Pool; + private readonly maxRetries: number = 3; + private readonly baseDelay: number = 1000; // 1 second + private readonly maxDelay: number = 10000; // 10 seconds + private readonly jitterMax: number = 1000; // 1 second + private readonly connectionTimeout: number = 5000; // 5 seconds + + constructor( + connectionConfig: any, + ) { + super(); + const defaultConfig = { + max: 20, + idleTimeoutMillis: 30000, + connectionTimeoutMillis: this.connectionTimeout, + }; + + const { poolConfig } = this.parseConnectionConfig( + connectionConfig, + defaultConfig + ); + this.pool = new pg.Pool(poolConfig); + + this.pool.on("error", (err) => { + elizaLogger.error("Unexpected pool error", err); + this.handlePoolError(err); + }); + + this.setupPoolErrorHandling(); + this.db = drizzle({ client: this.pool }); + } + + private setupPoolErrorHandling() { + process.on("SIGINT", async () => { + await this.cleanup(); + process.exit(0); + }); + + process.on("SIGTERM", async () => { + await this.cleanup(); + process.exit(0); + }); + + process.on("beforeExit", async () => { + await this.cleanup(); + }); + } + + private async handlePoolError(error: Error) { + elizaLogger.error("Pool error occurred, attempting to reconnect", { + error: error.message, + }); + + try { + // Close existing pool + await this.pool.end(); + + // Create new pool + this.pool = new pg.Pool({ + ...this.pool.options, + connectionTimeoutMillis: this.connectionTimeout, + }); + + await this.testConnection(); + elizaLogger.success("Pool reconnection successful"); + } catch (reconnectError) { + elizaLogger.error("Failed to reconnect pool", { + error: + reconnectError instanceof Error + ? reconnectError.message + : String(reconnectError), + }); + throw reconnectError; + } + } + + private async withDatabase( + operation: () => Promise, + context: string + ): Promise { + return this.withRetry(operation); + } + + private async withRetry(operation: () => Promise): Promise { + let lastError: Error = new Error("Unknown error"); // Initialize with default + + for (let attempt = 1; attempt <= this.maxRetries; attempt++) { + try { + return await operation(); + } catch (error) { + lastError = error as Error; + + if (attempt < this.maxRetries) { + // Calculate delay with exponential backoff + const backoffDelay = Math.min( + this.baseDelay * Math.pow(2, attempt - 1), + this.maxDelay + ); + + // Add jitter to prevent thundering herd + const jitter = Math.random() * this.jitterMax; + const delay = backoffDelay + jitter; + + elizaLogger.warn( + `Database operation failed (attempt ${attempt}/${this.maxRetries}):`, + { + error: + error instanceof Error + ? error.message + : String(error), + nextRetryIn: `${(delay / 1000).toFixed(1)}s`, + } + ); + + await new Promise((resolve) => setTimeout(resolve, delay)); + } else { + elizaLogger.error("Max retry attempts reached:", { + error: + error instanceof Error + ? error.message + : String(error), + totalAttempts: attempt, + }); + throw error instanceof Error + ? error + : new Error(String(error)); + } + } + } + + throw lastError; + } + + async cleanup(): Promise { + try { + await this.pool.end(); + elizaLogger.info("Database pool closed"); + } catch (error) { + elizaLogger.error("Error closing database pool:", error); + } + } + + private parseConnectionConfig( + config: ConnectionConfig, + defaults: Partial + ): { poolConfig: PoolConfig; databaseName: string } { + if (typeof config === "string") { + try { + const url = new URL(config); + const databaseName = url.pathname.split("/")[1] || "postgres"; + return { + poolConfig: { ...defaults, connectionString: config }, + databaseName, + }; + } catch (error) { + throw new Error( + `Invalid connection string: ${ + error instanceof Error ? error.message : String(error) + }` + ); + } + } else { + return { + poolConfig: { ...defaults, ...config }, + databaseName: config.database || "postgres", + }; + } + } + + private async setEmbeddingProviderSettings(): Promise { + const embeddingConfig = getEmbeddingConfig(); + const providers = ["openai", "ollama", "gaianet"] as const; + + try { + await this.db.transaction(async (tx) => { + for (const provider of providers) { + const query = sql.raw( + `SET app.use_${provider}_embedding = 'false'` + ); + await tx.execute(query); + } + + if ( + Object.values(EmbeddingProvider).includes( + embeddingConfig.provider + ) + ) { + const providerName = embeddingConfig.provider.toLowerCase(); + const query = sql.raw( + `SET app.use_${providerName}_embedding = 'true'` + ); + await tx.execute(query); + } + }); + } catch (error) { + elizaLogger.error( + "Failed to configure database embedding provider settings:", + { + error: + error instanceof Error ? error.message : String(error), + } + ); + throw error; + } + } + + private async validateVectorSetup(): Promise { + try { + const vectorExt = await this.db.execute(sql` + SELECT * FROM pg_extension WHERE extname = 'vector' + `); + + const hasVector = vectorExt?.rows.length > 0; + + if (!hasVector) { + elizaLogger.warn("Vector extension not found"); + return false; + } + + return true; + } catch (error) { + elizaLogger.error("Error validating vector setup:", error); + return false; + } + } + + async init(): Promise { + try { + await this.setEmbeddingProviderSettings(); + + const { rows } = await this.db.execute(sql` + SELECT EXISTS ( + SELECT FROM information_schema.tables + WHERE table_name = 'rooms' + ); + `); + + if (!rows[0].exists || !(await this.validateVectorSetup())) { + await runMigrations(this.pool); + } + } catch (error) { + elizaLogger.error("Failed to initialize database:", error); + throw error; + } + } + + async close(): Promise { + try { + if (this.db && (this.db as any).client) { + await (this.db as any).client.close(); + } + } catch (error) { + elizaLogger.error("Failed to close database connection:", { + error: error instanceof Error ? error.message : String(error), + }); + throw error; + } + } + + async testConnection(): Promise { + try { + const result = await this.db.execute(sql`SELECT NOW()`); + elizaLogger.success( + "Database connection test successful:", + result.rows[0] + ); + return true; + } catch (error) { + elizaLogger.error("Database connection test failed:", error); + throw new Error( + `Failed to connect to database: ${(error as Error).message}` + ); + } + } + + async getAccountById(userId: UUID): Promise { + return this.withDatabase(async () => { + const result = await this.db + .select() + .from(accountTable) + .where(eq(accountTable.id, userId)) + .limit(1); + + if (result.length === 0) return null; + + const account = result[0]; + + return { + id: account.id as UUID, + name: account.name ?? "", + username: account.username ?? "", + email: account.email ?? "", + avatarUrl: account.avatarUrl ?? "", + details: account.details ?? {}, + }; + }, "getAccountById"); + } + + async createAccount(account: Account): Promise { + return this.withDatabase(async () => { + try { + const accountId = account.id ?? v4(); + + await this.db.insert(accountTable).values({ + id: accountId, + name: account.name ?? null, + username: account.username ?? null, + email: account.email ?? "", + avatarUrl: account.avatarUrl ?? null, + details: sql`${account.details}::jsonb` || {}, + }); + + elizaLogger.debug("Account created successfully:", { + accountId, + }); + + return true; + } catch (error) { + elizaLogger.error("Error creating account:", { + error: + error instanceof Error ? error.message : String(error), + accountId: account.id, + name: account.name, + }); + return false; + } + }, "createAccount"); + } + + async getMemories(params: { + roomId: UUID; + count?: number; + unique?: boolean; + tableName: string; + agentId?: UUID; + start?: number; + end?: number; + }): Promise { + if (!params.tableName) throw new Error("tableName is required"); + if (!params.roomId) throw new Error("roomId is required"); + + return this.withDatabase(async () => { + const conditions = [ + eq(memoryTable.type, params.tableName), + eq(memoryTable.roomId, params.roomId), + ]; + + if (params.start) { + conditions.push(gte(memoryTable.createdAt, params.start)); + } + + if (params.end) { + conditions.push(lte(memoryTable.createdAt, params.end)); + } + + if (params.unique) { + conditions.push(eq(memoryTable.unique, true)); + } + + if (params.agentId) { + conditions.push(eq(memoryTable.agentId, params.agentId)); + } + + const query = this.db + .select() + .from(memoryTable) + .where(and(...conditions)) + .orderBy(desc(memoryTable.createdAt)); + + const rows = params.count + ? await query.limit(params.count) + : await query; + + return rows.map((row) => ({ + id: row.id as UUID, + type: row.type, + createdAt: row.createdAt, + content: + typeof row.content === "string" + ? JSON.parse(row.content) + : row.content, + embedding: row.embedding ?? undefined, + userId: row.userId as UUID, + agentId: row.agentId as UUID, + roomId: row.roomId as UUID, + unique: row.unique, + })); + }, "getMemories"); + } + + async getMemoriesByRoomIds(params: { + roomIds: UUID[]; + agentId?: UUID; + tableName: string; + limit?: number; + }): Promise { + return this.withDatabase(async () => { + if (params.roomIds.length === 0) return []; + + const conditions = [ + eq(memoryTable.type, params.tableName), + inArray(memoryTable.roomId, params.roomIds), + ]; + + if (params.agentId) { + conditions.push(eq(memoryTable.agentId, params.agentId)); + } + + const query = this.db + .select() + .from(memoryTable) + .where(and(...conditions)) + .orderBy(desc(memoryTable.createdAt)); + + const rows = params.limit + ? await query.limit(params.limit) + : await query; + + return rows.map((row) => ({ + id: row.id as UUID, + createdAt: row.createdAt, + content: + typeof row.content === "string" + ? JSON.parse(row.content) + : row.content, + embedding: row.embedding, + userId: row.userId as UUID, + agentId: row.agentId as UUID, + roomId: row.roomId as UUID, + unique: row.unique, + })) as Memory[]; + }, "getMemoriesByRoomIds"); + } + + async getMemoryById(id: UUID): Promise { + return this.withDatabase(async () => { + const result = await this.db + .select() + .from(memoryTable) + .where(eq(memoryTable.id, id)) + .limit(1); + + if (result.length === 0) return null; + + const row = result[0]; + return { + id: row.id as UUID, + createdAt: row.createdAt, + content: + typeof row.content === "string" + ? JSON.parse(row.content) + : row.content, + embedding: row.embedding ?? undefined, + userId: row.userId as UUID, + agentId: row.agentId as UUID, + roomId: row.roomId as UUID, + unique: row.unique, + }; + }, "getMemoryById"); + } + + async getMemoriesByIds( + memoryIds: UUID[], + tableName?: string + ): Promise { + return this.withDatabase(async () => { + if (memoryIds.length === 0) return []; + const conditions = [inArray(memoryTable.id, memoryIds)]; + + if (tableName) { + conditions.push(eq(memoryTable.type, tableName)); + } + + const rows = await this.db + .select() + .from(memoryTable) + .where(and(...conditions)) + .orderBy(desc(memoryTable.createdAt)); + + return rows.map((row) => ({ + id: row.id as UUID, + createdAt: row.createdAt, + content: + typeof row.content === "string" + ? JSON.parse(row.content) + : row.content, + embedding: row.embedding ?? undefined, + userId: row.userId as UUID, + agentId: row.agentId as UUID, + roomId: row.roomId as UUID, + unique: row.unique, + })); + }, "getMemoriesByIds"); + } + + async getCachedEmbeddings(opts: { + query_table_name: string; + query_threshold: number; + query_input: string; + query_field_name: string; + query_field_sub_name: string; + query_match_count: number; + }): Promise<{ embedding: number[]; levenshtein_score: number }[]> { + return this.withDatabase(async () => { + try { + const results = await this.db.execute<{ + embedding: number[]; + levenshtein_score: number; + }>(sql` + WITH content_text AS ( + SELECT + embedding, + COALESCE( + content->>${opts.query_field_sub_name}, + '' + ) as content_text + FROM memories + WHERE type = ${opts.query_table_name} + AND content->>${opts.query_field_sub_name} IS NOT NULL + ) + SELECT + embedding, + levenshtein(${opts.query_input}, content_text) as levenshtein_score + FROM content_text + WHERE levenshtein(${opts.query_input}, content_text) <= ${opts.query_threshold} + ORDER BY levenshtein_score + LIMIT ${opts.query_match_count} + `); + + return results.rows + .map((row) => ({ + embedding: Array.isArray(row.embedding) + ? row.embedding + : typeof row.embedding === "string" + ? JSON.parse(row.embedding) + : [], + levenshtein_score: Number(row.levenshtein_score), + })) + .filter((row) => Array.isArray(row.embedding)); + } catch (error) { + elizaLogger.error("Error in getCachedEmbeddings:", { + error: + error instanceof Error ? error.message : String(error), + tableName: opts.query_table_name, + fieldName: opts.query_field_name, + }); + if ( + error instanceof Error && + error.message === + "levenshtein argument exceeds maximum length of 255 characters" + ) { + return []; + } + throw error; + } + }, "getCachedEmbeddings"); + } + + async log(params: { + body: { [key: string]: unknown }; + userId: UUID; + roomId: UUID; + type: string; + }): Promise { + return this.withDatabase(async () => { + try { + await this.db.insert(logTable).values({ + body: sql`${params.body}::jsonb`, + userId: params.userId, + roomId: params.roomId, + type: params.type, + }); + } catch (error) { + elizaLogger.error("Failed to create log entry:", { + error: + error instanceof Error ? error.message : String(error), + type: params.type, + roomId: params.roomId, + userId: params.userId, + }); + throw error; + } + }, "log"); + } + + async getActorDetails(params: { roomId: string }): Promise { + if (!params.roomId) { + throw new Error("roomId is required"); + } + + return this.withDatabase(async () => { + try { + const result = await this.db + .select({ + id: accountTable.id, + name: accountTable.name, + username: accountTable.username, + details: accountTable.details, + }) + .from(participantTable) + .leftJoin( + accountTable, + eq(participantTable.userId, accountTable.id) + ) + .where(eq(participantTable.roomId, params.roomId)) + .orderBy(accountTable.name); + + elizaLogger.debug("Retrieved actor details:", { + roomId: params.roomId, + actorCount: result.length, + }); + + return result.map((row) => { + try { + const details = + typeof row.details === "string" + ? JSON.parse(row.details) + : row.details || {}; + + return { + id: row.id as UUID, + name: row.name ?? "", + username: row.username ?? "", + details: { + tagline: details.tagline ?? "", + summary: details.summary ?? "", + quote: details.quote ?? "", + }, + }; + } catch (error) { + elizaLogger.warn("Failed to parse actor details:", { + actorId: row.id, + error: + error instanceof Error + ? error.message + : String(error), + }); + + return { + id: row.id as UUID, + name: row.name ?? "", + username: row.username ?? "", + details: { + tagline: "", + summary: "", + quote: "", + }, + }; + } + }); + } catch (error) { + elizaLogger.error("Failed to fetch actor details:", { + roomId: params.roomId, + error: + error instanceof Error ? error.message : String(error), + }); + throw new Error( + `Failed to fetch actor details: ${ + error instanceof Error ? error.message : String(error) + }` + ); + } + }, "getActorDetails"); + } + + async searchMemories(params: { + tableName: string; + agentId: UUID; + roomId: UUID; + embedding: number[]; + match_threshold: number; + count: number; + unique: boolean; + }): Promise { + return await this.searchMemoriesByEmbedding(params.embedding, { + match_threshold: params.match_threshold, + count: params.count, + agentId: params.agentId, + roomId: params.roomId, + unique: params.unique, + tableName: params.tableName, + }); + } + + async updateGoalStatus(params: { + goalId: UUID; + status: GoalStatus; + }): Promise { + return this.withDatabase(async () => { + await this.db + .update(goalTable) + .set({ status: params.status }) + .where(eq(goalTable.id, params.goalId)); + }, "updateGoalStatus"); + } + + async searchMemoriesByEmbedding( + embedding: number[], + params: { + match_threshold?: number; + count?: number; + roomId?: UUID; + agentId?: UUID; + unique?: boolean; + tableName: string; + } + ): Promise { + return this.withDatabase(async () => { + const cleanVector = embedding.map((n) => + Number.isFinite(n) ? Number(n.toFixed(6)) : 0 + ); + + const similarity = sql`1 - (${cosineDistance( + memoryTable.embedding, + cleanVector + )})`; + + const conditions = [eq(memoryTable.type, params.tableName)]; + + if (params.unique) { + conditions.push(eq(memoryTable.unique, true)); + } + if (params.agentId) { + conditions.push(eq(memoryTable.agentId, params.agentId)); + } + if (params.roomId) { + conditions.push(eq(memoryTable.roomId, params.roomId)); + } + + if (params.match_threshold) { + conditions.push(gte(similarity, params.match_threshold)); + } + + const results = await this.db + .select({ + id: memoryTable.id, + type: memoryTable.type, + createdAt: memoryTable.createdAt, + content: memoryTable.content, + embedding: memoryTable.embedding, + userId: memoryTable.userId, + agentId: memoryTable.agentId, + roomId: memoryTable.roomId, + unique: memoryTable.unique, + similarity: similarity, + }) + .from(memoryTable) + .where(and(...conditions)) + .orderBy(desc(similarity)) + .limit(params.count ?? 10); + + return results.map((row) => ({ + id: row.id as UUID, + type: row.type, + createdAt: row.createdAt, + content: + typeof row.content === "string" + ? JSON.parse(row.content) + : row.content, + embedding: row.embedding ?? undefined, + userId: row.userId as UUID, + agentId: row.agentId as UUID, + roomId: row.roomId as UUID, + unique: row.unique, + similarity: row.similarity, + })); + }, "searchMemoriesByEmbedding"); + } + + async createMemory(memory: Memory, tableName: string): Promise { + return this.withDatabase(async () => { + elizaLogger.debug("DrizzleAdapter createMemory:", { + memoryId: memory.id, + embeddingLength: memory.embedding?.length, + contentLength: memory.content?.text?.length, + }); + + let isUnique = true; + if (memory.embedding) { + elizaLogger.info("Searching for similar memories:"); + const similarMemories = await this.searchMemoriesByEmbedding( + memory.embedding, + { + tableName, + roomId: memory.roomId, + match_threshold: 0.95, + count: 1, + } + ); + isUnique = similarMemories.length === 0; + } + + const contentToInsert = + typeof memory.content === "string" + ? JSON.parse(memory.content) + : memory.content; + + await this.db.insert(memoryTable).values([ + { + id: memory.id ?? v4(), + type: tableName, + content: sql`${contentToInsert}::jsonb`, + embedding: memory.embedding, + userId: memory.userId, + roomId: memory.roomId, + agentId: memory.agentId, + unique: memory.unique ?? isUnique, + createdAt: memory.createdAt, + }, + ]); + }, "createMemory"); + } + + async removeMemory(memoryId: UUID, tableName: string): Promise { + return this.withDatabase(async () => { + await this.db + .delete(memoryTable) + .where( + and( + eq(memoryTable.id, memoryId), + eq(memoryTable.type, tableName) + ) + ); + }, "removeMemory"); + } + + async removeAllMemories(roomId: UUID, tableName: string): Promise { + return this.withDatabase(async () => { + await this.db + .delete(memoryTable) + .where( + and( + eq(memoryTable.roomId, roomId), + eq(memoryTable.type, tableName) + ) + ); + + elizaLogger.debug("All memories removed successfully:", { + roomId, + tableName, + }); + }, "removeAllMemories"); + } + + async countMemories( + roomId: UUID, + unique = true, + tableName = "" + ): Promise { + if (!tableName) throw new Error("tableName is required"); + + return this.withDatabase(async () => { + const conditions = [ + eq(memoryTable.roomId, roomId), + eq(memoryTable.type, tableName), + ]; + + if (unique) { + conditions.push(eq(memoryTable.unique, true)); + } + + const result = await this.db + .select({ count: sql`count(*)` }) + .from(memoryTable) + .where(and(...conditions)); + + return Number(result[0]?.count ?? 0); + }, "countMemories"); + } + + async getGoals(params: { + roomId: UUID; + userId?: UUID | null; + onlyInProgress?: boolean; + count?: number; + }): Promise { + return this.withDatabase(async () => { + const conditions = [eq(goalTable.roomId, params.roomId)]; + + if (params.userId) { + conditions.push(eq(goalTable.userId, params.userId)); + } + + if (params.onlyInProgress) { + conditions.push( + eq(goalTable.status, "IN_PROGRESS" as GoalStatus) + ); + } + + const query = this.db + .select() + .from(goalTable) + .where(and(...conditions)) + .orderBy(desc(goalTable.createdAt)); + + const result = await (params.count + ? query.limit(params.count) + : query); + + return result.map((row) => ({ + id: row.id as UUID, + roomId: row.roomId as UUID, + userId: row.userId as UUID, + name: row.name ?? "", + status: (row.status ?? "NOT_STARTED") as GoalStatus, + description: row.description ?? "", + objectives: row.objectives as any[], + createdAt: row.createdAt, + })); + }, "getGoals"); + } + + async updateGoal(goal: Goal): Promise { + return this.withDatabase(async () => { + try { + await this.db + .update(goalTable) + .set({ + name: goal.name, + status: goal.status, + objectives: goal.objectives, + }) + .where(eq(goalTable.id, goal.id as string)); + } catch (error) { + elizaLogger.error("Failed to update goal:", { + error: + error instanceof Error ? error.message : String(error), + goalId: goal.id, + status: goal.status, + }); + throw error; + } + }, "updateGoal"); + } + + async createGoal(goal: Goal): Promise { + try { + await this.db.insert(goalTable).values({ + id: goal.id ?? v4(), + roomId: goal.roomId, + userId: goal.userId, + name: goal.name, + status: goal.status, + objectives: sql`${goal.objectives}::jsonb`, + }); + } catch (error) { + elizaLogger.error("Failed to update goal:", { + goalId: goal.id, + error: error instanceof Error ? error.message : String(error), + status: goal.status, + }); + throw error; + } + } + + async removeGoal(goalId: UUID): Promise { + if (!goalId) throw new Error("Goal ID is required"); + + return this.withDatabase(async () => { + try { + await this.db.delete(goalTable).where(eq(goalTable.id, goalId)); + + elizaLogger.debug("Goal removal attempt:", { + goalId, + removed: true, + }); + } catch (error) { + elizaLogger.error("Failed to remove goal:", { + error: + error instanceof Error ? error.message : String(error), + goalId, + }); + throw error; + } + }, "removeGoal"); + } + + async removeAllGoals(roomId: UUID): Promise { + return this.withDatabase(async () => { + await this.db.delete(goalTable).where(eq(goalTable.roomId, roomId)); + }, "removeAllGoals"); + } + + async getRoom(roomId: UUID): Promise { + return this.withDatabase(async () => { + const result = await this.db + .select({ + id: roomTable.id, + }) + .from(roomTable) + .where(eq(roomTable.id, roomId)) + .limit(1); + + return (result[0]?.id as UUID) ?? null; + }, "getRoom"); + } + + async createRoom(roomId?: UUID): Promise { + return this.withDatabase(async () => { + const newRoomId = roomId || v4(); + await this.db.insert(roomTable).values([ + { + id: newRoomId, + }, + ]); + return newRoomId as UUID; + }, "createRoom"); + } + + async removeRoom(roomId: UUID): Promise { + if (!roomId) throw new Error("Room ID is required"); + return this.withDatabase(async () => { + await this.db.delete(roomTable).where(eq(roomTable.id, roomId)); + }, "removeRoom"); + } + + async getRoomsForParticipant(userId: UUID): Promise { + return this.withDatabase(async () => { + const result = await this.db + .select({ roomId: participantTable.roomId }) + .from(participantTable) + .where(eq(participantTable.userId, userId)); + + return result.map((row) => row.roomId as UUID); + }, "getRoomsForParticipant"); + } + + async getRoomsForParticipants(userIds: UUID[]): Promise { + return this.withDatabase(async () => { + const result = await this.db + .selectDistinct({ roomId: participantTable.roomId }) + .from(participantTable) + .where(inArray(participantTable.userId, userIds)); + + return result.map((row) => row.roomId as UUID); + }, "getRoomsForParticipants"); + } + + async addParticipant(userId: UUID, roomId: UUID): Promise { + return this.withDatabase(async () => { + try { + await this.db.insert(participantTable).values({ + id: v4(), + userId, + roomId, + }); + return true; + } catch (error) { + elizaLogger.error("Failed to add participant:", { + error: + error instanceof Error ? error.message : String(error), + userId, + roomId, + }); + return false; + } + }, "addParticipant"); + } + + async removeParticipant(userId: UUID, roomId: UUID): Promise { + return this.withDatabase(async () => { + try { + const result = await this.db + .delete(participantTable) + .where( + and( + eq(participantTable.userId, userId), + eq(participantTable.roomId, roomId) + ) + ) + .returning(); + + return result.length > 0; + } catch (error) { + elizaLogger.error("Failed to remove participant:", { + error: + error instanceof Error ? error.message : String(error), + userId, + roomId, + }); + return false; + } + }, "removeParticipant"); + } + + async getParticipantsForAccount(userId: UUID): Promise { + return this.withDatabase(async () => { + const result = await this.db + .select({ + id: participantTable.id, + userId: participantTable.userId, + roomId: participantTable.roomId, + lastMessageRead: participantTable.lastMessageRead, + }) + .from(participantTable) + .where(eq(participantTable.userId, userId)); + + const account = await this.getAccountById(userId); + + return result.map((row) => ({ + id: row.id as UUID, + account: account!, + })); + }, "getParticipantsForAccount"); + } + + async getParticipantsForRoom(roomId: UUID): Promise { + return this.withDatabase(async () => { + const result = await this.db + .select({ userId: participantTable.userId }) + .from(participantTable) + .where(eq(participantTable.roomId, roomId)); + + return result.map((row) => row.userId as UUID); + }, "getParticipantsForRoom"); + } + + async getParticipantUserState( + roomId: UUID, + userId: UUID + ): Promise<"FOLLOWED" | "MUTED" | null> { + return this.withDatabase(async () => { + const result = await this.db + .select({ userState: participantTable.userState }) + .from(participantTable) + .where( + and( + eq(participantTable.roomId, roomId), + eq(participantTable.userId, userId) + ) + ) + .limit(1); + + return ( + (result[0]?.userState as "FOLLOWED" | "MUTED" | null) ?? null + ); + }, "getParticipantUserState"); + } + + async setParticipantUserState( + roomId: UUID, + userId: UUID, + state: "FOLLOWED" | "MUTED" | null + ): Promise { + return this.withDatabase(async () => { + await this.db + .update(participantTable) + .set({ userState: state }) + .where( + and( + eq(participantTable.roomId, roomId), + eq(participantTable.userId, userId) + ) + ); + }, "setParticipantUserState"); + } + + async createRelationship(params: { + userA: UUID; + userB: UUID; + }): Promise { + // Input validation + if (!params.userA || !params.userB) { + throw new Error("userA and userB are required"); + } + + return this.withDatabase(async () => { + try { + const relationshipId = v4(); + await this.db.insert(relationshipTable).values({ + id: relationshipId, + userA: params.userA, + userB: params.userB, + userId: params.userA, + }); + + elizaLogger.debug("Relationship created successfully:", { + relationshipId, + userA: params.userA, + userB: params.userB, + }); + + return true; + } catch (error) { + // Check for unique constraint violation or other specific errors + if ((error as { code?: string }).code === "23505") { + // Unique violation + elizaLogger.warn("Relationship already exists:", { + userA: params.userA, + userB: params.userB, + error: + error instanceof Error + ? error.message + : String(error), + }); + } else { + elizaLogger.error("Failed to create relationship:", { + userA: params.userA, + userB: params.userB, + error: + error instanceof Error + ? error.message + : String(error), + }); + } + return false; + } + }, "createRelationship"); + } + + async getRelationship(params: { + userA: UUID; + userB: UUID; + }): Promise { + if (!params.userA || !params.userB) { + throw new Error("userA and userB are required"); + } + + return this.withDatabase(async () => { + try { + const result = await this.db + .select() + .from(relationshipTable) + .where( + or( + and( + eq(relationshipTable.userA, params.userA), + eq(relationshipTable.userB, params.userB) + ), + and( + eq(relationshipTable.userA, params.userB), + eq(relationshipTable.userB, params.userA) + ) + ) + ) + .limit(1); + + if (result.length > 0) { + return result[0] as unknown as Relationship; + } + + elizaLogger.debug("No relationship found between users:", { + userA: params.userA, + userB: params.userB, + }); + return null; + } catch (error) { + elizaLogger.error("Error fetching relationship:", { + userA: params.userA, + userB: params.userB, + error: + error instanceof Error ? error.message : String(error), + }); + throw error; + } + }, "getRelationship"); + } + + async getRelationships(params: { userId: UUID }): Promise { + if (!params.userId) { + throw new Error("userId is required"); + } + return this.withDatabase(async () => { + try { + const result = await this.db + .select() + .from(relationshipTable) + .where( + or( + eq(relationshipTable.userA, params.userId), + eq(relationshipTable.userB, params.userId) + ) + ) + .orderBy(desc(relationshipTable.createdAt)); + + elizaLogger.debug("Retrieved relationships:", { + userId: params.userId, + count: result.length, + }); + + return result as unknown as Relationship[]; + } catch (error) { + elizaLogger.error("Failed to fetch relationships:", { + userId: params.userId, + error: + error instanceof Error ? error.message : String(error), + }); + throw error; + } + }, "getRelationships"); + } + + private async createKnowledgeChunk( + params: { + id: UUID; + originalId: UUID; + agentId: UUID | null; + content: any; + embedding: Float32Array | undefined | null; + chunkIndex: number; + isShared: boolean; + createdAt: number; + }, + tx: NodePgDatabase + ): Promise { + const embedding = params.embedding + ? Array.from(params.embedding) + : null; + + const patternId = `${params.originalId}-chunk-${params.chunkIndex}`; + const contentWithPatternId = { + ...params.content, + metadata: { + ...params.content.metadata, + patternId, + }, + }; + + await tx.insert(knowledgeTable).values({ + id: params.id, + agentId: params.agentId, + content: sql`${contentWithPatternId}::jsonb`, + embedding: embedding, + isMain: false, + originalId: params.originalId, + chunkIndex: params.chunkIndex, + isShared: params.isShared, + createdAt: params.createdAt, + }); + } + + async removeKnowledge(id: UUID): Promise { + return this.withDatabase(async () => { + try { + await this.db + .delete(knowledgeTable) + .where(eq(knowledgeTable.id, id)); + } catch (error) { + elizaLogger.error("Failed to remove knowledge:", { + error: + error instanceof Error ? error.message : String(error), + id, + }); + throw error; + } + }, "removeKnowledge"); + } + + async clearKnowledge(agentId: UUID, shared?: boolean): Promise { + return this.withDatabase(async () => { + if (shared) { + await this.db + .delete(knowledgeTable) + .where( + or( + eq(knowledgeTable.agentId, agentId), + eq(knowledgeTable.isShared, true) + ) + ); + } else { + await this.db + .delete(knowledgeTable) + .where(eq(knowledgeTable.agentId, agentId)); + } + }, "clearKnowledge"); + } + + async getCache(params: { + agentId: UUID; + key: string; + }): Promise { + return this.withDatabase(async () => { + try { + const result = await this.db + .select() + .from(cacheTable) + .where( + and( + eq(cacheTable.agentId, params.agentId), + eq(cacheTable.key, params.key) + ) + ); + + return result[0]?.value || undefined; + } catch (error) { + elizaLogger.error("Error fetching cache", { + error: + error instanceof Error ? error.message : String(error), + key: params.key, + agentId: params.agentId, + }); + return undefined; + } + }, "getCache"); + } + + async setCache(params: { + agentId: UUID; + key: string; + value: string; + }): Promise { + return this.withDatabase(async () => { + try { + await this.db + .insert(cacheTable) + .values({ + key: params.key, + agentId: params.agentId, + value: sql`${params.value}::jsonb`, + }) + .onConflictDoUpdate({ + target: [cacheTable.key, cacheTable.agentId], + set: { + value: params.value, + }, + }); + return true; + } catch (error) { + elizaLogger.error("Error setting cache", { + error: + error instanceof Error ? error.message : String(error), + key: params.key, + agentId: params.agentId, + }); + return false; + } + }, "setCache"); + } + + async deleteCache(params: { + agentId: UUID; + key: string; + }): Promise { + return this.withDatabase(async () => { + try { + await this.db + .delete(cacheTable) + .where( + and( + eq(cacheTable.agentId, params.agentId), + eq(cacheTable.key, params.key) + ) + ); + return true; + } catch (error) { + elizaLogger.error("Error deleting cache", { + error: + error instanceof Error ? error.message : String(error), + key: params.key, + agentId: params.agentId, + }); + return false; + } + }, "deleteCache"); + } +} diff --git a/packages/plugin-drizzle/src/migrations.ts b/packages/plugin-drizzle/src/migrations.ts new file mode 100644 index 00000000000..6478227582c --- /dev/null +++ b/packages/plugin-drizzle/src/migrations.ts @@ -0,0 +1,22 @@ +import { migrate } from "drizzle-orm/node-postgres/migrator"; +import { fileURLToPath } from 'url'; +import path from "path"; +import { drizzle } from "drizzle-orm/node-postgres"; +import { Pool } from "pg"; +import { elizaLogger } from "@elizaos/core"; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); + +export async function runMigrations(pgPool: Pool): Promise { + try { + const db = drizzle(pgPool); + await migrate(db, { + migrationsFolder: path.resolve(__dirname, "../drizzle/migrations"), + }); + elizaLogger.info("Migrations completed successfully!"); + } catch (error) { + elizaLogger.error("Failed to run database migrations:", error); + throw error; + } +} diff --git a/packages/plugin-drizzle/src/schema.ts b/packages/plugin-drizzle/src/schema.ts new file mode 100644 index 00000000000..b1ade7c213d --- /dev/null +++ b/packages/plugin-drizzle/src/schema.ts @@ -0,0 +1,177 @@ +import { + boolean, + customType, + integer, + jsonb, + pgTable, + text, + uuid, + vector, +} from "drizzle-orm/pg-core"; +import { getEmbeddingConfig } from "@elizaos/core"; +import { sql } from "drizzle-orm"; + +// Const. +const DIMENSIONS = getEmbeddingConfig().dimensions; + +// Custom types. +const stringJsonb = customType<{ data: string; driverData: string }>({ + dataType() { + return "jsonb"; + }, + toDriver(value: string): string { + return JSON.stringify(value); + }, + fromDriver(value: string): string { + return JSON.stringify(value); + }, +}); + +const numberTimestamp = customType<{ data: number; driverData: string }>({ + dataType() { + return "timestamptz"; + }, + toDriver(value: number): string { + return new Date(value).toISOString(); + }, + fromDriver(value: string): number { + return new Date(value).getTime(); + }, +}); + +// Tables. +export const accountTable = pgTable("accounts", { + id: uuid("id").primaryKey().notNull(), + createdAt: numberTimestamp("createdAt") + .default(sql`now()`) + .notNull(), + name: text("name"), + username: text("username"), + email: text("email").notNull(), + avatarUrl: text("avatarUrl"), + details: jsonb("details").default(""), +}); + +export const memoryTable = pgTable("memories", { + id: uuid("id").primaryKey().notNull(), + type: text("type").notNull(), + createdAt: numberTimestamp("createdAt") + .default(sql`now()`) + .notNull(), + content: jsonb("content").default(""), + embedding: vector("embedding", { + dimensions: DIMENSIONS, + }), + userId: uuid("userId") + .references(() => accountTable.id) + .references(() => accountTable.id), + agentId: uuid("agentId") + .references(() => accountTable.id) + .references(() => accountTable.id), + roomId: uuid("roomId") + .references(() => roomTable.id) + .references(() => roomTable.id), + unique: boolean("unique").default(true).notNull(), +}); + +export const roomTable = pgTable("rooms", { + id: uuid("id").primaryKey().notNull(), + createdAt: numberTimestamp("createdAt") + .default(sql`now()`) + .notNull(), +}); + +export const goalTable = pgTable("goals", { + id: uuid("id").primaryKey().notNull(), + createdAt: numberTimestamp("createdAt") + .default(sql`now()`) + .notNull(), + userId: uuid("userId") + .references(() => accountTable.id) + .references(() => accountTable.id), + name: text("name"), + status: text("status"), + description: text("description"), + roomId: uuid("roomId") + .references(() => roomTable.id) + .references(() => roomTable.id), + objectives: jsonb("objectives").default(""), +}); + +export const logTable = pgTable("logs", { + id: uuid("id").defaultRandom().primaryKey().notNull(), + createdAt: numberTimestamp("createdAt") + .default(sql`now()`) + .notNull(), + userId: uuid("userId") + .notNull() + .references(() => accountTable.id) + .references(() => accountTable.id), + body: jsonb("body").default(""), + type: text("type").notNull(), + roomId: uuid("roomId") + .notNull() + .references(() => roomTable.id) + .references(() => roomTable.id), +}); + +export const participantTable = pgTable("participants", { + id: uuid("id").primaryKey().notNull(), + createdAt: numberTimestamp("createdAt") + .default(sql`now()`) + .notNull(), + userId: uuid("userId") + .references(() => accountTable.id) + .references(() => accountTable.id), + roomId: uuid("roomId") + .references(() => roomTable.id) + .references(() => roomTable.id), + userState: text("userState"), + lastMessageRead: text("last_message_read"), +}); + +export const relationshipTable = pgTable("relationships", { + id: uuid("id").primaryKey().notNull(), + createdAt: numberTimestamp("createdAt") + .default(sql`now()`) + .notNull(), + userA: uuid("userA") + .notNull() + .references(() => accountTable.id) + .references(() => accountTable.id), + userB: uuid("userB") + .notNull() + .references(() => accountTable.id) + .references(() => accountTable.id), + status: text("status"), + userId: uuid("userId") + .notNull() + .references(() => accountTable.id) + .references(() => accountTable.id), +}); + +export const knowledgeTable = pgTable("knowledge", { + id: uuid("id").primaryKey().notNull(), + agentId: uuid("agentId").references(() => accountTable.id), + content: jsonb("content").default(""), + embedding: vector("embedding", { + dimensions: DIMENSIONS, + }), + createdAt: numberTimestamp("createdAt") + .default(sql`now()`) + .notNull(), + isMain: boolean("isMain").default(false), + originalId: uuid("originalId"), + chunkIndex: integer("chunkIndex"), + isShared: boolean("isShared").default(false), +}); + +export const cacheTable = pgTable("cache", { + key: text("key").notNull(), + agentId: text("agentId").notNull(), + value: stringJsonb("value").default(""), + createdAt: numberTimestamp("createdAt") + .default(sql`now()`) + .notNull(), + expiresAt: numberTimestamp("expiresAt"), +}); diff --git a/packages/plugin-drizzle/tsconfig.json b/packages/plugin-drizzle/tsconfig.json new file mode 100644 index 00000000000..ad27e288d02 --- /dev/null +++ b/packages/plugin-drizzle/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../core/tsconfig.json", + "compilerOptions": { + "outDir": "dist", + "rootDir": "src", + "strict": true + }, + "include": ["src/**/*.ts", "src/migrations.ts", "src/schema.ts"], + "exclude": ["node_modules", "dist"] +} diff --git a/packages/plugin-drizzle/tsup.config.ts b/packages/plugin-drizzle/tsup.config.ts new file mode 100644 index 00000000000..9acebc5ba9a --- /dev/null +++ b/packages/plugin-drizzle/tsup.config.ts @@ -0,0 +1,21 @@ +import { defineConfig } from "tsup"; + +export default defineConfig({ + entry: ["src/index.ts"], + outDir: "dist", + sourcemap: true, + clean: true, + format: ["esm"], // Ensure you're targeting CommonJS + external: [ + "dotenv", // Externalize dotenv to prevent bundling + "fs", // Externalize fs to use Node.js built-in module + "path", // Externalize other built-ins if necessary + "@reflink/reflink", + "@node-llama-cpp", + "https", + "http", + "agentkeepalive", + "uuid", + // Add other modules you want to externalize + ], +}); diff --git a/packages/plugin-drizzle/vitest.config.ts b/packages/plugin-drizzle/vitest.config.ts new file mode 100644 index 00000000000..9f496d6c2a2 --- /dev/null +++ b/packages/plugin-drizzle/vitest.config.ts @@ -0,0 +1,12 @@ +import { defineConfig } from 'vitest/config'; + +export default defineConfig({ + test: { + globals: true, + environment: 'node', + // Increase timeout for all tests + testTimeout: 30000, // 30 seconds + // Increase hook timeout specifically + hookTimeout: 40000, // 40 seconds + }, +}); From b02fc4271d0c2d3329a06edd301e41def2287491 Mon Sep 17 00:00:00 2001 From: Shaw Date: Sun, 9 Feb 2025 17:40:11 -0500 Subject: [PATCH 02/12] remove some garbage in messaging and get image description working in discord --- bun.lockb | Bin 0 -> 1347304 bytes packages/agent/src/defaultCharacter.ts | 4 +- packages/plugin-discord/package.json | 6 +- packages/plugin-discord/src/messages.ts | 56 --- packages/plugin-discord/tsconfig.json | 3 +- packages/plugin-local-ai/src/index.ts | 2 +- packages/plugin-openai/src/index.ts | 37 +- .../plugin-telegram/src/messageManager.ts | 18 +- packages/plugin-twitter/package.json | 1 - packages/plugin-twitter/src/base.ts | 2 +- packages/plugin-twitter/src/post.ts | 356 +----------------- 11 files changed, 56 insertions(+), 429 deletions(-) create mode 100755 bun.lockb diff --git a/bun.lockb b/bun.lockb new file mode 100755 index 0000000000000000000000000000000000000000..0f0943c519e860333fda7550d616a6b4c1bdfb6f GIT binary patch literal 1347304 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
7eCn5(#E?GT6M%RF}o&A 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 lEw { @@ -778,14 +738,6 @@ export class MessageManager { // if the message is from us, ignore if (message.author.id === this.client.user?.id) return true; - // Honor mentions-only mode - if ( - this.runtime.character.clientConfig?.discord - ?.shouldRespondOnlyToMentions - ) { - return !this._isMessageForMe(message); - } - let messageContent = message.content.toLowerCase(); // Replace the bot's @ping with the character name @@ -870,14 +822,6 @@ export class MessageManager { if (message.author.id === this.client.user?.id) return false; // if (message.author.bot) return false; - // Honor mentions-only mode - if ( - this.runtime.character.clientConfig?.discord - ?.shouldRespondOnlyToMentions - ) { - return this._isMessageForMe(message); - } - const channelState = this.interestChannels[message.channelId]; if (message.mentions.has(this.client.user?.id as string)) return true; diff --git a/packages/plugin-discord/tsconfig.json b/packages/plugin-discord/tsconfig.json index 2153cf41345..ba81284cb21 100644 --- a/packages/plugin-discord/tsconfig.json +++ b/packages/plugin-discord/tsconfig.json @@ -2,8 +2,7 @@ "compilerOptions": { "outDir": "dist", "rootDir": "src", - "lib": ["ESNext"], - "target": "ESNext", + "lib": ["ESNext", "dom"], "module": "Preserve", "moduleResolution": "Bundler", "strict": false, diff --git a/packages/plugin-local-ai/src/index.ts b/packages/plugin-local-ai/src/index.ts index 7aea4cd0388..37feb69a886 100644 --- a/packages/plugin-local-ai/src/index.ts +++ b/packages/plugin-local-ai/src/index.ts @@ -209,7 +209,7 @@ export const localAIPlugin: Plugin = { }, // Image description using local Florence model - [ModelClass.IMAGE_DESCRIPTION]: async ({ imageUrl, runtime }) => { + [ModelClass.IMAGE_DESCRIPTION]: async (imageUrl) => { try { // TODO: Add florence diff --git a/packages/plugin-openai/src/index.ts b/packages/plugin-openai/src/index.ts index 817c74d6ca3..8ecc1257a75 100644 --- a/packages/plugin-openai/src/index.ts +++ b/packages/plugin-openai/src/index.ts @@ -218,26 +218,51 @@ export const openaiPlugin: Plugin = { const typedData = data as { data: { url: string }[] }; return typedData.data; }, - [ModelClass.IMAGE_DESCRIPTION]: async (params: { imageUrl: string }) => { + [ModelClass.IMAGE_DESCRIPTION]: async (imageUrl: string) => { + console.log("IMAGE_DESCRIPTION") const baseURL = process.env.OPENAI_BASE_URL ?? "https://api.openai.com/v1"; + console.log("baseURL", baseURL) const openai = createOpenAI({ apiKey: process.env.OPENAI_API_KEY, baseURL, }); - const prompt = `Provide a detailed description of the image found at this URL: ${params.imageUrl}`; - const { text: description } = await aiGenerateText({ + + const { text } = await aiGenerateText({ model: openai.languageModel( process.env.OPENAI_SMALL_MODEL ?? "gpt-4o-mini" ), - prompt, + messages: [ + { + role: "system", + content: "Provide a title and brief description of the image. Structure this as XML with the following syntax:\n{{title}}\n{{description}}\nReplacing the handlerbars with the actual text" + }, + { + role: "user", + content: [{ + type: "image" as "image", + image: imageUrl + }] + } + ], temperature: 0.7, - maxTokens: 256, + maxTokens: 1024, frequencyPenalty: 0, presencePenalty: 0, stopSequences: [], }); - return description; + + const titleMatch = text.match(/(.*?)<\/title>/); + const descriptionMatch = text.match(/<description>(.*?)<\/description>/); + + if (!titleMatch || !descriptionMatch) { + throw new Error("Could not parse title or description from response"); + } + + return { + title: titleMatch[1], + description: descriptionMatch[1] + }; }, [ModelClass.TRANSCRIPTION]: async (params: { audioFile: any; diff --git a/packages/plugin-telegram/src/messageManager.ts b/packages/plugin-telegram/src/messageManager.ts index 25ba71fd060..f3b33b64fc6 100644 --- a/packages/plugin-telegram/src/messageManager.ts +++ b/packages/plugin-telegram/src/messageManager.ts @@ -416,11 +416,8 @@ export class MessageManager { return ( isReplyToBot || - isMentioned || - (!this.runtime.character.clientConfig?.telegram - ?.shouldRespondOnlyToMentions && - hasUsername) - ); + isMentioned + ) } private _checkInterest(chatId: string): boolean { @@ -456,9 +453,7 @@ export class MessageManager { if (imageUrl) { const { title, description } = - await this.runtime.call(ModelClass.IMAGE_DESCRIPTION, { - imageUrl - }) + await this.runtime.call(ModelClass.IMAGE_DESCRIPTION, imageUrl) return { description: `[Image: ${title}\n${description}]` }; } } catch (error) { @@ -473,13 +468,6 @@ export class MessageManager { message: Message, state: State ): Promise<boolean> { - if ( - this.runtime.character.clientConfig?.telegram - ?.shouldRespondOnlyToMentions - ) { - return this._isMessageForMe(message); - } - // Respond if bot is mentioned if ( "text" in message && diff --git a/packages/plugin-twitter/package.json b/packages/plugin-twitter/package.json index 740a56e45c0..4852369a161 100644 --- a/packages/plugin-twitter/package.json +++ b/packages/plugin-twitter/package.json @@ -19,7 +19,6 @@ "dist" ], "dependencies": { - "discord.js": "14.16.3", "glob": "11.0.0", "@roamhq/wrtc": "^0.8.0", "@sinclair/typebox": "^0.32.20", diff --git a/packages/plugin-twitter/src/base.ts b/packages/plugin-twitter/src/base.ts index 14df856ff28..f64fe3c5bf2 100644 --- a/packages/plugin-twitter/src/base.ts +++ b/packages/plugin-twitter/src/base.ts @@ -134,7 +134,7 @@ export class ClientBase extends EventEmitter { /** * Parse the raw tweet data into a standardized Tweet object. */ - private parseTweet(raw: any, depth = 0, maxDepth = 3): Tweet { + parseTweet(raw: any, depth = 0, maxDepth = 3): Tweet { // If we've reached maxDepth, don't parse nested quotes/retweets further const canRecurse = depth < maxDepth; diff --git a/packages/plugin-twitter/src/post.ts b/packages/plugin-twitter/src/post.ts index c6ed24a5420..3386b3085b2 100644 --- a/packages/plugin-twitter/src/post.ts +++ b/packages/plugin-twitter/src/post.ts @@ -14,13 +14,6 @@ import { truncateToCompleteSentence, type UUID, } from "@elizaos/core"; -import { - Client, - Events, - GatewayIntentBits, - Partials, - TextChannel, -} from "discord.js"; import type { ClientBase } from "./base.ts"; import type { Tweet } from "./client"; import { DEFAULT_MAX_TWEET_LENGTH } from "./environment.ts"; @@ -98,10 +91,6 @@ export class TwitterPostClient { private lastProcessTime = 0; private stopProcessingActions = false; private isDryRun: boolean; - private discordClientForApproval: Client; - private approvalRequired = false; - private discordApprovalChannelId: string; - private approvalCheckInterval: number; constructor(client: ClientBase, runtime: IAgentRuntime) { this.client = client; @@ -158,74 +147,6 @@ export class TwitterPostClient { "Twitter client initialized in dry run mode - no actual tweets should be posted" ); } - - // Initialize Discord webhook - const approvalRequired: boolean = - this.runtime - .getSetting("TWITTER_APPROVAL_ENABLED") - ?.toLocaleLowerCase() === "true"; - if (approvalRequired) { - const discordToken = this.runtime.getSetting( - "TWITTER_APPROVAL_DISCORD_BOT_TOKEN" - ); - const approvalChannelId = this.runtime.getSetting( - "TWITTER_APPROVAL_DISCORD_CHANNEL_ID" - ); - - const APPROVAL_CHECK_INTERVAL = - Number.parseInt( - this.runtime.getSetting("TWITTER_APPROVAL_CHECK_INTERVAL") - ) || 5 * 60 * 1000; // 5 minutes - - this.approvalCheckInterval = APPROVAL_CHECK_INTERVAL; - - if (!discordToken || !approvalChannelId) { - throw new Error( - "TWITTER_APPROVAL_DISCORD_BOT_TOKEN and TWITTER_APPROVAL_DISCORD_CHANNEL_ID are required for approval workflow" - ); - } - - this.approvalRequired = true; - this.discordApprovalChannelId = approvalChannelId; - - // Set up Discord client event handlers - this.setupDiscordClient(); - } - } - - private setupDiscordClient() { - this.discordClientForApproval = new Client({ - intents: [ - GatewayIntentBits.Guilds, - GatewayIntentBits.GuildMessages, - GatewayIntentBits.MessageContent, - GatewayIntentBits.GuildMessageReactions, - ], - partials: [Partials.Channel, Partials.Message, Partials.Reaction], - }); - this.discordClientForApproval.once( - Events.ClientReady, - (readyClient) => { - logger.log( - `Discord bot is ready as ${readyClient.user.tag}!` - ); - - // Generate invite link with required permissions - const invite = `https://discord.com/api/oauth2/authorize?client_id=${readyClient.user.id}&permissions=274877991936&scope=bot`; - // 274877991936 includes permissions for: - // - Send Messages - // - Read Messages/View Channels - // - Read Message History - - logger.log( - `Use this link to properly invite the Twitter Post Approval Discord bot: ${invite}` - ); - } - ); - // Login to Discord - this.discordClientForApproval.login( - this.runtime.getSetting("TWITTER_APPROVAL_DISCORD_BOT_TOKEN") - ); } async start() { @@ -302,15 +223,6 @@ export class TwitterPostClient { ); }); } - - // Start the pending tweet check loop if enabled - if (this.approvalRequired) this.runPendingTweetCheckLoop(); - } - - private runPendingTweetCheckLoop() { - setInterval(async () => { - await this.handlePendingTweet(); - }, this.approvalCheckInterval); } createTweetObject( @@ -606,31 +518,18 @@ export class TwitterPostClient { } try { - if (this.approvalRequired) { - // Send for approval instead of posting directly - logger.log( - `Sending Tweet For Approval:\n ${tweetTextForPosting}` - ); - await this.sendForApproval( - tweetTextForPosting, - roomId, - rawTweetContent - ); - logger.log("Tweet sent for approval"); - } else { - logger.log( - `Posting new tweet:\n ${tweetTextForPosting}` - ); - this.postTweet( - this.runtime, - this.client, - tweetTextForPosting, - roomId, - rawTweetContent, - this.twitterUsername, - mediaData - ); - } + logger.log( + `Posting new tweet:\n ${tweetTextForPosting}` + ); + this.postTweet( + this.runtime, + this.client, + tweetTextForPosting, + roomId, + rawTweetContent, + this.twitterUsername, + mediaData + ); } catch (error) { logger.error("Error sending tweet:", error); } @@ -732,7 +631,7 @@ export class TwitterPostClient { "twitter" ); - const timeline = await this.client.fetchFollowingTimeline(MAX_TIMELINES_TO_FETCH, []).map((tweet) => this.client.parseTweet(tweet)) + const timeline = (await this.client.twitterClient.fetchFollowingTimeline(MAX_TIMELINES_TO_FETCH, [])).map((tweet) => this.client.parseTweet(tweet)) const maxActionsProcessing = this.client.twitterConfig.MAX_ACTIONS_PROCESSING; @@ -1246,129 +1145,6 @@ export class TwitterPostClient { this.stopProcessingActions = true; } - private async sendForApproval( - tweetTextForPosting: string, - roomId: UUID, - rawTweetContent: string - ): Promise<string | null> { - try { - const embed = { - title: "New Tweet Pending Approval", - description: tweetTextForPosting, - fields: [ - { - name: "Character", - value: this.client.profile.username, - inline: true, - }, - { - name: "Length", - value: tweetTextForPosting.length.toString(), - inline: true, - }, - ], - footer: { - text: "Reply with '👍' to post or '❌' to discard, This will automatically expire and remove after 24 hours if no response received", - }, - timestamp: new Date().toISOString(), - }; - - const channel = await this.discordClientForApproval.channels.fetch( - this.discordApprovalChannelId - ); - - if (!channel || !(channel instanceof TextChannel)) { - throw new Error("Invalid approval channel"); - } - - const message = await channel.send({ embeds: [embed] }); - - // Store the pending tweet - const pendingTweetsKey = `twitter/${this.client.profile.username}/pendingTweet`; - const currentPendingTweets = - (await this.runtime.cacheManager.get<PendingTweet[]>( - pendingTweetsKey - )) || []; - // Add new pending tweet - currentPendingTweets.push({ - tweetTextForPosting, - roomId, - rawTweetContent, - discordMessageId: message.id, - channelId: this.discordApprovalChannelId, - timestamp: Date.now(), - }); - - // Store updated array - await this.runtime.cacheManager.set( - pendingTweetsKey, - currentPendingTweets - ); - - return message.id; - } catch (error) { - logger.error( - "Error Sending Twitter Post Approval Request:", - error - ); - return null; - } - } - - private async checkApprovalStatus( - discordMessageId: string - ): Promise<PendingTweetApprovalStatus> { - try { - // Fetch message and its replies from Discord - const channel = await this.discordClientForApproval.channels.fetch( - this.discordApprovalChannelId - ); - - logger.log(`channel ${JSON.stringify(channel)}`); - - if (!(channel instanceof TextChannel)) { - logger.error("Invalid approval channel"); - return "PENDING"; - } - - // Fetch the original message and its replies - const message = await channel.messages.fetch(discordMessageId); - - // Look for thumbs up reaction ('👍') - const thumbsUpReaction = message.reactions.cache.find( - (reaction) => reaction.emoji.name === "👍" - ); - - // Look for reject reaction ('❌') - const rejectReaction = message.reactions.cache.find( - (reaction) => reaction.emoji.name === "❌" - ); - - // Check if the reaction exists and has reactions - if (rejectReaction) { - const count = rejectReaction.count; - if (count > 0) { - return "REJECTED"; - } - } - - // Check if the reaction exists and has reactions - if (thumbsUpReaction) { - // You might want to check for specific users who can approve - // For now, we'll return true if anyone used thumbs up - const count = thumbsUpReaction.count; - if (count > 0) { - return "APPROVED"; - } - } - - return "PENDING"; - } catch (error) { - logger.error("Error checking approval status:", error); - return "PENDING"; - } - } - private async cleanupPendingTweet(discordMessageId: string) { const pendingTweetsKey = `twitter/${this.client.profile.username}/pendingTweet`; const currentPendingTweets = @@ -1390,110 +1166,4 @@ export class TwitterPostClient { ); } } - - private async handlePendingTweet() { - logger.log("Checking Pending Tweets..."); - const pendingTweetsKey = `twitter/${this.client.profile.username}/pendingTweet`; - const pendingTweets = - (await this.runtime.cacheManager.get<PendingTweet[]>( - pendingTweetsKey - )) || []; - - for (const pendingTweet of pendingTweets) { - // Check if tweet is older than 24 hours - const isExpired = - Date.now() - pendingTweet.timestamp > 24 * 60 * 60 * 1000; - - if (isExpired) { - logger.log("Pending tweet expired, cleaning up"); - - // Notify on Discord about expiration - try { - const channel = - await this.discordClientForApproval.channels.fetch( - pendingTweet.channelId - ); - if (channel instanceof TextChannel) { - const originalMessage = await channel.messages.fetch( - pendingTweet.discordMessageId - ); - await originalMessage.reply( - "This tweet approval request has expired (24h timeout)." - ); - } - } catch (error) { - logger.error( - "Error sending expiration notification:", - error - ); - } - - await this.cleanupPendingTweet(pendingTweet.discordMessageId); - return; - } - - // Check approval status - logger.log("Checking approval status..."); - const approvalStatus: PendingTweetApprovalStatus = - await this.checkApprovalStatus(pendingTweet.discordMessageId); - - if (approvalStatus === "APPROVED") { - logger.log("Tweet Approved, Posting"); - await this.postTweet( - this.runtime, - this.client, - pendingTweet.tweetTextForPosting, - pendingTweet.roomId, - pendingTweet.rawTweetContent, - this.twitterUsername - ); - - // Notify on Discord about posting - try { - const channel = - await this.discordClientForApproval.channels.fetch( - pendingTweet.channelId - ); - if (channel instanceof TextChannel) { - const originalMessage = await channel.messages.fetch( - pendingTweet.discordMessageId - ); - await originalMessage.reply( - "Tweet has been posted successfully! ✅" - ); - } - } catch (error) { - logger.error( - "Error sending post notification:", - error - ); - } - - await this.cleanupPendingTweet(pendingTweet.discordMessageId); - } else if (approvalStatus === "REJECTED") { - logger.log("Tweet Rejected, Cleaning Up"); - await this.cleanupPendingTweet(pendingTweet.discordMessageId); - // Notify about Rejection of Tweet - try { - const channel = - await this.discordClientForApproval.channels.fetch( - pendingTweet.channelId - ); - if (channel instanceof TextChannel) { - const originalMessage = await channel.messages.fetch( - pendingTweet.discordMessageId - ); - await originalMessage.reply( - "Tweet has been rejected! ❌" - ); - } - } catch (error) { - logger.error( - "Error sending rejection notification:", - error - ); - } - } - } - } } From 5d4299a8db329f15aa6638bc547b048422e2b518 Mon Sep 17 00:00:00 2001 From: Shaw <shawmakesmagic@gmail.com> Date: Sun, 9 Feb 2025 17:40:28 -0500 Subject: [PATCH 03/12] delete postgres --- packages/plugin-postgres/.npmignore | 9 - packages/plugin-postgres/config.toml | 159 -- .../20240318103238_remote_schema.sql | 818 ---------- packages/plugin-postgres/package.json | 35 - packages/plugin-postgres/schema.sql | 148 -- packages/plugin-postgres/seed.sql | 9 - .../plugin-postgres/src/__tests__/README.md | 71 - .../src/__tests__/docker-compose.test.yml | 16 - .../src/__tests__/run_tests.sh | 78 - .../src/__tests__/vector-extension.test.ts | 416 ----- packages/plugin-postgres/src/index.ts | 1437 ----------------- packages/plugin-postgres/tsconfig.json | 10 - packages/plugin-postgres/tsup.config.ts | 21 - 13 files changed, 3227 deletions(-) delete mode 100644 packages/plugin-postgres/.npmignore delete mode 100644 packages/plugin-postgres/config.toml delete mode 100644 packages/plugin-postgres/migrations/20240318103238_remote_schema.sql delete mode 100644 packages/plugin-postgres/package.json delete mode 100644 packages/plugin-postgres/schema.sql delete mode 100644 packages/plugin-postgres/seed.sql delete mode 100644 packages/plugin-postgres/src/__tests__/README.md delete mode 100644 packages/plugin-postgres/src/__tests__/docker-compose.test.yml delete mode 100755 packages/plugin-postgres/src/__tests__/run_tests.sh delete mode 100644 packages/plugin-postgres/src/__tests__/vector-extension.test.ts delete mode 100644 packages/plugin-postgres/src/index.ts delete mode 100644 packages/plugin-postgres/tsconfig.json delete mode 100644 packages/plugin-postgres/tsup.config.ts diff --git a/packages/plugin-postgres/.npmignore b/packages/plugin-postgres/.npmignore deleted file mode 100644 index eb4b3947ffa..00000000000 --- a/packages/plugin-postgres/.npmignore +++ /dev/null @@ -1,9 +0,0 @@ -* - -!dist/** -!package.json -!readme.md -!tsup.config.ts -!schema.sql -!seed.sql -!config.toml \ No newline at end of file diff --git a/packages/plugin-postgres/config.toml b/packages/plugin-postgres/config.toml deleted file mode 100644 index c1f016d4a40..00000000000 --- a/packages/plugin-postgres/config.toml +++ /dev/null @@ -1,159 +0,0 @@ -# A string used to distinguish different Supabase projects on the same host. Defaults to the -# working directory name when running `supabase init`. -project_id = "eliza" - -[api] -enabled = true -# Port to use for the API URL. -port = 54321 -# Schemas to expose in your API. Tables, views and stored procedures in this schema will get API -# endpoints. public and storage are always included. -schemas = ["public", "storage", "graphql_public"] -# Extra schemas to add to the search_path of every request. public is always included. -extra_search_path = ["public", "extensions"] -# The maximum number of rows returns from a view, table, or stored procedure. Limits payload size -# for accidental or malicious requests. -max_rows = 1000 - -[db] -# Port to use for the local database URL. -port = 54322 -# Port used by db diff command to initialize the shadow database. -shadow_port = 54320 -# The database major version to use. This has to be the same as your remote database's. Run `SHOW -# server_version;` on the remote database to check. -major_version = 15 - -[db.pooler] -enabled = false -# Port to use for the local connection pooler. -port = 54329 -# Specifies when a server connection can be reused by other clients. -# Configure one of the supported pooler modes: `transaction`, `session`. -pool_mode = "transaction" -# How many server connections to allow per user/database pair. -default_pool_size = 20 -# Maximum number of client connections allowed. -max_client_conn = 100 - -[realtime] -enabled = true -# Bind realtime via either IPv4 or IPv6. (default: IPv6) -# ip_version = "IPv6" -# The maximum length in bytes of HTTP request headers. (default: 4096) -# max_header_length = 4096 - -[studio] -enabled = true -# Port to use for Supabase Studio. -port = 54323 -# External URL of the API server that frontend connects to. -api_url = "http://127.0.0.1" - -# Email testing server. Emails sent with the local dev setup are not actually sent - rather, they -# are monitored, and you can view the emails that would have been sent from the web interface. -[inbucket] -enabled = true -# Port to use for the email testing server web interface. -port = 54324 -# Uncomment to expose additional ports for testing user applications that send emails. -# smtp_port = 54325 -# pop3_port = 54326 - -[storage] -enabled = true -# The maximum file size allowed (e.g. "5MB", "500KB"). -file_size_limit = "50MiB" - -[auth] -enabled = true -# The base URL of your website. Used as an allow-list for redirects and for constructing URLs used -# in emails. -site_url = "http://127.0.0.1:3000" -# A list of *exact* URLs that auth providers are permitted to redirect to post authentication. -additional_redirect_urls = ["https://127.0.0.1:3000"] -# How long tokens are valid for, in seconds. Defaults to 3600 (1 hour), maximum 604,800 (1 week). -jwt_expiry = 3600 -# If disabled, the refresh token will never expire. -enable_refresh_token_rotation = true -# Allows refresh tokens to be reused after expiry, up to the specified interval in seconds. -# Requires enable_refresh_token_rotation = true. -refresh_token_reuse_interval = 10 -# Allow/disallow new user signups to your project. -enable_signup = true -# Allow/disallow testing manual linking of accounts -enable_manual_linking = false - -[auth.email] -# Allow/disallow new user signups via email to your project. -enable_signup = true -# If enabled, a user will be required to confirm any email change on both the old, and new email -# addresses. If disabled, only the new email is required to confirm. -double_confirm_changes = true -# If enabled, users need to confirm their email address before signing in. -enable_confirmations = false - -# Uncomment to customize email template -# [auth.email.template.invite] -# subject = "You have been invited" -# content_path = "./supabase/templates/invite.html" - -[auth.sms] -# Allow/disallow new user signups via SMS to your project. -enable_signup = true -# If enabled, users need to confirm their phone number before signing in. -enable_confirmations = false -# Template for sending OTP to users -template = "Your code is {{ .Code }} ." - -# Use pre-defined map of phone number to OTP for testing. -[auth.sms.test_otp] -# 4152127777 = "123456" - -# This hook runs before a token is issued and allows you to add additional claims based on the authentication method used. -[auth.hook.custom_access_token] -# enabled = true -# uri = "pg-functions://<database>/<schema>/<hook_name>" - - -# Configure one of the supported SMS providers: `twilio`, `twilio_verify`, `messagebird`, `textlocal`, `vonage`. -[auth.sms.twilio] -enabled = false -account_sid = "" -message_service_sid = "" -# DO NOT commit your Twilio auth token to git. Use environment variable substitution instead: -auth_token = "env(SUPABASE_AUTH_SMS_TWILIO_AUTH_TOKEN)" - -# Use an external OAuth provider. The full list of providers are: `apple`, `azure`, `bitbucket`, -# `discord`, `facebook`, `github`, `gitlab`, `google`, `keycloak`, `linkedin_oidc`, `notion`, `twitch`, -# `twitter`, `slack`, `spotify`, `workos`, `zoom`. -[auth.external.apple] -enabled = false -client_id = "" -# DO NOT commit your OAuth provider secret to git. Use environment variable substitution instead: -secret = "env(SUPABASE_AUTH_EXTERNAL_APPLE_SECRET)" -# Overrides the default auth redirectUrl. -redirect_uri = "" -# Overrides the default auth provider URL. Used to support self-hosted gitlab, single-tenant Azure, -# or any other third-party OIDC providers. -url = "" - -[analytics] -enabled = false -port = 54327 -vector_port = 54328 -# Configure one of the supported backends: `postgres`, `bigquery`. -backend = "postgres" - -# Experimental features may be deprecated any time -[experimental] -# Configures Postgres storage engine to use OrioleDB (S3) -orioledb_version = "" -# Configures S3 bucket URL, eg. <bucket_name>.s3-<region>.amazonaws.com -s3_host = "env(S3_HOST)" -# Configures S3 bucket region, eg. us-east-1 -s3_region = "env(S3_REGION)" -# Configures AWS_ACCESS_KEY_ID for S3 bucket -s3_access_key = "env(S3_ACCESS_KEY)" -# Configures AWS_SECRET_ACCESS_KEY for S3 bucket -s3_secret_key = "env(S3_SECRET_KEY)" diff --git a/packages/plugin-postgres/migrations/20240318103238_remote_schema.sql b/packages/plugin-postgres/migrations/20240318103238_remote_schema.sql deleted file mode 100644 index e903cf1285d..00000000000 --- a/packages/plugin-postgres/migrations/20240318103238_remote_schema.sql +++ /dev/null @@ -1,818 +0,0 @@ - -SET statement_timeout = 0; -SET lock_timeout = 0; -SET idle_in_transaction_session_timeout = 0; -SET client_encoding = 'UTF8'; -SET standard_conforming_strings = on; -SELECT pg_catalog.set_config('search_path', '', false); -SET check_function_bodies = false; -SET xmloption = content; -SET client_min_messages = warning; -SET row_security = off; - -CREATE SCHEMA IF NOT EXISTS "public"; - -ALTER SCHEMA "public" OWNER TO "pg_database_owner"; - -DO $$ -BEGIN - IF NOT EXISTS ( - SELECT 1 - FROM pg_extension - WHERE extname = 'vector' - ) THEN - CREATE EXTENSION vector IF NOT EXISTS - SCHEMA extensions; - END IF; -END $$; - -DO $$ -BEGIN - IF NOT EXISTS ( - SELECT 1 - FROM pg_extension - WHERE extname = 'fuzzystrmatch' - ) THEN - CREATE EXTENSION fuzzystrmatch IF NOT EXISTS - SCHEMA extensions; - END IF; -END $$; - -CREATE TABLE IF NOT EXISTS "public"."secrets" ( - "key" "text" PRIMARY KEY, - "value" "text" NOT NULL -); - -ALTER TABLE "public"."secrets" OWNER TO "postgres"; - -CREATE TABLE "public"."user_data" ( - owner_id INT, - target_id INT, - data JSONB, - PRIMARY KEY (owner_id, target_id), - FOREIGN KEY (owner_id) REFERENCES accounts(id), - FOREIGN KEY (target_id) REFERENCES accounts(id) -); - -ALTER TABLE "public"."user_data" OWNER TO "postgres"; - -CREATE OR REPLACE FUNCTION "public"."after_account_created"() RETURNS "trigger" - LANGUAGE "plpgsql" SECURITY DEFINER - SET "search_path" TO 'extensions', 'public', 'pg_temp' - AS $$ -DECLARE - response RECORD; -- Define response with the expected return type - newuser_url TEXT; - token TEXT; -BEGIN - -- Retrieve the newuser URL and token from the secrets table - SELECT value INTO newuser_url FROM secrets WHERE key = 'newuser_url'; - SELECT value INTO token FROM secrets WHERE key = 'token'; - - -- Ensure newuser_url and token are both defined and not empty - IF newuser_url IS NOT NULL AND newuser_url <> '' AND token IS NOT NULL AND token <> '' THEN - -- Make the HTTP POST request to the endpoint - SELECT * INTO response FROM http_post( - newuser_url, - jsonb_build_object( - 'token', token, - 'userId', NEW.id::text - ) - ); - END IF; - - RETURN NEW; -END; -$$; - -ALTER FUNCTION "public"."after_account_created"() OWNER TO "postgres"; - -CREATE OR REPLACE FUNCTION "public"."check_similarity_and_insert"("query_table_name" "text", "query_userId" "uuid", "query_content" "jsonb", "query_roomId" "uuid", "query_embedding" "extensions"."vector", "similarity_threshold" double precision, "query_createdAt" "timestamp with time zone") -RETURNS "void" -LANGUAGE "plpgsql" -AS $$ -DECLARE - similar_found BOOLEAN := FALSE; - select_query TEXT; - insert_query TEXT; -BEGIN - -- Only perform the similarity check if query_embedding is not NULL - IF query_embedding IS NOT NULL THEN - -- Build a dynamic query to check for existing similar embeddings using cosine distance - select_query := format( - 'SELECT EXISTS (' || - 'SELECT 1 ' || - 'FROM memories ' || - 'WHERE userId = %L ' || - 'AND roomId = %L ' || - 'AND type = %L ' || -- Filter by the 'type' field using query_table_name - 'AND embedding <=> %L < %L ' || - 'LIMIT 1' || - ')', - query_userId, - query_roomId, - query_table_name, -- Use query_table_name to filter by 'type' - query_embedding, - similarity_threshold - ); - - -- Execute the query to check for similarity - EXECUTE select_query INTO similar_found; - END IF; - - -- Prepare the insert query with 'unique' field set based on the presence of similar records or NULL query_embedding - insert_query := format( - 'INSERT INTO memories (userId, content, roomId, type, embedding, "unique", createdAt) ' || -- Insert into the 'memories' table - 'VALUES (%L, %L, %L, %L, %L, %L, %L)', - query_userId, - query_content, - query_roomId, - query_table_name, -- Use query_table_name as the 'type' value - query_embedding, - NOT similar_found OR query_embedding IS NULL -- Set 'unique' to true if no similar record is found or query_embedding is NULL - ); - - -- Execute the insert query - EXECUTE insert_query; -END; -$$; - -ALTER FUNCTION "public"."check_similarity_and_insert"("query_table_name" "text", "query_userId" "uuid", "query_content" "jsonb", "query_roomId" "uuid", "query_embedding" "extensions"."vector", "similarity_threshold" double precision) OWNER TO "postgres"; - -CREATE OR REPLACE FUNCTION "public"."count_memories"("query_table_name" "text", "query_roomId" "uuid", "query_unique" boolean DEFAULT false) RETURNS bigint - LANGUAGE "plpgsql" - AS $$ -DECLARE - query TEXT; - total BIGINT; -BEGIN - -- Initialize the base query - query := format('SELECT COUNT(*) FROM memories WHERE type = %L', query_table_name); - - -- Add condition for roomId if not null, ensuring proper spacing - IF query_roomId IS NOT NULL THEN - query := query || format(' AND roomId = %L', query_roomId); - END IF; - - -- Add condition for unique if TRUE, ensuring proper spacing - IF query_unique THEN - query := query || ' AND "unique" = TRUE'; -- Use double quotes if "unique" is a reserved keyword or potentially problematic - END IF; - - -- Debug: Output the constructed query - RAISE NOTICE 'Executing query: %', query; - - -- Execute the constructed query - EXECUTE query INTO total; - RETURN total; -END; -$$; - - -ALTER FUNCTION "public"."count_memories"("query_table_name" "text", "query_roomId" "uuid", "query_unique" boolean) OWNER TO "postgres"; - -CREATE OR REPLACE FUNCTION "public"."create_room"(roomId uuid) - RETURNS TABLE(id uuid) - LANGUAGE plpgsql -AS $function$ -BEGIN - -- Check if the room already exists - IF EXISTS (SELECT 1 FROM rooms WHERE rooms.id = roomId) THEN - RETURN QUERY SELECT rooms.id FROM rooms WHERE rooms.id = roomId; - ELSE - -- Create a new room with the provided roomId - RETURN QUERY INSERT INTO rooms (id) VALUES (roomId) RETURNING rooms.id; - END IF; -END; -$function$ - -ALTER FUNCTION "public"."create_room"() OWNER TO "postgres"; - -CREATE OR REPLACE FUNCTION "public"."create_friendship_with_host_agent"() RETURNS "trigger" - LANGUAGE "plpgsql" - AS $$ -DECLARE - host_agent_id UUID := '00000000-0000-0000-0000-000000000000'; - new_roomId UUID; -BEGIN - -- Create a new room for the direct message between the new user and the host agent - INSERT INTO rooms DEFAULT VALUES - RETURNING id INTO new_roomId; - - -- Create a new friendship between the new user and the host agent - INSERT INTO relationships (userA, userB, userId, status) - VALUES (NEW.id, host_agent_id, host_agent_id, 'FRIENDS'); - - -- Add both users as participants of the new room - INSERT INTO participants (userId, roomId) - VALUES (NEW.id, new_roomId), (host_agent_id, new_roomId); - - RETURN NEW; -END; -$$; - -ALTER FUNCTION "public"."create_friendship_with_host_agent"() OWNER TO "postgres"; - -CREATE OR REPLACE FUNCTION "public"."fn_notify_agents"() RETURNS "trigger" - LANGUAGE "plpgsql" - AS $$ -DECLARE - participant RECORD; - agent_flag BOOLEAN; - response RECORD; - payload TEXT; - message_url TEXT; - token TEXT; -BEGIN - -- Retrieve the message URL and token from the secrets table - SELECT value INTO message_url FROM secrets WHERE key = 'message_url'; - SELECT value INTO token FROM secrets WHERE key = 'token'; - - -- Iterate over the participants of the room - FOR participant IN ( - SELECT p.userId - FROM participants p - WHERE p.roomId = NEW.roomId - ) - LOOP - -- Check if the participant is an agent - SELECT is_agent INTO agent_flag FROM accounts WHERE id = participant.userId; - - -- Add a condition to ensure the sender is not the agent - IF agent_flag AND NEW.userId <> participant.userId THEN - -- Construct the payload JSON object and explicitly cast to TEXT - payload := jsonb_build_object( - 'token', token, - 'senderId', NEW.userId::text, - 'content', NEW.content, - 'roomId', NEW.roomId::text - )::text; - - -- Make the HTTP POST request to the Cloudflare worker endpoint - SELECT * INTO response FROM http_post( - message_url, - payload, - 'application/json' - ); - END IF; - END LOOP; - - RETURN NEW; -END; -$$; - - - -ALTER FUNCTION "public"."fn_notify_agents"() OWNER TO "postgres"; - -CREATE OR REPLACE FUNCTION "public"."get_embedding_list"("query_table_name" "text", "query_threshold" integer, "query_input" "text", "query_field_name" "text", "query_field_sub_name" "text", "query_match_count" integer) -RETURNS TABLE("embedding" "extensions"."vector", "levenshtein_score" integer) -LANGUAGE "plpgsql" -AS $$ -DECLARE - QUERY TEXT; -BEGIN - -- Check the length of query_input - IF LENGTH(query_input) > 255 THEN - -- For inputs longer than 255 characters, use exact match only - QUERY := format(' - SELECT - embedding - FROM - memories - WHERE - type = $1 AND - (content->>''%s'')::TEXT = $2 - LIMIT - $3 - ', query_field_name); - -- Execute the query with adjusted parameters for exact match - RETURN QUERY EXECUTE QUERY USING query_table_name, query_input, query_match_count; - ELSE - -- For inputs of 255 characters or less, use Levenshtein distance - QUERY := format(' - SELECT - embedding, - levenshtein($2, (content->>''%s'')::TEXT) AS levenshtein_score - FROM - memories - WHERE - type = $1 AND - levenshtein($2, (content->>''%s'')::TEXT) <= $3 - ORDER BY - levenshtein_score - LIMIT - $4 - ', query_field_name, query_field_name); - -- Execute the query with original parameters for Levenshtein distance - RETURN QUERY EXECUTE QUERY USING query_table_name, query_input, query_threshold, query_match_count; - END IF; -END; -$$; - -ALTER FUNCTION "public"."get_embedding_list"("query_table_name" "text", "query_threshold" integer, "query_input" "text", "query_field_name" "text", "query_field_sub_name" "text", "query_match_count" integer) OWNER TO "postgres"; - -SET default_tablespace = ''; - -SET default_table_access_method = "heap"; - -CREATE TABLE IF NOT EXISTS "public"."goals" ( - "id" "uuid" DEFAULT "gen_random_uuid"() NOT NULL, - "createdAt" timestamp with time zone DEFAULT "now"() NOT NULL, - "userId" "uuid", - "roomId" "uuid", - "status" "text", - "name" "text", - "objectives" "jsonb"[] DEFAULT '{}'::"jsonb"[] NOT NULL -); - -ALTER TABLE "public"."goals" OWNER TO "postgres"; - -CREATE OR REPLACE FUNCTION "public"."get_goals"("query_roomId" "uuid", "query_userId" "uuid" DEFAULT NULL::"uuid", "only_in_progress" boolean DEFAULT true, "row_count" integer DEFAULT 5) RETURNS SETOF "public"."goals" - LANGUAGE "plpgsql" - AS $$ -BEGIN - RETURN QUERY - SELECT * FROM goals - WHERE - (query_userId IS NULL OR userId = query_userId) - AND (roomId = query_roomId) - AND (NOT only_in_progress OR status = 'IN_PROGRESS') - LIMIT row_count; -END; -$$; - -ALTER FUNCTION "public"."get_goals"("query_roomId" "uuid", "query_userId" "uuid", "only_in_progress" boolean, "row_count" integer) OWNER TO "postgres"; - -CREATE TABLE IF NOT EXISTS "public"."relationships" ( - "createdAt" timestamp with time zone DEFAULT ("now"() AT TIME ZONE 'utc'::"text") NOT NULL, - "userA" "uuid", - "userB" "uuid", - "status" "text", - "id" "uuid" DEFAULT "gen_random_uuid"() NOT NULL, - "userId" "uuid" NOT NULL -); - -ALTER TABLE "public"."relationships" OWNER TO "postgres"; - -CREATE OR REPLACE FUNCTION "public"."get_relationship"("usera" "uuid", "userb" "uuid") RETURNS SETOF "public"."relationships" - LANGUAGE "plpgsql" STABLE - AS $$ -BEGIN - RETURN QUERY - SELECT * - FROM relationships - WHERE (userA = usera AND userB = userb) - OR (userA = userb AND userB = usera); -END; -$$; - -ALTER FUNCTION "public"."get_relationship"("usera" "uuid", "userb" "uuid") OWNER TO "postgres"; - -CREATE OR REPLACE FUNCTION "public"."remove_memories"("query_table_name" "text", "query_roomId" "uuid") RETURNS "void" - LANGUAGE "plpgsql" - AS $_$DECLARE - dynamic_query TEXT; -BEGIN - dynamic_query := format('DELETE FROM memories WHERE roomId = $1 AND type = $2'); - EXECUTE dynamic_query USING query_roomId, query_table_name; -END; -$_$; - - -ALTER FUNCTION "public"."remove_memories"("query_table_name" "text", "query_roomId" "uuid") OWNER TO "postgres"; - -CREATE OR REPLACE FUNCTION "public"."search_memories"("query_table_name" "text", "query_roomId" "uuid", "query_embedding" "extensions"."vector", "query_match_threshold" double precision, "query_match_count" integer, "query_unique" boolean) -RETURNS TABLE("id" "uuid", "userId" "uuid", "content" "jsonb", "createdAt" timestamp with time zone, "similarity" double precision, "roomId" "uuid", "embedding" "extensions"."vector") -LANGUAGE "plpgsql" -AS $$ -DECLARE - query TEXT; -BEGIN - query := format($fmt$ - SELECT - id, - userId, - content, - createdAt, - 1 - (embedding <=> %L) AS similarity, -- Use '<=>' for cosine distance - roomId, - embedding - FROM memories - WHERE (1 - (embedding <=> %L) > %L) - AND type = %L - %s -- Additional condition for 'unique' column - %s -- Additional condition for 'roomId' - ORDER BY similarity DESC - LIMIT %L - $fmt$, - query_embedding, - query_embedding, - query_match_threshold, - query_table_name, - CASE WHEN query_unique THEN ' AND "unique" IS TRUE' ELSE '' END, - CASE WHEN query_roomId IS NOT NULL THEN format(' AND roomId = %L', query_roomId) ELSE '' END, - query_match_count - ); - - RETURN QUERY EXECUTE query; -END; -$$; - - - -ALTER FUNCTION "public"."search_memories"("query_table_name" "text", "query_roomId" "uuid", "query_embedding" "extensions"."vector", "query_match_threshold" double precision, "query_match_count" integer, "query_unique" boolean) OWNER TO "postgres"; - -CREATE TABLE IF NOT EXISTS "public"."accounts" ( - "id" "uuid" DEFAULT "auth"."uid"() NOT NULL, - "createdAt" timestamp with time zone DEFAULT ("now"() AT TIME ZONE 'utc'::"text") NOT NULL, - "name" "text", - "username" "text", - "email" "text" NOT NULL, - "avatarUrl" "text", - "is_agent" boolean DEFAULT false NOT NULL, - "location" "text", - "profile_line" "text", - "signed_tos" boolean DEFAULT false NOT NULL -); - -ALTER TABLE "public"."accounts" OWNER TO "postgres"; - -CREATE TABLE IF NOT EXISTS "public"."logs" ( - "id" "uuid" DEFAULT "gen_random_uuid"() NOT NULL, - "createdAt" timestamp with time zone DEFAULT "now"() NOT NULL, - "userId" "uuid" NOT NULL, - "body" "jsonb" NOT NULL, - "type" "text" NOT NULL, - "roomId" "uuid" -); - -ALTER TABLE "public"."logs" OWNER TO "postgres"; - -CREATE TABLE IF NOT EXISTS "public"."memories" ( - "id" "uuid" DEFAULT "gen_random_uuid"() NOT NULL, - "createdAt" timestamp with time zone DEFAULT "now"() NOT NULL, - "content" "jsonb" NOT NULL, - "embedding" "extensions"."vector" NOT NULL, - "userId" "uuid", - "roomId" "uuid", - "unique" boolean DEFAULT true NOT NULL, - "type" "text" NOT NULL -); - -ALTER TABLE "public"."memories" OWNER TO "postgres"; - -CREATE TABLE IF NOT EXISTS "public"."participants" ( - "createdAt" timestamp with time zone DEFAULT ("now"() AT TIME ZONE 'utc'::"text") NOT NULL, - "userId" "uuid", - "roomId" "uuid", - "userState" "text" DEFAULT NULL, -- Add userState field to track MUTED, NULL, or FOLLOWED - "id" "uuid" DEFAULT "gen_random_uuid"() NOT NULL, - "last_message_read" "uuid", - FOREIGN KEY ("userId") REFERENCES "accounts"("id"), - FOREIGN KEY ("roomId") REFERENCES "rooms"("id") -); - - -ALTER TABLE "public"."participants" OWNER TO "postgres"; - - -CREATE OR REPLACE FUNCTION "public"."get_participant_userState"("roomId" "uuid", "userId" "uuid") -RETURNS "text" -LANGUAGE "plpgsql" -AS $$ -BEGIN - RETURN ( - SELECT userState - FROM participants - WHERE roomId = $1 AND userId = $2 - ); -END; -$$; - -CREATE OR REPLACE FUNCTION "public"."set_participant_userState"("roomId" "uuid", "userId" "uuid", "state" "text") -RETURNS "void" -LANGUAGE "plpgsql" -AS $$ -BEGIN - UPDATE participants - SET userState = $3 - WHERE roomId = $1 AND userId = $2; -END; -$$; - -CREATE TABLE IF NOT EXISTS "public"."rooms" ( - "id" "uuid" DEFAULT "gen_random_uuid"() NOT NULL, - "createdAt" timestamp with time zone DEFAULT ("now"() AT TIME ZONE 'utc'::"text") NOT NULL -); - -CREATE OR REPLACE FUNCTION "public"."search_knowledge"( - "query_embedding" "extensions"."vector", - "query_agent_id" "uuid", - "match_threshold" double precision, - "match_count" integer, - "search_text" text -) RETURNS TABLE ( - "id" "uuid", - "agentId" "uuid", - "content" "jsonb", - "embedding" "extensions"."vector", - "createdAt" timestamp with time zone, - "similarity" double precision -) LANGUAGE "plpgsql" AS $$ -BEGIN - RETURN QUERY - WITH vector_matches AS ( - SELECT id, - 1 - (embedding <=> query_embedding) as vector_score - FROM knowledge - WHERE (agentId IS NULL AND isShared = true) OR agentId = query_agent_id - AND embedding IS NOT NULL - ), - keyword_matches AS ( - SELECT id, - CASE - WHEN content->>'text' ILIKE '%' || search_text || '%' THEN 3.0 - ELSE 1.0 - END * - CASE - WHEN content->'metadata'->>'isChunk' = 'true' THEN 1.5 - WHEN content->'metadata'->>'isMain' = 'true' THEN 1.2 - ELSE 1.0 - END as keyword_score - FROM knowledge - WHERE (agentId IS NULL AND isShared = true) OR agentId = query_agent_id - ) - SELECT - k.id, - k."agentId", - k.content, - k.embedding, - k."createdAt", - (v.vector_score * kw.keyword_score) as similarity - FROM knowledge k - JOIN vector_matches v ON k.id = v.id - LEFT JOIN keyword_matches kw ON k.id = kw.id - WHERE (k.agentId IS NULL AND k.isShared = true) OR k.agentId = query_agent_id - AND ( - v.vector_score >= match_threshold - OR (kw.keyword_score > 1.0 AND v.vector_score >= 0.3) - ) - ORDER BY similarity DESC - LIMIT match_count; -END; -$$; - -ALTER TABLE "public"."rooms" OWNER TO "postgres"; - -ALTER TABLE ONLY "public"."relationships" - ADD CONSTRAINT "friendships_id_key" UNIQUE ("id"); - -ALTER TABLE ONLY "public"."relationships" - ADD CONSTRAINT "friendships_pkey" PRIMARY KEY ("id"); - -ALTER TABLE ONLY "public"."goals" - ADD CONSTRAINT "goals_pkey" PRIMARY KEY ("id"); - -ALTER TABLE ONLY "public"."logs" - ADD CONSTRAINT "logs_pkey" PRIMARY KEY ("id"); - -ALTER TABLE ONLY "public"."participants" - ADD CONSTRAINT "participants_id_key" UNIQUE ("id"); - -ALTER TABLE ONLY "public"."participants" - ADD CONSTRAINT "participants_pkey" PRIMARY KEY ("id"); - -ALTER TABLE ONLY "public"."memories" - ADD CONSTRAINT "memories_pkey" PRIMARY KEY ("id"); - -ALTER TABLE ONLY "public"."rooms" - ADD CONSTRAINT "rooms_pkey" PRIMARY KEY ("id"); - -ALTER TABLE ONLY "public"."accounts" - ADD CONSTRAINT "users_email_key" UNIQUE ("email"); - -ALTER TABLE ONLY "public"."accounts" - ADD CONSTRAINT "users_pkey" PRIMARY KEY ("id"); - -CREATE OR REPLACE TRIGGER "trigger_after_account_created" AFTER INSERT ON "public"."accounts" FOR EACH ROW EXECUTE FUNCTION "public"."after_account_created"(); - -CREATE OR REPLACE TRIGGER "trigger_create_friendship_with_host_agent" AFTER INSERT ON "public"."accounts" FOR EACH ROW EXECUTE FUNCTION "public"."create_friendship_with_host_agent"(); - -ALTER TABLE ONLY "public"."participants" - ADD CONSTRAINT "participants_roomId_fkey" FOREIGN KEY ("roomId") REFERENCES "public"."rooms"("id"); - -ALTER TABLE ONLY "public"."participants" - ADD CONSTRAINT "participants_userId_fkey" FOREIGN KEY ("userId") REFERENCES "public"."accounts"("id"); - -ALTER TABLE ONLY "public"."memories" - ADD CONSTRAINT "memories_roomId_fkey" FOREIGN KEY ("roomId") REFERENCES "public"."rooms"("id"); - -ALTER TABLE ONLY "public"."memories" - ADD CONSTRAINT "memories_userId_fkey" FOREIGN KEY ("userId") REFERENCES "public"."accounts"("id"); - -ALTER TABLE ONLY "public"."relationships" - ADD CONSTRAINT "relationships_userA_fkey" FOREIGN KEY ("userA") REFERENCES "public"."accounts"("id"); - -ALTER TABLE ONLY "public"."relationships" - ADD CONSTRAINT "relationships_userB_fkey" FOREIGN KEY ("userB") REFERENCES "public"."accounts"("id"); - -ALTER TABLE ONLY "public"."relationships" - ADD CONSTRAINT "relationships_userId_fkey" FOREIGN KEY ("userId") REFERENCES "public"."accounts"("id"); - -ALTER TABLE ONLY "public"."knowledge" - ADD CONSTRAINT "knowledge_agentId_fkey" FOREIGN KEY ("agentId") REFERENCES "public"."accounts"("id") ON DELETE CASCADE; - -CREATE POLICY "Can select and update all data" ON "public"."accounts" USING (("auth"."uid"() = "id")) WITH CHECK (("auth"."uid"() = "id")); - -CREATE POLICY "Enable delete for users based on userId" ON "public"."goals" FOR DELETE TO "authenticated" USING (("auth"."uid"() = "userId")); - -CREATE POLICY "Enable insert for authenticated users only" ON "public"."accounts" FOR INSERT TO "authenticated", "anon", "service_role", "supabase_replication_admin", "supabase_read_only_user" WITH CHECK (true); - -CREATE POLICY "Enable insert for authenticated users only" ON "public"."goals" FOR INSERT TO "authenticated" WITH CHECK (true); - -CREATE POLICY "Enable insert for authenticated users only" ON "public"."logs" FOR INSERT TO "authenticated", "anon" WITH CHECK (true); - -CREATE POLICY "Enable insert for authenticated users only" ON "public"."participants" FOR INSERT TO "authenticated" WITH CHECK (true); - -CREATE POLICY "Enable insert for authenticated users only" ON "public"."relationships" FOR INSERT TO "authenticated" WITH CHECK ((("auth"."uid"() = "userA") OR ("auth"."uid"() = "userB"))); - -CREATE POLICY "Enable insert for authenticated users only" ON "public"."rooms" FOR INSERT WITH CHECK (true); - -CREATE POLICY "Enable insert for self id" ON "public"."participants" USING (("auth"."uid"() = "userId")) WITH CHECK (("auth"."uid"() = "userId")); - -CREATE POLICY "Enable read access for all users" ON "public"."accounts" FOR SELECT USING (true); - -CREATE POLICY "Enable read access for all users" ON "public"."goals" FOR SELECT USING (true); - -CREATE POLICY "Enable read access for all users" ON "public"."relationships" FOR SELECT TO "authenticated" USING (true); - -CREATE POLICY "Enable read access for all users" ON "public"."rooms" FOR SELECT TO "authenticated" USING (true); - -CREATE POLICY "Enable read access for own rooms" ON "public"."participants" FOR SELECT TO "authenticated" USING (("auth"."uid"() = "userId")); - -CREATE POLICY "Enable read access for user to their own relationships" ON "public"."relationships" FOR SELECT TO "authenticated" USING ((("auth"."uid"() = "userA") OR ("auth"."uid"() = "userB"))); - -CREATE POLICY "Enable update for users based on email" ON "public"."goals" FOR UPDATE TO "authenticated" USING (true) WITH CHECK (true); - -CREATE POLICY "Enable update for users of own id" ON "public"."rooms" FOR UPDATE USING (true) WITH CHECK (true); - -CREATE POLICY "Enable users to delete their own relationships/friendships" ON "public"."relationships" FOR DELETE TO "authenticated" USING ((("auth"."uid"() = "userA") OR ("auth"."uid"() = "userB"))); - -CREATE POLICY "Enable read access for all users" ON "public"."knowledge" - FOR SELECT USING (true); - -CREATE POLICY "Enable insert for authenticated users only" ON "public"."knowledge" - FOR INSERT TO "authenticated" WITH CHECK (true); - -CREATE POLICY "Enable update for authenticated users" ON "public"."knowledge" - FOR UPDATE TO "authenticated" USING (true) WITH CHECK (true); - -CREATE POLICY "Enable delete for users based on agentId" ON "public"."knowledge" - FOR DELETE TO "authenticated" USING (("auth"."uid"() = "agentId")); - -ALTER TABLE "public"."accounts" ENABLE ROW LEVEL SECURITY; - -ALTER TABLE "public"."goals" ENABLE ROW LEVEL SECURITY; - -ALTER TABLE "public"."logs" ENABLE ROW LEVEL SECURITY; - -ALTER TABLE "public"."memories" ENABLE ROW LEVEL SECURITY; - -ALTER TABLE "public"."participants" ENABLE ROW LEVEL SECURITY; - -ALTER TABLE "public"."relationships" ENABLE ROW LEVEL SECURITY; - -ALTER TABLE "public"."rooms" ENABLE ROW LEVEL SECURITY; - -ALTER TABLE "public"."knowledge" ENABLE ROW LEVEL SECURITY; - -CREATE POLICY "select_own_account" ON "public"."accounts" FOR SELECT USING (("auth"."uid"() = "id")); - -GRANT USAGE ON SCHEMA "public" TO "postgres"; -GRANT USAGE ON SCHEMA "public" TO "authenticated"; -GRANT USAGE ON SCHEMA "public" TO "service_role"; -GRANT USAGE ON SCHEMA "public" TO "supabase_admin"; -GRANT USAGE ON SCHEMA "public" TO "supabase_auth_admin"; - -GRANT ALL ON FUNCTION "public"."after_account_created"() TO "authenticated"; -GRANT ALL ON FUNCTION "public"."after_account_created"() TO "service_role"; -GRANT ALL ON FUNCTION "public"."after_account_created"() TO "supabase_admin"; -GRANT ALL ON FUNCTION "public"."after_account_created"() TO "supabase_auth_admin"; - -GRANT ALL ON FUNCTION "public"."count_memories"("query_table_name" "text", "query_roomId" "uuid", "query_unique" boolean) TO "authenticated"; -GRANT ALL ON FUNCTION "public"."count_memories"("query_table_name" "text", "query_roomId" "uuid", "query_unique" boolean) TO "service_role"; -GRANT ALL ON FUNCTION "public"."count_memories"("query_table_name" "text", "query_roomId" "uuid", "query_unique" boolean) TO "supabase_admin"; -GRANT ALL ON FUNCTION "public"."count_memories"("query_table_name" "text", "query_roomId" "uuid", "query_unique" boolean) TO "supabase_auth_admin"; - -GRANT ALL ON FUNCTION "public"."create_friendship_with_host_agent"() TO "authenticated"; -GRANT ALL ON FUNCTION "public"."create_friendship_with_host_agent"() TO "service_role"; -GRANT ALL ON FUNCTION "public"."create_friendship_with_host_agent"() TO "supabase_admin"; -GRANT ALL ON FUNCTION "public"."create_friendship_with_host_agent"() TO "supabase_auth_admin"; - -GRANT ALL ON FUNCTION "public"."fn_notify_agents"() TO "authenticated"; -GRANT ALL ON FUNCTION "public"."fn_notify_agents"() TO "service_role"; -GRANT ALL ON FUNCTION "public"."fn_notify_agents"() TO "supabase_admin"; -GRANT ALL ON FUNCTION "public"."fn_notify_agents"() TO "supabase_auth_admin"; - -GRANT ALL ON FUNCTION "public"."get_embedding_list"("query_table_name" "text", "query_threshold" integer, "query_input" "text", "query_field_name" "text", "query_field_sub_name" "text", "query_match_count" integer) TO "authenticated"; -GRANT ALL ON FUNCTION "public"."get_embedding_list"("query_table_name" "text", "query_threshold" integer, "query_input" "text", "query_field_name" "text", "query_field_sub_name" "text", "query_match_count" integer) TO "service_role"; -GRANT ALL ON FUNCTION "public"."get_embedding_list"("query_table_name" "text", "query_threshold" integer, "query_input" "text", "query_field_name" "text", "query_field_sub_name" "text", "query_match_count" integer) TO "supabase_admin"; -GRANT ALL ON FUNCTION "public"."get_embedding_list"("query_table_name" "text", "query_threshold" integer, "query_input" "text", "query_field_name" "text", "query_field_sub_name" "text", "query_match_count" integer) TO "supabase_auth_admin"; - -GRANT ALL ON TABLE "public"."goals" TO "authenticated"; -GRANT ALL ON TABLE "public"."goals" TO "service_role"; -GRANT ALL ON TABLE "public"."goals" TO "supabase_admin"; -GRANT ALL ON TABLE "public"."goals" TO "supabase_auth_admin"; - -GRANT ALL ON FUNCTION "public"."get_goals"("query_roomId" "uuid", "query_userId" "uuid", "only_in_progress" boolean, "row_count" integer) TO "authenticated"; -GRANT ALL ON FUNCTION "public"."get_goals"("query_roomId" "uuid", "query_userId" "uuid", "only_in_progress" boolean, "row_count" integer) TO "service_role"; -GRANT ALL ON FUNCTION "public"."get_goals"("query_roomId" "uuid", "query_userId" "uuid", "only_in_progress" boolean, "row_count" integer) TO "supabase_admin"; -GRANT ALL ON FUNCTION "public"."get_goals"("query_roomId" "uuid", "query_userId" "uuid", "only_in_progress" boolean, "row_count" integer) TO "supabase_auth_admin"; - -GRANT ALL ON TABLE "public"."relationships" TO "authenticated"; -GRANT ALL ON TABLE "public"."relationships" TO "service_role"; -GRANT ALL ON TABLE "public"."relationships" TO "supabase_admin"; -GRANT ALL ON TABLE "public"."relationships" TO "supabase_auth_admin"; - -GRANT ALL ON FUNCTION "public"."get_relationship"("usera" "uuid", "userb" "uuid") TO "authenticated"; -GRANT ALL ON FUNCTION "public"."get_relationship"("usera" "uuid", "userb" "uuid") TO "service_role"; -GRANT ALL ON FUNCTION "public"."get_relationship"("usera" "uuid", "userb" "uuid") TO "supabase_admin"; -GRANT ALL ON FUNCTION "public"."get_relationship"("usera" "uuid", "userb" "uuid") TO "supabase_auth_admin"; - -GRANT ALL ON FUNCTION "public"."remove_memories"("query_table_name" "text", "query_roomId" "uuid") TO "authenticated"; -GRANT ALL ON FUNCTION "public"."remove_memories"("query_table_name" "text", "query_roomId" "uuid") TO "service_role"; -GRANT ALL ON FUNCTION "public"."remove_memories"("query_table_name" "text", "query_roomId" "uuid") TO "supabase_admin"; -GRANT ALL ON FUNCTION "public"."remove_memories"("query_table_name" "text", "query_roomId" "uuid") TO "supabase_auth_admin"; - -GRANT ALL ON TABLE "public"."accounts" TO "authenticated"; -GRANT ALL ON TABLE "public"."accounts" TO "service_role"; -GRANT SELECT,INSERT ON TABLE "public"."accounts" TO "authenticator"; -GRANT ALL ON TABLE "public"."accounts" TO "supabase_admin"; -GRANT ALL ON TABLE "public"."accounts" TO "supabase_auth_admin"; - -GRANT ALL ON TABLE "public"."logs" TO "authenticated"; -GRANT ALL ON TABLE "public"."logs" TO "service_role"; -GRANT ALL ON TABLE "public"."logs" TO "supabase_admin"; -GRANT ALL ON TABLE "public"."logs" TO "supabase_auth_admin"; - -GRANT ALL ON TABLE "public"."memories" TO "authenticated"; -GRANT ALL ON TABLE "public"."memories" TO "service_role"; -GRANT ALL ON TABLE "public"."memories" TO "supabase_admin"; -GRANT ALL ON TABLE "public"."memories" TO "supabase_auth_admin"; - -GRANT ALL ON TABLE "public"."participants" TO "authenticated"; -GRANT ALL ON TABLE "public"."participants" TO "service_role"; -GRANT ALL ON TABLE "public"."participants" TO "supabase_admin"; -GRANT ALL ON TABLE "public"."participants" TO "supabase_auth_admin"; - -GRANT ALL ON TABLE "public"."rooms" TO "authenticated"; -GRANT ALL ON TABLE "public"."rooms" TO "service_role"; -GRANT ALL ON TABLE "public"."rooms" TO "supabase_admin"; -GRANT ALL ON TABLE "public"."rooms" TO "supabase_auth_admin"; - -GRANT ALL ON TABLE "public"."secrets" TO "authenticated"; -GRANT ALL ON TABLE "public"."secrets" TO "service_role"; -GRANT ALL ON TABLE "public"."secrets" TO "supabase_admin"; -GRANT ALL ON TABLE "public"."secrets" TO "supabase_auth_admin"; - -GRANT ALL ON TABLE "public"."knowledge" TO "authenticated"; -GRANT ALL ON TABLE "public"."knowledge" TO "service_role"; -GRANT ALL ON TABLE "public"."knowledge" TO "supabase_admin"; -GRANT ALL ON TABLE "public"."knowledge" TO "supabase_auth_admin"; - -GRANT ALL ON FUNCTION "public"."get_participant_userState"("roomId" "uuid", "userId" "uuid") TO "authenticated"; -GRANT ALL ON FUNCTION "public"."get_participant_userState"("roomId" "uuid", "userId" "uuid") TO "service_role"; -GRANT ALL ON FUNCTION "public"."get_participant_userState"("roomId" "uuid", "userId" "uuid") TO "supabase_admin"; -GRANT ALL ON FUNCTION "public"."get_participant_userState"("roomId" "uuid", "userId" "uuid") TO "supabase_auth_admin"; - -GRANT ALL ON FUNCTION "public"."set_participant_userState"("roomId" "uuid", "userId" "uuid", "state" "text") TO "authenticated"; -GRANT ALL ON FUNCTION "public"."set_participant_userState"("roomId" "uuid", "userId" "uuid", "state" "text") TO "service_role"; -GRANT ALL ON FUNCTION "public"."set_participant_userState"("roomId" "uuid", "userId" "uuid", "state" "text") TO "supabase_admin"; -GRANT ALL ON FUNCTION "public"."set_participant_userState"("roomId" "uuid", "userId" "uuid", "state" "text") TO "supabase_auth_admin"; - - -ALTER DEFAULT PRIVILEGES FOR ROLE "postgres" IN SCHEMA "public" GRANT ALL ON SEQUENCES TO "postgres"; -ALTER DEFAULT PRIVILEGES FOR ROLE "postgres" IN SCHEMA "public" GRANT ALL ON SEQUENCES TO "authenticated"; -ALTER DEFAULT PRIVILEGES FOR ROLE "postgres" IN SCHEMA "public" GRANT ALL ON SEQUENCES TO "service_role"; -ALTER DEFAULT PRIVILEGES FOR ROLE "postgres" IN SCHEMA "public" GRANT ALL ON SEQUENCES TO "supabase_admin"; -ALTER DEFAULT PRIVILEGES FOR ROLE "postgres" IN SCHEMA "public" GRANT ALL ON SEQUENCES TO "supabase_auth_admin"; - -ALTER DEFAULT PRIVILEGES FOR ROLE "postgres" IN SCHEMA "public" GRANT ALL ON FUNCTIONS TO "postgres"; -ALTER DEFAULT PRIVILEGES FOR ROLE "postgres" IN SCHEMA "public" GRANT ALL ON FUNCTIONS TO "authenticated"; -ALTER DEFAULT PRIVILEGES FOR ROLE "postgres" IN SCHEMA "public" GRANT ALL ON FUNCTIONS TO "service_role"; -ALTER DEFAULT PRIVILEGES FOR ROLE "postgres" IN SCHEMA "public" GRANT ALL ON FUNCTIONS TO "supabase_admin"; -ALTER DEFAULT PRIVILEGES FOR ROLE "postgres" IN SCHEMA "public" GRANT ALL ON FUNCTIONS TO "supabase_auth_admin"; - -ALTER DEFAULT PRIVILEGES FOR ROLE "postgres" IN SCHEMA "public" GRANT ALL ON TABLES TO "postgres"; -ALTER DEFAULT PRIVILEGES FOR ROLE "postgres" IN SCHEMA "public" GRANT ALL ON TABLES TO "authenticated"; -ALTER DEFAULT PRIVILEGES FOR ROLE "postgres" IN SCHEMA "public" GRANT ALL ON TABLES TO "service_role"; -ALTER DEFAULT PRIVILEGES FOR ROLE "postgres" IN SCHEMA "public" GRANT ALL ON TABLES TO "supabase_admin"; -ALTER DEFAULT PRIVILEGES FOR ROLE "postgres" IN SCHEMA "public" GRANT ALL ON TABLES TO "supabase_auth_admin"; - -GRANT ALL ON FUNCTION "public"."search_knowledge"("query_embedding" "extensions"."vector", "query_agent_id" "uuid", "match_threshold" double precision, "match_count" integer, "search_text" text) TO "authenticated"; -GRANT ALL ON FUNCTION "public"."search_knowledge"("query_embedding" "extensions"."vector", "query_agent_id" "uuid", "match_threshold" double precision, "match_count" integer, "search_text" text) TO "service_role"; -GRANT ALL ON FUNCTION "public"."search_knowledge"("query_embedding" "extensions"."vector", "query_agent_id" "uuid", "match_threshold" double precision, "match_count" integer, "search_text" text) TO "supabase_admin"; -GRANT ALL ON FUNCTION "public"."search_knowledge"("query_embedding" "extensions"."vector", "query_agent_id" "uuid", "match_threshold" double precision, "match_count" integer, "search_text" text) TO "supabase_auth_admin"; - -RESET ALL; \ No newline at end of file diff --git a/packages/plugin-postgres/package.json b/packages/plugin-postgres/package.json deleted file mode 100644 index 28dcb925372..00000000000 --- a/packages/plugin-postgres/package.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "name": "@elizaos-plugins/postgres", - "version": "0.1.9", - "type": "module", - "main": "dist/index.js", - "module": "dist/index.js", - "types": "dist/index.d.ts", - "exports": { - "./package.json": "./package.json", - ".": { - "import": { - "@elizaos/source": "./src/index.ts", - "types": "./dist/index.d.ts", - "default": "./dist/index.js" - } - } - }, - "files": [ - "dist", - "schema.sql", - "seed.sql" - ], - "dependencies": { - "@elizaos/core": "workspace:*", - "@types/pg": "8.11.10", - "pg": "8.13.1" - }, - "devDependencies": { - "tsup": "8.3.5" - }, - "scripts": { - "build": "tsup --format esm --dts", - "dev": "tsup --format esm --dts --watch" - } -} diff --git a/packages/plugin-postgres/schema.sql b/packages/plugin-postgres/schema.sql deleted file mode 100644 index a09b2e6ad3e..00000000000 --- a/packages/plugin-postgres/schema.sql +++ /dev/null @@ -1,148 +0,0 @@ --- Enable pgvector extension - --- -- Drop existing tables and extensions --- DROP EXTENSION IF EXISTS vector CASCADE; --- DROP TABLE IF EXISTS relationships CASCADE; --- DROP TABLE IF EXISTS participants CASCADE; --- DROP TABLE IF EXISTS logs CASCADE; --- DROP TABLE IF EXISTS goals CASCADE; --- DROP TABLE IF EXISTS memories CASCADE; --- DROP TABLE IF EXISTS rooms CASCADE; --- DROP TABLE IF EXISTS accounts CASCADE; --- DROP TABLE IF EXISTS knowledge CASCADE; - - -CREATE EXTENSION IF NOT EXISTS vector; -CREATE EXTENSION IF NOT EXISTS fuzzystrmatch; - -BEGIN; - -CREATE TABLE IF NOT EXISTS accounts ( - "id" UUID PRIMARY KEY, - "createdAt" TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP, - "name" TEXT, - "username" TEXT, - "email" TEXT NOT NULL, - "avatarUrl" TEXT -); - -CREATE TABLE IF NOT EXISTS rooms ( - "id" UUID PRIMARY KEY, - "createdAt" TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP -); - -DO $$ -DECLARE - vector_dim INTEGER; -BEGIN - vector_dim := get_embedding_dimension(); - - EXECUTE format(' - CREATE TABLE IF NOT EXISTS memories ( - "id" UUID PRIMARY KEY, - "type" TEXT NOT NULL, - "createdAt" TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP, - "content" JSONB NOT NULL, - "embedding" vector(%s), - "userId" UUID REFERENCES accounts("id"), - "agentId" UUID REFERENCES accounts("id"), - "roomId" UUID REFERENCES rooms("id"), - "unique" BOOLEAN DEFAULT true NOT NULL, - CONSTRAINT fk_room FOREIGN KEY ("roomId") REFERENCES rooms("id") ON DELETE CASCADE, - CONSTRAINT fk_user FOREIGN KEY ("userId") REFERENCES accounts("id") ON DELETE CASCADE, - CONSTRAINT fk_agent FOREIGN KEY ("agentId") REFERENCES accounts("id") ON DELETE CASCADE - )', vector_dim); -END $$; - -CREATE TABLE IF NOT EXISTS goals ( - "id" UUID PRIMARY KEY, - "createdAt" TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP, - "userId" UUID REFERENCES accounts("id"), - "name" TEXT, - "status" TEXT, - "description" TEXT, - "roomId" UUID REFERENCES rooms("id"), - "objectives" JSONB DEFAULT '[]'::jsonb NOT NULL, - CONSTRAINT fk_room FOREIGN KEY ("roomId") REFERENCES rooms("id") ON DELETE CASCADE, - CONSTRAINT fk_user FOREIGN KEY ("userId") REFERENCES accounts("id") ON DELETE CASCADE -); - -CREATE TABLE IF NOT EXISTS logs ( - "id" UUID PRIMARY KEY DEFAULT gen_random_uuid(), - "createdAt" TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP, - "userId" UUID NOT NULL REFERENCES accounts("id"), - "body" JSONB NOT NULL, - "type" TEXT NOT NULL, - "roomId" UUID NOT NULL REFERENCES rooms("id"), - CONSTRAINT fk_room FOREIGN KEY ("roomId") REFERENCES rooms("id") ON DELETE CASCADE, - CONSTRAINT fk_user FOREIGN KEY ("userId") REFERENCES accounts("id") ON DELETE CASCADE -); - -CREATE TABLE IF NOT EXISTS participants ( - "id" UUID PRIMARY KEY, - "createdAt" TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP, - "userId" UUID REFERENCES accounts("id"), - "roomId" UUID REFERENCES rooms("id"), - "userState" TEXT, - "last_message_read" TEXT, - UNIQUE("userId", "roomId"), - CONSTRAINT fk_room FOREIGN KEY ("roomId") REFERENCES rooms("id") ON DELETE CASCADE, - CONSTRAINT fk_user FOREIGN KEY ("userId") REFERENCES accounts("id") ON DELETE CASCADE -); - -CREATE TABLE IF NOT EXISTS relationships ( - "id" UUID PRIMARY KEY, - "createdAt" TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP, - "userA" UUID NOT NULL REFERENCES accounts("id"), - "userB" UUID NOT NULL REFERENCES accounts("id"), - "status" TEXT, - "userId" UUID NOT NULL REFERENCES accounts("id"), - CONSTRAINT fk_user_a FOREIGN KEY ("userA") REFERENCES accounts("id") ON DELETE CASCADE, - CONSTRAINT fk_user_b FOREIGN KEY ("userB") REFERENCES accounts("id") ON DELETE CASCADE, - CONSTRAINT fk_user FOREIGN KEY ("userId") REFERENCES accounts("id") ON DELETE CASCADE -); - -CREATE TABLE IF NOT EXISTS cache ( - "key" TEXT NOT NULL, - "agentId" TEXT NOT NULL, - "value" JSONB DEFAULT '{}'::jsonb, - "createdAt" TIMESTAMP DEFAULT CURRENT_TIMESTAMP, - "expiresAt" TIMESTAMP, - PRIMARY KEY ("key", "agentId") -); - -DO $$ -DECLARE - vector_dim INTEGER; -BEGIN - vector_dim := get_embedding_dimension(); - - EXECUTE format(' - CREATE TABLE IF NOT EXISTS knowledge ( - "id" UUID PRIMARY KEY, - "agentId" UUID REFERENCES accounts("id"), - "content" JSONB NOT NULL, - "embedding" vector(%s), - "createdAt" TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP, - "isMain" BOOLEAN DEFAULT FALSE, - "originalId" UUID REFERENCES knowledge("id"), - "chunkIndex" INTEGER, - "isShared" BOOLEAN DEFAULT FALSE, - CHECK(("isShared" = true AND "agentId" IS NULL) OR ("isShared" = false AND "agentId" IS NOT NULL)) - )', vector_dim); -END $$; - --- Indexes -CREATE INDEX IF NOT EXISTS idx_memories_embedding ON memories USING hnsw ("embedding" vector_cosine_ops); -CREATE INDEX IF NOT EXISTS idx_memories_type_room ON memories("type", "roomId"); -CREATE INDEX IF NOT EXISTS idx_participants_user ON participants("userId"); -CREATE INDEX IF NOT EXISTS idx_participants_room ON participants("roomId"); -CREATE INDEX IF NOT EXISTS idx_relationships_users ON relationships("userA", "userB"); -CREATE INDEX IF NOT EXISTS idx_knowledge_agent ON knowledge("agentId"); -CREATE INDEX IF NOT EXISTS idx_knowledge_agent_main ON knowledge("agentId", "isMain"); -CREATE INDEX IF NOT EXISTS idx_knowledge_original ON knowledge("originalId"); -CREATE INDEX IF NOT EXISTS idx_knowledge_created ON knowledge("agentId", "createdAt"); -CREATE INDEX IF NOT EXISTS idx_knowledge_shared ON knowledge("isShared"); -CREATE INDEX IF NOT EXISTS idx_knowledge_embedding ON knowledge USING ivfflat (embedding vector_cosine_ops); - -COMMIT; diff --git a/packages/plugin-postgres/seed.sql b/packages/plugin-postgres/seed.sql deleted file mode 100644 index 7901408d1de..00000000000 --- a/packages/plugin-postgres/seed.sql +++ /dev/null @@ -1,9 +0,0 @@ - -INSERT INTO public.accounts (id, name, email, "avatarUrl") -VALUES ('00000000-0000-0000-0000-000000000000', 'Default Agent', 'default@agent.com', ''); - -INSERT INTO public.rooms (id) -VALUES ('00000000-0000-0000-0000-000000000000'); - -INSERT INTO public.participants (id, "userId", "roomId") -VALUES ('00000000-0000-0000-0000-000000000001', '00000000-0000-0000-0000-000000000000', '00000000-0000-0000-0000-000000000000'); diff --git a/packages/plugin-postgres/src/__tests__/README.md b/packages/plugin-postgres/src/__tests__/README.md deleted file mode 100644 index 98896ff4f2b..00000000000 --- a/packages/plugin-postgres/src/__tests__/README.md +++ /dev/null @@ -1,71 +0,0 @@ -# PostgreSQL Adapter Tests - -This directory contains tests for the PostgreSQL adapter with vector extension support. - -## Prerequisites - -- Docker installed and running -- Node.js and pnpm installed -- Bash shell (for Unix/Mac) or Git Bash (for Windows) - -## Test Environment - -The tests run against a PostgreSQL instance with the `pgvector` extension enabled. We use Docker to ensure a consistent test environment: - -- PostgreSQL 16 with pgvector extension -- Test database: `eliza_test` -- Port: 5433 (to avoid conflicts with local PostgreSQL) -- Vector dimensions: 1536 (OpenAI compatible) - -## Running Tests - -The easiest way to run tests is using the provided script: - -```bash -./run_tests.sh -``` - -This script will: -1. Start the PostgreSQL container with vector extension -2. Wait for the database to be ready -3. Run the test suite - -## Manual Setup - -If you prefer to run tests manually: - -1. Start the test database: - ```bash - docker compose -f docker-compose.test.yml up -d - ``` - -2. Wait for the database to be ready (about 30 seconds) - -3. Run tests: - ```bash - pnpm vitest vector-extension.test.ts - ``` - -## Test Structure - -- `vector-extension.test.ts`: Main test suite for vector operations -- `docker-compose.test.yml`: Docker configuration for test database -- `run_tests.sh`: Helper script to run tests - -## Troubleshooting - -1. If tests fail with connection errors: - - Check if Docker is running - - Verify port 5433 is available - - Wait a bit longer for database initialization - -2. If vector operations fail: - - Check if pgvector extension is properly loaded - - Verify schema initialization - - Check vector dimensions match (1536 for OpenAI) - -## Notes - -- Tests automatically clean up after themselves -- Each test run starts with a fresh database -- Vector extension is initialized as part of the schema setup \ No newline at end of file diff --git a/packages/plugin-postgres/src/__tests__/docker-compose.test.yml b/packages/plugin-postgres/src/__tests__/docker-compose.test.yml deleted file mode 100644 index 7a589ec1926..00000000000 --- a/packages/plugin-postgres/src/__tests__/docker-compose.test.yml +++ /dev/null @@ -1,16 +0,0 @@ -# yaml-language-server: $schema=https://raw.githubusercontent.com/compose-spec/compose-spec/master/schema/compose-spec.json -version: '3.8' -services: - postgres-test: - image: pgvector/pgvector:pg16 - environment: - POSTGRES_USER: postgres - POSTGRES_PASSWORD: postgres - POSTGRES_DB: eliza_test - ports: - - "5433:5432" - healthcheck: - test: ["CMD-SHELL", "pg_isready -U postgres"] - interval: 5s - timeout: 5s - retries: 5 \ No newline at end of file diff --git a/packages/plugin-postgres/src/__tests__/run_tests.sh b/packages/plugin-postgres/src/__tests__/run_tests.sh deleted file mode 100755 index 8abe9af4a0c..00000000000 --- a/packages/plugin-postgres/src/__tests__/run_tests.sh +++ /dev/null @@ -1,78 +0,0 @@ -#!/bin/bash - -# Color output -RED='\033[0;31m' -GREEN='\033[0;32m' -YELLOW='\033[1;33m' -NC='\033[0m' # No Color - -# Get script directory -SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" -SCHEMA_PATH="$SCRIPT_DIR/../../schema.sql" - -echo -e "${YELLOW}Starting PostgreSQL test environment...${NC}" - -# Determine Docker Compose command -if [[ "$OSTYPE" == "darwin"* ]]; then - DOCKER_COMPOSE_CMD="docker compose" -else - DOCKER_COMPOSE_CMD="docker-compose" -fi - -# Stop any existing containers -echo -e "${YELLOW}Cleaning up existing containers...${NC}" -$DOCKER_COMPOSE_CMD -f docker-compose.test.yml down - -# Start fresh container -echo -e "${YELLOW}Starting PostgreSQL container...${NC}" -$DOCKER_COMPOSE_CMD -f docker-compose.test.yml up -d - -# Function to check if PostgreSQL is ready -check_postgres() { - $DOCKER_COMPOSE_CMD -f docker-compose.test.yml exec -T postgres-test pg_isready -U postgres -} - -# Wait for PostgreSQL to be ready -echo -e "${YELLOW}Waiting for PostgreSQL to be ready...${NC}" -RETRIES=30 -until check_postgres || [ $RETRIES -eq 0 ]; do - echo -e "${YELLOW}Waiting for PostgreSQL to be ready... ($RETRIES attempts left)${NC}" - RETRIES=$((RETRIES-1)) - sleep 1 -done - -if [ $RETRIES -eq 0 ]; then - echo -e "${RED}Failed to connect to PostgreSQL${NC}" - $DOCKER_COMPOSE_CMD -f docker-compose.test.yml logs - exit 1 -fi - -echo -e "${GREEN}PostgreSQL is ready!${NC}" - -# Load schema -echo -e "${YELLOW}Loading database schema...${NC}" -if [ ! -f "$SCHEMA_PATH" ]; then - echo -e "${RED}Schema file not found at: $SCHEMA_PATH${NC}" - exit 1 -fi - -# Fix: Check exit code directly instead of using $? -if ! $DOCKER_COMPOSE_CMD -f docker-compose.test.yml exec -T postgres-test psql -U postgres -d eliza_test -f - < "$SCHEMA_PATH"; then - echo -e "${RED}Failed to load schema${NC}" - exit 1 -fi -echo -e "${GREEN}Schema loaded successfully!${NC}" - -# Run the tests -echo -e "${YELLOW}Running tests...${NC}" -if ! bun run vitest vector-extension.test.ts; then - echo -e "${RED}Tests failed!${NC}" - $DOCKER_COMPOSE_CMD -f docker-compose.test.yml down - exit 1 -fi - -echo -e "${GREEN}Tests completed successfully!${NC}" - -# Clean up -echo -e "${YELLOW}Cleaning up test environment...${NC}" -$DOCKER_COMPOSE_CMD -f docker-compose.test.yml down \ No newline at end of file diff --git a/packages/plugin-postgres/src/__tests__/vector-extension.test.ts b/packages/plugin-postgres/src/__tests__/vector-extension.test.ts deleted file mode 100644 index a3b912935f6..00000000000 --- a/packages/plugin-postgres/src/__tests__/vector-extension.test.ts +++ /dev/null @@ -1,416 +0,0 @@ -import { PostgresDatabaseAdapter } from '../index'; -import pg from 'pg'; -import fs from 'fs'; -import path from 'path'; -import { describe, test, expect, beforeEach, afterEach, vi, beforeAll } from 'vitest'; -import { logger, type Memory, type Content } from '@elizaos/core'; - -// Increase test timeout -vi.setConfig({ testTimeout: 15000 }); - -// Mock the @elizaos/core module -vi.mock('@elizaos/core', () => ({ - logger: { - error: vi.fn().mockImplementation(console.error), - info: vi.fn().mockImplementation(console.log), - success: vi.fn().mockImplementation(console.log), - debug: vi.fn().mockImplementation(console.log), - warn: vi.fn().mockImplementation(console.warn), - }, - DatabaseAdapter: class { - protected circuitBreaker = { - execute: async <T>(operation: () => Promise<T>) => operation() - }; - protected async withCircuitBreaker<T>(operation: () => Promise<T>) { - return this.circuitBreaker.execute(operation); - } - }, - EmbeddingProvider: { - OpenAI: 'OpenAI', - Ollama: 'Ollama', - BGE: 'BGE' - } -})); - -// Helper function to parse vector string from PostgreSQL -const parseVectorString = (vectorStr: string): number[] => { - if (!vectorStr) return []; - // Remove brackets and split by comma - return vectorStr.replace(/[[\]]/g, '').split(',').map(Number); -}; - -describe('PostgresDatabaseAdapter - Vector Extension Validation', () => { - let adapter: PostgresDatabaseAdapter; - let testClient: pg.PoolClient; - let testPool: pg.Pool; - - const initializeDatabase = async (client: pg.PoolClient) => { - logger.info('Initializing database with schema...'); - try { - // Read and execute schema file - const schemaPath = path.resolve(__dirname, '../../schema.sql'); - const schema = fs.readFileSync(schemaPath, 'utf8'); - await client.query(schema); - - // Verify schema setup - const { rows: vectorExt } = await client.query(` - SELECT * FROM pg_extension WHERE extname = 'vector' - `); - logger.info('Vector extension status:', { isInstalled: vectorExt.length > 0 }); - - const { rows: dimension } = await client.query('SELECT get_embedding_dimension()'); - logger.info('Vector dimension:', { dimension: dimension[0].get_embedding_dimension }); - - // Verify search path - const { rows: searchPath } = await client.query('SHOW search_path'); - logger.info('Search path:', { searchPath: searchPath[0].search_path }); - - } catch (error) { - logger.error(`Database initialization failed: ${error instanceof Error ? error.message : 'Unknown error'}`); - throw error; - } - }; - - const cleanDatabase = async (client: pg.PoolClient) => { - logger.info('Starting database cleanup...'); - try { - await client.query('DROP TABLE IF EXISTS relationships CASCADE'); - await client.query('DROP TABLE IF EXISTS participants CASCADE'); - await client.query('DROP TABLE IF EXISTS logs CASCADE'); - await client.query('DROP TABLE IF EXISTS goals CASCADE'); - await client.query('DROP TABLE IF EXISTS memories CASCADE'); - await client.query('DROP TABLE IF EXISTS rooms CASCADE'); - await client.query('DROP TABLE IF EXISTS accounts CASCADE'); - await client.query('DROP TABLE IF EXISTS cache CASCADE'); - await client.query('DROP EXTENSION IF EXISTS vector CASCADE'); - await client.query('DROP SCHEMA IF EXISTS extensions CASCADE'); - logger.success('Database cleanup completed successfully'); - } catch (error) { - logger.error(`Database cleanup failed: ${error instanceof Error ? error.message : 'Unknown error'}`); - throw error; - } - }; - - beforeAll(async () => { - logger.info('Setting up test database...'); - const setupPool = new pg.Pool({ - host: 'localhost', - port: 5433, - database: 'eliza_test', - user: 'postgres', - password: 'postgres' - }); - - const setupClient = await setupPool.connect(); - try { - await cleanDatabase(setupClient); - await initializeDatabase(setupClient); - } finally { - await setupClient.release(); - await setupPool.end(); - } - }); - - beforeEach(async () => { - logger.info('Setting up test environment...'); - try { - // Setup test database connection - testPool = new pg.Pool({ - host: 'localhost', - port: 5433, - database: 'eliza_test', - user: 'postgres', - password: 'postgres' - }); - - testClient = await testPool.connect(); - logger.debug('Database connection established'); - - await cleanDatabase(testClient); - logger.debug('Database cleaned'); - - adapter = new PostgresDatabaseAdapter({ - host: 'localhost', - port: 5433, - database: 'eliza_test', - user: 'postgres', - password: 'postgres' - }); - logger.success('Test environment setup completed'); - } catch (error) { - logger.error(`Test environment setup failed: ${error instanceof Error ? error.message : 'Unknown error'}`); - throw error; - } - }); - - afterEach(async () => { - logger.info('Cleaning up test environment...'); - try { - await cleanDatabase(testClient); - await testClient?.release(); - await testPool?.end(); - await adapter?.close(); - logger.success('Test environment cleanup completed'); - } catch (error) { - logger.error(`Test environment cleanup failed: ${error instanceof Error ? error.message : 'Unknown error'}`); - throw error; - } - }); - - describe('Schema and Extension Management', () => { - test('should initialize with vector extension', async () => { - logger.info('Testing vector extension initialization...'); - try { - // Act - logger.debug('Initializing adapter...'); - await adapter.init(); - logger.success('Adapter initialized successfully'); - - // Assert - logger.debug('Verifying vector extension existence...'); - const { rows } = await testClient.query(` - SELECT 1 FROM pg_extension WHERE extname = 'vector' - `); - expect(rows.length).toBe(1); - logger.success('Vector extension verified successfully'); - } catch (error) { - logger.error(`Vector extension test failed: ${error instanceof Error ? error.message : 'Unknown error'}`); - throw error; - } - }); - - test('should handle missing rooms table', async () => { - logger.info('Testing rooms table creation...'); - try { - // Act - logger.debug('Initializing adapter...'); - await adapter.init(); - logger.success('Adapter initialized successfully'); - - // Assert - logger.debug('Verifying rooms table existence...'); - const { rows } = await testClient.query(` - SELECT EXISTS ( - SELECT FROM information_schema.tables - WHERE table_name = 'rooms' - ); - `); - expect(rows[0].exists).toBe(true); - logger.success('Rooms table verified successfully'); - } catch (error) { - logger.error(`Rooms table test failed: ${error instanceof Error ? error.message : 'Unknown error'}`); - throw error; - } - }); - - test('should not reapply schema when everything exists', async () => { - logger.info('Testing schema reapplication prevention...'); - try { - // Arrange - logger.debug('Setting up initial schema...'); - await adapter.init(); - logger.success('Initial schema setup completed'); - - const spy = vi.spyOn(fs, 'readFileSync'); - logger.debug('File read spy installed'); - - // Act - logger.debug('Attempting schema reapplication...'); - await adapter.init(); - logger.success('Second initialization completed'); - - // Assert - expect(spy).not.toHaveBeenCalled(); - logger.success('Verified schema was not reapplied'); - spy.mockRestore(); - } catch (error) { - logger.error(`Schema reapplication test failed: ${error instanceof Error ? error.message : 'Unknown error'}`); - throw error; - } - }); - - test('should handle transaction rollback on error', async () => { - logger.info('Testing transaction rollback...'); - try { - // Arrange - logger.debug('Setting up file read error simulation...'); - const spy = vi.spyOn(fs, 'readFileSync').mockImplementation(() => { - logger.warn('Simulating schema read error'); - throw new Error('Schema read error'); - }); - - // Act & Assert - logger.debug('Attempting initialization with error...'); - await expect(adapter.init()).rejects.toThrow('Schema read error'); - logger.success('Error thrown as expected'); - - // Verify no tables were created - logger.debug('Verifying rollback...'); - const { rows } = await testClient.query(` - SELECT EXISTS ( - SELECT FROM information_schema.tables - WHERE table_name = 'rooms' - ); - `); - expect(rows[0].exists).toBe(false); - logger.success('Rollback verified successfully'); - spy.mockRestore(); - } catch (error) { - logger.error(`Transaction rollback test failed: ${error instanceof Error ? error.message : 'Unknown error'}`); - throw error; - } - }); - }); - - // Memory Operations tests will be updated in the next iteration - describe('Memory Operations with Vector', () => { - const TEST_UUID = 'aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee'; - const TEST_TABLE = 'test_memories'; - - beforeEach(async () => { - logger.info('Setting up memory operations test...'); - try { - // Ensure clean state and proper initialization - await adapter.init(); - - // Create necessary account and room first - await testClient.query('BEGIN'); - try { - await testClient.query(` - INSERT INTO accounts (id, email) - VALUES ($1, 'test@test.com') - ON CONFLICT (id) DO NOTHING - `, [TEST_UUID]); - - await testClient.query(` - INSERT INTO rooms (id) - VALUES ($1) - ON CONFLICT (id) DO NOTHING - `, [TEST_UUID]); - - await testClient.query('COMMIT'); - } catch (error) { - await testClient.query('ROLLBACK'); - throw error; - } - - } catch (error) { - logger.error('Memory operations setup failed:', { - error: error instanceof Error ? error.message : String(error) - }); - throw error; - } - }); - - test('should create and retrieve memory with vector embedding', async () => { - // Arrange - const content: Content = { - text: 'test content' - }; - - const memory: Memory = { - id: TEST_UUID, - content, - embedding: new Array(1536).fill(0.1), - unique: true, - userId: TEST_UUID, - agentId: TEST_UUID, - roomId: TEST_UUID, - createdAt: Date.now() - }; - - // Act - await testClient.query('BEGIN'); - try { - await adapter.createMemory(memory, TEST_TABLE); - await testClient.query('COMMIT'); - } catch (error) { - await testClient.query('ROLLBACK'); - throw error; - } - - // Verify the embedding dimension - const { rows: [{ get_embedding_dimension }] } = await testClient.query('SELECT get_embedding_dimension()'); - expect(get_embedding_dimension).toBe(1536); - - // Retrieve and verify - const retrieved = await adapter.getMemoryById(TEST_UUID); - expect(retrieved).toBeDefined(); - const parsedEmbedding = typeof retrieved?.embedding === 'string' ? parseVectorString(retrieved.embedding) : retrieved?.embedding; - expect(Array.isArray(parsedEmbedding)).toBe(true); - expect(parsedEmbedding).toHaveLength(1536); - expect(retrieved?.content).toEqual(content); - }); - - test('should search memories by embedding', async () => { - // Arrange - const content: Content = { text: 'test content' }; - const embedding = new Array(1536).fill(0.1); - const memory: Memory = { - id: TEST_UUID, - content, - embedding, - unique: true, - userId: TEST_UUID, - agentId: TEST_UUID, - roomId: TEST_UUID, - createdAt: Date.now() - }; - - // Create memory within transaction - await testClient.query('BEGIN'); - try { - await adapter.createMemory(memory, TEST_TABLE); - await testClient.query('COMMIT'); - } catch (error) { - await testClient.query('ROLLBACK'); - throw error; - } - - // Act - const results = await adapter.searchMemoriesByEmbedding(embedding, { - tableName: TEST_TABLE, - roomId: TEST_UUID, - match_threshold: 0.8, - count: 1 - }); - - // Assert - expect(results).toBeDefined(); - expect(Array.isArray(results)).toBe(true); - expect(results.length).toBeGreaterThan(0); - const parsedEmbedding = typeof results[0].embedding === 'string' ? parseVectorString(results[0].embedding) : results[0].embedding; - expect(parsedEmbedding).toHaveLength(1536); - }); - - test('should handle invalid embedding dimensions', async () => { - // Arrange - const content: Content = { - text: 'test content' - }; - - const memory: Memory = { - id: TEST_UUID, - content, - embedding: new Array(100).fill(0.1), // Wrong dimension - unique: true, - userId: TEST_UUID, - agentId: TEST_UUID, - roomId: TEST_UUID, - createdAt: Date.now() - }; - - // Act & Assert - await testClient.query('BEGIN'); - try { - await expect(adapter.createMemory(memory, TEST_TABLE)) - .rejects - .toThrow('Invalid embedding dimension: expected 1536, got 100'); - await testClient.query('ROLLBACK'); - } catch (error) { - await testClient.query('ROLLBACK'); - throw error; - } - }, { timeout: 30000 }); // Increased timeout for retry attempts - }); -}); \ No newline at end of file diff --git a/packages/plugin-postgres/src/index.ts b/packages/plugin-postgres/src/index.ts deleted file mode 100644 index 6009f8b5b6d..00000000000 --- a/packages/plugin-postgres/src/index.ts +++ /dev/null @@ -1,1437 +0,0 @@ -import { v4 } from "uuid"; - -// Import the entire module as default -import pg from "pg"; -type Pool = pg.Pool; - -import { - type Account, - type Actor, - DatabaseAdapter, - type GoalStatus, - type Participant, - logger, - type Goal, - type IDatabaseCacheAdapter, - type Memory, - type Relationship, - type UUID, -} from "@elizaos/core"; -import fs from "fs"; -import path from "path"; -import type { - QueryConfig, - QueryConfigValues, - QueryResult, - QueryResultRow, -} from "pg"; -import { fileURLToPath } from "url"; - -const __filename = fileURLToPath(import.meta.url); // get the resolved path to the file -const __dirname = path.dirname(__filename); // get the name of the directory - -export class PostgresDatabaseAdapter - extends DatabaseAdapter<Pool> - implements IDatabaseCacheAdapter -{ - private pool: Pool; - private readonly maxRetries: number = 3; - private readonly baseDelay: number = 1000; // 1 second - private readonly maxDelay: number = 10000; // 10 seconds - private readonly jitterMax: number = 1000; // 1 second - private readonly connectionTimeout: number = 5000; // 5 seconds - - constructor(connectionConfig: any) { - super(); - - const defaultConfig = { - max: 20, - idleTimeoutMillis: 30000, - connectionTimeoutMillis: this.connectionTimeout, - }; - - this.pool = new pg.Pool({ - ...defaultConfig, - ...connectionConfig, // Allow overriding defaults - }); - - this.pool.on("error", (err) => { - logger.error("Unexpected pool error", err); - this.handlePoolError(err); - }); - - this.setupPoolErrorHandling(); - this.testConnection(); - } - - private setupPoolErrorHandling() { - process.on("SIGINT", async () => { - await this.cleanup(); - process.exit(0); - }); - - process.on("SIGTERM", async () => { - await this.cleanup(); - process.exit(0); - }); - - process.on("beforeExit", async () => { - await this.cleanup(); - }); - } - - private async withDatabase<T>( - operation: () => Promise<T>, - context: string - ): Promise<T> { - return this.withRetry(operation); - } - - private async withRetry<T>(operation: () => Promise<T>): Promise<T> { - let lastError: Error = new Error("Unknown error"); // Initialize with default - - for (let attempt = 1; attempt <= this.maxRetries; attempt++) { - try { - return await operation(); - } catch (error) { - lastError = error as Error; - - if (attempt < this.maxRetries) { - // Calculate delay with exponential backoff - const backoffDelay = Math.min( - this.baseDelay * Math.pow(2, attempt - 1), - this.maxDelay - ); - - // Add jitter to prevent thundering herd - const jitter = Math.random() * this.jitterMax; - const delay = backoffDelay + jitter; - - logger.warn( - `Database operation failed (attempt ${attempt}/${this.maxRetries}):`, - { - error: - error instanceof Error - ? error.message - : String(error), - nextRetryIn: `${(delay / 1000).toFixed(1)}s`, - } - ); - - await new Promise((resolve) => setTimeout(resolve, delay)); - } else { - logger.error("Max retry attempts reached:", { - error: - error instanceof Error - ? error.message - : String(error), - totalAttempts: attempt, - }); - throw error instanceof Error - ? error - : new Error(String(error)); - } - } - } - - throw lastError; - } - - private async handlePoolError(error: Error) { - logger.error("Pool error occurred, attempting to reconnect", { - error: error.message, - }); - - try { - // Close existing pool - await this.pool.end(); - - // Create new pool - this.pool = new pg.Pool({ - ...this.pool.options, - connectionTimeoutMillis: this.connectionTimeout, - }); - - await this.testConnection(); - logger.success("Pool reconnection successful"); - } catch (reconnectError) { - logger.error("Failed to reconnect pool", { - error: - reconnectError instanceof Error - ? reconnectError.message - : String(reconnectError), - }); - throw reconnectError; - } - } - - async query<R extends QueryResultRow = any, I = any[]>( - queryTextOrConfig: string | QueryConfig<I>, - values?: QueryConfigValues<I> - ): Promise<QueryResult<R>> { - return this.withDatabase(async () => { - return await this.pool.query(queryTextOrConfig, values); - }, "query"); - } - - private async validateVectorSetup(): Promise<boolean> { - try { - const vectorExt = await this.query(` - SELECT 1 FROM pg_extension WHERE extname = 'vector' - `); - const hasVector = vectorExt.rows.length > 0; - - if (!hasVector) { - logger.error("Vector extension not found in database"); - return false; - } - - return true; - } catch (error) { - logger.error("Failed to validate vector extension:", { - error: error instanceof Error ? error.message : String(error), - }); - return false; - } - } - - async init() { - await this.testConnection(); - - const client = await this.pool.connect(); - try { - await client.query("BEGIN"); - - // 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 || !(await this.validateVectorSetup())) { - logger.info( - "Applying database schema - tables or vector extension missing" - ); - const schema = fs.readFileSync( - path.resolve(__dirname, "../schema.sql"), - "utf8" - ); - await client.query(schema); - } - - await client.query("COMMIT"); - } catch (error) { - await client.query("ROLLBACK"); - throw error; - } finally { - client.release(); - } - } - - async close() { - await this.pool.end(); - } - - async testConnection(): Promise<boolean> { - let client; - try { - client = await this.pool.connect(); - const result = await client.query("SELECT NOW()"); - logger.success( - "Database connection test successful:", - result.rows[0] - ); - return true; - } catch (error) { - logger.error("Database connection test failed:", error); - throw new Error( - `Failed to connect to database: ${(error as Error).message}` - ); - } finally { - if (client) client.release(); - } - } - - async cleanup(): Promise<void> { - try { - await this.pool.end(); - logger.info("Database pool closed"); - } catch (error) { - logger.error("Error closing database pool:", error); - } - } - - async getRoom(roomId: UUID): Promise<UUID | null> { - return this.withDatabase(async () => { - const { rows } = await this.pool.query( - "SELECT id FROM rooms WHERE id = $1", - [roomId] - ); - return rows.length > 0 ? (rows[0].id as UUID) : null; - }, "getRoom"); - } - - async getParticipantsForAccount(userId: UUID): Promise<Participant[]> { - return this.withDatabase(async () => { - const { rows } = await this.pool.query( - `SELECT id, "userId", "roomId", "last_message_read" - FROM participants - WHERE "userId" = $1`, - [userId] - ); - return rows as Participant[]; - }, "getParticipantsForAccount"); - } - - async getParticipantUserState( - roomId: UUID, - userId: UUID - ): Promise<"FOLLOWED" | "MUTED" | null> { - return this.withDatabase(async () => { - const { rows } = await this.pool.query( - `SELECT "userState" FROM participants WHERE "roomId" = $1 AND "userId" = $2`, - [roomId, userId] - ); - return rows.length > 0 ? rows[0].userState : null; - }, "getParticipantUserState"); - } - - async getMemoriesByRoomIds(params: { - roomIds: UUID[]; - agentId?: UUID; - tableName: string; - limit?: number; - }): Promise<Memory[]> { - return this.withDatabase(async () => { - if (params.roomIds.length === 0) return []; - const placeholders = params.roomIds - .map((_, i) => `$${i + 2}`) - .join(", "); - - let query = `SELECT * FROM memories WHERE type = $1 AND "roomId" IN (${placeholders})`; - let queryParams = [params.tableName, ...params.roomIds]; - - if (params.agentId) { - query += ` AND "agentId" = $${params.roomIds.length + 2}`; - queryParams = [...queryParams, params.agentId]; - } - - // Add sorting, and conditionally add LIMIT if provided - query += ` ORDER BY "createdAt" DESC`; - if (params.limit) { - query += ` LIMIT $${queryParams.length + 1}`; - queryParams.push(params.limit.toString()); - } - - const { rows } = await this.pool.query(query, queryParams); - return rows.map((row) => ({ - ...row, - content: - typeof row.content === "string" - ? JSON.parse(row.content) - : row.content, - })); - }, "getMemoriesByRoomIds"); - } - - async setParticipantUserState( - roomId: UUID, - userId: UUID, - state: "FOLLOWED" | "MUTED" | null - ): Promise<void> { - return this.withDatabase(async () => { - await this.pool.query( - `UPDATE participants SET "userState" = $1 WHERE "roomId" = $2 AND "userId" = $3`, - [state, roomId, userId] - ); - }, "setParticipantUserState"); - } - - async getParticipantsForRoom(roomId: UUID): Promise<UUID[]> { - return this.withDatabase(async () => { - const { rows } = await this.pool.query( - 'SELECT "userId" FROM participants WHERE "roomId" = $1', - [roomId] - ); - return rows.map((row) => row.userId); - }, "getParticipantsForRoom"); - } - - async getAccountById(userId: UUID): Promise<Account | null> { - return this.withDatabase(async () => { - const { rows } = await this.pool.query( - "SELECT * FROM accounts WHERE id = $1", - [userId] - ); - if (rows.length === 0) { - logger.debug("Account not found:", { userId }); - return null; - } - - return rows[0]; - }, "getAccountById"); - } - - async createAccount(account: Account): Promise<boolean> { - return this.withDatabase(async () => { - try { - const accountId = account.id ?? v4(); - await this.pool.query( - `INSERT INTO accounts (id, name, username, email, "avatarUrl") - VALUES ($1, $2, $3, $4, $5)`, - [ - accountId, - account.name, - account.username || "", - account.email || "", - account.avatarUrl || "" - ] - ); - logger.debug("Account created successfully:", { - accountId, - }); - return true; - } catch (error) { - logger.error("Error creating account:", { - error: - error instanceof Error ? error.message : String(error), - accountId: account.id, - name: account.name, // Only log non-sensitive fields - }); - return false; // Return false instead of throwing to maintain existing behavior - } - }, "createAccount"); - } - - async getActorById(params: { roomId: UUID }): Promise<Actor[]> { - return this.withDatabase(async () => { - const { rows } = await this.pool.query( - `SELECT a.id, a.name, a.username - FROM participants p - LEFT JOIN accounts a ON p."userId" = a.id - WHERE p."roomId" = $1`, - [params.roomId] - ); - - logger.debug("Retrieved actors:", { - roomId: params.roomId, - actorCount: rows.length, - }); - - return rows; - }, "getActorById").catch((error) => { - logger.error("Failed to get actors:", { - roomId: params.roomId, - error: error.message, - }); - throw error; // Re-throw to let caller handle database errors - }); - } - - async getMemoryById(id: UUID): Promise<Memory | null> { - return this.withDatabase(async () => { - const { rows } = await this.pool.query( - "SELECT * FROM memories WHERE id = $1", - [id] - ); - if (rows.length === 0) return null; - - return { - ...rows[0], - content: - typeof rows[0].content === "string" - ? JSON.parse(rows[0].content) - : rows[0].content, - }; - }, "getMemoryById"); - } - - async getMemoriesByIds( - memoryIds: UUID[], - tableName?: string - ): Promise<Memory[]> { - return this.withDatabase(async () => { - if (memoryIds.length === 0) return []; - const placeholders = memoryIds.map((_, i) => `$${i + 1}`).join(","); - let sql = `SELECT * FROM memories WHERE id IN (${placeholders})`; - const queryParams: any[] = [...memoryIds]; - - if (tableName) { - sql += ` AND type = $${memoryIds.length + 1}`; - queryParams.push(tableName); - } - - const { rows } = await this.pool.query(sql, queryParams); - - return rows.map((row) => ({ - ...row, - content: - typeof row.content === "string" - ? JSON.parse(row.content) - : row.content, - })); - }, "getMemoriesByIds"); - } - - async createMemory(memory: Memory, tableName: string): Promise<void> { - return this.withDatabase(async () => { - logger.debug("PostgresAdapter createMemory:", { - memoryId: memory.id, - embeddingLength: memory.embedding?.length, - contentLength: memory.content?.text?.length, - }); - - let isUnique = true; - if (memory.embedding) { - const similarMemories = await this.searchMemoriesByEmbedding( - memory.embedding, - { - tableName, - roomId: memory.roomId, - match_threshold: 0.95, - count: 1, - } - ); - isUnique = similarMemories.length === 0; - } - - await this.pool.query( - `INSERT INTO memories ( - id, type, content, embedding, "userId", "roomId", "agentId", "unique", "createdAt" - ) VALUES ($1, $2, $3, $4, $5::uuid, $6::uuid, $7::uuid, $8, to_timestamp($9/1000.0))`, - [ - memory.id ?? v4(), - tableName, - JSON.stringify(memory.content), - memory.embedding ? `[${memory.embedding.join(",")}]` : null, - memory.userId, - memory.roomId, - memory.agentId, - memory.unique ?? isUnique, - Date.now(), - ] - ); - }, "createMemory"); - } - - async searchMemories(params: { - tableName: string; - agentId: UUID; - roomId: UUID; - embedding: number[]; - match_threshold: number; - count: number; - unique: boolean; - }): Promise<Memory[]> { - return await this.searchMemoriesByEmbedding(params.embedding, { - match_threshold: params.match_threshold, - count: params.count, - agentId: params.agentId, - roomId: params.roomId, - unique: params.unique, - tableName: params.tableName, - }); - } - - async getMemories(params: { - roomId: UUID; - count?: number; - unique?: boolean; - tableName: string; - agentId?: UUID; - start?: number; - end?: number; - }): Promise<Memory[]> { - // Parameter validation - if (!params.tableName) throw new Error("tableName is required"); - if (!params.roomId) throw new Error("roomId is required"); - - return this.withDatabase(async () => { - // Build query - let sql = `SELECT * FROM memories WHERE type = $1 AND "roomId" = $2`; - const values: any[] = [params.tableName, params.roomId]; - let paramCount = 2; - - // Add time range filters - if (params.start) { - paramCount++; - sql += ` AND "createdAt" >= to_timestamp($${paramCount})`; - values.push(params.start / 1000); - } - - if (params.end) { - paramCount++; - sql += ` AND "createdAt" <= to_timestamp($${paramCount})`; - values.push(params.end / 1000); - } - - // Add other filters - if (params.unique) { - sql += ` AND "unique" = true`; - } - - if (params.agentId) { - paramCount++; - sql += ` AND "agentId" = $${paramCount}`; - values.push(params.agentId); - } - - // Add ordering and limit - sql += ' ORDER BY "createdAt" DESC'; - - if (params.count) { - paramCount++; - sql += ` LIMIT $${paramCount}`; - values.push(params.count); - } - - logger.debug("Fetching memories:", { - roomId: params.roomId, - tableName: params.tableName, - unique: params.unique, - agentId: params.agentId, - timeRange: - params.start || params.end - ? { - start: params.start - ? new Date(params.start).toISOString() - : undefined, - end: params.end - ? new Date(params.end).toISOString() - : undefined, - } - : undefined, - limit: params.count, - }); - - const { rows } = await this.pool.query(sql, values); - return rows.map((row) => ({ - ...row, - content: - typeof row.content === "string" - ? JSON.parse(row.content) - : row.content, - })); - }, "getMemories"); - } - - async getGoals(params: { - roomId: UUID; - userId?: UUID | null; - onlyInProgress?: boolean; - count?: number; - }): Promise<Goal[]> { - return this.withDatabase(async () => { - let sql = `SELECT * FROM goals WHERE "roomId" = $1`; - const values: any[] = [params.roomId]; - let paramCount = 1; - - if (params.userId) { - paramCount++; - sql += ` AND "userId" = $${paramCount}`; - values.push(params.userId); - } - - if (params.onlyInProgress) { - sql += " AND status = 'IN_PROGRESS'"; - } - - if (params.count) { - paramCount++; - sql += ` LIMIT $${paramCount}`; - values.push(params.count); - } - - const { rows } = await this.pool.query(sql, values); - return rows.map((row) => ({ - ...row, - objectives: - typeof row.objectives === "string" - ? JSON.parse(row.objectives) - : row.objectives, - })); - }, "getGoals"); - } - - async updateGoal(goal: Goal): Promise<void> { - return this.withDatabase(async () => { - try { - await this.pool.query( - `UPDATE goals SET name = $1, status = $2, objectives = $3 WHERE id = $4`, - [ - goal.name, - goal.status, - JSON.stringify(goal.objectives), - goal.id, - ] - ); - } catch (error) { - logger.error("Failed to update goal:", { - goalId: goal.id, - error: - error instanceof Error ? error.message : String(error), - status: goal.status, - }); - throw error; - } - }, "updateGoal"); - } - - async createGoal(goal: Goal): Promise<void> { - return this.withDatabase(async () => { - await this.pool.query( - `INSERT INTO goals (id, "roomId", "userId", name, status, objectives) - VALUES ($1, $2, $3, $4, $5, $6)`, - [ - goal.id ?? v4(), - goal.roomId, - goal.userId, - goal.name, - goal.status, - JSON.stringify(goal.objectives), - ] - ); - }, "createGoal"); - } - - async removeGoal(goalId: UUID): Promise<void> { - if (!goalId) throw new Error("Goal ID is required"); - - return this.withDatabase(async () => { - try { - const result = await this.pool.query( - "DELETE FROM goals WHERE id = $1 RETURNING id", - [goalId] - ); - - logger.debug("Goal removal attempt:", { - goalId, - removed: result?.rowCount ?? 0 > 0, - }); - } catch (error) { - logger.error("Failed to remove goal:", { - goalId, - error: - error instanceof Error ? error.message : String(error), - }); - throw error; - } - }, "removeGoal"); - } - - async createRoom(roomId?: UUID): Promise<UUID> { - return this.withDatabase(async () => { - const newRoomId = roomId || v4(); - await this.pool.query("INSERT INTO rooms (id) VALUES ($1)", [ - newRoomId, - ]); - return newRoomId as UUID; - }, "createRoom"); - } - - async removeRoom(roomId: UUID): Promise<void> { - if (!roomId) throw new Error("Room ID is required"); - - return this.withDatabase(async () => { - const client = await this.pool.connect(); - try { - await client.query("BEGIN"); - - // First check if room exists - const checkResult = await client.query( - "SELECT id FROM rooms WHERE id = $1", - [roomId] - ); - - if (checkResult.rowCount === 0) { - logger.warn("No room found to remove:", { roomId }); - throw new Error(`Room not found: ${roomId}`); - } - - // Remove related data first (if not using CASCADE) - await client.query('DELETE FROM memories WHERE "roomId" = $1', [ - roomId, - ]); - await client.query( - 'DELETE FROM participants WHERE "roomId" = $1', - [roomId] - ); - await client.query('DELETE FROM goals WHERE "roomId" = $1', [ - roomId, - ]); - - // Finally remove the room - const result = await client.query( - "DELETE FROM rooms WHERE id = $1 RETURNING id", - [roomId] - ); - - await client.query("COMMIT"); - - logger.debug( - "Room and related data removed successfully:", - { - roomId, - removed: result?.rowCount ?? 0 > 0, - } - ); - } catch (error) { - await client.query("ROLLBACK"); - logger.error("Failed to remove room:", { - roomId, - error: - error instanceof Error ? error.message : String(error), - }); - throw error; - } finally { - if (client) client.release(); - } - }, "removeRoom"); - } - - async createRelationship(params: { - userA: UUID; - userB: UUID; - }): Promise<boolean> { - // Input validation - if (!params.userA || !params.userB) { - throw new Error("userA and userB are required"); - } - - return this.withDatabase(async () => { - try { - const relationshipId = v4(); - await this.pool.query( - `INSERT INTO relationships (id, "userA", "userB", "userId") - VALUES ($1, $2, $3, $4) - RETURNING id`, - [relationshipId, params.userA, params.userB, params.userA] - ); - - logger.debug("Relationship created successfully:", { - relationshipId, - userA: params.userA, - userB: params.userB, - }); - - return true; - } catch (error) { - // Check for unique constraint violation or other specific errors - if ((error as { code?: string }).code === "23505") { - // Unique violation - logger.warn("Relationship already exists:", { - userA: params.userA, - userB: params.userB, - error: - error instanceof Error - ? error.message - : String(error), - }); - } else { - logger.error("Failed to create relationship:", { - userA: params.userA, - userB: params.userB, - error: - error instanceof Error - ? error.message - : String(error), - }); - } - return false; - } - }, "createRelationship"); - } - - async getRelationship(params: { - userA: UUID; - userB: UUID; - }): Promise<Relationship | null> { - if (!params.userA || !params.userB) { - throw new Error("userA and userB are required"); - } - - return this.withDatabase(async () => { - try { - const { rows } = await this.pool.query( - `SELECT * FROM relationships - WHERE ("userA" = $1 AND "userB" = $2) - OR ("userA" = $2 AND "userB" = $1)`, - [params.userA, params.userB] - ); - - if (rows.length > 0) { - logger.debug("Relationship found:", { - relationshipId: rows[0].id, - userA: params.userA, - userB: params.userB, - }); - return rows[0]; - } - - logger.debug("No relationship found between users:", { - userA: params.userA, - userB: params.userB, - }); - return null; - } catch (error) { - logger.error("Error fetching relationship:", { - userA: params.userA, - userB: params.userB, - error: - error instanceof Error ? error.message : String(error), - }); - throw error; - } - }, "getRelationship"); - } - - async getRelationships(params: { userId: UUID }): Promise<Relationship[]> { - if (!params.userId) { - throw new Error("userId is required"); - } - - return this.withDatabase(async () => { - try { - const { rows } = await this.pool.query( - `SELECT * FROM relationships - WHERE "userA" = $1 OR "userB" = $1 - ORDER BY "createdAt" DESC`, // Add ordering if you have this field - [params.userId] - ); - - logger.debug("Retrieved relationships:", { - userId: params.userId, - count: rows.length, - }); - - return rows; - } catch (error) { - logger.error("Failed to fetch relationships:", { - userId: params.userId, - error: - error instanceof Error ? error.message : String(error), - }); - throw error; - } - }, "getRelationships"); - } - - async getCachedEmbeddings(opts: { - query_table_name: string; - query_threshold: number; - query_input: string; - query_field_name: string; - query_field_sub_name: string; - query_match_count: number; - }): Promise<{ embedding: number[]; levenshtein_score: number }[]> { - // Input validation - if (!opts.query_table_name) - throw new Error("query_table_name is required"); - if (!opts.query_input) throw new Error("query_input is required"); - if (!opts.query_field_name) - throw new Error("query_field_name is required"); - if (!opts.query_field_sub_name) - throw new Error("query_field_sub_name is required"); - if (opts.query_match_count <= 0) - throw new Error("query_match_count must be positive"); - - return this.withDatabase(async () => { - try { - logger.debug("Fetching cached embeddings:", { - tableName: opts.query_table_name, - fieldName: opts.query_field_name, - subFieldName: opts.query_field_sub_name, - matchCount: opts.query_match_count, - inputLength: opts.query_input.length, - }); - - const sql = ` - WITH content_text AS ( - SELECT - embedding, - COALESCE( - content->$2->>$3, - '' - ) as content_text - FROM memories - WHERE type = $4 - AND content->$2->>$3 IS NOT NULL - ) - SELECT - embedding, - levenshtein( - $1, - content_text - ) as levenshtein_score - FROM content_text - WHERE levenshtein( - $1, - content_text - ) <= $6 -- Add threshold check - ORDER BY levenshtein_score - LIMIT $5 - `; - - const { rows } = await this.pool.query(sql, [ - opts.query_input, - opts.query_field_name, - opts.query_field_sub_name, - opts.query_table_name, - opts.query_match_count, - opts.query_threshold, - ]); - - logger.debug("Retrieved cached embeddings:", { - count: rows.length, - tableName: opts.query_table_name, - matchCount: opts.query_match_count, - }); - - return rows - .map( - ( - row - ): { - embedding: number[]; - levenshtein_score: number; - } | null => { - if (!Array.isArray(row.embedding)) return null; - return { - embedding: row.embedding, - levenshtein_score: Number( - row.levenshtein_score - ), - }; - } - ) - .filter( - ( - row - ): row is { - embedding: number[]; - levenshtein_score: number; - } => row !== null - ); - } catch (error) { - logger.error("Error in getCachedEmbeddings:", { - error: - error instanceof Error ? error.message : String(error), - tableName: opts.query_table_name, - fieldName: opts.query_field_name, - }); - throw error; - } - }, "getCachedEmbeddings"); - } - - async log(params: { - body: { [key: string]: unknown }; - userId: UUID; - roomId: UUID; - type: string; - }): Promise<void> { - // Input validation - if (!params.userId) throw new Error("userId is required"); - if (!params.roomId) throw new Error("roomId is required"); - if (!params.type) throw new Error("type is required"); - if (!params.body || typeof params.body !== "object") { - throw new Error("body must be a valid object"); - } - - return this.withDatabase(async () => { - try { - const logId = v4(); // Generate ID for tracking - await this.pool.query( - `INSERT INTO logs ( - id, - body, - "userId", - "roomId", - type, - "createdAt" - ) VALUES ($1, $2, $3, $4, $5, NOW()) - RETURNING id`, - [ - logId, - JSON.stringify(params.body), // Ensure body is stringified - params.userId, - params.roomId, - params.type, - ] - ); - - logger.debug("Log entry created:", { - logId, - type: params.type, - roomId: params.roomId, - userId: params.userId, - bodyKeys: Object.keys(params.body), - }); - } catch (error) { - logger.error("Failed to create log entry:", { - error: - error instanceof Error ? error.message : String(error), - type: params.type, - roomId: params.roomId, - userId: params.userId, - }); - throw error; - } - }, "log"); - } - - async searchMemoriesByEmbedding( - embedding: number[], - params: { - match_threshold?: number; - count?: number; - agentId?: UUID; - roomId?: UUID; - unique?: boolean; - tableName: string; - } - ): Promise<Memory[]> { - return this.withDatabase(async () => { - logger.debug("Incoming vector:", { - length: embedding.length, - sample: embedding.slice(0, 5), - isArray: Array.isArray(embedding), - allNumbers: embedding.every((n) => typeof n === "number"), - }); - - // Ensure vector is properly formatted - const cleanVector = embedding.map((n) => { - if (!Number.isFinite(n)) return 0; - // Limit precision to avoid floating point issues - return Number(n.toFixed(6)); - }); - - // Format for Postgres pgvector - const vectorStr = `[${cleanVector.join(",")}]`; - - logger.debug("Vector debug:", { - originalLength: embedding.length, - cleanLength: cleanVector.length, - sampleStr: vectorStr.slice(0, 100), - }); - - let sql = ` - SELECT *, - 1 - (embedding <-> $1::vector(${embedding.length})) as similarity - FROM memories - WHERE type = $2 - `; - - const values: any[] = [vectorStr, params.tableName]; - - // Log the query for debugging - logger.debug("Query debug:", { - sql: sql.slice(0, 200), - paramTypes: values.map((v) => typeof v), - vectorStrLength: vectorStr.length, - }); - - let paramCount = 2; - - if (params.unique) { - sql += ` AND "unique" = true`; - } - - if (params.agentId) { - paramCount++; - sql += ` AND "agentId" = $${paramCount}`; - values.push(params.agentId); - } - - if (params.roomId) { - paramCount++; - sql += ` AND "roomId" = $${paramCount}::uuid`; - values.push(params.roomId); - } - - if (params.match_threshold) { - paramCount++; - sql += ` AND 1 - (embedding <-> $1::vector) >= $${paramCount}`; - values.push(params.match_threshold); - } - - sql += ` ORDER BY embedding <-> $1::vector`; - - if (params.count) { - paramCount++; - sql += ` LIMIT $${paramCount}`; - values.push(params.count); - } - - const { rows } = await this.pool.query(sql, values); - return rows.map((row) => ({ - ...row, - content: - typeof row.content === "string" - ? JSON.parse(row.content) - : row.content, - similarity: row.similarity, - })); - }, "searchMemoriesByEmbedding"); - } - - async addParticipant(userId: UUID, roomId: UUID): Promise<boolean> { - return this.withDatabase(async () => { - try { - await this.pool.query( - `INSERT INTO participants (id, "userId", "roomId") - VALUES ($1, $2, $3)`, - [v4(), userId, roomId] - ); - return true; - } catch (error) { - console.log("Error adding participant", error); - return false; - } - }, "addParticpant"); - } - - async removeParticipant(userId: UUID, roomId: UUID): Promise<boolean> { - return this.withDatabase(async () => { - try { - await this.pool.query( - `DELETE FROM participants WHERE "userId" = $1 AND "roomId" = $2`, - [userId, roomId] - ); - return true; - } catch (error) { - console.log("Error removing participant", error); - return false; - } - }, "removeParticipant"); - } - - async updateGoalStatus(params: { - goalId: UUID; - status: GoalStatus; - }): Promise<void> { - return this.withDatabase(async () => { - await this.pool.query( - "UPDATE goals SET status = $1 WHERE id = $2", - [params.status, params.goalId] - ); - }, "updateGoalStatus"); - } - - async removeMemory(memoryId: UUID, tableName: string): Promise<void> { - return this.withDatabase(async () => { - await this.pool.query( - "DELETE FROM memories WHERE type = $1 AND id = $2", - [tableName, memoryId] - ); - }, "removeMemory"); - } - - async removeAllMemories(roomId: UUID, tableName: string): Promise<void> { - return this.withDatabase(async () => { - await this.pool.query( - `DELETE FROM memories WHERE type = $1 AND "roomId" = $2`, - [tableName, roomId] - ); - }, "removeAllMemories"); - } - - async countMemories( - roomId: UUID, - unique = true, - tableName = "" - ): Promise<number> { - if (!tableName) throw new Error("tableName is required"); - - return this.withDatabase(async () => { - let sql = `SELECT COUNT(*) as count FROM memories WHERE type = $1 AND "roomId" = $2`; - if (unique) { - sql += ` AND "unique" = true`; - } - - const { rows } = await this.pool.query(sql, [tableName, roomId]); - return Number.parseInt(rows[0].count); - }, "countMemories"); - } - - async removeAllGoals(roomId: UUID): Promise<void> { - return this.withDatabase(async () => { - await this.pool.query(`DELETE FROM goals WHERE "roomId" = $1`, [ - roomId, - ]); - }, "removeAllGoals"); - } - - async getRoomsForParticipant(userId: UUID): Promise<UUID[]> { - return this.withDatabase(async () => { - const { rows } = await this.pool.query( - `SELECT "roomId" FROM participants WHERE "userId" = $1`, - [userId] - ); - return rows.map((row) => row.roomId); - }, "getRoomsForParticipant"); - } - - async getRoomsForParticipants(userIds: UUID[]): Promise<UUID[]> { - return this.withDatabase(async () => { - const placeholders = userIds.map((_, i) => `$${i + 1}`).join(", "); - const { rows } = await this.pool.query( - `SELECT DISTINCT "roomId" FROM participants WHERE "userId" IN (${placeholders})`, - userIds - ); - return rows.map((row) => row.roomId); - }, "getRoomsForParticipants"); - } - - async getActorDetails(params: { roomId: string }): Promise<Actor[]> { - if (!params.roomId) { - throw new Error("roomId is required"); - } - - return this.withDatabase(async () => { - try { - const sql = ` - SELECT - a.id, - a.name, - a.username, - a."avatarUrl" - FROM participants p - LEFT JOIN accounts a ON p."userId" = a.id - WHERE p."roomId" = $1 - ORDER BY a.name - `; - - const result = await this.pool.query<Actor>(sql, [ - params.roomId, - ]); - - logger.debug("Retrieved actor details:", { - roomId: params.roomId, - actorCount: result.rows.length, - }); - - return result.rows; - } catch (error) { - logger.error("Failed to fetch actor details:", { - roomId: params.roomId, - error: - error instanceof Error ? error.message : String(error), - }); - throw new Error( - `Failed to fetch actor details: ${error instanceof Error ? error.message : String(error)}` - ); - } - }, "getActorDetails"); - } - - async getCache(params: { - key: string; - agentId: UUID; - }): Promise<string | undefined> { - return this.withDatabase(async () => { - try { - const sql = `SELECT "value"::TEXT FROM cache WHERE "key" = $1 AND "agentId" = $2`; - const { rows } = await this.query<{ value: string }>(sql, [ - params.key, - params.agentId, - ]); - return rows[0]?.value ?? undefined; - } catch (error) { - logger.error("Error fetching cache", { - error: - error instanceof Error ? error.message : String(error), - key: params.key, - agentId: params.agentId, - }); - return undefined; - } - }, "getCache"); - } - - async setCache(params: { - key: string; - agentId: UUID; - value: string; - }): Promise<boolean> { - return this.withDatabase(async () => { - try { - const client = await this.pool.connect(); - try { - await client.query("BEGIN"); - await client.query( - `INSERT INTO cache ("key", "agentId", "value", "createdAt") - VALUES ($1, $2, $3, CURRENT_TIMESTAMP) - ON CONFLICT ("key", "agentId") - DO UPDATE SET "value" = EXCLUDED.value, "createdAt" = CURRENT_TIMESTAMP`, - [params.key, params.agentId, params.value] - ); - await client.query("COMMIT"); - return true; - } catch (error) { - await client.query("ROLLBACK"); - logger.error("Error setting cache", { - error: - error instanceof Error - ? error.message - : String(error), - key: params.key, - agentId: params.agentId, - }); - return false; - } finally { - if (client) client.release(); - } - } catch (error) { - logger.error( - "Database connection error in setCache", - error - ); - return false; - } - }, "setCache"); - } - - async deleteCache(params: { - key: string; - agentId: UUID; - }): Promise<boolean> { - return this.withDatabase(async () => { - try { - const client = await this.pool.connect(); - try { - await client.query("BEGIN"); - await client.query( - `DELETE FROM cache WHERE "key" = $1 AND "agentId" = $2`, - [params.key, params.agentId] - ); - await client.query("COMMIT"); - return true; - } catch (error) { - await client.query("ROLLBACK"); - logger.error("Error deleting cache", { - error: - error instanceof Error - ? error.message - : String(error), - key: params.key, - agentId: params.agentId, - }); - return false; - } finally { - client.release(); - } - } catch (error) { - logger.error( - "Database connection error in deleteCache", - error - ); - return false; - } - }, "deleteCache"); - } -} - -export default PostgresDatabaseAdapter; diff --git a/packages/plugin-postgres/tsconfig.json b/packages/plugin-postgres/tsconfig.json deleted file mode 100644 index ea4e73360bf..00000000000 --- a/packages/plugin-postgres/tsconfig.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "extends": "../core/tsconfig.json", - "compilerOptions": { - "outDir": "dist", - "rootDir": "src", - "strict": true - }, - "include": ["src/**/*.ts"], - "exclude": ["node_modules", "dist"] -} diff --git a/packages/plugin-postgres/tsup.config.ts b/packages/plugin-postgres/tsup.config.ts deleted file mode 100644 index 9acebc5ba9a..00000000000 --- a/packages/plugin-postgres/tsup.config.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { defineConfig } from "tsup"; - -export default defineConfig({ - entry: ["src/index.ts"], - outDir: "dist", - sourcemap: true, - clean: true, - format: ["esm"], // Ensure you're targeting CommonJS - external: [ - "dotenv", // Externalize dotenv to prevent bundling - "fs", // Externalize fs to use Node.js built-in module - "path", // Externalize other built-ins if necessary - "@reflink/reflink", - "@node-llama-cpp", - "https", - "http", - "agentkeepalive", - "uuid", - // Add other modules you want to externalize - ], -}); From a46fbc75119a37fb20fca2a86fa8ed278a249725 Mon Sep 17 00:00:00 2001 From: Shaw <shawmakesmagic@gmail.com> Date: Sun, 9 Feb 2025 17:40:34 -0500 Subject: [PATCH 04/12] delete supabase --- packages/plugin-supabase | 1 - 1 file changed, 1 deletion(-) delete mode 160000 packages/plugin-supabase diff --git a/packages/plugin-supabase b/packages/plugin-supabase deleted file mode 160000 index 64e9e181b8b..00000000000 --- a/packages/plugin-supabase +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 64e9e181b8be1e43b3c01830b6415ddf4e6382da From 34c3f7f4dfc6b2b440c5b60dd3c89f4dfed0c683 Mon Sep 17 00:00:00 2001 From: Shaw <shawmakesmagic@gmail.com> Date: Sun, 9 Feb 2025 17:40:42 -0500 Subject: [PATCH 05/12] update drizzle --- .../migrations/20250201002018_init.sql | 88 ++++++------------- packages/plugin-drizzle/src/index.ts | 40 +-------- 2 files changed, 29 insertions(+), 99 deletions(-) diff --git a/packages/plugin-drizzle/drizzle/migrations/20250201002018_init.sql b/packages/plugin-drizzle/drizzle/migrations/20250201002018_init.sql index 7889470c149..45dfe2db39d 100644 --- a/packages/plugin-drizzle/drizzle/migrations/20250201002018_init.sql +++ b/packages/plugin-drizzle/drizzle/migrations/20250201002018_init.sql @@ -16,25 +16,6 @@ CREATE EXTENSION IF NOT EXISTS vector; CREATE EXTENSION IF NOT EXISTS fuzzystrmatch; --- Create a function to determine vector dimension -CREATE OR REPLACE FUNCTION get_embedding_dimension() -RETURNS INTEGER AS $$ -BEGIN - -- Check for OpenAI first - IF current_setting('app.use_openai_embedding', TRUE) = 'true' THEN - RETURN 1536; -- OpenAI dimension - -- Then check for Ollama - ELSIF current_setting('app.use_ollama_embedding', TRUE) = 'true' THEN - RETURN 1024; -- Ollama mxbai-embed-large dimension - -- Then check for GAIANET - ELSIF current_setting('app.use_gaianet_embedding', TRUE) = 'true' THEN - RETURN 768; -- Gaianet nomic-embed dimension - ELSE - RETURN 384; -- BGE/Other embedding dimension - END IF; -END; -$$ LANGUAGE plpgsql; - BEGIN; CREATE TABLE IF NOT EXISTS accounts ( @@ -52,28 +33,21 @@ CREATE TABLE IF NOT EXISTS rooms ( "createdAt" TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP ); -DO $$ -DECLARE - vector_dim INTEGER; -BEGIN - vector_dim := get_embedding_dimension(); - - EXECUTE format(' - CREATE TABLE IF NOT EXISTS memories ( - "id" UUID PRIMARY KEY, - "type" TEXT NOT NULL, - "createdAt" TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP, - "content" JSONB NOT NULL, - "embedding" vector(%s), - "userId" UUID REFERENCES accounts("id"), - "agentId" UUID REFERENCES accounts("id"), - "roomId" UUID REFERENCES rooms("id"), - "unique" BOOLEAN DEFAULT true NOT NULL, - CONSTRAINT fk_room FOREIGN KEY ("roomId") REFERENCES rooms("id") ON DELETE CASCADE, - CONSTRAINT fk_user FOREIGN KEY ("userId") REFERENCES accounts("id") ON DELETE CASCADE, - CONSTRAINT fk_agent FOREIGN KEY ("agentId") REFERENCES accounts("id") ON DELETE CASCADE - )', vector_dim); -END $$; + +CREATE TABLE IF NOT EXISTS memories ( + "id" UUID PRIMARY KEY, + "type" TEXT NOT NULL, + "createdAt" TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP, + "content" JSONB NOT NULL, + "embedding" vector(1536), + "userId" UUID REFERENCES accounts("id"), + "agentId" UUID REFERENCES accounts("id"), + "roomId" UUID REFERENCES rooms("id"), + "unique" BOOLEAN DEFAULT true NOT NULL, + CONSTRAINT fk_room FOREIGN KEY ("roomId") REFERENCES rooms("id") ON DELETE CASCADE, + CONSTRAINT fk_user FOREIGN KEY ("userId") REFERENCES accounts("id") ON DELETE CASCADE, + CONSTRAINT fk_agent FOREIGN KEY ("agentId") REFERENCES accounts("id") ON DELETE CASCADE +) CREATE TABLE IF NOT EXISTS goals ( "id" UUID PRIMARY KEY, @@ -132,26 +106,18 @@ CREATE TABLE IF NOT EXISTS cache ( PRIMARY KEY ("key", "agentId") ); -DO $$ -DECLARE - vector_dim INTEGER; -BEGIN - vector_dim := get_embedding_dimension(); - - EXECUTE format(' - CREATE TABLE IF NOT EXISTS knowledge ( - "id" UUID PRIMARY KEY, - "agentId" UUID REFERENCES accounts("id"), - "content" JSONB NOT NULL, - "embedding" vector(%s), - "createdAt" TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP, - "isMain" BOOLEAN DEFAULT FALSE, - "originalId" UUID REFERENCES knowledge("id"), - "chunkIndex" INTEGER, - "isShared" BOOLEAN DEFAULT FALSE, - CHECK(("isShared" = true AND "agentId" IS NULL) OR ("isShared" = false AND "agentId" IS NOT NULL)) - )', vector_dim); -END $$; +CREATE TABLE IF NOT EXISTS knowledge ( + "id" UUID PRIMARY KEY, + "agentId" UUID REFERENCES accounts("id"), + "content" JSONB NOT NULL, + "embedding" vector(1536), + "createdAt" TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP, + "isMain" BOOLEAN DEFAULT FALSE, + "originalId" UUID REFERENCES knowledge("id"), + "chunkIndex" INTEGER, + "isShared" BOOLEAN DEFAULT FALSE, + CHECK(("isShared" = true AND "agentId" IS NULL) OR ("isShared" = false AND "agentId" IS NOT NULL)) +) -- Indexes CREATE INDEX IF NOT EXISTS idx_memories_embedding ON memories USING hnsw ("embedding" vector_cosine_ops); diff --git a/packages/plugin-drizzle/src/index.ts b/packages/plugin-drizzle/src/index.ts index 3ee7949ec85..ef0134a9e4d 100644 --- a/packages/plugin-drizzle/src/index.ts +++ b/packages/plugin-drizzle/src/index.ts @@ -212,43 +212,6 @@ export class DrizzleDatabaseAdapter } } - private async setEmbeddingProviderSettings(): Promise<void> { - const embeddingConfig = getEmbeddingConfig(); - const providers = ["openai", "ollama", "gaianet"] as const; - - try { - await this.db.transaction(async (tx) => { - for (const provider of providers) { - const query = sql.raw( - `SET app.use_${provider}_embedding = 'false'` - ); - await tx.execute(query); - } - - if ( - Object.values(EmbeddingProvider).includes( - embeddingConfig.provider - ) - ) { - const providerName = embeddingConfig.provider.toLowerCase(); - const query = sql.raw( - `SET app.use_${providerName}_embedding = 'true'` - ); - await tx.execute(query); - } - }); - } catch (error) { - elizaLogger.error( - "Failed to configure database embedding provider settings:", - { - error: - error instanceof Error ? error.message : String(error), - } - ); - throw error; - } - } - private async validateVectorSetup(): Promise<boolean> { try { const vectorExt = await this.db.execute(sql` @@ -271,7 +234,8 @@ export class DrizzleDatabaseAdapter async init(): Promise<void> { try { - await this.setEmbeddingProviderSettings(); + // TODO: Get the null embedding from provider, if no provider is set for embeddings, throw an error + // Store the embedding dimension on this class so we can use elsewhere const { rows } = await this.db.execute(sql` SELECT EXISTS ( From bcf4168210d793a6a36a43ee7b047bb8cc191127 Mon Sep 17 00:00:00 2001 From: Shaw <shawmakesmagic@gmail.com> Date: Sun, 9 Feb 2025 17:42:33 -0500 Subject: [PATCH 06/12] up concurrency --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 84ecd9e0788..f8d53dcabcb 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,7 @@ "build:cli": "turbo run build --filter=./packages/cli && cd packages/cli && bun link", "start": "turbo run start --filter=!./packages/docs", "agent": "turbo run start --filter=@elizaos/agent", - "dev": "turbo run dev --filter=!./packages/docs", + "dev": "turbo run dev --filter=!./packages/docs --concurrency=20", "release": "bun run build && bun format && npx lerna publish --no-private --force-publish", "docker:build": "bash ./scripts/docker.sh build", "docker:run": "bash ./scripts/docker.sh run", From 0934445212074bb9ecde4e1703b8876950f1466c Mon Sep 17 00:00:00 2001 From: Shaw <shawmakesmagic@gmail.com> Date: Sun, 9 Feb 2025 17:45:29 -0500 Subject: [PATCH 07/12] fix target stuff --- packages/plugin-discord/tsconfig.json | 1 + packages/plugin-local-ai/src/index.ts | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/plugin-discord/tsconfig.json b/packages/plugin-discord/tsconfig.json index ba81284cb21..dc4f0b96053 100644 --- a/packages/plugin-discord/tsconfig.json +++ b/packages/plugin-discord/tsconfig.json @@ -3,6 +3,7 @@ "outDir": "dist", "rootDir": "src", "lib": ["ESNext", "dom"], + "target": "ESNext", "module": "Preserve", "moduleResolution": "Bundler", "strict": false, diff --git a/packages/plugin-local-ai/src/index.ts b/packages/plugin-local-ai/src/index.ts index 37feb69a886..7e836d95b11 100644 --- a/packages/plugin-local-ai/src/index.ts +++ b/packages/plugin-local-ai/src/index.ts @@ -209,7 +209,7 @@ export const localAIPlugin: Plugin = { }, // Image description using local Florence model - [ModelClass.IMAGE_DESCRIPTION]: async (imageUrl) => { + [ModelClass.IMAGE_DESCRIPTION]: async (imageUrlw) => { try { // TODO: Add florence From 04c7d284ef4ede7f9ca631b29bc94c41d5ac8628 Mon Sep 17 00:00:00 2001 From: Shaw <shawmakesmagic@gmail.com> Date: Sun, 9 Feb 2025 17:48:33 -0500 Subject: [PATCH 08/12] small plugin fix --- packages/plugin-local-ai/src/index.ts | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/packages/plugin-local-ai/src/index.ts b/packages/plugin-local-ai/src/index.ts index 7e836d95b11..8456221863f 100644 --- a/packages/plugin-local-ai/src/index.ts +++ b/packages/plugin-local-ai/src/index.ts @@ -1,10 +1,9 @@ -import { z } from "zod"; -import type { Plugin } from "@elizaos/core"; -import { ModelClass, logger } from "@elizaos/core"; +import { ModelClass, Plugin, logger } from "@elizaos/core"; import { AutoTokenizer } from "@huggingface/transformers"; -import { FlagEmbedding, EmbeddingModel } from "fastembed"; +import { EmbeddingModel, FlagEmbedding } from "fastembed"; import path from "node:path"; import { fileURLToPath } from "url"; +import { z } from "zod"; // Configuration schema for the local AI plugin const configSchema = z.object({ From 26629f8dae022b86a514b316fb16b3c43ff7c7b8 Mon Sep 17 00:00:00 2001 From: Shaw <shawmakesmagic@gmail.com> Date: Sun, 9 Feb 2025 18:20:04 -0500 Subject: [PATCH 09/12] fix service registry, pdf service from character working --- packages/agent/src/defaultCharacter.ts | 1 + packages/core/src/generation.ts | 10 +++++-- packages/core/src/runtime.ts | 33 +++++++++++----------- packages/plugin-discord/src/attachments.ts | 4 +++ packages/plugin-node/src/index.ts | 26 ++++++++--------- packages/plugin-openai/src/index.ts | 8 +++--- 6 files changed, 43 insertions(+), 39 deletions(-) diff --git a/packages/agent/src/defaultCharacter.ts b/packages/agent/src/defaultCharacter.ts index bdd74c2c005..9f7da7b7266 100644 --- a/packages/agent/src/defaultCharacter.ts +++ b/packages/agent/src/defaultCharacter.ts @@ -7,6 +7,7 @@ export const defaultCharacter: Character = { "@elizaos/plugin-anthropic", "@elizaos/plugin-openai", "@elizaos/plugin-discord", + "@elizaos/plugin-node" ], settings: { secrets: {}, diff --git a/packages/core/src/generation.ts b/packages/core/src/generation.ts index 8a262006e82..3b3cf2164e0 100644 --- a/packages/core/src/generation.ts +++ b/packages/core/src/generation.ts @@ -91,11 +91,15 @@ export async function trimTokens( maxTokens: number, runtime: IAgentRuntime ) { - if (!context) return ""; + if (!context) throw new Error("Trim tokens received a null context"); + + // if context is less than of maxtokens / 5, skip + if (context.length < (maxTokens / 5)) return context; + if (maxTokens <= 0) throw new Error("maxTokens must be positive"); try { - const tokens = await runtime.call(ModelClass.TEXT_TOKENIZER_ENCODE, context); + const tokens = await runtime.call(ModelClass.TEXT_TOKENIZER_ENCODE, { context }); // If already within limits, return unchanged if (tokens.length <= maxTokens) { @@ -106,7 +110,7 @@ export async function trimTokens( const truncatedTokens = tokens.slice(-maxTokens); // Decode back to text - js-tiktoken decode() returns a string directly - return await runtime.call(ModelClass.TEXT_TOKENIZER_DECODE, truncatedTokens); + return await runtime.call(ModelClass.TEXT_TOKENIZER_DECODE, { tokens: truncatedTokens }); } catch (error) { logger.error("Error in trimTokens:", error); // Return truncated string if tokenization fails diff --git a/packages/core/src/runtime.ts b/packages/core/src/runtime.ts index fa8cb5ec429..14d317d5edc 100644 --- a/packages/core/src/runtime.ts +++ b/packages/core/src/runtime.ts @@ -317,6 +317,10 @@ export class AgentRuntime implements IAgentRuntime { for (const manager of (plugin.memoryManagers ?? [])) { this.registerMemoryManager(manager) } + + for(const service of plugin.services){ + this.registerService(service); + } } this.plugins = plugins; @@ -328,7 +332,7 @@ export class AgentRuntime implements IAgentRuntime { async initialize() { // load the character plugins dymamically from string if(this.character.plugins){ - const plugins = await handlePluginImporting(this.character.plugins); + const plugins = await handlePluginImporting(this.character.plugins) as Plugin[]; if (plugins?.length > 0) { for (const plugin of plugins) { if(!plugin) { @@ -348,10 +352,21 @@ export class AgentRuntime implements IAgentRuntime { this.registerHandler(modelClass as ModelClass, handler as (params: any) => Promise<any>); } } + if (plugin.services) { + for(const service of plugin.services){ + this.services.set(service.serviceType, service); + } + } this.plugins.push(plugin); } } } + + if (this.services) { + for(const [_, service] of this.services.entries()) { + await service.initialize(this); + } + } await this.ensureRoomExists(this.agentId); await this.ensureUserExists( @@ -361,22 +376,6 @@ export class AgentRuntime implements IAgentRuntime { ); await this.ensureParticipantExists(this.agentId, this.agentId); - for (const [serviceType, service] of this.services.entries()) { - try { - await service.initialize(this); - this.services.set(serviceType, service); - logger.success( - `${this.character.name}(${this.agentId}) - Service ${serviceType} initialized successfully` - ); - } catch (error) { - logger.error( - `${this.character.name}(${this.agentId}) - Failed to initialize service ${serviceType}:`, - error - ); - throw error; - } - } - if (this.character?.knowledge && this.character.knowledge.length > 0) { // Non-RAG mode: only process string knowledge const stringKnowledge = this.character.knowledge.filter( diff --git a/packages/plugin-discord/src/attachments.ts b/packages/plugin-discord/src/attachments.ts index f7a22505d97..c120da98bfe 100644 --- a/packages/plugin-discord/src/attachments.ts +++ b/packages/plugin-discord/src/attachments.ts @@ -212,8 +212,12 @@ export class AttachmentManager { try { const response = await fetch(attachment.url); const pdfBuffer = await response.arrayBuffer(); + console.log("service") + console.log(this.runtime + .getService<IPdfService>(ServiceType.PDF)) const text = await this.runtime .getService<IPdfService>(ServiceType.PDF) + .getInstance() .convertPdfToText(Buffer.from(pdfBuffer)); const { title, description } = await generateSummary( this.runtime, diff --git a/packages/plugin-node/src/index.ts b/packages/plugin-node/src/index.ts index a181ea73568..da82093505d 100644 --- a/packages/plugin-node/src/index.ts +++ b/packages/plugin-node/src/index.ts @@ -9,18 +9,14 @@ import { VideoService, } from "./services/index.ts"; -export type NodePlugin = ReturnType<typeof createNodePlugin>; - -export function createNodePlugin() { - return { - name: "default", - description: "Default plugin, with basic actions and evaluators", - services: [ - new BrowserService(), - new PdfService(), - new VideoService(), - new AwsS3Service(), - ], - actions: [], - } as const satisfies Plugin; -} +export const nodePlugin: Plugin = { + name: "default", + description: "Default plugin, with basic actions and evaluators", + services: [ + new BrowserService(), + new PdfService(), + new VideoService(), + new AwsS3Service(), + ], + actions: [], +} \ No newline at end of file diff --git a/packages/plugin-openai/src/index.ts b/packages/plugin-openai/src/index.ts index 8ecc1257a75..1b924a32c9e 100644 --- a/packages/plugin-openai/src/index.ts +++ b/packages/plugin-openai/src/index.ts @@ -108,15 +108,15 @@ export const openaiPlugin: Plugin = { }, [ModelClass.TEXT_TOKENIZER_ENCODE]: async ({ context, - modelClass, + modelClass = ModelClass.TEXT_LARGE, }: TokenizeTextParams) => { - return tokenizeText(modelClass ?? ModelClass.TEXT_LARGE, context); + return await tokenizeText(modelClass ?? ModelClass.TEXT_LARGE, context); }, [ModelClass.TEXT_TOKENIZER_DECODE]: async ({ tokens, - modelClass, + modelClass = ModelClass.TEXT_LARGE, }: DetokenizeTextParams) => { - return detokenizeText(modelClass ?? ModelClass.TEXT_LARGE, tokens); + return await detokenizeText(modelClass ?? ModelClass.TEXT_LARGE, tokens); }, [ModelClass.TEXT_SMALL]: async ({ runtime, From 125d3b884cfcbff8c1818b001d43b27f640fcc2c Mon Sep 17 00:00:00 2001 From: Shaw <shawmakesmagic@gmail.com> Date: Sun, 9 Feb 2025 18:52:17 -0500 Subject: [PATCH 10/12] AsyncHandderType --- packages/agent/src/server.ts | 12 ++-- packages/core/src/generation.ts | 62 +++++++++---------- packages/core/src/knowledge.ts | 8 +-- packages/core/src/memory.ts | 8 +-- packages/core/src/runtime.ts | 16 ++--- packages/core/src/types.ts | 14 ++--- packages/plugin-anthropic/src/index.ts | 6 +- .../__tests__/actions/continue.test.ts | 4 +- .../__tests__/evaluators/fact.test.ts | 2 +- .../__tests__/evaluators/goal.test.ts | 2 +- .../plugin-bootstrap/src/actions/continue.ts | 6 +- .../src/actions/followRoom.ts | 4 +- .../plugin-bootstrap/src/actions/muteRoom.ts | 4 +- .../src/actions/unfollowRoom.ts | 4 +- .../src/actions/unmuteRoom.ts | 4 +- .../plugin-bootstrap/src/evaluators/fact.ts | 4 +- .../plugin-bootstrap/src/evaluators/goal.ts | 4 +- .../plugin-bootstrap/src/providers/facts.ts | 4 +- .../src/actions/chat_with_attachments.ts | 6 +- .../src/actions/download_media.ts | 4 +- .../plugin-discord/src/actions/joinvoice.ts | 4 +- .../src/actions/summarize_conversation.ts | 6 +- .../src/actions/transcribe_media.ts | 4 +- packages/plugin-discord/src/attachments.ts | 6 +- packages/plugin-discord/src/index.ts | 2 +- packages/plugin-discord/src/messages.ts | 8 +-- packages/plugin-discord/src/utils.ts | 4 +- packages/plugin-discord/src/voice.ts | 10 +-- packages/plugin-local-ai/src/index.ts | 14 ++--- packages/plugin-node/src/services/browser.ts | 4 +- packages/plugin-node/src/services/video.ts | 4 +- packages/plugin-openai/src/index.ts | 34 +++++----- .../plugin-telegram/src/messageManager.ts | 8 +-- .../plugin-twitter/src/SttTtsSpacesPlugin.ts | 8 +-- packages/plugin-twitter/src/interactions.ts | 8 +-- packages/plugin-twitter/src/post.ts | 12 ++-- packages/plugin-twitter/src/search.ts | 8 +-- packages/plugin-twitter/src/spaces.ts | 6 +- packages/plugin-twitter/src/utils.ts | 8 +-- 39 files changed, 168 insertions(+), 168 deletions(-) diff --git a/packages/agent/src/server.ts b/packages/agent/src/server.ts index 31c014290bc..bb77e1303e9 100644 --- a/packages/agent/src/server.ts +++ b/packages/agent/src/server.ts @@ -6,7 +6,7 @@ import { generateMessageResponse, generateObject, messageCompletionFooter, - ModelClass, + AsyncHandlerType, stringToUuid, type Content, type Media, @@ -166,7 +166,7 @@ export class CharacterServer { return; } - const transcription = await runtime.call(ModelClass.TRANSCRIPTION, { + const transcription = await runtime.call(AsyncHandlerType.TRANSCRIPTION, { file: fs.createReadStream(audioFile.path), model: "whisper-1", }); @@ -276,7 +276,7 @@ export class CharacterServer { const response = await generateMessageResponse({ runtime: runtime, context, - modelClass: ModelClass.TEXT_LARGE, + handlerType: AsyncHandlerType.TEXT_LARGE, }); if (!response) { @@ -487,7 +487,7 @@ export class CharacterServer { const response = await generateObject({ runtime, context, - modelClass: ModelClass.TEXT_SMALL, + handlerType: AsyncHandlerType.TEXT_SMALL, schema: hyperfiOutSchema, }); @@ -790,7 +790,7 @@ export class CharacterServer { const response = await generateMessageResponse({ runtime: runtime, context, - modelClass: ModelClass.TEXT_LARGE, + handlerType: AsyncHandlerType.TEXT_LARGE, }); // save response to memory @@ -823,7 +823,7 @@ export class CharacterServer { // Get the text to convert to speech const textToSpeak = response.text; - const speechResponse = await runtime.call(ModelClass.TRANSCRIPTION, { + const speechResponse = await runtime.call(AsyncHandlerType.TRANSCRIPTION, { text: textToSpeak, runtime, }); diff --git a/packages/core/src/generation.ts b/packages/core/src/generation.ts index 3b3cf2164e0..c8241bfe32b 100644 --- a/packages/core/src/generation.ts +++ b/packages/core/src/generation.ts @@ -5,13 +5,13 @@ import { parseJSONObjectFromText } from "./parsing.ts"; import { type Content, type IAgentRuntime, - ModelClass + AsyncHandlerType } from "./types.ts"; interface GenerateObjectOptions { runtime: IAgentRuntime; context: string; - modelClass: ModelClass; + handlerType: AsyncHandlerType; output?: "object" | "array" | "enum" | "no-schema" | undefined; schema?: ZodSchema; schemaName?: string; @@ -99,7 +99,7 @@ export async function trimTokens( if (maxTokens <= 0) throw new Error("maxTokens must be positive"); try { - const tokens = await runtime.call(ModelClass.TEXT_TOKENIZER_ENCODE, { context }); + const tokens = await runtime.call(AsyncHandlerType.TEXT_TOKENIZER_ENCODE, { context }); // If already within limits, return unchanged if (tokens.length <= maxTokens) { @@ -110,7 +110,7 @@ export async function trimTokens( const truncatedTokens = tokens.slice(-maxTokens); // Decode back to text - js-tiktoken decode() returns a string directly - return await runtime.call(ModelClass.TEXT_TOKENIZER_DECODE, { tokens: truncatedTokens }); + return await runtime.call(AsyncHandlerType.TEXT_TOKENIZER_DECODE, { tokens: truncatedTokens }); } catch (error) { logger.error("Error in trimTokens:", error); // Return truncated string if tokenization fails @@ -122,16 +122,16 @@ export async function trimTokens( export async function generateText({ runtime, context, - modelClass = ModelClass.TEXT_SMALL, + handlerType = AsyncHandlerType.TEXT_SMALL, stopSequences = [], }: { runtime: IAgentRuntime; context: string; - modelClass: ModelClass; + handlerType: AsyncHandlerType; stopSequences?: string[]; customSystemPrompt?: string; }): Promise<string> { - const text = await runtime.call(modelClass, { + const text = await runtime.call(handlerType, { runtime, context, stopSequences, @@ -143,19 +143,19 @@ export async function generateText({ export async function generateTextArray({ runtime, context, - modelClass = ModelClass.TEXT_SMALL, + handlerType = AsyncHandlerType.TEXT_SMALL, stopSequences, }: { runtime: IAgentRuntime; context: string; - modelClass: ModelClass; + handlerType: AsyncHandlerType; stopSequences?: string[]; }): Promise<string[]> { const result = await withRetry(async () => { const result = await generateObject({ runtime, context, - modelClass, + handlerType, schema: z.array(z.string()), stopSequences, }); @@ -169,14 +169,14 @@ export async function generateTextArray({ async function generateEnum<T extends string>({ runtime, context, - modelClass = ModelClass.TEXT_SMALL, + handlerType = AsyncHandlerType.TEXT_SMALL, enumValues, functionName, stopSequences, }: { runtime: IAgentRuntime; context: string; - modelClass: ModelClass; + handlerType: AsyncHandlerType; enumValues: Array<T>; functionName: string; stopSequences?: string[]; @@ -189,7 +189,7 @@ async function generateEnum<T extends string>({ const result = await generateObject({ runtime, context, - modelClass, + handlerType, output: "enum", enum: enumValues, mode: "json", @@ -206,12 +206,12 @@ async function generateEnum<T extends string>({ export async function generateShouldRespond({ runtime, context, - modelClass = ModelClass.TEXT_SMALL, + handlerType = AsyncHandlerType.TEXT_SMALL, stopSequences, }: { runtime: IAgentRuntime; context: string; - modelClass: ModelClass; + handlerType: AsyncHandlerType; stopSequences?: string[]; }): Promise<"RESPOND" | "IGNORE" | "STOP" | null> { const RESPONSE_VALUES = ["RESPOND", "IGNORE", "STOP"] as string[]; @@ -219,7 +219,7 @@ export async function generateShouldRespond({ const result = await generateEnum({ runtime, context, - modelClass, + handlerType, enumValues: RESPONSE_VALUES, functionName: "generateShouldRespond", stopSequences, @@ -231,12 +231,12 @@ export async function generateShouldRespond({ export async function generateTrueOrFalse({ runtime, context = "", - modelClass = ModelClass.TEXT_SMALL, + handlerType = AsyncHandlerType.TEXT_SMALL, stopSequences, }: { runtime: IAgentRuntime; context: string; - modelClass: ModelClass; + handlerType: AsyncHandlerType; stopSequences?: string[]; }): Promise<boolean> { const BOOL_VALUES = ["true", "false"]; @@ -244,7 +244,7 @@ export async function generateTrueOrFalse({ const result = await generateEnum({ runtime, context, - modelClass, + handlerType, enumValues: BOOL_VALUES, functionName: "generateTrueOrFalse", stopSequences, @@ -257,7 +257,7 @@ export async function generateTrueOrFalse({ export const generateObject = async ({ runtime, context, - modelClass = ModelClass.TEXT_SMALL, + handlerType = AsyncHandlerType.TEXT_SMALL, stopSequences, }: GenerateObjectOptions): Promise<any> => { if (!context) { @@ -266,29 +266,29 @@ export const generateObject = async ({ throw new Error(errorMessage); } - const { object } = await runtime.call(modelClass, { + const { object } = await runtime.call(handlerType, { runtime, context, - modelClass, + handlerType, stopSequences, object: true, }); - logger.debug(`Received Object response from ${modelClass} model.`); + logger.debug(`Received Object response from ${handlerType} model.`); return object; }; export async function generateObjectArray({ runtime, context, - modelClass = ModelClass.TEXT_SMALL, + handlerType = AsyncHandlerType.TEXT_SMALL, schema, schemaName, schemaDescription, }: { runtime: IAgentRuntime; context: string; - modelClass: ModelClass; + handlerType: AsyncHandlerType; schema?: ZodSchema; schemaName?: string; schemaDescription?: string; @@ -300,7 +300,7 @@ export async function generateObjectArray({ const result = await generateObject({ runtime, context, - modelClass, + handlerType, output: "array", schema, schemaName, @@ -313,18 +313,18 @@ export async function generateObjectArray({ export async function generateMessageResponse({ runtime, context, - modelClass = ModelClass.TEXT_SMALL, + handlerType = AsyncHandlerType.TEXT_SMALL, stopSequences, }: { runtime: IAgentRuntime; context: string; - modelClass: ModelClass; + handlerType: AsyncHandlerType; stopSequences?: string[]; }): Promise<Content> { logger.debug("Context:", context); return await withRetry(async () => { - const text = await runtime.call(modelClass, { + const text = await runtime.call(handlerType, { runtime, context, stop: stopSequences, @@ -369,7 +369,7 @@ export const generateImage = async ( }> => { return await withRetry( async () => { - const result = await runtime.call(ModelClass.IMAGE, data); + const result = await runtime.call(AsyncHandlerType.IMAGE, data); return { success: true, data: result.images, @@ -391,7 +391,7 @@ export const generateCaption = async ( description: string; }> => { const { imageUrl } = data; - const resp = await runtime.call(ModelClass.IMAGE_DESCRIPTION, imageUrl); + const resp = await runtime.call(AsyncHandlerType.IMAGE_DESCRIPTION, imageUrl); return { title: resp.title.trim(), diff --git a/packages/core/src/knowledge.ts b/packages/core/src/knowledge.ts index e7df1c797e0..bca059e871f 100644 --- a/packages/core/src/knowledge.ts +++ b/packages/core/src/knowledge.ts @@ -1,7 +1,7 @@ import { splitChunks } from "./parsing.ts"; import logger from "./logger.ts"; import type { AgentRuntime } from "./runtime.ts"; -import { type KnowledgeItem, type Memory, ModelClass, type UUID } from "./types.ts"; +import { type KnowledgeItem, type Memory, AsyncHandlerType, type UUID } from "./types.ts"; import { stringToUuid } from "./uuid.ts"; async function get( @@ -31,7 +31,7 @@ async function get( return []; } - const embedding = await runtime.call(ModelClass.TEXT_EMBEDDING, processed); + const embedding = await runtime.call(AsyncHandlerType.TEXT_EMBEDDING, processed); const fragments = await runtime.knowledgeManager.searchMemories( { embedding, @@ -69,7 +69,7 @@ async function set( chunkSize = 512, bleed = 20 ) { - const embedding = await runtime.call(ModelClass.TEXT_EMBEDDING, null); + const embedding = await runtime.call(AsyncHandlerType.TEXT_EMBEDDING, null); await runtime.documentsManager.createMemory({ id: item.id, agentId: runtime.agentId, @@ -84,7 +84,7 @@ async function set( const fragments = await splitChunks(preprocessed, chunkSize, bleed); for (const fragment of fragments) { - const embedding = await runtime.call(ModelClass.TEXT_EMBEDDING, fragment); + const embedding = await runtime.call(AsyncHandlerType.TEXT_EMBEDDING, fragment); await runtime.knowledgeManager.createMemory({ // We namespace the knowledge base uuid to avoid id // collision with the document above. diff --git a/packages/core/src/memory.ts b/packages/core/src/memory.ts index d85fe471917..cd240223793 100644 --- a/packages/core/src/memory.ts +++ b/packages/core/src/memory.ts @@ -1,6 +1,6 @@ import logger from "./logger.ts"; import { - ModelClass, + AsyncHandlerType, type IAgentRuntime, type IMemoryManager, type Memory, @@ -66,11 +66,11 @@ export class MemoryManager implements IMemoryManager { try { // Generate embedding from text content - memory.embedding = await this.runtime.call(ModelClass.TEXT_EMBEDDING, memoryText); + memory.embedding = await this.runtime.call(AsyncHandlerType.TEXT_EMBEDDING, memoryText); } catch (error) { logger.error("Failed to generate embedding:", error); // Fallback to zero vector if embedding fails - memory.embedding = await this.runtime.call(ModelClass.TEXT_EMBEDDING, null); + memory.embedding = await this.runtime.call(AsyncHandlerType.TEXT_EMBEDDING, null); } return memory; @@ -185,7 +185,7 @@ export class MemoryManager implements IMemoryManager { logger.log("Creating Memory", memory.id, memory.content.text); if(!memory.embedding){ - const embedding = await this.runtime.call(ModelClass.TEXT_EMBEDDING, null); + const embedding = await this.runtime.call(AsyncHandlerType.TEXT_EMBEDDING, null); memory.embedding = embedding; } diff --git a/packages/core/src/runtime.ts b/packages/core/src/runtime.ts index 14d317d5edc..02b6ffea624 100644 --- a/packages/core/src/runtime.ts +++ b/packages/core/src/runtime.ts @@ -39,7 +39,7 @@ import { type IMemoryManager, type KnowledgeItem, type Memory, - ModelClass, + AsyncHandlerType, type Plugin, type Provider, type State, @@ -248,7 +248,7 @@ export class AgentRuntime implements IAgentRuntime { private readonly knowledgeRoot: string; private readonly memoryManagerService: MemoryManagerService; - handlers = new Map<ModelClass, ((params: any) => Promise<any>)[]>(); + handlers = new Map<AsyncHandlerType, ((params: any) => Promise<any>)[]>(); constructor(opts: { conversationLength?: number; @@ -348,8 +348,8 @@ export class AgentRuntime implements IAgentRuntime { } } if (plugin.handlers) { - for (const [modelClass, handler] of Object.entries(plugin.handlers)) { - this.registerHandler(modelClass as ModelClass, handler as (params: any) => Promise<any>); + for (const [handlerType, handler] of Object.entries(plugin.handlers)) { + this.registerHandler(handlerType as AsyncHandlerType, handler as (params: any) => Promise<any>); } } if (plugin.services) { @@ -588,7 +588,7 @@ export class AgentRuntime implements IAgentRuntime { const result = await generateText({ runtime: this, context, - modelClass: ModelClass.TEXT_SMALL, + handlerType: AsyncHandlerType.TEXT_SMALL, }); console.log("***** result", result); @@ -1271,14 +1271,14 @@ Text: ${attachment.text} return this.memoryManagerService.getKnowledgeManager(); } - registerHandler(handlerType: ModelClass, handler: (params: any) => Promise<any>) { + registerHandler(handlerType: AsyncHandlerType, handler: (params: any) => Promise<any>) { if (!this.handlers.has(handlerType)) { this.handlers.set(handlerType, []); } this.handlers.get(handlerType)?.push(handler); } - getHandler(handlerType: ModelClass): ((params: any) => Promise<any>) | undefined { + getHandler(handlerType: AsyncHandlerType): ((params: any) => Promise<any>) | undefined { const handlers = this.handlers.get(handlerType); if (!handlers?.length) { return undefined; @@ -1286,7 +1286,7 @@ Text: ${attachment.text} return handlers[0]; } - async call(handlerType: ModelClass, params: any): Promise<any> { + async call(handlerType: AsyncHandlerType, params: any): Promise<any> { const handler = this.getHandler(handlerType); if (!handler) { throw new Error(`No handler found for delegate type: ${handlerType}`); diff --git a/packages/core/src/types.ts b/packages/core/src/types.ts index 9b4af94bf89..b9603f079e7 100644 --- a/packages/core/src/types.ts +++ b/packages/core/src/types.ts @@ -116,7 +116,7 @@ export interface Goal { /** * Model size/type classification */ -export enum ModelClass { +export enum AsyncHandlerType { SMALL = "text_small", // for backwards compatibility MEDIUM = "text_large", // for backwards compatibility LARGE = "text_large", // for backwards compatibility @@ -1023,9 +1023,9 @@ export interface IAgentRuntime { updateRecentMessageState(state: State): Promise<State>; - call<T = any>(modelClass: ModelClass, params: T): Promise<any>; - registerHandler(modelClass: ModelClass, handler: (params: any) => Promise<any>): void; - getHandler(modelClass: ModelClass): ((params: any) => Promise<any>) | undefined; + call<T = any>(handlerType: AsyncHandlerType, params: T): Promise<any>; + registerHandler(handlerType: AsyncHandlerType, handler: (params: any) => Promise<any>): void; + getHandler(handlerType: AsyncHandlerType): ((params: any) => Promise<any>) | undefined; } export enum LoggingLevel { @@ -1061,18 +1061,18 @@ export interface ChunkRow { export type GenerateTextParams = { runtime: IAgentRuntime; context: string; - modelClass: ModelClass; + handlerType: AsyncHandlerType; stopSequences?: string[]; }; export interface TokenizeTextParams { context: string; - modelClass: ModelClass; + handlerType: AsyncHandlerType; } export interface DetokenizeTextParams { tokens: number[]; - modelClass: ModelClass; + handlerType: AsyncHandlerType; } // Inventory diff --git a/packages/plugin-anthropic/src/index.ts b/packages/plugin-anthropic/src/index.ts index a619d7ccf0c..6b7a67499a2 100644 --- a/packages/plugin-anthropic/src/index.ts +++ b/packages/plugin-anthropic/src/index.ts @@ -2,7 +2,7 @@ import { anthropic } from "@ai-sdk/anthropic"; import type { Plugin } from "@elizaos/core"; import { GenerateTextParams, - ModelClass + AsyncHandlerType } from "@elizaos/core"; import { generateText } from "ai"; import { z } from "zod"; @@ -38,7 +38,7 @@ export const anthropicPlugin: Plugin = { } }, handlers: { - [ModelClass.TEXT_SMALL]: async ({ + [AsyncHandlerType.TEXT_SMALL]: async ({ runtime, context, stopSequences = [], @@ -60,7 +60,7 @@ export const anthropicPlugin: Plugin = { }, // TEXT_LARGE generation using Anthropics (e.g. using a "claude-3" model). - [ModelClass.TEXT_LARGE]: async ({ + [AsyncHandlerType.TEXT_LARGE]: async ({ runtime, context, stopSequences = [], diff --git a/packages/plugin-bootstrap/__tests__/actions/continue.test.ts b/packages/plugin-bootstrap/__tests__/actions/continue.test.ts index f94981c8bfd..f8f8d684e9c 100644 --- a/packages/plugin-bootstrap/__tests__/actions/continue.test.ts +++ b/packages/plugin-bootstrap/__tests__/actions/continue.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it, vi, beforeEach } from 'vitest'; import { continueAction } from '../../src/actions/continue'; -import { composeContext, generateMessageResponse, generateTrueOrFalse, ModelClass } from '@elizaos/core'; +import { composeContext, generateMessageResponse, generateTrueOrFalse, AsyncHandlerType } from '@elizaos/core'; vi.mock('@elizaos/core', () => ({ composeContext: vi.fn(), @@ -14,7 +14,7 @@ vi.mock('@elizaos/core', () => ({ }, messageCompletionFooter: '\nResponse format:\n```\n{"content": {"text": string}}\n```', booleanFooter: '\nResponse format: YES or NO', - ModelClass: { + AsyncHandlerType: { SMALL: 'small', LARGE: 'large' } diff --git a/packages/plugin-bootstrap/__tests__/evaluators/fact.test.ts b/packages/plugin-bootstrap/__tests__/evaluators/fact.test.ts index 70c11bf1da7..99d9dab095e 100644 --- a/packages/plugin-bootstrap/__tests__/evaluators/fact.test.ts +++ b/packages/plugin-bootstrap/__tests__/evaluators/fact.test.ts @@ -21,7 +21,7 @@ vi.mock('@elizaos/core', () => ({ } }) })), - ModelClass: { + AsyncHandlerType: { SMALL: 'small' } })); diff --git a/packages/plugin-bootstrap/__tests__/evaluators/goal.test.ts b/packages/plugin-bootstrap/__tests__/evaluators/goal.test.ts index 2b278321f9d..7c39c4e33bd 100644 --- a/packages/plugin-bootstrap/__tests__/evaluators/goal.test.ts +++ b/packages/plugin-bootstrap/__tests__/evaluators/goal.test.ts @@ -7,7 +7,7 @@ vi.mock('@elizaos/core', () => ({ generateText: vi.fn(), getGoals: vi.fn(), parseJsonArrayFromText: vi.fn(), - ModelClass: { + AsyncHandlerType: { SMALL: 'small' } })); diff --git a/packages/plugin-bootstrap/src/actions/continue.ts b/packages/plugin-bootstrap/src/actions/continue.ts index c2635322f37..c3874cff299 100644 --- a/packages/plugin-bootstrap/src/actions/continue.ts +++ b/packages/plugin-bootstrap/src/actions/continue.ts @@ -8,7 +8,7 @@ import { type HandlerCallback, type IAgentRuntime, type Memory, - ModelClass, + AsyncHandlerType, type State, } from "@elizaos/core"; @@ -167,7 +167,7 @@ export const continueAction: Action = { const response = await generateTrueOrFalse({ context: shouldRespondContext, - modelClass: ModelClass.TEXT_SMALL, + handlerType: AsyncHandlerType.TEXT_SMALL, runtime, }); @@ -194,7 +194,7 @@ export const continueAction: Action = { const response = await generateMessageResponse({ runtime, context, - modelClass: ModelClass.TEXT_LARGE, + handlerType: AsyncHandlerType.TEXT_LARGE, }); response.inReplyTo = message.id; diff --git a/packages/plugin-bootstrap/src/actions/followRoom.ts b/packages/plugin-bootstrap/src/actions/followRoom.ts index cdac3ad7226..f67e3eda3a7 100644 --- a/packages/plugin-bootstrap/src/actions/followRoom.ts +++ b/packages/plugin-bootstrap/src/actions/followRoom.ts @@ -6,7 +6,7 @@ import { type ActionExample, type IAgentRuntime, type Memory, - ModelClass, + AsyncHandlerType, type State, } from "@elizaos/core"; @@ -67,7 +67,7 @@ export const followRoomAction: Action = { const response = await generateTrueOrFalse({ runtime, context: shouldFollowContext, - modelClass: ModelClass.TEXT_LARGE, + handlerType: AsyncHandlerType.TEXT_LARGE, }); return response; diff --git a/packages/plugin-bootstrap/src/actions/muteRoom.ts b/packages/plugin-bootstrap/src/actions/muteRoom.ts index d1ae5e5d4f6..04549abebc9 100644 --- a/packages/plugin-bootstrap/src/actions/muteRoom.ts +++ b/packages/plugin-bootstrap/src/actions/muteRoom.ts @@ -6,7 +6,7 @@ import { type ActionExample, type IAgentRuntime, type Memory, - ModelClass, + AsyncHandlerType, type State, } from "@elizaos/core"; @@ -54,7 +54,7 @@ export const muteRoomAction: Action = { const response = await generateTrueOrFalse({ runtime, context: shouldMuteContext, - modelClass: ModelClass.TEXT_LARGE, + handlerType: AsyncHandlerType.TEXT_LARGE, }); return response; diff --git a/packages/plugin-bootstrap/src/actions/unfollowRoom.ts b/packages/plugin-bootstrap/src/actions/unfollowRoom.ts index 0598445aecb..c999a60c382 100644 --- a/packages/plugin-bootstrap/src/actions/unfollowRoom.ts +++ b/packages/plugin-bootstrap/src/actions/unfollowRoom.ts @@ -6,7 +6,7 @@ import { type ActionExample, type IAgentRuntime, type Memory, - ModelClass, + AsyncHandlerType, type State, } from "@elizaos/core"; @@ -52,7 +52,7 @@ export const unfollowRoomAction: Action = { const response = await generateTrueOrFalse({ runtime, context: shouldUnfollowContext, - modelClass: ModelClass.TEXT_LARGE, + handlerType: AsyncHandlerType.TEXT_LARGE, }); return response; diff --git a/packages/plugin-bootstrap/src/actions/unmuteRoom.ts b/packages/plugin-bootstrap/src/actions/unmuteRoom.ts index 308cec076da..b111202e8eb 100644 --- a/packages/plugin-bootstrap/src/actions/unmuteRoom.ts +++ b/packages/plugin-bootstrap/src/actions/unmuteRoom.ts @@ -6,7 +6,7 @@ import { type ActionExample, type IAgentRuntime, type Memory, - ModelClass, + AsyncHandlerType, type State, } from "@elizaos/core"; @@ -52,7 +52,7 @@ export const unmuteRoomAction: Action = { const response = generateTrueOrFalse({ context: shouldUnmuteContext, runtime, - modelClass: ModelClass.TEXT_LARGE, + handlerType: AsyncHandlerType.TEXT_LARGE, }); return response; diff --git a/packages/plugin-bootstrap/src/evaluators/fact.ts b/packages/plugin-bootstrap/src/evaluators/fact.ts index 4ed418569de..0118806749e 100644 --- a/packages/plugin-bootstrap/src/evaluators/fact.ts +++ b/packages/plugin-bootstrap/src/evaluators/fact.ts @@ -6,7 +6,7 @@ import { type ActionExample, type IAgentRuntime, type Memory, - ModelClass, + AsyncHandlerType, type Evaluator, } from "@elizaos/core"; @@ -75,7 +75,7 @@ async function handler(runtime: IAgentRuntime, message: Memory) { const facts = await generateObjectArray({ runtime, context, - modelClass: ModelClass.TEXT_LARGE, + handlerType: AsyncHandlerType.TEXT_LARGE, schema: claimSchema, schemaName: "Fact", schemaDescription: "A fact about the user or the world", diff --git a/packages/plugin-bootstrap/src/evaluators/goal.ts b/packages/plugin-bootstrap/src/evaluators/goal.ts index be7a1f91f11..7ab9c175b78 100644 --- a/packages/plugin-bootstrap/src/evaluators/goal.ts +++ b/packages/plugin-bootstrap/src/evaluators/goal.ts @@ -5,7 +5,7 @@ import { parseJsonArrayFromText } from "@elizaos/core"; import { type IAgentRuntime, type Memory, - ModelClass, + AsyncHandlerType, type Goal, type State, type Evaluator, @@ -64,7 +64,7 @@ async function handler( const response = await generateText({ runtime, context, - modelClass: ModelClass.TEXT_LARGE, + handlerType: AsyncHandlerType.TEXT_LARGE, }); // Parse the JSON response to extract goal updates diff --git a/packages/plugin-bootstrap/src/providers/facts.ts b/packages/plugin-bootstrap/src/providers/facts.ts index cb4d120a477..df2aa133ef4 100644 --- a/packages/plugin-bootstrap/src/providers/facts.ts +++ b/packages/plugin-bootstrap/src/providers/facts.ts @@ -3,7 +3,7 @@ import { formatMessages, IAgentRuntime, MemoryManager, - ModelClass + AsyncHandlerType } from "@elizaos/core"; import { formatFacts } from "../evaluators/fact.ts"; @@ -16,7 +16,7 @@ const factsProvider: Provider = { actors: state?.actorsData, }); - const embedding = await runtime.call(ModelClass.TEXT_EMBEDDING, recentMessages); + const embedding = await runtime.call(AsyncHandlerType.TEXT_EMBEDDING, recentMessages); const memoryManager = new MemoryManager({ runtime, diff --git a/packages/plugin-discord/src/actions/chat_with_attachments.ts b/packages/plugin-discord/src/actions/chat_with_attachments.ts index 899bd495f1c..3855709e387 100644 --- a/packages/plugin-discord/src/actions/chat_with_attachments.ts +++ b/packages/plugin-discord/src/actions/chat_with_attachments.ts @@ -3,7 +3,7 @@ import { type ActionExample, composeContext, type Content, generateText, type HandlerCallback, type IAgentRuntime, type Memory, - ModelClass, parseJSONObjectFromText, type State, trimTokens + AsyncHandlerType, parseJSONObjectFromText, type State, trimTokens } from "@elizaos/core"; import * as fs from "fs"; @@ -49,7 +49,7 @@ const getAttachmentIds = async ( const response = await generateText({ runtime, context, - modelClass: ModelClass.TEXT_SMALL, + handlerType: AsyncHandlerType.TEXT_SMALL, }); console.log("response", response); // try parsing to a json object @@ -197,7 +197,7 @@ const summarizeAction = { const summary = await generateText({ runtime, context, - modelClass: ModelClass.TEXT_SMALL, + handlerType: AsyncHandlerType.TEXT_SMALL, }); currentSummary = currentSummary + "\n" + summary; diff --git a/packages/plugin-discord/src/actions/download_media.ts b/packages/plugin-discord/src/actions/download_media.ts index 68c6b3c9539..28af3057431 100644 --- a/packages/plugin-discord/src/actions/download_media.ts +++ b/packages/plugin-discord/src/actions/download_media.ts @@ -9,7 +9,7 @@ import { type IAgentRuntime, type IVideoService, type Memory, - ModelClass, + AsyncHandlerType, ServiceType, type State, } from "@elizaos/core"; @@ -47,7 +47,7 @@ const getMediaUrl = async ( const response = await generateText({ runtime, context, - modelClass: ModelClass.TEXT_SMALL, + handlerType: AsyncHandlerType.TEXT_SMALL, }); const parsedResponse = parseJSONObjectFromText(response) as { diff --git a/packages/plugin-discord/src/actions/joinvoice.ts b/packages/plugin-discord/src/actions/joinvoice.ts index 7d9d9a699fd..e4521d85cbe 100644 --- a/packages/plugin-discord/src/actions/joinvoice.ts +++ b/packages/plugin-discord/src/actions/joinvoice.ts @@ -9,7 +9,7 @@ import { type Memory, type State, generateText, - ModelClass, + AsyncHandlerType, } from "@elizaos/core"; import { type Channel, @@ -170,7 +170,7 @@ You should only respond with the name of the voice channel or none, no commentar const responseContent = await generateText({ runtime, context, - modelClass: ModelClass.TEXT_SMALL, + handlerType: AsyncHandlerType.TEXT_SMALL, }); runtime.databaseAdapter.log({ diff --git a/packages/plugin-discord/src/actions/summarize_conversation.ts b/packages/plugin-discord/src/actions/summarize_conversation.ts index 7dc086bc0a1..6a13d7ee9c3 100644 --- a/packages/plugin-discord/src/actions/summarize_conversation.ts +++ b/packages/plugin-discord/src/actions/summarize_conversation.ts @@ -10,7 +10,7 @@ import { type IAgentRuntime, type Media, type Memory, - ModelClass, + AsyncHandlerType, type State, } from "@elizaos/core"; export const summarizationTemplate = `# Summarized so far (we are adding to this) @@ -58,7 +58,7 @@ const getDateRange = async ( const response = await generateText({ runtime, context, - modelClass: ModelClass.TEXT_SMALL, + handlerType: AsyncHandlerType.TEXT_SMALL, }); console.log("response", response); // try parsing to a json object @@ -273,7 +273,7 @@ const summarizeAction = { const summary = await generateText({ runtime, context, - modelClass: ModelClass.TEXT_SMALL, + handlerType: AsyncHandlerType.TEXT_SMALL, }); currentSummary = currentSummary + "\n" + summary; diff --git a/packages/plugin-discord/src/actions/transcribe_media.ts b/packages/plugin-discord/src/actions/transcribe_media.ts index 2693367fae8..0f59b53999f 100644 --- a/packages/plugin-discord/src/actions/transcribe_media.ts +++ b/packages/plugin-discord/src/actions/transcribe_media.ts @@ -8,7 +8,7 @@ import { type HandlerCallback, type IAgentRuntime, type Memory, - ModelClass, + AsyncHandlerType, type State, } from "@elizaos/core"; @@ -47,7 +47,7 @@ const getMediaAttachmentId = async ( const response = await generateText({ runtime, context, - modelClass: ModelClass.TEXT_SMALL, + handlerType: AsyncHandlerType.TEXT_SMALL, }); console.log("response", response); diff --git a/packages/plugin-discord/src/attachments.ts b/packages/plugin-discord/src/attachments.ts index c120da98bfe..b0ca201c042 100644 --- a/packages/plugin-discord/src/attachments.ts +++ b/packages/plugin-discord/src/attachments.ts @@ -5,7 +5,7 @@ import { type IPdfService, type IVideoService, type Media, - ModelClass, + AsyncHandlerType, ServiceType, } from "@elizaos/core"; import { type Attachment, Collection } from "discord.js"; @@ -36,7 +36,7 @@ async function generateSummary( const response = await generateText({ runtime, context: prompt, - modelClass: ModelClass.TEXT_SMALL, + handlerType: AsyncHandlerType.TEXT_SMALL, }); const parsedResponse = parseJSONObjectFromText(response); @@ -133,7 +133,7 @@ export class AttachmentManager { throw new Error("Unsupported audio/video format"); } - const transcription = await this.runtime.call(ModelClass.TRANSCRIPTION, audioBuffer); + const transcription = await this.runtime.call(AsyncHandlerType.TRANSCRIPTION, audioBuffer); const { title, description } = await generateSummary( this.runtime, transcription diff --git a/packages/plugin-discord/src/index.ts b/packages/plugin-discord/src/index.ts index f82fae50f33..b4fdcd92a31 100644 --- a/packages/plugin-discord/src/index.ts +++ b/packages/plugin-discord/src/index.ts @@ -1,6 +1,6 @@ import { logger, - ModelClass, + AsyncHandlerType, stringToUuid, type Character, type Client as ElizaClient, diff --git a/packages/plugin-discord/src/messages.ts b/packages/plugin-discord/src/messages.ts index 687f6ea29a6..efe047799be 100644 --- a/packages/plugin-discord/src/messages.ts +++ b/packages/plugin-discord/src/messages.ts @@ -2,7 +2,7 @@ import { composeContext, composeRandomUser, type Content, generateMessageResponse, generateShouldRespond, type HandlerCallback, type IAgentRuntime, type IBrowserService, type IVideoService, logger, type Media, - type Memory, ModelClass, ServiceType, + type Memory, AsyncHandlerType, ServiceType, type State, stringToUuid, type UUID } from "@elizaos/core"; import { @@ -386,7 +386,7 @@ export class MessageManager { // For voice channels, use text-to-speech for the error message const errorMessage = "Sorry, I had a glitch. What was that?"; - const audioStream = await this.runtime.call(ModelClass.TEXT_TO_SPEECH, errorMessage) + const audioStream = await this.runtime.call(AsyncHandlerType.TEXT_TO_SPEECH, errorMessage) await this.voiceManager.playAudioStream(userId, audioStream); } else { @@ -856,7 +856,7 @@ export class MessageManager { const response = await generateShouldRespond({ runtime: this.runtime, context: shouldRespondContext, - modelClass: ModelClass.TEXT_SMALL, + handlerType: AsyncHandlerType.TEXT_SMALL, }); if (response === "RESPOND") { @@ -892,7 +892,7 @@ export class MessageManager { const response = await generateMessageResponse({ runtime: this.runtime, context, - modelClass: ModelClass.TEXT_LARGE, + handlerType: AsyncHandlerType.TEXT_LARGE, }); if (!response) { diff --git a/packages/plugin-discord/src/utils.ts b/packages/plugin-discord/src/utils.ts index 69dac38ff43..df14a9516f5 100644 --- a/packages/plugin-discord/src/utils.ts +++ b/packages/plugin-discord/src/utils.ts @@ -1,6 +1,6 @@ import { type IAgentRuntime, - ModelClass, + AsyncHandlerType, logger, generateText, trimTokens, @@ -66,7 +66,7 @@ export async function generateSummary( const response = await generateText({ runtime, context: prompt, - modelClass: ModelClass.TEXT_SMALL, + handlerType: AsyncHandlerType.TEXT_SMALL, }); const parsedResponse = parseJSONObjectFromText(response); diff --git a/packages/plugin-discord/src/voice.ts b/packages/plugin-discord/src/voice.ts index 4383a471d5c..465b224782f 100644 --- a/packages/plugin-discord/src/voice.ts +++ b/packages/plugin-discord/src/voice.ts @@ -16,7 +16,7 @@ import { type HandlerCallback, type IAgentRuntime, type Memory, - ModelClass, + AsyncHandlerType, type State, type UUID, composeContext, @@ -587,7 +587,7 @@ export class VoiceManager extends EventEmitter { const wavBuffer = await this.convertOpusToWav(inputBuffer); console.log("Starting transcription..."); - const transcriptionText = await this.runtime.call(ModelClass.TRANSCRIPTION, wavBuffer) + const transcriptionText = await this.runtime.call(AsyncHandlerType.TRANSCRIPTION, wavBuffer) function isValidTranscription(text: string): boolean { if (!text || text.includes("[BLANK_AUDIO]")) return false; return true; @@ -733,7 +733,7 @@ export class VoiceManager extends EventEmitter { ); state = await this.runtime.updateRecentMessageState(state); - const responseStream = await this.runtime.call(ModelClass.TEXT_TO_SPEECH, content.text) + const responseStream = await this.runtime.call(AsyncHandlerType.TEXT_TO_SPEECH, content.text) if (responseStream) { await this.playAudioStream( @@ -834,7 +834,7 @@ export class VoiceManager extends EventEmitter { const response = await generateShouldRespond({ runtime: this.runtime, context: shouldRespondContext, - modelClass: ModelClass.TEXT_SMALL, + handlerType: AsyncHandlerType.TEXT_SMALL, }); if (response === "RESPOND") { @@ -862,7 +862,7 @@ export class VoiceManager extends EventEmitter { const response = await generateMessageResponse({ runtime: this.runtime, context, - modelClass: ModelClass.TEXT_SMALL, + handlerType: AsyncHandlerType.TEXT_SMALL, }); response.source = "discord"; diff --git a/packages/plugin-local-ai/src/index.ts b/packages/plugin-local-ai/src/index.ts index 8456221863f..280d4c2beb3 100644 --- a/packages/plugin-local-ai/src/index.ts +++ b/packages/plugin-local-ai/src/index.ts @@ -1,4 +1,4 @@ -import { ModelClass, Plugin, logger } from "@elizaos/core"; +import { AsyncHandlerType, Plugin, logger } from "@elizaos/core"; import { AutoTokenizer } from "@huggingface/transformers"; import { EmbeddingModel, FlagEmbedding } from "fastembed"; import path from "node:path"; @@ -136,7 +136,7 @@ export const localAIPlugin: Plugin = { handlers: { // Text generation for small tasks - [ModelClass.TEXT_SMALL]: async ({ + [AsyncHandlerType.TEXT_SMALL]: async ({ context, stopSequences = [], runtime, @@ -155,7 +155,7 @@ export const localAIPlugin: Plugin = { }, // Text generation for larger tasks - [ModelClass.TEXT_LARGE]: async ({ + [AsyncHandlerType.TEXT_LARGE]: async ({ context, stopSequences = [], runtime, @@ -172,7 +172,7 @@ export const localAIPlugin: Plugin = { }, // Text embedding using FastEmbed - [ModelClass.TEXT_EMBEDDING]: async ({ text }) => { + [AsyncHandlerType.TEXT_EMBEDDING]: async ({ text }) => { try { return await localAIManager.generateEmbedding(text); } catch (error) { @@ -182,7 +182,7 @@ export const localAIPlugin: Plugin = { }, // Text tokenization using AutoTokenizer - [ModelClass.TEXT_TOKENIZER_ENCODE]: async ({ text }) => { + [AsyncHandlerType.TEXT_TOKENIZER_ENCODE]: async ({ text }) => { try { if (!localAIManager.tokenizer) { throw new Error("Tokenizer not initialized"); @@ -195,7 +195,7 @@ export const localAIPlugin: Plugin = { }, // Text detokenization using AutoTokenizer - [ModelClass.TEXT_TOKENIZER_DECODE]: async ({ tokens }) => { + [AsyncHandlerType.TEXT_TOKENIZER_DECODE]: async ({ tokens }) => { try { if (!localAIManager.tokenizer) { throw new Error("Tokenizer not initialized"); @@ -208,7 +208,7 @@ export const localAIPlugin: Plugin = { }, // Image description using local Florence model - [ModelClass.IMAGE_DESCRIPTION]: async (imageUrlw) => { + [AsyncHandlerType.IMAGE_DESCRIPTION]: async (imageUrlw) => { try { // TODO: Add florence diff --git a/packages/plugin-node/src/services/browser.ts b/packages/plugin-node/src/services/browser.ts index 407585fe98a..dfdc9681dc4 100644 --- a/packages/plugin-node/src/services/browser.ts +++ b/packages/plugin-node/src/services/browser.ts @@ -2,7 +2,7 @@ import { generateText, type IBrowserService, trimTokens } from "@elizaos/core"; import { parseJSONObjectFromText } from "@elizaos/core"; import { Service } from "@elizaos/core"; import { settings } from "@elizaos/core"; -import { type IAgentRuntime, ModelClass, ServiceType } from "@elizaos/core"; +import { type IAgentRuntime, AsyncHandlerType, ServiceType } from "@elizaos/core"; import { stringToUuid } from "@elizaos/core"; import { PlaywrightBlocker } from "@cliqz/adblocker-playwright"; import CaptchaSolver from "capsolver-npm"; @@ -38,7 +38,7 @@ async function generateSummary( const response = await generateText({ runtime, context: prompt, - modelClass: ModelClass.SMALL, + handlerType: AsyncHandlerType.TEXT_SMALL, }); const parsedResponse = parseJSONObjectFromText(response); diff --git a/packages/plugin-node/src/services/video.ts b/packages/plugin-node/src/services/video.ts index c4879b9ed1c..f8d8e7bad36 100644 --- a/packages/plugin-node/src/services/video.ts +++ b/packages/plugin-node/src/services/video.ts @@ -6,7 +6,7 @@ import { ServiceType, stringToUuid, logger, - ModelClass, + AsyncHandlerType, } from "@elizaos/core"; import ffmpeg from "fluent-ffmpeg"; import fs from "fs"; @@ -339,7 +339,7 @@ export class VideoService extends Service implements IVideoService { logger.log("Starting transcription..."); const startTime = Date.now(); - const transcript = await runtime.call(ModelClass.TRANSCRIPTION, audioBuffer); + const transcript = await runtime.call(AsyncHandlerType.TRANSCRIPTION, audioBuffer); const endTime = Date.now(); logger.log( diff --git a/packages/plugin-openai/src/index.ts b/packages/plugin-openai/src/index.ts index 1b924a32c9e..d1a5ef227f8 100644 --- a/packages/plugin-openai/src/index.ts +++ b/packages/plugin-openai/src/index.ts @@ -3,16 +3,16 @@ import type { Plugin } from "@elizaos/core"; import { DetokenizeTextParams, GenerateTextParams, - ModelClass, + AsyncHandlerType, TokenizeTextParams, } from "@elizaos/core"; import { generateText as aiGenerateText } from "ai"; import { encodingForModel, type TiktokenModel } from "js-tiktoken"; import { z } from "zod"; -async function tokenizeText(model: ModelClass, context: string) { +async function tokenizeText(model: AsyncHandlerType, context: string) { const modelName = - model === ModelClass.TEXT_SMALL + model === AsyncHandlerType.TEXT_SMALL ? process.env.OPENAI_SMALL_MODEL ?? process.env.SMALL_MODEL ?? "gpt-4o-mini" @@ -22,9 +22,9 @@ async function tokenizeText(model: ModelClass, context: string) { return tokens; } -async function detokenizeText(model: ModelClass, tokens: number[]) { +async function detokenizeText(model: AsyncHandlerType, tokens: number[]) { const modelName = - model === ModelClass.TEXT_SMALL + model === AsyncHandlerType.TEXT_SMALL ? process.env.OPENAI_SMALL_MODEL ?? process.env.SMALL_MODEL ?? "gpt-4o-mini" @@ -78,7 +78,7 @@ export const openaiPlugin: Plugin = { } }, handlers: { - [ModelClass.TEXT_EMBEDDING]: async (text: string | null) => { + [AsyncHandlerType.TEXT_EMBEDDING]: async (text: string | null) => { if (!text) { // Return zero vector of appropriate length for model return new Array(1536).fill(0); @@ -106,19 +106,19 @@ export const openaiPlugin: Plugin = { const data = await response.json() as { data: [{ embedding: number[] }] }; return data.data[0].embedding; }, - [ModelClass.TEXT_TOKENIZER_ENCODE]: async ({ + [AsyncHandlerType.TEXT_TOKENIZER_ENCODE]: async ({ context, - modelClass = ModelClass.TEXT_LARGE, + handlerType = AsyncHandlerType.TEXT_LARGE, }: TokenizeTextParams) => { - return await tokenizeText(modelClass ?? ModelClass.TEXT_LARGE, context); + return await tokenizeText(handlerType ?? AsyncHandlerType.TEXT_LARGE, context); }, - [ModelClass.TEXT_TOKENIZER_DECODE]: async ({ + [AsyncHandlerType.TEXT_TOKENIZER_DECODE]: async ({ tokens, - modelClass = ModelClass.TEXT_LARGE, + handlerType = AsyncHandlerType.TEXT_LARGE, }: DetokenizeTextParams) => { - return await detokenizeText(modelClass ?? ModelClass.TEXT_LARGE, tokens); + return await detokenizeText(handlerType ?? AsyncHandlerType.TEXT_LARGE, tokens); }, - [ModelClass.TEXT_SMALL]: async ({ + [AsyncHandlerType.TEXT_SMALL]: async ({ runtime, context, stopSequences = [], @@ -154,7 +154,7 @@ export const openaiPlugin: Plugin = { return openaiResponse; }, - [ModelClass.TEXT_LARGE]: async ({ + [AsyncHandlerType.TEXT_LARGE]: async ({ runtime, context, stopSequences = [], @@ -192,7 +192,7 @@ export const openaiPlugin: Plugin = { return openaiResponse; }, - [ModelClass.IMAGE]: async (params: { + [AsyncHandlerType.IMAGE]: async (params: { prompt: string; n?: number; size?: string; @@ -218,7 +218,7 @@ export const openaiPlugin: Plugin = { const typedData = data as { data: { url: string }[] }; return typedData.data; }, - [ModelClass.IMAGE_DESCRIPTION]: async (imageUrl: string) => { + [AsyncHandlerType.IMAGE_DESCRIPTION]: async (imageUrl: string) => { console.log("IMAGE_DESCRIPTION") const baseURL = process.env.OPENAI_BASE_URL ?? "https://api.openai.com/v1"; @@ -264,7 +264,7 @@ export const openaiPlugin: Plugin = { description: descriptionMatch[1] }; }, - [ModelClass.TRANSCRIPTION]: async (params: { + [AsyncHandlerType.TRANSCRIPTION]: async (params: { audioFile: any; language?: string; }) => { diff --git a/packages/plugin-telegram/src/messageManager.ts b/packages/plugin-telegram/src/messageManager.ts index f3b33b64fc6..fc1df591c34 100644 --- a/packages/plugin-telegram/src/messageManager.ts +++ b/packages/plugin-telegram/src/messageManager.ts @@ -9,7 +9,7 @@ import { type IAgentRuntime, type Media, type Memory, - ModelClass, + AsyncHandlerType, type State, stringToUuid, type UUID, @@ -453,7 +453,7 @@ export class MessageManager { if (imageUrl) { const { title, description } = - await this.runtime.call(ModelClass.IMAGE_DESCRIPTION, imageUrl) + await this.runtime.call(AsyncHandlerType.IMAGE_DESCRIPTION, imageUrl) return { description: `[Image: ${title}\n${description}]` }; } } catch (error) { @@ -505,7 +505,7 @@ export class MessageManager { const response = await generateShouldRespond({ runtime: this.runtime, context: shouldRespondContext, - modelClass: ModelClass.SMALL, + handlerType: AsyncHandlerType.TEXT_SMALL, }); return response === "RESPOND"; @@ -669,7 +669,7 @@ export class MessageManager { const response = await generateMessageResponse({ runtime: this.runtime, context, - modelClass: ModelClass.LARGE, + handlerType: AsyncHandlerType.TEXT_LARGE, }); if (!response) { diff --git a/packages/plugin-twitter/src/SttTtsSpacesPlugin.ts b/packages/plugin-twitter/src/SttTtsSpacesPlugin.ts index 8e26359bb42..5b8ad7f2589 100644 --- a/packages/plugin-twitter/src/SttTtsSpacesPlugin.ts +++ b/packages/plugin-twitter/src/SttTtsSpacesPlugin.ts @@ -11,7 +11,7 @@ import { logger, generateMessageResponse, generateShouldRespond, - ModelClass, + AsyncHandlerType, stringToUuid } from "@elizaos/core"; import type { @@ -288,7 +288,7 @@ export class SttTtsPlugin implements Plugin { const wavBuffer = await this.convertPcmToWavInMemory(merged, 48000); // Whisper STT - const sttText = await this.runtime.call(ModelClass.TRANSCRIPTION, wavBuffer); + const sttText = await this.runtime.call(AsyncHandlerType.TRANSCRIPTION, wavBuffer); logger.log( `[SttTtsPlugin] Transcription result: "${sttText}"`, @@ -487,7 +487,7 @@ export class SttTtsPlugin implements Plugin { const response = await generateMessageResponse({ runtime: this.runtime, context, - modelClass: ModelClass.SMALL, + handlerType: AsyncHandlerType.TEXT_SMALL, }); response.source = "discord"; @@ -585,7 +585,7 @@ export class SttTtsPlugin implements Plugin { const response = await generateShouldRespond({ runtime: this.runtime, context: shouldRespondContext, - modelClass: ModelClass.SMALL, + handlerType: AsyncHandlerType.TEXT_SMALL, }); if (response === "RESPOND") { diff --git a/packages/plugin-twitter/src/interactions.ts b/packages/plugin-twitter/src/interactions.ts index 2c287a1e339..82e2100cf5b 100644 --- a/packages/plugin-twitter/src/interactions.ts +++ b/packages/plugin-twitter/src/interactions.ts @@ -9,7 +9,7 @@ import { type HandlerCallback, type IAgentRuntime, type Memory, - ModelClass, + AsyncHandlerType, type State, stringToUuid, logger, @@ -348,7 +348,7 @@ export class TwitterInteractionClient { const imageDescriptionsArray = []; try{ for (const photo of tweet.photos) { - const description = await this.runtime.call(ModelClass.IMAGE_DESCRIPTION, photo.url) + const description = await this.runtime.call(AsyncHandlerType.IMAGE_DESCRIPTION, photo.url) imageDescriptionsArray.push(description); } } catch (error) { @@ -414,7 +414,7 @@ export class TwitterInteractionClient { const shouldRespond = await generateShouldRespond({ runtime: this.runtime, context: shouldRespondContext, - modelClass: ModelClass.MEDIUM, + handlerType: AsyncHandlerType.MEDIUM, }); // Promise<"RESPOND" | "IGNORE" | "STOP" | null> { @@ -453,7 +453,7 @@ export class TwitterInteractionClient { const response = await generateMessageResponse({ runtime: this.runtime, context, - modelClass: ModelClass.LARGE, + handlerType: AsyncHandlerType.TEXT_LARGE, }); const removeQuotes = (str: string) => diff --git a/packages/plugin-twitter/src/post.ts b/packages/plugin-twitter/src/post.ts index 3386b3085b2..74199a106cc 100644 --- a/packages/plugin-twitter/src/post.ts +++ b/packages/plugin-twitter/src/post.ts @@ -6,7 +6,7 @@ import { generateText, type IAgentRuntime, logger, - ModelClass, + AsyncHandlerType, parseJSONObjectFromText, postActionResponseFooter, stringToUuid, @@ -449,7 +449,7 @@ export class TwitterPostClient { const response = await generateText({ runtime: this.runtime, context, - modelClass: ModelClass.SMALL, + handlerType: AsyncHandlerType.TEXT_SMALL, }); const rawTweetContent = cleanJsonResponse(response); @@ -556,7 +556,7 @@ export class TwitterPostClient { const response = await generateText({ runtime: this.runtime, context: options?.context || context, - modelClass: ModelClass.SMALL, + handlerType: AsyncHandlerType.TEXT_SMALL, }); logger.log("generate tweet content response:\n" + response); @@ -679,7 +679,7 @@ export class TwitterPostClient { const actionResponse = await generateTweetActions({ runtime: this.runtime, context: actionContext, - modelClass: ModelClass.SMALL, + handlerType: AsyncHandlerType.TEXT_SMALL, }); if (!actionResponse) { @@ -832,7 +832,7 @@ export class TwitterPostClient { "Processing images in tweet for context" ); for (const photo of tweet.photos) { - const description = await this.runtime.call(ModelClass.IMAGE_DESCRIPTION, photo.url); + const description = await this.runtime.call(AsyncHandlerType.IMAGE_DESCRIPTION, photo.url); imageDescriptions.push(description); } } @@ -1040,7 +1040,7 @@ export class TwitterPostClient { if (tweet.photos?.length > 0) { logger.log("Processing images in tweet for context"); for (const photo of tweet.photos) { - const description = await this.runtime.call(ModelClass.IMAGE_DESCRIPTION, photo.url) + const description = await this.runtime.call(AsyncHandlerType.IMAGE_DESCRIPTION, photo.url) imageDescriptions.push(description); } } diff --git a/packages/plugin-twitter/src/search.ts b/packages/plugin-twitter/src/search.ts index 5cf170830ab..7bc43f0d44a 100644 --- a/packages/plugin-twitter/src/search.ts +++ b/packages/plugin-twitter/src/search.ts @@ -1,6 +1,6 @@ import { composeContext, type Content, generateMessageResponse, generateText, type HandlerCallback, - type IAgentRuntime, logger, messageCompletionFooter, ModelClass, type State, stringToUuid + type IAgentRuntime, logger, messageCompletionFooter, AsyncHandlerType, type State, stringToUuid } from "@elizaos/core"; import type { ClientBase } from "./base.ts"; import { SearchMode } from "./client"; @@ -135,7 +135,7 @@ export class TwitterSearchClient { const mostInterestingTweetResponse = await generateText({ runtime: this.runtime, context: prompt, - modelClass: ModelClass.SMALL, + handlerType: AsyncHandlerType.TEXT_SMALL, }); const tweetId = mostInterestingTweetResponse.trim(); @@ -219,7 +219,7 @@ export class TwitterSearchClient { // Generate image descriptions using GPT-4 vision API const imageDescriptions = []; for (const photo of selectedTweet.photos) { - const description = await this.runtime.call(ModelClass.IMAGE_DESCRIPTION, photo.url) + const description = await this.runtime.call(AsyncHandlerType.IMAGE_DESCRIPTION, photo.url) imageDescriptions.push(description); } @@ -249,7 +249,7 @@ export class TwitterSearchClient { const responseContent = await generateMessageResponse({ runtime: this.runtime, context, - modelClass: ModelClass.LARGE, + handlerType: AsyncHandlerType.TEXT_LARGE, }); responseContent.inReplyTo = message.id; diff --git a/packages/plugin-twitter/src/spaces.ts b/packages/plugin-twitter/src/spaces.ts index dc3a6a41765..073e82a06b5 100644 --- a/packages/plugin-twitter/src/spaces.ts +++ b/packages/plugin-twitter/src/spaces.ts @@ -3,7 +3,7 @@ import { type IAgentRuntime, composeContext, generateText, - ModelClass, + AsyncHandlerType, type TwitterSpaceDecisionOptions, State, } from "@elizaos/core"; @@ -47,7 +47,7 @@ Only return the text, no additional formatting. const output = await generateText({ runtime, context, - modelClass: ModelClass.SMALL, + handlerType: AsyncHandlerType.TEXT_SMALL, }); return output.trim(); } catch (err) { @@ -99,7 +99,7 @@ Example: const response = await generateText({ runtime, context, - modelClass: ModelClass.SMALL, + handlerType: AsyncHandlerType.TEXT_SMALL, }); const topics = response .split(",") diff --git a/packages/plugin-twitter/src/utils.ts b/packages/plugin-twitter/src/utils.ts index d35f5ba4457..dcd35fab2e0 100644 --- a/packages/plugin-twitter/src/utils.ts +++ b/packages/plugin-twitter/src/utils.ts @@ -1,5 +1,5 @@ import type { Tweet } from "./client"; -import type { Content, IAgentRuntime, Memory, ModelClass, UUID } from "@elizaos/core"; +import type { Content, IAgentRuntime, Memory, AsyncHandlerType, UUID } from "@elizaos/core"; import { generateText, stringToUuid } from "@elizaos/core"; import type { ClientBase } from "./base"; import { logger } from "@elizaos/core"; @@ -497,11 +497,11 @@ export const parseActionResponseFromText = ( export async function generateTweetActions({ runtime, context, - modelClass, + handlerType, }: { runtime: IAgentRuntime; context: string; - modelClass: ModelClass; + handlerType: AsyncHandlerType; }): Promise<ActionResponse | null> { let retryDelay = 1000; while (true) { @@ -509,7 +509,7 @@ export async function generateTweetActions({ const response = await generateText({ runtime, context, - modelClass, + handlerType, }); logger.debug( "Received response from generateText for tweet actions:", From 97e69f806f12d11e78de5723de0cb8946573cf99 Mon Sep 17 00:00:00 2001 From: Shaw <shawmakesmagic@gmail.com> Date: Sun, 9 Feb 2025 20:24:16 -0500 Subject: [PATCH 11/12] video handling and transcription working --- bun.lockb | Bin 1347304 -> 1347304 bytes packages/agent/src/api.ts | 14 +- packages/agent/src/server.ts | 10 +- packages/core/src/types.ts | 4 +- packages/plugin-discord/src/index.ts | 18 - packages/plugin-discord/src/messages.ts | 234 ------------ packages/plugin-node/package.json | 2 +- packages/plugin-node/src/services/video.ts | 72 +++- packages/plugin-openai/src/index.ts | 11 +- .../plugin-telegram/src/messageManager.ts | 348 +----------------- 10 files changed, 84 insertions(+), 629 deletions(-) diff --git a/bun.lockb b/bun.lockb index 0f0943c519e860333fda7550d616a6b4c1bdfb6f..617ff10fb0aec38ff03efa0c584fff269ce99115 100755 GIT binary patch delta 2662 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 delta 2644 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 SkFSRGEc1zzr|k79y8kzJ<C)3; diff --git a/packages/agent/src/api.ts b/packages/agent/src/api.ts index 5b63dcbdf7e..b425b93792b 100644 --- a/packages/agent/src/api.ts +++ b/packages/agent/src/api.ts @@ -1,11 +1,11 @@ import { - type AgentRuntime, type Character, - logger, getEnvVariable, + IAgentRuntime, + logger, type UUID, validateCharacterConfig, - validateUuid, + validateUuid } from "@elizaos/core"; import bodyParser from "body-parser"; import cors from "cors"; @@ -46,7 +46,7 @@ function validateUUIDParams( } export function createApiRouter( - agents: Map<string, AgentRuntime>, + agents: Map<string, IAgentRuntime>, directClient: CharacterServer ): express.Router { const router = express.Router(); @@ -117,7 +117,7 @@ export function createApiRouter( }; if (!agentId) return; - const agent: AgentRuntime = agents.get(agentId); + const agent: IAgentRuntime = agents.get(agentId); if (agent) { agent.stop(); @@ -134,7 +134,7 @@ export function createApiRouter( }; if (!agentId) return; - let agent: AgentRuntime = agents.get(agentId); + let agent: IAgentRuntime = agents.get(agentId); // update character if (agent) { @@ -338,7 +338,7 @@ export function createApiRouter( router.post("/agents/:agentId/stop", async (req, res) => { const agentId = req.params.agentId; console.log("agentId", agentId); - const agent: AgentRuntime = agents.get(agentId); + const agent: IAgentRuntime = agents.get(agentId); // update character if (agent) { diff --git a/packages/agent/src/server.ts b/packages/agent/src/server.ts index bb77e1303e9..25339becad8 100644 --- a/packages/agent/src/server.ts +++ b/packages/agent/src/server.ts @@ -166,10 +166,7 @@ export class CharacterServer { return; } - const transcription = await runtime.call(AsyncHandlerType.TRANSCRIPTION, { - file: fs.createReadStream(audioFile.path), - model: "whisper-1", - }); + const transcription = await runtime.call(AsyncHandlerType.TRANSCRIPTION, fs.createReadStream(audioFile.path)); res.json(transcription); } @@ -823,10 +820,7 @@ export class CharacterServer { // Get the text to convert to speech const textToSpeak = response.text; - const speechResponse = await runtime.call(AsyncHandlerType.TRANSCRIPTION, { - text: textToSpeak, - runtime, - }); + const speechResponse = await runtime.call(AsyncHandlerType.TEXT_TO_SPEECH, textToSpeak); if (!speechResponse.ok) { throw new Error( diff --git a/packages/core/src/types.ts b/packages/core/src/types.ts index b9603f079e7..9b7a20fbeb0 100644 --- a/packages/core/src/types.ts +++ b/packages/core/src/types.ts @@ -1,5 +1,3 @@ -import type { Readable } from "stream"; - /** * Represents a UUID string in the format "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" */ @@ -1026,6 +1024,8 @@ export interface IAgentRuntime { call<T = any>(handlerType: AsyncHandlerType, params: T): Promise<any>; registerHandler(handlerType: AsyncHandlerType, handler: (params: any) => Promise<any>): void; getHandler(handlerType: AsyncHandlerType): ((params: any) => Promise<any>) | undefined; + + stop(): Promise<void>; } export enum LoggingLevel { diff --git a/packages/plugin-discord/src/index.ts b/packages/plugin-discord/src/index.ts index b4fdcd92a31..45c911a6a7c 100644 --- a/packages/plugin-discord/src/index.ts +++ b/packages/plugin-discord/src/index.ts @@ -18,15 +18,7 @@ import { type User, } from "discord.js"; import { EventEmitter } from "events"; -import chat_with_attachments from "./actions/chat_with_attachments.ts"; -import download_media from "./actions/download_media.ts"; -import joinvoice from "./actions/joinvoice.ts"; -import leavevoice from "./actions/leavevoice.ts"; -import summarize from "./actions/summarize_conversation.ts"; -import transcribe_media from "./actions/transcribe_media.ts"; import { MessageManager } from "./messages.ts"; -import channelStateProvider from "./providers/channelState.ts"; -import voiceStateProvider from "./providers/voiceState.ts"; import { VoiceManager } from "./voice.ts"; import { IDiscordClient } from "./types.ts"; @@ -69,16 +61,6 @@ export class DiscordClient extends EventEmitter implements IDiscordClient { this.client.login(this.apiToken); this.setupEventListeners(); - - this.runtime.registerAction(joinvoice); - this.runtime.registerAction(leavevoice); - this.runtime.registerAction(summarize); - this.runtime.registerAction(chat_with_attachments); - this.runtime.registerAction(transcribe_media); - this.runtime.registerAction(download_media); - - this.runtime.providers.push(channelStateProvider); - this.runtime.providers.push(voiceStateProvider); } private setupEventListeners() { diff --git a/packages/plugin-discord/src/messages.ts b/packages/plugin-discord/src/messages.ts index efe047799be..a356e2b0db1 100644 --- a/packages/plugin-discord/src/messages.ts +++ b/packages/plugin-discord/src/messages.ts @@ -35,16 +35,6 @@ interface MessageContext { timestamp: number; } -interface AutoPostConfig { - enabled: boolean; - monitorTime: number; - inactivityThreshold: number; // milliseconds - mainChannelId: string; - announcementChannelIds: string[]; - lastAutoPost?: number; - minTimeBetweenPosts?: number; // minimum time between auto posts -} - export type InterestChannels = { [key: string]: { currentHandler: string | undefined; @@ -63,7 +53,6 @@ export class MessageManager { private discordClient: any; private voiceManager: VoiceManager; //Auto post - private autoPostConfig: AutoPostConfig; private lastChannelActivity: { [channelId: string]: number } = {}; private autoPostInterval: NodeJS.Timeout; @@ -73,19 +62,6 @@ export class MessageManager { this.discordClient = discordClient; this.runtime = discordClient.runtime; this.attachmentManager = new AttachmentManager(this.runtime); - - this.autoPostConfig = { - enabled: this.runtime.character.clientConfig?.discord?.autoPost?.enabled || false, - monitorTime: this.runtime.character.clientConfig?.discord?.autoPost?.monitorTime || 300000, - inactivityThreshold: this.runtime.character.clientConfig?.discord?.autoPost?.inactivityThreshold || 3600000, // 1 hour default - mainChannelId: this.runtime.character.clientConfig?.discord?.autoPost?.mainChannelId, - announcementChannelIds: this.runtime.character.clientConfig?.discord?.autoPost?.announcementChannelIds || [], - minTimeBetweenPosts: this.runtime.character.clientConfig?.discord?.autoPost?.minTimeBetweenPosts || 7200000, // 2 hours default - }; - - if (this.autoPostConfig.enabled) { - this._startAutoPostMonitoring(); - } } async handleMessage(message: DiscordMessage) { @@ -405,216 +381,6 @@ export class MessageManager { } } - private _startAutoPostMonitoring(): void { - // Wait for client to be ready - if (!this.client.isReady()) { - logger.info('[AutoPost Discord] Client not ready, waiting for ready event') - this.client.once('ready', () => { - logger.info('[AutoPost Discord] Client ready, starting monitoring') - this._initializeAutoPost(); - }); - } else { - logger.info('[AutoPost Discord] Client already ready, starting monitoring') - this._initializeAutoPost(); - } - } - - private _initializeAutoPost(): void { - // Give the client a moment to fully load its cache - setTimeout(() => { - // Monitor with random intervals between 2-6 hours - this.autoPostInterval = setInterval(() => { - this._checkChannelActivity(); - }, Math.floor(Math.random() * (4 * 60 * 60 * 1000) + 2 * 60 * 60 * 1000)); - - // Start monitoring announcement channels - this._monitorAnnouncementChannels(); - }, 5000); // 5 second delay to ensure everything is loaded - } - - private async _checkChannelActivity(): Promise<void> { - if (!this.autoPostConfig.enabled || !this.autoPostConfig.mainChannelId) return; - - const channel = this.client.channels.cache.get(this.autoPostConfig.mainChannelId) as TextChannel; - if (!channel) return; - - try { - // Get last message time - const messages = await channel.messages.fetch({ limit: 1 }); - const lastMessage = messages.first(); - const lastMessageTime = lastMessage ? lastMessage.createdTimestamp : 0; - - const now = Date.now(); - const timeSinceLastMessage = now - lastMessageTime; - const timeSinceLastAutoPost = now - (this.autoPostConfig.lastAutoPost || 0); - - // Add some randomness to the inactivity threshold (±30 minutes) - const randomThreshold = this.autoPostConfig.inactivityThreshold + - (Math.random() * 1800000 - 900000); - - // Check if we should post - if ((timeSinceLastMessage > randomThreshold) && - timeSinceLastAutoPost > (this.autoPostConfig.minTimeBetweenPosts || 0)) { - - try { - // Create memory and generate response - const roomId = stringToUuid(channel.id + "-" + this.runtime.agentId); - - const memory = { - id: stringToUuid(`autopost-${Date.now()}`), - userId: this.runtime.agentId, - agentId: this.runtime.agentId, - roomId, - content: { text: "AUTO_POST_ENGAGEMENT", source: "discord" }, - createdAt: Date.now() - }; - - let state = await this.runtime.composeState(memory, { - discordClient: this.client, - discordMessage: null, - agentName: this.runtime.character.name || this.client.user?.displayName - }); - - // Generate response using template - const context = composeContext({ - state, - template: this.runtime.character.templates?.discordAutoPostTemplate || discordAutoPostTemplate - }); - - const responseContent = await this._generateResponse(memory, state, context); - if (!responseContent?.text) return; - - // Send message and update memory - const messages = await sendMessageInChunks(channel, responseContent.text.trim(), null, []); - - // Create and store memories - const memories = messages.map(m => ({ - id: stringToUuid(m.id + "-" + this.runtime.agentId), - userId: this.runtime.agentId, - agentId: this.runtime.agentId, - content: { - ...responseContent, - url: m.url, - }, - roomId, - createdAt: m.createdTimestamp, - })); - - for (const m of memories) { - await this.runtime.messageManager.createMemory(m); - } - - // Update state and last post time - this.autoPostConfig.lastAutoPost = Date.now(); - state = await this.runtime.updateRecentMessageState(state); - await this.runtime.evaluate(memory, state, true); - } catch (error) { - logger.warn("[AutoPost Discord] Error:", error); - } - } else { - logger.warn("[AutoPost Discord] Activity within threshold. Not posting."); - } - } catch (error) { - logger.warn("[AutoPost Discord] Error checking last message:", error); - } - } - - private async _monitorAnnouncementChannels(): Promise<void> { - if (!this.autoPostConfig.enabled || !this.autoPostConfig.announcementChannelIds.length) { - logger.warn('[AutoPost Discord] Auto post config disabled or no announcement channels') - return; - } - - for (const announcementChannelId of this.autoPostConfig.announcementChannelIds) { - const channel = this.client.channels.cache.get(announcementChannelId); - - if (channel) { - // Check if it's either a text channel or announcement channel - // ChannelType.GuildAnnouncement is 5 - // ChannelType.GuildText is 0 - if (channel instanceof TextChannel || channel.type === ChannelType.GuildAnnouncement) { - const newsChannel = channel as TextChannel; - try { - newsChannel.createMessageCollector().on('collect', async (message: DiscordMessage) => { - if (message.author.bot || Date.now() - message.createdTimestamp > 300000) return; - - const mainChannel = this.client.channels.cache.get(this.autoPostConfig.mainChannelId) as TextChannel; - if (!mainChannel) return; - - try { - // Create memory and generate response - const roomId = stringToUuid(mainChannel.id + "-" + this.runtime.agentId); - const memory = { - id: stringToUuid(`announcement-${Date.now()}`), - userId: this.runtime.agentId, - agentId: this.runtime.agentId, - roomId, - content: { - text: message.content, - source: "discord", - metadata: { announcementUrl: message.url } - }, - createdAt: Date.now() - }; - - let state = await this.runtime.composeState(memory, { - discordClient: this.client, - discordMessage: message, - announcementContent: message?.content, - announcementChannelId: channel.id, - agentName: this.runtime.character.name || this.client.user?.displayName - }); - - // Generate response using template - const context = composeContext({ - state, - template: this.runtime.character.templates?.discordAnnouncementHypeTemplate || discordAnnouncementHypeTemplate - - }); - - const responseContent = await this._generateResponse(memory, state, context); - if (!responseContent?.text) return; - - // Send message and update memory - const messages = await sendMessageInChunks(mainChannel, responseContent.text.trim(), null, []); - - // Create and store memories - const memories = messages.map(m => ({ - id: stringToUuid(m.id + "-" + this.runtime.agentId), - userId: this.runtime.agentId, - agentId: this.runtime.agentId, - content: { - ...responseContent, - url: m.url, - }, - roomId, - createdAt: m.createdTimestamp, - })); - - for (const m of memories) { - await this.runtime.messageManager.createMemory(m); - } - - // Update state - state = await this.runtime.updateRecentMessageState(state); - await this.runtime.evaluate(memory, state, true); - } catch (error) { - logger.warn("[AutoPost Discord] Announcement Error:", error); - } - }); - logger.info(`[AutoPost Discord] Successfully set up collector for announcement channel: ${newsChannel.name}`); - } catch (error) { - logger.warn(`[AutoPost Discord] Error setting up announcement channel collector:`, error); - } - } else { - logger.warn(`[AutoPost Discord] Channel ${announcementChannelId} is not a valid announcement or text channel, type:`, channel.type); - } - } else { - logger.warn(`[AutoPost Discord] Could not find channel ${announcementChannelId} directly`); - } - } - } - async processMessageMedia( message: DiscordMessage ): Promise<{ processedContent: string; attachments: Media[] }> { diff --git a/packages/plugin-node/package.json b/packages/plugin-node/package.json index e8e0cf25c2d..eb1137912bb 100644 --- a/packages/plugin-node/package.json +++ b/packages/plugin-node/package.json @@ -75,7 +75,7 @@ "wav-encoder": "1.3.0", "wavefile": "11.0.0", "yargs": "17.7.2", - "youtube-dl-exec": "3.0.10", + "youtube-dl-exec": "3.0.15", "cookie": "0.7.0" }, "devDependencies": { diff --git a/packages/plugin-node/src/services/video.ts b/packages/plugin-node/src/services/video.ts index f8d8e7bad36..0fd65b7cf31 100644 --- a/packages/plugin-node/src/services/video.ts +++ b/packages/plugin-node/src/services/video.ts @@ -12,7 +12,23 @@ import ffmpeg from "fluent-ffmpeg"; import fs from "fs"; import { tmpdir } from "os"; import path from "path"; -import youtubeDl from "youtube-dl-exec"; +import ytdl, {create} from "youtube-dl-exec"; + +function getYoutubeDL() { + // first check if /usr/local/bin/yt-dlp exists + if (fs.existsSync('/usr/local/bin/yt-dlp')) { + return create('/usr/local/bin/yt-dlp'); + } + + // if not, check if /usr/bin/yt-dlp exists + if (fs.existsSync('/usr/bin/yt-dlp')) { + return create('/usr/bin/yt-dlp'); + } + + // use default otherwise + return ytdl; +} + export class VideoService extends Service implements IVideoService { static serviceType: ServiceType = ServiceType.VIDEO; @@ -57,7 +73,7 @@ export class VideoService extends Service implements IVideoService { } try { - await youtubeDl(url, { + await getYoutubeDL()(url, { verbose: true, output: outputFile, writeInfoJson: true, @@ -79,7 +95,7 @@ export class VideoService extends Service implements IVideoService { } try { - await youtubeDl(videoInfo.webpage_url, { + await getYoutubeDL()(videoInfo.webpage_url, { verbose: true, output: outputFile, format: "bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best", @@ -178,6 +194,7 @@ export class VideoService extends Service implements IVideoService { } async fetchVideoInfo(url: string): Promise<any> { + console.log("url", url) if (url.endsWith(".mp4") || url.includes(".mp4?")) { try { const response = await fetch(url); @@ -196,7 +213,7 @@ export class VideoService extends Service implements IVideoService { } try { - const result = await youtubeDl(url, { + const result = await getYoutubeDL()(url, { dumpJson: true, verbose: true, callHome: false, @@ -312,18 +329,40 @@ export class VideoService extends Service implements IVideoService { runtime: IAgentRuntime ): Promise<string> { logger.log("Preparing audio for transcription..."); + + // Check if ffmpeg exists in PATH + try { + await new Promise((resolve, reject) => { + ffmpeg.getAvailableCodecs((err, _codecs) => { + if (err) reject(err); + resolve(null); + }); + }); + } catch (error) { + logger.log("FFmpeg not found:", error); + return null; + } + const mp4FilePath = path.join( this.dataDir, `${this.getVideoId(url)}.mp4` ); + const webmFilePath = path.join( + this.dataDir, + `${this.getVideoId(url)}.webm` + ); + const mp3FilePath = path.join( this.dataDir, `${this.getVideoId(url)}.mp3` ); if (!fs.existsSync(mp3FilePath)) { - if (fs.existsSync(mp4FilePath)) { + if(fs.existsSync(webmFilePath)) { + logger.log("WEBM file found. Converting to MP3..."); + await this.convertWebmToMp3(webmFilePath, mp3FilePath); + } else if (fs.existsSync(mp4FilePath)) { logger.log("MP4 file found. Converting to MP3..."); await this.convertMp4ToMp3(mp4FilePath, mp3FilePath); } else { @@ -371,6 +410,27 @@ export class VideoService extends Service implements IVideoService { }); } + private async convertWebmToMp3( + inputPath: string, + outputPath: string + ): Promise<void> { + return new Promise((resolve, reject) => { + ffmpeg(inputPath) + .output(outputPath) + .noVideo() + .audioCodec("libmp3lame") + .on("end", () => { + logger.log("Conversion to MP3 complete"); + resolve(); + }) + .on("error", (err) => { + logger.log("Error converting to MP3:", err); + reject(err); + }) + .run(); + }); + } + private async downloadAudio( url: string, outputFile: string @@ -412,7 +472,7 @@ export class VideoService extends Service implements IVideoService { logger.log( "YouTube video detected, downloading audio with youtube-dl" ); - await youtubeDl(url, { + await getYoutubeDL()(url, { verbose: true, extractAudio: true, audioFormat: "mp3", diff --git a/packages/plugin-openai/src/index.ts b/packages/plugin-openai/src/index.ts index d1a5ef227f8..6dd21ea99e2 100644 --- a/packages/plugin-openai/src/index.ts +++ b/packages/plugin-openai/src/index.ts @@ -264,18 +264,13 @@ export const openaiPlugin: Plugin = { description: descriptionMatch[1] }; }, - [AsyncHandlerType.TRANSCRIPTION]: async (params: { - audioFile: any; - language?: string; - }) => { + [AsyncHandlerType.TRANSCRIPTION]: async (audioBuffer: Buffer) => { + console.log("audioBuffer", audioBuffer) const baseURL = process.env.OPENAI_BASE_URL ?? "https://api.openai.com/v1"; const formData = new FormData(); - formData.append("file", params.audioFile); + formData.append("file", new Blob([audioBuffer], { type: "audio/mp3" })); formData.append("model", "whisper-1"); - if (params.language) { - formData.append("language", params.language); - } const response = await fetch(`${baseURL}/audio/transcriptions`, { method: "POST", headers: { diff --git a/packages/plugin-telegram/src/messageManager.ts b/packages/plugin-telegram/src/messageManager.ts index fc1df591c34..bb765b8dfe2 100644 --- a/packages/plugin-telegram/src/messageManager.ts +++ b/packages/plugin-telegram/src/messageManager.ts @@ -1,15 +1,15 @@ import { + AsyncHandlerType, composeContext, composeRandomUser, type Content, - logger, generateMessageResponse, generateShouldRespond, type HandlerCallback, type IAgentRuntime, + logger, type Media, type Memory, - AsyncHandlerType, type State, stringToUuid, type UUID, @@ -17,10 +17,8 @@ import { import type { Message } from "@telegraf/types"; import type { Context, Telegraf } from "telegraf"; import { - telegramAutoPostTemplate, telegramMessageHandlerTemplate, - telegramPinnedMessageTemplate, - telegramShouldRespondTemplate, + telegramShouldRespondTemplate } from "./templates"; import { escapeMarkdown } from "./utils"; @@ -41,16 +39,6 @@ interface MessageContext { timestamp: number; } -interface AutoPostConfig { - enabled: boolean; - monitorTime: number; - inactivityThreshold: number; // milliseconds - mainChannelId: string; - pinnedMessagesGroups: string[]; // Instead of announcementChannelIds - lastAutoPost?: number; - minTimeBetweenPosts?: number; -} - export type InterestChats = { [key: string]: { currentHandler: string | undefined; @@ -67,7 +55,6 @@ export class MessageManager { private interestChats: InterestChats = {}; private teamMemberUsernames: Map<string, string> = new Map(); - private autoPostConfig: AutoPostConfig; private lastChannelActivity: { [channelId: string]: number } = {}; private autoPostInterval: NodeJS.Timeout; @@ -81,31 +68,6 @@ export class MessageManager { error ) ); - - this.autoPostConfig = { - enabled: - this.runtime.character.clientConfig?.telegram?.autoPost - ?.enabled || false, - monitorTime: - this.runtime.character.clientConfig?.telegram?.autoPost - ?.monitorTime || 300000, - inactivityThreshold: - this.runtime.character.clientConfig?.telegram?.autoPost - ?.inactivityThreshold || 3600000, - mainChannelId: - this.runtime.character.clientConfig?.telegram?.autoPost - ?.mainChannelId, - pinnedMessagesGroups: - this.runtime.character.clientConfig?.telegram?.autoPost - ?.pinnedMessagesGroups || [], - minTimeBetweenPosts: - this.runtime.character.clientConfig?.telegram?.autoPost - ?.minTimeBetweenPosts || 7200000, - }; - - if (this.autoPostConfig.enabled) { - this._startAutoPostMonitoring(); - } } private async _initializeTeamMemberUsernames(): Promise<void> { @@ -133,299 +95,6 @@ export class MessageManager { } } - private _startAutoPostMonitoring(): void { - // Wait for bot to be ready - if (this.bot.botInfo) { - logger.info( - "[AutoPost Telegram] Bot ready, starting monitoring" - ); - this._initializeAutoPost(); - } else { - logger.info( - "[AutoPost Telegram] Bot not ready, waiting for ready event" - ); - this.bot.telegram.getMe().then(() => { - logger.info( - "[AutoPost Telegram] Bot ready, starting monitoring" - ); - this._initializeAutoPost(); - }); - } - } - - private _initializeAutoPost(): void { - // Give the bot a moment to fully initialize - setTimeout(() => { - // Monitor with random intervals between 2-6 hours - // Monitor with random intervals between 2-6 hours - this.autoPostInterval = setInterval(() => { - this._checkChannelActivity(); - }, Math.floor(Math.random() * (4 * 60 * 60 * 1000) + 2 * 60 * 60 * 1000)); - }, 5000); - } - - private async _checkChannelActivity(): Promise<void> { - if (!this.autoPostConfig.enabled || !this.autoPostConfig.mainChannelId) - return; - - try { - // Get last message time - const now = Date.now(); - const lastActivityTime = - this.lastChannelActivity[this.autoPostConfig.mainChannelId] || - 0; - const timeSinceLastMessage = now - lastActivityTime; - const timeSinceLastAutoPost = - now - (this.autoPostConfig.lastAutoPost || 0); - - // Add some randomness to the inactivity threshold (±30 minutes) - const randomThreshold = - this.autoPostConfig.inactivityThreshold + - (Math.random() * 1800000 - 900000); - - // Check if we should post - if ( - timeSinceLastMessage > randomThreshold && - timeSinceLastAutoPost > - (this.autoPostConfig.minTimeBetweenPosts || 0) - ) { - try { - const roomId = stringToUuid( - this.autoPostConfig.mainChannelId + - "-" + - this.runtime.agentId - ); - const memory = { - id: stringToUuid(`autopost-${Date.now()}`), - userId: this.runtime.agentId, - agentId: this.runtime.agentId, - roomId, - content: { - text: "AUTO_POST_ENGAGEMENT", - source: "telegram", - }, - createdAt: Date.now(), - }; - - let state = await this.runtime.composeState(memory, { - telegramBot: this.bot, - agentName: this.runtime.character.name, - }); - - const context = composeContext({ - state, - template: - this.runtime.character.templates - ?.telegramAutoPostTemplate || - telegramAutoPostTemplate, - }); - - const responseContent = await this._generateResponse( - memory, - state, - context - ); - if (!responseContent?.text) return; - - console.log( - `[Auto Post Telegram] Recent Messages: ${responseContent}` - ); - - // Send message directly using telegram bot - const messages = await Promise.all( - this.splitMessage(responseContent.text.trim()).map( - (chunk) => - this.bot.telegram.sendMessage( - this.autoPostConfig.mainChannelId, - chunk - ) - ) - ); - - // Create and store memories - const memories = messages.map((m) => ({ - id: stringToUuid( - roomId + "-" + m.message_id.toString() - ), - userId: this.runtime.agentId, - agentId: this.runtime.agentId, - content: { - ...responseContent, - text: m.text, - }, - roomId, - createdAt: m.date * 1000, - })); - - for (const m of memories) { - await this.runtime.messageManager.createMemory(m); - } - - this.autoPostConfig.lastAutoPost = Date.now(); - state = await this.runtime.updateRecentMessageState(state); - await this.runtime.evaluate(memory, state, true); - } catch (error) { - logger.warn("[AutoPost Telegram] Error:", error); - } - } else { - logger.warn( - "[AutoPost Telegram] Activity within threshold. Not posting." - ); - } - } catch (error) { - logger.warn( - "[AutoPost Telegram] Error checking channel activity:", - error - ); - } - } - - private async _monitorPinnedMessages(ctx: Context): Promise<void> { - if (!this.autoPostConfig.pinnedMessagesGroups.length) { - logger.warn( - "[AutoPost Telegram] Auto post config no pinned message groups" - ); - return; - } - - if (!ctx.message || !("pinned_message" in ctx.message)) { - return; - } - - const pinnedMessage = ctx.message.pinned_message; - if (!pinnedMessage) return; - - if ( - !this.autoPostConfig.pinnedMessagesGroups.includes( - ctx.chat.id.toString() - ) - ) - return; - - const mainChannel = this.autoPostConfig.mainChannelId; - if (!mainChannel) return; - - try { - logger.info( - `[AutoPost Telegram] Processing pinned message in group ${ctx.chat.id}` - ); - - // Explicitly type and handle message content - const messageContent: string = - "text" in pinnedMessage && - typeof pinnedMessage.text === "string" - ? pinnedMessage.text - : "caption" in pinnedMessage && - typeof pinnedMessage.caption === "string" - ? pinnedMessage.caption - : "New pinned message"; - - const roomId = stringToUuid( - mainChannel + "-" + this.runtime.agentId - ); - const memory = { - id: stringToUuid(`pinned-${Date.now()}`), - userId: this.runtime.agentId, - agentId: this.runtime.agentId, - roomId, - content: { - text: messageContent, - source: "telegram", - metadata: { - messageId: pinnedMessage.message_id, - pinnedMessageData: pinnedMessage, - }, - }, - createdAt: Date.now(), - }; - - let state = await this.runtime.composeState(memory, { - telegramBot: this.bot, - pinnedMessageContent: messageContent, - pinnedGroupId: ctx.chat.id.toString(), - agentName: this.runtime.character.name, - }); - - const context = composeContext({ - state, - template: - this.runtime.character.templates - ?.telegramPinnedMessageTemplate || - telegramPinnedMessageTemplate, - }); - - const responseContent = await this._generateResponse( - memory, - state, - context - ); - if (!responseContent?.text) return; - - // Send message using telegram bot - const messages = await Promise.all( - this.splitMessage(responseContent.text.trim()).map((chunk) => - this.bot.telegram.sendMessage(mainChannel, chunk) - ) - ); - - const memories = messages.map((m) => ({ - id: stringToUuid(roomId + "-" + m.message_id.toString()), - userId: this.runtime.agentId, - agentId: this.runtime.agentId, - content: { - ...responseContent, - text: m.text, - }, - roomId, - createdAt: m.date * 1000, - })); - - for (const m of memories) { - await this.runtime.messageManager.createMemory(m); - } - - state = await this.runtime.updateRecentMessageState(state); - await this.runtime.evaluate(memory, state, true); - } catch (error) { - logger.warn( - `[AutoPost Telegram] Error processing pinned message:`, - error - ); - } - } - - private _isMessageForMe(message: Message): boolean { - const botUsername = this.bot.botInfo?.username; - if (!botUsername) return false; - - const messageText = - "text" in message - ? message.text - : "caption" in message - ? message.caption - : ""; - if (!messageText) return false; - - const isReplyToBot = - (message as any).reply_to_message?.from?.is_bot === true && - (message as any).reply_to_message?.from?.username === botUsername; - const isMentioned = messageText.includes(`@${botUsername}`); - const hasUsername = messageText - .toLowerCase() - .includes(botUsername.toLowerCase()); - - return ( - isReplyToBot || - isMentioned - ) - } - - private _checkInterest(chatId: string): boolean { - const chatState = this.interestChats[chatId]; - if (!chatState) return false; - return true; - } - // Process image messages and generate descriptions private async processImage( message: Message @@ -695,17 +364,6 @@ export class MessageManager { this.lastChannelActivity[ctx.chat.id.toString()] = Date.now(); - // Check for pinned message and route to monitor function - if ( - this.autoPostConfig.enabled && - ctx.message && - "pinned_message" in ctx.message - ) { - // We know this is a message update context now - await this._monitorPinnedMessages(ctx); - return; - } - if ( this.runtime.character.clientConfig?.telegram ?.shouldIgnoreBotMessages && From 20a7b47776ef7155330d4039c65745e69db57db5 Mon Sep 17 00:00:00 2001 From: Shaw <shawmakesmagic@gmail.com> Date: Sun, 9 Feb 2025 22:44:10 -0500 Subject: [PATCH 12/12] change model calling semantics --- bun.lockb | Bin 1347304 -> 1400600 bytes packages/agent/src/defaultCharacter.ts | 3 +- packages/agent/src/server.ts | 22 +- packages/core/src/context.ts | 2 +- packages/core/src/generation.ts | 116 ++----- packages/core/src/knowledge.ts | 8 +- packages/core/src/memory.ts | 8 +- packages/core/src/runtime.ts | 34 +- packages/core/src/types.ts | 20 +- packages/core/tsconfig.json | 2 +- packages/plugin-anthropic/src/index.ts | 8 +- .../__tests__/actions/continue.test.ts | 4 +- .../__tests__/evaluators/fact.test.ts | 2 +- .../__tests__/evaluators/goal.test.ts | 2 +- .../plugin-bootstrap/src/actions/continue.ts | 6 +- .../src/actions/followRoom.ts | 4 +- .../plugin-bootstrap/src/actions/muteRoom.ts | 4 +- .../src/actions/unfollowRoom.ts | 4 +- .../src/actions/unmuteRoom.ts | 4 +- .../plugin-bootstrap/src/evaluators/fact.ts | 4 +- .../plugin-bootstrap/src/evaluators/goal.ts | 4 +- .../plugin-bootstrap/src/providers/facts.ts | 4 +- .../__tests__/discord-client.test.ts | 1 - .../src/actions/chat_with_attachments.ts | 6 +- .../src/actions/download_media.ts | 4 +- .../plugin-discord/src/actions/joinvoice.ts | 4 +- .../src/actions/summarize_conversation.ts | 6 +- .../src/actions/transcribe_media.ts | 4 +- packages/plugin-discord/src/attachments.ts | 14 +- packages/plugin-discord/src/index.ts | 25 +- packages/plugin-discord/src/messages.ts | 12 +- packages/plugin-discord/src/utils.ts | 4 +- packages/plugin-discord/src/voice.ts | 13 +- packages/plugin-dummy-inventory/.npmignore | 6 + packages/plugin-dummy-inventory/README.MD | 320 ++++++++++++++++++ .../plugin-dummy-inventory/eslint.config.mjs | 3 + packages/plugin-dummy-inventory/package.json | 31 ++ packages/plugin-dummy-inventory/src/index.ts | 12 + .../src/inventory/actions/swap.ts | 16 + .../src/inventory/actions/transfer.ts | 16 + .../src/inventory/wallet.ts | 20 ++ packages/plugin-dummy-inventory/tsconfig.json | 10 + .../plugin-dummy-inventory/tsup.config.ts | 29 ++ packages/plugin-evm | 1 + packages/plugin-local-ai/src/index.ts | 16 +- packages/plugin-node/src/environment.ts | 104 ------ packages/plugin-node/src/services/browser.ts | 4 +- packages/plugin-node/src/services/video.ts | 4 +- packages/plugin-node/src/templates.ts | 15 - packages/plugin-openai/src/index.ts | 36 +- packages/plugin-solana | 1 + .../plugin-telegram/src/messageManager.ts | 11 +- .../plugin-twitter/src/SttTtsSpacesPlugin.ts | 11 +- packages/plugin-twitter/src/interactions.ts | 8 +- packages/plugin-twitter/src/post.ts | 12 +- packages/plugin-twitter/src/search.ts | 8 +- packages/plugin-twitter/src/spaces.ts | 6 +- packages/plugin-twitter/src/utils.ts | 8 +- 58 files changed, 682 insertions(+), 384 deletions(-) create mode 100644 packages/plugin-dummy-inventory/.npmignore create mode 100644 packages/plugin-dummy-inventory/README.MD create mode 100644 packages/plugin-dummy-inventory/eslint.config.mjs create mode 100644 packages/plugin-dummy-inventory/package.json create mode 100644 packages/plugin-dummy-inventory/src/index.ts create mode 100644 packages/plugin-dummy-inventory/src/inventory/actions/swap.ts create mode 100644 packages/plugin-dummy-inventory/src/inventory/actions/transfer.ts create mode 100644 packages/plugin-dummy-inventory/src/inventory/wallet.ts create mode 100644 packages/plugin-dummy-inventory/tsconfig.json create mode 100644 packages/plugin-dummy-inventory/tsup.config.ts create mode 160000 packages/plugin-evm delete mode 100644 packages/plugin-node/src/environment.ts delete mode 100644 packages/plugin-node/src/templates.ts create mode 160000 packages/plugin-solana diff --git a/bun.lockb b/bun.lockb index 617ff10fb0aec38ff03efa0c584fff269ce99115..d20478e4f61a65a4b24264169c3f3220fa97c477 100755 GIT binary patch delta 274859 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 InGU=DFG|5~-v9sr delta 241077 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 JqvJ&P0suc{ZzKQ! diff --git a/packages/agent/src/defaultCharacter.ts b/packages/agent/src/defaultCharacter.ts index 9f7da7b7266..9f34b1659dc 100644 --- a/packages/agent/src/defaultCharacter.ts +++ b/packages/agent/src/defaultCharacter.ts @@ -7,7 +7,8 @@ export const defaultCharacter: Character = { "@elizaos/plugin-anthropic", "@elizaos/plugin-openai", "@elizaos/plugin-discord", - "@elizaos/plugin-node" + "@elizaos/plugin-node", + "elizaos/plugin-telegram", ], settings: { secrets: {}, diff --git a/packages/agent/src/server.ts b/packages/agent/src/server.ts index 25339becad8..77840a4055b 100644 --- a/packages/agent/src/server.ts +++ b/packages/agent/src/server.ts @@ -1,12 +1,10 @@ import { composeContext, logger, - generateCaption, - generateImage, generateMessageResponse, generateObject, messageCompletionFooter, - AsyncHandlerType, + ModelClass, stringToUuid, type Content, type Media, @@ -166,7 +164,7 @@ export class CharacterServer { return; } - const transcription = await runtime.call(AsyncHandlerType.TRANSCRIPTION, fs.createReadStream(audioFile.path)); + const transcription = await runtime.useModel(ModelClass.TRANSCRIPTION, fs.createReadStream(audioFile.path)); res.json(transcription); } @@ -273,7 +271,7 @@ export class CharacterServer { const response = await generateMessageResponse({ runtime: runtime, context, - handlerType: AsyncHandlerType.TEXT_LARGE, + modelClass: ModelClass.TEXT_LARGE, }); if (!response) { @@ -484,7 +482,7 @@ export class CharacterServer { const response = await generateObject({ runtime, context, - handlerType: AsyncHandlerType.TEXT_SMALL, + modelClass: ModelClass.TEXT_SMALL, schema: hyperfiOutSchema, }); @@ -588,15 +586,11 @@ export class CharacterServer { res.status(404).send("Agent not found"); return; } - - const images = await generateImage({ ...req.body }, agent); + const images = await agent.useModel(ModelClass.IMAGE, { ...req.body }); const imagesRes: { image: string; caption: string }[] = []; if (images.data && images.data.length > 0) { for (let i = 0; i < images.data.length; i++) { - const caption = await generateCaption( - { imageUrl: images.data[i] }, - agent - ); + const caption = await agent.useModel(ModelClass.IMAGE_DESCRIPTION, images.data[i]); imagesRes.push({ image: images.data[i], caption: caption.title, @@ -787,7 +781,7 @@ export class CharacterServer { const response = await generateMessageResponse({ runtime: runtime, context, - handlerType: AsyncHandlerType.TEXT_LARGE, + modelClass: ModelClass.TEXT_LARGE, }); // save response to memory @@ -820,7 +814,7 @@ export class CharacterServer { // Get the text to convert to speech const textToSpeak = response.text; - const speechResponse = await runtime.call(AsyncHandlerType.TEXT_TO_SPEECH, textToSpeak); + const speechResponse = await runtime.useModel(ModelClass.TEXT_TO_SPEECH, textToSpeak); if (!speechResponse.ok) { throw new Error( diff --git a/packages/core/src/context.ts b/packages/core/src/context.ts index d85b2857f32..80e4814359d 100644 --- a/packages/core/src/context.ts +++ b/packages/core/src/context.ts @@ -39,7 +39,7 @@ export const composeContext = ({ template: TemplateType; }) => { const templateStr = - typeof template === "function" ? template({ state }) : template; + composeRandomUser(typeof template === "function" ? template({ state }) : template, 10); const templateFunction = handlebars.compile(templateStr); return templateFunction(state); diff --git a/packages/core/src/generation.ts b/packages/core/src/generation.ts index c8241bfe32b..fb43f779ae7 100644 --- a/packages/core/src/generation.ts +++ b/packages/core/src/generation.ts @@ -5,13 +5,13 @@ import { parseJSONObjectFromText } from "./parsing.ts"; import { type Content, type IAgentRuntime, - AsyncHandlerType + ModelClass } from "./types.ts"; interface GenerateObjectOptions { runtime: IAgentRuntime; context: string; - handlerType: AsyncHandlerType; + modelClass: ModelClass; output?: "object" | "array" | "enum" | "no-schema" | undefined; schema?: ZodSchema; schemaName?: string; @@ -99,7 +99,7 @@ export async function trimTokens( if (maxTokens <= 0) throw new Error("maxTokens must be positive"); try { - const tokens = await runtime.call(AsyncHandlerType.TEXT_TOKENIZER_ENCODE, { context }); + const tokens = await runtime.useModel(ModelClass.TEXT_TOKENIZER_ENCODE, { context }); // If already within limits, return unchanged if (tokens.length <= maxTokens) { @@ -110,7 +110,7 @@ export async function trimTokens( const truncatedTokens = tokens.slice(-maxTokens); // Decode back to text - js-tiktoken decode() returns a string directly - return await runtime.call(AsyncHandlerType.TEXT_TOKENIZER_DECODE, { tokens: truncatedTokens }); + return await runtime.useModel(ModelClass.TEXT_TOKENIZER_DECODE, { tokens: truncatedTokens }); } catch (error) { logger.error("Error in trimTokens:", error); // Return truncated string if tokenization fails @@ -122,16 +122,16 @@ export async function trimTokens( export async function generateText({ runtime, context, - handlerType = AsyncHandlerType.TEXT_SMALL, + modelClass = ModelClass.TEXT_SMALL, stopSequences = [], }: { runtime: IAgentRuntime; context: string; - handlerType: AsyncHandlerType; + modelClass: ModelClass; stopSequences?: string[]; customSystemPrompt?: string; }): Promise<string> { - const text = await runtime.call(handlerType, { + const text = await runtime.useModel(modelClass, { runtime, context, stopSequences, @@ -143,19 +143,19 @@ export async function generateText({ export async function generateTextArray({ runtime, context, - handlerType = AsyncHandlerType.TEXT_SMALL, + modelClass = ModelClass.TEXT_SMALL, stopSequences, }: { runtime: IAgentRuntime; context: string; - handlerType: AsyncHandlerType; + modelClass: ModelClass; stopSequences?: string[]; }): Promise<string[]> { const result = await withRetry(async () => { const result = await generateObject({ runtime, context, - handlerType, + modelClass, schema: z.array(z.string()), stopSequences, }); @@ -169,14 +169,14 @@ export async function generateTextArray({ async function generateEnum<T extends string>({ runtime, context, - handlerType = AsyncHandlerType.TEXT_SMALL, + modelClass = ModelClass.TEXT_SMALL, enumValues, functionName, stopSequences, }: { runtime: IAgentRuntime; context: string; - handlerType: AsyncHandlerType; + modelClass: ModelClass; enumValues: Array<T>; functionName: string; stopSequences?: string[]; @@ -189,7 +189,7 @@ async function generateEnum<T extends string>({ const result = await generateObject({ runtime, context, - handlerType, + modelClass, output: "enum", enum: enumValues, mode: "json", @@ -206,12 +206,12 @@ async function generateEnum<T extends string>({ export async function generateShouldRespond({ runtime, context, - handlerType = AsyncHandlerType.TEXT_SMALL, + modelClass = ModelClass.TEXT_SMALL, stopSequences, }: { runtime: IAgentRuntime; context: string; - handlerType: AsyncHandlerType; + modelClass: ModelClass; stopSequences?: string[]; }): Promise<"RESPOND" | "IGNORE" | "STOP" | null> { const RESPONSE_VALUES = ["RESPOND", "IGNORE", "STOP"] as string[]; @@ -219,7 +219,7 @@ export async function generateShouldRespond({ const result = await generateEnum({ runtime, context, - handlerType, + modelClass, enumValues: RESPONSE_VALUES, functionName: "generateShouldRespond", stopSequences, @@ -231,12 +231,12 @@ export async function generateShouldRespond({ export async function generateTrueOrFalse({ runtime, context = "", - handlerType = AsyncHandlerType.TEXT_SMALL, + modelClass = ModelClass.TEXT_SMALL, stopSequences, }: { runtime: IAgentRuntime; context: string; - handlerType: AsyncHandlerType; + modelClass: ModelClass; stopSequences?: string[]; }): Promise<boolean> { const BOOL_VALUES = ["true", "false"]; @@ -244,7 +244,7 @@ export async function generateTrueOrFalse({ const result = await generateEnum({ runtime, context, - handlerType, + modelClass, enumValues: BOOL_VALUES, functionName: "generateTrueOrFalse", stopSequences, @@ -257,7 +257,7 @@ export async function generateTrueOrFalse({ export const generateObject = async ({ runtime, context, - handlerType = AsyncHandlerType.TEXT_SMALL, + modelClass = ModelClass.TEXT_SMALL, stopSequences, }: GenerateObjectOptions): Promise<any> => { if (!context) { @@ -266,29 +266,29 @@ export const generateObject = async ({ throw new Error(errorMessage); } - const { object } = await runtime.call(handlerType, { + const { object } = await runtime.useModel(modelClass, { runtime, context, - handlerType, + modelClass, stopSequences, object: true, }); - logger.debug(`Received Object response from ${handlerType} model.`); + logger.debug(`Received Object response from ${modelClass} model.`); return object; }; export async function generateObjectArray({ runtime, context, - handlerType = AsyncHandlerType.TEXT_SMALL, + modelClass = ModelClass.TEXT_SMALL, schema, schemaName, schemaDescription, }: { runtime: IAgentRuntime; context: string; - handlerType: AsyncHandlerType; + modelClass: ModelClass; schema?: ZodSchema; schemaName?: string; schemaDescription?: string; @@ -300,7 +300,7 @@ export async function generateObjectArray({ const result = await generateObject({ runtime, context, - handlerType, + modelClass, output: "array", schema, schemaName, @@ -313,18 +313,18 @@ export async function generateObjectArray({ export async function generateMessageResponse({ runtime, context, - handlerType = AsyncHandlerType.TEXT_SMALL, + modelClass = ModelClass.TEXT_SMALL, stopSequences, }: { runtime: IAgentRuntime; context: string; - handlerType: AsyncHandlerType; + modelClass: ModelClass; stopSequences?: string[]; }): Promise<Content> { logger.debug("Context:", context); return await withRetry(async () => { - const text = await runtime.call(handlerType, { + const text = await runtime.useModel(modelClass, { runtime, context, stop: stopSequences, @@ -341,60 +341,4 @@ export async function generateMessageResponse({ return parsedContent; }); -} - -// ================ IMAGE-RELATED FUNCTIONS ================ -export const generateImage = async ( - data: { - prompt: string; - width: number; - height: number; - count?: number; - negativePrompt?: string; - numIterations?: number; - guidanceScale?: number; - seed?: number; - modelId?: string; - jobId?: string; - stylePreset?: string; - hideWatermark?: boolean; - safeMode?: boolean; - cfgScale?: number; - }, - runtime: IAgentRuntime -): Promise<{ - success: boolean; - data?: string[]; - error?: any; -}> => { - return await withRetry( - async () => { - const result = await runtime.call(AsyncHandlerType.IMAGE, data); - return { - success: true, - data: result.images, - error: undefined, - }; - }, - { - maxRetries: 2, - initialDelay: 2000, - } - ); -}; - -export const generateCaption = async ( - data: { imageUrl: string }, - runtime: IAgentRuntime -): Promise<{ - title: string; - description: string; -}> => { - const { imageUrl } = data; - const resp = await runtime.call(AsyncHandlerType.IMAGE_DESCRIPTION, imageUrl); - - return { - title: resp.title.trim(), - description: resp.description.trim(), - }; -}; \ No newline at end of file +} \ No newline at end of file diff --git a/packages/core/src/knowledge.ts b/packages/core/src/knowledge.ts index bca059e871f..9a149d7455d 100644 --- a/packages/core/src/knowledge.ts +++ b/packages/core/src/knowledge.ts @@ -1,7 +1,7 @@ import { splitChunks } from "./parsing.ts"; import logger from "./logger.ts"; import type { AgentRuntime } from "./runtime.ts"; -import { type KnowledgeItem, type Memory, AsyncHandlerType, type UUID } from "./types.ts"; +import { type KnowledgeItem, type Memory, ModelClass, type UUID } from "./types.ts"; import { stringToUuid } from "./uuid.ts"; async function get( @@ -31,7 +31,7 @@ async function get( return []; } - const embedding = await runtime.call(AsyncHandlerType.TEXT_EMBEDDING, processed); + const embedding = await runtime.useModel(ModelClass.TEXT_EMBEDDING, processed); const fragments = await runtime.knowledgeManager.searchMemories( { embedding, @@ -69,7 +69,7 @@ async function set( chunkSize = 512, bleed = 20 ) { - const embedding = await runtime.call(AsyncHandlerType.TEXT_EMBEDDING, null); + const embedding = await runtime.useModel(ModelClass.TEXT_EMBEDDING, null); await runtime.documentsManager.createMemory({ id: item.id, agentId: runtime.agentId, @@ -84,7 +84,7 @@ async function set( const fragments = await splitChunks(preprocessed, chunkSize, bleed); for (const fragment of fragments) { - const embedding = await runtime.call(AsyncHandlerType.TEXT_EMBEDDING, fragment); + const embedding = await runtime.useModel(ModelClass.TEXT_EMBEDDING, fragment); await runtime.knowledgeManager.createMemory({ // We namespace the knowledge base uuid to avoid id // collision with the document above. diff --git a/packages/core/src/memory.ts b/packages/core/src/memory.ts index cd240223793..08ea3e13e6e 100644 --- a/packages/core/src/memory.ts +++ b/packages/core/src/memory.ts @@ -1,6 +1,6 @@ import logger from "./logger.ts"; import { - AsyncHandlerType, + ModelClass, type IAgentRuntime, type IMemoryManager, type Memory, @@ -66,11 +66,11 @@ export class MemoryManager implements IMemoryManager { try { // Generate embedding from text content - memory.embedding = await this.runtime.call(AsyncHandlerType.TEXT_EMBEDDING, memoryText); + memory.embedding = await this.runtime.useModel(ModelClass.TEXT_EMBEDDING, memoryText); } catch (error) { logger.error("Failed to generate embedding:", error); // Fallback to zero vector if embedding fails - memory.embedding = await this.runtime.call(AsyncHandlerType.TEXT_EMBEDDING, null); + memory.embedding = await this.runtime.useModel(ModelClass.TEXT_EMBEDDING, null); } return memory; @@ -185,7 +185,7 @@ export class MemoryManager implements IMemoryManager { logger.log("Creating Memory", memory.id, memory.content.text); if(!memory.embedding){ - const embedding = await this.runtime.call(AsyncHandlerType.TEXT_EMBEDDING, null); + const embedding = await this.runtime.useModel(ModelClass.TEXT_EMBEDDING, null); memory.embedding = embedding; } diff --git a/packages/core/src/runtime.ts b/packages/core/src/runtime.ts index 02b6ffea624..958ccd7a542 100644 --- a/packages/core/src/runtime.ts +++ b/packages/core/src/runtime.ts @@ -39,7 +39,7 @@ import { type IMemoryManager, type KnowledgeItem, type Memory, - AsyncHandlerType, + ModelClass, type Plugin, type Provider, type State, @@ -248,7 +248,7 @@ export class AgentRuntime implements IAgentRuntime { private readonly knowledgeRoot: string; private readonly memoryManagerService: MemoryManagerService; - handlers = new Map<AsyncHandlerType, ((params: any) => Promise<any>)[]>(); + models = new Map<ModelClass, ((params: any) => Promise<any>)[]>(); constructor(opts: { conversationLength?: number; @@ -347,9 +347,9 @@ export class AgentRuntime implements IAgentRuntime { this.clients.push(startedClient); } } - if (plugin.handlers) { - for (const [handlerType, handler] of Object.entries(plugin.handlers)) { - this.registerHandler(handlerType as AsyncHandlerType, handler as (params: any) => Promise<any>); + if (plugin.models) { + for (const [modelClass, handler] of Object.entries(plugin.models)) { + this.registerModel(modelClass as ModelClass, handler as (params: any) => Promise<any>); } } if (plugin.services) { @@ -588,7 +588,7 @@ export class AgentRuntime implements IAgentRuntime { const result = await generateText({ runtime: this, context, - handlerType: AsyncHandlerType.TEXT_SMALL, + modelClass: ModelClass.TEXT_SMALL, }); console.log("***** result", result); @@ -1271,25 +1271,25 @@ Text: ${attachment.text} return this.memoryManagerService.getKnowledgeManager(); } - registerHandler(handlerType: AsyncHandlerType, handler: (params: any) => Promise<any>) { - if (!this.handlers.has(handlerType)) { - this.handlers.set(handlerType, []); + registerModel(modelClass: ModelClass, handler: (params: any) => Promise<any>) { + if (!this.models.has(modelClass)) { + this.models.set(modelClass, []); } - this.handlers.get(handlerType)?.push(handler); + this.models.get(modelClass)?.push(handler); } - getHandler(handlerType: AsyncHandlerType): ((params: any) => Promise<any>) | undefined { - const handlers = this.handlers.get(handlerType); - if (!handlers?.length) { + getModel(modelClass: ModelClass): ((params: any) => Promise<any>) | undefined { + const models = this.models.get(modelClass); + if (!models?.length) { return undefined; } - return handlers[0]; + return models[0]; } - async call(handlerType: AsyncHandlerType, params: any): Promise<any> { - const handler = this.getHandler(handlerType); + async useModel(modelClass: ModelClass, params: any): Promise<any> { + const handler = this.getModel(modelClass); if (!handler) { - throw new Error(`No handler found for delegate type: ${handlerType}`); + throw new Error(`No handler found for delegate type: ${modelClass}`); } return await handler(params); } diff --git a/packages/core/src/types.ts b/packages/core/src/types.ts index 9b7a20fbeb0..b57a5d70412 100644 --- a/packages/core/src/types.ts +++ b/packages/core/src/types.ts @@ -114,7 +114,7 @@ export interface Goal { /** * Model size/type classification */ -export enum AsyncHandlerType { +export enum ModelClass { SMALL = "text_small", // for backwards compatibility MEDIUM = "text_large", // for backwards compatibility LARGE = "text_large", // for backwards compatibility @@ -590,8 +590,8 @@ export type Plugin = { /** Optional memory managers */ memoryManagers?: IMemoryManager[]; - /** Optional handlers */ - handlers?: { + /** Optional models */ + models?: { [key: string]: (...args: any[]) => Promise<any>; }; @@ -1021,9 +1021,9 @@ export interface IAgentRuntime { updateRecentMessageState(state: State): Promise<State>; - call<T = any>(handlerType: AsyncHandlerType, params: T): Promise<any>; - registerHandler(handlerType: AsyncHandlerType, handler: (params: any) => Promise<any>): void; - getHandler(handlerType: AsyncHandlerType): ((params: any) => Promise<any>) | undefined; + useModel<T = any>(modelClass: ModelClass, params: T): Promise<any>; + registerModel(modelClass: ModelClass, handler: (params: any) => Promise<any>): void; + getModel(modelClass: ModelClass): ((params: any) => Promise<any>) | undefined; stop(): Promise<void>; } @@ -1061,18 +1061,18 @@ export interface ChunkRow { export type GenerateTextParams = { runtime: IAgentRuntime; context: string; - handlerType: AsyncHandlerType; + modelClass: ModelClass; stopSequences?: string[]; }; export interface TokenizeTextParams { context: string; - handlerType: AsyncHandlerType; + modelClass: ModelClass; } export interface DetokenizeTextParams { tokens: number[]; - handlerType: AsyncHandlerType; + modelClass: ModelClass; } // Inventory @@ -1095,7 +1095,7 @@ export type InventoryAction = { export type InventoryProvider = { name: string description: string - items: InventoryItem[] + providers: (runtime: IAgentRuntime, params: any) => Promise<InventoryItem[]> actions: InventoryAction[] } diff --git a/packages/core/tsconfig.json b/packages/core/tsconfig.json index cc6f73411c2..84b4c5672cc 100644 --- a/packages/core/tsconfig.json +++ b/packages/core/tsconfig.json @@ -21,6 +21,6 @@ "moduleDetection": "force", "allowArbitraryExtensions": true }, - "include": ["src/**/*"], + "include": ["src/**/*", "../plugin-bootstrap/src/relationships.ts", "../plugin-bootstrap/src/goals.ts", "../plugin-bootstrap/src/knowledge.ts"], "exclude": ["node_modules", "dist", "src/**/*.d.ts", "types/**/*.test.ts"] } diff --git a/packages/plugin-anthropic/src/index.ts b/packages/plugin-anthropic/src/index.ts index 6b7a67499a2..8080fd580e1 100644 --- a/packages/plugin-anthropic/src/index.ts +++ b/packages/plugin-anthropic/src/index.ts @@ -2,7 +2,7 @@ import { anthropic } from "@ai-sdk/anthropic"; import type { Plugin } from "@elizaos/core"; import { GenerateTextParams, - AsyncHandlerType + ModelClass } from "@elizaos/core"; import { generateText } from "ai"; import { z } from "zod"; @@ -37,8 +37,8 @@ export const anthropicPlugin: Plugin = { throw error; } }, - handlers: { - [AsyncHandlerType.TEXT_SMALL]: async ({ + models: { + [ModelClass.TEXT_SMALL]: async ({ runtime, context, stopSequences = [], @@ -60,7 +60,7 @@ export const anthropicPlugin: Plugin = { }, // TEXT_LARGE generation using Anthropics (e.g. using a "claude-3" model). - [AsyncHandlerType.TEXT_LARGE]: async ({ + [ModelClass.TEXT_LARGE]: async ({ runtime, context, stopSequences = [], diff --git a/packages/plugin-bootstrap/__tests__/actions/continue.test.ts b/packages/plugin-bootstrap/__tests__/actions/continue.test.ts index f8f8d684e9c..f94981c8bfd 100644 --- a/packages/plugin-bootstrap/__tests__/actions/continue.test.ts +++ b/packages/plugin-bootstrap/__tests__/actions/continue.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it, vi, beforeEach } from 'vitest'; import { continueAction } from '../../src/actions/continue'; -import { composeContext, generateMessageResponse, generateTrueOrFalse, AsyncHandlerType } from '@elizaos/core'; +import { composeContext, generateMessageResponse, generateTrueOrFalse, ModelClass } from '@elizaos/core'; vi.mock('@elizaos/core', () => ({ composeContext: vi.fn(), @@ -14,7 +14,7 @@ vi.mock('@elizaos/core', () => ({ }, messageCompletionFooter: '\nResponse format:\n```\n{"content": {"text": string}}\n```', booleanFooter: '\nResponse format: YES or NO', - AsyncHandlerType: { + ModelClass: { SMALL: 'small', LARGE: 'large' } diff --git a/packages/plugin-bootstrap/__tests__/evaluators/fact.test.ts b/packages/plugin-bootstrap/__tests__/evaluators/fact.test.ts index 99d9dab095e..70c11bf1da7 100644 --- a/packages/plugin-bootstrap/__tests__/evaluators/fact.test.ts +++ b/packages/plugin-bootstrap/__tests__/evaluators/fact.test.ts @@ -21,7 +21,7 @@ vi.mock('@elizaos/core', () => ({ } }) })), - AsyncHandlerType: { + ModelClass: { SMALL: 'small' } })); diff --git a/packages/plugin-bootstrap/__tests__/evaluators/goal.test.ts b/packages/plugin-bootstrap/__tests__/evaluators/goal.test.ts index 7c39c4e33bd..2b278321f9d 100644 --- a/packages/plugin-bootstrap/__tests__/evaluators/goal.test.ts +++ b/packages/plugin-bootstrap/__tests__/evaluators/goal.test.ts @@ -7,7 +7,7 @@ vi.mock('@elizaos/core', () => ({ generateText: vi.fn(), getGoals: vi.fn(), parseJsonArrayFromText: vi.fn(), - AsyncHandlerType: { + ModelClass: { SMALL: 'small' } })); diff --git a/packages/plugin-bootstrap/src/actions/continue.ts b/packages/plugin-bootstrap/src/actions/continue.ts index c3874cff299..c2635322f37 100644 --- a/packages/plugin-bootstrap/src/actions/continue.ts +++ b/packages/plugin-bootstrap/src/actions/continue.ts @@ -8,7 +8,7 @@ import { type HandlerCallback, type IAgentRuntime, type Memory, - AsyncHandlerType, + ModelClass, type State, } from "@elizaos/core"; @@ -167,7 +167,7 @@ export const continueAction: Action = { const response = await generateTrueOrFalse({ context: shouldRespondContext, - handlerType: AsyncHandlerType.TEXT_SMALL, + modelClass: ModelClass.TEXT_SMALL, runtime, }); @@ -194,7 +194,7 @@ export const continueAction: Action = { const response = await generateMessageResponse({ runtime, context, - handlerType: AsyncHandlerType.TEXT_LARGE, + modelClass: ModelClass.TEXT_LARGE, }); response.inReplyTo = message.id; diff --git a/packages/plugin-bootstrap/src/actions/followRoom.ts b/packages/plugin-bootstrap/src/actions/followRoom.ts index f67e3eda3a7..cdac3ad7226 100644 --- a/packages/plugin-bootstrap/src/actions/followRoom.ts +++ b/packages/plugin-bootstrap/src/actions/followRoom.ts @@ -6,7 +6,7 @@ import { type ActionExample, type IAgentRuntime, type Memory, - AsyncHandlerType, + ModelClass, type State, } from "@elizaos/core"; @@ -67,7 +67,7 @@ export const followRoomAction: Action = { const response = await generateTrueOrFalse({ runtime, context: shouldFollowContext, - handlerType: AsyncHandlerType.TEXT_LARGE, + modelClass: ModelClass.TEXT_LARGE, }); return response; diff --git a/packages/plugin-bootstrap/src/actions/muteRoom.ts b/packages/plugin-bootstrap/src/actions/muteRoom.ts index 04549abebc9..d1ae5e5d4f6 100644 --- a/packages/plugin-bootstrap/src/actions/muteRoom.ts +++ b/packages/plugin-bootstrap/src/actions/muteRoom.ts @@ -6,7 +6,7 @@ import { type ActionExample, type IAgentRuntime, type Memory, - AsyncHandlerType, + ModelClass, type State, } from "@elizaos/core"; @@ -54,7 +54,7 @@ export const muteRoomAction: Action = { const response = await generateTrueOrFalse({ runtime, context: shouldMuteContext, - handlerType: AsyncHandlerType.TEXT_LARGE, + modelClass: ModelClass.TEXT_LARGE, }); return response; diff --git a/packages/plugin-bootstrap/src/actions/unfollowRoom.ts b/packages/plugin-bootstrap/src/actions/unfollowRoom.ts index c999a60c382..0598445aecb 100644 --- a/packages/plugin-bootstrap/src/actions/unfollowRoom.ts +++ b/packages/plugin-bootstrap/src/actions/unfollowRoom.ts @@ -6,7 +6,7 @@ import { type ActionExample, type IAgentRuntime, type Memory, - AsyncHandlerType, + ModelClass, type State, } from "@elizaos/core"; @@ -52,7 +52,7 @@ export const unfollowRoomAction: Action = { const response = await generateTrueOrFalse({ runtime, context: shouldUnfollowContext, - handlerType: AsyncHandlerType.TEXT_LARGE, + modelClass: ModelClass.TEXT_LARGE, }); return response; diff --git a/packages/plugin-bootstrap/src/actions/unmuteRoom.ts b/packages/plugin-bootstrap/src/actions/unmuteRoom.ts index b111202e8eb..308cec076da 100644 --- a/packages/plugin-bootstrap/src/actions/unmuteRoom.ts +++ b/packages/plugin-bootstrap/src/actions/unmuteRoom.ts @@ -6,7 +6,7 @@ import { type ActionExample, type IAgentRuntime, type Memory, - AsyncHandlerType, + ModelClass, type State, } from "@elizaos/core"; @@ -52,7 +52,7 @@ export const unmuteRoomAction: Action = { const response = generateTrueOrFalse({ context: shouldUnmuteContext, runtime, - handlerType: AsyncHandlerType.TEXT_LARGE, + modelClass: ModelClass.TEXT_LARGE, }); return response; diff --git a/packages/plugin-bootstrap/src/evaluators/fact.ts b/packages/plugin-bootstrap/src/evaluators/fact.ts index 0118806749e..4ed418569de 100644 --- a/packages/plugin-bootstrap/src/evaluators/fact.ts +++ b/packages/plugin-bootstrap/src/evaluators/fact.ts @@ -6,7 +6,7 @@ import { type ActionExample, type IAgentRuntime, type Memory, - AsyncHandlerType, + ModelClass, type Evaluator, } from "@elizaos/core"; @@ -75,7 +75,7 @@ async function handler(runtime: IAgentRuntime, message: Memory) { const facts = await generateObjectArray({ runtime, context, - handlerType: AsyncHandlerType.TEXT_LARGE, + modelClass: ModelClass.TEXT_LARGE, schema: claimSchema, schemaName: "Fact", schemaDescription: "A fact about the user or the world", diff --git a/packages/plugin-bootstrap/src/evaluators/goal.ts b/packages/plugin-bootstrap/src/evaluators/goal.ts index 7ab9c175b78..be7a1f91f11 100644 --- a/packages/plugin-bootstrap/src/evaluators/goal.ts +++ b/packages/plugin-bootstrap/src/evaluators/goal.ts @@ -5,7 +5,7 @@ import { parseJsonArrayFromText } from "@elizaos/core"; import { type IAgentRuntime, type Memory, - AsyncHandlerType, + ModelClass, type Goal, type State, type Evaluator, @@ -64,7 +64,7 @@ async function handler( const response = await generateText({ runtime, context, - handlerType: AsyncHandlerType.TEXT_LARGE, + modelClass: ModelClass.TEXT_LARGE, }); // Parse the JSON response to extract goal updates diff --git a/packages/plugin-bootstrap/src/providers/facts.ts b/packages/plugin-bootstrap/src/providers/facts.ts index df2aa133ef4..4e6aa0f3831 100644 --- a/packages/plugin-bootstrap/src/providers/facts.ts +++ b/packages/plugin-bootstrap/src/providers/facts.ts @@ -3,7 +3,7 @@ import { formatMessages, IAgentRuntime, MemoryManager, - AsyncHandlerType + ModelClass } from "@elizaos/core"; import { formatFacts } from "../evaluators/fact.ts"; @@ -16,7 +16,7 @@ const factsProvider: Provider = { actors: state?.actorsData, }); - const embedding = await runtime.call(AsyncHandlerType.TEXT_EMBEDDING, recentMessages); + const embedding = await runtime.useModel(ModelClass.TEXT_EMBEDDING, recentMessages); const memoryManager = new MemoryManager({ runtime, diff --git a/packages/plugin-discord/__tests__/discord-client.test.ts b/packages/plugin-discord/__tests__/discord-client.test.ts index b47b26d0313..ee1cb0b8030 100644 --- a/packages/plugin-discord/__tests__/discord-client.test.ts +++ b/packages/plugin-discord/__tests__/discord-client.test.ts @@ -15,7 +15,6 @@ vi.mock('@elizaos/core', () => ({ generateMessageResponse: vi.fn(), generateShouldRespond: vi.fn(), composeContext: vi.fn(), - composeRandomUser: vi.fn(), })); // Mock discord.js Client diff --git a/packages/plugin-discord/src/actions/chat_with_attachments.ts b/packages/plugin-discord/src/actions/chat_with_attachments.ts index 3855709e387..899bd495f1c 100644 --- a/packages/plugin-discord/src/actions/chat_with_attachments.ts +++ b/packages/plugin-discord/src/actions/chat_with_attachments.ts @@ -3,7 +3,7 @@ import { type ActionExample, composeContext, type Content, generateText, type HandlerCallback, type IAgentRuntime, type Memory, - AsyncHandlerType, parseJSONObjectFromText, type State, trimTokens + ModelClass, parseJSONObjectFromText, type State, trimTokens } from "@elizaos/core"; import * as fs from "fs"; @@ -49,7 +49,7 @@ const getAttachmentIds = async ( const response = await generateText({ runtime, context, - handlerType: AsyncHandlerType.TEXT_SMALL, + modelClass: ModelClass.TEXT_SMALL, }); console.log("response", response); // try parsing to a json object @@ -197,7 +197,7 @@ const summarizeAction = { const summary = await generateText({ runtime, context, - handlerType: AsyncHandlerType.TEXT_SMALL, + modelClass: ModelClass.TEXT_SMALL, }); currentSummary = currentSummary + "\n" + summary; diff --git a/packages/plugin-discord/src/actions/download_media.ts b/packages/plugin-discord/src/actions/download_media.ts index 28af3057431..68c6b3c9539 100644 --- a/packages/plugin-discord/src/actions/download_media.ts +++ b/packages/plugin-discord/src/actions/download_media.ts @@ -9,7 +9,7 @@ import { type IAgentRuntime, type IVideoService, type Memory, - AsyncHandlerType, + ModelClass, ServiceType, type State, } from "@elizaos/core"; @@ -47,7 +47,7 @@ const getMediaUrl = async ( const response = await generateText({ runtime, context, - handlerType: AsyncHandlerType.TEXT_SMALL, + modelClass: ModelClass.TEXT_SMALL, }); const parsedResponse = parseJSONObjectFromText(response) as { diff --git a/packages/plugin-discord/src/actions/joinvoice.ts b/packages/plugin-discord/src/actions/joinvoice.ts index e4521d85cbe..7d9d9a699fd 100644 --- a/packages/plugin-discord/src/actions/joinvoice.ts +++ b/packages/plugin-discord/src/actions/joinvoice.ts @@ -9,7 +9,7 @@ import { type Memory, type State, generateText, - AsyncHandlerType, + ModelClass, } from "@elizaos/core"; import { type Channel, @@ -170,7 +170,7 @@ You should only respond with the name of the voice channel or none, no commentar const responseContent = await generateText({ runtime, context, - handlerType: AsyncHandlerType.TEXT_SMALL, + modelClass: ModelClass.TEXT_SMALL, }); runtime.databaseAdapter.log({ diff --git a/packages/plugin-discord/src/actions/summarize_conversation.ts b/packages/plugin-discord/src/actions/summarize_conversation.ts index 6a13d7ee9c3..7dc086bc0a1 100644 --- a/packages/plugin-discord/src/actions/summarize_conversation.ts +++ b/packages/plugin-discord/src/actions/summarize_conversation.ts @@ -10,7 +10,7 @@ import { type IAgentRuntime, type Media, type Memory, - AsyncHandlerType, + ModelClass, type State, } from "@elizaos/core"; export const summarizationTemplate = `# Summarized so far (we are adding to this) @@ -58,7 +58,7 @@ const getDateRange = async ( const response = await generateText({ runtime, context, - handlerType: AsyncHandlerType.TEXT_SMALL, + modelClass: ModelClass.TEXT_SMALL, }); console.log("response", response); // try parsing to a json object @@ -273,7 +273,7 @@ const summarizeAction = { const summary = await generateText({ runtime, context, - handlerType: AsyncHandlerType.TEXT_SMALL, + modelClass: ModelClass.TEXT_SMALL, }); currentSummary = currentSummary + "\n" + summary; diff --git a/packages/plugin-discord/src/actions/transcribe_media.ts b/packages/plugin-discord/src/actions/transcribe_media.ts index 0f59b53999f..2693367fae8 100644 --- a/packages/plugin-discord/src/actions/transcribe_media.ts +++ b/packages/plugin-discord/src/actions/transcribe_media.ts @@ -8,7 +8,7 @@ import { type HandlerCallback, type IAgentRuntime, type Memory, - AsyncHandlerType, + ModelClass, type State, } from "@elizaos/core"; @@ -47,7 +47,7 @@ const getMediaAttachmentId = async ( const response = await generateText({ runtime, context, - handlerType: AsyncHandlerType.TEXT_SMALL, + modelClass: ModelClass.TEXT_SMALL, }); console.log("response", response); diff --git a/packages/plugin-discord/src/attachments.ts b/packages/plugin-discord/src/attachments.ts index b0ca201c042..3be7d39b284 100644 --- a/packages/plugin-discord/src/attachments.ts +++ b/packages/plugin-discord/src/attachments.ts @@ -1,11 +1,11 @@ -import { generateCaption, generateText, trimTokens } from "@elizaos/core"; +import { generateText, trimTokens } from "@elizaos/core"; import { parseJSONObjectFromText } from "@elizaos/core"; import { type IAgentRuntime, type IPdfService, type IVideoService, type Media, - AsyncHandlerType, + ModelClass, ServiceType, } from "@elizaos/core"; import { type Attachment, Collection } from "discord.js"; @@ -36,7 +36,7 @@ async function generateSummary( const response = await generateText({ runtime, context: prompt, - handlerType: AsyncHandlerType.TEXT_SMALL, + modelClass: ModelClass.TEXT_SMALL, }); const parsedResponse = parseJSONObjectFromText(response); @@ -133,7 +133,7 @@ export class AttachmentManager { throw new Error("Unsupported audio/video format"); } - const transcription = await this.runtime.call(AsyncHandlerType.TRANSCRIPTION, audioBuffer); + const transcription = await this.runtime.useModel(ModelClass.TRANSCRIPTION, audioBuffer); const { title, description } = await generateSummary( this.runtime, transcription @@ -284,10 +284,8 @@ export class AttachmentManager { attachment: Attachment ): Promise<Media> { try { - const { description, title } = await generateCaption( - { imageUrl: attachment.url }, - this.runtime - ); + const { description, title } = await + this.runtime.useModel(ModelClass.IMAGE_DESCRIPTION, attachment.url); return { id: attachment.id, url: attachment.url, diff --git a/packages/plugin-discord/src/index.ts b/packages/plugin-discord/src/index.ts index 45c911a6a7c..9f102154bef 100644 --- a/packages/plugin-discord/src/index.ts +++ b/packages/plugin-discord/src/index.ts @@ -1,11 +1,10 @@ import { logger, - AsyncHandlerType, stringToUuid, type Character, type Client as ElizaClient, type IAgentRuntime, - type Plugin, + type Plugin } from "@elizaos/core"; import { Client, @@ -18,9 +17,17 @@ import { type User, } from "discord.js"; import { EventEmitter } from "events"; +import chat_with_attachments from "./actions/chat_with_attachments.ts"; +import download_media from "./actions/download_media.ts"; +import joinvoice from "./actions/joinvoice.ts"; +import leavevoice from "./actions/leavevoice.ts"; +import summarize from "./actions/summarize_conversation.ts"; +import transcribe_media from "./actions/transcribe_media.ts"; import { MessageManager } from "./messages.ts"; -import { VoiceManager } from "./voice.ts"; +import channelStateProvider from "./providers/channelState.ts"; +import voiceStateProvider from "./providers/voiceState.ts"; import { IDiscordClient } from "./types.ts"; +import { VoiceManager } from "./voice.ts"; export class DiscordClient extends EventEmitter implements IDiscordClient { apiToken: string; @@ -387,5 +394,17 @@ const discordPlugin: Plugin = { name: "discord", description: "Discord client plugin", clients: [DiscordClientInterface], + actions: [ + chat_with_attachments, + download_media, + joinvoice, + leavevoice, + summarize, + transcribe_media, + ], + providers: [ + channelStateProvider, + voiceStateProvider, + ] }; export default discordPlugin; \ No newline at end of file diff --git a/packages/plugin-discord/src/messages.ts b/packages/plugin-discord/src/messages.ts index a356e2b0db1..0afe95281be 100644 --- a/packages/plugin-discord/src/messages.ts +++ b/packages/plugin-discord/src/messages.ts @@ -1,8 +1,8 @@ import { - composeContext, composeRandomUser, type Content, generateMessageResponse, generateShouldRespond, type HandlerCallback, + composeContext, type Content, generateMessageResponse, generateShouldRespond, type HandlerCallback, type IAgentRuntime, type IBrowserService, type IVideoService, logger, type Media, - type Memory, AsyncHandlerType, ServiceType, + type Memory, ModelClass, ServiceType, type State, stringToUuid, type UUID } from "@elizaos/core"; import { @@ -362,7 +362,7 @@ export class MessageManager { // For voice channels, use text-to-speech for the error message const errorMessage = "Sorry, I had a glitch. What was that?"; - const audioStream = await this.runtime.call(AsyncHandlerType.TEXT_TO_SPEECH, errorMessage) + const audioStream = await this.runtime.useModel(ModelClass.TEXT_TO_SPEECH, errorMessage) await this.voiceManager.playAudioStream(userId, audioStream); } else { @@ -616,13 +616,13 @@ export class MessageManager { this.runtime.character.templates ?.discordShouldRespondTemplate || this.runtime.character.templates?.shouldRespondTemplate || - composeRandomUser(discordShouldRespondTemplate, 2), + discordShouldRespondTemplate, }); const response = await generateShouldRespond({ runtime: this.runtime, context: shouldRespondContext, - handlerType: AsyncHandlerType.TEXT_SMALL, + modelClass: ModelClass.TEXT_SMALL, }); if (response === "RESPOND") { @@ -658,7 +658,7 @@ export class MessageManager { const response = await generateMessageResponse({ runtime: this.runtime, context, - handlerType: AsyncHandlerType.TEXT_LARGE, + modelClass: ModelClass.TEXT_LARGE, }); if (!response) { diff --git a/packages/plugin-discord/src/utils.ts b/packages/plugin-discord/src/utils.ts index df14a9516f5..69dac38ff43 100644 --- a/packages/plugin-discord/src/utils.ts +++ b/packages/plugin-discord/src/utils.ts @@ -1,6 +1,6 @@ import { type IAgentRuntime, - AsyncHandlerType, + ModelClass, logger, generateText, trimTokens, @@ -66,7 +66,7 @@ export async function generateSummary( const response = await generateText({ runtime, context: prompt, - handlerType: AsyncHandlerType.TEXT_SMALL, + modelClass: ModelClass.TEXT_SMALL, }); const parsedResponse = parseJSONObjectFromText(response); diff --git a/packages/plugin-discord/src/voice.ts b/packages/plugin-discord/src/voice.ts index 465b224782f..79033ebf8d4 100644 --- a/packages/plugin-discord/src/voice.ts +++ b/packages/plugin-discord/src/voice.ts @@ -16,11 +16,10 @@ import { type HandlerCallback, type IAgentRuntime, type Memory, - AsyncHandlerType, + ModelClass, type State, type UUID, composeContext, - composeRandomUser, generateMessageResponse, generateShouldRespond, logger, @@ -587,7 +586,7 @@ export class VoiceManager extends EventEmitter { const wavBuffer = await this.convertOpusToWav(inputBuffer); console.log("Starting transcription..."); - const transcriptionText = await this.runtime.call(AsyncHandlerType.TRANSCRIPTION, wavBuffer) + const transcriptionText = await this.runtime.useModel(ModelClass.TRANSCRIPTION, wavBuffer) function isValidTranscription(text: string): boolean { if (!text || text.includes("[BLANK_AUDIO]")) return false; return true; @@ -733,7 +732,7 @@ export class VoiceManager extends EventEmitter { ); state = await this.runtime.updateRecentMessageState(state); - const responseStream = await this.runtime.call(AsyncHandlerType.TEXT_TO_SPEECH, content.text) + const responseStream = await this.runtime.useModel(ModelClass.TEXT_TO_SPEECH, content.text) if (responseStream) { await this.playAudioStream( @@ -828,13 +827,13 @@ export class VoiceManager extends EventEmitter { this.runtime.character.templates ?.discordShouldRespondTemplate || this.runtime.character.templates?.shouldRespondTemplate || - composeRandomUser(discordShouldRespondTemplate, 2), + discordShouldRespondTemplate, }); const response = await generateShouldRespond({ runtime: this.runtime, context: shouldRespondContext, - handlerType: AsyncHandlerType.TEXT_SMALL, + modelClass: ModelClass.TEXT_SMALL, }); if (response === "RESPOND") { @@ -862,7 +861,7 @@ export class VoiceManager extends EventEmitter { const response = await generateMessageResponse({ runtime: this.runtime, context, - handlerType: AsyncHandlerType.TEXT_SMALL, + modelClass: ModelClass.TEXT_SMALL, }); response.source = "discord"; diff --git a/packages/plugin-dummy-inventory/.npmignore b/packages/plugin-dummy-inventory/.npmignore new file mode 100644 index 00000000000..078562eceab --- /dev/null +++ b/packages/plugin-dummy-inventory/.npmignore @@ -0,0 +1,6 @@ +* + +!dist/** +!package.json +!readme.md +!tsup.config.ts \ No newline at end of file diff --git a/packages/plugin-dummy-inventory/README.MD b/packages/plugin-dummy-inventory/README.MD new file mode 100644 index 00000000000..ed4f95d1983 --- /dev/null +++ b/packages/plugin-dummy-inventory/README.MD @@ -0,0 +1,320 @@ +# @elizaos/plugin-solana + +Core Solana blockchain plugin for Eliza OS that provides essential services and actions for token operations, trading, and DeFi integrations. + +## Overview + +The Solana plugin serves as a foundational component of Eliza OS, bridging Solana blockchain capabilities with the Eliza ecosystem. It provides crucial services for token operations, trading, portfolio management, and DeFi integrations, enabling both automated and user-directed interactions with the Solana blockchain. + +## Features + +### Token Operations +- **Token Creation**: Deploy new tokens with customizable metadata +- **Token Transfers**: Send and receive tokens securely +- **Balance Management**: Track and manage token balances +- **Portfolio Analytics**: Real-time portfolio valuation and tracking + +### Trading Operations +- **Token Swaps**: Execute trades between tokens using Jupiter aggregator +- **Order Management**: Place and track token orders +- **Price Monitoring**: Real-time price feeds and historical data +- **Automated Trading**: Configurable trading strategies and automation + +### DeFi Integration +- **Liquidity Analysis**: Monitor and analyze pool liquidity +- **Market Making**: Automated market making capabilities +- **Yield Optimization**: Smart routing for optimal yields +- **Risk Management**: Advanced risk scoring and monitoring + +### Trust & Security +- **Trust Scoring**: Dynamic trust score calculation for tokens +- **Risk Assessment**: Real-time risk evaluation for trades +- **Performance Tracking**: Historical performance monitoring +- **Simulation Mode**: Test strategies without real transactions + +## Security Features + +### Access Control +- **Wallet Management**: Secure wallet key derivation and storage +- **Permission Scoping**: Granular control over trading permissions +- **TEE Integration**: Trusted Execution Environment support +- **Key Protection**: Secure private key handling + +### Risk Management +- **Trade Limits**: Configurable transaction limits +- **Slippage Protection**: Automatic slippage controls +- **Validation Checks**: Multi-level transaction validation +- **Simulation Support**: Pre-execution transaction simulation +## Installation + +```bash +npm install @elizaos/plugin-solana +``` + +## Configuration + +Configure the plugin by setting the following environment variables: + +```typescript +const solanaEnvSchema = { + WALLET_SECRET_SALT: string (optional), + WALLET_SECRET_KEY: string, + WALLET_PUBLIC_KEY: string, + SOL_ADDRESS: string, + SLIPPAGE: string, + RPC_URL: string, + HELIUS_API_KEY: string, + BIRDEYE_API_KEY: string +} +``` + +## Usage + +### Basic Setup +```typescript +import { solanaPlugin } from "@elizaos/plugin-solana"; + +// Initialize the plugin +const runtime = await initializeRuntime({ + plugins: [solanaPlugin] +}); +``` + +### Services + +#### TokenProvider +Manages token operations and information retrieval. +```typescript +const tokenProvider = new TokenProvider(tokenAddress, walletProvider, cacheManager); +await tokenProvider.getTokensInWallet(runtime); +``` + +#### WalletProvider +Handles wallet operations and portfolio management. +```typescript +const walletProvider = new WalletProvider(connection, publicKey); +await walletProvider.getFormattedPortfolio(runtime); +``` + +#### TrustScoreProvider +Evaluates and manages trust scores for tokens and trading activities. +```typescript +const trustScore = await runtime.getProvider("trustScore"); +``` +## Actions + +### executeSwap +Executes a token swap using Jupiter aggregator. + +```typescript +// Example usage +const result = await runtime.executeAction("EXECUTE_SWAP", { + inputTokenSymbol: "SOL", + outputTokenSymbol: "USDC", + amount: 0.1 +}); +``` + +### transferToken +Transfers tokens between wallets. + +```typescript +// Example usage +const result = await runtime.executeAction("TRANSFER_TOKEN", { + tokenAddress: "TokenAddressHere", + recipient: "RecipientAddressHere", + amount: "1000" +}); +``` + +### takeOrder +Places a buy order based on conviction level. + +```typescript +// Example usage +const result = await runtime.executeAction("TAKE_ORDER", { + ticker: "SOL", + contractAddress: "ContractAddressHere" +}); +``` + +### pumpfun +Creates and buys tokens on pump.fun. + +```typescript +// Example usage +const result = await runtime.executeAction("CREATE_AND_BUY_TOKEN", { + tokenMetadata: { + name: "TokenName", + symbol: "SYMBOL", + description: "Token description", + image_description: "Image description" + }, + buyAmountSol: 0.1 +}); +``` + +### fomo +Creates and buys tokens on fomo.fund. + +```typescript +// Example usage +const result = await runtime.executeAction("CREATE_AND_BUY_TOKEN", { + tokenMetadata: { + name: "TokenName", + symbol: "SYMBOL", + description: "Token description", + image_description: "Image description" + }, + buyAmountSol: 0.1, + requiredLiquidity: 1000 +}); +``` +### executeSwapForDAO +Executes token swaps for DAO operations. + +```typescript +// Example usage +const result = await runtime.executeAction("EXECUTE_SWAP_DAO", { + inputTokenSymbol: "SOL", + outputTokenSymbol: "USDC", + amount: 0.1 +}); +``` + +## Performance Optimization + +1. **Cache Management** + - Implement token data caching + - Configure cache TTL settings + - Monitor cache hit rates + +2. **RPC Optimization** + - Use connection pooling + - Implement request batching + - Monitor RPC usage + +3. **Transaction Management** + - Optimize transaction bundling + - Implement retry strategies + - Monitor transaction success rates + + +## System Requirements + +- Node.js 16.x or higher +- Solana CLI tools (optional) +- Minimum 4GB RAM recommended +- Stable internet connection +- Access to Solana RPC endpoint + +## Troubleshooting + +### Common Issues + +1. **Wallet Connection Failures** +```bash +Error: Failed to connect to wallet +``` +- Verify RPC endpoint is accessible +- Check wallet configuration settings +- Ensure proper network selection + +2. **Transaction Errors** +```bash +Error: Transaction simulation failed +``` +- Check account balances +- Verify transaction parameters +- Ensure proper fee configuration + +3. **Price Feed Issues** +```bash +Error: Unable to fetch price data +``` +- Verify API key configuration +- Check network connectivity +- Ensure price feed service status + +## Safety & Security +### Best Practices +1. **Environment Variables** + - Store sensitive keys in environment variables + - Use .env.example for non-sensitive defaults + - Never commit real credentials to version control + +2. **Transaction Limits** + - Set maximum transaction amounts + - Implement daily trading limits + - Configure per-token restrictions + +3. **Monitoring** + - Track failed transaction attempts + - Monitor unusual trading patterns + - Log security-relevant events + +4. **Recovery** + - Implement transaction rollback mechanisms + - Maintain backup RPC endpoints + - Document recovery procedures + + +## Performance Optimization + +1. **Cache Management** + - Implement token data caching + - Configure cache TTL settings + - Monitor cache hit rates + +2. **RPC Optimization** + - Use connection pooling + - Implement request batching + - Monitor RPC usage + +3. **Transaction Management** + - Optimize transaction bundling + - Implement retry strategies + - Monitor transaction success rates + +## Support + +For issues and feature requests, please: +1. Check the troubleshooting guide above +2. Review existing GitHub issues +3. Submit a new issue with: + - System information + - Error logs + - Steps to reproduce + - Transaction IDs (if applicable) + +## Contributing + +Contributions are welcome! Please see the [CONTRIBUTING.md](CONTRIBUTING.md) file for more information. + +## Credits + +This plugin integrates with and builds upon several key technologies: + +- [Solana](https://solana.com/) - The core blockchain platform +- [Solana Web3.js](https://github.com/solana-labs/solana-web3.js) - Core Solana interactions +- [SPL Token](https://spl.solana.com/) - Token program interactions +- [Jupiter](https://jup.ag/) - Token swap aggregation +- [Birdeye](https://birdeye.so/) - Price feeds and analytics +- [Helius](https://helius.xyz/) - Enhanced RPC services +- [Anchor](https://project-serum.github.io/anchor/) - Smart contract framework +- [FOMO](https://fomo.fund/) - Token creation and trading +- [Pump.fun](https://pump.fun/) - Token creation and trading + +Special thanks to: +- The Solana ecosystem and all the open-source contributors who make these integrations possible. +- The Eliza community for their contributions and feedback. + +For more information about Solana blockchain capabilities: +- [Solana Documentation](https://docs.solana.com/) +- [Solana Developer Portal](https://solana.com/developers) +- [Solana Network Dashboard](https://solscan.io/) +- [Solana GitHub Repository](https://github.com/solana-labs/solana) + +## License + +This plugin is part of the Eliza project. See the main project repository for license information. diff --git a/packages/plugin-dummy-inventory/eslint.config.mjs b/packages/plugin-dummy-inventory/eslint.config.mjs new file mode 100644 index 00000000000..92fe5bbebef --- /dev/null +++ b/packages/plugin-dummy-inventory/eslint.config.mjs @@ -0,0 +1,3 @@ +import eslintGlobalConfig from "../../eslint.config.mjs"; + +export default [...eslintGlobalConfig]; diff --git a/packages/plugin-dummy-inventory/package.json b/packages/plugin-dummy-inventory/package.json new file mode 100644 index 00000000000..cbd8aadb88b --- /dev/null +++ b/packages/plugin-dummy-inventory/package.json @@ -0,0 +1,31 @@ +{ + "name": "@elizaos/plugin-dummy-inventory", + "version": "0.2.0-alpha.1", + "type": "module", + "main": "dist/index.js", + "module": "dist/index.js", + "types": "dist/index.d.ts", + "exports": { + "./package.json": "./package.json", + ".": { + "import": { + "@elizaos/source": "./src/index.ts", + "types": "./dist/index.d.ts", + "default": "./dist/index.js" + } + } + }, + "files": [ + "dist" + ], + "dependencies": { + "@elizaos/core": "workspace:*", + "tsup": "8.3.5" + }, + "scripts": { + "build": "tsup --format esm --dts", + "dev": "tsup --format esm --dts --watch", + "lint": "eslint --fix --cache .", + "test": "vitest run" + } +} diff --git a/packages/plugin-dummy-inventory/src/index.ts b/packages/plugin-dummy-inventory/src/index.ts new file mode 100644 index 00000000000..fb11e4296df --- /dev/null +++ b/packages/plugin-dummy-inventory/src/index.ts @@ -0,0 +1,12 @@ +export * from "./inventory/wallet.ts"; + +import { Plugin } from "@elizaos/core"; +import { inventoryProvider } from "./inventory/wallet.ts"; + +export const dummyInventoryPlugin: Plugin = { + name: "dummy-inventory", + description: "Dummy Inventory Plugin for Eliza", + inventoryProviders: [inventoryProvider] +}; + +export default dummyInventoryPlugin; diff --git a/packages/plugin-dummy-inventory/src/inventory/actions/swap.ts b/packages/plugin-dummy-inventory/src/inventory/actions/swap.ts new file mode 100644 index 00000000000..d2ad80488d7 --- /dev/null +++ b/packages/plugin-dummy-inventory/src/inventory/actions/swap.ts @@ -0,0 +1,16 @@ +import { InventoryAction, IAgentRuntime } from "@elizaos/core"; +import { z } from "zod"; + +export const swapAction: InventoryAction = { + name: 'swap', + description: 'Swap one inventory item for another', + parameters: z.object({ + fromContractAddress: z.string(), + toContractAddress: z.string(), + quantity: z.number(), + }), + handler: async (_runtime: IAgentRuntime, params: any, _callback: any | undefined) => { + console.log("Swapping", params); + return JSON.stringify(params.item); + }, + }; \ No newline at end of file diff --git a/packages/plugin-dummy-inventory/src/inventory/actions/transfer.ts b/packages/plugin-dummy-inventory/src/inventory/actions/transfer.ts new file mode 100644 index 00000000000..98302e76e52 --- /dev/null +++ b/packages/plugin-dummy-inventory/src/inventory/actions/transfer.ts @@ -0,0 +1,16 @@ +import { InventoryAction, IAgentRuntime } from "@elizaos/core"; +import { z } from "zod"; + +export const transferAction: InventoryAction = { + name: 'transfer', + description: 'Call some inventory action', + parameters: z.object({ + assetContractAddress: z.string(), + transferToAddress: z.string(), + quantity: z.number(), + }), + handler: async (_runtime: IAgentRuntime, params: any, _callback: any | undefined) => { + console.log("Transferring", params); + + }, + }; \ No newline at end of file diff --git a/packages/plugin-dummy-inventory/src/inventory/wallet.ts b/packages/plugin-dummy-inventory/src/inventory/wallet.ts new file mode 100644 index 00000000000..ad224466731 --- /dev/null +++ b/packages/plugin-dummy-inventory/src/inventory/wallet.ts @@ -0,0 +1,20 @@ +import { IAgentRuntime, InventoryItem, InventoryProvider } from "@elizaos/core"; +import { swapAction } from "./actions/swap"; +import { transferAction } from "./actions/transfer"; + +// example inventory item +const inventoryItem: InventoryItem = { + name: 'ai16z', + ticker: 'ai16z', + address: 'AM84n1iLdxgVTAyENBcLdjXoyvjentTbu5Q6EpKV1PeG', + description: + 'ai16z is the first AI VC fund, fully managed by Marc AIndreessen with recommendations from members of the DAO.', + quantity: 100, + }; + + export const inventoryProvider: InventoryProvider = { + name: 'Example Inventory Provider', + description: 'Inventory of items', + providers: (runtime: IAgentRuntime, params: any) => Promise.resolve([inventoryItem]), + actions: [swapAction, transferAction], + }; \ No newline at end of file diff --git a/packages/plugin-dummy-inventory/tsconfig.json b/packages/plugin-dummy-inventory/tsconfig.json new file mode 100644 index 00000000000..73993deaaf7 --- /dev/null +++ b/packages/plugin-dummy-inventory/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../core/tsconfig.json", + "compilerOptions": { + "outDir": "dist", + "rootDir": "src" + }, + "include": [ + "src/**/*.ts" + ] +} \ No newline at end of file diff --git a/packages/plugin-dummy-inventory/tsup.config.ts b/packages/plugin-dummy-inventory/tsup.config.ts new file mode 100644 index 00000000000..dd25475bb63 --- /dev/null +++ b/packages/plugin-dummy-inventory/tsup.config.ts @@ -0,0 +1,29 @@ +import { defineConfig } from "tsup"; + +export default defineConfig({ + entry: ["src/index.ts"], + outDir: "dist", + sourcemap: true, + clean: true, + format: ["esm"], // Ensure you're targeting CommonJS + external: [ + "dotenv", // Externalize dotenv to prevent bundling + "fs", // Externalize fs to use Node.js built-in module + "path", // Externalize other built-ins if necessary + "@reflink/reflink", + "@node-llama-cpp", + "https", + "http", + "agentkeepalive", + "safe-buffer", + "base-x", + "bs58", + "borsh", + "@solana/buffer-layout", + "stream", + "buffer", + "querystring", + "amqplib", + // Add other modules you want to externalize + ], +}); diff --git a/packages/plugin-evm b/packages/plugin-evm new file mode 160000 index 00000000000..ade452e9a5f --- /dev/null +++ b/packages/plugin-evm @@ -0,0 +1 @@ +Subproject commit ade452e9a5fb2d7d5751b0f8902a119e5e43972b diff --git a/packages/plugin-local-ai/src/index.ts b/packages/plugin-local-ai/src/index.ts index 280d4c2beb3..c6951889a8b 100644 --- a/packages/plugin-local-ai/src/index.ts +++ b/packages/plugin-local-ai/src/index.ts @@ -1,4 +1,4 @@ -import { AsyncHandlerType, Plugin, logger } from "@elizaos/core"; +import { ModelClass, Plugin, logger } from "@elizaos/core"; import { AutoTokenizer } from "@huggingface/transformers"; import { EmbeddingModel, FlagEmbedding } from "fastembed"; import path from "node:path"; @@ -134,9 +134,9 @@ export const localAIPlugin: Plugin = { } }, - handlers: { + models: { // Text generation for small tasks - [AsyncHandlerType.TEXT_SMALL]: async ({ + [ModelClass.TEXT_SMALL]: async ({ context, stopSequences = [], runtime, @@ -155,7 +155,7 @@ export const localAIPlugin: Plugin = { }, // Text generation for larger tasks - [AsyncHandlerType.TEXT_LARGE]: async ({ + [ModelClass.TEXT_LARGE]: async ({ context, stopSequences = [], runtime, @@ -172,7 +172,7 @@ export const localAIPlugin: Plugin = { }, // Text embedding using FastEmbed - [AsyncHandlerType.TEXT_EMBEDDING]: async ({ text }) => { + [ModelClass.TEXT_EMBEDDING]: async ({ text }) => { try { return await localAIManager.generateEmbedding(text); } catch (error) { @@ -182,7 +182,7 @@ export const localAIPlugin: Plugin = { }, // Text tokenization using AutoTokenizer - [AsyncHandlerType.TEXT_TOKENIZER_ENCODE]: async ({ text }) => { + [ModelClass.TEXT_TOKENIZER_ENCODE]: async ({ text }) => { try { if (!localAIManager.tokenizer) { throw new Error("Tokenizer not initialized"); @@ -195,7 +195,7 @@ export const localAIPlugin: Plugin = { }, // Text detokenization using AutoTokenizer - [AsyncHandlerType.TEXT_TOKENIZER_DECODE]: async ({ tokens }) => { + [ModelClass.TEXT_TOKENIZER_DECODE]: async ({ tokens }) => { try { if (!localAIManager.tokenizer) { throw new Error("Tokenizer not initialized"); @@ -208,7 +208,7 @@ export const localAIPlugin: Plugin = { }, // Image description using local Florence model - [AsyncHandlerType.IMAGE_DESCRIPTION]: async (imageUrlw) => { + [ModelClass.IMAGE_DESCRIPTION]: async (imageUrlw) => { try { // TODO: Add florence diff --git a/packages/plugin-node/src/environment.ts b/packages/plugin-node/src/environment.ts deleted file mode 100644 index cb11bccbd42..00000000000 --- a/packages/plugin-node/src/environment.ts +++ /dev/null @@ -1,104 +0,0 @@ -import type { IAgentRuntime } from "@elizaos/core"; -import { z } from "zod"; - -export const nodeEnvSchema = z.object({ - OPENAI_API_KEY: z.string().min(1, "OpenAI API key is required"), - - // Core settings - ELEVENLABS_XI_API_KEY: z.string().optional(), - - // All other settings optional with defaults - ELEVENLABS_MODEL_ID: z.string().optional(), - ELEVENLABS_VOICE_ID: z.string().optional(), - ELEVENLABS_VOICE_STABILITY: z.string().optional(), - ELEVENLABS_VOICE_SIMILARITY_BOOST: z.string().optional(), - ELEVENLABS_VOICE_STYLE: z.string().optional(), - ELEVENLABS_VOICE_USE_SPEAKER_BOOST: z.string().optional(), - ELEVENLABS_OPTIMIZE_STREAMING_LATENCY: z.string().optional(), - ELEVENLABS_OUTPUT_FORMAT: z.string().optional(), - VITS_VOICE: z.string().optional(), - VITS_MODEL: z.string().optional(), -}); - -export type NodeConfig = z.infer<typeof nodeEnvSchema>; - -export async function validateNodeConfig( - runtime: IAgentRuntime -): Promise<NodeConfig> { - try { - const voiceSettings = runtime.character.settings?.voice; - const elevenlabs = voiceSettings?.elevenlabs; - - // Only include what's absolutely required - const config = { - OPENAI_API_KEY: - runtime.getSetting("OPENAI_API_KEY") || - process.env.OPENAI_API_KEY, - ELEVENLABS_XI_API_KEY: - runtime.getSetting("ELEVENLABS_XI_API_KEY") || - process.env.ELEVENLABS_XI_API_KEY, - - // Use character card settings first, fall back to env vars, then defaults - ...(runtime.getSetting("ELEVENLABS_XI_API_KEY") && { - ELEVENLABS_MODEL_ID: - elevenlabs?.model || - process.env.ELEVENLABS_MODEL_ID || - "eleven_monolingual_v1", - ELEVENLABS_VOICE_ID: - elevenlabs?.voiceId || process.env.ELEVENLABS_VOICE_ID, - ELEVENLABS_VOICE_STABILITY: - elevenlabs?.stability || - process.env.ELEVENLABS_VOICE_STABILITY || - "0.5", - ELEVENLABS_VOICE_SIMILARITY_BOOST: - elevenlabs?.similarityBoost || - process.env.ELEVENLABS_VOICE_SIMILARITY_BOOST || - "0.75", - ELEVENLABS_VOICE_STYLE: - elevenlabs?.style || - process.env.ELEVENLABS_VOICE_STYLE || - "0", - ELEVENLABS_VOICE_USE_SPEAKER_BOOST: - elevenlabs?.useSpeakerBoost || - process.env.ELEVENLABS_VOICE_USE_SPEAKER_BOOST || - "true", - ELEVENLABS_OPTIMIZE_STREAMING_LATENCY: - process.env.ELEVENLABS_OPTIMIZE_STREAMING_LATENCY || "0", - ELEVENLABS_OUTPUT_FORMAT: - process.env.ELEVENLABS_OUTPUT_FORMAT || "pcm_16000", - }), - - // VITS settings - VITS_VOICE: voiceSettings?.model || process.env.VITS_VOICE, - VITS_MODEL: process.env.VITS_MODEL, - - // AWS settings (only include if present) - ...(runtime.getSetting("AWS_ACCESS_KEY_ID") && { - AWS_ACCESS_KEY_ID: runtime.getSetting("AWS_ACCESS_KEY_ID"), - AWS_SECRET_ACCESS_KEY: runtime.getSetting( - "AWS_SECRET_ACCESS_KEY" - ), - AWS_REGION: runtime.getSetting("AWS_REGION"), - AWS_S3_BUCKET: runtime.getSetting("AWS_S3_BUCKET"), - AWS_S3_UPLOAD_PATH: runtime.getSetting("AWS_S3_UPLOAD_PATH"), - AWS_S3_ENDPOINT: runtime.getSetting("AWS_S3_ENDPOINT"), - AWS_S3_SSL_ENABLED: runtime.getSetting("AWS_S3_SSL_ENABLED"), - AWS_S3_FORCE_PATH_STYLE: runtime.getSetting( - "AWS_S3_FORCE_PATH_STYLE" - ), - }), - }; - - return nodeEnvSchema.parse(config); - } catch (error) { - if (error instanceof z.ZodError) { - const errorMessages = error.errors - .map((err) => `${err.path.join(".")}: ${err.message}`) - .join("\n"); - throw new Error( - `Node configuration validation failed:\n${errorMessages}` - ); - } - throw error; - } -} diff --git a/packages/plugin-node/src/services/browser.ts b/packages/plugin-node/src/services/browser.ts index dfdc9681dc4..7ca0363c2a4 100644 --- a/packages/plugin-node/src/services/browser.ts +++ b/packages/plugin-node/src/services/browser.ts @@ -2,7 +2,7 @@ import { generateText, type IBrowserService, trimTokens } from "@elizaos/core"; import { parseJSONObjectFromText } from "@elizaos/core"; import { Service } from "@elizaos/core"; import { settings } from "@elizaos/core"; -import { type IAgentRuntime, AsyncHandlerType, ServiceType } from "@elizaos/core"; +import { type IAgentRuntime, ModelClass, ServiceType } from "@elizaos/core"; import { stringToUuid } from "@elizaos/core"; import { PlaywrightBlocker } from "@cliqz/adblocker-playwright"; import CaptchaSolver from "capsolver-npm"; @@ -38,7 +38,7 @@ async function generateSummary( const response = await generateText({ runtime, context: prompt, - handlerType: AsyncHandlerType.TEXT_SMALL, + modelClass: ModelClass.TEXT_SMALL, }); const parsedResponse = parseJSONObjectFromText(response); diff --git a/packages/plugin-node/src/services/video.ts b/packages/plugin-node/src/services/video.ts index 0fd65b7cf31..52105f18f5c 100644 --- a/packages/plugin-node/src/services/video.ts +++ b/packages/plugin-node/src/services/video.ts @@ -6,7 +6,7 @@ import { ServiceType, stringToUuid, logger, - AsyncHandlerType, + ModelClass, } from "@elizaos/core"; import ffmpeg from "fluent-ffmpeg"; import fs from "fs"; @@ -378,7 +378,7 @@ export class VideoService extends Service implements IVideoService { logger.log("Starting transcription..."); const startTime = Date.now(); - const transcript = await runtime.call(AsyncHandlerType.TRANSCRIPTION, audioBuffer); + const transcript = await runtime.useModel(ModelClass.TRANSCRIPTION, audioBuffer); const endTime = Date.now(); logger.log( diff --git a/packages/plugin-node/src/templates.ts b/packages/plugin-node/src/templates.ts deleted file mode 100644 index de1261d296b..00000000000 --- a/packages/plugin-node/src/templates.ts +++ /dev/null @@ -1,15 +0,0 @@ -export const getFileLocationTemplate = ` -{{recentMessages}} - -extract the file location from the users message or the attachment in the message history that they are referring to. -your job is to infer the correct attachment based on the recent messages, the users most recent message, and the attachments in the message -image attachments are the result of the users uploads, or images you have created. -only respond with the file location, no other text. -typically the file location is in the form of a URL or a file path. - -\`\`\`json -{ - "fileLocation": "file location text goes here" -} -\`\`\` -`; diff --git a/packages/plugin-openai/src/index.ts b/packages/plugin-openai/src/index.ts index 6dd21ea99e2..4fb8cde3135 100644 --- a/packages/plugin-openai/src/index.ts +++ b/packages/plugin-openai/src/index.ts @@ -3,16 +3,16 @@ import type { Plugin } from "@elizaos/core"; import { DetokenizeTextParams, GenerateTextParams, - AsyncHandlerType, + ModelClass, TokenizeTextParams, } from "@elizaos/core"; import { generateText as aiGenerateText } from "ai"; import { encodingForModel, type TiktokenModel } from "js-tiktoken"; import { z } from "zod"; -async function tokenizeText(model: AsyncHandlerType, context: string) { +async function tokenizeText(model: ModelClass, context: string) { const modelName = - model === AsyncHandlerType.TEXT_SMALL + model === ModelClass.TEXT_SMALL ? process.env.OPENAI_SMALL_MODEL ?? process.env.SMALL_MODEL ?? "gpt-4o-mini" @@ -22,9 +22,9 @@ async function tokenizeText(model: AsyncHandlerType, context: string) { return tokens; } -async function detokenizeText(model: AsyncHandlerType, tokens: number[]) { +async function detokenizeText(model: ModelClass, tokens: number[]) { const modelName = - model === AsyncHandlerType.TEXT_SMALL + model === ModelClass.TEXT_SMALL ? process.env.OPENAI_SMALL_MODEL ?? process.env.SMALL_MODEL ?? "gpt-4o-mini" @@ -77,8 +77,8 @@ export const openaiPlugin: Plugin = { throw error; } }, - handlers: { - [AsyncHandlerType.TEXT_EMBEDDING]: async (text: string | null) => { + models: { + [ModelClass.TEXT_EMBEDDING]: async (text: string | null) => { if (!text) { // Return zero vector of appropriate length for model return new Array(1536).fill(0); @@ -106,19 +106,19 @@ export const openaiPlugin: Plugin = { const data = await response.json() as { data: [{ embedding: number[] }] }; return data.data[0].embedding; }, - [AsyncHandlerType.TEXT_TOKENIZER_ENCODE]: async ({ + [ModelClass.TEXT_TOKENIZER_ENCODE]: async ({ context, - handlerType = AsyncHandlerType.TEXT_LARGE, + modelClass = ModelClass.TEXT_LARGE, }: TokenizeTextParams) => { - return await tokenizeText(handlerType ?? AsyncHandlerType.TEXT_LARGE, context); + return await tokenizeText(modelClass ?? ModelClass.TEXT_LARGE, context); }, - [AsyncHandlerType.TEXT_TOKENIZER_DECODE]: async ({ + [ModelClass.TEXT_TOKENIZER_DECODE]: async ({ tokens, - handlerType = AsyncHandlerType.TEXT_LARGE, + modelClass = ModelClass.TEXT_LARGE, }: DetokenizeTextParams) => { - return await detokenizeText(handlerType ?? AsyncHandlerType.TEXT_LARGE, tokens); + return await detokenizeText(modelClass ?? ModelClass.TEXT_LARGE, tokens); }, - [AsyncHandlerType.TEXT_SMALL]: async ({ + [ModelClass.TEXT_SMALL]: async ({ runtime, context, stopSequences = [], @@ -154,7 +154,7 @@ export const openaiPlugin: Plugin = { return openaiResponse; }, - [AsyncHandlerType.TEXT_LARGE]: async ({ + [ModelClass.TEXT_LARGE]: async ({ runtime, context, stopSequences = [], @@ -192,7 +192,7 @@ export const openaiPlugin: Plugin = { return openaiResponse; }, - [AsyncHandlerType.IMAGE]: async (params: { + [ModelClass.IMAGE]: async (params: { prompt: string; n?: number; size?: string; @@ -218,7 +218,7 @@ export const openaiPlugin: Plugin = { const typedData = data as { data: { url: string }[] }; return typedData.data; }, - [AsyncHandlerType.IMAGE_DESCRIPTION]: async (imageUrl: string) => { + [ModelClass.IMAGE_DESCRIPTION]: async (imageUrl: string) => { console.log("IMAGE_DESCRIPTION") const baseURL = process.env.OPENAI_BASE_URL ?? "https://api.openai.com/v1"; @@ -264,7 +264,7 @@ export const openaiPlugin: Plugin = { description: descriptionMatch[1] }; }, - [AsyncHandlerType.TRANSCRIPTION]: async (audioBuffer: Buffer) => { + [ModelClass.TRANSCRIPTION]: async (audioBuffer: Buffer) => { console.log("audioBuffer", audioBuffer) const baseURL = process.env.OPENAI_BASE_URL ?? "https://api.openai.com/v1"; diff --git a/packages/plugin-solana b/packages/plugin-solana new file mode 160000 index 00000000000..cfe8c8351f2 --- /dev/null +++ b/packages/plugin-solana @@ -0,0 +1 @@ +Subproject commit cfe8c8351f23d87a70f5a4987e8185c293aea6b0 diff --git a/packages/plugin-telegram/src/messageManager.ts b/packages/plugin-telegram/src/messageManager.ts index bb765b8dfe2..cd8a09cbea1 100644 --- a/packages/plugin-telegram/src/messageManager.ts +++ b/packages/plugin-telegram/src/messageManager.ts @@ -1,7 +1,6 @@ import { - AsyncHandlerType, + ModelClass, composeContext, - composeRandomUser, type Content, generateMessageResponse, generateShouldRespond, @@ -122,7 +121,7 @@ export class MessageManager { if (imageUrl) { const { title, description } = - await this.runtime.call(AsyncHandlerType.IMAGE_DESCRIPTION, imageUrl) + await this.runtime.useModel(ModelClass.IMAGE_DESCRIPTION, imageUrl) return { description: `[Image: ${title}\n${description}]` }; } } catch (error) { @@ -168,13 +167,13 @@ export class MessageManager { this.runtime.character.templates ?.telegramShouldRespondTemplate || this.runtime.character?.templates?.shouldRespondTemplate || - composeRandomUser(telegramShouldRespondTemplate, 2), + telegramShouldRespondTemplate, }); const response = await generateShouldRespond({ runtime: this.runtime, context: shouldRespondContext, - handlerType: AsyncHandlerType.TEXT_SMALL, + modelClass: ModelClass.TEXT_SMALL, }); return response === "RESPOND"; @@ -338,7 +337,7 @@ export class MessageManager { const response = await generateMessageResponse({ runtime: this.runtime, context, - handlerType: AsyncHandlerType.TEXT_LARGE, + modelClass: ModelClass.TEXT_LARGE, }); if (!response) { diff --git a/packages/plugin-twitter/src/SttTtsSpacesPlugin.ts b/packages/plugin-twitter/src/SttTtsSpacesPlugin.ts index 5b8ad7f2589..2d8924b3ab6 100644 --- a/packages/plugin-twitter/src/SttTtsSpacesPlugin.ts +++ b/packages/plugin-twitter/src/SttTtsSpacesPlugin.ts @@ -7,11 +7,10 @@ import { type Plugin, type State, composeContext, - composeRandomUser, logger, generateMessageResponse, generateShouldRespond, - AsyncHandlerType, + ModelClass, stringToUuid } from "@elizaos/core"; import type { @@ -288,7 +287,7 @@ export class SttTtsPlugin implements Plugin { const wavBuffer = await this.convertPcmToWavInMemory(merged, 48000); // Whisper STT - const sttText = await this.runtime.call(AsyncHandlerType.TRANSCRIPTION, wavBuffer); + const sttText = await this.runtime.useModel(ModelClass.TRANSCRIPTION, wavBuffer); logger.log( `[SttTtsPlugin] Transcription result: "${sttText}"`, @@ -487,7 +486,7 @@ export class SttTtsPlugin implements Plugin { const response = await generateMessageResponse({ runtime: this.runtime, context, - handlerType: AsyncHandlerType.TEXT_SMALL, + modelClass: ModelClass.TEXT_SMALL, }); response.source = "discord"; @@ -579,13 +578,13 @@ export class SttTtsPlugin implements Plugin { this.runtime.character.templates ?.twitterShouldRespondTemplate || this.runtime.character.templates?.shouldRespondTemplate || - composeRandomUser(twitterShouldRespondTemplate, 2), + twitterShouldRespondTemplate, }); const response = await generateShouldRespond({ runtime: this.runtime, context: shouldRespondContext, - handlerType: AsyncHandlerType.TEXT_SMALL, + modelClass: ModelClass.TEXT_SMALL, }); if (response === "RESPOND") { diff --git a/packages/plugin-twitter/src/interactions.ts b/packages/plugin-twitter/src/interactions.ts index 82e2100cf5b..c44be8b74fb 100644 --- a/packages/plugin-twitter/src/interactions.ts +++ b/packages/plugin-twitter/src/interactions.ts @@ -9,7 +9,7 @@ import { type HandlerCallback, type IAgentRuntime, type Memory, - AsyncHandlerType, + ModelClass, type State, stringToUuid, logger, @@ -348,7 +348,7 @@ export class TwitterInteractionClient { const imageDescriptionsArray = []; try{ for (const photo of tweet.photos) { - const description = await this.runtime.call(AsyncHandlerType.IMAGE_DESCRIPTION, photo.url) + const description = await this.runtime.useModel(ModelClass.IMAGE_DESCRIPTION, photo.url) imageDescriptionsArray.push(description); } } catch (error) { @@ -414,7 +414,7 @@ export class TwitterInteractionClient { const shouldRespond = await generateShouldRespond({ runtime: this.runtime, context: shouldRespondContext, - handlerType: AsyncHandlerType.MEDIUM, + modelClass: ModelClass.MEDIUM, }); // Promise<"RESPOND" | "IGNORE" | "STOP" | null> { @@ -453,7 +453,7 @@ export class TwitterInteractionClient { const response = await generateMessageResponse({ runtime: this.runtime, context, - handlerType: AsyncHandlerType.TEXT_LARGE, + modelClass: ModelClass.TEXT_LARGE, }); const removeQuotes = (str: string) => diff --git a/packages/plugin-twitter/src/post.ts b/packages/plugin-twitter/src/post.ts index 74199a106cc..ae92380b698 100644 --- a/packages/plugin-twitter/src/post.ts +++ b/packages/plugin-twitter/src/post.ts @@ -6,7 +6,7 @@ import { generateText, type IAgentRuntime, logger, - AsyncHandlerType, + ModelClass, parseJSONObjectFromText, postActionResponseFooter, stringToUuid, @@ -449,7 +449,7 @@ export class TwitterPostClient { const response = await generateText({ runtime: this.runtime, context, - handlerType: AsyncHandlerType.TEXT_SMALL, + modelClass: ModelClass.TEXT_SMALL, }); const rawTweetContent = cleanJsonResponse(response); @@ -556,7 +556,7 @@ export class TwitterPostClient { const response = await generateText({ runtime: this.runtime, context: options?.context || context, - handlerType: AsyncHandlerType.TEXT_SMALL, + modelClass: ModelClass.TEXT_SMALL, }); logger.log("generate tweet content response:\n" + response); @@ -679,7 +679,7 @@ export class TwitterPostClient { const actionResponse = await generateTweetActions({ runtime: this.runtime, context: actionContext, - handlerType: AsyncHandlerType.TEXT_SMALL, + modelClass: ModelClass.TEXT_SMALL, }); if (!actionResponse) { @@ -832,7 +832,7 @@ export class TwitterPostClient { "Processing images in tweet for context" ); for (const photo of tweet.photos) { - const description = await this.runtime.call(AsyncHandlerType.IMAGE_DESCRIPTION, photo.url); + const description = await this.runtime.useModel(ModelClass.IMAGE_DESCRIPTION, photo.url); imageDescriptions.push(description); } } @@ -1040,7 +1040,7 @@ export class TwitterPostClient { if (tweet.photos?.length > 0) { logger.log("Processing images in tweet for context"); for (const photo of tweet.photos) { - const description = await this.runtime.call(AsyncHandlerType.IMAGE_DESCRIPTION, photo.url) + const description = await this.runtime.useModel(ModelClass.IMAGE_DESCRIPTION, photo.url) imageDescriptions.push(description); } } diff --git a/packages/plugin-twitter/src/search.ts b/packages/plugin-twitter/src/search.ts index 7bc43f0d44a..9f20cc5887f 100644 --- a/packages/plugin-twitter/src/search.ts +++ b/packages/plugin-twitter/src/search.ts @@ -1,6 +1,6 @@ import { composeContext, type Content, generateMessageResponse, generateText, type HandlerCallback, - type IAgentRuntime, logger, messageCompletionFooter, AsyncHandlerType, type State, stringToUuid + type IAgentRuntime, logger, messageCompletionFooter, ModelClass, type State, stringToUuid } from "@elizaos/core"; import type { ClientBase } from "./base.ts"; import { SearchMode } from "./client"; @@ -135,7 +135,7 @@ export class TwitterSearchClient { const mostInterestingTweetResponse = await generateText({ runtime: this.runtime, context: prompt, - handlerType: AsyncHandlerType.TEXT_SMALL, + modelClass: ModelClass.TEXT_SMALL, }); const tweetId = mostInterestingTweetResponse.trim(); @@ -219,7 +219,7 @@ export class TwitterSearchClient { // Generate image descriptions using GPT-4 vision API const imageDescriptions = []; for (const photo of selectedTweet.photos) { - const description = await this.runtime.call(AsyncHandlerType.IMAGE_DESCRIPTION, photo.url) + const description = await this.runtime.useModel(ModelClass.IMAGE_DESCRIPTION, photo.url) imageDescriptions.push(description); } @@ -249,7 +249,7 @@ export class TwitterSearchClient { const responseContent = await generateMessageResponse({ runtime: this.runtime, context, - handlerType: AsyncHandlerType.TEXT_LARGE, + modelClass: ModelClass.TEXT_LARGE, }); responseContent.inReplyTo = message.id; diff --git a/packages/plugin-twitter/src/spaces.ts b/packages/plugin-twitter/src/spaces.ts index 073e82a06b5..56c6aae574f 100644 --- a/packages/plugin-twitter/src/spaces.ts +++ b/packages/plugin-twitter/src/spaces.ts @@ -3,7 +3,7 @@ import { type IAgentRuntime, composeContext, generateText, - AsyncHandlerType, + ModelClass, type TwitterSpaceDecisionOptions, State, } from "@elizaos/core"; @@ -47,7 +47,7 @@ Only return the text, no additional formatting. const output = await generateText({ runtime, context, - handlerType: AsyncHandlerType.TEXT_SMALL, + modelClass: ModelClass.TEXT_SMALL, }); return output.trim(); } catch (err) { @@ -99,7 +99,7 @@ Example: const response = await generateText({ runtime, context, - handlerType: AsyncHandlerType.TEXT_SMALL, + modelClass: ModelClass.TEXT_SMALL, }); const topics = response .split(",") diff --git a/packages/plugin-twitter/src/utils.ts b/packages/plugin-twitter/src/utils.ts index dcd35fab2e0..d35f5ba4457 100644 --- a/packages/plugin-twitter/src/utils.ts +++ b/packages/plugin-twitter/src/utils.ts @@ -1,5 +1,5 @@ import type { Tweet } from "./client"; -import type { Content, IAgentRuntime, Memory, AsyncHandlerType, UUID } from "@elizaos/core"; +import type { Content, IAgentRuntime, Memory, ModelClass, UUID } from "@elizaos/core"; import { generateText, stringToUuid } from "@elizaos/core"; import type { ClientBase } from "./base"; import { logger } from "@elizaos/core"; @@ -497,11 +497,11 @@ export const parseActionResponseFromText = ( export async function generateTweetActions({ runtime, context, - handlerType, + modelClass, }: { runtime: IAgentRuntime; context: string; - handlerType: AsyncHandlerType; + modelClass: ModelClass; }): Promise<ActionResponse | null> { let retryDelay = 1000; while (true) { @@ -509,7 +509,7 @@ export async function generateTweetActions({ const response = await generateText({ runtime, context, - handlerType, + modelClass, }); logger.debug( "Received response from generateText for tweet actions:",