From 60ed7dd71d0f69f8977167ffd6e9dc06c74d31c5 Mon Sep 17 00:00:00 2001 From: Hao Wu Date: Sat, 25 Mar 2023 10:10:28 +0800 Subject: [PATCH 1/6] json parse error --- api/chat_message_service.go | 20 +++++++---------- web/src/views/chat/index.vue | 43 +++++++++++++++++++----------------- 2 files changed, 31 insertions(+), 32 deletions(-) diff --git a/api/chat_message_service.go b/api/chat_message_service.go index 7c64cdc1..e28e713e 100644 --- a/api/chat_message_service.go +++ b/api/chat_message_service.go @@ -29,7 +29,6 @@ func (s *ChatMessageService) CreateChatMessage(ctx context.Context, message_para return message, nil } - // GetChatMessageByID returns a chat message by ID. func (s *ChatMessageService) GetChatMessageByID(ctx context.Context, id int32) (sqlc_queries.ChatMessage, error) { message, err := s.q.GetChatMessageByID(ctx, id) @@ -43,7 +42,7 @@ func (s *ChatMessageService) GetChatMessageByID(ctx context.Context, id int32) ( func (s *ChatMessageService) UpdateChatMessage(ctx context.Context, message_params sqlc_queries.UpdateChatMessageParams) (sqlc_queries.ChatMessage, error) { message_u, err := s.q.UpdateChatMessage(ctx, message_params) if err != nil { - return sqlc_queries.ChatMessage{}, errors.New("failed to update message") + return sqlc_queries.ChatMessage{}, fmt.Errorf("failed to update message %w", err) } return message_u, nil } @@ -52,7 +51,7 @@ func (s *ChatMessageService) UpdateChatMessage(ctx context.Context, message_para func (s *ChatMessageService) DeleteChatMessage(ctx context.Context, id int32) error { err := s.q.DeleteChatMessage(ctx, id) if err != nil { - return errors.New("failed to delete message") + return fmt.Errorf("failed to delete message %w", err) } return nil } @@ -61,7 +60,7 @@ func (s *ChatMessageService) DeleteChatMessage(ctx context.Context, id int32) er func (s *ChatMessageService) DeleteChatMessageByUUID(ctx context.Context, uuid string) error { err := s.q.DeleteChatMessageByUUID(ctx, uuid) if err != nil { - return errors.New("failed to delete message") + return fmt.Errorf("failed to delete message %w", err) } return nil } @@ -70,7 +69,7 @@ func (s *ChatMessageService) DeleteChatMessageByUUID(ctx context.Context, uuid s func (s *ChatMessageService) GetAllChatMessages(ctx context.Context) ([]sqlc_queries.ChatMessage, error) { messages, err := s.q.GetAllChatMessages(ctx) if err != nil { - return nil, errors.New("failed to retrieve messages") + return nil, fmt.Errorf("failed to retrieve messages %w", err) } return messages, nil } @@ -120,7 +119,7 @@ func (s *ChatMessageService) GetChatMessageByUUID(ctx context.Context, uuid stri func (s *ChatMessageService) UpdateChatMessageByUUID(ctx context.Context, message_params sqlc_queries.UpdateChatMessageByUUIDParams) (sqlc_queries.ChatMessage, error) { message_u, err := s.q.UpdateChatMessageByUUID(ctx, message_params) if err != nil { - return sqlc_queries.ChatMessage{}, errors.New("failed to update message") + return sqlc_queries.ChatMessage{}, fmt.Errorf("failed to update message %w", err) } return message_u, nil } @@ -134,7 +133,7 @@ func (s *ChatMessageService) GetChatMessagesBySessionUUID(ctx context.Context, u } message, err := s.q.GetChatMessagesBySessionUUID(ctx, param) if err != nil { - return []sqlc_queries.ChatMessage{}, errors.New("failed to retrieve message") + return []sqlc_queries.ChatMessage{}, fmt.Errorf("failed to retrieve message %w", err) } return message, nil } @@ -198,7 +197,7 @@ func (s *ChatMessageService) GetLastNChatMessages(ctx context.Context, uuid stri } message, err := s.q.GetLastNChatMessages(ctx, param) if err != nil { - return []sqlc_queries.ChatMessage{}, errors.New("failed to retrieve message") + return []sqlc_queries.ChatMessage{}, fmt.Errorf("failed to retrieve newest message %w", err) } return message, nil } @@ -206,10 +205,7 @@ func (s *ChatMessageService) GetLastNChatMessages(ctx context.Context, uuid stri // DeleteChatMessagesBySesionUUID deletes chat messages by session uuid. func (s *ChatMessageService) DeleteChatMessagesBySesionUUID(ctx context.Context, uuid string) error { err := s.q.DeleteChatMessagesBySesionUUID(ctx, uuid) - if err != nil { - return errors.New("failed to delete message") - } - return nil + return err } func (s *ChatMessageService) GetChatMessagesCount(ctx context.Context, userID int32) (int32, error) { diff --git a/web/src/views/chat/index.vue b/web/src/views/chat/index.vue index 61c81ef0..1fc31ac3 100644 --- a/web/src/views/chat/index.vue +++ b/web/src/views/chat/index.vue @@ -119,23 +119,28 @@ async function onConversationStream() { // Check if the chunk is not empty if (chunk) { // Parse the JSON data chunk - const data = JSON.parse(chunk) - const answer = data.choices[0].delta.content - const answer_uuid = data.id.replace('chatcmpl-', '') // use answer id as uuid - updateChat( - sessionUuid, - dataSources.value.length - 1, - { - uuid: answer_uuid, - dateTime: new Date().toLocaleString(), - text: answer, - inversion: false, - error: false, - loading: false, - conversationOptions: { conversationId: data.conversationId, parentMessageId: data.id }, - requestOptions: { prompt: message, options: { ...options } }, - }, - ) + try { + const data = JSON.parse(chunk) + const answer = data.choices[0].delta.content + const answer_uuid = data.id.replace('chatcmpl-', '') // use answer id as uuid + updateChat( + sessionUuid, + dataSources.value.length - 1, + { + uuid: answer_uuid, + dateTime: new Date().toLocaleString(), + text: answer, + inversion: false, + error: false, + loading: false, + conversationOptions: { conversationId: data.conversationId, parentMessageId: data.id }, + requestOptions: { prompt: message, options: { ...options } }, + }, + ) + } + catch (error) { + console.log(error) + } } }, ) @@ -422,9 +427,7 @@ onUnmounted(() => { />
- +
Date: Sat, 25 Mar 2023 10:53:29 +0800 Subject: [PATCH 2/6] update --- api/chat_main_handler.go | 43 ++++++++++++++++++++++++++++------------ 1 file changed, 30 insertions(+), 13 deletions(-) diff --git a/api/chat_main_handler.go b/api/chat_main_handler.go index f1af0f27..7c584bd5 100644 --- a/api/chat_main_handler.go +++ b/api/chat_main_handler.go @@ -210,7 +210,7 @@ func (h *ChatHandler) OpenAIChatCompletionAPIWithStreamHandler(w http.ResponseWr http.Error(w, "No messages found", http.StatusNotFound) } if msgs[0].Content == "test_demo_bestqa" || msgs[len(msgs)-1].Content == "test_demo_bestqa" { - answerText, answerID, shouldReturn := test_replay(w) + answerText, answerID, shouldReturn := test_replay(w, chatSession, msgs) if shouldReturn { return } @@ -241,17 +241,7 @@ func (h *ChatHandler) OpenAIChatCompletionAPIWithStreamHandler(w http.ResponseWr func chat_stream(w http.ResponseWriter, chatSession sqlc_queries.ChatSession, chat_compeletion_messages []openai.ChatCompletionMessage) (string, string, bool) { client := openai.NewClient(appConfig.OPENAI.API_KEY) - openai_req := openai.ChatCompletionRequest{ - Model: openai.GPT3Dot5Turbo, - Messages: chat_compeletion_messages, - MaxTokens: int(chatSession.MaxTokens), - Temperature: float32(chatSession.Temperature), - TopP: float32(chatSession.TopP), - // PresencePenalty: presencePenalty, - // FrequencyPenalty: frequencyPenalty, - // N: n, - Stream: true, - } + openai_req := newChatCompletionRequest(chatSession, chat_compeletion_messages) ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) defer cancel() stream, err := client.CreateChatCompletionStream(ctx, openai_req) @@ -315,7 +305,7 @@ func chat_stream(w http.ResponseWriter, chatSession sqlc_queries.ChatSession, ch return answer, answer_id, false } -func test_replay(w http.ResponseWriter) (string, string, bool) { +func test_replay(w http.ResponseWriter, chatSession sqlc_queries.ChatSession, chat_compeletion_messages []openai.ChatCompletionMessage) (string, string, bool) { //message := Message{Role: "assitant", Content:} uuid, _ := uuid.NewV4() setSSEHeader(w) @@ -332,9 +322,36 @@ func test_replay(w http.ResponseWriter) (string, string, bool) { data, _ := json.Marshal(resp) fmt.Fprintf(w, "data: %v\n\n", string(data)) flusher.Flush() + + if chatSession.Debug { + // PresencePenalty: presencePenalty, + // FrequencyPenalty: frequencyPenalty, + // N: n, + openai_req := newChatCompletionRequest(chatSession, chat_compeletion_messages ) + req_j, _ := json.Marshal(openai_req) + log.Println(string(req_j)) + answer = answer + "\n" + string(req_j) + req_as_resp := constructChatCompletionStreamReponse(answer_id, answer) + data, _ := json.Marshal(req_as_resp) + fmt.Fprintf(w, "data: %s\n\n", string(data)) + flusher.Flush() + } return answer, answer_id, false } +func newChatCompletionRequest(chatSession sqlc_queries.ChatSession, chat_compeletion_messages []openai.ChatCompletionMessage) openai.ChatCompletionRequest { + openai_req := openai.ChatCompletionRequest{ + Model: openai.GPT3Dot5Turbo, + Messages: chat_compeletion_messages, + MaxTokens: int(chatSession.MaxTokens), + Temperature: float32(chatSession.Temperature), + TopP: float32(chatSession.TopP), + + Stream: true, + } + return openai_req +} + func constructChatCompletionStreamReponse(answer_id string, answer string) openai.ChatCompletionStreamResponse { resp := openai.ChatCompletionStreamResponse{ ID: answer_id, From 5f9166de0de2da31338928822e4a57c32cabf57f Mon Sep 17 00:00:00 2001 From: Hao Wu Date: Sat, 25 Mar 2023 11:21:37 +0800 Subject: [PATCH 3/6] update --- api/chat_main_handler.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/api/chat_main_handler.go b/api/chat_main_handler.go index 7c584bd5..dc6e1cfd 100644 --- a/api/chat_main_handler.go +++ b/api/chat_main_handler.go @@ -147,7 +147,6 @@ func (h *ChatHandler) OpenAIChatCompletionAPIWithStreamHandler(w http.ResponseWr return } - // Set up SSE headers if chat_session.Debug { log.Printf("%+v\n", chatCompletionMessages) } @@ -242,7 +241,7 @@ func chat_stream(w http.ResponseWriter, chatSession sqlc_queries.ChatSession, ch client := openai.NewClient(appConfig.OPENAI.API_KEY) openai_req := newChatCompletionRequest(chatSession, chat_compeletion_messages) - ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) + ctx, cancel := context.WithTimeout(context.Background(), 100*time.Second) defer cancel() stream, err := client.CreateChatCompletionStream(ctx, openai_req) if err != nil { From d919aecbb8b47d0c4496dadaea3292daa377a9ee Mon Sep 17 00:00:00 2001 From: Hao Wu Date: Sat, 25 Mar 2023 11:28:02 +0800 Subject: [PATCH 4/6] update --- api/chat_main_service.go | 1 + api/chat_message_service.go | 13 ------------- api/sqlc/queries/chat_message.sql | 4 ++-- api/sqlc_queries/chat_message.sql.go | 11 ++++++----- 4 files changed, 9 insertions(+), 20 deletions(-) diff --git a/api/chat_main_service.go b/api/chat_main_service.go index 97f4ffa7..3de6b381 100644 --- a/api/chat_main_service.go +++ b/api/chat_main_service.go @@ -260,6 +260,7 @@ func (s *ChatService) getAskMessages(chatSession sqlc_queries.ChatSession, chatU sqlc_queries.GetLastNChatMessagesParams{ Uuid: chatUuid, Limit: lastN, + ChatSessionUuid: chatSessionUuid, }) } else { diff --git a/api/chat_message_service.go b/api/chat_message_service.go index e28e713e..24b70883 100644 --- a/api/chat_message_service.go +++ b/api/chat_message_service.go @@ -189,19 +189,6 @@ func (s *ChatMessageService) GetChatHistoryBySessionUUID(ctx context.Context, uu return msgs, nil } -// GetLastNChatMessagesByUUID returns last N chat message related by uuid. -func (s *ChatMessageService) GetLastNChatMessages(ctx context.Context, uuid string, n int32) ([]sqlc_queries.ChatMessage, error) { - param := sqlc_queries.GetLastNChatMessagesParams{ - Uuid: uuid, - Limit: n, - } - message, err := s.q.GetLastNChatMessages(ctx, param) - if err != nil { - return []sqlc_queries.ChatMessage{}, fmt.Errorf("failed to retrieve newest message %w", err) - } - return message, nil -} - // DeleteChatMessagesBySesionUUID deletes chat messages by session uuid. func (s *ChatMessageService) DeleteChatMessagesBySesionUUID(ctx context.Context, uuid string) error { err := s.q.DeleteChatMessagesBySesionUUID(ctx, uuid) diff --git a/api/sqlc/queries/chat_message.sql b/api/sqlc/queries/chat_message.sql index 7b9b9a51..7a34716d 100644 --- a/api/sqlc/queries/chat_message.sql +++ b/api/sqlc/queries/chat_message.sql @@ -92,8 +92,8 @@ FROM chat_message WHERE chat_message.id in ( SELECT id FROM chat_message cm - WHERE cm.chat_session_uuid = (SELECT chat_session_uuid FROM chat_message WHERE chat_message.uuid = $1) - AND cm.created_at < (SELECT created_at FROM chat_message WHERE chat_message.uuid = $1) + WHERE cm.chat_session_uuid = $3 + AND cm.id < (SELECT id FROM chat_message WHERE chat_message.uuid = $1) ORDER BY cm.created_at DESC LIMIT $2 ) diff --git a/api/sqlc_queries/chat_message.sql.go b/api/sqlc_queries/chat_message.sql.go index 4305f8e4..5d309bea 100644 --- a/api/sqlc_queries/chat_message.sql.go +++ b/api/sqlc_queries/chat_message.sql.go @@ -360,8 +360,8 @@ FROM chat_message WHERE chat_message.id in ( SELECT id FROM chat_message cm - WHERE cm.chat_session_uuid = (SELECT chat_session_uuid FROM chat_message WHERE chat_message.uuid = $1) - AND cm.created_at < (SELECT created_at FROM chat_message WHERE chat_message.uuid = $1) + WHERE cm.chat_session_uuid = $3 + AND cm.id < (SELECT id FROM chat_message WHERE chat_message.uuid = $1) ORDER BY cm.created_at DESC LIMIT $2 ) @@ -369,12 +369,13 @@ ORDER BY created_at ` type GetLastNChatMessagesParams struct { - Uuid string - Limit int32 + Uuid string + Limit int32 + ChatSessionUuid string } func (q *Queries) GetLastNChatMessages(ctx context.Context, arg GetLastNChatMessagesParams) ([]ChatMessage, error) { - rows, err := q.db.QueryContext(ctx, getLastNChatMessages, arg.Uuid, arg.Limit) + rows, err := q.db.QueryContext(ctx, getLastNChatMessages, arg.Uuid, arg.Limit, arg.ChatSessionUuid) if err != nil { return nil, err } From 826205b9296373c9a175943914762103b9cca338 Mon Sep 17 00:00:00 2001 From: Hao Wu Date: Sat, 25 Mar 2023 11:35:10 +0800 Subject: [PATCH 5/6] add just parameter range --- web/src/views/chat/components/Session/SessionConfig.vue | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/web/src/views/chat/components/Session/SessionConfig.vue b/web/src/views/chat/components/Session/SessionConfig.vue index 3888fce3..e8672398 100644 --- a/web/src/views/chat/components/Session/SessionConfig.vue +++ b/web/src/views/chat/components/Session/SessionConfig.vue @@ -41,13 +41,13 @@ watch([slider, temperature, maxTokens, topP, debug], ([newValueSlider, newValueT
{{ $t('chat.temperature') }}: {{ temperature }}
- +
{{ $t('chat.topP') }}: {{ topP }}
- +
{{ $t('chat.maxTokens') }}: {{ maxTokens }}
- +
{{ $t('chat.debug') }}