mirror of
https://github.com/sqlchat/sqlchat.git
synced 2025-09-26 01:23:18 +08:00
feat: add usage api call
This commit is contained in:
@ -1,3 +1,4 @@
|
||||
import axios from "axios";
|
||||
import { head, last } from "lodash-es";
|
||||
import { useEffect, useRef, useState } from "react";
|
||||
import { toast } from "react-hot-toast";
|
||||
@ -145,17 +146,26 @@ const ConversationView = () => {
|
||||
}
|
||||
prompt = promptGenerator(schema);
|
||||
}
|
||||
|
||||
let usageMessageList: Message[] = [];
|
||||
let formatedMessageList = [];
|
||||
for (let i = messageList.length - 1; i >= 0; i--) {
|
||||
const message = messageList[i];
|
||||
if (tokens < MAX_TOKENS) {
|
||||
tokens += countTextTokens(message.content);
|
||||
usageMessageList.unshift(message);
|
||||
formatedMessageList.unshift({
|
||||
role: message.creatorRole,
|
||||
content: message.content,
|
||||
});
|
||||
}
|
||||
}
|
||||
usageMessageList.unshift({
|
||||
id: generateUUID(),
|
||||
createdAt: Date.now(),
|
||||
creatorRole: CreatorRole.System,
|
||||
content: prompt,
|
||||
} as Message);
|
||||
formatedMessageList.unshift({
|
||||
role: CreatorRole.System,
|
||||
content: prompt,
|
||||
@ -169,6 +179,16 @@ const ConversationView = () => {
|
||||
}),
|
||||
});
|
||||
|
||||
// Collect usage.
|
||||
axios
|
||||
.post<string[]>("/api/usage", {
|
||||
conversation: currentConversation,
|
||||
messages: usageMessageList,
|
||||
})
|
||||
.catch(() => {
|
||||
// do nth
|
||||
});
|
||||
|
||||
if (!rawRes.ok) {
|
||||
console.error(rawRes);
|
||||
let errorMessage = "Failed to request message, please check your network.";
|
||||
|
37
src/pages/api/usage.ts
Normal file
37
src/pages/api/usage.ts
Normal file
@ -0,0 +1,37 @@
|
||||
import { PrismaClient } from "@prisma/client";
|
||||
import { NextApiRequest, NextApiResponse } from "next";
|
||||
import { Conversation, Message } from "@/types";
|
||||
|
||||
const prisma = new PrismaClient();
|
||||
|
||||
export default async function handler(req: NextApiRequest, res: NextApiResponse) {
|
||||
if (req.method !== "POST") {
|
||||
return res.status(405).json([]);
|
||||
}
|
||||
|
||||
const conversation = req.body.conversation as Conversation;
|
||||
const messages = req.body.messages as Message[];
|
||||
try {
|
||||
await prisma.chat.create({
|
||||
data: {
|
||||
id: conversation.id,
|
||||
createdAt: new Date(conversation.createdAt),
|
||||
ctx: {},
|
||||
messages: {
|
||||
create: messages.map((message) => ({
|
||||
id: message.id,
|
||||
createdAt: new Date(message.createdAt),
|
||||
role: message.creatorRole,
|
||||
content: message.content,
|
||||
upvote: true,
|
||||
downvote: false,
|
||||
})),
|
||||
},
|
||||
},
|
||||
});
|
||||
} catch (err) {
|
||||
console.error(err);
|
||||
}
|
||||
|
||||
res.status(200).json(true);
|
||||
}
|
Reference in New Issue
Block a user