feat: add usage api call

This commit is contained in:
steven
2023-04-24 18:24:55 +08:00
parent 00e3040670
commit e1847be56d
2 changed files with 57 additions and 0 deletions

View File

@ -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
View 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);
}