mirror of
				https://github.com/ChatGPTNextWeb/ChatGPT-Next-Web.git
				synced 2025-11-04 16:23:41 +08:00 
			
		
		
		
	Merge branch 'Yidadaa:main' into main
This commit is contained in:
		
							
								
								
									
										5
									
								
								.github/workflows/sync.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										5
									
								
								.github/workflows/sync.yml
									
									
									
									
										vendored
									
									
								
							@@ -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
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -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
 | 
			
		||||
 
 | 
			
		||||
@@ -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);
 | 
			
		||||
 
 | 
			
		||||
@@ -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;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user