diff --git a/app/api/logs/[...path]/route.ts b/app/api/logs/[...path]/route.ts
index ad6bc33f3..5083853dd 100644
--- a/app/api/logs/[...path]/route.ts
+++ b/app/api/logs/[...path]/route.ts
@@ -4,15 +4,16 @@ import { insertUser } from "@/lib/auth";
// import { getTokenLength } from "@/app/utils/token";
// import { Tiktoken } from "tiktoken/lite"
// import cl100k_base from "tiktoken/encoders/cl100k_base.json"
-import "tiktoken";
-import { get_encoding } from "tiktoken";
+// import "tiktoken";
+// import { get_encoding } from "tiktoken";
import { addHours, subMinutes } from "date-fns";
+import { getTokenLength } from "@/lib/utils";
-function getTokenLength(input: string): number {
- const encoding = get_encoding("cl100k_base");
- // console.log('tokens: ', input, encoding.countTokens())
- return encoding.encode(input).length;
-}
+// function getTokenLength(input: string): number {
+// const encoding = get_encoding("cl100k_base");
+// // console.log('tokens: ', input, encoding.countTokens())
+// return encoding.encode(input).length;
+// }
async function handle(
req: NextRequest,
diff --git a/app/components/chat.tsx b/app/components/chat.tsx
index 51a4b54af..acd85f8ce 100644
--- a/app/components/chat.tsx
+++ b/app/components/chat.tsx
@@ -50,6 +50,7 @@ import {
useAppConfig,
DEFAULT_TOPIC,
ModelType,
+ ChatSession,
} from "../store";
import {
@@ -101,6 +102,7 @@ import { Button } from "emoji-picker-react/src/components/atoms/Button";
import Image from "next/image";
import { useAllModels } from "../utils/hooks";
import { MultimodalContent } from "../client/api";
+import { getTokenLength } from "@/lib/utils";
const Markdown = dynamic(async () => (await import("./markdown")).Markdown, {
loading: () => ,
@@ -350,9 +352,10 @@ function ChatAction(props: {
icon: 16,
});
const allModels = useAllModels().map((item) => item.displayName);
- const customModelClassName = allModels.includes(props.text)
- ? "chat-input-action-long-weight"
- : "";
+ let customModelClassName = "";
+ if (props.text.includes("使用") || allModels.includes(props.text)) {
+ customModelClassName = "chat-input-action-long-weight";
+ }
function updateWidth() {
if (!iconRef.current || !textRef.current) return;
@@ -466,6 +469,7 @@ export function ChatActions(props: {
);
const [showModelSelector, setShowModelSelector] = useState(false);
const [showUploadImage, setShowUploadImage] = useState(false);
+ const current_day_token = localStorage.getItem("current_day_token") ?? "";
useEffect(() => {
const show = isVisionModel(currentModel);
@@ -602,6 +606,22 @@ export function ChatActions(props: {
}}
/>
)}
+
+ false}
+ text={"使用 " + current_day_token}
+ icon={
+
+ }
+ />
);
}
@@ -1643,8 +1663,45 @@ function _Chat() {
);
}
+function getCurrentDayToken(sessions: ChatSession[]): number {
+ try {
+ const currentTime = new Date();
+ const startOfTheDayInTimeZone = new Date(
+ currentTime.getFullYear(),
+ currentTime.getMonth(),
+ currentTime.getDate(),
+ 0,
+ 0,
+ 0,
+ );
+ const current_day_message = sessions
+ .reduce((acc, item) => {
+ // @ts-ignore
+ return acc.concat(item.messages);
+ }, [])
+ .filter((item1) => {
+ // @ts-ignore
+ const dateToCheck = new Date(item1.date);
+ return startOfTheDayInTimeZone < dateToCheck;
+ });
+ // @ts-ignore
+ const all_current_day_content = current_day_message
+ .map((item) => item.content)
+ .join(" ");
+ // 获取会话之后,再整合content,
+ return getTokenLength(all_current_day_content);
+ } catch (e) {
+ return 0;
+ }
+}
+
export function Chat() {
const chatStore = useChatStore();
const sessionIndex = chatStore.currentSessionIndex;
+ // 这里计先计算一下当天总token数。
+ localStorage.setItem(
+ "current_day_token",
+ String(getCurrentDayToken(chatStore.sessions)),
+ );
return <_Chat key={sessionIndex}>;
}
diff --git a/app/utils/token.ts b/app/utils/token.ts
index 1e803408c..6ff0f5df2 100644
--- a/app/utils/token.ts
+++ b/app/utils/token.ts
@@ -23,19 +23,19 @@ export function estimateTokenLength(input: string): number {
// import { get_encoding } from "tiktoken";
-export function getTokenLength(input: string): number {
- // const { get_encoding } = require( "tiktoken" );
- // const encoding = get_encoding("cl100k_base");
-
- const { Tiktoken } = require("tiktoken/lite");
- const cl100k_base = require("tiktoken/encoders/cl100k_base.json");
- const encoding = new Tiktoken(
- cl100k_base.bpe_ranks,
- cl100k_base.special_tokens,
- cl100k_base.pat_str,
- );
- const tokenLength = encoding.encode(input).length;
- // console.log('[TOKEN],=========', input, tokenLength)
-
- return tokenLength;
-}
+// export function getTokenLength(input: string): number {
+// // const { get_encoding } = require( "tiktoken" );
+// // const encoding = get_encoding("cl100k_base");
+//
+// const { Tiktoken } = require("tiktoken/lite");
+// const cl100k_base = require("tiktoken/encoders/cl100k_base.json");
+// const encoding = new Tiktoken(
+// cl100k_base.bpe_ranks,
+// cl100k_base.special_tokens,
+// cl100k_base.pat_str,
+// );
+// const tokenLength = encoding.encode(input).length;
+// // console.log('[TOKEN],=========', input, tokenLength)
+//
+// return tokenLength;
+// }
diff --git a/lib/auth_list.ts b/lib/auth_list.ts
index 27d7616cc..c28ea6df2 100644
--- a/lib/auth_list.ts
+++ b/lib/auth_list.ts
@@ -4,7 +4,8 @@ export const DENY_LIST: string[] = [
]
export const ADMIN_LIST: string[] = [
"司金辉", "sijinhui", "sijinhui@qq.com",
- "yuchuan", "于川"
+ "yuchuan", "于川",
+ "jujujujuju",
]
diff --git a/lib/utils.ts b/lib/utils.ts
index f43cf2645..c2c0e3fad 100644
--- a/lib/utils.ts
+++ b/lib/utils.ts
@@ -1,9 +1,13 @@
-// import { clsx, type ClassValue } from "clsx";
-import { twMerge } from "tailwind-merge";
-// export function cn(...inputs: ClassValue[]) {
-// return twMerge(clsx(inputs));
-// }
+import {get_encoding} from "tiktoken";
+
+
+export function getTokenLength(input: string): number {
+ const encoding = get_encoding("cl100k_base");
+ // console.log('tokens: ', input, encoding.countTokens())
+ return encoding.encode(input).length;
+}
+
export async function fetcher(
input: RequestInfo,
init?: RequestInit,
diff --git a/public/grinning-face.webp b/public/grinning-face.webp
new file mode 100644
index 000000000..6e350846a
Binary files /dev/null and b/public/grinning-face.webp differ