Browse Source

Merge branch 'Yidadaa:main' into main

Ruger 1 year ago
parent
commit
ec88785b6d
4 changed files with 30 additions and 16 deletions
  1. 4 1
      .github/workflows/sync.yml
  2. 11 7
      app/components/chat.tsx
  3. 3 4
      app/requests.ts
  4. 12 4
      app/store/app.ts

+ 4 - 1
.github/workflows/sync.yml

@@ -1,5 +1,8 @@
 name: Upstream Sync
 
+permissions:
+  contents: write
+
 on:
   schedule:
     - cron: "0 */6 * * *" # every 6 hours
@@ -12,7 +15,7 @@ jobs:
     if: ${{ github.event.repository.fork }}
 
     steps:
-      # Step 1: run a standard checkout action, provided by github
+      # Step 1: run a standard checkout action
       - name: Checkout target repo
         uses: actions/checkout@v3
 

+ 11 - 7
app/components/chat.tsx

@@ -370,7 +370,8 @@ export function Chat(props: {
     chatStore.onUserInput(userInput).then(() => setIsLoading(false));
     setUserInput("");
     setPromptHints([]);
-    inputRef.current?.focus();
+    if (!isMobileScreen()) inputRef.current?.focus();
+    setAutoScroll(true);
   };
 
   // stop response
@@ -507,7 +508,10 @@ export function Chat(props: {
               bordered
               title={Locale.Chat.Actions.Export}
               onClick={() => {
-                exportMessages(session.messages, session.topic);
+                exportMessages(
+                  session.messages.filter((msg) => !msg.isError),
+                  session.topic,
+                );
               }}
             />
           </div>
@@ -524,7 +528,11 @@ export function Chat(props: {
         className={styles["chat-body"]}
         ref={scrollRef}
         onScroll={(e) => onChatBodyScroll(e.currentTarget)}
-        onTouchStart={() => inputRef.current?.blur()}
+        onWheel={() => setAutoScroll(false)}
+        onTouchStart={() => {
+          inputRef.current?.blur();
+          setAutoScroll(false);
+        }}
       >
         {messages.map((message, i) => {
           const isUser = message.role === "user";
@@ -585,7 +593,6 @@ export function Chat(props: {
                         if (!isMobileScreen()) return;
                         setUserInput(message.content);
                       }}
-                      onMouseOver={() => inputRef.current?.blur()}
                     >
                       <Markdown content={message.content} />
                     </div>
@@ -620,9 +627,6 @@ export function Chat(props: {
               setAutoScroll(false);
               setTimeout(() => setPromptHints([]), 500);
             }}
-            onMouseOver={() => {
-              inputRef.current?.focus();
-            }}
             autoFocus={!props?.sideBarShowing}
           />
           <IconButton

+ 3 - 4
app/requests.ts

@@ -114,7 +114,7 @@ export async function requestChatStream(
     filterBot?: boolean;
     modelConfig?: ModelConfig;
     onMessage: (message: string, done: boolean) => void;
-    onError: (error: Error) => void;
+    onError: (error: Error, statusCode?: number) => void;
     onController?: (controller: AbortController) => void;
   },
 ) {
@@ -178,11 +178,10 @@ export async function requestChatStream(
       finish();
     } else if (res.status === 401) {
       console.error("Anauthorized");
-      responseText = Locale.Error.Unauthorized;
-      finish();
+      options?.onError(new Error("Anauthorized"), res.status);
     } else {
       console.error("Stream Error", res.body);
-      options?.onError(new Error("Stream Error"));
+      options?.onError(new Error("Stream Error"), res.status);
     }
   } catch (err) {
     console.error("NetWork Error", err);

+ 12 - 4
app/store/app.ts

@@ -14,6 +14,7 @@ import Locale from "../locales";
 export type Message = ChatCompletionResponseMessage & {
   date: string;
   streaming?: boolean;
+  isError?: boolean;
 };
 
 export enum SubmitKey {
@@ -351,9 +352,15 @@ export const useChatStore = create<ChatStore>()(
               set(() => ({}));
             }
           },
-          onError(error) {
-            botMessage.content += "\n\n" + Locale.Store.Error;
+          onError(error, statusCode) {
+            if (statusCode === 401) {
+              botMessage.content = Locale.Error.Unauthorized;
+            } else {
+              botMessage.content += "\n\n" + Locale.Store.Error;
+            }
             botMessage.streaming = false;
+            userMessage.isError = true;
+            botMessage.isError = true;
             set(() => ({}));
             ControllerPool.remove(sessionIndex, messageIndex);
           },
@@ -383,7 +390,8 @@ export const useChatStore = create<ChatStore>()(
       getMessagesWithMemory() {
         const session = get().currentSession();
         const config = get().config;
-        const n = session.messages.length;
+        const messages = session.messages.filter((msg) => !msg.isError);
+        const n = messages.length;
 
         const context = session.context.slice();
 
@@ -393,7 +401,7 @@ export const useChatStore = create<ChatStore>()(
         }
 
         const recentMessages = context.concat(
-          session.messages.slice(Math.max(0, n - config.historyMessageCount)),
+          messages.slice(Math.max(0, n - config.historyMessageCount)),
         );
 
         return recentMessages;