Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Refactoring プロンプト周り & 会話履歴クリックの挙動 & クリアボタンの挙動 #119

Merged
merged 6 commits into from
Oct 23, 2023

Conversation

tbrand
Copy link
Contributor

@tbrand tbrand commented Oct 20, 2023

元々は #90 に commit 被せる予定でしたが、ほぼ原型を留めていないので新規で出します。

関連 Issue

Prompt の形式を統一して、id で PromptGenerator を引けるようにしました。
これにより、init する際に systemContext は必要なくなりました。

また、動作としては、以下の変更点を入れてあります。

  • クリア & 最初からやり直すボタン => chatId を変更 (別の会話履歴として記憶)
  • 各ユースケース画面で操作中に、同じ chatId の会話履歴をクリック => ユースケースの画面の chatId をリセット (別の会話履歴として記憶)
    • ただし、ページごとに state を持つもの (文章生成、要約、構成、翻訳) については、入力はリセットされない

動作確認メモ

A ... デモを実行して、別のユースケースをクリックし、戻ってきても画面 & 会話履歴はリセットされていない
B ... デモを実行して、同じ chatId を持つ会話履歴をクリックし、戻ってきて更新すると別の会話履歴として保存される
C ... デモを実行して、クリアボタンを押して更新すると、別の会話履歴に保存される

  • チャット
    • A
    • B
    • C
  • RAG チャット
    • A
    • B
    • C
  • 文章生成
    • A
    • B
    • C
  • 要約
    • A
    • B
    • C
  • 校正
    • A
    • B
    • C
  • 翻訳
    • A
    • B
    • C

@tbrand tbrand changed the title [WIP] Refactoring プロンプト周り & 会話履歴クリックの挙動 & クリアボタンの挙動 Refactoring プロンプト周り & 会話履歴クリックの挙動 & クリアボタンの挙動 Oct 20, 2023
@wadabee
Copy link
Contributor

wadabee commented Oct 20, 2023

会話履歴から会話Aを選択 -> 会話Aを「最初からやり直す」 -> 初期化後にそのまま会話Bをスタート

上記の操作をすると、「Drawerでは会話Aが選択されたまま」「会話BがDrawerに追加される(未選択状態)」「会話Aはデータ上消えておらず再度開くと見ることができる」という状態になり、直感的とは言いづらい挙動かなと思いました。

「最初からやり直す」という文言がわかりづらい要因な気がするので、「新規チャットであること」がわかるような表示名に変えた方がいいかなと思いました。
(最初からやり直すだと、会話を全消しして新しい会話で上書きするようなイメージを持ちそう)

packages/web/src/prompts/index.ts Outdated Show resolved Hide resolved
packages/web/src/prompts/index.ts Outdated Show resolved Hide resolved
packages/web/src/hooks/useChat.ts Show resolved Hide resolved
packages/web/src/pages/ChatPage.tsx Outdated Show resolved Hide resolved
@tbrand
Copy link
Contributor Author

tbrand commented Oct 23, 2023

id から匿名で引きたいのは systemContext だけで、generatePrompt の方は匿名である必要はないので generics は不要として削除しました!

getPromptGeneratorById => getSystemContextById

端的に言うと、Prompt を作成したい人と、systemContext が欲しい人が違うということですね。
まとめた方が今後追加する時に変更点がわかりやすいかなと思って無理やりまとめていたのですが、as でキャストするなどが必要になったので、デメリットが上回り今回の変更に至りました!

if (!chatId && systemContext) {
init(id, systemContext);
if (!chatId) {
init(id);
}
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

既存バグな気がしますが、depends に idchatId がないと以下の操作でエラーになります。
(会話履歴 -> 新規チャット の遷移時に初期化が行われない)

会話履歴で任意の会話を開く -> ブラウザを更新(URLリンク等で直接会話履歴を開いたことを想定) -> 「チャット」メニューで新規チャットを開く -> 適当にメッセージを送信 -> chats が初期されていないためエラー

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

あざます!かなり exhaustive-deps が悪さしているのでどっかのタイミングで全部外した方が良いかもしれないですね。

@wadabee wadabee merged commit 0205107 into main Oct 23, 2023
1 check passed
@wadabee wadabee deleted the refactoring-prompts branch October 23, 2023 06:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants