From b4a9c944f6361508ea59a4744acb9d7ff5a16444 Mon Sep 17 00:00:00 2001 From: InAnYan Date: Thu, 26 Sep 2024 00:35:28 +0300 Subject: [PATCH 1/3] Add options to auto generate embeddings and summaries. Unfortunately, they don't work... --- src/main/java/org/jabref/gui/JabRefGUI.java | 2 ++ .../chathistory/ChatHistoryService.java | 22 +++++------- .../org/jabref/gui/preferences/ai/AiTab.fxml | 15 ++++++++ .../org/jabref/gui/preferences/ai/AiTab.java | 6 ++++ .../gui/preferences/ai/AiTabViewModel.java | 24 +++++++++++++ .../jabref/logic/ai/AiDefaultPreferences.java | 2 ++ .../org/jabref/logic/ai/AiPreferences.java | 30 ++++++++++++++++ .../java/org/jabref/logic/ai/AiService.java | 18 ++++++++-- .../logic/ai/ingestion/IngestionService.java | 34 ++++++++++++++++++- .../ai/summarization/SummariesService.java | 31 ++++++++++++++++- .../preferences/JabRefCliPreferences.java | 8 +++++ 11 files changed, 174 insertions(+), 18 deletions(-) diff --git a/src/main/java/org/jabref/gui/JabRefGUI.java b/src/main/java/org/jabref/gui/JabRefGUI.java index d6a80bf3947..d17c06bd035 100644 --- a/src/main/java/org/jabref/gui/JabRefGUI.java +++ b/src/main/java/org/jabref/gui/JabRefGUI.java @@ -166,6 +166,7 @@ public void initialize() { Injector.setModelOrService(ClipBoardManager.class, clipBoardManager); JabRefGUI.aiService = new AiService( + stateManager, preferences.getAiPreferences(), preferences.getFilePreferences(), dialogService, @@ -173,6 +174,7 @@ public void initialize() { Injector.setModelOrService(AiService.class, aiService); JabRefGUI.chatHistoryService = new ChatHistoryService( + stateManager, preferences.getCitationKeyPatternPreferences(), dialogService); Injector.setModelOrService(ChatHistoryService.class, chatHistoryService); diff --git a/src/main/java/org/jabref/gui/ai/chatting/chathistory/ChatHistoryService.java b/src/main/java/org/jabref/gui/ai/chatting/chathistory/ChatHistoryService.java index 872a263c7a1..7ae8b69bc2c 100644 --- a/src/main/java/org/jabref/gui/ai/chatting/chathistory/ChatHistoryService.java +++ b/src/main/java/org/jabref/gui/ai/chatting/chathistory/ChatHistoryService.java @@ -25,7 +25,6 @@ import org.jabref.model.groups.AbstractGroup; import org.jabref.model.groups.GroupTreeNode; -import com.airhacks.afterburner.injection.Injector; import com.google.common.eventbus.Subscribe; import dev.langchain4j.data.message.ChatMessage; import org.slf4j.Logger; @@ -58,7 +57,7 @@ public class ChatHistoryService implements AutoCloseable { private static final String CHAT_HISTORY_FILE_NAME = "chat-histories.mv"; - private final StateManager stateManager = Injector.instantiateModelOrService(StateManager.class); + private final StateManager stateManager; private final CitationKeyPatternPreferences citationKeyPatternPreferences; @@ -79,31 +78,25 @@ private record ChatHistoryManagementRecord(Optional bibDatab return o1 == o2 ? 0 : o1.getGroup().getName().compareTo(o2.getGroup().getName()); }); - public ChatHistoryService(CitationKeyPatternPreferences citationKeyPatternPreferences, NotificationService notificationService) { + public ChatHistoryService(StateManager stateManager, CitationKeyPatternPreferences citationKeyPatternPreferences, NotificationService notificationService) { + this.stateManager = stateManager; this.citationKeyPatternPreferences = citationKeyPatternPreferences; this.implementation = new MVStoreChatHistoryStorage(Directories.getAiFilesDirectory().resolve(CHAT_HISTORY_FILE_NAME), notificationService); - configureHistoryTransfer(); - } - - public ChatHistoryService(CitationKeyPatternPreferences citationKeyPatternPreferences, - ChatHistoryStorage implementation) { - this.citationKeyPatternPreferences = citationKeyPatternPreferences; - this.implementation = implementation; - configureHistoryTransfer(); + configureDatabaseListeners(); } - private void configureHistoryTransfer() { + private void configureDatabaseListeners() { stateManager.getOpenDatabases().addListener((ListChangeListener) change -> { while (change.next()) { if (change.wasAdded()) { - change.getAddedSubList().forEach(this::configureHistoryTransfer); + change.getAddedSubList().forEach(this::configureDatabaseListeners); } } }); } - private void configureHistoryTransfer(BibDatabaseContext bibDatabaseContext) { + private void configureDatabaseListeners(BibDatabaseContext bibDatabaseContext) { bibDatabaseContext.getMetaData().getGroups().ifPresent(rootGroupTreeNode -> { rootGroupTreeNode.iterateOverTree().forEach(groupNode -> { groupNode.getGroup().nameProperty().addListener((observable, oldValue, newValue) -> { @@ -264,6 +257,7 @@ public void close() { new HashSet<>(groupsChatHistory.keySet()).forEach(this::closeChatHistoryForGroup); implementation.commit(); + implementation.close(); } private void transferGroupHistory(BibDatabaseContext bibDatabaseContext, GroupTreeNode groupTreeNode, String oldName, String newName) { diff --git a/src/main/java/org/jabref/gui/preferences/ai/AiTab.fxml b/src/main/java/org/jabref/gui/preferences/ai/AiTab.fxml index 820cb029eec..b2b3a408a14 100644 --- a/src/main/java/org/jabref/gui/preferences/ai/AiTab.fxml +++ b/src/main/java/org/jabref/gui/preferences/ai/AiTab.fxml @@ -43,6 +43,21 @@ + + + + +