feat: Add AI module

ollama based ai module for more bot entertaiment
This commit is contained in:
deytenit committed 2025-06-13 14:42:08 +03:00
1 parent 63e4d85cbb
commit 534cd72444
10 files changed
+394 -2

No files matched your search

+77
View File
@@ -0,0 +1,77 @@
import { LlamaMessage } from "./llama.js";
/**
* Manages conversation history for a specific user in a guild.
*/
export class Conversation {
public readonly guildId: string;
public readonly userId: string;
public readonly messages: LlamaMessage[] = [];
public readonly createdAt: Date = new Date();
public lastActivity: Date = new Date();
private readonly maxMessages = 50; // Limit conversation history
public constructor(guildId: string, userId: string) {
this.guildId = guildId;
this.userId = userId;
}
/**
* Adds a user message to the conversation.
*
* @param content - User's message content
*/
public addUserMessage(content: string): void {
this.messages.push({ role: "user", content });
this.lastActivity = new Date();
this.trimHistory();
}
/**
* Adds an assistant response to the conversation.
*
* @param content - Assistant's response content
*/
public addAssistantMessage(content: string): void {
this.messages.push({ role: "assistant", content });
this.lastActivity = new Date();
this.trimHistory();
}
/**
* Gets the conversation history.
*
* @returns Array of messages
*/
public getHistory(): LlamaMessage[] {
return [...this.messages];
}
/**
* Clears the conversation history.
*/
public clear(): void {
this.messages.length = 0;
this.lastActivity = new Date();
}
/**
* Trims conversation history to stay within limits.
*/
private trimHistory(): void {
if (this.messages.length > this.maxMessages) {
this.messages.splice(0, this.messages.length - this.maxMessages);
}
}
/**
* Checks if the conversation is stale (inactive for over 1 hour).
*
* @returns True if conversation should be considered stale
*/
public isStale(): boolean {
const oneHour = 60 * 60 * 1000;
return Date.now() - this.lastActivity.getTime() > oneHour;
}
}