|
|
|
@ -1,6 +1,5 @@
|
|
|
|
|
import type { ChatRequest, ChatReponse } from "./api/openai/typing";
|
|
|
|
|
import { Message, ModelConfig, useAccessStore, useChatStore } from "./store";
|
|
|
|
|
import Locale from "./locales";
|
|
|
|
|
import { showToast } from "./components/ui-lib";
|
|
|
|
|
|
|
|
|
|
const TIME_OUT_MS = 30000;
|
|
|
|
@ -83,31 +82,39 @@ export async function requestUsage() {
|
|
|
|
|
const startOfMonth = new Date(now.getFullYear(), now.getMonth(), 1);
|
|
|
|
|
const startDate = formatDate(startOfMonth);
|
|
|
|
|
const endDate = formatDate(now);
|
|
|
|
|
const res = await requestOpenaiClient(
|
|
|
|
|
`dashboard/billing/usage?start_date=${startDate}&end_date=${endDate}`,
|
|
|
|
|
)(null, "GET");
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
const response = (await res.json()) as {
|
|
|
|
|
total_usage: number;
|
|
|
|
|
error?: {
|
|
|
|
|
type: string;
|
|
|
|
|
message: string;
|
|
|
|
|
};
|
|
|
|
|
const [used, subs] = await Promise.all([
|
|
|
|
|
requestOpenaiClient(
|
|
|
|
|
`dashboard/billing/usage?start_date=${startDate}&end_date=${endDate}`,
|
|
|
|
|
)(null, "GET"),
|
|
|
|
|
requestOpenaiClient("dashboard/billing/subscription")(null, "GET"),
|
|
|
|
|
]);
|
|
|
|
|
|
|
|
|
|
const response = (await used.json()) as {
|
|
|
|
|
total_usage?: number;
|
|
|
|
|
error?: {
|
|
|
|
|
type: string;
|
|
|
|
|
message: string;
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
if (response.error && response.error.type) {
|
|
|
|
|
showToast(response.error.message);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
const total = (await subs.json()) as {
|
|
|
|
|
hard_limit_usd?: number;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
if (response.total_usage) {
|
|
|
|
|
response.total_usage = Math.round(response.total_usage) / 100;
|
|
|
|
|
}
|
|
|
|
|
return response.total_usage;
|
|
|
|
|
} catch (error) {
|
|
|
|
|
console.error("[Request usage] ", error, res.body);
|
|
|
|
|
if (response.error && response.error.type) {
|
|
|
|
|
showToast(response.error.message);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (response.total_usage) {
|
|
|
|
|
response.total_usage = Math.round(response.total_usage) / 100;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return {
|
|
|
|
|
used: response.total_usage,
|
|
|
|
|
subscription: total.hard_limit_usd,
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export async function requestChatStream(
|
|
|
|
|