feat: Add AI module
ollama based ai module for more bot entertaiment
This commit is contained in:
10 files changed
+394
-2
No files matched your search
@@ -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;
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user