From a84572d8165bc0894515085e80ff9858df509e61 Mon Sep 17 00:00:00 2001 From: nusk0 Date: Tue, 4 Feb 2025 21:36:34 -0500 Subject: [PATCH] UserRapport now updates properly inside the DB --- packages/adapter-sqlite/src/index.ts | 20 +++++++++++++++++--- packages/adapter-sqlite/src/sqliteTables.ts | 12 +++--------- packages/client-twitter/src/interactions.ts | 2 +- packages/client-twitter/src/utils.ts | 20 +++++++------------- 4 files changed, 28 insertions(+), 26 deletions(-) diff --git a/packages/adapter-sqlite/src/index.ts b/packages/adapter-sqlite/src/index.ts index 5c562c1943b..d35d80af133 100644 --- a/packages/adapter-sqlite/src/index.ts +++ b/packages/adapter-sqlite/src/index.ts @@ -805,10 +805,24 @@ export class SqliteDatabaseAdapter } } - async setUserRapport(userId: UUID, agentId: UUID, score: number): Promise { + async setUserRapport(userIdOrUsername: UUID | string, agentId: UUID, score: number): Promise { try { - const sql = "UPDATE accounts SET userRapport = ? WHERE id = ?"; - this.db.prepare(sql).run(score, userId); + let sql; + let params; + + // Check if we're dealing with a username or userId + if (userIdOrUsername.includes('-')) { + // It's a UUID + sql = "UPDATE accounts SET userRapport = userRapport + ? WHERE id = ?"; + params = [score, userIdOrUsername]; + } else { + // It's a username + sql = "UPDATE accounts SET userRapport = userRapport + ? WHERE username = ?"; + params = [score, userIdOrUsername.replace('@', '')]; + } + + console.log("Setting rapport for", userIdOrUsername, "score:", score); + this.db.prepare(sql).run(...params); } catch (error) { console.error("Error setting user rapport:", error); } diff --git a/packages/adapter-sqlite/src/sqliteTables.ts b/packages/adapter-sqlite/src/sqliteTables.ts index 912502a9649..5e428d494b2 100644 --- a/packages/adapter-sqlite/src/sqliteTables.ts +++ b/packages/adapter-sqlite/src/sqliteTables.ts @@ -2,6 +2,8 @@ export const sqliteTables = ` PRAGMA foreign_keys=OFF; BEGIN TRANSACTION; +-- Uncomment the following line to reset all user rapport values to 0 + --UPDATE accounts SET userRapport = 0; -- Table: accounts CREATE TABLE IF NOT EXISTS "accounts" ( @@ -11,17 +13,9 @@ CREATE TABLE IF NOT EXISTS "accounts" ( "username" TEXT, "email" TEXT NOT NULL, "avatarUrl" TEXT, - "details" TEXT DEFAULT '{}' CHECK(json_valid("details")), -- Ensuring details is a valid JSON field - "userRapport" REAL NOT NULL DEFAULT 0 + "details" TEXT DEFAULT '{}' CHECK(json_valid("details")) -- Ensuring details is a valid JSON field ); --- Add userRapport column if it doesn't exist (using correct SQLite syntax) -SELECT CASE - WHEN NOT EXISTS(SELECT 1 FROM pragma_table_info('accounts') WHERE name='userRapport') - THEN 'ALTER TABLE accounts ADD COLUMN "userRapport" REAL NOT NULL DEFAULT 0;' -END -WHERE NOT EXISTS(SELECT 1 FROM pragma_table_info('accounts') WHERE name='userRapport'); - -- Table: memories CREATE TABLE IF NOT EXISTS "memories" ( "id" TEXT PRIMARY KEY, diff --git a/packages/client-twitter/src/interactions.ts b/packages/client-twitter/src/interactions.ts index 17b1e965ee6..38a8de57aa0 100644 --- a/packages/client-twitter/src/interactions.ts +++ b/packages/client-twitter/src/interactions.ts @@ -128,7 +128,7 @@ export class TwitterInteractionClient { elizaLogger.log("Checking active conversations"); // Get all active conversations - const activeConversations = await this.runtime.databaseAdapter.getConversationsByStatus('CLOSED'); + const activeConversations = await this.runtime.databaseAdapter.getConversationsByStatus('ACTIVE'); for (const conversation of activeConversations) { const messageIds = JSON.parse(conversation.messageIds); diff --git a/packages/client-twitter/src/utils.ts b/packages/client-twitter/src/utils.ts index 1df74dcf1d3..3ac37903f27 100644 --- a/packages/client-twitter/src/utils.ts +++ b/packages/client-twitter/src/utils.ts @@ -484,13 +484,14 @@ export async function analyzeConversation( template: analysisTemplate }); console.log("context", context) - + const analysis = await generateText({ runtime, context, modelClass: ModelClass.LARGE, }); + elizaLogger.log("User sentiment scores:", analysis); try { @@ -504,18 +505,11 @@ export async function analyzeConversation( // Update user rapport based on sentiment scores for (const [username, score] of Object.entries(sentimentScores)) { - const userId = messages.find(m => - (m.content.username || m.userId) === username.replace('@', '') - )?.userId; - - if (userId) { - await runtime.databaseAdapter.setUserRapport( - userId, - runtime.agentId, - score as number // Use the sentiment score directly - ); - elizaLogger.log(`Updated rapport for user ${username}:`, score); - } + await runtime.databaseAdapter.setUserRapport( + username, + runtime.agentId, + score as number + ); } } catch (error) { elizaLogger.error("Error parsing sentiment analysis:", error);