mirror of
https://github.com/Litlyx/litlyx
synced 2025-12-09 23:48:36 +01:00
Add advanced ai
This commit is contained in:
@@ -1,8 +1,5 @@
|
||||
import { getUserProjectFromId } from "~/server/LIVE_DEMO_DATA";
|
||||
import { AiChatModel } from "@schema/ai/AiChatSchema";
|
||||
import { sendMessageOnChat } from "~/server/services/AiService";
|
||||
|
||||
|
||||
|
||||
export default defineEventHandler(async event => {
|
||||
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
import { getUserProjectFromId } from "~/server/LIVE_DEMO_DATA";
|
||||
import { AiChatModel } from "@schema/ai/AiChatSchema";
|
||||
import { sendMessageOnChat } from "~/server/services/AiService";
|
||||
|
||||
|
||||
import type OpenAI from "openai";
|
||||
import { getChartsInMessage } from "~/server/services/AiService";
|
||||
|
||||
export default defineEventHandler(async event => {
|
||||
|
||||
@@ -19,11 +18,14 @@ export default defineEventHandler(async event => {
|
||||
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;
|
||||
return (chat.messages as OpenAI.Chat.Completions.ChatCompletionMessageParam[])
|
||||
.filter(e => e.role === 'assistant' || e.role === 'user')
|
||||
.map(e => {
|
||||
const charts = getChartsInMessage(e);
|
||||
const content = e.content;
|
||||
return { role: e.role, content, charts }
|
||||
})
|
||||
.filter(e=>{
|
||||
return e.charts.length > 0 || e.content
|
||||
})
|
||||
});
|
||||
@@ -23,5 +23,6 @@ export default defineEventHandler(async event => {
|
||||
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';
|
||||
|
||||
return response;
|
||||
});
|
||||
@@ -1,51 +0,0 @@
|
||||
|
||||
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 };
|
||||
}
|
||||
@@ -1,14 +0,0 @@
|
||||
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