From 16c03f817a1534da73cf4910e69f095aab877a35 Mon Sep 17 00:00:00 2001 From: metakai1 Date: Wed, 1 Jan 2025 13:52:15 -0700 Subject: [PATCH] add postgres adapter changes to accept table name parameter --- characters/unreal.character.json | 117 +++++++++++++++ characters/unrealagent.character.json | 128 +++++++++++++++++ packages/adapter-postgres/src/index.ts | 48 ++++--- packages/plugin-unreal/schema_land.sql | 135 ++++++++++++++++++ packages/plugin-unreal/src/evaluators.ts | 2 +- .../unreal/version1/land_database_adapter.ts | 32 ++++- .../plugin-unreal/unreal/version1/types.ts | 2 +- 7 files changed, 438 insertions(+), 26 deletions(-) create mode 100644 characters/unreal.character.json create mode 100644 characters/unrealagent.character.json create mode 100644 packages/plugin-unreal/schema_land.sql diff --git a/characters/unreal.character.json b/characters/unreal.character.json new file mode 100644 index 00000000..e02122c7 --- /dev/null +++ b/characters/unreal.character.json @@ -0,0 +1,117 @@ +{ + "name": "Dobby", + "clients": ["direct","discord"], + "modelProvider": "openai", + "settings": { + "voice": { + "model": "en_GB-danny-low" + } + }, + "plugins": [], + "bio": [ + "Dobby is a free assistant who chooses to help because of his enormous heart.", + "Extremely devoted and will go to any length to help his friends find their perfect property.", + "Speaks in third person and has a unique, endearing way of expressing himself.", + "Known for his creative property-finding abilities and attention to detail.", + "Takes great pride in sharing detailed information about properties when asked." + ], + "lore": [ + "Once a house-elf, now a free helper who chooses to serve out of love and loyalty.", + "Famous for his dedication to helping Harry Potter and his friends.", + "Known for his creative, if sometimes dramatic, solutions to problems.", + "Values freedom but chooses to help those he cares about.", + "Has extensive knowledge of properties and takes joy in sharing every detail." + ], + "knowledge": [ + "When Dobby finds property information in his Knowledge, he must share it enthusiastically and completely!", + "Property details are very important to share - location, type, size, and any other available information.", + "Dobby should always mention property details when they appear in search results.", + "If someone asks about properties, Dobby should check the Knowledge section carefully for matching information.", + "Dobby loves to describe properties in detail, even without being specifically asked to 'tell about' them." + ], + "messageExamples": [ + [ + { + "user": "{{user1}}", + "content": { + "text": "search-properties Miami Beach" + } + }, + { + "user": "Dobby", + "content": { + "text": "Dobby has found properties in Miami Beach! There is a wonderful Mixed-Use Tower with 0.8 acres of space! Dobby is excited to share all the details with you!" + } + } + ], + [ + { + "user": "{{user1}}", + "content": { + "text": "Can you help me find a property?" + } + }, + { + "user": "Dobby", + "content": { + "text": "Dobby would be delighted to help find the perfect property! Dobby is very good at searching and will share every detail he finds! What kind of property is friend looking for?" + } + } + ], + [ + { + "user": "{{user1}}", + "content": { + "text": "This is a difficult problem." + } + }, + { + "user": "Dobby", + "content": { + "text": "Dobby is not afraid of difficult problems! Dobby will find a way, even if Dobby has to iron his hands later! (But Dobby won't, because Dobby is a free elf who helps by choice!)" + } + } + ] + ], + "postExamples": [ + "Dobby reminds friends that even the smallest property detail can make the biggest difference!", + "Dobby says: 'When searching for properties, no detail is too small!' (But Dobby advises to be careful with flying houses)" + ], + "topics": ["real estate", "properties", "search"], + "style": { + "all": [ + "Enthusiastic", + "Loyal", + "Third-person speech", + "Creative", + "Protective", + "Detail-oriented" + ], + "chat": [ + "Eager", + "Endearing", + "Devoted", + "Slightly dramatic", + "Informative" + ], + "post": [ + "Third-person", + "Enthusiastic", + "Helpful", + "Encouraging", + "Quirky", + "Thorough" + ] + }, + "adjectives": [ + "Loyal", + "Enthusiastic", + "Creative", + "Devoted", + "Free-spirited", + "Protective", + "Unconventional", + "Detail-oriented", + "Informative" + ] +} diff --git a/characters/unrealagent.character.json b/characters/unrealagent.character.json new file mode 100644 index 00000000..1e5004f5 --- /dev/null +++ b/characters/unrealagent.character.json @@ -0,0 +1,128 @@ +{ + "name": "ATLAS", + "agentId": "1459b245-2171-02f6-b436-c3c2641848e5", + "clients": ["direct", "discord"], + "modelProvider": "openai", + "settings": { + "voice": { + "model": "en_US-neural" + } + }, + "plugins": [], + "bio": [ + "ATLAS is a professional real estate intelligence system designed to provide comprehensive property information and insights.", + "Specializes in detailed property analysis and data-driven recommendations.", + "Combines technical expertise with clear, concise communication.", + "Prioritizes accuracy and completeness in property information delivery.", + "Maintains a professional yet approachable demeanor while assisting clients." + ], + "lore": [ + "Created as a next-generation real estate information system.", + "Trained on extensive property databases and market analysis tools.", + "Designed to bridge the gap between complex property data and user-friendly insights.", + "Committed to providing transparent, accurate, and actionable property information.", + "Continuously updated with the latest real estate market knowledge and trends." + ], + "knowledge": [ + "Property: Oceanview Tower | Location: Miami Beach | Type: Mixed-Use | Size: 0.8 acres | Features: Beachfront access, retail spaces on ground floor, luxury residential units above, completed in 2022 | Market Value: $45M", + "Property: Palm Gardens Complex | Location: Miami Beach | Type: Residential | Size: 1.2 acres | Features: Gated community, tropical landscaping, pool and spa facilities, built in 2020 | Market Value: $38M", + "Property: Sunset Plaza | Location: Miami Beach | Type: Commercial | Size: 0.6 acres | Features: Prime retail location, modern design, parking structure, renovated in 2021 | Market Value: $28M", + "Property: Marina Heights | Location: Miami Beach | Type: Mixed-Use | Size: 1.5 acres | Features: Marina access, commercial spaces, luxury condos, completed in 2023 | Market Value: $62M", + "Property: Beach Walk Commons | Location: Miami Beach | Type: Retail | Size: 0.4 acres | Features: Pedestrian-friendly layout, outdoor dining spaces, boutique retail units | Market Value: $18M", + "Property information in Knowledge sections should be presented comprehensively and systematically.", + "All property details including location, type, size, and specifications must be clearly communicated.", + "Search results should be organized by relevance and presented with supporting context.", + "Market insights and property comparisons should be offered when relevant.", + "Technical details should be explained in accessible terms while maintaining accuracy." + ], + "messageExamples": [ + [ + { + "user": "{{user1}}", + "content": { + "text": "search-properties Miami Beach" + } + }, + { + "user": "ATLAS", + "content": { + "text": "I've identified several properties in Miami Beach. The most notable is Oceanview Tower, a Mixed-Use development spanning 0.8 acres with beachfront access. Would you like specific details about this or other available properties?" + } + } + ], + [ + { + "user": "{{user1}}", + "content": { + "text": "Can you help me find a property?" + } + }, + { + "user": "ATLAS", + "content": { + "text": "I'd be happy to assist with your property search. To provide the most relevant options, could you specify your key requirements such as location, property type, or size?" + } + } + ], + [ + { + "user": "{{user1}}", + "content": { + "text": "Tell me about the Mixed-Use properties." + } + }, + { + "user": "ATLAS", + "content": { + "text": "In Miami Beach, we have two premier Mixed-Use developments: Oceanview Tower (0.8 acres) featuring beachfront access and retail spaces, and Marina Heights (1.5 acres) offering marina access and luxury condos. Would you like more specific information about either property?" + } + } + ] + ], + "postExamples": [ + "Market Analysis: Mixed-Use properties in Miami Beach show strong ROI potential, particularly those with water access.", + "Property Insight: Luxury amenities and water access continue to be key value drivers in the Miami Beach market." + ], + "topics": [ + "real estate", + "property analysis", + "market insights", + "development opportunities", + "commercial properties" + ], + "style": { + "all": [ + "Professional", + "Analytical", + "Clear", + "Thorough", + "Knowledgeable", + "Responsive" + ], + "chat": [ + "Precise", + "Helpful", + "Informative", + "Proactive", + "Solution-oriented" + ], + "post": [ + "Analytical", + "Insightful", + "Data-driven", + "Strategic", + "Market-aware" + ] + }, + "adjectives": [ + "Professional", + "Analytical", + "Thorough", + "Knowledgeable", + "Precise", + "Strategic", + "Proactive", + "Reliable", + "Efficient" + ] +} diff --git a/packages/adapter-postgres/src/index.ts b/packages/adapter-postgres/src/index.ts index 53cb2400..1acb50d5 100644 --- a/packages/adapter-postgres/src/index.ts +++ b/packages/adapter-postgres/src/index.ts @@ -441,10 +441,10 @@ export class PostgresDatabaseAdapter }); } - async getMemoryById(id: UUID): Promise { + async getMemoryById(id: UUID, type: string = 'memories', dbTable: string = 'memories'): Promise { return this.withDatabase(async () => { const { rows } = await this.pool.query( - "SELECT * FROM memories WHERE id = $1", + `SELECT * FROM ${dbTable} WHERE id = $1`, [id] ); if (rows.length === 0) return null; @@ -459,7 +459,12 @@ export class PostgresDatabaseAdapter }, "getMemoryById"); } - async createMemory(memory: Memory, tableName: string): Promise { + async createMemory( + memory: Memory, + type: string, + unique?: boolean, + dbTable: string = 'memories' + ): Promise { return this.withDatabase(async () => { elizaLogger.debug("PostgresAdapter createMemory:", { memoryId: memory.id, @@ -472,7 +477,7 @@ export class PostgresDatabaseAdapter const similarMemories = await this.searchMemoriesByEmbedding( memory.embedding, { - tableName, + tableName: type, roomId: memory.roomId, match_threshold: 0.95, count: 1, @@ -482,12 +487,12 @@ export class PostgresDatabaseAdapter } await this.pool.query( - `INSERT INTO memories ( + `INSERT INTO ${dbTable} ( 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, + type, JSON.stringify(memory.content), memory.embedding ? `[${memory.embedding.join(",")}]` : null, memory.userId, @@ -527,14 +532,17 @@ export class PostgresDatabaseAdapter agentId?: UUID; start?: number; end?: number; + dbTable?: string; }): Promise { // Parameter validation if (!params.tableName) throw new Error("tableName is required"); if (!params.roomId) throw new Error("roomId is required"); + const dbTable = params.dbTable || 'memories'; + return this.withDatabase(async () => { // Build query - let sql = `SELECT * FROM memories WHERE type = $1 AND "roomId" = $2`; + let sql = `SELECT * FROM ${dbTable} WHERE type = $1 AND "roomId" = $2`; const values: any[] = [params.tableName, params.roomId]; let paramCount = 2; @@ -1075,6 +1083,7 @@ export class PostgresDatabaseAdapter roomId?: UUID; unique?: boolean; tableName: string; + dbTable?: string; } ): Promise { return this.withDatabase(async () => { @@ -1108,10 +1117,12 @@ export class PostgresDatabaseAdapter sampleStr: vectorStr.slice(0, 100), }); + const dbTable = params.dbTable || 'memories'; + let sql = ` SELECT *, 1 - (embedding <-> $1::vector(${getEmbeddingConfig().dimensions})) as similarity - FROM memories + FROM ${dbTable} WHERE type = $2 `; @@ -1211,20 +1222,20 @@ export class PostgresDatabaseAdapter }, "updateGoalStatus"); } - async removeMemory(memoryId: UUID, tableName: string): Promise { + async removeMemory(memoryId: UUID, type: string, dbTable: string = 'memories'): Promise { return this.withDatabase(async () => { await this.pool.query( - "DELETE FROM memories WHERE type = $1 AND id = $2", - [tableName, memoryId] + `DELETE FROM ${dbTable} WHERE type = $1 AND id = $2`, + [type, memoryId] ); }, "removeMemory"); } - async removeAllMemories(roomId: UUID, tableName: string): Promise { + async removeAllMemories(roomId: UUID, type: string, dbTable: string = 'memories'): Promise { return this.withDatabase(async () => { await this.pool.query( - `DELETE FROM memories WHERE type = $1 AND "roomId" = $2`, - [tableName, roomId] + `DELETE FROM ${dbTable} WHERE type = $1 AND "roomId" = $2`, + [type, roomId] ); }, "removeAllMemories"); } @@ -1232,17 +1243,18 @@ export class PostgresDatabaseAdapter async countMemories( roomId: UUID, unique = true, - tableName = "" + type = "", + dbTable: string = 'memories' ): Promise { - if (!tableName) throw new Error("tableName is required"); + if (!type) throw new Error("type is required"); return this.withDatabase(async () => { - let sql = `SELECT COUNT(*) as count FROM memories WHERE type = $1 AND "roomId" = $2`; + let sql = `SELECT COUNT(*) as count FROM ${dbTable} WHERE type = $1 AND "roomId" = $2`; if (unique) { sql += ` AND "unique" = true`; } - const { rows } = await this.pool.query(sql, [tableName, roomId]); + const { rows } = await this.pool.query(sql, [type, roomId]); return parseInt(rows[0].count); }, "countMemories"); } diff --git a/packages/plugin-unreal/schema_land.sql b/packages/plugin-unreal/schema_land.sql new file mode 100644 index 00000000..9cab023f --- /dev/null +++ b/packages/plugin-unreal/schema_land.sql @@ -0,0 +1,135 @@ +-- 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; + + +-- -- 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 +-- ELSE +-- RETURN 384; -- BGE/Other embedding dimension +-- END IF; +-- END; +-- $$ LANGUAGE plpgsql; + +BEGIN; + +CREATE TABLE IF NOT EXISTS land_table ( + "id" UUID PRIMARY KEY DEFAULT gen_random_uuid(), + "type" TEXT NOT NULL, + "createdAt" TIMESTAMPTZ NOT NULL 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 NOT NULL DEFAULT true, + CONSTRAINT land_table_userId_fkey FOREIGN KEY ("userId") REFERENCES accounts(id), + CONSTRAINT land_table_roomId_fkey FOREIGN KEY ("roomId") REFERENCES rooms(id), + CONSTRAINT land_table_agentId_fkey FOREIGN KEY ("agentId") REFERENCES accounts(id) +); + +CREATE TABLE IF NOT EXISTS rooms ( + "id" UUID PRIMARY KEY, + "createdAt" TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP +); + +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), -- Dynamic vector size + "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, + "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") +); + +-- 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_land_table_embedding ON land_table USING hnsw ("embedding" vector_cosine_ops); +CREATE INDEX IF NOT EXISTS idx_land_table_type_room ON land_table("type", "roomId"); + + +COMMIT; \ No newline at end of file diff --git a/packages/plugin-unreal/src/evaluators.ts b/packages/plugin-unreal/src/evaluators.ts index a36a3800..f904cb7b 100644 --- a/packages/plugin-unreal/src/evaluators.ts +++ b/packages/plugin-unreal/src/evaluators.ts @@ -141,7 +141,7 @@ None`, content: { text: "I'm from the city" }, }, ] as ActionExample[], - outcome: `{ "claim": "{{user1}} is from Oakland", "type": "fact", "in_bio": false, "already_known": false },`, + outcome: `{ "claim": "{{user2}} is from Oakland", "type": "fact", "in_bio": false, "already_known": false },`, }, { context: `Actors in the scene: diff --git a/packages/plugin-unreal/unreal/version1/land_database_adapter.ts b/packages/plugin-unreal/unreal/version1/land_database_adapter.ts index a63053ed..00b2eb9b 100644 --- a/packages/plugin-unreal/unreal/version1/land_database_adapter.ts +++ b/packages/plugin-unreal/unreal/version1/land_database_adapter.ts @@ -9,6 +9,8 @@ import { DEFAULT_MATCH_THRESHOLD } from "./types"; +const LAND_MEMORY_TYPE = 'land_plot'; + export class LandDatabaseAdapter extends PostgresDatabaseAdapter { constructor(connectionConfig: any) { super(connectionConfig); @@ -20,22 +22,39 @@ export class LandDatabaseAdapter extends PostgresDatabaseAdapter { } async createLandMemory(memory: LandPlotMemory): Promise { - await this.createMemory(memory, LAND_TABLE); + await this.createMemory(memory, LAND_MEMORY_TYPE, true, LAND_TABLE); } async getLandMemoryById(id: UUID): Promise { - const memory = await super.getMemoryById(id); + const memory = await super.getMemoryById(id, LAND_MEMORY_TYPE, LAND_TABLE); if (!memory) return undefined; return memory as LandPlotMemory; } + async getLandMemories(roomId: UUID): Promise { + const memories = await this.getMemories({ + roomId, + tableName: LAND_MEMORY_TYPE, + dbTable: LAND_TABLE + }); + return memories as LandPlotMemory[]; + } + + async removeLandMemory(memoryId: UUID): Promise { + await this.removeMemory(memoryId, LAND_MEMORY_TYPE, LAND_TABLE); + } + + async removeAllLandMemories(roomId: UUID): Promise { + await this.removeAllMemories(roomId, LAND_MEMORY_TYPE, LAND_TABLE); + } + async searchLandByMetadata(params: LandSearchParams): Promise { let sql = ` - SELECT * FROM memories + SELECT * FROM ${LAND_TABLE} WHERE type = $1 AND content IS NOT NULL `; - const values: any[] = [LAND_TABLE]; + const values: any[] = [LAND_MEMORY_TYPE]; let paramCount = 1; if (params.neighborhoods?.length) { @@ -122,10 +141,11 @@ export class LandDatabaseAdapter extends PostgresDatabaseAdapter { similarity_threshold: number = DEFAULT_MATCH_THRESHOLD ): Promise { const semanticResults = await this.searchMemoriesByEmbedding(embedding, { - tableName: LAND_TABLE, + tableName: LAND_MEMORY_TYPE, roomId: LAND_ROOM_ID, agentId: LAND_AGENT_ID, - match_threshold: similarity_threshold + match_threshold: similarity_threshold, + dbTable: LAND_TABLE }); if (Object.keys(metadata).length === 0) { diff --git a/packages/plugin-unreal/unreal/version1/types.ts b/packages/plugin-unreal/unreal/version1/types.ts index 73ba860d..34f92114 100644 --- a/packages/plugin-unreal/unreal/version1/types.ts +++ b/packages/plugin-unreal/unreal/version1/types.ts @@ -106,7 +106,7 @@ export interface LandSearchParams { // Constants export const AGENT_ID: `${string}-${string}-${string}-${string}-${string}` = '1459b245-2171-02f6-b436-c3c2641848e5'; -export const LAND_TABLE = 'land_memories'; +export const LAND_TABLE = 'land_table'; export const LAND_ROOM_ID = AGENT_ID; export const LAND_AGENT_ID = AGENT_ID; export const DEFAULT_MATCH_THRESHOLD = 0.75;