add a history command
This commit is contained in:
+79
-3
@@ -68,6 +68,7 @@ class ChatDatabase:
|
||||
user_id TEXT,
|
||||
username TEXT,
|
||||
content TEXT,
|
||||
bot_name TEXT,
|
||||
timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
channel_id TEXT,
|
||||
guild_id TEXT
|
||||
@@ -76,6 +77,17 @@ class ChatDatabase:
|
||||
)
|
||||
logger.info("chat_messages table initialized successfully")
|
||||
|
||||
# Migrate: add bot_name column if it doesn't exist
|
||||
logger.info("Checking for bot_name column migration")
|
||||
cursor.execute("PRAGMA table_info(chat_messages)")
|
||||
columns = [row[1] for row in cursor.fetchall()]
|
||||
if "bot_name" not in columns:
|
||||
logger.info("Adding bot_name column to chat_messages table")
|
||||
cursor.execute(
|
||||
"ALTER TABLE chat_messages ADD COLUMN bot_name TEXT",
|
||||
)
|
||||
logger.info("bot_name column added successfully")
|
||||
|
||||
# Create embeddings table for RAG
|
||||
logger.info("Creating message_embeddings table if not exists")
|
||||
cursor.execute(
|
||||
@@ -143,6 +155,7 @@ class ChatDatabase:
|
||||
user_id: str,
|
||||
username: str,
|
||||
content: str,
|
||||
bot_name: str | None = None,
|
||||
channel_id: str | None = None,
|
||||
guild_id: str | None = None,
|
||||
) -> bool:
|
||||
@@ -160,10 +173,18 @@ class ChatDatabase:
|
||||
cursor.execute(
|
||||
"""
|
||||
INSERT OR REPLACE INTO chat_messages
|
||||
(message_id, user_id, username, content, channel_id, guild_id)
|
||||
VALUES (?, ?, ?, ?, ?, ?)
|
||||
(message_id, user_id, username, content, bot_name, channel_id, guild_id)
|
||||
VALUES (?, ?, ?, ?, ?, ?, ?)
|
||||
""",
|
||||
(message_id, user_id, username, content, channel_id, guild_id),
|
||||
(
|
||||
message_id,
|
||||
user_id,
|
||||
username,
|
||||
content,
|
||||
bot_name,
|
||||
channel_id,
|
||||
guild_id,
|
||||
),
|
||||
)
|
||||
logger.debug("Message %s inserted into chat_messages table", message_id)
|
||||
|
||||
@@ -330,6 +351,61 @@ class ChatDatabase:
|
||||
results.sort(key=lambda x: x[2], reverse=True)
|
||||
return results[:top_k]
|
||||
|
||||
def get_bot_history(self, bot_name: str, limit: int = 20) -> list[tuple[str, str]]:
|
||||
"""Get message history for a specific custom bot.
|
||||
|
||||
Args:
|
||||
bot_name: The name of the custom bot.
|
||||
limit: Maximum number of messages to retrieve.
|
||||
|
||||
Returns:
|
||||
List of (user_message, bot_response) tuples.
|
||||
|
||||
"""
|
||||
conn = sqlite3.connect(self.db_path)
|
||||
cursor = conn.cursor()
|
||||
|
||||
logger.info(
|
||||
"Fetching last %d messages for bot %r",
|
||||
limit,
|
||||
bot_name,
|
||||
)
|
||||
cursor.execute(
|
||||
"""
|
||||
SELECT message_id, content, timestamp
|
||||
FROM chat_messages
|
||||
WHERE bot_name = ? AND message_id NOT LIKE '%%_response'
|
||||
ORDER BY timestamp DESC
|
||||
LIMIT ?
|
||||
""",
|
||||
(bot_name, limit),
|
||||
)
|
||||
|
||||
messages = cursor.fetchall()
|
||||
|
||||
conversations: list[tuple[str, str]] = []
|
||||
for message in messages:
|
||||
msg_content = message[1]
|
||||
logger.debug("Finding response for %s...", msg_content[:50])
|
||||
cursor.execute(
|
||||
"""
|
||||
SELECT content
|
||||
FROM chat_messages
|
||||
WHERE message_id = ?
|
||||
ORDER BY timestamp DESC
|
||||
""",
|
||||
(f"{message[0]}_response",),
|
||||
)
|
||||
response_row = cursor.fetchone()
|
||||
if response_row:
|
||||
logger.debug("Found response: %s...", response_row[0][:50])
|
||||
conversations.append((msg_content, response_row[0]))
|
||||
else:
|
||||
logger.debug("No response found")
|
||||
conn.close()
|
||||
|
||||
return conversations
|
||||
|
||||
def get_user_history(self, user_id: str, limit: int = 20) -> list[tuple[str, str]]:
|
||||
"""Get message history for a specific user."""
|
||||
conn = sqlite3.connect(self.db_path)
|
||||
|
||||
Reference in New Issue
Block a user