mirror of
https://github.com/sqlchat/sqlchat.git
synced 2025-09-27 01:56:16 +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 { head, last } from "lodash-es";
|
||||||
import { useEffect, useRef, useState } from "react";
|
import { useEffect, useRef, useState } from "react";
|
||||||
import { toast } from "react-hot-toast";
|
import { toast } from "react-hot-toast";
|
||||||
@ -145,17 +146,26 @@ const ConversationView = () => {
|
|||||||
}
|
}
|
||||||
prompt = promptGenerator(schema);
|
prompt = promptGenerator(schema);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let usageMessageList: Message[] = [];
|
||||||
let formatedMessageList = [];
|
let formatedMessageList = [];
|
||||||
for (let i = messageList.length - 1; i >= 0; i--) {
|
for (let i = messageList.length - 1; i >= 0; i--) {
|
||||||
const message = messageList[i];
|
const message = messageList[i];
|
||||||
if (tokens < MAX_TOKENS) {
|
if (tokens < MAX_TOKENS) {
|
||||||
tokens += countTextTokens(message.content);
|
tokens += countTextTokens(message.content);
|
||||||
|
usageMessageList.unshift(message);
|
||||||
formatedMessageList.unshift({
|
formatedMessageList.unshift({
|
||||||
role: message.creatorRole,
|
role: message.creatorRole,
|
||||||
content: message.content,
|
content: message.content,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
usageMessageList.unshift({
|
||||||
|
id: generateUUID(),
|
||||||
|
createdAt: Date.now(),
|
||||||
|
creatorRole: CreatorRole.System,
|
||||||
|
content: prompt,
|
||||||
|
} as Message);
|
||||||
formatedMessageList.unshift({
|
formatedMessageList.unshift({
|
||||||
role: CreatorRole.System,
|
role: CreatorRole.System,
|
||||||
content: prompt,
|
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) {
|
if (!rawRes.ok) {
|
||||||
console.error(rawRes);
|
console.error(rawRes);
|
||||||
let errorMessage = "Failed to request message, please check your network.";
|
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