From 3ef11cea7f0795db9df71bd0e190c4e825eccef4 Mon Sep 17 00:00:00 2001 From: apurvakhatri Date: Tue, 27 Feb 2024 12:54:13 -0500 Subject: [PATCH 1/5] export chat to markdown functionality added --- .../jupyter_ai/chat_handlers/__init__.py | 1 + .../jupyter_ai/chat_handlers/export.py | 33 +++++++++++++++++++ packages/jupyter-ai/jupyter_ai/extension.py | 3 ++ 3 files changed, 37 insertions(+) create mode 100644 packages/jupyter-ai/jupyter_ai/chat_handlers/export.py diff --git a/packages/jupyter-ai/jupyter_ai/chat_handlers/__init__.py b/packages/jupyter-ai/jupyter_ai/chat_handlers/__init__.py index e4c69f012..17364f198 100644 --- a/packages/jupyter-ai/jupyter_ai/chat_handlers/__init__.py +++ b/packages/jupyter-ai/jupyter_ai/chat_handlers/__init__.py @@ -5,3 +5,4 @@ from .generate import GenerateChatHandler from .help import HelpChatHandler from .learn import LearnChatHandler +from .export import ExportChatHandler diff --git a/packages/jupyter-ai/jupyter_ai/chat_handlers/export.py b/packages/jupyter-ai/jupyter_ai/chat_handlers/export.py new file mode 100644 index 000000000..1f5849507 --- /dev/null +++ b/packages/jupyter-ai/jupyter_ai/chat_handlers/export.py @@ -0,0 +1,33 @@ +from typing import List + +from jupyter_ai.models import HumanChatMessage, AgentChatMessage + +from .base import BaseChatHandler, SlashCommandRoutingType + +class ExportChatHandler(BaseChatHandler): + id = "export" + name = "Export chat messages" + help = "Export the chat messages in various formats" + routing_type = SlashCommandRoutingType(slash_id="export") + + uses_llm = False + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + + def chat_message_to_markdown(self, message): + if isinstance(message, AgentChatMessage): + return f"**Agent**: {message.body}" + elif isinstance(message, HumanChatMessage): + return f"**{message.client.display_name}**: {message.body}" + else: + return "" + + + async def process_message(self, _): + markdown_content = "\n\n".join(self.chat_message_to_markdown(msg) for msg in self._chat_history) + # Write the markdown content to a file or do whatever you want with it + with open("./playground/chat_history.md", "w") as chat_history: + chat_history.write(markdown_content) + + diff --git a/packages/jupyter-ai/jupyter_ai/extension.py b/packages/jupyter-ai/jupyter_ai/extension.py index 800c91932..6920792fa 100644 --- a/packages/jupyter-ai/jupyter_ai/extension.py +++ b/packages/jupyter-ai/jupyter_ai/extension.py @@ -16,6 +16,7 @@ GenerateChatHandler, HelpChatHandler, LearnChatHandler, + ExportChatHandler, ) from .chat_handlers.help import HelpMessage from .completions.handlers import DefaultInlineCompletionHandler @@ -239,12 +240,14 @@ def initialize_settings(self): retriever = Retriever(learn_chat_handler=learn_chat_handler) ask_chat_handler = AskChatHandler(**chat_handler_kwargs, retriever=retriever) + export_chat_handler = ExportChatHandler(**chat_handler_kwargs) jai_chat_handlers = { "default": default_chat_handler, "/ask": ask_chat_handler, "/clear": clear_chat_handler, "/generate": generate_chat_handler, "/learn": learn_chat_handler, + "/export": export_chat_handler, } help_chat_handler = HelpChatHandler( From 774849dc06cf36425b36c5dd0430e0cdc96f183f Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 27 Feb 2024 18:07:53 +0000 Subject: [PATCH 2/5] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- .../jupyter-ai/jupyter_ai/chat_handlers/__init__.py | 2 +- packages/jupyter-ai/jupyter_ai/chat_handlers/export.py | 10 +++++----- packages/jupyter-ai/jupyter_ai/extension.py | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/packages/jupyter-ai/jupyter_ai/chat_handlers/__init__.py b/packages/jupyter-ai/jupyter_ai/chat_handlers/__init__.py index 17364f198..b9046a6f8 100644 --- a/packages/jupyter-ai/jupyter_ai/chat_handlers/__init__.py +++ b/packages/jupyter-ai/jupyter_ai/chat_handlers/__init__.py @@ -2,7 +2,7 @@ from .base import BaseChatHandler, SlashCommandRoutingType from .clear import ClearChatHandler from .default import DefaultChatHandler +from .export import ExportChatHandler from .generate import GenerateChatHandler from .help import HelpChatHandler from .learn import LearnChatHandler -from .export import ExportChatHandler diff --git a/packages/jupyter-ai/jupyter_ai/chat_handlers/export.py b/packages/jupyter-ai/jupyter_ai/chat_handlers/export.py index 1f5849507..a644ef423 100644 --- a/packages/jupyter-ai/jupyter_ai/chat_handlers/export.py +++ b/packages/jupyter-ai/jupyter_ai/chat_handlers/export.py @@ -1,9 +1,10 @@ from typing import List -from jupyter_ai.models import HumanChatMessage, AgentChatMessage +from jupyter_ai.models import AgentChatMessage, HumanChatMessage from .base import BaseChatHandler, SlashCommandRoutingType + class ExportChatHandler(BaseChatHandler): id = "export" name = "Export chat messages" @@ -23,11 +24,10 @@ def chat_message_to_markdown(self, message): else: return "" - async def process_message(self, _): - markdown_content = "\n\n".join(self.chat_message_to_markdown(msg) for msg in self._chat_history) + markdown_content = "\n\n".join( + self.chat_message_to_markdown(msg) for msg in self._chat_history + ) # Write the markdown content to a file or do whatever you want with it with open("./playground/chat_history.md", "w") as chat_history: chat_history.write(markdown_content) - - diff --git a/packages/jupyter-ai/jupyter_ai/extension.py b/packages/jupyter-ai/jupyter_ai/extension.py index 6920792fa..245a1c957 100644 --- a/packages/jupyter-ai/jupyter_ai/extension.py +++ b/packages/jupyter-ai/jupyter_ai/extension.py @@ -13,10 +13,10 @@ AskChatHandler, ClearChatHandler, DefaultChatHandler, + ExportChatHandler, GenerateChatHandler, HelpChatHandler, LearnChatHandler, - ExportChatHandler, ) from .chat_handlers.help import HelpMessage from .completions.handlers import DefaultInlineCompletionHandler From 988a265832086dd3690f15e78082d20af6daac80 Mon Sep 17 00:00:00 2001 From: Sanjiv Das Date: Sat, 16 Mar 2024 00:20:12 -0700 Subject: [PATCH 3/5] Update export.py - Added multiple chat history files - changed export to mention markdown files only - respond with filename in chat --- .../jupyter_ai/chat_handlers/export.py | 20 ++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/packages/jupyter-ai/jupyter_ai/chat_handlers/export.py b/packages/jupyter-ai/jupyter_ai/chat_handlers/export.py index a644ef423..7176ce63b 100644 --- a/packages/jupyter-ai/jupyter_ai/chat_handlers/export.py +++ b/packages/jupyter-ai/jupyter_ai/chat_handlers/export.py @@ -1,14 +1,12 @@ from typing import List - from jupyter_ai.models import AgentChatMessage, HumanChatMessage - from .base import BaseChatHandler, SlashCommandRoutingType - +import os class ExportChatHandler(BaseChatHandler): id = "export" name = "Export chat messages" - help = "Export the chat messages in various formats" + help = "Export the chat messages in markdown format" routing_type = SlashCommandRoutingType(slash_id="export") uses_llm = False @@ -24,10 +22,22 @@ def chat_message_to_markdown(self, message): else: return "" + # Multiple chat histories in separate files + def get_chat_filename(self, path='./chat_history.md'): + filename, extension = os.path.splitext(path) + counter = 1 + while os.path.exists(path): + path = filename + "_" + str(counter) + ".md" + counter += 1 + return path + async def process_message(self, _): markdown_content = "\n\n".join( self.chat_message_to_markdown(msg) for msg in self._chat_history ) # Write the markdown content to a file or do whatever you want with it - with open("./playground/chat_history.md", "w") as chat_history: + chat_filename = self.get_chat_filename() + with open(chat_filename, "w") as chat_history: chat_history.write(markdown_content) + + self.reply("File saved to " + chat_filename) From ee4b6ed59a55e70e98b89ba05f4c7d0ac601b284 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Sat, 16 Mar 2024 07:20:34 +0000 Subject: [PATCH 4/5] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- packages/jupyter-ai/jupyter_ai/chat_handlers/export.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/packages/jupyter-ai/jupyter_ai/chat_handlers/export.py b/packages/jupyter-ai/jupyter_ai/chat_handlers/export.py index 7176ce63b..32a33e5e7 100644 --- a/packages/jupyter-ai/jupyter_ai/chat_handlers/export.py +++ b/packages/jupyter-ai/jupyter_ai/chat_handlers/export.py @@ -1,7 +1,10 @@ +import os from typing import List + from jupyter_ai.models import AgentChatMessage, HumanChatMessage + from .base import BaseChatHandler, SlashCommandRoutingType -import os + class ExportChatHandler(BaseChatHandler): id = "export" @@ -22,8 +25,8 @@ def chat_message_to_markdown(self, message): else: return "" - # Multiple chat histories in separate files - def get_chat_filename(self, path='./chat_history.md'): + # Multiple chat histories in separate files + def get_chat_filename(self, path="./chat_history.md"): filename, extension = os.path.splitext(path) counter = 1 while os.path.exists(path): From b6736268a83aae850023f257ad8277e9f104bf49 Mon Sep 17 00:00:00 2001 From: Sanjiv Das Date: Mon, 18 Mar 2024 10:59:38 -0700 Subject: [PATCH 5/5] Edits to /export function Using Markdown formatting when displaying file paths --- packages/jupyter-ai/jupyter_ai/chat_handlers/export.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/jupyter-ai/jupyter_ai/chat_handlers/export.py b/packages/jupyter-ai/jupyter_ai/chat_handlers/export.py index 32a33e5e7..fc4fbad6f 100644 --- a/packages/jupyter-ai/jupyter_ai/chat_handlers/export.py +++ b/packages/jupyter-ai/jupyter_ai/chat_handlers/export.py @@ -43,4 +43,4 @@ async def process_message(self, _): with open(chat_filename, "w") as chat_history: chat_history.write(markdown_content) - self.reply("File saved to " + chat_filename) + self.reply(f"File saved to `{chat_filename}`")