Rework AI

This commit is contained in:
Aslan 2025-12-28 23:11:33 +01:00
parent e46c4427cc
commit aebee54562
10 changed files with 79 additions and 20 deletions

View file

@ -3,9 +3,10 @@ import type { ICallbackStore } from "../types.js";
import { config } from "../../config.js";
import { getTextGemini, getImageGemini } from "../../services/ai/ai.js";
import { alts } from "./alts.js";
import type { IAdminInstructions, IAIAlt } from "./types.js";
import type { IAIInstructions } from "./types.js";
import { getUserById, getUserName } from "../../helpers.js";
import { prices } from "./prices.js";
import { state } from "../../store/store.js";
let client: MatrixClient;
@ -34,21 +35,41 @@ const onAI = async (text: string, roomId: string, sender: string) => {
return;
}
let personality = config.app.ai.personalities[state.personality.index];
if (
Date.now() >
state.personality.startTime + (personality?.timeout ?? 0)
) {
const randomInt = Math.floor(
Math.random() * (config.app.ai.personalities.length + 1),
);
state.personality = {
index: randomInt,
startTime: Date.now(),
};
}
personality = config.app.ai.personalities[state.personality.index];
let textMod = text.replace("!ai", "").trim().toLowerCase();
let instructions = {
prefferedLanguages: ["english", "slovak"],
adminText: config.app.ai.prompt,
alts: alts.map((alt) => ({
keys: alt.keys,
users: alts.map((alt) => ({
names: alt.keys,
alt: alt.alt,
information: user.information,
backstory: alt.id
? getUserById(`${alt.id}:${config.server}`).information
: undefined,
})),
} as IAdminInstructions;
aiPersonality: personality?.personality ?? "",
aiLikes: personality?.likes ?? "",
aiDislikes: personality?.dislikes ?? "",
} as IAIInstructions;
const username = getUserName(user);
textMod = `Admin Instructions:\n${JSON.stringify(instructions)}\nPrompt by ${username}:\n${textMod}`;
textMod = `${username}:\n${textMod}`;
const responseAI = await getTextGemini(textMod);
const responseAI = await getTextGemini(instructions, textMod);
user.aiCost += responseAI.tokens * prices.text;

View file

@ -2,6 +2,7 @@ import type { IAIAlt } from "./types.js";
const alts: IAIAlt[] = [
{
id: "@coty",
keys: [
"satek",
"sateg",
@ -22,10 +23,12 @@ const alts: IAIAlt[] = [
alt: "white cat",
},
{
id: "@marketing",
keys: ["gabor", "gaber", "martin", "marting"],
alt: "hedgehog",
},
{
id: "@madys",
keys: [
"madys",
"mandak",
@ -39,10 +42,12 @@ const alts: IAIAlt[] = [
alt: "beaver",
},
{
id: "@aslan2142",
keys: ["janys", "jano", "janeg", "janek", "aslanek", "aslan", "aslo"],
alt: "lion",
},
{
id: "@rod",
keys: ["marek", "mareg", "macek", "maceg", "rod"],
alt: "purple snake",
},
@ -56,7 +61,7 @@ const alts: IAIAlt[] = [
},
{
keys: ["mama", "monika", "monik"],
alt: "god's peasant",
alt: "god's peasant woman",
},
{
keys: ["puk", "pucik", "pucig"],

View file

@ -1,13 +1,21 @@
interface IAIAlt {
id?: string;
keys: string[];
alt: string;
information?: string | undefined;
}
interface IAdminInstructions {
interface IAIUser {
names: string[];
alt: string;
backstory?: string | undefined;
}
interface IAIInstructions {
prefferedLanguages: string[];
adminText: string;
alts: IAIAlt[];
users: IAIUser[];
aiPersonality: string;
aiLikes: string;
aiDislikes: string;
}
export { type IAIAlt, type IAdminInstructions };
export { type IAIAlt, type IAIUser, type IAIInstructions };

View file

@ -61,7 +61,7 @@ const onMissingRole = (
client.sendHtmlMessage(
roomId,
"",
`You are missing the required role.<br/>Your current role is <b>${userRole}</b>`,
`You don't have a permission to do that!<br/>Your current role is <b>${userRole}</b>`,
);
};

View file

@ -98,7 +98,7 @@ const onAILeaderboard = (_text: string, roomId: string) => {
const cost = user.aiCost;
const username = getUserName(user);
return `<li>${username}: cost <b>${cost.toFixed(2)}$</b></li>`;
return `<li>${username}: <b>${cost.toFixed(2)}$</b></li>`;
};
const users = state.users.sort(