docu, demos

This commit is contained in:
Ralph Soika 2026-01-06 16:24:46 +01:00
parent 23e09d4600
commit 5b663e69f4
11 changed files with 626 additions and 29 deletions

368
doc/PROMTS/test.json Normal file
View file

@ -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 %
}

211
doc/RLM.md Normal file
View file

@ -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_

BIN
doc/RLM.pdf Normal file

Binary file not shown.

View file

@ -139,7 +139,7 @@ public class ConditionalAIAdapter implements Serializable {
return; return;
} }
String completionResult = llmService.postPromptCompletion(jsonPrompt, llmAPIEndpoint); String completionResult = llmService.postPromptCompletion(imixsAIContextHandler, llmAPIEndpoint);
if (llmAPIDebug) { if (llmAPIDebug) {
logger.info("│ ├── ⚙ Completion Request conditional expression..."); logger.info("│ ├── ⚙ Completion Request conditional expression...");
} }

View file

@ -38,7 +38,6 @@ import jakarta.ejb.Stateless;
import jakarta.ejb.TransactionAttribute; import jakarta.ejb.TransactionAttribute;
import jakarta.ejb.TransactionAttributeType; import jakarta.ejb.TransactionAttributeType;
import jakarta.inject.Inject; import jakarta.inject.Inject;
import jakarta.json.JsonObject;
import jakarta.persistence.OptimisticLockException; import jakarta.persistence.OptimisticLockException;
/** /**
@ -163,9 +162,10 @@ public class CognitoEventService {
if (llmPrompt != null && !llmPrompt.isBlank()) { if (llmPrompt != null && !llmPrompt.isBlank()) {
String llmAPIEndpoint = serviceEndpoint.get(); String llmAPIEndpoint = serviceEndpoint.get();
// postPromptCompletion // postPromptCompletion
JsonObject jsonPrompt = llmService.buildJsonPromptObjectV1(llmPrompt, false, // JsonObject jsonPrompt =
workitem.getItemValueString("ai.prompt.prompt_options")); // llmService.buildJsonPromptObjectV1(imixsAIContextHandler);
String completionResult = llmService.postPromptCompletion(jsonPrompt, llmAPIEndpoint); String completionResult = llmService.postPromptCompletion(imixsAIContextHandler,
llmAPIEndpoint);
// process the ai.result.... // process the ai.result....
if (llmAPIDebug) { if (llmAPIDebug) {
logger.info("===> Completion Result: "); logger.info("===> Completion Result: ");

View file

@ -113,7 +113,7 @@ public class CognitoPlugin extends org.imixs.ai.rag.RAGIndexPlugin {
String result = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + // String result = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + //
"<PromptDefinition>\n" + // "<PromptDefinition>\n" + //
"\t<prompt_options>{\"n_predict\": 4096, \"temperature\": 0.0}</prompt_options>\n" + // "\t<prompt_options>{\"n_predict\": 2048, \"temperature\": 0.2, \"top_p\": 0.9}</prompt_options>\n" + //
"\n" + // "\n" + //
" <prompt role=\"system\"><![CDATA[\n" + // " <prompt role=\"system\"><![CDATA[\n" + //
"You are a process analyst. A workflow has just been completed.\n" + // "You are a process analyst. A workflow has just been completed.\n" + //

View file

@ -217,8 +217,7 @@ Address: <itemvalue>customer.country</itemvalue> <itemvalue>customer.zip</itemva
<imixs:value><![CDATA[workitem]]></imixs:value> <imixs:value><![CDATA[workitem]]></imixs:value>
</imixs:item> </imixs:item>
<imixs:item name="txtworkflowabstract" type="xs:string"> <imixs:item name="txtworkflowabstract" type="xs:string">
<imixs:value><![CDATA[ <imixs:value/>
]]></imixs:value>
</imixs:item> </imixs:item>
</bpmn2:extensionElements> </bpmn2:extensionElements>
<bpmn2:documentation id="Documentation_27"><![CDATA[<textblock><itemvalue>$workflowgroup</itemvalue> - <itemvalue>$workflowstatus</itemvalue></textblock>]]></bpmn2:documentation> <bpmn2:documentation id="Documentation_27"><![CDATA[<textblock><itemvalue>$workflowgroup</itemvalue> - <itemvalue>$workflowstatus</itemvalue></textblock>]]></bpmn2:documentation>
@ -986,6 +985,7 @@ result.isValid=true;
<FILECONTEXT>^.+\.eml$</FILECONTEXT> <FILECONTEXT>^.+\.eml$</FILECONTEXT>
]]]]><![CDATA[> ]]]]><![CDATA[>
</prompt> </prompt>
<loglevel>FINE</loglevel>
</PromptDefinition> ]]></bpmn2:documentation> </PromptDefinition> ]]></bpmn2:documentation>
</bpmn2:dataObject> </bpmn2:dataObject>
<bpmn2:sequenceFlow id="sequenceFlow_4DUFiA" sourceRef="event_z9ZfGA" targetRef="task_ol2R9A"> <bpmn2:sequenceFlow id="sequenceFlow_4DUFiA" sourceRef="event_z9ZfGA" targetRef="task_ol2R9A">
@ -1286,7 +1286,7 @@ Address: <itemvalue>customer.country</itemvalue> <itemvalue>customer.zip</itemva
<bpmn2:dataObject id="dataObject_iq4agg" imixs:datatype="prompt-data" name="Prompt"> <bpmn2:dataObject id="dataObject_iq4agg" imixs:datatype="prompt-data" name="Prompt">
<bpmn2:documentation id="documentation_fFWo7Q"><![CDATA[<?xml version="1.0" encoding="UTF-8"?> <bpmn2:documentation id="documentation_fFWo7Q"><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
<PromptDefinition> <PromptDefinition>
<prompt_options>{"n_predict": 4096, "temperature": 0.3, "top_p": 0.9}</prompt_options> <prompt_options>{"n_predict": 2096, "temperature": 0.3, "top_p": 0.9}</prompt_options>
<prompt role="user"><![CDATA[ <prompt role="user"><![CDATA[
# Current Task: Create a new Offer for the customer based on the preselected product list. # Current Task: Create a new Offer for the customer based on the preselected product list.
@ -1315,6 +1315,7 @@ Product Details:
]]]]><![CDATA[> ]]]]><![CDATA[>
</prompt> </prompt>
<loglevel>FINE</loglevel>
</PromptDefinition> ]]></bpmn2:documentation> </PromptDefinition> ]]></bpmn2:documentation>
</bpmn2:dataObject> </bpmn2:dataObject>
<bpmn2:dataObject id="dataObject_u4ZytA" imixs:datatype="form-data" name="Order Form"> <bpmn2:dataObject id="dataObject_u4ZytA" imixs:datatype="form-data" name="Order Form">
@ -2265,7 +2266,7 @@ No general advice. Only project-specific facts and insights.]]]]><![CDATA[>
<prompt role="user"><![CDATA[ <prompt role="user"><![CDATA[
<itemvalue>ai.chronicle.summary</itemvalue> ]]]]><![CDATA[> <itemvalue>ai.chronicle.summary</itemvalue> ]]]]><![CDATA[>
</prompt> </prompt>
<logging>FINE</logging>
</PromptDefinition> ]]></bpmn2:documentation> </PromptDefinition> ]]></bpmn2:documentation>
<bpmn2:dataState id="dataState_9qGGUQ"/> <bpmn2:dataState id="dataState_9qGGUQ"/>
</bpmn2:dataObject> </bpmn2:dataObject>
@ -2553,13 +2554,26 @@ Und erst am Ende alles zurück ins RAG - inklusive der Anfrage des Kunden und de
<bpmn2:dataObject id="dataObject_Nw0oQQ" imixs:datatype="prompt-data" name="Prompt"> <bpmn2:dataObject id="dataObject_Nw0oQQ" imixs:datatype="prompt-data" name="Prompt">
<bpmn2:documentation id="documentation_8MvgVA"><![CDATA[<?xml version="1.0" encoding="UTF-8"?> <bpmn2:documentation id="documentation_8MvgVA"><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
<PromptDefinition> <PromptDefinition>
<prompt_options>{"n_predict": 4096, "temperature": 0.3, "top_p": 0.9}</prompt_options> <prompt_options>{"n_predict": 255, "temperature": 0.2, "top_p": 0.9}</prompt_options>
<prompt role="system"><![CDATA[ <prompt role="system"><![CDATA[
You are a sales advisor. A new workflow is starting for this customer. YYou are a sales advisor. A new workflow is starting for this customer.
Create a short briefing (3-5 bullet points):
- What should the sales rep know about this customer? Create a short briefing in this exact format:
- Any open issues or opportunities?
- What to be careful about?]]]]><![CDATA[> **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]]]]><![CDATA[>
</prompt> </prompt>
<prompt role="user"><![CDATA[ <prompt role="user"><![CDATA[
@ -2569,7 +2583,7 @@ Create a short briefing (3-5 bullet points):
<for-each-ref item="order.history.ref"> <for-each-ref item="order.history.ref">
Created: <itemvalue>$created</itemvalue> Created: <itemvalue>$created</itemvalue>
<itemvalue>ai.workflow.summary</itemvalue> <itemvalue>$workflowabstract</itemvalue>
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
</for-each-ref>]]]]><![CDATA[> </for-each-ref>]]]]><![CDATA[>
@ -3083,10 +3097,10 @@ Create a short briefing (3-5 bullet points):
<di:waypoint x="1493.0" y="360.0"/> <di:waypoint x="1493.0" y="360.0"/>
</bpmndi:BPMNEdge> </bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="association_GNNvXA" id="BPMNEdge_pyLAgg" sourceElement="BPMNShape_4ZBosQ" targetElement="BPMNShape_wu0GaA"> <bpmndi:BPMNEdge bpmnElement="association_GNNvXA" id="BPMNEdge_pyLAgg" sourceElement="BPMNShape_4ZBosQ" targetElement="BPMNShape_wu0GaA">
<di:waypoint x="1530.0" y="400.0"/> <di:waypoint x="1528.0" y="400.0"/>
<di:waypoint x="1530.0" y="380.0"/> <di:waypoint x="1528.0" y="380.0"/>
<di:waypoint x="1527.0" y="380.0"/> <di:waypoint x="1525.0" y="380.0"/>
<di:waypoint x="1527.0" y="360.0"/> <di:waypoint x="1525.0" y="360.0"/>
</bpmndi:BPMNEdge> </bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_vd940Q" id="BPMNEdge_6cYQvQ" sourceElement="BPMNShape_GGKSew" targetElement="BPMNShape_RXlCww"> <bpmndi:BPMNEdge bpmnElement="sequenceFlow_vd940Q" id="BPMNEdge_6cYQvQ" sourceElement="BPMNShape_GGKSew" targetElement="BPMNShape_RXlCww">
<di:waypoint x="493.0" y="335.0"/> <di:waypoint x="493.0" y="335.0"/>
@ -3113,14 +3127,14 @@ Create a short briefing (3-5 bullet points):
<di:waypoint x="1717.0" y="335.0"/> <di:waypoint x="1717.0" y="335.0"/>
</bpmndi:BPMNEdge> </bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_hkBSvg" id="BPMNEdge_i0Xtag" sourceElement="BPMNShape_mijagQ" targetElement="BPMNShape_GaaSuQ"> <bpmndi:BPMNEdge bpmnElement="sequenceFlow_hkBSvg" id="BPMNEdge_i0Xtag" sourceElement="BPMNShape_mijagQ" targetElement="BPMNShape_GaaSuQ">
<di:waypoint x="920.0" y="175.0"/> <di:waypoint x="917.0" y="185.0"/>
<di:waypoint x="683.0" y="175.0"/> <di:waypoint x="683.0" y="185.0"/>
<di:waypoint x="683.0" y="310.0"/> <di:waypoint x="683.0" y="310.0"/>
</bpmndi:BPMNEdge> </bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sequenceFlow_BM0t3w" id="BPMNEdge_IilYsw" sourceElement="BPMNShape_wu0GaA" targetElement="BPMNShape_mijagQ"> <bpmndi:BPMNEdge bpmnElement="sequenceFlow_BM0t3w" id="BPMNEdge_IilYsw" sourceElement="BPMNShape_wu0GaA" targetElement="BPMNShape_mijagQ">
<di:waypoint x="1532.0" y="310.0"/> <di:waypoint x="1532.0" y="310.0"/>
<di:waypoint x="1532.0" y="175.0"/> <di:waypoint x="1532.0" y="185.0"/>
<di:waypoint x="950.0" y="175.0"/> <di:waypoint x="953.0" y="185.0"/>
</bpmndi:BPMNEdge> </bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="association_XvFOIw" id="BPMNEdge_i0LSJA" sourceElement="BPMNShape_DataObject_1" targetElement="BPMNShape_Participant_1"> <bpmndi:BPMNEdge bpmnElement="association_XvFOIw" id="BPMNEdge_i0LSJA" sourceElement="BPMNShape_DataObject_1" targetElement="BPMNShape_Participant_1">
<di:waypoint x="277.5" y="235.0"/> <di:waypoint x="277.5" y="235.0"/>

View file

@ -585,6 +585,7 @@ Note: Output only the XML object! Don't add explanations or comments. Use only t
</prompt> </prompt>
<prompt role="user"><![CDATA[<itemvalue>invoice.summary</itemvalue>]]]]><![CDATA[></prompt> <prompt role="user"><![CDATA[<itemvalue>invoice.summary</itemvalue>]]]]><![CDATA[></prompt>
<loglevel>FINE</loglevel>
</PromptDefinition> ]]></bpmn2:documentation> </PromptDefinition> ]]></bpmn2:documentation>
</bpmn2:dataObject> </bpmn2:dataObject>
<bpmn2:association id="association_Xrb1Cg" sourceRef="event_yQLmNA" targetRef="dataObject_HHM58Q"> <bpmn2:association id="association_Xrb1Cg" sourceRef="event_yQLmNA" targetRef="dataObject_HHM58Q">
@ -928,6 +929,7 @@ Format numbers and amounts according to ISO 4217
</prompt> </prompt>
<prompt role="user"><![CDATA[<FILECONTEXT>^.+\.([pP][dD][fF])$</FILECONTEXT>]]]]><![CDATA[></prompt> <prompt role="user"><![CDATA[<FILECONTEXT>^.+\.([pP][dD][fF])$</FILECONTEXT>]]]]><![CDATA[></prompt>
<loglevel>FINE</loglevel>
</PromptDefinition> ]]></bpmn2:documentation> </PromptDefinition> ]]></bpmn2:documentation>
</bpmn2:dataObject> </bpmn2:dataObject>
<bpmn2:association id="association_IKW0SQ" sourceRef="dataObject_KPUiiw" targetRef="event_4DNGzg"> <bpmn2:association id="association_IKW0SQ" sourceRef="dataObject_KPUiiw" targetRef="event_4DNGzg">
@ -1486,8 +1488,8 @@ Erstelle eine kurze Zusammenfassung der wichtigsten Elemente dieses Vertrags.
]]]]><![CDATA[> ]]]]><![CDATA[>
</prompt> </prompt>
<prompt role="user"><![CDATA[<FILECONTEXT>^.+\.([pP][dD][fF])$</FILECONTEXT>]]]]><![CDATA[> <prompt role="user"><![CDATA[<FILECONTEXT>^.+\.([pP][dD][fF])$</FILECONTEXT>]]]]><![CDATA[></prompt>
</prompt> <loglevel>FINE</loglevel>
</PromptDefinition> ]]></bpmn2:documentation> </PromptDefinition> ]]></bpmn2:documentation>
</bpmn2:dataObject> </bpmn2:dataObject>
<bpmn2:association id="association_je321g" sourceRef="event_b9NNXw" targetRef="dataObject_QalZ1A"> <bpmn2:association id="association_je321g" sourceRef="event_b9NNXw" targetRef="dataObject_QalZ1A">

View file

@ -13,6 +13,6 @@ Erstelle eine kurze Zusammenfassung der wichtigsten Elemente dieses Vertrags.
]]> ]]>
</prompt> </prompt>
<prompt role="user"><![CDATA[<FILECONTEXT>^.+\.([pP][dD][fF])$</FILECONTEXT>]]> <prompt role="user"><![CDATA[<FILECONTEXT>^.+\.([pP][dD][fF])$</FILECONTEXT>]]></prompt>
</prompt> <loglevel>FINE</loglevel>
</PromptDefinition> </PromptDefinition>

View file

@ -33,4 +33,5 @@ Note: Output only the XML object! Don't add explanations or comments. Use only t
</prompt> </prompt>
<prompt role="user"><![CDATA[<itemvalue>invoice.summary</itemvalue>]]></prompt> <prompt role="user"><![CDATA[<itemvalue>invoice.summary</itemvalue>]]></prompt>
<loglevel>FINE</loglevel>
</PromptDefinition> </PromptDefinition>

View file

@ -22,4 +22,5 @@ Format numbers and amounts according to ISO 4217
</prompt> </prompt>
<prompt role="user"><![CDATA[<FILECONTEXT>^.+\.([pP][dD][fF])$</FILECONTEXT>]]></prompt> <prompt role="user"><![CDATA[<FILECONTEXT>^.+\.([pP][dD][fF])$</FILECONTEXT>]]></prompt>
<loglevel>FINE</loglevel>
</PromptDefinition> </PromptDefinition>