From 0c589f6e0a6b466d73c6de467ef00771e74067ac Mon Sep 17 00:00:00 2001 From: Dorbmon Date: Wed, 25 Dec 2024 11:36:12 +0800 Subject: [PATCH 01/17] update --- app/components/sidebar.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/components/sidebar.tsx b/app/components/sidebar.tsx index a5e33b15ea3..b46446bdda1 100644 --- a/app/components/sidebar.tsx +++ b/app/components/sidebar.tsx @@ -231,8 +231,8 @@ export function SideBar(props: { className?: string }) { {...props} > } shouldNarrow={shouldNarrow} > From 36c439ec6b62a5a1d5134ee9482eed883753cc06 Mon Sep 17 00:00:00 2001 From: Dorbmon Date: Wed, 25 Dec 2024 11:38:38 +0800 Subject: [PATCH 02/17] feat: link --- app/components/sidebar.tsx | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/app/components/sidebar.tsx b/app/components/sidebar.tsx index b46446bdda1..ddc337280f1 100644 --- a/app/components/sidebar.tsx +++ b/app/components/sidebar.tsx @@ -177,13 +177,15 @@ export function SideBarHeader(props: { })} data-tauri-drag-region > -
-
- {title} + +
+
+ {title} +
+
{subTitle}
-
{subTitle}
-
-
{logo}
+
{logo}
+
{children} From de97f81730193d014d68cae4c92c0cca2fe9a533 Mon Sep 17 00:00:00 2001 From: Dorbmon Date: Wed, 25 Dec 2024 11:54:40 +0800 Subject: [PATCH 03/17] gradient color --- app/components/home.module.scss | 21 +++++++++++++++++++++ app/components/sidebar.tsx | 14 ++++++-------- package.json | 4 ++-- yarn.lock | 13 ++++--------- 4 files changed, 33 insertions(+), 19 deletions(-) diff --git a/app/components/home.module.scss b/app/components/home.module.scss index 381b6a9b951..3f26e263836 100644 --- a/app/components/home.module.scss +++ b/app/components/home.module.scss @@ -347,3 +347,24 @@ .rtl-screen { direction: rtl; } +@keyframes gradientAnimation { + 0% { + background-position: 0% 50%; + } + 50% { + background-position: 100% 50%; + } + 100% { + background-position: 0% 50%; + } +} + +.sidebar-title, +.sidebar-sub-title { + background: linear-gradient(270deg, #ff0000, #800080); + background-size: 200% 200%; + -webkit-background-clip: text; + background-clip: text; + -webkit-text-fill-color: transparent; + animation: gradientAnimation 5s ease infinite; +} diff --git a/app/components/sidebar.tsx b/app/components/sidebar.tsx index ddc337280f1..b46446bdda1 100644 --- a/app/components/sidebar.tsx +++ b/app/components/sidebar.tsx @@ -177,15 +177,13 @@ export function SideBarHeader(props: { })} data-tauri-drag-region > - -
-
- {title} -
-
{subTitle}
+
+
{logo}
{children} diff --git a/package.json b/package.json index e081567a4b1..1d8612e80f7 100644 --- a/package.json +++ b/package.json @@ -49,11 +49,11 @@ "remark-breaks": "^3.0.2", "remark-gfm": "^3.0.1", "remark-math": "^5.1.1", + "rt-client": "https://github.com/Azure-Samples/aoai-realtime-audio-sdk/releases/download/js/v0.5.0/rt-client-0.5.0.tgz", "sass": "^1.59.2", "spark-md5": "^3.0.2", "use-debounce": "^9.0.4", - "zustand": "^4.3.8", - "rt-client": "https://github.com/Azure-Samples/aoai-realtime-audio-sdk/releases/download/js/v0.5.0/rt-client-0.5.0.tgz" + "zustand": "^4.3.8" }, "devDependencies": { "@tauri-apps/api": "^1.6.0", diff --git a/yarn.lock b/yarn.lock index dffc35e9cb7..004dbf8935c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3062,15 +3062,10 @@ camelcase@^6.2.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== -caniuse-lite@^1.0.30001449, caniuse-lite@^1.0.30001503, caniuse-lite@^1.0.30001579: - version "1.0.30001617" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001617.tgz#809bc25f3f5027ceb33142a7d6c40759d7a901eb" - integrity sha512-mLyjzNI9I+Pix8zwcrpxEbGlfqOkF9kM3ptzmKNw5tizSyYwMe+nGLTqMK9cO+0E+Bh6TsBxNAaHWEM8xwSsmA== - -caniuse-lite@^1.0.30001646: - version "1.0.30001649" - resolved "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001649.tgz#3ec700309ca0da2b0d3d5fb03c411b191761c992" - integrity sha512-fJegqZZ0ZX8HOWr6rcafGr72+xcgJKI9oWfDW5DrD7ExUtgZC7a7R7ZYmZqplh7XDocFdGeIFn7roAxhOeYrPQ== +caniuse-lite@^1.0.30001449, caniuse-lite@^1.0.30001503, caniuse-lite@^1.0.30001579, caniuse-lite@^1.0.30001646: + version "1.0.30001690" + resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001690.tgz" + integrity sha512-5ExiE3qQN6oF8Clf8ifIDcMRCRE/dMGcETG/XGMD8/XiXm6HXQgQTh1yZYLXXpSOsEUlJm1Xr7kGULZTuGtP/w== ccount@^2.0.0: version "2.0.1" From 442feabcce17e29986e8336646436052338ceb8a Mon Sep 17 00:00:00 2001 From: Dorbmon Date: Wed, 25 Dec 2024 13:02:33 +0800 Subject: [PATCH 04/17] fix --- app/components/sidebar.tsx | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/app/components/sidebar.tsx b/app/components/sidebar.tsx index b46446bdda1..ddc337280f1 100644 --- a/app/components/sidebar.tsx +++ b/app/components/sidebar.tsx @@ -177,13 +177,15 @@ export function SideBarHeader(props: { })} data-tauri-drag-region > - {children} From fa2b89ce3789cc462d82b84deba29092f3cfcc5f Mon Sep 17 00:00:00 2001 From: Dorbmon Date: Wed, 25 Dec 2024 14:31:28 +0800 Subject: [PATCH 05/17] feat: toast --- app/components/chat.tsx | 7 +++++-- package.json | 1 + yarn.lock | 7 +++++++ 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/app/components/chat.tsx b/app/components/chat.tsx index 51fe74fe7be..8e52f923310 100644 --- a/app/components/chat.tsx +++ b/app/components/chat.tsx @@ -8,7 +8,7 @@ import React, { Fragment, RefObject, } from "react"; - +import { toast } from "react-toastify"; import SendWhiteIcon from "../icons/send-white.svg"; import BrainIcon from "../icons/brain.svg"; import RenameIcon from "../icons/rename.svg"; @@ -2041,7 +2041,10 @@ function _Chat() { text={Locale.Chat.Send} className={styles["chat-input-send"]} type="primary" - onClick={() => doSubmit(userInput)} + onClick={() => { + toast("刘子阳真是爱江晨成!!!"); + doSubmit(userInput); + }} /> diff --git a/package.json b/package.json index 1d8612e80f7..83499d88802 100644 --- a/package.json +++ b/package.json @@ -44,6 +44,7 @@ "react-dom": "^18.2.0", "react-markdown": "^8.0.7", "react-router-dom": "^6.15.0", + "react-toastify": "^11.0.2", "rehype-highlight": "^6.0.0", "rehype-katex": "^6.0.3", "remark-breaks": "^3.0.2", diff --git a/yarn.lock b/yarn.lock index 004dbf8935c..fa86dd97a9c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7204,6 +7204,13 @@ react-router@6.15.0: dependencies: "@remix-run/router" "1.8.0" +react-toastify@^11.0.2: + version "11.0.2" + resolved "https://registry.yarnpkg.com/react-toastify/-/react-toastify-11.0.2.tgz#5c5ae745f3c7240015a8746217595cd26701fdc3" + integrity sha512-GjHuGaiXMvbls3ywqv8XdWONwrcO4DXCJIY1zVLkHU73gEElKvTTXNI5Vom3s/k/M8hnkrfsqgBSX3OwmlonbA== + dependencies: + clsx "^2.1.1" + react@^18.2.0: version "18.2.0" resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" From 3774eb023d7072f7df8b400ae737b45883664765 Mon Sep 17 00:00:00 2001 From: Dorbmon Date: Wed, 25 Dec 2024 14:31:54 +0800 Subject: [PATCH 06/17] fix --- app/components/sidebar.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/components/sidebar.tsx b/app/components/sidebar.tsx index ddc337280f1..49439e3e62a 100644 --- a/app/components/sidebar.tsx +++ b/app/components/sidebar.tsx @@ -234,7 +234,7 @@ export function SideBar(props: { className?: string }) { > } shouldNarrow={shouldNarrow} > From 1c0205362f5ed7be9e9ebee6f56283b7d3dbeb91 Mon Sep 17 00:00:00 2001 From: Dorbmon Date: Wed, 25 Dec 2024 14:34:57 +0800 Subject: [PATCH 07/17] update --- app/components/chat.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/components/chat.tsx b/app/components/chat.tsx index 8e52f923310..0637bec7650 100644 --- a/app/components/chat.tsx +++ b/app/components/chat.tsx @@ -8,7 +8,7 @@ import React, { Fragment, RefObject, } from "react"; -import { toast } from "react-toastify"; +import { toast, ToastContainer } from "react-toastify"; import SendWhiteIcon from "../icons/send-white.svg"; import BrainIcon from "../icons/brain.svg"; import RenameIcon from "../icons/rename.svg"; @@ -2036,6 +2036,7 @@ function _Chat() { })} )} + } text={Locale.Chat.Send} From 992a9ea5a009a2b00b9605352283902eb1d1c382 Mon Sep 17 00:00:00 2001 From: Dorbmon Date: Wed, 25 Dec 2024 14:45:21 +0800 Subject: [PATCH 08/17] feat: random --- app/components/sidebar.tsx | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/app/components/sidebar.tsx b/app/components/sidebar.tsx index 49439e3e62a..b4790097e5d 100644 --- a/app/components/sidebar.tsx +++ b/app/components/sidebar.tsx @@ -1,3 +1,4 @@ +"use client"; import React, { useEffect, useRef, useMemo, useState, Fragment } from "react"; import styles from "./home.module.scss"; @@ -225,7 +226,15 @@ export function SideBar(props: { className?: string }) { const navigate = useNavigate(); const config = useAppConfig(); const chatStore = useChatStore(); - + let [title, setTitle] = useState("刘子阳最爱江晨成"); + let [subTitle, setSubTitle] = useState("江晨成最爱刘子阳"); + useEffect(() => { + if (Math.random() > 0.5) { + const temp = title; + setTitle(subTitle); + setSubTitle(temp); + } + }, [title, subTitle]); return ( Date: Wed, 25 Dec 2024 14:47:05 +0800 Subject: [PATCH 09/17] fix --- app/components/sidebar.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/components/sidebar.tsx b/app/components/sidebar.tsx index b4790097e5d..0952a4e5c24 100644 --- a/app/components/sidebar.tsx +++ b/app/components/sidebar.tsx @@ -242,8 +242,8 @@ export function SideBar(props: { className?: string }) { {...props} > } shouldNarrow={shouldNarrow} > From 4fc20979fceed8dffa39af136802c6d9a2abbbfe Mon Sep 17 00:00:00 2001 From: Dorbmon Date: Wed, 25 Dec 2024 15:04:00 +0800 Subject: [PATCH 10/17] fair --- app/components/sidebar.tsx | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/app/components/sidebar.tsx b/app/components/sidebar.tsx index 0952a4e5c24..52d62411487 100644 --- a/app/components/sidebar.tsx +++ b/app/components/sidebar.tsx @@ -226,15 +226,24 @@ export function SideBar(props: { className?: string }) { const navigate = useNavigate(); const config = useAppConfig(); const chatStore = useChatStore(); - let [title, setTitle] = useState("刘子阳最爱江晨成"); - let [subTitle, setSubTitle] = useState("江晨成最爱刘子阳"); + const [title, setTitle] = useState("刘子阳最爱江晨成"); + const [subTitle, setSubTitle] = useState("江晨成最爱刘子阳"); + const titleRef = useRef(title); + const subTitleRef = useRef(subTitle); + useEffect(() => { - if (Math.random() > 0.5) { - const temp = title; - setTitle(subTitle); - setSubTitle(temp); - } + titleRef.current = title; + subTitleRef.current = subTitle; }, [title, subTitle]); + + useEffect(() => { + const timer = setInterval(() => { + setTitle(subTitleRef.current); + setSubTitle(titleRef.current); + console.log("Swap", subTitleRef.current, titleRef.current); + }, 1000); + return () => clearInterval(timer); + }, []); return ( Date: Wed, 25 Dec 2024 15:04:12 +0800 Subject: [PATCH 11/17] larger interval --- app/components/sidebar.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/components/sidebar.tsx b/app/components/sidebar.tsx index 52d62411487..20ec60752a7 100644 --- a/app/components/sidebar.tsx +++ b/app/components/sidebar.tsx @@ -241,7 +241,7 @@ export function SideBar(props: { className?: string }) { setTitle(subTitleRef.current); setSubTitle(titleRef.current); console.log("Swap", subTitleRef.current, titleRef.current); - }, 1000); + }, 5000); return () => clearInterval(timer); }, []); return ( From 2c9ee8f5b21fac4159de098e5517b9c821bb6cac Mon Sep 17 00:00:00 2001 From: Dorbmon Date: Thu, 26 Dec 2024 15:15:53 +0800 Subject: [PATCH 12/17] feat: remove useless model --- app/constant.ts | 162 +++++++----------------------------------------- 1 file changed, 22 insertions(+), 140 deletions(-) diff --git a/app/constant.ts b/app/constant.ts index 5759411af17..cba3dfadb67 100644 --- a/app/constant.ts +++ b/app/constant.ts @@ -308,58 +308,39 @@ export const VISION_MODEL_REGEXES = [ export const EXCLUDE_VISION_MODEL_REGEXES = [/claude-3-5-haiku-20241022/]; const openaiModels = [ - "gpt-3.5-turbo", - "gpt-3.5-turbo-1106", - "gpt-3.5-turbo-0125", - "gpt-4", - "gpt-4-0613", - "gpt-4-32k", - "gpt-4-32k-0613", - "gpt-4-turbo", - "gpt-4-turbo-preview", + // "gpt-3.5-turbo", + // "gpt-3.5-turbo-1106", + // "gpt-3.5-turbo-0125", + // "gpt-4", + // "gpt-4-0613", + // "gpt-4-32k", + // "gpt-4-32k-0613", + // "gpt-4-turbo", + // "gpt-4-turbo-preview", "gpt-4o", - "gpt-4o-2024-05-13", - "gpt-4o-2024-08-06", - "gpt-4o-2024-11-20", - "chatgpt-4o-latest", "gpt-4o-mini", - "gpt-4o-mini-2024-07-18", - "gpt-4-vision-preview", - "gpt-4-turbo-2024-04-09", - "gpt-4-1106-preview", - "dall-e-3", + "o1", "o1-mini", - "o1-preview", + // "gpt-4o-2024-05-13", + // "gpt-4o-2024-08-06", + // "gpt-4o-2024-11-20", + // "chatgpt-4o-latest", + // "gpt-4o-mini", + // "gpt-4o-mini-2024-07-18", + // "gpt-4-vision-preview", + // "gpt-4-turbo-2024-04-09", + // "gpt-4-1106-preview", + // "dall-e-3", + // "o1-mini", + // "o1-preview", ]; const googleModels = [ - "gemini-1.0-pro", // Deprecated on 2/15/2025 - "gemini-1.5-pro-latest", - "gemini-1.5-pro", - "gemini-1.5-pro-002", - "gemini-1.5-pro-exp-0827", - "gemini-1.5-flash-latest", - "gemini-1.5-flash-8b-latest", - "gemini-1.5-flash", - "gemini-1.5-flash-8b", - "gemini-1.5-flash-002", - "gemini-1.5-flash-exp-0827", - "learnlm-1.5-pro-experimental", - "gemini-exp-1114", - "gemini-exp-1121", - "gemini-exp-1206", "gemini-2.0-flash-exp", "gemini-2.0-flash-thinking-exp-1219", ]; const anthropicModels = [ - "claude-instant-1.2", - "claude-2.0", - "claude-2.1", - "claude-3-sonnet-20240229", - "claude-3-opus-20240229", - "claude-3-opus-latest", - "claude-3-haiku-20240307", "claude-3-5-haiku-20241022", "claude-3-5-haiku-latest", "claude-3-5-sonnet-20240620", @@ -446,17 +427,6 @@ export const DEFAULT_MODELS = [ sorted: 1, // 这里是固定的,确保顺序与之前内置的版本一致 }, })), - ...openaiModels.map((name) => ({ - name, - available: true, - sorted: seq++, - provider: { - id: "azure", - providerName: "Azure", - providerType: "azure", - sorted: 2, - }, - })), ...googleModels.map((name) => ({ name, available: true, @@ -479,94 +449,6 @@ export const DEFAULT_MODELS = [ sorted: 4, }, })), - ...baiduModels.map((name) => ({ - name, - available: true, - sorted: seq++, - provider: { - id: "baidu", - providerName: "Baidu", - providerType: "baidu", - sorted: 5, - }, - })), - ...bytedanceModels.map((name) => ({ - name, - available: true, - sorted: seq++, - provider: { - id: "bytedance", - providerName: "ByteDance", - providerType: "bytedance", - sorted: 6, - }, - })), - ...alibabaModes.map((name) => ({ - name, - available: true, - sorted: seq++, - provider: { - id: "alibaba", - providerName: "Alibaba", - providerType: "alibaba", - sorted: 7, - }, - })), - ...tencentModels.map((name) => ({ - name, - available: true, - sorted: seq++, - provider: { - id: "tencent", - providerName: "Tencent", - providerType: "tencent", - sorted: 8, - }, - })), - ...moonshotModes.map((name) => ({ - name, - available: true, - sorted: seq++, - provider: { - id: "moonshot", - providerName: "Moonshot", - providerType: "moonshot", - sorted: 9, - }, - })), - ...iflytekModels.map((name) => ({ - name, - available: true, - sorted: seq++, - provider: { - id: "iflytek", - providerName: "Iflytek", - providerType: "iflytek", - sorted: 10, - }, - })), - ...xAIModes.map((name) => ({ - name, - available: true, - sorted: seq++, - provider: { - id: "xai", - providerName: "XAI", - providerType: "xai", - sorted: 11, - }, - })), - ...chatglmModels.map((name) => ({ - name, - available: true, - sorted: seq++, - provider: { - id: "chatglm", - providerName: "ChatGLM", - providerType: "chatglm", - sorted: 12, - }, - })), ] as const; export const CHAT_PAGE_SIZE = 15; From 514d03a4619fe25f54f52690036b4799219b3fbe Mon Sep 17 00:00:00 2001 From: Dorbmon Date: Thu, 26 Dec 2024 15:28:08 +0800 Subject: [PATCH 13/17] feat: o1 as vision model --- app/constant.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/app/constant.ts b/app/constant.ts index cba3dfadb67..56bc4708537 100644 --- a/app/constant.ts +++ b/app/constant.ts @@ -303,6 +303,7 @@ export const VISION_MODEL_REGEXES = [ /qwen2-vl/, /gpt-4-turbo(?!.*preview)/, // Matches "gpt-4-turbo" but not "gpt-4-turbo-preview" /^dall-e-3$/, // Matches exactly "dall-e-3" + /^o1/, // Matches o1 models ]; export const EXCLUDE_VISION_MODEL_REGEXES = [/claude-3-5-haiku-20241022/]; From d5edb3718b1839532a5b451fef91f846514e9922 Mon Sep 17 00:00:00 2001 From: Dorbmon Date: Thu, 26 Dec 2024 15:33:13 +0800 Subject: [PATCH 14/17] fix --- app/client/platforms/openai.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/client/platforms/openai.ts b/app/client/platforms/openai.ts index 15cfb7ca602..5962f58bdb2 100644 --- a/app/client/platforms/openai.ts +++ b/app/client/platforms/openai.ts @@ -240,7 +240,7 @@ export class ChatGPTApi implements LLMApi { } // add max_tokens to vision model - if (visionModel) { + if (!isO1 && visionModel) { requestPayload["max_tokens"] = Math.max(modelConfig.max_tokens, 4000); } } From 7dcfea1e05cb89a3bb4a8a1e58720c6e38e46ba4 Mon Sep 17 00:00:00 2001 From: Dorbmon Date: Thu, 26 Dec 2024 15:40:16 +0800 Subject: [PATCH 15/17] fix --- app/client/platforms/openai.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/client/platforms/openai.ts b/app/client/platforms/openai.ts index 5962f58bdb2..d821722cd31 100644 --- a/app/client/platforms/openai.ts +++ b/app/client/platforms/openai.ts @@ -224,7 +224,7 @@ export class ChatGPTApi implements LLMApi { // O1 not support image, tools (plugin in ChatGPTNextWeb) and system, stream, logprobs, temperature, top_p, n, presence_penalty, frequency_penalty yet. requestPayload = { messages, - stream: options.config.stream, + stream: !isO1 && options.config.stream, model: modelConfig.model, temperature: !isO1 ? modelConfig.temperature : 1, presence_penalty: !isO1 ? modelConfig.presence_penalty : 0, From 20b8b707d6d17b1ee3b9eaaf1f50f64ef1206163 Mon Sep 17 00:00:00 2001 From: Dorbmon Date: Thu, 26 Dec 2024 15:47:53 +0800 Subject: [PATCH 16/17] fix --- app/client/platforms/openai.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/client/platforms/openai.ts b/app/client/platforms/openai.ts index d821722cd31..a9506fa5a4b 100644 --- a/app/client/platforms/openai.ts +++ b/app/client/platforms/openai.ts @@ -247,7 +247,7 @@ export class ChatGPTApi implements LLMApi { console.log("[Request] openai payload: ", requestPayload); - const shouldStream = !isDalle3 && !!options.config.stream; + const shouldStream = !isDalle3 && !!options.config.stream && !isO1; const controller = new AbortController(); options.onController?.(controller); From 034b07d3a483eeb5ffd5836b5436f5eee57033f8 Mon Sep 17 00:00:00 2001 From: Dorbmon Date: Thu, 26 Dec 2024 15:57:33 +0800 Subject: [PATCH 17/17] fallback --- app/constant.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/app/constant.ts b/app/constant.ts index 56bc4708537..18236ae3c06 100644 --- a/app/constant.ts +++ b/app/constant.ts @@ -322,6 +322,7 @@ const openaiModels = [ "gpt-4o-mini", "o1", "o1-mini", + "o1-preview", // "gpt-4o-2024-05-13", // "gpt-4o-2024-08-06", // "gpt-4o-2024-11-20",