diff --git a/imixs-office-workflow-app/src/main/webapp/pages/workitems/workitem_ai copy.xhtml b/imixs-office-workflow-app/src/main/webapp/pages/workitems/workitem_ai copy.xhtml
deleted file mode 100644
index 444df754..00000000
--- a/imixs-office-workflow-app/src/main/webapp/pages/workitems/workitem_ai copy.xhtml
+++ /dev/null
@@ -1,39 +0,0 @@
-
-
-
-
- -
-
-
- -
-
-
-
-
-
-
-
-
-
- Chat History....
-
-
- #{answer}
-
-
-
-
-
-
- console.log('ich mache irgendwas');
- if (refreshStockData) {
- console.log('die methode scheint es zu geben');
- }
- setInterval(refreshStockData, 500); // Refresh every 500ms
-
-
-
\ No newline at end of file
diff --git a/imixs-office-workflow-app/src/main/webapp/pages/workitems/workitem_ai.xhtml b/imixs-office-workflow-app/src/main/webapp/pages/workitems/workitem_ai.xhtml
index 8405d059..b809ba20 100644
--- a/imixs-office-workflow-app/src/main/webapp/pages/workitems/workitem_ai.xhtml
+++ b/imixs-office-workflow-app/src/main/webapp/pages/workitems/workitem_ai.xhtml
@@ -17,10 +17,20 @@
-
-
- ...
-
+
+
+
diff --git a/imixs-office-workflow-util/src/main/java/org/imixs/workflow/office/forms/AIController.java b/imixs-office-workflow-util/src/main/java/org/imixs/workflow/office/forms/AIController.java
index 0ea05a4e..8b4f3433 100644
--- a/imixs-office-workflow-util/src/main/java/org/imixs/workflow/office/forms/AIController.java
+++ b/imixs-office-workflow-util/src/main/java/org/imixs/workflow/office/forms/AIController.java
@@ -143,11 +143,15 @@ public void onWorkflowEvent(@Observes WorkflowEvent workflowEvent) {
*/
public void sendAsync() throws PluginException {
ItemCollection workitem = workflowController.getWorkitem();
- question = workitem.getItemValueString("ai.chat.prompt");
+ question = workitem.getItemValueString("ai.chat.prompt").trim();
+
+ if (question.isEmpty()) {
+ // no op
+ return;
+ }
logger.fine("question: " + question);
String prompt = buildContextPrompt(question);
JsonObject jsonPrompt = openAIAPIService.buildJsonPromptObject(prompt, true, null);
-
// starting async http request...
streamingFuture = CompletableFuture.runAsync(() -> {
try {
@@ -256,13 +260,16 @@ private String buildContextPrompt(String question) {
ItemCollection workitem = workflowController.getWorkitem();
SimpleDateFormat dateFormat = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss");
- String prompt = "[INST]";
+ // String prompt = "[INST]";
+ String prompt = "";
- prompt = "Geschäftsprozess: " + workitem.getWorkflowGroup() + "\n";
+ prompt += "Geschäftsprozess: " + workitem.getWorkflowGroup() + "\n";
prompt += "Erstellt: " + dateFormat.format(workitem.getItemValueDate(WorkflowKernel.CREATED)) + " von "
+ userController.getUserName(workitem.getItemValueString("$creator")) + " \n";
prompt += "Aktueller Status: " + workitem.getItemValueString(WorkflowKernel.WORKFLOWSTATUS) + "\n";
+ prompt += "\nVerlauf an Aktivitäten in diesem Geschäftsprozess: \n\n";
+
// chronical
List years = chronicleController.getYears();
Collections.reverse(years);
@@ -272,6 +279,8 @@ private String buildContextPrompt(String question) {
for (int month : months) {
List chronicleEntries = chronicleController.getChroniclePerMonth(year, month);
+ Collections.reverse(chronicleEntries);
+
// prompt += "\n" + year + "/" + month + "\n\n";
for (ChronicleEntity entry : chronicleEntries) {
String user = userController.getUserName(entry.getUser());
@@ -281,7 +290,7 @@ private String buildContextPrompt(String question) {
// Date / User
prompt += dateFormat.format(entry.getDate()) + " - " + user + ": ";
String type = event.getItemValueString("type");
- Date date = event.getItemValueDate("date");
+
String message = event.getItemValueString("message");
if ("comment".equals(type)) {
prompt += "Kommentar: " + message + "\n";
@@ -300,12 +309,18 @@ private String buildContextPrompt(String question) {
}
}
}
+ if ("imixs-ai".equals(type)) {
+ prompt += "Chat: " + message + "\n";
+ }
}
}
}
}
- prompt += "[/INST]\n[INST] " + question + "[/INST]";
+ // prompt += "[/INST]\n[INST] " + question + "[/INST]";
+ prompt += "\n[INST] " + question + "[/INST]";
+
+ System.out.println(prompt);
return prompt;
}
diff --git a/imixs-office-workflow-util/src/main/java/org/imixs/workflow/office/forms/ChronicleController.java b/imixs-office-workflow-util/src/main/java/org/imixs/workflow/office/forms/ChronicleController.java
index cd93b9c7..4aa6d01c 100644
--- a/imixs-office-workflow-util/src/main/java/org/imixs/workflow/office/forms/ChronicleController.java
+++ b/imixs-office-workflow-util/src/main/java/org/imixs/workflow/office/forms/ChronicleController.java
@@ -185,6 +185,24 @@ public int compare(List> entry1, List> entry2) {
addChronicleEntry(originChronicleList, entry);
}
+ /* collect Imixs-AI chat history */
+ if (workflowController.getWorkitem().hasItem(AIController.AI_CHAT_HISTORY)) {
+ List aiChatHistory = ChildItemController.explodeChildList(workflowController.getWorkitem(),
+ AIController.AI_CHAT_HISTORY);
+ // change order
+ Collections.reverse(aiChatHistory);
+ for (ItemCollection aiEntry : aiChatHistory) {
+ ItemCollection entry = new ItemCollection();
+ entry.replaceItemValue("date", aiEntry.getItemValueDate("date"));
+ entry.replaceItemValue("user", aiEntry.getItemValueString("user"));
+ String message = "Question: \n" + aiEntry.getItemValueString("question");
+ message += "\nAnswer: \n" + aiEntry.getItemValueString("answer");
+ entry.replaceItemValue("message", message);
+ entry.replaceItemValue("type", "imixs-ai");
+ addChronicleEntry(originChronicleList, entry);
+ }
+ }
+
/* collect Attachments */
List dmsList = dmsController.getDmsList();
for (ItemCollection dmsEntry : dmsList) {