mirror of
https://github.com/Litlyx/litlyx
synced 2025-12-09 23:48:36 +01:00
add dashboard
This commit is contained in:
@@ -0,0 +1,29 @@
|
||||
import { getUserProjectFromId } from "~/server/LIVE_DEMO_DATA";
|
||||
import { AiChatModel } from "@schema/ai/AiChatSchema";
|
||||
import { sendMessageOnChat } from "~/server/services/AiService";
|
||||
|
||||
|
||||
|
||||
export default defineEventHandler(async event => {
|
||||
|
||||
const project_id = getRequestProjectId(event);
|
||||
if (!project_id) return;
|
||||
|
||||
const user = getRequestUser(event);
|
||||
const project = await getUserProjectFromId(project_id, user);
|
||||
if (!project) return;
|
||||
|
||||
if (!event.context.params) return;
|
||||
const chat_id = event.context.params['chat_id'];
|
||||
|
||||
const chat = await AiChatModel.findOne({ _id: chat_id, project_id });
|
||||
if (!chat) return;
|
||||
|
||||
const messages = chat.messages.filter(e => {
|
||||
return (e.role == 'user' || (e.role == 'assistant' && e.content != undefined))
|
||||
}).map(e => {
|
||||
return { role: e.role, content: e.content }
|
||||
});
|
||||
|
||||
return messages;
|
||||
});
|
||||
17
dashboard/server/api/ai/[project_id]/chats_list.ts
Normal file
17
dashboard/server/api/ai/[project_id]/chats_list.ts
Normal file
@@ -0,0 +1,17 @@
|
||||
import { getUserProjectFromId } from "~/server/LIVE_DEMO_DATA";
|
||||
import { AiChatModel } from "@schema/ai/AiChatSchema";
|
||||
|
||||
|
||||
export default defineEventHandler(async event => {
|
||||
const project_id = getRequestProjectId(event);
|
||||
if (!project_id) return;
|
||||
|
||||
const user = getRequestUser(event);
|
||||
const project = await getUserProjectFromId(project_id, user);
|
||||
if (!project) return;
|
||||
|
||||
const chatList = await AiChatModel.find({ project_id }, { _id: 1, title: 1 }, { sort: { updated_at: 1 } });
|
||||
|
||||
return chatList.map(e => e.toJSON());
|
||||
|
||||
});
|
||||
24
dashboard/server/api/ai/[project_id]/chats_remaining.ts
Normal file
24
dashboard/server/api/ai/[project_id]/chats_remaining.ts
Normal file
@@ -0,0 +1,24 @@
|
||||
import { getUserProjectFromId } from "~/server/LIVE_DEMO_DATA";
|
||||
import { ProjectCountModel } from "@schema/ProjectsCounts";
|
||||
|
||||
import { checkProjectCount } from '@functions/UtilsProjectCounts';
|
||||
|
||||
export async function getAiChatRemainings(project_id: string) {
|
||||
const counts = await checkProjectCount(project_id)
|
||||
if (!counts) return 0;
|
||||
const chatsRemaining = counts.ai_limit - counts.ai_messages;
|
||||
if (isNaN(chatsRemaining)) return 0;
|
||||
return chatsRemaining;
|
||||
}
|
||||
|
||||
export default defineEventHandler(async event => {
|
||||
const project_id = getRequestProjectId(event);
|
||||
if (!project_id) return;
|
||||
|
||||
const user = getRequestUser(event);
|
||||
const project = await getUserProjectFromId(project_id, user);
|
||||
if (!project) return;
|
||||
|
||||
const chatsRemaining = await getAiChatRemainings(project_id);
|
||||
return chatsRemaining;
|
||||
});
|
||||
27
dashboard/server/api/ai/[project_id]/send_message.post.ts
Normal file
27
dashboard/server/api/ai/[project_id]/send_message.post.ts
Normal file
@@ -0,0 +1,27 @@
|
||||
import { getUserProjectFromId } from "~/server/LIVE_DEMO_DATA";
|
||||
import { sendMessageOnChat } from "~/server/services/AiService";
|
||||
import { getAiChatRemainings } from "./chats_remaining";
|
||||
|
||||
|
||||
|
||||
export default defineEventHandler(async event => {
|
||||
|
||||
const project_id = getRequestProjectId(event);
|
||||
if (!project_id) return;
|
||||
|
||||
const user = getRequestUser(event);
|
||||
const project = await getUserProjectFromId(project_id, user);
|
||||
if (!project) return;
|
||||
|
||||
// if (!user?.logged) return;
|
||||
// if (!user.user.roles.includes('ADMIN')) return;
|
||||
|
||||
const { text, chat_id } = await readBody(event);
|
||||
if (!text) return setResponseStatus(event, 400, 'text parameter missing');
|
||||
|
||||
const chatsRemaining = await getAiChatRemainings(project_id);
|
||||
if (chatsRemaining <= 0) return setResponseStatus(event, 400, 'CHAT_LIMIT_REACHED');
|
||||
|
||||
const response = await sendMessageOnChat(text, project._id.toString(), chat_id);
|
||||
return response || 'Error getting response';
|
||||
});
|
||||
51
dashboard/server/api/ai/functions/AI_Events.ts
Normal file
51
dashboard/server/api/ai/functions/AI_Events.ts
Normal file
@@ -0,0 +1,51 @@
|
||||
|
||||
import OpenAI from "openai";
|
||||
import { EventModel } from "@schema/metrics/EventSchema";
|
||||
|
||||
|
||||
export const AI_EventsFunctions = {
|
||||
getEventsCount: ({ pid, from, to, name, metadata }: any) => {
|
||||
return getEventsCountForAI(pid, from, to, name, metadata);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
export const getEventsCountForAIDeclaration: OpenAI.Chat.Completions.ChatCompletionTool = {
|
||||
type: 'function',
|
||||
function: {
|
||||
name: 'getEventsCount',
|
||||
description: 'Gets the number of events received on a date range, can also specify the event name and the metadata associated',
|
||||
parameters: {
|
||||
type: 'object',
|
||||
properties: {
|
||||
from: { type: 'string', description: 'ISO string of start date including hours' },
|
||||
to: { type: 'string', description: 'ISO string of end date including hours' },
|
||||
name: { type: 'string', description: 'Name of the events to get' },
|
||||
metadata: { type: 'object', description: 'Metadata of events to get' },
|
||||
},
|
||||
required: ['from', 'to']
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export const AI_EventsTools: OpenAI.Chat.Completions.ChatCompletionTool[] = [
|
||||
getEventsCountForAIDeclaration
|
||||
]
|
||||
|
||||
export async function getEventsCountForAI(project_id: string, from?: string, to?: string, name?: string, metadata?: string) {
|
||||
|
||||
const query: any = {
|
||||
project_id,
|
||||
created_at: {
|
||||
$gt: from ? new Date(from).getTime() : new Date(2023).getTime(),
|
||||
$lt: to ? new Date(to).getTime() : new Date().getTime(),
|
||||
}
|
||||
}
|
||||
|
||||
if (metadata) query.metadata = metadata;
|
||||
if (name) query.name = name;
|
||||
|
||||
const result = await EventModel.countDocuments(query);
|
||||
|
||||
return { count: result };
|
||||
}
|
||||
14
dashboard/server/api/ai/functions/AI_Visits.ts
Normal file
14
dashboard/server/api/ai/functions/AI_Visits.ts
Normal file
@@ -0,0 +1,14 @@
|
||||
import { VisitModel } from "@schema/metrics/VisitSchema";
|
||||
|
||||
|
||||
|
||||
export async function getVisitsCountFromDateRange(project_id: string, from?: string, to?: string) {
|
||||
const result = await VisitModel.countDocuments({
|
||||
project_id,
|
||||
created_at: {
|
||||
$gt: from ? new Date(from).getTime() : new Date(2023).getTime(),
|
||||
$lt: to ? new Date(to).getTime() : new Date().getTime(),
|
||||
}
|
||||
});
|
||||
return { count: result };
|
||||
}
|
||||
Reference in New Issue
Block a user