From 5854d12aae3ce28cf9659a6d8915a058042d3919 Mon Sep 17 00:00:00 2001
From: Yidadaa <yidadaa@qq.com>
Date: Wed, 7 Jun 2023 01:02:01 +0800
Subject: [PATCH] fix: #1815 refuse to serve when disable gpt4

---
 app/api/common.ts   | 25 +++++++++++++++++++++++--
 app/store/config.ts |  8 --------
 app/store/update.ts |  2 +-
 3 files changed, 24 insertions(+), 11 deletions(-)

diff --git a/app/api/common.ts b/app/api/common.ts
index 03247539a25..c650c545b30 100644
--- a/app/api/common.ts
+++ b/app/api/common.ts
@@ -1,9 +1,10 @@
-import { NextRequest } from "next/server";
+import { NextRequest, NextResponse } from "next/server";
 
 export const OPENAI_URL = "api.openai.com";
 const DEFAULT_PROTOCOL = "https";
 const PROTOCOL = process.env.PROTOCOL ?? DEFAULT_PROTOCOL;
 const BASE_URL = process.env.BASE_URL ?? OPENAI_URL;
+const DISABLE_GPT4 = !!process.env.DISABLE_GPT4;
 
 export async function requestOpenai(req: NextRequest) {
   const controller = new AbortController();
@@ -41,10 +42,30 @@ export async function requestOpenai(req: NextRequest) {
     },
     cache: "no-store",
     method: req.method,
-    body: req.body,
+    body: req.clone().body,
     signal: controller.signal,
   };
 
+  // #1815 try to refuse gpt4 request
+  if (DISABLE_GPT4) {
+    try {
+      const clonedBody = await req.clone().json();
+      if ((clonedBody?.model ?? "").includes("gpt-4")) {
+        return NextResponse.json(
+          {
+            error: true,
+            message: "you are not allowed to use gpt-4 model",
+          },
+          {
+            status: 403,
+          },
+        );
+      }
+    } catch (e) {
+      console.error("[OpenAI] gpt4 filter", e);
+    }
+  }
+
   try {
     const res = await fetch(fetchUrl, fetchOptions);
 
diff --git a/app/store/config.ts b/app/store/config.ts
index 6802a402ba1..1e960456ff4 100644
--- a/app/store/config.ts
+++ b/app/store/config.ts
@@ -68,14 +68,6 @@ export const ALL_MODELS = [
     name: "gpt-4-32k-0314",
     available: ENABLE_GPT4,
   },
-  {
-    name: "gpt-4-mobile",
-    available: ENABLE_GPT4,
-  },
-  {
-    name: "text-davinci-002-render-sha-mobile",
-    available: true,
-  },
   {
     name: "gpt-3.5-turbo",
     available: true,
diff --git a/app/store/update.ts b/app/store/update.ts
index 00a2edda1b9..5a9bec9d71d 100644
--- a/app/store/update.ts
+++ b/app/store/update.ts
@@ -84,7 +84,7 @@ export const useUpdateStore = create<UpdateStore>()(
             }));
           }
         } catch (e) {
-          showToast((e as Error).message);
+          console.error((e as Error).message);
         }
       },
     }),