Skip to content

Commit

Permalink
v0.7.0
Browse files Browse the repository at this point in the history
  • Loading branch information
led-mirage committed Mar 30, 2024
1 parent 89b3d5d commit 7412401
Show file tree
Hide file tree
Showing 5 changed files with 79 additions and 15 deletions.
13 changes: 9 additions & 4 deletions Readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ https://github.com/led-mirage/ZundaGPT2/assets/139528700/bd78af1b-c17a-4b88-bd3d

- Windows 11 Pro 23H2
- Python 3.12.0
- VOICEVOX 0.16.1
- VOICEVOX 0.18.0
- A.I.VOICE Editor 1.4.9.0
- COEIROINK v.2.3.4

Expand Down Expand Up @@ -72,7 +72,7 @@ Windowsの場合は、Windowsの検索窓で「環境変数を編集」で検索

以下のリンクから ZundaGPT2.ZIP をダウンロードして、作成したフォルダに展開するのだ。

https://github.com/led-mirage/ZundaGPT2/releases/tag/v0.6.0
https://github.com/led-mirage/ZundaGPT2/releases/tag/v0.7.0

#### 3. 実行

Expand Down Expand Up @@ -148,9 +148,9 @@ OpenAIのAPIキーはあなただけのものなので、人に教えたらダ
これが嫌な人は(ボクも嫌だけど)、Python本体をインストールしてPythonから普通に実行して欲しいのだ。実行ファイルのほうが手軽だし、そのほうがPythonに詳しくない人にとっては簡単なんだけど、誤認問題がついて回ることは覚えておいて欲しいのだ。

VirusTotalでのチェック結果は以下の通りなのだ。
72個中5個のアンチウィルスエンジンで検出 :2024/03/23 v0.6.0 )。
71個中5個のアンチウィルスエンジンで検出 :2024/03/30 v0.7.0)。

<img src="doc/virustotal_0.6.0.png" width="600">
<img src="doc/virustotal_0.7.0.png" width="600">

### ⚡ 免責事項

Expand Down Expand Up @@ -250,3 +250,8 @@ VirusTotalでのチェック結果は以下の通りなのだ。

- メッセージの削除ボタンを追加
- PyInstallerの更新(6.4.0を使用)

### 0.7.0 (2024/3/30)

- 再回答ボタンを追加
- チャットログが1つしかない場合に、そのログを削除できないバグを修正
2 changes: 1 addition & 1 deletion app/html/css/style.css
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ body, html {
background-color: #e0e0e0; /* ホバー時の背景色を少し濃くする */
color: #000; /* ホバー時のテキスト色を黒にする */
}
.message-delete-btn {
.message-delete-btn, .chat-reanswer-btn {
background-color: #f0f0f0;
color: #333;
border: 1px solid #ccc;
Expand Down
53 changes: 52 additions & 1 deletion app/html/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,7 @@
// HTMLにメッセージを追加
addChatMessage("user", g_userName, g_userColor, text)
scrollToBottom();
hideChatRetryButton();
document.getElementById("message").value = "";

// Python側に通知
Expand Down Expand Up @@ -194,14 +195,23 @@
speakerElement.style.color = color;
speakerElement.textContent = speakerName;

// 削除ボタンをつける
if (role === "user") {
// 削除ボタンをつける
const deleteElement = document.createElement("button");
deleteElement.classList.add("message-delete-btn");
deleteElement.textContent = "🗑️";
deleteElement.addEventListener("click", deleteChatMessage);
speakerElement.appendChild(deleteElement);
}
else {
// 再回答ボタンをつける
const retryElement = document.createElement("button");
retryElement.classList.add("chat-reanswer-btn");
retryElement.textContent = "🔄️";
retryElement.style.display = "none";
retryElement.addEventListener("click", reAnswerChat);
speakerElement.appendChild(retryElement);
}

// メッセージテキストを表示する要素を作成
const messageElement = document.createElement("div");
Expand Down Expand Up @@ -302,6 +312,8 @@
async function deleteChatMessage(event) {
if (!confirm("以降のメッセージを削除しますか?")) return;

hideChatRetryButton();

let messageDiv = event.target.closest(".chat-message");
let messageId = messageDiv.id;
let messageIndex = parseInt(messageId.split("-")[1], 10);
Expand All @@ -317,6 +329,24 @@
catch (error) {
console.error("Error: " + error)
}

showChatRetryButton();
}

// チャットの再回答ボタンが押された
async function reAnswerChat(event) {
let messageDiv = event.target.closest(".chat-message");
let messageId = messageDiv.id;
let messageIndex = parseInt(messageId.split("-")[1], 10);
messageDiv.remove();

try {
await pywebview.api.ask_another_reply_to_chatgpt(messageIndex);
g_nextMessageIndex = messageIndex;
}
catch (error) {
console.error("Error: " + error)
}
}

// Pythonから呼び出される関数
Expand Down Expand Up @@ -370,6 +400,8 @@
// Pythonから呼び出される関数
// AIからのチャット応答が終了した
function endResponse(content) {
showChatRetryButton();

const nameTextElements = document.querySelectorAll("#chat-messages .speaker-name");
const lastNameTextElements = nameTextElements[nameTextElements.length - 1];
if(lastNameTextElements) {
Expand Down Expand Up @@ -436,6 +468,25 @@
}
MathJax.typesetPromise();
scrollToBottom();
showChatRetryButton()
}

// 再回答ボタンをすべて非表示にする
function hideChatRetryButton() {
const buttons = document.querySelectorAll(".chat-reanswer-btn");
buttons.forEach((button, index) => {
button.style.display = "none";
});
}

// 最後の再回答ボタンだけ表示する
function showChatRetryButton() {
const buttons = document.querySelectorAll(".chat-reanswer-btn");
buttons.forEach((button, index) => {
if (index === buttons.length - 1) {
button.style.display = "inline";
}
});
}
</script>

Expand Down
26 changes: 17 additions & 9 deletions app/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
from chat_log import ChatLog

APP_NAME = "ZundaGPT2"
APP_VERSION = "0.6.0"
APP_VERSION = "0.7.0"
COPYRIGHT = "Copyright 2024 led-mirage"

# アプリケーションクラス
Expand Down Expand Up @@ -138,16 +138,17 @@ def delete_current_chat(self):
next_logfile = ChatLog.get_prev_logfile(self.chat)
if next_logfile is None:
next_logfile = ChatLog.get_next_logfile(self.chat)
if next_logfile is None:
return

ChatLog.delete_log_file(self.chat)

loaded_settings, loaded_chat = ChatLog.load(next_logfile)
if loaded_settings is None:
return
if next_logfile is not None:
loaded_settings, loaded_chat = ChatLog.load(next_logfile)
if loaded_settings is None:
return

self.change_current_chat(loaded_settings, loaded_chat)
self.change_current_chat(loaded_settings, loaded_chat)
else:
self.window.evaluate_js(f"newChat()")

# 設定画面遷移イベントハンドラ(UI)
def move_to_settings(self):
Expand Down Expand Up @@ -190,8 +191,8 @@ def cancel_settings(self):
self.window.load_url("html/index.html")

# メッセージ送信イベントハンドラ(UI)
def send_message_to_chatgpt(self, text):
if self.user_character is not None and self.app_config.system["speaker_on"]:
def send_message_to_chatgpt(self, text, speak=True):
if self.user_character is not None and self.app_config.system["speaker_on"] and speak:
self.user_character.talk(text)
self.window.evaluate_js(f"startResponse()")
self.last_send_message = text
Expand Down Expand Up @@ -221,6 +222,13 @@ def trancate_messages(self, index):
self.chat.truncate_messages(index)
ChatLog.save(self.settings, self.chat)

# 別の回答を取得するイベントハンドラ(UI)
def ask_another_reply_to_chatgpt(self, index):
text = self.chat.messages[index - 1]["content"]
self.chat.truncate_messages(index - 1)
ChatLog.save(self.settings, self.chat)
self.send_message_to_chatgpt(text, speak=False)

# チャンク受信イベントハンドラ(Chat)
def on_recieve_chunk(self, chunk):
self.window.evaluate_js(f"addChunk('{self.escape_js_string(chunk)}')")
Expand Down
Binary file added doc/virustotal_0.7.0.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit 7412401

Please sign in to comment.