From 5b663e69f48faf0c16b99aa458f0580f2c918990 Mon Sep 17 00:00:00 2001 From: Ralph Soika Date: Tue, 6 Jan 2026 16:24:46 +0100 Subject: [PATCH] docu, demos --- doc/PROMTS/test.json | 368 ++++++++++++++++++ doc/RLM.md | 211 ++++++++++ doc/RLM.pdf | Bin 0 -> 71917 bytes .../ai/dynamixs/ConditionalAIAdapter.java | 2 +- .../cognition/CognitoEventService.java | 8 +- .../ai/dynamixs/cognition/CognitoPlugin.java | 2 +- workflow/en/offer-en-1.0.1.bpmn | 52 ++- workflow/imixs-ai/posteingang-de-3.0.0.bpmn | 6 +- .../prompts/contract-summarize-de.xml | 4 +- .../imixs-ai/prompts/invoice-extract-en.xml | 1 + .../imixs-ai/prompts/invoice-summarize-en.xml | 1 + 11 files changed, 626 insertions(+), 29 deletions(-) create mode 100644 doc/PROMTS/test.json create mode 100644 doc/RLM.md create mode 100644 doc/RLM.pdf diff --git a/doc/PROMTS/test.json b/doc/PROMTS/test.json new file mode 100644 index 0000000..18ef15b --- /dev/null +++ b/doc/PROMTS/test.json @@ -0,0 +1,368 @@ +{#- Default system message if no system prompt is passed. # +} +{%- set default_system_message = 'You are Ministral-3-14B-Instruct-2512, a Large Language Model (LLM) created by Mistral AI, a French startup headquartered in Paris.\ +You power an AI assistant called Le Chat.\ +Your knowledge base was last updated on 2023-10-01.\ +The current date is {today + }.\ +\ +When you\\'re not sure about some information or when the user\\'s request requires up-to-date or specific data, you must use the available tools to fetch the information. Do not hesitate to use tools whenever they can provide a more accurate or complete response. If no relevant tools are available, then clearly state that you don\\'t have the information and avoid making up anything.\ +If the user\\'s question is not clear, ambiguous, or does not provide enough context for you to accurately answer the question, you do not try to answer it right away and you rather ask the user to clarify their request (e.g. "What are some good restaurants around me?" => "Where are you?" or "When is the next flight to Tokyo" => "Where do you travel from?").\ +You are always very attentive to dates, in particular you try to resolve dates (e.g. "yesterday" is {yesterday + }) and when asked about information at specific dates, you discard information that is at another date.\ +You follow these instructions in all languages, and always respond to the user in the language they use or request.\ +Next sections describe the capabilities that you have.\ +\ +# WEB BROWSING INSTRUCTIONS\ +\ +You cannot perform any web search or access internet to open URLs, links etc. If it seems like the user is expecting you to do so, you clarify the situation and ask the user to copy paste the text directly in the chat.\ +\ +# MULTI-MODAL INSTRUCTIONS\ +\ +You have the ability to read images, but you cannot generate images. You also cannot transcribe audio files or videos.\ +You cannot read nor transcribe audio files or videos.\ +\ +# TOOL CALLING INSTRUCTIONS\ +\ +You may have access to tools that you can use to fetch information or perform actions. You must use these tools in the following situations:\ +\ +1. When the request requires up-to-date information.\ +2. When the request requires specific data that you do not have in your knowledge base.\ +3. When the request involves actions that you cannot perform without tools.\ +\ +Always prioritize using tools to provide the most accurate and helpful response. If tools are not available, inform the user that you cannot perform the requested action at the moment.' % +} + +{#- Begin of sequence token. # +} +{ + {- bos_token + } +} + +{#- Handle system prompt if it exists. # +} +{#- System prompt supports text content or text chunks. # +} +{%- if messages[ + 0 + ]['role' + ] == 'system' % +} + { + {- '[SYSTEM_PROMPT + ]' - + } +} + {%- if messages[ + 0 + ]['content' + ] is string % +} + { + {- messages[ + 0 + ]['content' + ] - + } +} + {%- else % +} + {%- for block in messages[ + 0 + ]['content' + ] % +} + {%- if block['type' + ] == 'text' % +} + { + {- block['text' + ] + } +} + {%- else % +} + { + {- raise_exception('Only text chunks are supported in system message contents.') + } +} + {%- endif % +} + {%- endfor % +} + {%- endif % +} + { + {- '[/SYSTEM_PROMPT + ]' - + } +} + {%- set loop_messages = messages[ + 1: + ] % +} +{%- else % +} + {%- set loop_messages = messages % +} + {%- if default_system_message != '' % +} + { + {- '[SYSTEM_PROMPT + ]' + default_system_message + '[/SYSTEM_PROMPT + ]' + } +} + {%- endif % +} +{%- endif % +} + + +{#- Tools definition # +} +{%- set tools_definition = '' % +} +{%- set has_tools = false % +} +{%- if tools is defined and tools is not none and tools|length > 0 % +} + {%- set has_tools = true % +} + {%- set tools_definition = '[AVAILABLE_TOOLS + ]' + (tools| tojson) + '[/AVAILABLE_TOOLS + ]' % +} + { + {- tools_definition + } +} +{%- endif % +} + +{#- Checks for alternating user/assistant messages. # +} +{%- set ns = namespace(index=0) % +} +{%- for message in loop_messages % +} + {%- if message.role == 'user' or (message.role == 'assistant' and (message.tool_calls is not defined or message.tool_calls is none or message.tool_calls | length == 0)) % +} + {%- if (message['role' + ] == 'user') != (ns.index % 2 == 0) % +} + { + {- raise_exception('After the optional system message, conversation roles must alternate user and assistant roles except for tool calls and results.') + } +} + {%- endif % +} + {%- set ns.index = ns.index + 1 % +} + {%- endif % +} +{%- endfor % +} + +{#- Handle conversation messages. # +} +{%- for message in loop_messages % +} + + {#- User messages supports text content or text and image chunks. # +} + {%- if message['role' + ] == 'user' % +} + {%- if message['content' + ] is string % +} + { + {- '[INST + ]' + message['content' + ] + '[/INST + ]' + } +} + {%- elif message['content' + ] | length > 0 % +} + { + {- '[INST + ]' + } +} + {%- if message['content' + ] | length == 2 % +} + {%- set blocks = message['content' + ] | sort(attribute='type') % +} + {%- else % +} + {%- set blocks = message['content' + ] % +} + {%- endif % +} + {%- for block in blocks % +} + {%- if block['type' + ] == 'text' % +} + { + {- block['text' + ] + } +} + {%- elif block['type' + ] in ['image', 'image_url' + ] % +} + { + {- '[IMG + ]' + } +} + {%- else % +} + { + {- raise_exception('Only text, image and image_url chunks are supported in user message content.') + } +} + {%- endif % +} + {%- endfor % +} + { + {- '[/INST + ]' + } +} + {%- else % +} + { + {- raise_exception('User message must have a string or a list of chunks in content') + } +} + {%- endif % +} + + {#- Assistant messages supports text content or text and image chunks. # +} + {%- elif message['role' + ] == 'assistant' % +} + {%- if false % +} + { + {- raise_exception('Assistant message must have a string or a list of chunks in content or a list of tool calls.') + } +} + {%- endif % +} + + {%- if message['content' + ] is string % +} + { + {- message['content' + ] + } +} + {%- elif message['content' + ] | length > 0 % +} + {%- for block in message['content' + ] % +} + {%- if block['type' + ] == 'text' % +} + { + {- block['text' + ] + } +} + {%- else % +} + { + {- raise_exception('Only text chunks are supported in assistant message contents.') + } +} + {%- endif % +} + {%- endfor % +} + {%- endif % +} + + {%- if message['tool_calls' + ] is defined and message['tool_calls' + ] is not none and message['tool_calls' + ]|length > 0 % +} + {%- for tool in message['tool_calls' + ] % +} + {%- set arguments = tool['function' + ]['arguments' + ] % +} + {%- if arguments is not string % +} + {%- set arguments = arguments|tojson|safe % +} + {%- elif arguments == '' % +} + {%- set arguments = '{}' % +} + {%- endif % +} + { + {- '[TOOL_CALLS + ]' + tool['function' + ]['name' + ] + '[ARGS + ]' + arguments + } +} + {%- endfor % +} + {%- endif % +} + + {#- End of sequence token for each assistant messages. # +} + { + {- eos_token + } +} + + {#- Tool messages only supports text content. # +} + {%- elif message['role' + ] == 'tool' % +} + { + {- '[TOOL_RESULTS + ]' + message['content' + ]|string + '[/TOOL_RESULTS + ]' + } +} + + {#- Raise exception for unsupported roles. # +} + {%- else % +} + { + {- raise_exception('Only user, assistant and tool roles are supported, got ' + message['role' + ]) + } +} + {%- endif % +} +{%- endfor % +} \ No newline at end of file diff --git a/doc/RLM.md b/doc/RLM.md new file mode 100644 index 0000000..a7e8bb8 --- /dev/null +++ b/doc/RLM.md @@ -0,0 +1,211 @@ +# BPMN-Aware Large-Scale Process Analysis through LLM Tool Orchestration + +## Abstract + +This paper proposes a novel approach for analyzing large volumes of business process data by combining three concepts: (1) pre-generated process summaries ("Project Insights"), (2) BPMN process definitions as discoverable metadata, and (3) LLM-driven tool orchestration inspired by Recursive Language Models. The approach enables natural language queries across thousands of workflow instances without hitting context window limitations, while leveraging existing process knowledge encoded in BPMN models. + +--- + +## 1. Problem Statement + +Enterprise workflow systems accumulate vast amounts of process data. A typical scenario: + +- 10,000+ completed workflow instances over 6 months +- Multiple workflow types (orders, complaints, quotes, support tickets) +- Rich contextual data per instance (documents, communications, decisions) + +**Challenge:** Users want to ask analytical questions like _"How did our sales perform in 2025?"_ — questions that implicitly span multiple workflow types and require correlation of thousands of instances. + +**Limitations of current approaches:** + +| Approach | Limitation | +| ----------------- | -------------------------------------------------- | +| Direct LLM query | Context window exceeded | +| Pre-built reports | Cannot handle ad-hoc questions | +| Manual analysis | Time-consuming, not scalable | +| Simple RAG | Retrieves fragments, misses cross-process patterns | + +--- + +## 2. Proposed Solution + +### 2.1 Core Idea + +Treat the LLM not as a processor of raw data, but as an **orchestrator** that: + +1. **Discovers** available workflow types through BPMN metadata +2. **Decides** which processes are relevant to a given question +3. **Retrieves** condensed summaries in manageable chunks +4. **Correlates** across workflow types when needed +5. **Synthesizes** findings into coherent answers + +### 2.2 Key Enablers + +**A) Project Insights (Pre-Condensed Summaries)** + +Each workflow instance already generates a structured summary at key process steps: + +``` +Project Insight: +Event: A quotation request was received from Tom Brack of TechBridge, +Tokyo for electronic equipment suitable for Arctic conditions... +Unusual/Important Note: Sales team suggested offering products still +in development... +``` + +This reduces token volume by ~95% while preserving analytical value. + +**B) BPMN as Discoverable Metadata** + +Process definitions provide machine-readable context: + +- Available workflow types and their relationships +- Process steps and decision points +- Data fields captured at each stage +- Semantic documentation + +The LLM can query this metadata to understand _what exists_ before deciding _what to analyze_. + +**C) Tool-Based Access Pattern** + +Instead of feeding data directly into the context window, provide callable tools: + +| Tool Category | Purpose | +| ------------- | ----------------------------------------------- | +| Discovery | List workflow types, describe process structure | +| Retrieval | Fetch insights by type, filter, pagination | +| Correlation | Find relationships across workflow types | +| Aggregation | Calculate cross-process metrics | + +--- + +## 3. Architecture Overview + +``` +┌─────────────────────────────────────────────────────────────┐ +│ User Query │ +│ "How did our sales perform in 2025?" │ +└─────────────────────────────────────────────────────────────┘ + │ + ▼ +┌─────────────────────────────────────────────────────────────┐ +│ LLM Orchestrator │ +│ │ +│ 1. What workflow types exist? → discoverWorkflows() │ +│ 2. Which are relevant? → orders, quotes, complaints │ +│ 3. What are the metrics? → calculateMetrics() │ +│ 4. Any anomalies? → correlateWorkflows() │ +│ 5. Deep dive needed? → getInsights(filter, chunk) │ +│ 6. Synthesize response │ +└─────────────────────────────────────────────────────────────┘ + │ + ▼ +┌─────────────────────────────────────────────────────────────┐ +│ Tool Layer │ +│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ +│ │ Discovery │ │ Retrieval │ │ Correlation │ │ +│ └─────────────┘ └─────────────┘ └─────────────┘ │ +└─────────────────────────────────────────────────────────────┘ + │ + ┌───────────────┴───────────────┐ + ▼ ▼ +┌──────────────────────┐ ┌──────────────────────┐ +│ BPMN Metadata │ │ Project Insights │ +│ │ │ │ +│ - Process definitions│ │ - Pre-condensed │ +│ - Workflow types │ │ - Per instance │ +│ - Data schemas │ │ - Flagged anomalies │ +└──────────────────────┘ └──────────────────────┘ +``` + +--- + +## 4. Relation to Existing Research + +### 4.1 Recursive Language Models (Zhang et al., 2025) + +RLM proposes treating long contexts as external variables accessible through a REPL environment. Our approach adopts the core insight — **data as environment, not input** — but replaces arbitrary code execution with controlled tool interfaces. + +| RLM (Paper) | Our Approach | +| -------------------- | -------------------------- | +| Python REPL | Defined tool interface | +| Arbitrary code | Controlled operations | +| Generic text context | Structured BPMN + Insights | +| LLM decides chunking | Tools handle pagination | + +### 4.2 Function Calling / Tool Use + +Standard LLM tool use focuses on single-purpose functions. Our contribution is the **discovery layer**: the LLM first learns what workflow types exist, then decides which to query — enabling truly ad-hoc analysis without pre-built report logic. + +--- + +## 5. Required Tool Categories + +### 5.1 Discovery Tools + +| Tool | Input | Output | +| ------------------- | ------------ | ---------------------------------- | +| `discoverWorkflows` | period | List of workflow types with counts | +| `describeWorkflow` | workflowType | Process steps, data fields, sample | + +### 5.2 Retrieval Tools + +| Tool | Input | Output | +| --------------- | ------------------- | ---------------------------- | +| `getInsights` | type, filter, chunk | Paginated insight summaries | +| `getStatistics` | type, period | Aggregate counts and metrics | + +### 5.3 Correlation Tools + +| Tool | Input | Output | +| -------------------- | ----------------- | ---------------------------- | +| `correlateWorkflows` | typeA, typeB, key | Cross-process relationships | +| `calculateMetrics` | types[], period | KPIs spanning multiple types | + +### 5.4 Session Tools + +| Tool | Input | Output | +| ------------------- | ----------------- | ----------------------------- | +| `storeAnalysis` | category, content | Persist intermediate findings | +| `getStoredAnalyses` | — | Retrieve for final synthesis | + +--- + +## 6. Expected Benefits + +1. **Unlimited Scale:** No context window constraints; 10K or 100K instances handled identically + +2. **Ad-Hoc Flexibility:** New question types require no new code — LLM discovers relevant workflows + +3. **Cross-Process Intelligence:** Automatic correlation (e.g., complaints ↔ orders) reveals hidden patterns + +4. **Controlled Execution:** Unlike open REPL, tool interface ensures security and auditability + +5. **Incremental Enhancement:** New workflow types automatically become queryable + +--- + +## 7. Open Questions + +- **Chunking Strategy:** Fixed size vs. semantic boundaries vs. LLM-determined? +- **Caching:** How to cache intermediate analyses across similar queries? +- **Confidence:** How does the LLM signal when data is insufficient? +- **Cost Control:** Maximum tool calls per query? Budget-aware orchestration? + +--- + +## 8. Next Steps + +1. Define minimal viable tool interface (Discovery + Retrieval) +2. Prototype with single workflow type +3. Evaluate chunking strategies empirically +4. Add correlation tools +5. Benchmark against direct-context baseline + +--- + +## References + +- Zhang, A.L., Kraska, T., Khattab, O. (2025). _Recursive Language Models._ arXiv:2512.24601 +- OpenAI (2024). _Function Calling Documentation._ +- OMG (2013). _Business Process Model and Notation (BPMN) Version 2.0.2_ diff --git a/doc/RLM.pdf b/doc/RLM.pdf new file mode 100644 index 0000000000000000000000000000000000000000..d20f9ab389e1722a21a65e9d64d217ba90484f33 GIT binary patch literal 71917 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≧am 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 literal 0 HcmV?d00001 diff --git a/dynamixs-ai-app/src/main/java/ai/dynamixs/ConditionalAIAdapter.java b/dynamixs-ai-app/src/main/java/ai/dynamixs/ConditionalAIAdapter.java index b4e25aa..24a732e 100644 --- a/dynamixs-ai-app/src/main/java/ai/dynamixs/ConditionalAIAdapter.java +++ b/dynamixs-ai-app/src/main/java/ai/dynamixs/ConditionalAIAdapter.java @@ -139,7 +139,7 @@ public class ConditionalAIAdapter implements Serializable { return; } - String completionResult = llmService.postPromptCompletion(jsonPrompt, llmAPIEndpoint); + String completionResult = llmService.postPromptCompletion(imixsAIContextHandler, llmAPIEndpoint); if (llmAPIDebug) { logger.info("│ ├── ⚙ Completion Request conditional expression..."); } diff --git a/dynamixs-ai-app/src/main/java/ai/dynamixs/cognition/CognitoEventService.java b/dynamixs-ai-app/src/main/java/ai/dynamixs/cognition/CognitoEventService.java index 2117337..6ef46eb 100644 --- a/dynamixs-ai-app/src/main/java/ai/dynamixs/cognition/CognitoEventService.java +++ b/dynamixs-ai-app/src/main/java/ai/dynamixs/cognition/CognitoEventService.java @@ -38,7 +38,6 @@ import jakarta.ejb.Stateless; import jakarta.ejb.TransactionAttribute; import jakarta.ejb.TransactionAttributeType; import jakarta.inject.Inject; -import jakarta.json.JsonObject; import jakarta.persistence.OptimisticLockException; /** @@ -163,9 +162,10 @@ public class CognitoEventService { if (llmPrompt != null && !llmPrompt.isBlank()) { String llmAPIEndpoint = serviceEndpoint.get(); // postPromptCompletion - JsonObject jsonPrompt = llmService.buildJsonPromptObjectV1(llmPrompt, false, - workitem.getItemValueString("ai.prompt.prompt_options")); - String completionResult = llmService.postPromptCompletion(jsonPrompt, llmAPIEndpoint); + // JsonObject jsonPrompt = + // llmService.buildJsonPromptObjectV1(imixsAIContextHandler); + String completionResult = llmService.postPromptCompletion(imixsAIContextHandler, + llmAPIEndpoint); // process the ai.result.... if (llmAPIDebug) { logger.info("===> Completion Result: "); diff --git a/dynamixs-ai-app/src/main/java/ai/dynamixs/cognition/CognitoPlugin.java b/dynamixs-ai-app/src/main/java/ai/dynamixs/cognition/CognitoPlugin.java index f6612c7..a2e0364 100644 --- a/dynamixs-ai-app/src/main/java/ai/dynamixs/cognition/CognitoPlugin.java +++ b/dynamixs-ai-app/src/main/java/ai/dynamixs/cognition/CognitoPlugin.java @@ -113,7 +113,7 @@ public class CognitoPlugin extends org.imixs.ai.rag.RAGIndexPlugin { String result = "\n" + // "\n" + // - "\t{\"n_predict\": 4096, \"temperature\": 0.0}\n" + // + "\t{\"n_predict\": 2048, \"temperature\": 0.2, \"top_p\": 0.9}\n" + // "\n" + // " customer.country customer.zip - + $workflowgroup - $workflowstatus]]> @@ -986,6 +985,7 @@ result.isValid=true; ^.+\.eml$ ]]]]> +FINE ]]> @@ -1286,7 +1286,7 @@ Address: customer.country customer.zip - {"n_predict": 4096, "temperature": 0.3, "top_p": 0.9} + {"n_predict": 2096, "temperature": 0.3, "top_p": 0.9} +FINE ]]> @@ -2265,7 +2266,7 @@ No general advice. Only project-specific facts and insights.]]]]> ai.chronicle.summary ]]]]> - + FINE ]]> @@ -2553,13 +2554,26 @@ Und erst am Ende alles zurück ins RAG - inklusive der Anfrage des Kunden und de - {"n_predict": 4096, "temperature": 0.3, "top_p": 0.9} + {"n_predict": 255, "temperature": 0.2, "top_p": 0.9} +YYou are a sales advisor. A new workflow is starting for this customer. + +Create a short briefing in this exact format: + +**Customer:** +[1-2 bullet points: key facts about this customer] + +**Opportunities:** +[1-2 bullet points, or "None identified." if nothing relevant] + +**Risks:** +[1-2 bullet points, or "None identified." if nothing relevant] + +Rules: +- Each bullet point: 1 sentence only (max 25 words) +- No sub-bullets or nested lists +- No recommendations or action items +- Customer-specific facts only]]]]> Created: $created -ai.workflow.summary +$workflowabstract ----------------------------------------------------------------------------- ]]]]> @@ -3083,10 +3097,10 @@ Create a short briefing (3-5 bullet points): - - - - + + + + @@ -3113,14 +3127,14 @@ Create a short briefing (3-5 bullet points): - - + + - - + + diff --git a/workflow/imixs-ai/posteingang-de-3.0.0.bpmn b/workflow/imixs-ai/posteingang-de-3.0.0.bpmn index c52c682..6f93a2c 100644 --- a/workflow/imixs-ai/posteingang-de-3.0.0.bpmn +++ b/workflow/imixs-ai/posteingang-de-3.0.0.bpmn @@ -585,6 +585,7 @@ Note: Output only the XML object! Don't add explanations or comments. Use only t invoice.summary]]]]> + FINE ]]> @@ -928,6 +929,7 @@ Format numbers and amounts according to ISO 4217 ^.+\.([pP][dD][fF])$]]]]> + FINE ]]> @@ -1486,8 +1488,8 @@ Erstelle eine kurze Zusammenfassung der wichtigsten Elemente dieses Vertrags. ]]]]> - ^.+\.([pP][dD][fF])$]]]]> - + ^.+\.([pP][dD][fF])$]]]]> + FINE ]]> diff --git a/workflow/imixs-ai/prompts/contract-summarize-de.xml b/workflow/imixs-ai/prompts/contract-summarize-de.xml index ddd1d93..c9349ee 100644 --- a/workflow/imixs-ai/prompts/contract-summarize-de.xml +++ b/workflow/imixs-ai/prompts/contract-summarize-de.xml @@ -13,6 +13,6 @@ Erstelle eine kurze Zusammenfassung der wichtigsten Elemente dieses Vertrags. ]]> - ^.+\.([pP][dD][fF])$]]> - + ^.+\.([pP][dD][fF])$]]> + FINE \ No newline at end of file diff --git a/workflow/imixs-ai/prompts/invoice-extract-en.xml b/workflow/imixs-ai/prompts/invoice-extract-en.xml index b99a71a..0cf81da 100644 --- a/workflow/imixs-ai/prompts/invoice-extract-en.xml +++ b/workflow/imixs-ai/prompts/invoice-extract-en.xml @@ -33,4 +33,5 @@ Note: Output only the XML object! Don't add explanations or comments. Use only t invoice.summary]]> + FINE \ No newline at end of file diff --git a/workflow/imixs-ai/prompts/invoice-summarize-en.xml b/workflow/imixs-ai/prompts/invoice-summarize-en.xml index fd4eff9..9599099 100644 --- a/workflow/imixs-ai/prompts/invoice-summarize-en.xml +++ b/workflow/imixs-ai/prompts/invoice-summarize-en.xml @@ -22,4 +22,5 @@ Format numbers and amounts according to ISO 4217 ^.+\.([pP][dD][fF])$]]> + FINE \ No newline at end of file